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

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