@dxos/react-ui-editor 0.3.11-main.3d4adea → 0.3.11-main.42059c4

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 (31) hide show
  1. package/dist/lib/browser/index.mjs +148 -111
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/TextEditor.d.ts +2 -2
  5. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/comments.stories.d.ts +1 -1
  7. package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +1 -1
  8. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  9. package/dist/types/src/extensions/automerge/defs.d.ts +4 -4
  10. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  11. package/dist/types/src/extensions/automerge/index.d.ts +0 -1
  12. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -1
  13. package/dist/types/src/extensions/automerge/semaphore.d.ts +4 -9
  14. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -1
  15. package/dist/types/src/extensions/comments.d.ts +12 -3
  16. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  17. package/dist/types/src/extensions/tasklist.d.ts +5 -1
  18. package/dist/types/src/extensions/tasklist.d.ts.map +1 -1
  19. package/dist/types/src/hooks/index.d.ts +1 -1
  20. package/dist/types/src/hooks/index.d.ts.map +1 -1
  21. package/package.json +25 -25
  22. package/src/components/TextEditor/TextEditor.tsx +10 -10
  23. package/src/components/TextEditor/comments.stories.tsx +78 -38
  24. package/src/extensions/automerge/automerge.ts +11 -11
  25. package/src/extensions/automerge/defs.ts +13 -9
  26. package/src/extensions/automerge/index.ts +0 -1
  27. package/src/extensions/automerge/semaphore.ts +10 -12
  28. package/src/extensions/comments.ts +104 -27
  29. package/src/extensions/tasklist.ts +51 -75
  30. package/src/extensions/yjs/yjs.test.ts +1 -1
  31. package/src/hooks/index.ts +2 -1
@@ -51,7 +51,7 @@ var autocomplete = ({ onSearch }) => {
51
51
  };
52
52
 
53
53
  // packages/ui/react-ui-editor/src/extensions/automerge/automerge.ts
54
- import { Facet as Facet2, StateField } from "@codemirror/state";
54
+ import { StateField } from "@codemirror/state";
55
55
  import { ViewPlugin } from "@codemirror/view";
56
56
  import { next as A } from "@dxos/automerge/automerge";
57
57
 
@@ -92,7 +92,7 @@ var cursorConverter = (handle, path) => ({
92
92
  });
93
93
 
94
94
  // packages/ui/react-ui-editor/src/extensions/automerge/defs.ts
95
- import { Annotation, StateEffect } from "@codemirror/state";
95
+ import { Annotation, StateEffect, Facet } from "@codemirror/state";
96
96
  var effectType = StateEffect.define({});
