@dxos/react-ui-editor 0.8.4-main.c1de068 → 0.8.4-main.fd6878d

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 (122) hide show
  1. package/dist/lib/browser/index.mjs +299 -249
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/testing/index.mjs.map +2 -2
  5. package/dist/lib/node-esm/index.mjs +299 -249
  6. package/dist/lib/node-esm/index.mjs.map +4 -4
  7. package/dist/lib/node-esm/meta.json +1 -1
  8. package/dist/lib/node-esm/testing/index.mjs.map +2 -2
  9. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  10. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  12. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  14. package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
  15. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +1 -1
  16. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  17. package/dist/types/src/extensions/autocomplete.d.ts +1 -1
  18. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  19. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  20. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  21. package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
  22. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  23. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  24. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  25. package/dist/types/src/extensions/command/action.d.ts +1 -1
  26. package/dist/types/src/extensions/command/action.d.ts.map +1 -1
  27. package/dist/types/src/extensions/command/command-menu.d.ts +1 -1
  28. package/dist/types/src/extensions/command/command-menu.d.ts.map +1 -1
  29. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  30. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  31. package/dist/types/src/extensions/command/state.d.ts +1 -1
  32. package/dist/types/src/extensions/command/state.d.ts.map +1 -1
  33. package/dist/types/src/extensions/command/typeahead.d.ts.map +1 -1
  34. package/dist/types/src/extensions/command/useCommandMenu.d.ts +1 -1
  35. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +1 -1
  36. package/dist/types/src/extensions/comments.d.ts +1 -1
  37. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  38. package/dist/types/src/extensions/dnd.d.ts.map +1 -1
  39. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  40. package/dist/types/src/extensions/markdown/action.d.ts.map +1 -1
  41. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  42. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  43. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -1
  44. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  45. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +1 -1
  46. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  47. package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
  48. package/dist/types/src/extensions/outliner/selection.d.ts.map +1 -1
  49. package/dist/types/src/extensions/outliner/tree.d.ts +1 -1
  50. package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
  51. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  52. package/dist/types/src/stories/Command.stories.d.ts.map +1 -1
  53. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +1 -1
  54. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  55. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  56. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  57. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  58. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  59. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  60. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  61. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  62. package/dist/types/src/styles/theme.d.ts.map +1 -1
  63. package/dist/types/src/testing/util.d.ts +1 -0
  64. package/dist/types/src/testing/util.d.ts.map +1 -1
  65. package/dist/types/src/util/cursor.d.ts.map +1 -1
  66. package/dist/types/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +40 -37
  68. package/src/components/Editor/Editor.tsx +1 -1
  69. package/src/components/EditorToolbar/EditorToolbar.tsx +1 -1
  70. package/src/components/EditorToolbar/blocks.ts +3 -2
  71. package/src/components/EditorToolbar/formatting.ts +3 -2
  72. package/src/components/EditorToolbar/headings.ts +2 -1
  73. package/src/components/EditorToolbar/lists.ts +3 -2
  74. package/src/components/EditorToolbar/util.ts +1 -1
  75. package/src/components/EditorToolbar/view-mode.ts +2 -1
  76. package/src/components/Popover/RefDropdownMenu.tsx +1 -1
  77. package/src/components/Popover/RefPopover.tsx +4 -4
  78. package/src/extensions/autocomplete.ts +3 -3
  79. package/src/extensions/automerge/automerge.stories.tsx +4 -4
  80. package/src/extensions/automerge/automerge.ts +4 -3
  81. package/src/extensions/automerge/defs.ts +1 -1
  82. package/src/extensions/automerge/sync.ts +1 -1
  83. package/src/extensions/automerge/update-automerge.ts +1 -1
  84. package/src/extensions/awareness/awareness.ts +2 -2
  85. package/src/extensions/command/action.ts +1 -1
  86. package/src/extensions/command/command-menu.ts +4 -3
  87. package/src/extensions/command/command.ts +3 -3
  88. package/src/extensions/command/hint.ts +2 -1
  89. package/src/extensions/command/placeholder.ts +1 -1
  90. package/src/extensions/command/state.ts +4 -3
  91. package/src/extensions/command/typeahead.ts +2 -2
  92. package/src/extensions/command/useCommandMenu.ts +2 -1
  93. package/src/extensions/comments.ts +7 -6
  94. package/src/extensions/dnd.ts +1 -1
  95. package/src/extensions/factories.ts +4 -3
  96. package/src/extensions/markdown/action.ts +2 -1
  97. package/src/extensions/markdown/bundle.ts +1 -1
  98. package/src/extensions/markdown/changes.ts +1 -1
  99. package/src/extensions/markdown/decorate.ts +7 -6
  100. package/src/extensions/markdown/formatting.test.ts +6 -6
  101. package/src/extensions/markdown/formatting.ts +3 -3
  102. package/src/extensions/markdown/highlight.ts +1 -1
  103. package/src/extensions/mention.ts +1 -1
  104. package/src/extensions/outliner/outliner.test.ts +3 -2
  105. package/src/extensions/outliner/outliner.ts +4 -3
  106. package/src/extensions/outliner/selection.ts +1 -1
  107. package/src/extensions/outliner/tree.test.ts +2 -1
  108. package/src/extensions/outliner/tree.ts +1 -1
  109. package/src/hooks/useTextEditor.ts +3 -3
  110. package/src/stories/Command.stories.tsx +6 -5
  111. package/src/stories/CommandMenu.stories.tsx +5 -4
  112. package/src/stories/Comments.stories.tsx +3 -2
  113. package/src/stories/EditorToolbar.stories.tsx +3 -3
  114. package/src/stories/Experimental.stories.tsx +4 -3
  115. package/src/stories/Markdown.stories.tsx +3 -2
  116. package/src/stories/Outliner.stories.tsx +4 -3
  117. package/src/stories/Preview.stories.tsx +21 -22
  118. package/src/stories/TextEditor.stories.tsx +15 -14
  119. package/src/stories/components/EditorStory.tsx +5 -5
  120. package/src/styles/theme.ts +4 -3
  121. package/src/testing/util.ts +2 -0
  122. package/src/util/cursor.ts +2 -1
