@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
package/dist/lib/node/index.cjs
CHANGED
@@ -64,6 +64,7 @@ __export(node_exports, {
|
|
64
64
|
createDataExtensions: () => createDataExtensions,
|
65
65
|
createEditorAction: () => createEditorAction,
|
66
66
|
createEditorActionGroup: () => createEditorActionGroup,
|
67
|
+
createEditorStateStore: () => createEditorStateStore,
|
67
68
|
createEditorStateTransaction: () => createEditorStateTransaction,
|
68
69
|
createElement: () => createElement,
|
69
70
|
createExternalCommentSync: () => createExternalCommentSync,
|
@@ -118,7 +119,7 @@ __export(node_exports, {
|
|
118
119
|
setStyle: () => setStyle,
|
119
120
|
singleValueFacet: () => singleValueFacet,
|
120
121
|
stackItemContentEditorClassNames: () => stackItemContentEditorClassNames,
|
121
|
-
stackItemContentToolbarClassNames: () =>
|
122
|
+
stackItemContentToolbarClassNames: () => stackItemContentToolbarClassNames2,
|
122
123
|
table: () => table,
|
123
124
|
tags: () => import_highlight.tags,
|
124
125
|
textRange: () => textRange,
|
@@ -196,90 +197,95 @@ var import_state8 = require("@codemirror/state");
|
|
196
197
|
var import_view9 = require("@codemirror/view");
|
197
198
|
var import_state9 = require("@codemirror/state");
|
198
199
|
var import_view10 = require("@codemirror/view");
|
199
|
-
var import_commands = require("@codemirror/commands");
|
200
|
-
var import_state10 = require("@codemirror/state");
|
201
200
|
var import_view11 = require("@codemirror/view");
|
201
|
+
var import_language = require("@codemirror/language");
|
202
|
+
var import_state10 = require("@codemirror/state");
|
203
|
+
var import_view12 = require("@codemirror/view");
|
204
|
+
var import_commands = require("@codemirror/commands");
|
205
|
+
var import_state11 = require("@codemirror/state");
|
206
|
+
var import_view13 = require("@codemirror/view");
|
202
207
|
var import_lodash3 = __toESM(require("lodash.sortby"));
|
203
208
|
var import_react4 = require("react");
|
204
209
|
var import_async3 = require("@dxos/async");
|
205
210
|
var import_log4 = require("@dxos/log");
|
206
211
|
var import_util2 = require("@dxos/util");
|
207
|
-
var import_state11 = require("@codemirror/state");
|
208
|
-
var import_view12 = require("@codemirror/view");
|
209
|
-
var import_async4 = require("@dxos/async");
|
210
|
-
var import_language = require("@codemirror/language");
|
211
212
|
var import_state12 = require("@codemirror/state");
|
212
|
-
var
|
213
|
+
var import_view14 = require("@codemirror/view");
|
214
|
+
var import_async4 = require("@dxos/async");
|
215
|
+
var import_invariant3 = require("@dxos/invariant");
|
216
|
+
var import_util3 = require("@dxos/util");
|
217
|
+
var import_language2 = require("@codemirror/language");
|
218
|
+
var import_state13 = require("@codemirror/state");
|
219
|
+
var import_view15 = require("@codemirror/view");
|
213
220
|
var import_autocomplete2 = require("@codemirror/autocomplete");
|
214
221
|
var import_commands2 = require("@codemirror/commands");
|
215
|
-
var
|
222
|
+
var import_language3 = require("@codemirror/language");
|
216
223
|
var import_search = require("@codemirror/search");
|
217
|
-
var
|
224
|
+
var import_state14 = require("@codemirror/state");
|
218
225
|
var import_theme_one_dark = require("@codemirror/theme-one-dark");
|
219
|
-
var
|
226
|
+
var import_view16 = require("@codemirror/view");
|
220
227
|
var import_lodash4 = __toESM(require("lodash.defaultsdeep"));
|
221
228
|
var import_lodash5 = __toESM(require("lodash.merge"));
|
222
229
|
var import_display_name = require("@dxos/display-name");
|
223
230
|
var import_log5 = require("@dxos/log");
|
224
|
-
var
|
225
|
-
var
|
226
|
-
var import_view15 = require("@codemirror/view");
|
227
|
-
var import_language3 = require("@codemirror/language");
|
228
|
-
var import_view16 = require("@codemirror/view");
|
229
|
-
var import_react5 = __toESM(require("react"));
|
230
|
-
var import_async5 = require("@dxos/async");
|
231
|
-
var import_react_ui3 = require("@dxos/react-ui");
|
231
|
+
var import_util4 = require("@dxos/util");
|
232
|
+
var import_state15 = require("@codemirror/state");
|
232
233
|
var import_view17 = require("@codemirror/view");
|
233
|
-
var import_autocomplete3 = require("@codemirror/autocomplete");
|
234
234
|
var import_language4 = require("@codemirror/language");
|
235
|
-
var import_state15 = require("@codemirror/state");
|
236
235
|
var import_view18 = require("@codemirror/view");
|
236
|
+
var import_react5 = __toESM(require("react"));
|
237
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
238
|
+
var import_view19 = require("@codemirror/view");
|
239
|
+
var import_autocomplete3 = require("@codemirror/autocomplete");
|
240
|
+
var import_language5 = require("@codemirror/language");
|
241
|
+
var import_state16 = require("@codemirror/state");
|
242
|
+
var import_view20 = require("@codemirror/view");
|
237
243
|
var import_react6 = require("react");
|
238
244
|
var import_autocomplete4 = require("@codemirror/autocomplete");
|
239
245
|
var import_commands3 = require("@codemirror/commands");
|
240
246
|
var import_lang_markdown2 = require("@codemirror/lang-markdown");
|
241
|
-
var
|
247
|
+
var import_language6 = require("@codemirror/language");
|
242
248
|
var import_language_data = require("@codemirror/language-data");
|
243
249
|
var import_lint = require("@codemirror/lint");
|
244
|
-
var
|
250
|
+
var import_view21 = require("@codemirror/view");
|
245
251
|
var import_lang_markdown3 = require("@codemirror/lang-markdown");
|
246
|
-
var
|
252
|
+
var import_language7 = require("@codemirror/language");
|
247
253
|
var import_highlight2 = require("@lezer/highlight");
|
248
254
|
var import_markdown = require("@lezer/markdown");
|
249
|
-
var import_language7 = require("@codemirror/language");
|
250
|
-
var import_state16 = require("@codemirror/state");
|
251
255
|
var import_language8 = require("@codemirror/language");
|
252
256
|
var import_state17 = require("@codemirror/state");
|
253
|
-
var import_view20 = require("@codemirror/view");
|
254
|
-
var import_invariant3 = require("@dxos/invariant");
|
255
|
-
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
256
257
|
var import_language9 = require("@codemirror/language");
|
257
258
|
var import_state18 = require("@codemirror/state");
|
258
|
-
var
|
259
|
+
var import_view22 = require("@codemirror/view");
|
260
|
+
var import_invariant4 = require("@dxos/invariant");
|
261
|
+
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
259
262
|
var import_language10 = require("@codemirror/language");
|
260
263
|
var import_state19 = require("@codemirror/state");
|
261
|
-
var import_view22 = require("@codemirror/view");
|
262
264
|
var import_view23 = require("@codemirror/view");
|
263
265
|
var import_language11 = require("@codemirror/language");
|
264
266
|
var import_state20 = require("@codemirror/state");
|
265
267
|
var import_view24 = require("@codemirror/view");
|
266
|
-
var import_language12 = require("@codemirror/language");
|
267
268
|
var import_view25 = require("@codemirror/view");
|
269
|
+
var import_language12 = require("@codemirror/language");
|
270
|
+
var import_state21 = require("@codemirror/state");
|
271
|
+
var import_view26 = require("@codemirror/view");
|
272
|
+
var import_language13 = require("@codemirror/language");
|
273
|
+
var import_view27 = require("@codemirror/view");
|
268
274
|
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
269
275
|
var import_autocomplete5 = require("@codemirror/autocomplete");
|
270
276
|
var import_log6 = require("@dxos/log");
|
271
|
-
var
|
277
|
+
var import_view28 = require("@codemirror/view");
|
272
278
|
var import_codemirror_vim = require("@replit/codemirror-vim");
|
273
279
|
var import_codemirror_vscode_keymap = require("@replit/codemirror-vscode-keymap");
|
274
280
|
var import_echo_schema = require("@dxos/echo-schema");
|
275
|
-
var
|
281
|
+
var import_view29 = require("@codemirror/view");
|
276
282
|
var import_react7 = require("react");
|
277
|
-
var
|
278
|
-
var
|
283
|
+
var import_state22 = require("@codemirror/state");
|
284
|
+
var import_view30 = require("@codemirror/view");
|
279
285
|
var import_react_tabster = require("@fluentui/react-tabster");
|
280
286
|
var import_react8 = require("react");
|
281
287
|
var import_log7 = require("@dxos/log");
|
282
|
-
var
|
288
|
+
var import_util5 = require("@dxos/util");
|
283
289
|
var translationKey = "react-ui-editor";
|
284
290
|
var translations_default = [
|
285
291
|
{
|
@@ -562,7 +568,6 @@ var createViewMode = (state) => {
|
|
562
568
|
]
|
563
569
|
};
|
564
570
|
};
|
565
|
-
var stackItemContentEditorClassNames = (role) => (0, import_react_ui_theme2.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");
|
566
571
|
var stackItemContentToolbarClassNames = (role) => (0, import_react_ui_theme2.mx)("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
567
572
|
var createToolbar = ({ state, customActions, ...features }) => {
|
568
573
|
const nodes = [];
|
@@ -699,6 +704,10 @@ var defaultTheme = {
|
|
699
704
|
background: "transparent"
|
700
705
|
},
|
701
706
|
".cm-gutter": {},
|
707
|
+
".cm-gutter.cm-lineNumbers": {
|
708
|
+
paddingRight: "4px",
|
709
|
+
borderRight: "1px solid var(--dx-separator)"
|
710
|
+
},
|
702
711
|
".cm-gutter.cm-lineNumbers .cm-gutterElement": {
|
703
712
|
minWidth: "40px",
|
704
713
|
alignContent: "center"
|
@@ -708,7 +717,7 @@ var defaultTheme = {
|
|
708
717
|
*/
|
709
718
|
".cm-gutterElement": {
|
710
719
|
alignItems: "center",
|
711
|
-
fontSize: "
|
720
|
+
fontSize: "12px"
|
712
721
|
},
|
713
722
|
/**
|
714
723
|
* Line.
|
@@ -754,6 +763,7 @@ var defaultTheme = {
|
|
754
763
|
".cm-link": {
|
755
764
|
textDecorationLine: "underline",
|
756
765
|
textDecorationThickness: "1px",
|
766
|
+
textDecorationColor: "var(--dx-separator)",
|
757
767
|
textUnderlineOffset: "2px",
|
758
768
|
borderRadius: ".125rem"
|
759
769
|
},
|
@@ -880,6 +890,8 @@ var editorMonospace = import_view2.EditorView.theme({
|
|
880
890
|
}
|
881
891
|
});
|
882
892
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
893
|
+
var stackItemContentEditorClassNames = (role) => (0, import_react_ui_theme3.mx)("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");
|
894
|
+
var stackItemContentToolbarClassNames2 = (role) => (0, import_react_ui_theme3.mx)("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
883
895
|
var singleValueFacet = (defaultValue) => import_state3.Facet.define({
|
884
896
|
// Called immediately.
|
885
897
|
combine: (providers) => {
|
@@ -966,7 +978,7 @@ var logChanges = (trs) => {
|
|
966
978
|
return changes2;
|
967
979
|
}).filter(Boolean);
|
968
980
|
if (changes.length) {
|
969
|
-
import_log.log
|
981
|
+
(0, import_log.log)("changes", {
|
970
982
|
changes
|
971
983
|
}, {
|
972
984
|
F: __dxlog_file,
|
@@ -2039,18 +2051,19 @@ var commandState = import_state9.StateField.define({
|
|
2039
2051
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
2040
2052
|
dom.style.width = `${widthWithoutPadding}px`;
|
2041
2053
|
}
|
2042
|
-
options.
|
2054
|
+
options.onRenderDialog(dom, (action) => {
|
2043
2055
|
view2.dispatch({
|
2044
2056
|
effects: closeEffect.of(null)
|
2045
2057
|
});
|
2046
2058
|
if (action?.insert?.length) {
|
2059
|
+
const text = action.insert + "\n";
|
2047
2060
|
view2.dispatch({
|
2048
2061
|
changes: {
|
2049
2062
|
from: pos,
|
2050
|
-
insert:
|
2063
|
+
insert: text
|
2051
2064
|
},
|
2052
2065
|
selection: {
|
2053
|
-
anchor: pos +
|
2066
|
+
anchor: pos + text.length
|
2054
2067
|
}
|
2055
2068
|
});
|
2056
2069
|
}
|
@@ -2174,33 +2187,183 @@ var hintViewPlugin = ({ onHint }) => import_view9.ViewPlugin.fromClass(class {
|
|
2174
2187
|
import_view9.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view9.Decoration.none)
|
2175
2188
|
]
|
2176
2189
|
});
|
2190
|
+
var floatingMenu = (options) => import_view11.ViewPlugin.fromClass(class {
|
2191
|
+
constructor(view) {
|
2192
|
+
this.rafId = null;
|
2193
|
+
this.view = view;
|
2194
|
+
const container = view.scrollDOM;
|
2195
|
+
if (getComputedStyle(container).position === "static") {
|
2196
|
+
container.style.position = "relative";
|
2197
|
+
}
|
2198
|
+
this.button = document.createElement("div");
|
2199
|
+
this.button.style.position = "absolute";
|
2200
|
+
this.button.style.zIndex = "10";
|
2201
|
+
this.button.style.display = "none";
|
2202
|
+
options.onRenderMenu(this.button, () => {
|
2203
|
+
openCommand(view);
|
2204
|
+
});
|
2205
|
+
container.appendChild(this.button);
|
2206
|
+
container.addEventListener("scroll", this.scheduleUpdate);
|
2207
|
+
this.scheduleUpdate();
|
2208
|
+
}
|
2209
|
+
update(update2) {
|
2210
|
+
if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
|
2211
|
+
this.button.style.display = "none";
|
2212
|
+
} else if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(closeEffect)))) {
|
2213
|
+
this.button.style.display = "block";
|
2214
|
+
} else if (update2.selectionSet || update2.viewportChanged || update2.docChanged || update2.geometryChanged) {
|
2215
|
+
this.scheduleUpdate();
|
2216
|
+
}
|
2217
|
+
}
|
2218
|
+
scheduleUpdate() {
|
2219
|
+
if (this.rafId != null) {
|
2220
|
+
cancelAnimationFrame(this.rafId);
|
2221
|
+
}
|
2222
|
+
this.rafId = requestAnimationFrame(() => this.updateButtonPosition());
|
2223
|
+
}
|
2224
|
+
updateButtonPosition() {
|
2225
|
+
const pos = this.view.state.selection.main.head;
|
2226
|
+
const lineBlock = this.view.lineBlockAt(pos);
|
2227
|
+
const domInfo = this.view.domAtPos(lineBlock.from);
|
2228
|
+
let node = domInfo.node;
|
2229
|
+
while (node && !(node instanceof HTMLElement)) {
|
2230
|
+
node = node.parentNode;
|
2231
|
+
}
|
2232
|
+
if (!node) {
|
2233
|
+
this.button.style.display = "none";
|
2234
|
+
return;
|
2235
|
+
}
|
2236
|
+
const lineRect = node.getBoundingClientRect();
|
2237
|
+
const containerRect = this.view.scrollDOM.getBoundingClientRect();
|
2238
|
+
const offsetTop = lineRect.top - containerRect.top + this.view.scrollDOM.scrollTop;
|
2239
|
+
const offsetLeft = this.view.scrollDOM.clientWidth + this.view.scrollDOM.scrollLeft - lineRect.x;
|
2240
|
+
this.button.style.top = `${offsetTop}px`;
|
2241
|
+
this.button.style.left = `${offsetLeft}px`;
|
2242
|
+
this.button.style.display = "block";
|
2243
|
+
}
|
2244
|
+
destroy() {
|
2245
|
+
this.button.remove();
|
2246
|
+
if (this.rafId != null) {
|
2247
|
+
cancelAnimationFrame(this.rafId);
|
2248
|
+
}
|
2249
|
+
}
|
2250
|
+
});
|
2251
|
+
var preview = (options) => {
|
2252
|
+
return [
|
2253
|
+
import_state10.StateField.define({
|
2254
|
+
create: (state) => buildDecorations(state, options),
|
2255
|
+
update: (_, tr) => buildDecorations(tr.state, options),
|
2256
|
+
// TODO(burdon): Make atomic.
|
2257
|
+
provide: (field) => import_view12.EditorView.decorations.from(field)
|
2258
|
+
})
|
2259
|
+
];
|
2260
|
+
};
|
2261
|
+
var buildDecorations = (state, options) => {
|
2262
|
+
const builder = new import_state10.RangeSetBuilder();
|
2263
|
+
(0, import_language.syntaxTree)(state).iterate({
|
2264
|
+
enter: (node) => {
|
2265
|
+
if (node.name === "Link") {
|
2266
|
+
const urlNode = node.node.getChild("URL");
|
2267
|
+
if (urlNode) {
|
2268
|
+
const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
|
2269
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
2270
|
+
builder.add(node.from, node.to, import_view12.Decoration.replace({
|
2271
|
+
block: true,
|
2272
|
+
widget: new PreviewWidget(options.onRenderPreview, url, text)
|
2273
|
+
}));
|
2274
|
+
}
|
2275
|
+
}
|
2276
|
+
}
|
2277
|
+
});
|
2278
|
+
return builder.finish();
|
2279
|
+
};
|
2280
|
+
var PreviewWidget = class extends import_view12.WidgetType {
|
2281
|
+
constructor(_onRenderPreview, _url, _text) {
|
2282
|
+
super();
|
2283
|
+
this._onRenderPreview = _onRenderPreview;
|
2284
|
+
this._url = _url;
|
2285
|
+
this._text = _text;
|
2286
|
+
}
|
2287
|
+
eq(other) {
|
2288
|
+
return this._url === other._url;
|
2289
|
+
}
|
2290
|
+
toDOM(view) {
|
2291
|
+
const root = document.createElement("div");
|
2292
|
+
root.classList.add("cm-preview");
|
2293
|
+
this._onRenderPreview(root, {
|
2294
|
+
url: this._url,
|
2295
|
+
text: this._text
|
2296
|
+
});
|
2297
|
+
return root;
|
2298
|
+
}
|
2299
|
+
};
|
2177
2300
|
var command = (options) => {
|
2178
2301
|
return [
|
2179
2302
|
commandConfig.of(options),
|
2180
2303
|
commandState,
|
2181
2304
|
import_view8.keymap.of(commandKeyBindings),
|
2305
|
+
preview(options),
|
2306
|
+
floatingMenu(options),
|
2182
2307
|
hintViewPlugin(options),
|
2183
2308
|
import_view8.EditorView.focusChangeEffect.of((_, focusing) => {
|
2184
2309
|
return focusing ? closeEffect.of(null) : null;
|
2310
|
+
}),
|
2311
|
+
import_view8.EditorView.theme({
|
2312
|
+
".cm-tooltip": {
|
2313
|
+
background: "transparent"
|
2314
|
+
},
|
2315
|
+
".cm-preview": {
|
2316
|
+
marginLeft: "-1rem",
|
2317
|
+
marginRight: "-1rem",
|
2318
|
+
padding: "1rem",
|
2319
|
+
borderRadius: "1rem",
|
2320
|
+
background: "var(--dx-modalSurface)",
|
2321
|
+
border: "1px solid var(--dx-separator)"
|
2322
|
+
}
|
2185
2323
|
})
|
2186
2324
|
];
|
2187
2325
|
};
|
2326
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
|
2188
2327
|
var documentId = singleValueFacet();
|
2189
2328
|
var stateRestoreAnnotation = "dxos.org/cm/state-restore";
|
2190
2329
|
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
2191
2330
|
return {
|
2192
2331
|
selection,
|
2193
2332
|
scrollIntoView: !scrollTo,
|
2194
|
-
effects: scrollTo ?
|
2333
|
+
effects: scrollTo ? import_view14.EditorView.scrollIntoView(scrollTo, {
|
2195
2334
|
yMargin: 96
|
2196
2335
|
}) : void 0,
|
2197
|
-
annotations:
|
2336
|
+
annotations: import_state12.Transaction.userEvent.of(stateRestoreAnnotation)
|
2198
2337
|
};
|
2199
2338
|
};
|
2200
|
-
var
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
2339
|
+
var createEditorStateStore = (keyPrefix) => ({
|
2340
|
+
getState: (id) => {
|
2341
|
+
(0, import_invariant3.invariant)(id, void 0, {
|
2342
|
+
F: __dxlog_file6,
|
2343
|
+
L: 47,
|
2344
|
+
S: void 0,
|
2345
|
+
A: [
|
2346
|
+
"id",
|
2347
|
+
""
|
2348
|
+
]
|
2349
|
+
});
|
2350
|
+
const state = localStorage.getItem(`${keyPrefix}/${id}`);
|
2351
|
+
return state ? JSON.parse(state) : void 0;
|
2352
|
+
},
|
2353
|
+
setState: (id, state) => {
|
2354
|
+
(0, import_invariant3.invariant)(id, void 0, {
|
2355
|
+
F: __dxlog_file6,
|
2356
|
+
L: 53,
|
2357
|
+
S: void 0,
|
2358
|
+
A: [
|
2359
|
+
"id",
|
2360
|
+
""
|
2361
|
+
]
|
2362
|
+
});
|
2363
|
+
localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
|
2364
|
+
}
|
2365
|
+
});
|
2366
|
+
var selectionState = ({ getState, setState } = {}) => {
|
2204
2367
|
const setStateDebounced = (0, import_async4.debounce)(setState, 1e3);
|
2205
2368
|
return [
|
2206
2369
|
// TODO(burdon): Track scrolling (currently only updates when cursor moves).
|
@@ -2209,46 +2372,48 @@ var selectionState = (state = {}) => {
|
|
2209
2372
|
// setStateDebounced(id, {});
|
2210
2373
|
// },
|
2211
2374
|
// }),
|
2212
|
-
|
2375
|
+
import_view14.EditorView.updateListener.of(({ view, transactions }) => {
|
2213
2376
|
const id = view.state.facet(documentId);
|
2214
2377
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
2215
2378
|
return;
|
2216
2379
|
}
|
2217
|
-
|
2218
|
-
|
2219
|
-
|
2220
|
-
|
2221
|
-
|
2222
|
-
if (pos !== null) {
|
2223
|
-
const { anchor, head } = view.state.selection.main;
|
2224
|
-
setStateDebounced(id, {
|
2225
|
-
scrollTo: pos,
|
2226
|
-
selection: {
|
2227
|
-
anchor,
|
2228
|
-
head
|
2229
|
-
}
|
2380
|
+
if (setState) {
|
2381
|
+
const { scrollTop } = view.scrollDOM;
|
2382
|
+
const pos = view.posAtCoords({
|
2383
|
+
x: 0,
|
2384
|
+
y: scrollTop
|
2230
2385
|
});
|
2386
|
+
if (pos !== null) {
|
2387
|
+
const { anchor, head } = view.state.selection.main;
|
2388
|
+
setStateDebounced(id, {
|
2389
|
+
scrollTo: pos,
|
2390
|
+
selection: {
|
2391
|
+
anchor,
|
2392
|
+
head
|
2393
|
+
}
|
2394
|
+
});
|
2395
|
+
}
|
2231
2396
|
}
|
2232
2397
|
}),
|
2233
|
-
|
2398
|
+
getState && import_view14.keymap.of([
|
2234
2399
|
{
|
2235
2400
|
key: "ctrl-r",
|
2236
2401
|
run: (view) => {
|
2237
|
-
const
|
2238
|
-
if (
|
2239
|
-
view.dispatch(createEditorStateTransaction(
|
2402
|
+
const state = getState(view.state.facet(documentId));
|
2403
|
+
if (state) {
|
2404
|
+
view.dispatch(createEditorStateTransaction(state));
|
2240
2405
|
}
|
2241
2406
|
return true;
|
2242
2407
|
}
|
2243
2408
|
}
|
2244
2409
|
])
|
2245
|
-
];
|
2410
|
+
].filter(import_util3.isNotFalsy);
|
2246
2411
|
};
|
2247
|
-
var
|
2248
|
-
var setComments =
|
2249
|
-
var setSelection =
|
2250
|
-
var setCommentState =
|
2251
|
-
var commentsState =
|
2412
|
+
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
2413
|
+
var setComments = import_state11.StateEffect.define();
|
2414
|
+
var setSelection = import_state11.StateEffect.define();
|
2415
|
+
var setCommentState = import_state11.StateEffect.define();
|
2416
|
+
var commentsState = import_state11.StateField.define({
|
2252
2417
|
create: (state) => ({
|
2253
2418
|
id: state.facet(documentId),
|
2254
2419
|
comments: [],
|
@@ -2286,7 +2451,7 @@ var commentsState = import_state10.StateField.define({
|
|
2286
2451
|
return value;
|
2287
2452
|
}
|
2288
2453
|
});
|
2289
|
-
var styles3 =
|
2454
|
+
var styles3 = import_view13.EditorView.theme({
|
2290
2455
|
".cm-comment, .cm-comment-current": {
|
2291
2456
|
margin: "0 -3px",
|
2292
2457
|
padding: "3px",
|
@@ -2299,14 +2464,14 @@ var styles3 = import_view11.EditorView.theme({
|
|
2299
2464
|
textDecoration: "underline"
|
2300
2465
|
}
|
2301
2466
|
});
|
2302
|
-
var createCommentMark = (id, isCurrent) =>
|
2467
|
+
var createCommentMark = (id, isCurrent) => import_view13.Decoration.mark({
|
2303
2468
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2304
2469
|
attributes: {
|
2305
2470
|
"data-testid": "cm-comment",
|
2306
2471
|
"data-comment-id": id
|
2307
2472
|
}
|
2308
2473
|
});
|
2309
|
-
var commentsDecorations =
|
2474
|
+
var commentsDecorations = import_view13.EditorView.decorations.compute([
|
2310
2475
|
commentsState
|
2311
2476
|
], (state) => {
|
2312
2477
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2314,7 +2479,7 @@ var commentsDecorations = import_view11.EditorView.decorations.compute([
|
|
2314
2479
|
const range = comment.range;
|
2315
2480
|
if (!range) {
|
2316
2481
|
import_log4.log.warn("Invalid range:", range, {
|
2317
|
-
F:
|
2482
|
+
F: __dxlog_file7,
|
2318
2483
|
L: 144,
|
2319
2484
|
S: void 0,
|
2320
2485
|
C: (f, a) => f(...a)
|
@@ -2326,10 +2491,10 @@ var commentsDecorations = import_view11.EditorView.decorations.compute([
|
|
2326
2491
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2327
2492
|
return mark.range(range.from, range.to);
|
2328
2493
|
}).filter(import_util2.isNonNullable);
|
2329
|
-
return
|
2494
|
+
return import_view13.Decoration.set(decorations);
|
2330
2495
|
});
|
2331
|
-
var commentClickedEffect =
|
2332
|
-
var handleCommentClick =
|
2496
|
+
var commentClickedEffect = import_state11.StateEffect.define();
|
2497
|
+
var handleCommentClick = import_view13.EditorView.domEventHandlers({
|
2333
2498
|
click: (event, view) => {
|
2334
2499
|
let target = event.target;
|
2335
2500
|
const editorRoot = view.dom;
|
@@ -2368,7 +2533,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2368
2533
|
}
|
2369
2534
|
};
|
2370
2535
|
return [
|
2371
|
-
|
2536
|
+
import_view13.EditorView.domEventHandlers({
|
2372
2537
|
cut: handleTrack,
|
2373
2538
|
copy: handleTrack
|
2374
2539
|
}),
|
@@ -2390,7 +2555,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2390
2555
|
return effects;
|
2391
2556
|
}),
|
2392
2557
|
// Handle paste or the undo of comment deletion.
|
2393
|
-
|
2558
|
+
import_view13.EditorView.updateListener.of((update2) => {
|
2394
2559
|
const restore = [];
|
2395
2560
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2396
2561
|
const tr = update2.transactions[i];
|
@@ -2446,7 +2611,7 @@ var mapTrackedComment = (comment, changes) => ({
|
|
2446
2611
|
from: changes.mapPos(comment.from, 1),
|
2447
2612
|
to: changes.mapPos(comment.to, 1)
|
2448
2613
|
});
|
2449
|
-
var restoreCommentEffect =
|
2614
|
+
var restoreCommentEffect = import_state11.StateEffect.define({
|
2450
2615
|
map: mapTrackedComment
|
2451
2616
|
});
|
2452
2617
|
var createComment2 = (view) => {
|
@@ -2491,7 +2656,7 @@ var comments = (options = {}) => {
|
|
2491
2656
|
//
|
2492
2657
|
// Keymap.
|
2493
2658
|
//
|
2494
|
-
options.onCreate &&
|
2659
|
+
options.onCreate && import_view13.keymap.of([
|
2495
2660
|
{
|
2496
2661
|
key: shortcut,
|
2497
2662
|
run: callbackWrapper(createComment2)
|
@@ -2501,7 +2666,7 @@ var comments = (options = {}) => {
|
|
2501
2666
|
// Hover tooltip (for key shortcut hints, etc.)
|
2502
2667
|
// TODO(burdon): Factor out to generic hints extension for current selection/line.
|
2503
2668
|
//
|
2504
|
-
options.onHover && (0,
|
2669
|
+
options.onHover && (0, import_view13.hoverTooltip)((view, pos) => {
|
2505
2670
|
const selection = view.state.selection.main;
|
2506
2671
|
if (selection && pos >= selection.from && pos <= selection.to) {
|
2507
2672
|
return {
|
@@ -2530,7 +2695,7 @@ var comments = (options = {}) => {
|
|
2530
2695
|
//
|
2531
2696
|
// Track deleted ranges and update ranges for decorations.
|
2532
2697
|
//
|
2533
|
-
|
2698
|
+
import_view13.EditorView.updateListener.of(({ view, state, changes }) => {
|
2534
2699
|
let mod = false;
|
2535
2700
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2536
2701
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2562,7 +2727,7 @@ var comments = (options = {}) => {
|
|
2562
2727
|
//
|
2563
2728
|
// Track selection/proximity.
|
2564
2729
|
//
|
2565
|
-
|
2730
|
+
import_view13.EditorView.updateListener.of(({ view, state }) => {
|
2566
2731
|
let min = Infinity;
|
2567
2732
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2568
2733
|
const { head } = state.selection.main;
|
@@ -2616,7 +2781,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2616
2781
|
anchor: range.from
|
2617
2782
|
} : void 0,
|
2618
2783
|
effects: [
|
2619
|
-
needsScroll ?
|
2784
|
+
needsScroll ? import_view13.EditorView.scrollIntoView(range.from, center ? {
|
2620
2785
|
y: "center"
|
2621
2786
|
} : void 0) : [],
|
2622
2787
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2662,13 +2827,13 @@ var ExternalCommentSync = class {
|
|
2662
2827
|
this.unsubscribe = subscribe(updateComments);
|
2663
2828
|
}
|
2664
2829
|
};
|
2665
|
-
var createExternalCommentSync = (id, subscribe, getComments) =>
|
2830
|
+
var createExternalCommentSync = (id, subscribe, getComments) => import_view13.ViewPlugin.fromClass(class {
|
2666
2831
|
constructor(view) {
|
2667
2832
|
return new ExternalCommentSync(view, id, subscribe, getComments);
|
2668
2833
|
}
|
2669
2834
|
});
|
2670
2835
|
var useCommentState = (state) => {
|
2671
|
-
return (0, import_react4.useMemo)(() =>
|
2836
|
+
return (0, import_react4.useMemo)(() => import_view13.EditorView.updateListener.of((update2) => {
|
2672
2837
|
if (update2.docChanged || update2.selectionSet) {
|
2673
2838
|
state.comment = selectionOverlapsComment(update2.state);
|
2674
2839
|
state.selection = hasActiveSelection(update2.state);
|
@@ -2692,7 +2857,7 @@ var useComments = (view, id, comments2) => {
|
|
2692
2857
|
});
|
2693
2858
|
};
|
2694
2859
|
var useCommentClickListener = (onCommentClick) => {
|
2695
|
-
return (0, import_react4.useMemo)(() =>
|
2860
|
+
return (0, import_react4.useMemo)(() => import_view13.EditorView.updateListener.of((update2) => {
|
2696
2861
|
update2.transactions.forEach((transaction) => {
|
2697
2862
|
transaction.effects.forEach((effect) => {
|
2698
2863
|
if (effect.is(commentClickedEffect)) {
|
@@ -2705,15 +2870,15 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2705
2870
|
]);
|
2706
2871
|
};
|
2707
2872
|
var debugNodeLogger = (log8 = console.log) => {
|
2708
|
-
const logTokens = (state) => (0,
|
2873
|
+
const logTokens = (state) => (0, import_language2.syntaxTree)(state).iterate({
|
2709
2874
|
enter: (node) => log8(node.type)
|
2710
2875
|
});
|
2711
|
-
return
|
2876
|
+
return import_state13.StateField.define({
|
2712
2877
|
create: (state) => logTokens(state),
|
2713
2878
|
update: (_, tr) => logTokens(tr.state)
|
2714
2879
|
});
|
2715
2880
|
};
|
2716
|
-
var styles4 =
|
2881
|
+
var styles4 = import_view15.EditorView.theme({
|
2717
2882
|
".cm-dropCursor": {
|
2718
2883
|
borderLeft: "2px solid var(--dx-accentText)",
|
2719
2884
|
color: "var(--dx-accentText)",
|
@@ -2726,8 +2891,8 @@ var styles4 = import_view13.EditorView.theme({
|
|
2726
2891
|
var dropFile = (options = {}) => {
|
2727
2892
|
return [
|
2728
2893
|
styles4,
|
2729
|
-
(0,
|
2730
|
-
|
2894
|
+
(0, import_view15.dropCursor)(),
|
2895
|
+
import_view15.EditorView.domEventHandlers({
|
2731
2896
|
drop: (event, view) => {
|
2732
2897
|
event.preventDefault();
|
2733
2898
|
const files = event.dataTransfer?.files;
|
@@ -2746,8 +2911,8 @@ var dropFile = (options = {}) => {
|
|
2746
2911
|
})
|
2747
2912
|
];
|
2748
2913
|
};
|
2749
|
-
var focusEffect =
|
2750
|
-
var focusField =
|
2914
|
+
var focusEffect = import_state15.StateEffect.define();
|
2915
|
+
var focusField = import_state15.StateField.define({
|
2751
2916
|
create: () => false,
|
2752
2917
|
update: (value, tr) => {
|
2753
2918
|
for (const effect of tr.effects) {
|
@@ -2760,7 +2925,7 @@ var focusField = import_state14.StateField.define({
|
|
2760
2925
|
});
|
2761
2926
|
var focus = [
|
2762
2927
|
focusField,
|
2763
|
-
|
2928
|
+
import_view17.EditorView.domEventHandlers({
|
2764
2929
|
focus: (event, view) => {
|
2765
2930
|
setTimeout(() => view.dispatch({
|
2766
2931
|
effects: focusEffect.of(true)
|
@@ -2773,14 +2938,13 @@ var focus = [
|
|
2773
2938
|
}
|
2774
2939
|
})
|
2775
2940
|
];
|
2776
|
-
var
|
2777
|
-
var preventNewline =
|
2941
|
+
var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2942
|
+
var preventNewline = import_state14.EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2778
2943
|
var defaultBasicOptions = {
|
2779
2944
|
allowMultipleSelections: true,
|
2780
2945
|
bracketMatching: true,
|
2781
2946
|
closeBrackets: true,
|
2782
2947
|
drawSelection: true,
|
2783
|
-
editable: true,
|
2784
2948
|
focus: true,
|
2785
2949
|
history: true,
|
2786
2950
|
keymap: "standard",
|
@@ -2797,35 +2961,33 @@ var createBasicExtensions = (_props) => {
|
|
2797
2961
|
const props = (0, import_lodash4.default)({}, _props, defaultBasicOptions);
|
2798
2962
|
return [
|
2799
2963
|
// NOTE: Doesn't catch errors in keymap functions.
|
2800
|
-
|
2964
|
+
import_view16.EditorView.exceptionSink.of((err) => {
|
2801
2965
|
import_log5.log.catch(err, void 0, {
|
2802
|
-
F:
|
2966
|
+
F: __dxlog_file8,
|
2803
2967
|
L: 96,
|
2804
2968
|
S: void 0,
|
2805
2969
|
C: (f, a) => f(...a)
|
2806
2970
|
});
|
2807
2971
|
}),
|
2808
|
-
props.allowMultipleSelections &&
|
2809
|
-
props.bracketMatching && (0,
|
2972
|
+
props.allowMultipleSelections && import_state14.EditorState.allowMultipleSelections.of(true),
|
2973
|
+
props.bracketMatching && (0, import_language3.bracketMatching)(),
|
2810
2974
|
props.closeBrackets && (0, import_autocomplete2.closeBrackets)(),
|
2811
|
-
props.dropCursor && (0,
|
2812
|
-
props.drawSelection && (0,
|
2975
|
+
props.dropCursor && (0, import_view16.dropCursor)(),
|
2976
|
+
props.drawSelection && (0, import_view16.drawSelection)({
|
2813
2977
|
cursorBlinkRate: 1200
|
2814
2978
|
}),
|
2979
|
+
props.editable !== void 0 && import_view16.EditorView.editable.of(props.editable),
|
2815
2980
|
props.focus && focus,
|
2816
|
-
props.highlightActiveLine && (0,
|
2981
|
+
props.highlightActiveLine && (0, import_view16.highlightActiveLine)(),
|
2817
2982
|
props.history && (0, import_commands2.history)(),
|
2818
|
-
props.lineNumbers && (0,
|
2819
|
-
props.lineWrapping &&
|
2820
|
-
props.placeholder && (0,
|
2821
|
-
props.
|
2822
|
-
|
2823
|
-
|
2824
|
-
],
|
2825
|
-
props.scrollPastEnd && (0, import_view14.scrollPastEnd)(),
|
2826
|
-
props.tabSize && import_state13.EditorState.tabSize.of(props.tabSize),
|
2983
|
+
props.lineNumbers && (0, import_view16.lineNumbers)(),
|
2984
|
+
props.lineWrapping && import_view16.EditorView.lineWrapping,
|
2985
|
+
props.placeholder && (0, import_view16.placeholder)(props.placeholder),
|
2986
|
+
props.readOnly !== void 0 && import_state14.EditorState.readOnly.of(props.readOnly),
|
2987
|
+
props.scrollPastEnd && (0, import_view16.scrollPastEnd)(),
|
2988
|
+
props.tabSize && import_state14.EditorState.tabSize.of(props.tabSize),
|
2827
2989
|
// https://codemirror.net/docs/ref/#view.KeyBinding
|
2828
|
-
|
2990
|
+
import_view16.keymap.of([
|
2829
2991
|
...(props.keymap && keymaps[props.keymap]) ?? [],
|
2830
2992
|
// NOTE: Tabs are also configured by markdown extension.
|
2831
2993
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
@@ -2845,8 +3007,8 @@ var createBasicExtensions = (_props) => {
|
|
2845
3007
|
preventDefault: true,
|
2846
3008
|
run: () => true
|
2847
3009
|
}
|
2848
|
-
].filter(
|
2849
|
-
].filter(
|
3010
|
+
].filter(import_util4.isNotFalsy))
|
3011
|
+
].filter(import_util4.isNotFalsy);
|
2850
3012
|
};
|
2851
3013
|
var defaultThemeSlots = {
|
2852
3014
|
editor: {
|
@@ -2856,17 +3018,17 @@ var defaultThemeSlots = {
|
|
2856
3018
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2857
3019
|
const slots = (0, import_lodash4.default)({}, _slots, defaultThemeSlots);
|
2858
3020
|
return [
|
2859
|
-
|
2860
|
-
|
3021
|
+
import_view16.EditorView.darkTheme.of(themeMode === "dark"),
|
3022
|
+
import_view16.EditorView.baseTheme(styles5 ? (0, import_lodash5.default)({}, defaultTheme, styles5) : defaultTheme),
|
2861
3023
|
// https://github.com/codemirror/theme-one-dark
|
2862
|
-
_syntaxHighlighting && (themeMode === "dark" ? (0,
|
2863
|
-
slots.editor?.className &&
|
3024
|
+
_syntaxHighlighting && (themeMode === "dark" ? (0, import_language3.syntaxHighlighting)(import_theme_one_dark.oneDarkHighlightStyle) : (0, import_language3.syntaxHighlighting)(import_language3.defaultHighlightStyle)),
|
3025
|
+
slots.editor?.className && import_view16.EditorView.editorAttributes.of({
|
2864
3026
|
class: slots.editor.className
|
2865
3027
|
}),
|
2866
|
-
slots.content?.className &&
|
3028
|
+
slots.content?.className && import_view16.EditorView.contentAttributes.of({
|
2867
3029
|
class: slots.content.className
|
2868
3030
|
})
|
2869
|
-
].filter(
|
3031
|
+
].filter(import_util4.isNotFalsy);
|
2870
3032
|
};
|
2871
3033
|
var createDataExtensions = ({ id, text, space, identity }) => {
|
2872
3034
|
const extensions = [];
|
@@ -2875,7 +3037,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2875
3037
|
}
|
2876
3038
|
if (space && identity) {
|
2877
3039
|
const peerId = identity?.identityKey.toHex();
|
2878
|
-
const hue = identity?.profile?.data?.hue ?? (0,
|
3040
|
+
const hue = identity?.profile?.data?.hue ?? (0, import_util4.hexToHue)(peerId ?? "0");
|
2879
3041
|
extensions.push(awareness(new SpaceAwarenessProvider({
|
2880
3042
|
space,
|
2881
3043
|
channel: `awareness.${id}`,
|
@@ -2889,83 +3051,45 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2889
3051
|
}
|
2890
3052
|
return extensions;
|
2891
3053
|
};
|
2892
|
-
var folding = (
|
2893
|
-
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
|
2899
|
-
(
|
2900
|
-
|
2901
|
-
|
2902
|
-
}
|
2903
|
-
}),
|
2904
|
-
(0, import_language3.foldGutter)({
|
2905
|
-
markerDOM: (open) => {
|
2906
|
-
const el = createElement("div", {
|
2907
|
-
className: "flex h-full items-center"
|
2908
|
-
});
|
2909
|
-
return renderRoot(el, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Icon, {
|
2910
|
-
icon: "ph--caret-right--regular",
|
2911
|
-
size: 3,
|
2912
|
-
classNames: [
|
2913
|
-
"mx-3 cursor-pointer",
|
2914
|
-
open && "rotate-90"
|
2915
|
-
]
|
2916
|
-
}));
|
2917
|
-
}
|
2918
|
-
}),
|
2919
|
-
import_view16.EditorView.theme({
|
2920
|
-
".cm-foldGutter": {
|
2921
|
-
opacity: 0.3,
|
2922
|
-
transition: "opacity 0.3s",
|
2923
|
-
width: "32px"
|
2924
|
-
},
|
2925
|
-
".cm-foldGutter:hover": {
|
2926
|
-
opacity: 1
|
2927
|
-
}
|
2928
|
-
}),
|
2929
|
-
import_view16.EditorView.updateListener.of(({ view }) => {
|
2930
|
-
const id = view.state.facet(documentId);
|
2931
|
-
if (!id) {
|
2932
|
-
return;
|
2933
|
-
}
|
2934
|
-
if (!initialized) {
|
2935
|
-
initialized = true;
|
2936
|
-
const foldState2 = state[id];
|
2937
|
-
if (foldState2?.foldedRanges?.length) {
|
2938
|
-
view.dispatch({
|
2939
|
-
effects: foldState2.foldedRanges.map((range) => import_language3.foldEffect.of({
|
2940
|
-
from: range.from,
|
2941
|
-
to: range.to
|
2942
|
-
}))
|
2943
|
-
});
|
2944
|
-
}
|
2945
|
-
return;
|
2946
|
-
}
|
2947
|
-
const decorations = (0, import_language3.foldedRanges)(view.state);
|
2948
|
-
const ranges = [];
|
2949
|
-
decorations.between(0, view.state.doc.length, (from, to) => {
|
2950
|
-
ranges.push({
|
2951
|
-
from,
|
2952
|
-
to
|
2953
|
-
});
|
3054
|
+
var folding = (_props = {}) => [
|
3055
|
+
(0, import_language4.codeFolding)({
|
3056
|
+
placeholderDOM: () => {
|
3057
|
+
return document.createElement("span");
|
3058
|
+
}
|
3059
|
+
}),
|
3060
|
+
(0, import_language4.foldGutter)({
|
3061
|
+
markerDOM: (open) => {
|
3062
|
+
const el = createElement("div", {
|
3063
|
+
className: "flex h-full items-center"
|
2954
3064
|
});
|
2955
|
-
|
2956
|
-
|
2957
|
-
|
2958
|
-
|
2959
|
-
|
2960
|
-
|
2961
|
-
|
3065
|
+
return renderRoot(el, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Icon, {
|
3066
|
+
icon: "ph--caret-right--regular",
|
3067
|
+
size: 3,
|
3068
|
+
classNames: [
|
3069
|
+
"mx-3 cursor-pointer",
|
3070
|
+
open && "rotate-90"
|
3071
|
+
]
|
3072
|
+
}));
|
3073
|
+
}
|
3074
|
+
}),
|
3075
|
+
import_view18.EditorView.theme({
|
3076
|
+
".cm-foldGutter": {
|
3077
|
+
opacity: 0.3,
|
3078
|
+
transition: "opacity 0.3s",
|
3079
|
+
width: "32px"
|
3080
|
+
},
|
3081
|
+
".cm-foldGutter:hover": {
|
3082
|
+
opacity: 1
|
3083
|
+
}
|
3084
|
+
})
|
3085
|
+
];
|
2962
3086
|
var listener = ({ onFocus, onChange }) => {
|
2963
3087
|
const extensions = [];
|
2964
|
-
onFocus && extensions.push(
|
3088
|
+
onFocus && extensions.push(import_view19.EditorView.focusChangeEffect.of((_, focusing) => {
|
2965
3089
|
onFocus(focusing);
|
2966
3090
|
return null;
|
2967
3091
|
}));
|
2968
|
-
onChange && extensions.push(
|
3092
|
+
onChange && extensions.push(import_view19.EditorView.updateListener.of((update2) => {
|
2969
3093
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
2970
3094
|
}));
|
2971
3095
|
return extensions;
|
@@ -2991,7 +3115,7 @@ var setHeading = (level) => {
|
|
2991
3115
|
let prevBlock = -1;
|
2992
3116
|
for (const range of ranges) {
|
2993
3117
|
let sawBlock = false;
|
2994
|
-
(0,
|
3118
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
2995
3119
|
from: range.from,
|
2996
3120
|
to: range.to,
|
2997
3121
|
enter: (node) => {
|
@@ -3088,7 +3212,7 @@ var setStyle = (type, enable) => {
|
|
3088
3212
|
to: range.head + found + marker.length
|
3089
3213
|
}
|
3090
3214
|
],
|
3091
|
-
range:
|
3215
|
+
range: import_state16.EditorSelection.cursor(range.from - marker.length)
|
3092
3216
|
};
|
3093
3217
|
}
|
3094
3218
|
}
|
@@ -3100,7 +3224,7 @@ var setStyle = (type, enable) => {
|
|
3100
3224
|
let startCovered = false;
|
3101
3225
|
let endCovered = false;
|
3102
3226
|
let { from, to } = range;
|
3103
|
-
(0,
|
3227
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3104
3228
|
from,
|
3105
3229
|
to,
|
3106
3230
|
enter: (node) => {
|
@@ -3216,13 +3340,13 @@ var setStyle = (type, enable) => {
|
|
3216
3340
|
from: range.head,
|
3217
3341
|
insert: marker + marker
|
3218
3342
|
},
|
3219
|
-
range:
|
3343
|
+
range: import_state16.EditorSelection.cursor(range.head + marker.length)
|
3220
3344
|
};
|
3221
3345
|
}
|
3222
3346
|
const changeSet = state.changes(changes2.concat(changesAtEnd));
|
3223
3347
|
return {
|
3224
3348
|
changes: changeSet,
|
3225
|
-
range: range.empty && !changeSet.empty ?
|
3349
|
+
range: range.empty && !changeSet.empty ? import_state16.EditorSelection.cursor(range.head + marker.length) : import_state16.EditorSelection.range(changeSet.mapPos(range.from, 1), changeSet.mapPos(range.to, -1))
|
3226
3350
|
};
|
3227
3351
|
});
|
3228
3352
|
dispatch(state.update(changes, {
|
@@ -3303,7 +3427,7 @@ var insertTable = (view) => {
|
|
3303
3427
|
snippets.table(view, null, from, from);
|
3304
3428
|
};
|
3305
3429
|
var removeLinkInner = (from, to, changes, state) => {
|
3306
|
-
(0,
|
3430
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3307
3431
|
from,
|
3308
3432
|
to,
|
3309
3433
|
enter: (node) => {
|
@@ -3348,7 +3472,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3348
3472
|
let { from, to } = range;
|
3349
3473
|
const cutStyles = [];
|
3350
3474
|
let okay = null;
|
3351
|
-
(0,
|
3475
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3352
3476
|
from,
|
3353
3477
|
to,
|
3354
3478
|
enter: (node) => {
|
@@ -3422,7 +3546,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3422
3546
|
const changeSet = state.changes(changes2.concat(changesAfter));
|
3423
3547
|
return {
|
3424
3548
|
changes: changeSet,
|
3425
|
-
range:
|
3549
|
+
range: import_state16.EditorSelection.cursor(changeSet.mapPos(to, 1) - cursorOffset - (url ? url.length + 2 : 0))
|
3426
3550
|
};
|
3427
3551
|
});
|
3428
3552
|
if (changes.changes.empty) {
|
@@ -3443,7 +3567,7 @@ var addList = (type) => {
|
|
3443
3567
|
let parentColumn = null;
|
3444
3568
|
const blocks = [];
|
3445
3569
|
for (const { from, to } of state.selection.ranges) {
|
3446
|
-
(0,
|
3570
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3447
3571
|
from,
|
3448
3572
|
to,
|
3449
3573
|
enter: (node) => {
|
@@ -3578,7 +3702,7 @@ var removeList = (type) => {
|
|
3578
3702
|
const stack = [];
|
3579
3703
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3580
3704
|
for (const { from, to } of state.selection.ranges) {
|
3581
|
-
(0,
|
3705
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3582
3706
|
from,
|
3583
3707
|
to,
|
3584
3708
|
enter: (node) => {
|
@@ -3665,7 +3789,7 @@ var setBlockquote = (enable) => {
|
|
3665
3789
|
let lastBlock = -1;
|
3666
3790
|
for (const { from, to } of state.selection.ranges) {
|
3667
3791
|
const sawBlock = false;
|
3668
|
-
(0,
|
3792
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3669
3793
|
from,
|
3670
3794
|
to,
|
3671
3795
|
enter: (node) => {
|
@@ -3755,7 +3879,7 @@ var addCodeblock = (target) => {
|
|
3755
3879
|
for (const { from, to } of selection.ranges) {
|
3756
3880
|
let blockFrom = from;
|
3757
3881
|
let blockTo = to;
|
3758
|
-
(0,
|
3882
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3759
3883
|
from,
|
3760
3884
|
to,
|
3761
3885
|
enter: (node) => {
|
@@ -3806,7 +3930,7 @@ var removeCodeblock = ({ state, dispatch }) => {
|
|
3806
3930
|
let lastBlock = -1;
|
3807
3931
|
const changes = [];
|
3808
3932
|
for (const { from, to } of state.selection.ranges) {
|
3809
|
-
(0,
|
3933
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3810
3934
|
from,
|
3811
3935
|
to,
|
3812
3936
|
enter: (node) => {
|
@@ -3856,7 +3980,7 @@ var toggleCodeblock = (target) => {
|
|
3856
3980
|
};
|
3857
3981
|
var formattingKeymap = (_options = {}) => {
|
3858
3982
|
return [
|
3859
|
-
|
3983
|
+
import_view20.keymap.of([
|
3860
3984
|
{
|
3861
3985
|
key: "meta-b",
|
3862
3986
|
run: toggleStrong
|
@@ -3968,7 +4092,7 @@ var getFormatting = (state) => {
|
|
3968
4092
|
}
|
3969
4093
|
}
|
3970
4094
|
}
|
3971
|
-
(0,
|
4095
|
+
(0, import_language5.syntaxTree)(state).iterate({
|
3972
4096
|
from: range.from,
|
3973
4097
|
to: range.to,
|
3974
4098
|
enter: (node) => {
|
@@ -4057,7 +4181,7 @@ var getFormatting = (state) => {
|
|
4057
4181
|
};
|
4058
4182
|
};
|
4059
4183
|
var useFormattingState = (state) => {
|
4060
|
-
return (0, import_react6.useMemo)(() =>
|
4184
|
+
return (0, import_react6.useMemo)(() => import_view20.EditorView.updateListener.of((update2) => {
|
4061
4185
|
if (update2.docChanged || update2.selectionSet) {
|
4062
4186
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4063
4187
|
state[key] = active;
|
@@ -4144,7 +4268,7 @@ var markdownTagsExtensions = [
|
|
4144
4268
|
}
|
4145
4269
|
];
|
4146
4270
|
var markdownHighlightStyle = (_options = {}) => {
|
4147
|
-
return
|
4271
|
+
return import_language7.HighlightStyle.define([
|
4148
4272
|
{
|
4149
4273
|
tag: [
|
4150
4274
|
import_highlight2.tags.keyword,
|
@@ -4308,8 +4432,8 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4308
4432
|
]
|
4309
4433
|
}),
|
4310
4434
|
// Custom styles.
|
4311
|
-
(0,
|
4312
|
-
|
4435
|
+
(0, import_language6.syntaxHighlighting)(markdownHighlightStyle()),
|
4436
|
+
import_view21.keymap.of([
|
4313
4437
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
4314
4438
|
import_commands3.indentWithTab,
|
4315
4439
|
// https://codemirror.net/docs/ref/#commands.defaultKeymap
|
@@ -4319,7 +4443,7 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4319
4443
|
])
|
4320
4444
|
];
|
4321
4445
|
};
|
4322
|
-
var debugTree = (cb) =>
|
4446
|
+
var debugTree = (cb) => import_state17.StateField.define({
|
4323
4447
|
create: (state) => cb(convertTreeToJson(state)),
|
4324
4448
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
4325
4449
|
});
|
@@ -4340,15 +4464,15 @@ var convertTreeToJson = (state) => {
|
|
4340
4464
|
}
|
4341
4465
|
return node;
|
4342
4466
|
};
|
4343
|
-
return treeToJson((0,
|
4467
|
+
return treeToJson((0, import_language8.syntaxTree)(state).cursor());
|
4344
4468
|
};
|
4345
4469
|
var adjustChanges = () => {
|
4346
|
-
return
|
4470
|
+
return import_view23.ViewPlugin.fromClass(class {
|
4347
4471
|
update(update2) {
|
4348
|
-
const tree = (0,
|
4472
|
+
const tree = (0, import_language10.syntaxTree)(update2.state);
|
4349
4473
|
const adjustments = [];
|
4350
4474
|
for (const tr of update2.transactions) {
|
4351
|
-
const event = tr.annotation(
|
4475
|
+
const event = tr.annotation(import_state19.Transaction.userEvent);
|
4352
4476
|
switch (event) {
|
4353
4477
|
//
|
4354
4478
|
// Enter
|
@@ -4483,9 +4607,9 @@ var getValidUrl = (str) => {
|
|
4483
4607
|
};
|
4484
4608
|
var image = (_options = {}) => {
|
4485
4609
|
return [
|
4486
|
-
|
4610
|
+
import_state20.StateField.define({
|
4487
4611
|
create: (state) => {
|
4488
|
-
return
|
4612
|
+
return import_view24.Decoration.set(buildDecorations2(0, state.doc.length, state));
|
4489
4613
|
},
|
4490
4614
|
update: (value, tr) => {
|
4491
4615
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4505,10 +4629,10 @@ var image = (_options = {}) => {
|
|
4505
4629
|
filterFrom: from,
|
4506
4630
|
filterTo: to,
|
4507
4631
|
filter: () => false,
|
4508
|
-
add:
|
4632
|
+
add: buildDecorations2(from, to, tr.state)
|
4509
4633
|
});
|
4510
4634
|
},
|
4511
|
-
provide: (field) =>
|
4635
|
+
provide: (field) => import_view24.EditorView.decorations.from(field)
|
4512
4636
|
})
|
4513
4637
|
];
|
4514
4638
|
};
|
@@ -4520,10 +4644,10 @@ var preloadImage = (url) => {
|
|
4520
4644
|
preloaded.add(url);
|
4521
4645
|
}
|
4522
4646
|
};
|
4523
|
-
var
|
4647
|
+
var buildDecorations2 = (from, to, state) => {
|
4524
4648
|
const decorations = [];
|
4525
4649
|
const cursor = state.selection.main.head;
|
4526
|
-
(0,
|
4650
|
+
(0, import_language11.syntaxTree)(state).iterate({
|
4527
4651
|
enter: (node) => {
|
4528
4652
|
if (node.name === "Image") {
|
4529
4653
|
const urlNode = node.node.getChild("URL");
|
@@ -4534,7 +4658,7 @@ var buildDecorations = (from, to, state) => {
|
|
4534
4658
|
return;
|
4535
4659
|
}
|
4536
4660
|
preloadImage(url);
|
4537
|
-
decorations.push(
|
4661
|
+
decorations.push(import_view24.Decoration.replace({
|
4538
4662
|
block: true,
|
4539
4663
|
widget: new ImageWidget(url)
|
4540
4664
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4546,7 +4670,7 @@ var buildDecorations = (from, to, state) => {
|
|
4546
4670
|
});
|
4547
4671
|
return decorations;
|
4548
4672
|
};
|
4549
|
-
var ImageWidget = class extends
|
4673
|
+
var ImageWidget = class extends import_view24.WidgetType {
|
4550
4674
|
constructor(_url) {
|
4551
4675
|
super();
|
4552
4676
|
this._url = _url;
|
@@ -4568,7 +4692,7 @@ var ImageWidget = class extends import_view22.WidgetType {
|
|
4568
4692
|
};
|
4569
4693
|
var bulletListIndentationWidth = 24;
|
4570
4694
|
var orderedListIndentationWidth = 36;
|
4571
|
-
var formattingStyles =
|
4695
|
+
var formattingStyles = import_view25.EditorView.theme({
|
4572
4696
|
/**
|
4573
4697
|
* Horizontal rule.
|
4574
4698
|
*/
|
@@ -4686,14 +4810,14 @@ var formattingStyles = import_view23.EditorView.theme({
|
|
4686
4810
|
}
|
4687
4811
|
});
|
4688
4812
|
var table = (options = {}) => {
|
4689
|
-
return
|
4813
|
+
return import_state21.StateField.define({
|
4690
4814
|
create: (state) => update(state, options),
|
4691
4815
|
update: (_, tr) => update(tr.state, options),
|
4692
|
-
provide: (field) =>
|
4816
|
+
provide: (field) => import_view26.EditorView.decorations.from(field)
|
4693
4817
|
});
|
4694
4818
|
};
|
4695
4819
|
var update = (state, _options) => {
|
4696
|
-
const builder = new
|
4820
|
+
const builder = new import_state21.RangeSetBuilder();
|
4697
4821
|
const cursor = state.selection.main.head;
|
4698
4822
|
const tables = [];
|
4699
4823
|
const getTable = () => tables[tables.length - 1];
|
@@ -4701,7 +4825,7 @@ var update = (state, _options) => {
|
|
4701
4825
|
const table2 = getTable();
|
4702
4826
|
return table2.rows?.[table2.rows.length - 1];
|
4703
4827
|
};
|
4704
|
-
(0,
|
4828
|
+
(0, import_language12.syntaxTree)(state).iterate({
|
4705
4829
|
enter: (node) => {
|
4706
4830
|
switch (node.name) {
|
4707
4831
|
case "Table": {
|
@@ -4734,19 +4858,19 @@ var update = (state, _options) => {
|
|
4734
4858
|
tables.forEach((table2) => {
|
4735
4859
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4736
4860
|
if (replace) {
|
4737
|
-
builder.add(table2.from, table2.to,
|
4861
|
+
builder.add(table2.from, table2.to, import_view26.Decoration.replace({
|
4738
4862
|
block: true,
|
4739
4863
|
widget: new TableWidget(table2)
|
4740
4864
|
}));
|
4741
4865
|
} else {
|
4742
|
-
builder.add(table2.from, table2.to,
|
4866
|
+
builder.add(table2.from, table2.to, import_view26.Decoration.mark({
|
4743
4867
|
class: "cm-table"
|
4744
4868
|
}));
|
4745
4869
|
}
|
4746
4870
|
});
|
4747
4871
|
return builder.finish();
|
4748
4872
|
};
|
4749
|
-
var TableWidget = class extends
|
4873
|
+
var TableWidget = class extends import_view26.WidgetType {
|
4750
4874
|
constructor(_table) {
|
4751
4875
|
super();
|
4752
4876
|
this._table = _table;
|
@@ -4779,21 +4903,21 @@ var TableWidget = class extends import_view24.WidgetType {
|
|
4779
4903
|
return !/^mouse/.test(e.type);
|
4780
4904
|
}
|
4781
4905
|
};
|
4782
|
-
var
|
4906
|
+
var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
|
4783
4907
|
var Unicode = {
|
4784
4908
|
emDash: "\u2014",
|
4785
4909
|
bullet: "\u2022",
|
4786
4910
|
bulletSmall: "\u2219",
|
4787
4911
|
bulletSquare: "\u2B1D"
|
4788
4912
|
};
|
4789
|
-
var HorizontalRuleWidget = class extends
|
4913
|
+
var HorizontalRuleWidget = class extends import_view22.WidgetType {
|
4790
4914
|
toDOM() {
|
4791
4915
|
const el = document.createElement("span");
|
4792
4916
|
el.className = "cm-hr";
|
4793
4917
|
return el;
|
4794
4918
|
}
|
4795
4919
|
};
|
4796
|
-
var LinkButton = class extends
|
4920
|
+
var LinkButton = class extends import_view22.WidgetType {
|
4797
4921
|
constructor(url, render) {
|
4798
4922
|
super();
|
4799
4923
|
this.url = url;
|
@@ -4809,7 +4933,7 @@ var LinkButton = class extends import_view20.WidgetType {
|
|
4809
4933
|
return el;
|
4810
4934
|
}
|
4811
4935
|
};
|
4812
|
-
var CheckboxWidget = class extends
|
4936
|
+
var CheckboxWidget = class extends import_view22.WidgetType {
|
4813
4937
|
constructor(_checked) {
|
4814
4938
|
super();
|
4815
4939
|
this._checked = _checked;
|
@@ -4854,7 +4978,7 @@ var CheckboxWidget = class extends import_view20.WidgetType {
|
|
4854
4978
|
return false;
|
4855
4979
|
}
|
4856
4980
|
};
|
4857
|
-
var TextWidget = class extends
|
4981
|
+
var TextWidget = class extends import_view22.WidgetType {
|
4858
4982
|
constructor(text, className) {
|
4859
4983
|
super();
|
4860
4984
|
this.text = text;
|
@@ -4869,29 +4993,29 @@ var TextWidget = class extends import_view20.WidgetType {
|
|
4869
4993
|
return el;
|
4870
4994
|
}
|
4871
4995
|
};
|
4872
|
-
var hide =
|
4873
|
-
var blockQuote =
|
4996
|
+
var hide = import_view22.Decoration.replace({});
|
4997
|
+
var blockQuote = import_view22.Decoration.line({
|
4874
4998
|
class: (0, import_react_ui_theme7.mx)("cm-blockquote")
|
4875
4999
|
});
|
4876
|
-
var fencedCodeLine =
|
5000
|
+
var fencedCodeLine = import_view22.Decoration.line({
|
4877
5001
|
class: (0, import_react_ui_theme7.mx)("cm-code cm-codeblock-line")
|
4878
5002
|
});
|
4879
|
-
var fencedCodeLineFirst =
|
5003
|
+
var fencedCodeLineFirst = import_view22.Decoration.line({
|
4880
5004
|
class: (0, import_react_ui_theme7.mx)("cm-code cm-codeblock-line", "cm-codeblock-first")
|
4881
5005
|
});
|
4882
|
-
var fencedCodeLineLast =
|
5006
|
+
var fencedCodeLineLast = import_view22.Decoration.line({
|
4883
5007
|
class: (0, import_react_ui_theme7.mx)("cm-code cm-codeblock-line", "cm-codeblock-last")
|
4884
5008
|
});
|
4885
5009
|
var commentBlockLine = fencedCodeLine;
|
4886
5010
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4887
5011
|
var commentBlockLineLast = fencedCodeLineLast;
|
4888
|
-
var horizontalRule =
|
5012
|
+
var horizontalRule = import_view22.Decoration.replace({
|
4889
5013
|
widget: new HorizontalRuleWidget()
|
4890
5014
|
});
|
4891
|
-
var checkedTask =
|
5015
|
+
var checkedTask = import_view22.Decoration.replace({
|
4892
5016
|
widget: new CheckboxWidget(true)
|
4893
5017
|
});
|
4894
|
-
var uncheckedTask =
|
5018
|
+
var uncheckedTask = import_view22.Decoration.replace({
|
4895
5019
|
widget: new CheckboxWidget(false)
|
4896
5020
|
});
|
4897
5021
|
var editingRange = (state, range, focus2) => {
|
@@ -4906,14 +5030,14 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4906
5030
|
"SubscriptMark",
|
4907
5031
|
"SuperscriptMark"
|
4908
5032
|
]);
|
4909
|
-
var
|
4910
|
-
const deco = new
|
4911
|
-
const atomicDeco = new
|
5033
|
+
var buildDecorations3 = (view, options, focus2) => {
|
5034
|
+
const deco = new import_state18.RangeSetBuilder();
|
5035
|
+
const atomicDeco = new import_state18.RangeSetBuilder();
|
4912
5036
|
const { state } = view;
|
4913
5037
|
const headerLevels = [];
|
4914
5038
|
const getHeaderLevels = (node, level) => {
|
4915
|
-
(0,
|
4916
|
-
F:
|
5039
|
+
(0, import_invariant4.invariant)(level > 0, void 0, {
|
5040
|
+
F: __dxlog_file9,
|
4917
5041
|
L: 178,
|
4918
5042
|
S: void 0,
|
4919
5043
|
A: [
|
@@ -4951,8 +5075,8 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4951
5075
|
listLevels.pop();
|
4952
5076
|
};
|
4953
5077
|
const getCurrentListLevel = () => {
|
4954
|
-
(0,
|
4955
|
-
F:
|
5078
|
+
(0, import_invariant4.invariant)(listLevels.length, void 0, {
|
5079
|
+
F: __dxlog_file9,
|
4956
5080
|
L: 200,
|
4957
5081
|
S: void 0,
|
4958
5082
|
A: [
|
@@ -4995,7 +5119,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4995
5119
|
} else {
|
4996
5120
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
4997
5121
|
if (num.length) {
|
4998
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5122
|
+
atomicDeco.add(mark.from, mark.from + len, import_view22.Decoration.replace({
|
4999
5123
|
widget: new TextWidget(num, theme.heading(level))
|
5000
5124
|
}));
|
5001
5125
|
}
|
@@ -5020,7 +5144,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5020
5144
|
if (node.from === line.to - 1) {
|
5021
5145
|
return false;
|
5022
5146
|
}
|
5023
|
-
deco.add(line.from, line.from,
|
5147
|
+
deco.add(line.from, line.from, import_view22.Decoration.line({
|
5024
5148
|
class: "cm-list-item",
|
5025
5149
|
attributes: {
|
5026
5150
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -5037,7 +5161,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5037
5161
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
5038
5162
|
const line = state.doc.lineAt(node.from);
|
5039
5163
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
5040
|
-
atomicDeco.add(line.from, to,
|
5164
|
+
atomicDeco.add(line.from, to, import_view22.Decoration.replace({
|
5041
5165
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
5042
5166
|
}));
|
5043
5167
|
break;
|
@@ -5124,7 +5248,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5124
5248
|
if (!editing) {
|
5125
5249
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5126
5250
|
}
|
5127
|
-
deco.add(marks[0].to, marks[1].from,
|
5251
|
+
deco.add(marks[0].to, marks[1].from, import_view22.Decoration.mark({
|
5128
5252
|
tagName: "a",
|
5129
5253
|
attributes: {
|
5130
5254
|
class: "cm-link",
|
@@ -5134,7 +5258,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5134
5258
|
}
|
5135
5259
|
}));
|
5136
5260
|
if (!editing) {
|
5137
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5261
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? import_view22.Decoration.replace({
|
5138
5262
|
widget: new LinkButton(url, options.renderLinkButton)
|
5139
5263
|
}) : hide);
|
5140
5264
|
}
|
@@ -5168,7 +5292,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5168
5292
|
}
|
5169
5293
|
}
|
5170
5294
|
};
|
5171
|
-
const tree = (0,
|
5295
|
+
const tree = (0, import_language9.syntaxTree)(state);
|
5172
5296
|
if (options.numberedHeadings?.from === void 0) {
|
5173
5297
|
for (const { from, to } of view.visibleRanges) {
|
5174
5298
|
tree.iterate({
|
@@ -5189,16 +5313,16 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5189
5313
|
atomicDeco: atomicDeco.finish()
|
5190
5314
|
};
|
5191
5315
|
};
|
5192
|
-
var forceUpdate =
|
5316
|
+
var forceUpdate = import_state18.StateEffect.define();
|
5193
5317
|
var decorateMarkdown = (options = {}) => {
|
5194
5318
|
return [
|
5195
|
-
|
5319
|
+
import_view22.ViewPlugin.fromClass(class {
|
5196
5320
|
constructor(view) {
|
5197
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5321
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(view, options, view.hasFocus));
|
5198
5322
|
}
|
5199
5323
|
update(update2) {
|
5200
5324
|
if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
|
5201
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5325
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(update2.view, options, update2.view.hasFocus));
|
5202
5326
|
this.clearUpdate();
|
5203
5327
|
} else if (update2.selectionSet) {
|
5204
5328
|
this.scheduleUpdate(update2.view);
|
@@ -5224,9 +5348,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5224
5348
|
}
|
5225
5349
|
}, {
|
5226
5350
|
provide: (plugin) => [
|
5227
|
-
|
5228
|
-
|
5229
|
-
|
5351
|
+
import_view22.EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view22.Decoration.none),
|
5352
|
+
import_view22.EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view22.Decoration.none),
|
5353
|
+
import_view22.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view22.Decoration.none)
|
5230
5354
|
]
|
5231
5355
|
}),
|
5232
5356
|
image(),
|
@@ -5236,8 +5360,8 @@ var decorateMarkdown = (options = {}) => {
|
|
5236
5360
|
];
|
5237
5361
|
};
|
5238
5362
|
var linkTooltip = (render) => {
|
5239
|
-
return (0,
|
5240
|
-
const syntax = (0,
|
5363
|
+
return (0, import_view27.hoverTooltip)((view, pos, side) => {
|
5364
|
+
const syntax = (0, import_language13.syntaxTree)(view.state).resolveInner(pos, side);
|
5241
5365
|
let link = null;
|
5242
5366
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
5243
5367
|
link = node.name === "Link" ? node : null;
|
@@ -5266,7 +5390,7 @@ var linkTooltip = (render) => {
|
|
5266
5390
|
};
|
5267
5391
|
});
|
5268
5392
|
};
|
5269
|
-
var
|
5393
|
+
var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
|
5270
5394
|
var mention = ({ debug, onSearch }) => {
|
5271
5395
|
return (0, import_autocomplete5.autocompletion)({
|
5272
5396
|
// TODO(burdon): Not working.
|
@@ -5281,7 +5405,7 @@ var mention = ({ debug, onSearch }) => {
|
|
5281
5405
|
import_log6.log.info("completion context", {
|
5282
5406
|
context
|
5283
5407
|
}, {
|
5284
|
-
F:
|
5408
|
+
F: __dxlog_file10,
|
5285
5409
|
L: 27,
|
5286
5410
|
S: void 0,
|
5287
5411
|
C: (f, a) => f(...a)
|
@@ -5320,7 +5444,7 @@ var InputModeExtensions = {
|
|
5320
5444
|
editorInputMode.of({
|
5321
5445
|
type: "vscode"
|
5322
5446
|
}),
|
5323
|
-
|
5447
|
+
import_view28.keymap.of(import_codemirror_vscode_keymap.vscodeKeymap)
|
5324
5448
|
],
|
5325
5449
|
vim: [
|
5326
5450
|
// https://github.com/replit/codemirror-vim
|
@@ -5329,7 +5453,7 @@ var InputModeExtensions = {
|
|
5329
5453
|
type: "vim",
|
5330
5454
|
noTabster: true
|
5331
5455
|
}),
|
5332
|
-
|
5456
|
+
import_view28.keymap.of([
|
5333
5457
|
{
|
5334
5458
|
key: "Alt-Escape",
|
5335
5459
|
run: (view) => {
|
@@ -5349,7 +5473,7 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
5349
5473
|
let t;
|
5350
5474
|
let idx = 0;
|
5351
5475
|
return [
|
5352
|
-
|
5476
|
+
import_view29.keymap.of([
|
5353
5477
|
{
|
5354
5478
|
// Reset.
|
5355
5479
|
key: "alt-meta-'",
|
@@ -5399,10 +5523,10 @@ var useActionHandler = (view) => {
|
|
5399
5523
|
view
|
5400
5524
|
]);
|
5401
5525
|
};
|
5402
|
-
var
|
5526
|
+
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5403
5527
|
var instanceCount = 0;
|
5404
5528
|
var useTextEditor = (props = {}, deps = []) => {
|
5405
|
-
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react8.useMemo)(() => (0,
|
5529
|
+
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react8.useMemo)(() => (0, import_util5.getProviderValue)(props), deps ?? []);
|
5406
5530
|
const [instanceId] = (0, import_react8.useState)(() => `text-editor-${++instanceCount}`);
|
5407
5531
|
const [view, setView] = (0, import_react8.useState)();
|
5408
5532
|
const parentRef = (0, import_react8.useRef)(null);
|
@@ -5414,7 +5538,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5414
5538
|
instanceId,
|
5415
5539
|
doc: initialValue?.length ?? 0
|
5416
5540
|
}, {
|
5417
|
-
F:
|
5541
|
+
F: __dxlog_file11,
|
5418
5542
|
L: 75,
|
5419
5543
|
S: void 0,
|
5420
5544
|
C: (f, a) => f(...a)
|
@@ -5431,27 +5555,27 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5431
5555
|
anchor
|
5432
5556
|
};
|
5433
5557
|
}
|
5434
|
-
const state =
|
5558
|
+
const state = import_state22.EditorState.create({
|
5435
5559
|
doc: initialValue,
|
5436
5560
|
// selection: initialSelection,
|
5437
5561
|
extensions: [
|
5438
5562
|
id && documentId.of(id),
|
5439
5563
|
extensions,
|
5440
5564
|
// NOTE: This doesn't catch errors in keymap functions.
|
5441
|
-
|
5565
|
+
import_view30.EditorView.exceptionSink.of((err) => {
|
5442
5566
|
import_log7.log.catch(err, void 0, {
|
5443
|
-
F:
|
5567
|
+
F: __dxlog_file11,
|
5444
5568
|
L: 97,
|
5445
5569
|
S: void 0,
|
5446
5570
|
C: (f, a) => f(...a)
|
5447
5571
|
});
|
5448
5572
|
})
|
5449
|
-
].filter(
|
5573
|
+
].filter(import_util5.isNotFalsy)
|
5450
5574
|
});
|
5451
|
-
view2 = new
|
5575
|
+
view2 = new import_view30.EditorView({
|
5452
5576
|
parent: parentRef.current,
|
5453
5577
|
state,
|
5454
|
-
scrollTo: scrollTo ?
|
5578
|
+
scrollTo: scrollTo ? import_view30.EditorView.scrollIntoView(scrollTo, {
|
5455
5579
|
yMargin: 96
|
5456
5580
|
}) : void 0,
|
5457
5581
|
dispatchTransactions: debug ? debugDispatcher : void 0
|
@@ -5472,7 +5596,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5472
5596
|
(0, import_log7.log)("destroy", {
|
5473
5597
|
id
|
5474
5598
|
}, {
|
5475
|
-
F:
|
5599
|
+
F: __dxlog_file11,
|
5476
5600
|
L: 134,
|
5477
5601
|
S: void 0,
|
5478
5602
|
C: (f, a) => f(...a)
|
@@ -5489,7 +5613,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5489
5613
|
scrollTo,
|
5490
5614
|
selection
|
5491
5615
|
}, {
|
5492
|
-
F:
|
5616
|
+
F: __dxlog_file11,
|
5493
5617
|
L: 143,
|
5494
5618
|
S: void 0,
|
5495
5619
|
C: (f, a) => f(...a)
|
@@ -5582,6 +5706,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5582
5706
|
createDataExtensions,
|
5583
5707
|
createEditorAction,
|
5584
5708
|
createEditorActionGroup,
|
5709
|
+
createEditorStateStore,
|
5585
5710
|
createEditorStateTransaction,
|
5586
5711
|
createElement,
|
5587
5712
|
createExternalCommentSync,
|