97
97
  var updateHeads = (newHeads) => effectType.of({
98
98
  newHeads
@@ -101,6 +101,9 @@ var getLastHeads = (state, field) => state.field(field).lastHeads;
101
101
  var getPath = (state, field) => state.field(field).path;
102
102
  var reconcileAnnotationType = Annotation.define();
103
103
  var isReconcileTx = (tr) => !!tr.annotation(reconcileAnnotationType);
104
+ var semaphoreFacet = Facet.define({
105
+ combine: (values) => values.at(-1)
106
+ });
104
107
 
105
108
  // packages/ui/react-ui-editor/src/extensions/automerge/semaphore.ts
106
109
  import { next as automerge2 } from "@dxos/automerge/automerge";
@@ -237,11 +240,11 @@ var charPath = (textPath, candidatePath) => {
237
240
 
238
241
  // packages/ui/react-ui-editor/src/extensions/automerge/semaphore.ts
239
242
  var PatchSemaphore = class {
240
- constructor(_field) {
243
+ constructor(_handle, _field) {
244
+ this._handle = _handle;
241
245
  this._field = _field;
242
246
  this._inReconcile = false;
243
- this._queue = [];
244
- this.reconcile = (handle, view) => {
247
+ this.reconcile = (view) => {
245
248
  if (this._inReconcile) {
246
249
  return;
247
250
  }
@@ -259,11 +262,11 @@ var PatchSemaphore = class {
259
262
  annotations: reconcileAnnotationType.of(true)
260
263
  });
261
264
  }
262
- let newHeads = updateAutomerge(this._field, handle, transactions, view.state);
265
+ let newHeads = updateAutomerge(this._field, this._handle, transactions, view.state);
263
266
  if (newHeads === null || newHeads === void 0) {
264
- newHeads = automerge2.getHeads(handle.docSync());
267
+ newHeads = automerge2.getHeads(this._handle.docSync());
265
268
  }
266
- const diff = automerge2.equals(oldHeads, newHeads) ? [] : automerge2.diff(handle.docSync(), oldHeads, newHeads);
269
+ const diff = automerge2.equals(oldHeads, newHeads) ? [] : automerge2.diff(this._handle.docSync(), oldHeads, newHeads);
267
270
  updateCodeMirror(view, selection, path, diff);
268
271
  view.dispatch({
269
272
  effects: updateHeads(newHeads),
@@ -275,14 +278,14 @@ var PatchSemaphore = class {
275
278
  };
276
279
 
277
280
  // packages/ui/react-ui-editor/src/extensions/cursor.ts
278
- import { Facet } from "@codemirror/state";
281
+ import { Facet as Facet2 } from "@codemirror/state";
279
282
  var defaultCursorConverter = {
280
283
  toCursor: (position) => position.toString(),
281
284
  fromCursor: (cursor) => parseInt(cursor)
282
285
  };
283
286
  var Cursor = class {
284
287
  static {
285
- this.converter = Facet.define({
288
+ this.converter = Facet2.define({
286
289
  combine: (providers) => providers[0] ?? defaultCursorConverter
287
290
  });
288
291
  }
@@ -310,9 +313,6 @@ var Cursor = class {
310
313
  };
311
314
 
312
315
  // packages/ui/react-ui-editor/src/extensions/automerge/automerge.ts
313
- var semaphoreFacet = Facet2.define({
314
- combine: (values) => values.at(-1)
315
- });
316
316
  var automerge3 = ({ handle, path }) => {
317
317
  const stateField = StateField.define({
318
318
  create: () => ({
@@ -343,19 +343,19 @@ var automerge3 = ({ handle, path }) => {
343
343
  return result;
344
344
  }
345
345
  });
346
- const semaphore = new PatchSemaphore(stateField);
347
- const viewPlugin = ViewPlugin.fromClass(class AutomergeCodemirrorViewPlugin {
346
+ const semaphore = new PatchSemaphore(handle, stateField);
347
+ const viewPlugin = ViewPlugin.fromClass(class AutomergeViewPlugin {
348
348
  constructor(_view) {
349
349
  this._view = _view;
350
350
  this._handleChange = () => {
351
- this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
351
+ this._view.state.facet(semaphoreFacet).reconcile(this._view);
352
352
  };
353
353
  handle.addListener("change", this._handleChange);
354
354
  }
355
355
  update(update2) {
356
356
  if (update2.transactions.length > 0 && update2.transactions.some((tr) => !isReconcileTx(tr))) {
357
357
  queueMicrotask(() => {
358
- this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
358
+ this._view.state.facet(semaphoreFacet).reconcile(this._view);
359
359
  });
360
360
  }
361
361
  }
@@ -1105,7 +1105,6 @@ import { hoverTooltip, keymap as keymap3, Decoration as Decoration3, EditorView
1105
1105
  import sortBy from "lodash.sortby";
1106
1106
  import { debounce } from "@dxos/async";
1107
1107
  import { invariant as invariant2 } from "@dxos/invariant";
1108
- import { log as log2 } from "@dxos/log";
1109
1108
  import { nonNullable } from "@dxos/util";
1110
1109
 
1111
1110
  // packages/ui/react-ui-editor/src/util.ts
@@ -1173,7 +1172,7 @@ var commentsStateField = StateField2.define({
1173
1172
  ...effect.value
1174
1173
  };
1175
1174
  }
1176
- if (effect.is(setCommentRange)) {
1175
+ if (effect.is(setCommentRange) && effect.value.comments.length > 0) {
1177
1176
  const { comments: comments2 } = effect.value;
1178
1177
  const ranges = comments2.map((comment) => {
1179
1178
  const range = Cursor.getRangeFromCursor(cursorConverter3, comment.cursor);
@@ -1214,6 +1213,65 @@ var highlightDecorations = EditorView5.decorations.compute([
1214
1213
  }).filter(nonNullable) ?? [];
1215
1214
  return Decoration3.set(decorations);
1216
1215
  });
1216
+ var trackPastedComments = (onUpdate) => {
1217
+ let tracked = null;
1218
+ const handleTrack = (event, view) => {
1219
+ const comments2 = view.state.field(commentsStateField);
1220
+ const { main } = view.state.selection;
1221
+ const selectedRanges = comments2.ranges.filter((range) => range.from >= main.from && range.to <= main.to && range.from < range.to);
1222
+ if (!selectedRanges.length) {
1223
+ tracked = null;
1224
+ } else {
1225
+ tracked = {
1226
+ text: view.state.doc.slice(main.from, main.to),
1227
+ comments: selectedRanges.map((range) => ({
1228
+ id: range.id,
1229
+ from: range.from - main.from,
1230
+ to: range.to - main.from
1231
+ }))
1232
+ };
1233
+ }
1234
+ };
1235
+ return [
1236
+ EditorView5.domEventHandlers({
1237
+ cut: handleTrack,
1238
+ copy: handleTrack
1239
+ }),
1240
+ // Handle paste.
1241
+ EditorView5.updateListener.of(({ view, state, transactions }) => {
1242
+ if (tracked) {
1243
+ const paste = transactions.find((tr) => tr.isUserEvent("input.paste"));
1244
+ if (paste) {
1245
+ let found = -1;
1246
+ paste.changes.iterChanges((fromA, toA, fromB, toB, text) => {
1247
+ if (text.eq(tracked.text)) {
1248
+ for (let i = transactions.indexOf(paste) + 1; i < transactions.length; i++) {
1249
+ fromB = transactions[i].changes.mapPos(fromB);
1250
+ }
1251
+ found = fromB;
1252
+ }
1253
+ });
1254
+ if (found > -1) {
1255
+ const comments2 = tracked.comments;
1256
+ view.state.facet(semaphoreFacet).reconcile(view);
1257
+ const active = state.field(commentsStateField).ranges;
1258
+ for (const moved of comments2) {
1259
+ if (active.some((range) => range.id === moved.id && range.from === range.to)) {
1260
+ const range = {
1261
+ from: found + moved.from,
1262
+ to: found + moved.to
1263
+ };
1264
+ const cursor = Cursor.getCursorFromRange(state.facet(Cursor.converter), range);
1265
+ onUpdate(moved.id, cursor);
1266
+ }
1267
+ }
1268
+ }
1269
+ tracked = null;
1270
+ }
1271
+ }
1272
+ })
1273
+ ];
1274
+ };
1217
1275
  var comments = (options = {}) => {
1218
1276
  const { key: shortcut = "meta-'" } = options;
1219
1277
  const handleSelect = debounce((state) => options.onSelect?.(state), 200);
@@ -1221,14 +1279,14 @@ var comments = (options = {}) => {
1221
1279
  const cursorConverter3 = view.state.facet(Cursor.converter);
1222
1280
  invariant2(options.onCreate, void 0, {
1223
1281
  F: __dxlog_file3,
1224
- L: 177,
1282
+ L: 262,
1225
1283
  S: void 0,
1226
1284
  A: [
1227
1285
  "options.onCreate",
1228
1286
  ""
1229
1287
  ]
1230
1288
  });
1231
- const { head, from, to } = view.state.selection.main;
1289
+ const { from, to } = view.state.selection.main;
1232
1290
  if (from === to) {
1233
1291
  return false;
1234
1292
  }
@@ -1247,18 +1305,6 @@ var comments = (options = {}) => {
1247
1305
  anchor: from
1248
1306
  }
1249
1307
  });
1250
- if (options.footnote) {
1251
- const tag = `[^${id}]`;
1252
- view.dispatch({
1253
- changes: {
1254
- from: head,
1255
- insert: tag
1256
- },
1257
- selection: {
1258
- anchor: head + tag.length
1259
- }
1260
- });
1261
- }
1262
1308
  return true;
1263
1309
  }
1264
1310
  }
@@ -1320,14 +1366,7 @@ var comments = (options = {}) => {
1320
1366
  if (from2 === to2) {
1321
1367
  const newRange = Cursor.getRangeFromCursor(cursorConverter3, range.cursor);
1322
1368
  if (!newRange || newRange.to - newRange.from === 0) {
1323
- log2.info("deleted comment", {
1324
- thread: range.id
1325
- }, {
1326
- F: __dxlog_file3,
1327
- L: 274,
1328
- S: void 0,
1329
- C: (f, a) => f(...a)
1330
- });
1369
+ options.onDelete?.(range.id);
1331
1370
  }
1332
1371
  }
1333
1372
  if (from <= range.to) {
@@ -1377,7 +1416,8 @@ var comments = (options = {}) => {
1377
1416
  });
1378
1417
  }
1379
1418
  }
1380
- })
1419
+ }),
1420
+ options.onUpdate ? trackPastedComments(options.onUpdate) : []
1381
1421
  ];
1382
1422
  };
1383
1423
 
@@ -2025,87 +2065,85 @@ var TableWidget = class extends WidgetType5 {
2025
2065
  };
2026
2066
 
2027
2067
  // packages/ui/react-ui-editor/src/extensions/tasklist.ts
2028
- import { EditorView as EditorView11, Decoration as Decoration8, WidgetType as WidgetType6, MatchDecorator as MatchDecorator2, ViewPlugin as ViewPlugin6 } from "@codemirror/view";
2029
- var styles5 = EditorView11.baseTheme({
2030
- "& .cm-task-item": {
2031
- paddingLeft: "4px",
2032
- paddingRight: "8px"
2033
- }
2034
- });
2068
+ import { syntaxTree as syntaxTree4 } from "@codemirror/language";
2069
+ import { RangeSetBuilder as RangeSetBuilder3 } from "@codemirror/state";
2070
+ import { EditorView as EditorView11, Decoration as Decoration8, WidgetType as WidgetType6, ViewPlugin as ViewPlugin6 } from "@codemirror/view";
2035
2071
  var CheckboxWidget = class extends WidgetType6 {
2036
- constructor(_checked, _indent, _onCheck) {
2072
+ constructor(_checked) {
2037
2073
  super();
2038
2074
  this._checked = _checked;
2039
- this._indent = _indent;
2040
- this._onCheck = _onCheck;
2041
2075
  }
2042
2076
  eq(other) {
2043
- return this._checked === other._checked && this._indent === other._indent;
2077
+ return this._checked === other._checked;
2044
2078
  }
2045
2079
  toDOM(view) {
2046
- const wrap = document.createElement("span");
2047
- wrap.className = "cm-task-item";
2048
- wrap.setAttribute("aria-hidden", "true");
2049
- wrap.style.setProperty("margin-left", this._indent * 24 + "px");
2050
- const input = wrap.appendChild(document.createElement("input"));
2080
+ const input = document.createElement("input");
2051
2081
  input.type = "checkbox";
2052
2082
  input.checked = this._checked;
2053
- if (!this._onCheck) {
2083
+ if (view.state.readOnly) {
2054
2084
  input.setAttribute("disabled", "true");
2055
- }
2056
- if (this._onCheck) {
2057
- input.onchange = (event) => {
2058
- this._onCheck?.(event.target.checked);
2059
- return true;
2085
+ } else {
2086
+ input.onmousedown = (event) => {
2087
+ const pos = view.posAtDOM(input);
2088
+ const text = view.state.sliceDoc(pos, pos + 3);
2089
+ if (text === (this._checked ? "[x]" : "[ ]")) {
2090
+ view.dispatch({
2091
+ changes: {
2092
+ from: pos + 1,
2093
+ to: pos + 2,
2094
+ insert: this._checked ? " " : "x"
2095
+ }
2096
+ });
2097
+ event.preventDefault();
2098
+ }
2060
2099
  };
2061
2100
  }
2062
- return wrap;
2101
+ return input;
2063
2102
  }
2064
2103
  ignoreEvent() {
2065
2104
  return false;
2066
2105
  }
2067
2106
  };
2107
+ var checkedDeco = Decoration8.replace({
2108
+ widget: new CheckboxWidget(true)
2109
+ });
2110
+ var uncheckedDeco = Decoration8.replace({
2111
+ widget: new CheckboxWidget(false)
2112
+ });
2068
2113
  var tasklist = (options = {}) => {
2069
- const taskMatcher = new MatchDecorator2({
2070
- regexp: /^(\s*)- \[([ xX])\]\s/g,
2071
- decoration: (match, view, pos) => {
2072
- const indent = Math.floor(match[1].length / 2);
2073
- const checked = match[2] === "x" || match[2] === "X";
2074
- return Decoration8.replace({
2075
- widget: new CheckboxWidget(checked, indent, view.state.readOnly ? void 0 : (checked2) => {
2076
- const idx = pos + match[0].indexOf("[") + 1;
2077
- view.dispatch({
2078
- changes: {
2079
- from: idx,
2080
- to: idx + 1,
2081
- insert: checked2 ? "x" : " "
2082
- },
2083
- // TODO(burdon): Restore cursor position? More useful to move to end of line (can indent).
2084
- selection: {
2085
- anchor: idx + 3
2086
- }
2087
- });
2088
- })
2089
- });
2090
- }
2091
- });
2092
- const tasks = ViewPlugin6.fromClass(class {
2114
+ return ViewPlugin6.fromClass(class {
2093
2115
  constructor(view) {
2094
- this.tasks = taskMatcher.createDeco(view);
2116
+ this.decorations = buildDecorations3(view);
2095
2117
  }
2096
2118
  update(update2) {
2097
- this.tasks = taskMatcher.updateDeco(update2, this.tasks);
2119
+ if (update2.docChanged || update2.viewportChanged || update2.selectionSet) {
2120
+ this.decorations = buildDecorations3(update2.view);
2121
+ }
2098
2122
  }
2099
2123
  }, {
2100
- decorations: (value) => value.tasks,
2124
+ decorations: (v) => v.decorations,
2101
2125
  provide: (plugin) => EditorView11.atomicRanges.of((view) => {
2102
- return view.plugin(plugin)?.tasks || Decoration8.none;
2126
+ return view.plugin(plugin)?.decorations || Decoration8.none;
2103
2127
  })
2104
2128
  });
2105
- return [
2106
- tasks,
2107
- styles5
2108
- ];
2129
+ };
2130
+ var buildDecorations3 = (view) => {
2131
+ const builder = new RangeSetBuilder3();
2132
+ const { state } = view;
2133
+ const cursor = state.selection.main.head;
2134
+ for (const { from, to } of view.visibleRanges) {
2135
+ syntaxTree4(state).iterate({
2136
+ enter: (node) => {
2137
+ if (node.name === "TaskMarker" && (cursor < node.from || cursor > node.to)) {
2138
+ const checked = state.doc.sliceString(node.from + 1, node.to - 1) === "x";
2139
+ builder.add(node.from, node.to, checked ? checkedDeco : uncheckedDeco);
2140
+ }
2141
+ },
2142
+ from,
2143
+ to
2144
+ });
2145
+ }
2146
+ return builder.finish();
2109
2147
  };
2110
2148
 
2111
2149
  // packages/ui/react-ui-editor/src/extensions/typewriter.ts
@@ -2427,7 +2465,7 @@ var EditorModes = [
2427
2465
  "default",
2428
2466
  "vim"
2429
2467
  ];
2430
- var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, focus, selection, readonly, comments: comments2, extensions = [], editorMode, theme, slots = defaultSlots }, forwardedRef) => {
2468
+ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, autofocus, readonly, selection, comments: comments2, extensions = [], editorMode, theme, slots = defaultSlots }, forwardedRef) => {
2431
2469
  const tabsterDOMAttribute = useFocusableGroup({
2432
2470
  tabBehavior: "limited"
2433
2471
  });
@@ -2438,12 +2476,12 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, focus, selection, read
2438
2476
  view
2439
2477
  ]);
2440
2478
  useEffect(() => {
2441
- if (view && focus) {
2442
- view.focus();
2479
+ if (autofocus) {
2480
+ view?.focus();
2443
2481
  }
2444
2482
  }, [
2445
- view,
2446
- focus
2483
+ autofocus,
2484
+ view
2447
2485
  ]);
2448
2486
  const { awareness: awareness2, peer } = model;
2449
2487
  useEffect(() => {
@@ -2534,11 +2572,11 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, focus, selection, read
2534
2572
  return /* @__PURE__ */ React.createElement("div", {
2535
2573
  key: model.id,
2536
2574
  role: "none",
2537
- ref: rootRef,
2538
2575
  tabIndex: 0,
2539
2576
  onKeyUp: handleKeyUp,
2540
2577
  ...slots.root,
2541
- ...editorMode !== "vim" && tabsterDOMAttribute
2578
+ ...editorMode !== "vim" && tabsterDOMAttribute,
2579
+ ref: rootRef
2542
2580
  });
2543
2581
  });
2544
2582
  var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, extensions = [], theme = textTheme, slots, ...props }, forwardedRef) => {
@@ -2581,7 +2619,7 @@ var MarkdownEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeh
2581
2619
  });
2582
2620
  var defaultSlots = {
2583
2621
  root: {
2584
- className: mx3("p-2 overflow-y-auto", inputSurface)
2622
+ className: mx3("w-full p-2 overflow-y-auto", inputSurface)
2585
2623
  }
2586
2624
  };
2587
2625
  var defaultTextSlots = {
@@ -2600,7 +2638,7 @@ import { isNotNullOrUndefined } from "@dxos/util";
2600
2638
  import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
2601
2639
  import { Context as Context2 } from "@dxos/context";
2602
2640
  import { invariant as invariant3 } from "@dxos/invariant";
2603
- import { log as log3 } from "@dxos/log";
2641
+ import { log as log2 } from "@dxos/log";
2604
2642
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/awareness-provider.ts";
2605
2643
  var DEBOUNCE_INTERVAL = 100;
2606
2644
  var SpaceAwarenessProvider = class {
@@ -2639,7 +2677,7 @@ var SpaceAwarenessProvider = class {
2639
2677
  void this._space.postMessage(this._channel, {
2640
2678
  kind: "query"
2641
2679
  }).catch((err) => {
2642
- log3.debug("failed to query awareness", {
2680
+ log2.debug("failed to query awareness", {
2643
2681
  err
2644
2682
  }, {
2645
2683
  F: __dxlog_file4,
@@ -2712,7 +2750,7 @@ import * as encoding from "lib0/encoding";
2712
2750
  import { Observable } from "lib0/observable";
2713
2751
  import * as YP from "y-protocols/awareness";
2714
2752
  import { invariant as invariant4 } from "@dxos/invariant";
2715
- import { log as log4 } from "@dxos/log";
2753
+ import { log as log3 } from "@dxos/log";
2716
2754
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/yjs.ts";
2717
2755
  var createYjsModel = ({ identity, space, text }) => {
2718
2756
  invariant4(text?.doc && text?.content, void 0, {
@@ -2775,7 +2813,7 @@ var YAwarenessProvider = class extends Observable {
2775
2813
  return this._awareness;
2776
2814
  }
2777
2815
  _handleAwarenessUpdate({ added, updated, removed }, origin) {
2778
- log4("awareness update", {
2816
+ log3("awareness update", {
2779
2817
  added,
2780
2818
  updated,
2781
2819
  removed,
@@ -2793,7 +2831,7 @@ var YAwarenessProvider = class extends Observable {
2793
2831
  void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwareness));
2794
2832
  }
2795
2833
  _handleSpaceMessage({ payload }) {
2796
- log4("space message", payload, {
2834
+ log3("space message", payload, {
2797
2835
  F: __dxlog_file5,
2798
2836
  L: 109,
2799
2837
  S: this,
@@ -2926,7 +2964,6 @@ export {
2926
2964
  comments,
2927
2965
  createAutomergeModel,
2928
2966
  createYjsModel,
2929
- cursorConverter,
2930
2967
  defaultMarkdownSlots,
2931
2968
  defaultOptions,
2932
2969
  defaultSlots,