@@ -69,9 +69,7 @@ var annotationMark = Decoration.mark({
69
69
  var annotations = ({ match } = {}) => {
70
70
  return [
71
71
  ViewPlugin.fromClass(class {
72
- constructor() {
73
- this.decorations = Decoration.none;
74
- }
72
+ decorations = Decoration.none;
75
73
  update(update2) {
76
74
  const builder = new RangeSetBuilder();
77
75
  if (match) {
@@ -143,17 +141,174 @@ import { next as A3 } from "@automerge/automerge";
143
141
  import { StateField } from "@codemirror/state";
144
142
  import { EditorView as EditorView2, ViewPlugin as ViewPlugin2 } from "@codemirror/view";
145
143
 
146
- // src/extensions/automerge/cursor.ts
144
+ // src/util/facet.ts
145
+ import { Facet } from "@codemirror/state";
146
+ var singleValueFacet = (defaultValue) => Facet.define({
147
+ // Called immediately.
148
+ combine: (providers) => {
149
+ return providers[0] ?? defaultValue;
150
+ }
151
+ });
152
+
153
+ // src/util/cursor.ts
154
+ var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
155
+ var defaultCursorConverter = {
156
+ toCursor: (position) => position.toString(),
157
+ fromCursor: (cursor) => parseInt(cursor)
158
+ };
159
+ var Cursor = class _Cursor {
160
+ static converter = singleValueFacet(defaultCursorConverter);
161
+ static getCursorFromRange = (state, range) => {
162
+ const cursorConverter2 = state.facet(_Cursor.converter);
163
+ const from = cursorConverter2.toCursor(range.from);
164
+ const to = cursorConverter2.toCursor(range.to, -1);
165
+ return [
166
+ from,
167
+ to
168
+ ].join(":");
169
+ };
170
+ static getRangeFromCursor = (state, cursor) => {
171
+ const cursorConverter2 = state.facet(_Cursor.converter);
172
+ const parts = cursor.split(":");
173
+ const from = cursorConverter2.fromCursor(parts[0]);
174
+ const to = cursorConverter2.fromCursor(parts[1]);
175
+ return from !== void 0 && to !== void 0 ? {
176
+ from,
177
+ to
178
+ } : void 0;
179
+ };
180
+ };
181
+
182
+ // src/util/debug.ts
147
183
  import { log } from "@dxos/log";
184
+ var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
185
+ var wrapWithCatch = (fn) => {
186
+ return (...args) => {
187
+ try {
188
+ return fn(...args);
189
+ } catch (err) {
190
+ log.catch(err, void 0, {
191
+ F: __dxlog_file,
192
+ L: 15,
193
+ S: void 0,
194
+ C: (f, a) => f(...a)
195
+ });
196
+ }
197
+ };
198
+ };
199
+ var callbackWrapper = (fn) => (...args) => {
200
+ try {
201
+ return fn(...args);
202
+ } catch (err) {
203
+ log.catch(err, void 0, {
204
+ F: __dxlog_file,
205
+ L: 29,
206
+ S: void 0,
207
+ C: (f, a) => f(...a)
208
+ });
209
+ }
210
+ };
211
+ var debugDispatcher = (trs, view) => {
212
+ logChanges(trs);
213
+ view.update(trs);
214
+ };
215
+ var logChanges = (trs) => {
216
+ const changes = trs.flatMap((tr) => {
217
+ if (tr.changes.empty) {
218
+ return void 0;
219
+ }
220
+ const changes2 = [];
221
+ tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
222
+ fromA,
223
+ toA,
224
+ fromB,
225
+ toB,
226
+ inserted: inserted.toString()
227
+ })));
228
+ return changes2;
229
+ }).filter(Boolean);
230
+ if (changes.length) {
231
+ log("changes", {
232
+ changes
233
+ }, {
234
+ F: __dxlog_file,
235
+ L: 62,
236
+ S: void 0,
237
+ C: (f, a) => f(...a)
238
+ });
239
+ }
240
+ };
241
+
242
+ // src/util/dom.ts
243
+ var flattenRect = (rect, left) => {
244
+ const x = left ? rect.left : rect.right;
245
+ return {
246
+ left: x,
247
+ right: x,
248
+ top: rect.top,
249
+ bottom: rect.bottom
250
+ };
251
+ };
252
+ var scratchRange;
253
+ var textRange = (node, from, to = from) => {
254
+ const range = scratchRange || (scratchRange = document.createRange());
255
+ range.setEnd(node, to);
256
+ range.setStart(node, from);
257
+ return range;
258
+ };
259
+ var clientRectsFor = (dom) => {
260
+ if (dom.nodeType === 3) {
261
+ return textRange(dom, 0, dom.nodeValue.length).getClientRects();
262
+ } else if (dom.nodeType === 1) {
263
+ return dom.getClientRects();
264
+ } else {
265
+ return [];
266
+ }
267
+ };
268
+ var createElement = (tag, options, children) => {
269
+ const el = document.createElement(tag);
270
+ if (options?.className) {
271
+ el.className = options.className;
272
+ }
273
+ if (options?.text) {
274
+ el.textContent = options.text;
275
+ }
276
+ if (children) {
277
+ el.append(...Array.isArray(children) ? children : [
278
+ children
279
+ ]);
280
+ }
281
+ return el;
282
+ };
283
+
284
+ // src/util/react.tsx
285
+ import React from "react";
286
+ import { createRoot } from "react-dom/client";
287
+ import { ThemeProvider, Tooltip } from "@dxos/react-ui";
288
+ import { defaultTx } from "@dxos/react-ui-theme";
289
+ var renderRoot = (root, node) => {
290
+ createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
291
+ tx: defaultTx
292
+ }, node));
293
+ return root;
294
+ };
295
+ var createRenderer = (Component) => (el, props) => {
296
+ renderRoot(el, /* @__PURE__ */ React.createElement(ThemeProvider, {
297
+ tx: defaultTx
298
+ }, /* @__PURE__ */ React.createElement(Tooltip.Provider, null, /* @__PURE__ */ React.createElement(Component, props))));
299
+ };
300
+
301
+ // src/extensions/automerge/cursor.ts
302
+ import { log as log2 } from "@dxos/log";
148
303
  import { fromCursor, toCursor } from "@dxos/react-client/echo";
149
- var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
304
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
150
305
  var cursorConverter = (accessor) => ({
151
306
  toCursor: (pos, assoc) => {
152
307
  try {
153
308
  return toCursor(accessor, pos, assoc);
154
309
  } catch (err) {
155
- log.catch(err, void 0, {
156
- F: __dxlog_file,
310
+ log2.catch(err, void 0, {
311
+ F: __dxlog_file2,
157
312
  L: 15,
158
313
  S: void 0,
159
314
  C: (f, a) => f(...a)
@@ -165,8 +320,8 @@ var cursorConverter = (accessor) => ({
165
320
  try {
166
321
  return fromCursor(accessor, cursor);
167
322
  } catch (err) {
168
- log.catch(err, void 0, {
169
- F: __dxlog_file,
323
+ log2.catch(err, void 0, {
324
+ F: __dxlog_file2,
170
325
  L: 24,
171
326
  S: void 0,
172
327
  C: (f, a) => f(...a)
@@ -332,6 +487,9 @@ var charPath = (textPath, candidatePath) => {
332
487
 
333
488
  // src/extensions/automerge/sync.ts
334
489
  var Syncer = class {
490
+ _handle;
491
+ _state;
492
+ _pending;
335
493
  // prettier-ignore
336
494
  constructor(_handle, _state) {
337
495
  this._handle = _handle;
@@ -374,169 +532,6 @@ var Syncer = class {
374
532
  }
375
533
  };
376
534
 
377
- // src/util/facet.ts
378
- import { Facet } from "@codemirror/state";
379
- var singleValueFacet = (defaultValue) => Facet.define({
380
- // Called immediately.
381
- combine: (providers) => {
382
- return providers[0] ?? defaultValue;
383
- }
384
- });
385
-
386
- // src/util/cursor.ts
387
- var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
388
- var defaultCursorConverter = {
389
- toCursor: (position) => position.toString(),
390
- fromCursor: (cursor) => parseInt(cursor)
391
- };
392
- var Cursor = class _Cursor {
393
- static {
394
- this.converter = singleValueFacet(defaultCursorConverter);
395
- }
396
- static {
397
- this.getCursorFromRange = (state, range) => {
398
- const cursorConverter2 = state.facet(_Cursor.converter);
399
- const from = cursorConverter2.toCursor(range.from);
400
- const to = cursorConverter2.toCursor(range.to, -1);
401
- return [
402
- from,
403
- to
404
- ].join(":");
405
- };
406
- }
407
- static {
408
- this.getRangeFromCursor = (state, cursor) => {
409
- const cursorConverter2 = state.facet(_Cursor.converter);
410
- const parts = cursor.split(":");
411
- const from = cursorConverter2.fromCursor(parts[0]);
412
- const to = cursorConverter2.fromCursor(parts[1]);
413
- return from !== void 0 && to !== void 0 ? {
414
- from,
415
- to
416
- } : void 0;
417
- };
418
- }
419
- };
420
-
421
- // src/util/debug.ts
422
- import { log as log2 } from "@dxos/log";
423
- var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
424
- var wrapWithCatch = (fn) => {
425
- return (...args) => {
426
- try {
427
- return fn(...args);
428
- } catch (err) {
429
- log2.catch(err, void 0, {
430
- F: __dxlog_file2,
431
- L: 15,
432
- S: void 0,
433
- C: (f, a) => f(...a)
434
- });
435
- }
436
- };
437
- };
438
- var callbackWrapper = (fn) => (...args) => {
439
- try {
440
- return fn(...args);
441
- } catch (err) {
442
- log2.catch(err, void 0, {
443
- F: __dxlog_file2,
444
- L: 29,
445
- S: void 0,
446
- C: (f, a) => f(...a)
447
- });
448
- }
449
- };
450
- var debugDispatcher = (trs, view) => {
451
- logChanges(trs);
452
- view.update(trs);
453
- };
454
- var logChanges = (trs) => {
455
- const changes = trs.flatMap((tr) => {
456
- if (tr.changes.empty) {
457
- return void 0;
458
- }
459
- const changes2 = [];
460
- tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
461
- fromA,
462
- toA,
463
- fromB,
464
- toB,
465
- inserted: inserted.toString()
466
- })));
467
- return changes2;
468
- }).filter(Boolean);
469
- if (changes.length) {
470
- log2("changes", {
471
- changes
472
- }, {
473
- F: __dxlog_file2,
474
- L: 62,
475
- S: void 0,
476
- C: (f, a) => f(...a)
477
- });
478
- }
479
- };
480
-
481
- // src/util/dom.ts
482
- var flattenRect = (rect, left) => {
483
- const x = left ? rect.left : rect.right;
484
- return {
485
- left: x,
486
- right: x,
487
- top: rect.top,
488
- bottom: rect.bottom
489
- };
490
- };
491
- var scratchRange;
492
- var textRange = (node, from, to = from) => {
493
- const range = scratchRange || (scratchRange = document.createRange());
494
- range.setEnd(node, to);
495
- range.setStart(node, from);
496
- return range;
497
- };
498
- var clientRectsFor = (dom) => {
499
- if (dom.nodeType === 3) {
500
- return textRange(dom, 0, dom.nodeValue.length).getClientRects();
501
- } else if (dom.nodeType === 1) {
502
- return dom.getClientRects();
503
- } else {
504
- return [];
505
- }
506
- };
507
- var createElement = (tag, options, children) => {
508
- const el = document.createElement(tag);
509
- if (options?.className) {
510
- el.className = options.className;
511
- }
512
- if (options?.text) {
513
- el.textContent = options.text;
514
- }
515
- if (children) {
516
- el.append(...Array.isArray(children) ? children : [
517
- children
518
- ]);
519
- }
520
- return el;
521
- };
522
-
523
- // src/util/react.tsx
524
- import React from "react";
525
- import { createRoot } from "react-dom/client";
526
- import { ThemeProvider, Tooltip } from "@dxos/react-ui";
527
- import { defaultTx } from "@dxos/react-ui-theme";
528
- var renderRoot = (root, node) => {
529
- createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
530
- tx: defaultTx
531
- }, node));
532
- return root;
533
- };
534
- var createRenderer = (Component) => (el, props) => {
535
- renderRoot(el, /* @__PURE__ */ React.createElement(ThemeProvider, {
536
- tx: defaultTx
537
- }, /* @__PURE__ */ React.createElement(Tooltip.Provider, null, /* @__PURE__ */ React.createElement(Component, props))));
538
- };
539
-
540
535
  // src/extensions/automerge/automerge.ts
541
536
  var automerge = (accessor) => {
542
537
  const syncState = StateField.define({
@@ -575,6 +570,7 @@ var automerge = (accessor) => {
575
570
  syncState,
576
571
  // Reconcile external updates.
577
572
  ViewPlugin2.fromClass(class {
573
+ _view;
578
574
  constructor(_view) {
579
575
  this._view = _view;
580
576
  this._handleChange = () => {
@@ -585,6 +581,7 @@ var automerge = (accessor) => {
585
581
  destroy() {
586
582
  accessor.handle.removeListener("change", this._handleChange);
587
583
  }
584
+ _handleChange;
588
585
  }),
589
586
  // Reconcile local updates.
590
587
  EditorView2.updateListener.of(({ view, changes }) => {
@@ -623,12 +620,16 @@ var awareness = (provider = dummyProvider) => {
623
620
  ];
624
621
  };
625
622
  var RemoteSelectionsDecorator = class {
623
+ _ctx = new Context(void 0, {
624
+ F: __dxlog_file3,
625
+ L: 80
626
+ });
627
+ _cursorConverter;
628
+ _provider;
629
+ _lastAnchor;
630
+ _lastHead;
631
+ decorations = RangeSet.of([]);
626
632
  constructor(view) {
627
- this._ctx = new Context(void 0, {
628
- F: __dxlog_file3,
629
- L: 80
630
- });
631
- this.decorations = RangeSet.of([]);
632
633
  this._cursorConverter = view.state.facet(Cursor.converter);
633
634
  this._provider = view.state.facet(awarenessProvider);
634
635
  this._provider.open();
@@ -736,6 +737,8 @@ var RemoteSelectionsDecorator = class {
736
737
  }
737
738
  };
738
739
  var RemoteCaretWidget = class extends WidgetType {
740
+ _name;
741
+ _color;
739
742
  constructor(_name, _color) {
740
743
  super(), this._name = _name, this._color = _color;
741
744
  }
@@ -835,9 +838,16 @@ import { log as log3 } from "@dxos/log";
835
838
  var __dxlog_file4 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness-provider.ts";
836
839
  var DEBOUNCE_INTERVAL = 100;
837
840
  var SpaceAwarenessProvider = class {
841
+ _remoteStates = /* @__PURE__ */ new Map();
842
+ _space;
843
+ _channel;
844
+ _peerId;
845
+ _info;
846
+ _ctx;
847
+ _postTask;
848
+ _localState;
849
+ remoteStateChange = new Event2();
838
850
  constructor(params) {
839
- this._remoteStates = /* @__PURE__ */ new Map();
840
- this.remoteStateChange = new Event2();
841
851
  this._space = params.space;
842
852
  this._channel = params.channel;
843
853
  this._peerId = params.peerId;
@@ -1033,6 +1043,18 @@ var blast = (options = defaultOptions) => {
1033
1043
  ];
1034
1044
  };
1035
1045
  var Blaster = class {
1046
+ _node;
1047
+ _options;
1048
+ _effect;
1049
+ _canvas;
1050
+ _ctx;
1051
+ _running;
1052
+ _lastTime;
1053
+ _shakeTime;
1054
+ _shakeTimeMax;
1055
+ _particles;
1056
+ _particlePointer;
1057
+ _lastPoint;
1036
1058
  constructor(_node, _options) {
1037
1059
  this._node = _node;
1038
1060
  this._options = _options;
@@ -1137,6 +1159,8 @@ var Blaster = class {
1137
1159
  this.drawParticles();
1138
1160
  requestAnimationFrame(this.loop.bind(this));
1139
1161
  }
1162
+ shake;
1163
+ spawn;
1140
1164
  drawParticles() {
1141
1165
  for (let i = this._particles.length; i--; i > 0) {
1142
1166
  const particle = this._particles[i];
@@ -1151,6 +1175,7 @@ var Blaster = class {
1151
1175
  }
1152
1176
  };
1153
1177
  var Effect = class {
1178
+ _options;
1154
1179
  constructor(_options) {
1155
1180
  this._options = _options;
1156
1181
  }
@@ -1356,9 +1381,8 @@ import { RangeSetBuilder as RangeSetBuilder2 } from "@codemirror/state";
1356
1381
  import { Decoration as Decoration3, EditorView as EditorView5, ViewPlugin as ViewPlugin4, WidgetType as WidgetType2 } from "@codemirror/view";
1357
1382
  var hint = ({ delay = 3e3, onHint }) => {
1358
1383
  return ViewPlugin4.fromClass(class {
1359
- constructor() {
1360
- this.decorations = Decoration3.none;
1361
- }
1384
+ decorations = Decoration3.none;
1385
+ timeout;
1362
1386
  update(update2) {
1363
1387
  if (this.timeout) {
1364
1388
  clearTimeout(this.timeout);
@@ -1397,6 +1421,7 @@ var hint = ({ delay = 3e3, onHint }) => {
1397
1421
  });
1398
1422
  };
1399
1423
  var Hint = class extends WidgetType2 {
1424
+ content;
1400
1425
  constructor(content) {
1401
1426
  super(), this.content = content;
1402
1427
  }
@@ -1452,16 +1477,15 @@ var command = (options = {}) => {
1452
1477
  };
1453
1478
 
1454
1479
  // src/extensions/command/command-menu.ts
1455
- import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField3, StateEffect as StateEffect3, Prec as Prec2 } from "@codemirror/state";
1456
- import { EditorView as EditorView8, ViewPlugin as ViewPlugin6, Decoration as Decoration5, keymap as keymap4 } from "@codemirror/view";
1480
+ import { Prec as Prec2, RangeSetBuilder as RangeSetBuilder3, StateEffect as StateEffect3, StateField as StateField3 } from "@codemirror/state";
1481
+ import { Decoration as Decoration5, EditorView as EditorView8, ViewPlugin as ViewPlugin6, keymap as keymap4 } from "@codemirror/view";
1457
1482
 
1458
1483
  // src/extensions/command/placeholder.ts
1459
- import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
1484
+ import { Decoration as Decoration4, EditorView as EditorView7, ViewPlugin as ViewPlugin5, WidgetType as WidgetType3 } from "@codemirror/view";
1460
1485
  var placeholder = ({ delay = 3e3, content }) => {
1461
1486
  const plugin = ViewPlugin5.fromClass(class {
1462
- constructor() {
1463
- this.decorations = Decoration4.none;
1464
- }
1487
+ decorations = Decoration4.none;
1488
+ timeout;
1465
1489
  update(update2) {
1466
1490
  if (this.timeout) {
1467
1491
  window.clearTimeout(this.timeout);
@@ -1503,6 +1527,7 @@ var placeholder = ({ delay = 3e3, content }) => {
1503
1527
  ] : plugin;
1504
1528
  };
1505
1529
  var Placeholder = class extends WidgetType3 {
1530
+ content;
1506
1531
  constructor(content) {
1507
1532
  super(), this.content = content;
1508
1533
  }
@@ -1540,6 +1565,8 @@ var Placeholder = class extends WidgetType3 {
1540
1565
  // src/extensions/command/command-menu.ts
1541
1566
  var commandMenu = (options) => {
1542
1567
  const commandMenuPlugin = ViewPlugin6.fromClass(class {
1568
+ view;
1569
+ decorations;
1543
1570
  constructor(view) {
1544
1571
  this.view = view;
1545
1572
  this.decorations = Decoration5.none;
@@ -1699,6 +1726,10 @@ import { EditorView as EditorView9, ViewPlugin as ViewPlugin7 } from "@codemirro
1699
1726
  import { addEventListener } from "@dxos/async";
1700
1727
  var floatingMenu = (options = {}) => [
1701
1728
  ViewPlugin7.fromClass(class {
1729
+ view;
1730
+ tag;
1731
+ rafId;
1732
+ cleanup;
1702
1733
  constructor(view) {
1703
1734
  this.view = view;
1704
1735
  const container = view.scrollDOM;
@@ -1785,7 +1816,7 @@ var floatingMenu = (options = {}) => [
1785
1816
 
1786
1817
  // src/extensions/command/typeahead.ts
1787
1818
  import { EditorSelection, Prec as Prec3, RangeSetBuilder as RangeSetBuilder4 } from "@codemirror/state";
1788
- import { Decoration as Decoration6, keymap as keymap5, ViewPlugin as ViewPlugin8 } from "@codemirror/view";
1819
+ import { Decoration as Decoration6, ViewPlugin as ViewPlugin8, keymap as keymap5 } from "@codemirror/view";
1789
1820
  var typeahead = ({ onComplete } = {}) => {
1790
1821
  let hint2;
1791
1822
  const complete = (view) => {
@@ -1807,9 +1838,7 @@ var typeahead = ({ onComplete } = {}) => {
1807
1838
  };
1808
1839
  return [
1809
1840
  ViewPlugin8.fromClass(class {
1810
- constructor() {
1811
- this.decorations = Decoration6.none;
1812
- }
1841
+ decorations = Decoration6.none;
1813
1842
  update(update2) {
1814
1843
  const builder = new RangeSetBuilder4();
1815
1844
  const selection = update2.view.state.selection.main;
@@ -1972,7 +2001,7 @@ var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu })
1972
2001
  // src/extensions/comments.ts
1973
2002
  import { invertedEffects } from "@codemirror/commands";
1974
2003
  import { StateEffect as StateEffect4, StateField as StateField4 } from "@codemirror/state";
1975
- import { hoverTooltip, keymap as keymap7, Decoration as Decoration7, EditorView as EditorView11, ViewPlugin as ViewPlugin9 } from "@codemirror/view";
2004
+ import { Decoration as Decoration7, EditorView as EditorView11, ViewPlugin as ViewPlugin9, hoverTooltip, keymap as keymap7 } from "@codemirror/view";
1976
2005
  import sortBy from "lodash.sortby";
1977
2006
  import { useEffect } from "react";
1978
2007
  import { debounce as debounce2 } from "@dxos/async";
@@ -2144,7 +2173,7 @@ var commentsDecorations = EditorView11.decorations.compute([
2144
2173
  if (!range) {
2145
2174
  log4.warn("Invalid range:", range, {
2146
2175
  F: __dxlog_file7,
2147
- L: 135,
2176
+ L: 136,
2148
2177
  S: void 0,
2149
2178
  C: (f, a) => f(...a)
2150
2179
  });
@@ -2459,10 +2488,8 @@ var scrollThreadIntoView = (view, id, center = true) => {
2459
2488
  }
2460
2489
  };
2461
2490
  var ExternalCommentSync = class {
2491
+ unsubscribe;
2462
2492
  constructor(view, id, subscribe, getComments) {
2463
- this.destroy = () => {
2464
- this.unsubscribe();
2465
- };
2466
2493
  const updateComments = () => {
2467
2494
  const comments2 = getComments();
2468
2495
  if (id === view.state.facet(documentId)) {
@@ -2476,6 +2503,9 @@ var ExternalCommentSync = class {
2476
2503
  };
2477
2504
  this.unsubscribe = subscribe(updateComments);
2478
2505
  }
2506
+ destroy = () => {
2507
+ this.unsubscribe();
2508
+ };
2479
2509
  };
2480
2510
  var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin9.fromClass(class {
2481
2511
  constructor(view) {
@@ -2511,7 +2541,7 @@ var debugNodeLogger = (log9 = console.log) => {
2511
2541
  };
2512
2542
 
2513
2543
  // src/extensions/dnd.ts
2514
- import { dropCursor, EditorView as EditorView12 } from "@codemirror/view";
2544
+ import { EditorView as EditorView12, dropCursor } from "@codemirror/view";
2515
2545
  var styles3 = EditorView12.theme({
2516
2546
  ".cm-dropCursor": {
2517
2547
  borderLeft: "2px solid var(--dx-accentText)",
@@ -2560,39 +2590,8 @@ import { generateName } from "@dxos/display-name";
2560
2590
  import { log as log5 } from "@dxos/log";
2561
2591
  import { hexToHue, isNotFalsy as isNotFalsy2 } from "@dxos/util";
2562
2592
 
2563
- // src/extensions/focus.ts
2564
- import { StateEffect as StateEffect5, StateField as StateField6 } from "@codemirror/state";
2565
- import { EditorView as EditorView13 } from "@codemirror/view";
2566
- var focusEffect = StateEffect5.define();
2567
- var focusField = StateField6.define({
2568
- create: () => false,
2569
- update: (value, tr) => {
2570
- for (const effect of tr.effects) {
2571
- if (effect.is(focusEffect)) {
2572
- return effect.value;
2573
- }
2574
- }
2575
- return value;
2576
- }
2577
- });
2578
- var focus = [
2579
- focusField,
2580
- EditorView13.domEventHandlers({
2581
- focus: (event, view) => {
2582
- setTimeout(() => view.dispatch({
2583
- effects: focusEffect.of(true)
2584
- }));
2585
- },
2586
- blur: (event, view) => {
2587
- setTimeout(() => view.dispatch({
2588
- effects: focusEffect.of(false)
2589
- }));
2590
- }
2591
- })
2592
- ];
2593
-
2594
2593
  // src/defaults.ts
2595
- import { EditorView as EditorView14 } from "@codemirror/view";
2594
+ import { EditorView as EditorView13 } from "@codemirror/view";
2596
2595
  import { mx as mx2 } from "@dxos/react-ui-theme";
2597
2596
 
2598
2597
  // src/styles/markdown.ts
@@ -2729,7 +2728,7 @@ var defaultTheme = {
2729
2728
  * Tooltip.
2730
2729
  */
2731
2730
  ".cm-tooltip": {
2732
- background: "var(--dx-baseSurface)"
2731
+ background: "var(--dx-modalSurface)"
2733
2732
  },
2734
2733
  ".cm-tooltip-below": {},
2735
2734
  /**
@@ -2749,7 +2748,8 @@ var defaultTheme = {
2749
2748
  padding: "4px"
2750
2749
  },
2751
2750
  ".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]": {
2752
- background: "var(--dx-hoverSurface)"
2751
+ background: "var(--dx-accentSurface)",
2752
+ color: "var(--dx-accentSurfaceText)"
2753
2753
  },
2754
2754
  ".cm-tooltip.cm-tooltip-autocomplete > ul > completion-section": {
2755
2755
  paddingLeft: "4px !important",
@@ -2803,7 +2803,7 @@ var defaultTheme = {
2803
2803
  outline: "1px solid transparent"
2804
2804
  },
2805
2805
  ".cm-panel input, .cm-panel button": {
2806
- backgroundColor: "var(--dx-input)"
2806
+ backgroundColor: "var(--dx-inputSurface)"
2807
2807
  },
2808
2808
  ".cm-panel input:focus, .cm-panel button:focus": {
2809
2809
  outline: "1px solid var(--dx-neutralFocusIndicator)"
@@ -2845,13 +2845,13 @@ var editorSlots = {
2845
2845
  className: editorWidth
2846
2846
  }
2847
2847
  };
2848
- var editorGutter = EditorView14.theme({
2848
+ var editorGutter = EditorView13.theme({
2849
2849
  ".cm-gutters": {
2850
2850
  background: "var(--dx-baseSurface)",
2851
2851
  paddingRight: "1rem"
2852
2852
  }
2853
2853
  });
2854
- var editorMonospace = EditorView14.theme({
2854
+ var editorMonospace = EditorView13.theme({
2855
2855
  ".cm-content": {
2856
2856
  fontFamily: fontMono
2857
2857
  }
@@ -2859,6 +2859,37 @@ var editorMonospace = EditorView14.theme({
2859
2859
  var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
2860
2860
  var stackItemContentEditorClassNames = (role) => mx2("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");
2861
2861
 
2862
+ // src/extensions/focus.ts
2863
+ import { StateEffect as StateEffect5, StateField as StateField6 } from "@codemirror/state";
2864
+ import { EditorView as EditorView14 } from "@codemirror/view";
2865
+ var focusEffect = StateEffect5.define();
2866
+ var focusField = StateField6.define({
2867
+ create: () => false,
2868
+ update: (value, tr) => {
2869
+ for (const effect of tr.effects) {
2870
+ if (effect.is(focusEffect)) {
2871
+ return effect.value;
2872
+ }
2873
+ }
2874
+ return value;
2875
+ }
2876
+ });
2877
+ var focus = [
2878
+ focusField,
2879
+ EditorView14.domEventHandlers({
2880
+ focus: (event, view) => {
2881
+ setTimeout(() => view.dispatch({
2882
+ effects: focusEffect.of(true)
2883
+ }));
2884
+ },
2885
+ blur: (event, view) => {
2886
+ setTimeout(() => view.dispatch({
2887
+ effects: focusEffect.of(false)
2888
+ }));
2889
+ }
2890
+ })
2891
+ ];
2892
+
2862
2893
  // src/extensions/factories.ts
2863
2894
  var __dxlog_file8 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
2864
2895
  var preventNewline = EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
@@ -2871,7 +2902,7 @@ var defaultBasicOptions = {
2871
2902
  history: true,
2872
2903
  keymap: "standard",
2873
2904
  lineWrapping: true,
2874
- search: true
2905
+ search: false
2875
2906
  };
2876
2907
  var keymaps = {
2877
2908
  // https://codemirror.net/docs/ref/#commands.standardKeymap
@@ -2886,7 +2917,7 @@ var createBasicExtensions = (_props) => {
2886
2917
  EditorView15.exceptionSink.of((err) => {
2887
2918
  log5.catch(err, void 0, {
2888
2919
  F: __dxlog_file8,
2889
- L: 100,
2920
+ L: 101,
2890
2921
  S: void 0,
2891
2922
  C: (f, a) => f(...a)
2892
2923
  });
@@ -3036,6 +3067,7 @@ var folding = (_props = {}) => [
3036
3067
  import { Decoration as Decoration8, EditorView as EditorView17, MatchDecorator, ViewPlugin as ViewPlugin11, WidgetType as WidgetType4 } from "@codemirror/view";
3037
3068
  import { getHashColor, mx as mx3 } from "@dxos/react-ui-theme";
3038
3069
  var TagWidget = class extends WidgetType4 {
3070
+ _text;
3039
3071
  constructor(_text) {
3040
3072
  super(), this._text = _text;
3041
3073
  }
@@ -3054,6 +3086,7 @@ var tagMatcher = new MatchDecorator({
3054
3086
  });
3055
3087
  var hashtag = () => [
3056
3088
  ViewPlugin11.fromClass(class {
3089
+ tags;
3057
3090
  constructor(view) {
3058
3091
  this.tags = tagMatcher.createDeco(view);
3059
3092
  }
@@ -4294,7 +4327,7 @@ var processEditorPayload = (view, { type, data }) => {
4294
4327
  // src/extensions/markdown/bundle.ts
4295
4328
  import { completionKeymap as completionKeymap2 } from "@codemirror/autocomplete";
4296
4329
  import { defaultKeymap as defaultKeymap2, indentWithTab as indentWithTab2 } from "@codemirror/commands";
4297
- import { markdownLanguage as markdownLanguage3, markdown } from "@codemirror/lang-markdown";
4330
+ import { markdown, markdownLanguage as markdownLanguage3 } from "@codemirror/lang-markdown";
4298
4331
  import { syntaxHighlighting as syntaxHighlighting2 } from "@codemirror/language";
4299
4332
  import { languages } from "@codemirror/language-data";
4300
4333
  import { keymap as keymap10 } from "@codemirror/view";
@@ -4303,7 +4336,7 @@ import { isNotFalsy as isNotFalsy3 } from "@dxos/util";
4303
4336
  // src/extensions/markdown/highlight.ts
4304
4337
  import { markdownLanguage as markdownLanguage2 } from "@codemirror/lang-markdown";
4305
4338
  import { HighlightStyle } from "@codemirror/language";
4306
- import { tags, styleTags, Tag } from "@lezer/highlight";
4339
+ import { Tag, styleTags, tags } from "@lezer/highlight";
4307
4340
  import { Table } from "@lezer/markdown";
4308
4341
  var markdownTags = {
4309
4342
  Blockquote: Tag.define(),
@@ -4544,7 +4577,7 @@ var convertTreeToJson = (state) => {
4544
4577
  // src/extensions/markdown/decorate.ts
4545
4578
  import { syntaxTree as syntaxTree7 } from "@codemirror/language";
4546
4579
  import { RangeSetBuilder as RangeSetBuilder6, StateEffect as StateEffect6 } from "@codemirror/state";
4547
- import { EditorView as EditorView23, Decoration as Decoration11, WidgetType as WidgetType7, ViewPlugin as ViewPlugin13 } from "@codemirror/view";
4580
+ import { Decoration as Decoration11, EditorView as EditorView23, ViewPlugin as ViewPlugin13, WidgetType as WidgetType7 } from "@codemirror/view";
4548
4581
  import { invariant as invariant4 } from "@dxos/invariant";
4549
4582
  import { mx as mx4 } from "@dxos/react-ui-theme";
4550
4583
 
@@ -4762,6 +4795,7 @@ var preloadImage = (url) => {
4762
4795
  }
4763
4796
  };
4764
4797
  var ImageWidget = class extends WidgetType5 {
4798
+ _url;
4765
4799
  constructor(_url) {
4766
4800
  super(), this._url = _url;
4767
4801
  }
@@ -4970,6 +5004,7 @@ var update = (state, _options) => {
4970
5004
  return builder.finish();
4971
5005
  };
4972
5006
  var TableWidget = class extends WidgetType6 {
5007
+ _table;
4973
5008
  constructor(_table) {
4974
5009
  super(), this._table = _table;
4975
5010
  }
@@ -5018,6 +5053,8 @@ var HorizontalRuleWidget = class extends WidgetType7 {
5018
5053
  }
5019
5054
  };
5020
5055
  var LinkButton = class extends WidgetType7 {
5056
+ url;
5057
+ render;
5021
5058
  constructor(url, render) {
5022
5059
  super(), this.url = url, this.render = render;
5023
5060
  }
@@ -5034,6 +5071,7 @@ var LinkButton = class extends WidgetType7 {
5034
5071
  }
5035
5072
  };
5036
5073
  var CheckboxWidget = class extends WidgetType7 {
5074
+ _checked;
5037
5075
  constructor(_checked) {
5038
5076
  super(), this._checked = _checked;
5039
5077
  }
@@ -5078,6 +5116,8 @@ var CheckboxWidget = class extends WidgetType7 {
5078
5116
  }
5079
5117
  };
5080
5118
  var TextWidget = class extends WidgetType7 {
5119
+ text;
5120
+ className;
5081
5121
  constructor(text, className) {
5082
5122
  super(), this.text = text, this.className = className;
5083
5123
  }
@@ -5135,7 +5175,7 @@ var buildDecorations2 = (view, options, focus2) => {
5135
5175
  const getHeaderLevels = (node, level) => {
5136
5176
  invariant4(level > 0, void 0, {
5137
5177
  F: __dxlog_file9,
5138
- L: 179,
5178
+ L: 180,
5139
5179
  S: void 0,
5140
5180
  A: [
5141
5181
  "level > 0",
@@ -5174,7 +5214,7 @@ var buildDecorations2 = (view, options, focus2) => {
5174
5214
  const getCurrentListLevel = () => {
5175
5215
  invariant4(listLevels.length, void 0, {
5176
5216
  F: __dxlog_file9,
5177
- L: 201,
5217
+ L: 202,
5178
5218
  S: void 0,
5179
5219
  A: [
5180
5220
  "listLevels.length",
@@ -5414,6 +5454,9 @@ var forceUpdate = StateEffect6.define();
5414
5454
  var decorateMarkdown = (options = {}) => {
5415
5455
  return [
5416
5456
  ViewPlugin13.fromClass(class {
5457
+ deco;
5458
+ atomicDeco;
5459
+ pendingUpdate;
5417
5460
  constructor(view) {
5418
5461
  ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
5419
5462
  }
@@ -5596,11 +5639,14 @@ var itemToJSON = ({ type, index, level, lineRange, contentRange, children }) =>
5596
5639
  };
5597
5640
  };
5598
5641
  var Tree = class {
5642
+ type = "root";
5643
+ index = -1;
5644
+ level = -1;
5645
+ node;
5646
+ lineRange;
5647
+ contentRange;
5648
+ children = [];
5599
5649
  constructor(node) {
5600
- this.type = "root";
5601
- this.index = -1;
5602
- this.level = -1;
5603
- this.children = [];
5604
5650
  this.node = node;
5605
5651
  this.lineRange = {
5606
5652
  from: node.from,
@@ -6361,8 +6407,8 @@ var outliner = (options = {}) => [
6361
6407
  ];
6362
6408
  var decorations = () => [
6363
6409
  ViewPlugin15.fromClass(class {
6410
+ decorations = Decoration12.none;
6364
6411
  constructor(view) {
6365
- this.decorations = Decoration12.none;
6366
6412
  this.updateDecorations(view.state, view);
6367
6413
  }
6368
6414
  update(update2) {
@@ -6499,6 +6545,8 @@ var buildDecorations3 = (state, options) => {
6499
6545
  return builder.finish();
6500
6546
  };
6501
6547
  var PreviewInlineWidget = class extends WidgetType8 {
6548
+ _options;
6549
+ _link;
6502
6550
  constructor(_options, _link) {
6503
6551
  super(), this._options = _options, this._link = _link;
6504
6552
  }
@@ -6516,6 +6564,8 @@ var PreviewInlineWidget = class extends WidgetType8 {
6516
6564
  }
6517
6565
  };
6518
6566
  var PreviewBlockWidget = class extends WidgetType8 {
6567
+ _options;
6568
+ _link;
6519
6569
  constructor(_options, _link) {
6520
6570
  super(), this._options = _options, this._link = _link;
6521
6571
  }
@@ -7463,7 +7513,7 @@ var linkSlashCommands = {
7463
7513
  // src/components/Popover/RefPopover.tsx
7464
7514
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
7465
7515
  import { createContext } from "@radix-ui/react-context";
7466
- import React6, { useRef as useRef4, useState as useState3, useEffect as useEffect4, useCallback as useCallback5, forwardRef as forwardRef2 } from "react";
7516
+ import React6, { forwardRef as forwardRef2, useCallback as useCallback5, useEffect as useEffect4, useRef as useRef4, useState as useState3 } from "react";
7467
7517
  import { addEventListener as addEventListener2 } from "@dxos/async";
7468
7518
  import { Popover as Popover2 } from "@dxos/react-ui";
7469
7519
  var customEventOptions = {
@@ -7547,7 +7597,7 @@ var PreviewProvider = ({ children, onLookup }) => {
7547
7597
  // src/components/Popover/RefDropdownMenu.tsx
7548
7598
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
7549
7599
  import { createContext as createContext2 } from "@radix-ui/react-context";
7550
- import React7, { useRef as useRef5, useState as useState4, useEffect as useEffect5, useCallback as useCallback6 } from "react";
7600
+ import React7, { useCallback as useCallback6, useEffect as useEffect5, useRef as useRef5, useState as useState4 } from "react";
7551
7601
  import { addEventListener as addEventListener3 } from "@dxos/async";
7552
7602
  import { DropdownMenu } from "@dxos/react-ui";
7553
7603
  var customEventOptions2 = {