@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.
Files changed (55) hide show
  1. package/dist/lib/browser/index.mjs +383 -255
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +415 -290
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +383 -255
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/InputMode.stories.d.ts +2 -2
  11. package/dist/types/src/TextEditor.stories.d.ts +5 -40
  12. package/dist/types/src/TextEditor.stories.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  14. package/dist/types/src/defaults.d.ts +2 -0
  15. package/dist/types/src/defaults.d.ts.map +1 -1
  16. package/dist/types/src/extensions/command/command.d.ts +4 -2
  17. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  18. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  19. package/dist/types/src/extensions/command/menu.d.ts +12 -0
  20. package/dist/types/src/extensions/command/menu.d.ts.map +1 -0
  21. package/dist/types/src/extensions/command/preview.d.ts +12 -0
  22. package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
  23. package/dist/types/src/extensions/command/state.d.ts.map +1 -1
  24. package/dist/types/src/extensions/comments.d.ts +3 -3
  25. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  26. package/dist/types/src/extensions/factories.d.ts +2 -1
  27. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  28. package/dist/types/src/extensions/folding.d.ts +2 -8
  29. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  30. package/dist/types/src/extensions/selection.d.ts +6 -1
  31. package/dist/types/src/extensions/selection.d.ts.map +1 -1
  32. package/dist/types/src/{styles/stack-item-content-class-names.d.ts → fragments.d.ts} +1 -1
  33. package/dist/types/src/fragments.d.ts.map +1 -0
  34. package/dist/types/src/index.d.ts +0 -1
  35. package/dist/types/src/index.d.ts.map +1 -1
  36. package/dist/types/src/styles/theme.d.ts.map +1 -1
  37. package/package.json +27 -27
  38. package/src/InputMode.stories.tsx +4 -4
  39. package/src/TextEditor.stories.tsx +183 -61
  40. package/src/components/EditorToolbar/EditorToolbar.tsx +4 -5
  41. package/src/defaults.ts +12 -0
  42. package/src/extensions/command/command.ts +21 -2
  43. package/src/extensions/command/hint.ts +3 -0
  44. package/src/extensions/command/menu.ts +100 -0
  45. package/src/extensions/command/preview.ts +79 -0
  46. package/src/extensions/command/state.ts +9 -4
  47. package/src/extensions/comments.ts +6 -10
  48. package/src/extensions/factories.ts +4 -3
  49. package/src/extensions/folding.tsx +30 -73
  50. package/src/extensions/selection.ts +41 -21
  51. package/src/{styles/stack-item-content-class-names.ts → fragments.ts} +4 -2
  52. package/src/index.ts +0 -4
  53. package/src/styles/theme.ts +6 -1
  54. package/src/util/debug.ts +1 -1
  55. 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 EditorView21, keymap as keymap11 } from "@codemirror/view";
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, MenuProvider, useMenuActions, createGapSeparator } from "@dxos/react-ui-menu";
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/styles/stack-item-content-class-names.ts
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: "16px"
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.info("changes", {
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 EditorView7, keymap as keymap3 } from "@codemirror/view";
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.onRender(dom, (action) => {
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: action.insert
1908
+ insert: text
1902
1909
  },
1903
1910
  selection: {
1904
- anchor: pos + action.insert.length
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
- EditorView7.focusChangeEffect.of((_, focusing) => {
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 StateField4 } from "@codemirror/state";
2047
- import { hoverTooltip, keymap as keymap5, Decoration as Decoration4, EditorView as EditorView9, ViewPlugin as ViewPlugin4 } from "@codemirror/view";
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 EditorView8, keymap as keymap4 } from "@codemirror/view";
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 ? EditorView8.scrollIntoView(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 selectionState = (state = {}) => {
2071
- const setState = (id, selectionState2) => {
2072
- state[id] = selectionState2;
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
- EditorView8.updateListener.of(({ view, transactions }) => {
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
- const { scrollTop } = view.scrollDOM;
2088
- const pos = view.posAtCoords({
2089
- x: 0,
2090
- y: scrollTop
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 selection = state[view.state.facet(documentId)];
2108
- if (selection) {
2109
- view.dispatch(createEditorStateTransaction(selection));
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 __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
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 = StateField4.define({
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 = EditorView9.theme({
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) => Decoration4.mark({
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 = EditorView9.decorations.compute([
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: __dxlog_file6,
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 Decoration4.set(decorations);
2370
+ return Decoration5.set(decorations);
2202
2371
  });
2203
2372
  var commentClickedEffect = StateEffect3.define();
2204
- var handleCommentClick = EditorView9.domEventHandlers({
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
- EditorView9.domEventHandlers({
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
- EditorView9.updateListener.of((update2) => {
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
- EditorView9.updateListener.of(({ view, state, changes }) => {
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
- EditorView9.updateListener.of(({ view, state }) => {
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 ? EditorView9.scrollIntoView(range.from, center ? {
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) => ViewPlugin4.fromClass(class {
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(() => EditorView9.updateListener.of((update2) => {
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(() => EditorView9.updateListener.of((update2) => {
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 StateField5 } from "@codemirror/state";
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) => syntaxTree(state).iterate({
2753
+ const logTokens = (state) => syntaxTree2(state).iterate({
2585
2754
  enter: (node) => log8(node.type)
2586
2755
  });
2587
- return StateField5.define({
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 EditorView10 } from "@codemirror/view";
2595
- var styles4 = EditorView10.theme({
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
- EditorView10.domEventHandlers({
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 EditorView12, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
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 isNotFalsy2 } from "@dxos/util";
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 StateField6 } from "@codemirror/state";
2645
- import { EditorView as EditorView11 } from "@codemirror/view";
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 = StateField6.define({
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
- EditorView11.domEventHandlers({
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 __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
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
- EditorView12.exceptionSink.of((err) => {
2867
+ EditorView13.exceptionSink.of((err) => {
2700
2868
  log5.catch(err, void 0, {
2701
- F: __dxlog_file7,
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 && EditorView12.lineWrapping,
2887
+ props.lineWrapping && EditorView13.lineWrapping,
2719
2888
  props.placeholder && placeholder(props.placeholder),
2720
- props.readonly && [
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(isNotFalsy2))
2748
- ].filter(isNotFalsy2);
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
- EditorView12.darkTheme.of(themeMode === "dark"),
2759
- EditorView12.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
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 && EditorView12.editorAttributes.of({
2928
+ slots.editor?.className && EditorView13.editorAttributes.of({
2763
2929
  class: slots.editor.className
2764
2930
  }),
2765
- slots.content?.className && EditorView12.contentAttributes.of({
2931
+ slots.content?.className && EditorView13.contentAttributes.of({
2766
2932
  class: slots.content.className
2767
2933
  })
2768
- ].filter(isNotFalsy2);
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, foldedRanges, foldEffect } from "@codemirror/language";
2794
- import { EditorView as EditorView13 } from "@codemirror/view";
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 = (state = {}) => {
2799
- const setState = (id, foldState) => {
2800
- state[id] = foldState;
2801
- };
2802
- const setStateDebounced = debounce3(setState, 1e3);
2803
- let initialized = false;
2804
- return [
2805
- codeFolding({
2806
- placeholderDOM: () => {
2807
- return document.createElement("span");
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
- const foldState = {
2862
- foldedRanges: ranges
2863
- };
2864
- setStateDebounced?.(id, foldState);
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 EditorView14 } from "@codemirror/view";
2997
+ import { EditorView as EditorView15 } from "@codemirror/view";
2871
2998
  var listener = ({ onFocus, onChange }) => {
2872
2999
  const extensions = [];
2873
- onFocus && extensions.push(EditorView14.focusChangeEffect.of((_, focusing) => {
3000
+ onFocus && extensions.push(EditorView15.focusChangeEffect.of((_, focusing) => {
2874
3001
  onFocus(focusing);
2875
3002
  return null;
2876
3003
  }));
2877
- onChange && extensions.push(EditorView14.updateListener.of((update2) => {
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 syntaxTree2 } from "@codemirror/language";
3012
+ import { syntaxTree as syntaxTree3 } from "@codemirror/language";
2886
3013
  import { EditorSelection } from "@codemirror/state";
2887
- import { EditorView as EditorView15, keymap as keymap7 } from "@codemirror/view";
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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
- syntaxTree2(state).iterate({
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(() => EditorView15.updateListener.of((update2) => {
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 syntaxTree3 } from "@codemirror/language";
4260
- import { StateField as StateField7 } from "@codemirror/state";
4261
- var debugTree = (cb) => StateField7.define({
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(syntaxTree3(state).cursor());
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 syntaxTree7 } from "@codemirror/language";
4287
- import { RangeSetBuilder as RangeSetBuilder3, StateEffect as StateEffect5 } from "@codemirror/state";
4288
- import { EditorView as EditorView19, Decoration as Decoration7, WidgetType as WidgetType5, ViewPlugin as ViewPlugin6 } from "@codemirror/view";
4289
- import { invariant as invariant3 } from "@dxos/invariant";
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 syntaxTree4 } from "@codemirror/language";
4420
+ import { syntaxTree as syntaxTree5 } from "@codemirror/language";
4294
4421
  import { Transaction as Transaction2 } from "@codemirror/state";
4295
- import { ViewPlugin as ViewPlugin5 } from "@codemirror/view";
4422
+ import { ViewPlugin as ViewPlugin6 } from "@codemirror/view";
4296
4423
  var adjustChanges = () => {
4297
- return ViewPlugin5.fromClass(class {
4424
+ return ViewPlugin6.fromClass(class {
4298
4425
  update(update2) {
4299
- const tree = syntaxTree4(update2.state);
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 syntaxTree5 } from "@codemirror/language";
4438
- import { StateField as StateField8 } from "@codemirror/state";
4439
- import { Decoration as Decoration5, EditorView as EditorView16, WidgetType as WidgetType3 } from "@codemirror/view";
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
- StateField8.define({
4569
+ StateField9.define({
4443
4570
  create: (state) => {
4444
- return Decoration5.set(buildDecorations(0, state.doc.length, state));
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: buildDecorations(from, to, tr.state)
4591
+ add: buildDecorations2(from, to, tr.state)
4465
4592
  });
4466
4593
  },
4467
- provide: (field) => EditorView16.decorations.from(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 buildDecorations = (from, to, state) => {
4606
+ var buildDecorations2 = (from, to, state) => {
4480
4607
  const decorations = [];
4481
4608
  const cursor = state.selection.main.head;
4482
- syntaxTree5(state).iterate({
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(Decoration5.replace({
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 WidgetType3 {
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 EditorView17 } from "@codemirror/view";
4654
+ import { EditorView as EditorView18 } from "@codemirror/view";
4528
4655
  var bulletListIndentationWidth = 24;
4529
4656
  var orderedListIndentationWidth = 36;
4530
- var formattingStyles = EditorView17.theme({
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 syntaxTree6 } from "@codemirror/language";
4650
- import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField9 } from "@codemirror/state";
4651
- import { Decoration as Decoration6, EditorView as EditorView18, WidgetType as WidgetType4 } from "@codemirror/view";
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 StateField9.define({
4780
+ return StateField10.define({
4654
4781
  create: (state) => update(state, options),
4655
4782
  update: (_, tr) => update(tr.state, options),
4656
- provide: (field) => EditorView18.decorations.from(field)
4783
+ provide: (field) => EditorView19.decorations.from(field)
4657
4784
  });
4658
4785
  };
4659
4786
  var update = (state, _options) => {
4660
- const builder = new RangeSetBuilder2();
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
- syntaxTree6(state).iterate({
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, Decoration6.replace({
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, Decoration6.mark({
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 WidgetType4 {
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 __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
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 WidgetType5 {
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 WidgetType5 {
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 WidgetType5 {
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 WidgetType5 {
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 = Decoration7.replace({});
4839
- var blockQuote = Decoration7.line({
4965
+ var hide = Decoration8.replace({});
4966
+ var blockQuote = Decoration8.line({
4840
4967
  class: mx4("cm-blockquote")
4841
4968
  });
4842
- var fencedCodeLine = Decoration7.line({
4969
+ var fencedCodeLine = Decoration8.line({
4843
4970
  class: mx4("cm-code cm-codeblock-line")
4844
4971
  });
4845
- var fencedCodeLineFirst = Decoration7.line({
4972
+ var fencedCodeLineFirst = Decoration8.line({
4846
4973
  class: mx4("cm-code cm-codeblock-line", "cm-codeblock-first")
4847
4974
  });
4848
- var fencedCodeLineLast = Decoration7.line({
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 = Decoration7.replace({
4981
+ var horizontalRule = Decoration8.replace({
4855
4982
  widget: new HorizontalRuleWidget()
4856
4983
  });
4857
- var checkedTask = Decoration7.replace({
4984
+ var checkedTask = Decoration8.replace({
4858
4985
  widget: new CheckboxWidget(true)
4859
4986
  });
4860
- var uncheckedTask = Decoration7.replace({
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 buildDecorations2 = (view, options, focus2) => {
4876
- const deco = new RangeSetBuilder3();
4877
- const atomicDeco = new RangeSetBuilder3();
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
- invariant3(level > 0, void 0, {
4882
- F: __dxlog_file8,
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
- invariant3(listLevels.length, void 0, {
4921
- F: __dxlog_file8,
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, Decoration7.replace({
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, Decoration7.line({
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, Decoration7.replace({
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, Decoration7.mark({
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 ? Decoration7.replace({
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 = syntaxTree7(state);
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
- ViewPlugin6.fromClass(class {
5288
+ ViewPlugin7.fromClass(class {
5162
5289
  constructor(view) {
5163
- ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
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 } = buildDecorations2(update2.view, options, update2.view.hasFocus));
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
- EditorView19.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration7.none),
5194
- EditorView19.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration7.none),
5195
- EditorView19.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration7.none)
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 syntaxTree8 } from "@codemirror/language";
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 = syntaxTree8(view.state).resolveInner(pos, side);
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 __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
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: __dxlog_file9,
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 EditorView20 } from "@codemirror/view";
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 isNotFalsy3 } from "@dxos/util";
5397
- var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
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: __dxlog_file10,
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
- EditorView20.exceptionSink.of((err) => {
5563
+ EditorView21.exceptionSink.of((err) => {
5437
5564
  log7.catch(err, void 0, {
5438
- F: __dxlog_file10,
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(isNotFalsy3)
5571
+ ].filter(isNotFalsy4)
5445
5572
  });
5446
- view2 = new EditorView20({
5573
+ view2 = new EditorView21({
5447
5574
  parent: parentRef.current,
5448
5575
  state,
5449
- scrollTo: scrollTo ? EditorView20.scrollIntoView(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: __dxlog_file10,
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: __dxlog_file10,
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
- EditorView21 as EditorView,
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,