superdoc 2.29.0-next.2 → 2.29.0-next.3

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 (45) hide show
  1. package/dist/chunks/{FindReplaceSurface-Dm043CZP.es.js → FindReplaceSurface-BKVHzhQ4.es.js} +34 -26
  2. package/dist/chunks/{FindReplaceSurface-BRs3JrCq.cjs → FindReplaceSurface-BNDrJ6VS.cjs} +34 -26
  3. package/dist/chunks/{PasswordPromptSurface-DGjmN7A-.es.js → PasswordPromptSurface-6mF6Azda.es.js} +6 -4
  4. package/dist/chunks/{PasswordPromptSurface-BpqP4pUa.cjs → PasswordPromptSurface-BNkaztaP.cjs} +6 -4
  5. package/dist/collaboration-upgrade-engine.cjs +1 -1
  6. package/dist/collaboration-upgrade-engine.es.js +1 -1
  7. package/dist/style.css +1 -1
  8. package/dist/style.layered.css +1 -1
  9. package/dist/superdoc/src/components/CommentsLayer/CommentDialog.vue.d.ts +7 -1854
  10. package/dist/superdoc/src/components/CommentsLayer/CommentHeader.vue.d.ts +3 -4
  11. package/dist/superdoc/src/components/CommentsLayer/CommentInput.vue.d.ts +3 -618
  12. package/dist/superdoc/src/components/surfaces/FindReplaceSurface.vue.d.ts +58 -15
  13. package/dist/superdoc/src/components/surfaces/PasswordPromptSurface.vue.d.ts +58 -15
  14. package/dist/superdoc/src/components/surfaces/SurfaceFloating.vue.d.ts +14 -6
  15. package/dist/superdoc/src/components/surfaces/SurfaceHost.vue.d.ts +25 -15
  16. package/dist/superdoc/src/core/SuperDoc.d.ts +1 -6
  17. package/dist/superdoc/src/core/editor-runtime/index.d.ts +1 -1
  18. package/dist/superdoc/src/core/editor-runtime/types.d.ts +7 -0
  19. package/dist/superdoc/src/core/editor-runtime/v2/v2-editor-runtime-adapter.d.ts +2 -1
  20. package/dist/superdoc/src/icons.d.ts +8 -0
  21. package/dist/superdoc/src/internal/toolbar/built-in/AIWriter.vue.d.ts +76 -15
  22. package/dist/superdoc/src/internal/toolbar/built-in/AlignmentButtons.vue.d.ts +5 -3
  23. package/dist/superdoc/src/internal/toolbar/built-in/ButtonGroup.vue.d.ts +105 -5
  24. package/dist/superdoc/src/internal/toolbar/built-in/DocumentMode.vue.d.ts +20 -6
  25. package/dist/superdoc/src/internal/toolbar/built-in/IconGrid.vue.d.ts +44 -12
  26. package/dist/superdoc/src/internal/toolbar/built-in/IconGridRow.vue.d.ts +32 -9
  27. package/dist/superdoc/src/internal/toolbar/built-in/StyleButtonsList.vue.d.ts +39 -10
  28. package/dist/superdoc/src/internal/toolbar/built-in/TableActions.vue.d.ts +24 -6
  29. package/dist/superdoc/src/internal/toolbar/built-in/TableGrid.vue.d.ts +7 -3
  30. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarComboBox.vue.d.ts +1 -1
  31. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarDropdown.vue.d.ts +1 -0
  32. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarSeparator.vue.d.ts +16 -6
  33. package/dist/superdoc/src/internal/toolbar/built-in/color-dropdown-helpers.d.ts +2 -2
  34. package/dist/superdoc/src/internal/toolbar/built-in/list-style-buttons.d.ts +2 -2
  35. package/dist/superdoc/src/internal/toolbar/built-in/toolbarIcons.d.ts +67 -0
  36. package/dist/superdoc/src/stores/helpers/comment-draft-text.d.ts +1 -0
  37. package/dist/superdoc/src/stores/helpers/tracked-change-row-values.d.ts +25 -0
  38. package/dist/superdoc.cjs +259 -176
  39. package/dist/superdoc.es.js +240 -159
  40. package/dist-cdn/style.layered.css +1 -1
  41. package/dist-cdn/superdoc.min.css +1 -1
  42. package/dist-cdn/superdoc.min.js +41 -41
  43. package/package.json +2 -2
  44. package/dist/superdoc/src/internal/toolbar/built-in/FontFamilyCombobox.vue.d.ts +0 -10
  45. package/dist/superdoc/src/internal/toolbar/built-in/FontSizeCombobox.vue.d.ts +0 -10
package/dist/superdoc.cjs CHANGED
@@ -259,7 +259,7 @@ var v_click_outside_default = {
259
259
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
260
260
  function getSuperdocVersion() {
261
261
  try {
262
- return "2.29.0-next.2";
262
+ return "2.29.0-next.3";
263
263
  } catch {
264
264
  return "unknown";
265
265
  }
@@ -7384,74 +7384,88 @@ var buildTrackedChangeDecisionLinkIndex = (allComments, previous = /* @__PURE__
7384
7384
  return next;
7385
7385
  };
7386
7386
  //#endregion
7387
- //#region src/stores/comments-store.js
7388
- var makeTrackedChangeAnchorKey = ({ storyKey, rawId }) => `tc::${storyKey}::${rawId}`;
7387
+ //#region src/stores/helpers/comment-draft-text.ts
7389
7388
  var COMMENT_DRAFT_BR_TAG = /<br(?:\s[^>]*)?\s*\/?>/gi;
7390
7389
  var COMMENT_DRAFT_BLOCK_BOUNDARY = /(?:<\/(?:p|div|li|blockquote|pre|h[1-6])\s*>\s*)+(?:<(?:p|div|li|blockquote|pre|h[1-6])(?:\s[^>]*)?\s*\/?>)+/gi;
7391
7390
  var COMMENT_DRAFT_BLOCK_OPEN_TAG = /<(?:p|div|li|blockquote|pre|h[1-6])(?:\s[^>]*)?\s*\/?>/gi;
7392
7391
  var COMMENT_DRAFT_BLOCK_CLOSE_TAG = /<\/(?:p|div|li|blockquote|pre|h[1-6])\s*>/gi;
7393
7392
  var COMMENT_DRAFT_ANY_TAG = /<\/?[A-Za-z][A-Za-z0-9:-]*(?:\s[^>]*)?\s*\/?>/g;
7394
- var COMMENT_DRAFT_ENTITY = /&(#x[0-9a-fA-F]+|#\d+|[a-zA-Z][a-zA-Z0-9]+);/g;
7395
- var COMMENT_DRAFT_NAMED_ENTITIES = {
7396
- amp: "&",
7397
- apos: "'",
7398
- gt: ">",
7399
- lt: "<",
7400
- nbsp: " ",
7401
- quot: "\""
7393
+ var COMMENT_DRAFT_ENTITY = /&(#[xX][0-9a-fA-F]+|#\d+|[a-zA-Z][a-zA-Z0-9]+);/g;
7394
+ var COMMENT_DRAFT_NAMED_ENTITIES = /* @__PURE__ */ new Map([
7395
+ ["amp", "&"],
7396
+ ["apos", "'"],
7397
+ ["gt", ">"],
7398
+ ["lt", "<"],
7399
+ ["nbsp", " "],
7400
+ ["quot", "\""]
7401
+ ]);
7402
+ var decodeCommentDraftEntity = (entity) => {
7403
+ const lower = entity.toLowerCase();
7404
+ const named = COMMENT_DRAFT_NAMED_ENTITIES.get(lower);
7405
+ if (named !== void 0) return named;
7406
+ const radix = lower.startsWith("#x") ? 16 : lower.startsWith("#") ? 10 : null;
7407
+ if (!radix) return null;
7408
+ const value = lower.startsWith("#x") ? lower.slice(2) : lower.slice(1);
7409
+ const codePoint = Number.parseInt(value, radix);
7410
+ if (!Number.isFinite(codePoint)) return null;
7411
+ try {
7412
+ return String.fromCodePoint(codePoint);
7413
+ } catch {
7414
+ return null;
7415
+ }
7416
+ };
7417
+ var decodeCommentDraftEntities = (value) => value.replace(COMMENT_DRAFT_ENTITY, (match, entity) => decodeCommentDraftEntity(entity) ?? match);
7418
+ var normalizeV2CommentDraftText = (value) => {
7419
+ const html = String(value ?? "");
7420
+ if (!html || html === "<p></p>") return "";
7421
+ return decodeCommentDraftEntities(html.replace(COMMENT_DRAFT_BLOCK_BOUNDARY, "\n").replace(COMMENT_DRAFT_BR_TAG, "\n").replace(COMMENT_DRAFT_BLOCK_CLOSE_TAG, "").replace(COMMENT_DRAFT_BLOCK_OPEN_TAG, "").replace(COMMENT_DRAFT_ANY_TAG, ""));
7402
7422
  };
7423
+ //#endregion
7424
+ //#region src/stores/helpers/tracked-change-row-values.ts
7425
+ var isObjectOrArray = (value) => require_create_super_doc_ui.isPlainObject(value) || Array.isArray(value);
7426
+ var stringOrEmpty = (value) => typeof value === "string" ? value : "";
7427
+ var makeTrackedChangeAnchorKey = ({ storyKey, rawId }) => `tc::${storyKey}::${rawId}`;
7403
7428
  var shallowEqual = (a, b) => {
7404
7429
  if (Object.is(a, b)) return true;
7405
- if (!a || !b || typeof a !== "object" || typeof b !== "object") return false;
7430
+ if (!isObjectOrArray(a) || !isObjectOrArray(b)) return false;
7406
7431
  const aKeys = Object.keys(a);
7407
7432
  const bKeys = Object.keys(b);
7408
7433
  if (aKeys.length !== bKeys.length) return false;
7409
7434
  return aKeys.every((key) => Object.prototype.hasOwnProperty.call(b, key) && Object.is(a[key], b[key]));
7410
7435
  };
7411
- /**
7412
- * Normalize the optional signed tracked-change detail lines
7413
- * (`[{ excerpt, label }]`, TCS-LIST-005) to a stable shape; absent, empty, or
7414
- * malformed input reads as `null` so legacy rows stay untouched.
7415
- */
7436
+ var elementsShallowEqual = (a, b) => {
7437
+ if (a === b) return true;
7438
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
7439
+ return a.every((element, index) => shallowEqual(element, b[index]));
7440
+ };
7416
7441
  var normalizeTrackedChangeDetailLines = (lines) => {
7417
7442
  if (!Array.isArray(lines)) return null;
7418
- const normalized = lines.filter((line) => line && typeof line === "object").map((line) => ({
7419
- excerpt: typeof line.excerpt === "string" ? line.excerpt : "",
7420
- label: typeof line.label === "string" ? line.label : ""
7443
+ const normalized = lines.filter(isObjectOrArray).map((line) => ({
7444
+ excerpt: stringOrEmpty(line.excerpt),
7445
+ label: stringOrEmpty(line.label)
7421
7446
  }));
7422
7447
  return normalized.length > 0 ? normalized : null;
7423
7448
  };
7424
- /**
7425
- * Element-wise equality for detail-line arrays: refresh paths rebuild the
7426
- * array each pass, so reference equality would rebroadcast every keystroke.
7427
- */
7428
- var trackedChangeDetailLinesEqual = (a, b) => {
7429
- if (a === b) return true;
7430
- if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
7431
- return a.every((line, index) => shallowEqual(line, b[index]));
7432
- };
7449
+ var trackedChangeDetailLinesEqual = elementsShallowEqual;
7433
7450
  var normalizeTrackedChangeCustomAttributes = (attributes) => {
7434
7451
  if (!Array.isArray(attributes)) return null;
7435
- return attributes.filter((attribute) => attribute && typeof attribute === "object").map((attribute) => ({
7436
- name: typeof attribute.name === "string" ? attribute.name : "",
7437
- namespaceUri: typeof attribute.namespaceUri === "string" ? attribute.namespaceUri : "",
7438
- localName: typeof attribute.localName === "string" ? attribute.localName : "",
7439
- value: typeof attribute.value === "string" ? attribute.value : ""
7452
+ return attributes.filter(isObjectOrArray).map((attribute) => ({
7453
+ name: stringOrEmpty(attribute.name),
7454
+ namespaceUri: stringOrEmpty(attribute.namespaceUri),
7455
+ localName: stringOrEmpty(attribute.localName),
7456
+ value: stringOrEmpty(attribute.value)
7440
7457
  })).filter((attribute) => attribute.name && attribute.namespaceUri && attribute.localName);
7441
7458
  };
7442
- var trackedChangeCustomAttributesEqual = (left, right) => {
7443
- if (left === right) return true;
7444
- if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) return false;
7445
- return left.every((attribute, index) => shallowEqual(attribute, right[index]));
7446
- };
7459
+ var trackedChangeCustomAttributesEqual = elementsShallowEqual;
7460
+ var positiveDimension = (value) => require_is_finite_number.isFiniteNumber(value) && value > 0 ? value : null;
7447
7461
  var normalizeTrackedChangeImagePreview = (preview) => {
7448
- if (!preview || typeof preview !== "object") return null;
7462
+ if (!isObjectOrArray(preview)) return null;
7449
7463
  const src = typeof preview.src === "string" ? preview.src : null;
7450
7464
  if (!src || !src.startsWith("data:image/")) return null;
7451
7465
  const contentType = typeof preview.contentType === "string" && preview.contentType.startsWith("image/") ? preview.contentType : null;
7452
7466
  const role = typeof preview.role === "string" ? preview.role : null;
7453
- const width = require_is_finite_number.isFiniteNumber(preview.width) && preview.width > 0 ? preview.width : null;
7454
- const height = require_is_finite_number.isFiniteNumber(preview.height) && preview.height > 0 ? preview.height : null;
7467
+ const width = positiveDimension(preview.width);
7468
+ const height = positiveDimension(preview.height);
7455
7469
  const alt = typeof preview.alt === "string" && preview.alt.length > 0 ? preview.alt : "Tracked image preview";
7456
7470
  return {
7457
7471
  src,
@@ -7462,35 +7476,16 @@ var normalizeTrackedChangeImagePreview = (preview) => {
7462
7476
  alt
7463
7477
  };
7464
7478
  };
7465
- var decodeCommentDraftEntity = (entity) => {
7466
- const lower = String(entity).toLowerCase();
7467
- const named = COMMENT_DRAFT_NAMED_ENTITIES[lower];
7468
- if (named !== void 0) return named;
7469
- const radix = lower.startsWith("#x") ? 16 : lower.startsWith("#") ? 10 : null;
7470
- if (!radix) return null;
7471
- const value = lower.startsWith("#x") ? lower.slice(2) : lower.slice(1);
7472
- const codePoint = Number.parseInt(value, radix);
7473
- if (!Number.isFinite(codePoint)) return null;
7474
- try {
7475
- return String.fromCodePoint(codePoint);
7476
- } catch {
7477
- return null;
7478
- }
7479
- };
7480
- var decodeCommentDraftEntities = (value) => value.replace(COMMENT_DRAFT_ENTITY, (match, entity) => decodeCommentDraftEntity(entity) ?? match);
7481
- var normalizeV2CommentDraftText = (value) => {
7482
- const html = String(value ?? "");
7483
- if (!html || html === "<p></p>") return "";
7484
- return decodeCommentDraftEntities(html.replace(COMMENT_DRAFT_BLOCK_BOUNDARY, "\n").replace(COMMENT_DRAFT_BR_TAG, "\n").replace(COMMENT_DRAFT_BLOCK_CLOSE_TAG, "").replace(COMMENT_DRAFT_BLOCK_OPEN_TAG, "").replace(COMMENT_DRAFT_ANY_TAG, ""));
7485
- };
7486
7479
  var cloneV2TrackedChangeStory = (story) => {
7487
- if (!story || typeof story !== "object") return null;
7480
+ if (!isObjectOrArray(story)) return null;
7488
7481
  const rawStory = require__plugin_vue_export_helper.toRaw(story);
7489
7482
  return {
7490
7483
  ...rawStory,
7491
- ...rawStory.section && typeof rawStory.section === "object" ? { section: { ...require__plugin_vue_export_helper.toRaw(rawStory.section) } } : {}
7484
+ ...isObjectOrArray(rawStory.section) ? { section: { ...require__plugin_vue_export_helper.toRaw(rawStory.section) } } : {}
7492
7485
  };
7493
7486
  };
7487
+ //#endregion
7488
+ //#region src/stores/comments-store.js
7494
7489
  var useCommentsStore = defineStore("comments", () => {
7495
7490
  const BODY_TRACKED_CHANGE_STORY = {
7496
7491
  kind: "story",
@@ -11728,7 +11723,7 @@ var CommentHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ re
11728
11723
  });
11729
11724
  //#endregion
11730
11725
  //#region src/components/CommentsLayer/CommentHeader.vue
11731
- var CommentHeader_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentHeader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-33950cc9"]]);
11726
+ var CommentHeader_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentHeader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5831e876"]]);
11732
11727
  //#endregion
11733
11728
  //#region src/components/CommentsLayer/CommentInput.vue?vue&type=script&setup=true&lang.ts
11734
11729
  var _hoisted_1$27 = { class: "input-section" };
@@ -11952,7 +11947,7 @@ var CommentInput_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ req
11952
11947
  });
11953
11948
  //#endregion
11954
11949
  //#region src/components/CommentsLayer/CommentInput.vue
11955
- var CommentInput_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentInput_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-65c31fdc"]]);
11950
+ var CommentInput_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentInput_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-aa97de44"]]);
11956
11951
  //#endregion
11957
11952
  //#region src/internal/toolbar/built-in/url-safety.js
11958
11953
  /**
@@ -13399,7 +13394,7 @@ var CommentDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ re
13399
13394
  });
13400
13395
  //#endregion
13401
13396
  //#region src/components/CommentsLayer/CommentDialog.vue
13402
- var CommentDialog_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-752d9e0b"]]);
13397
+ var CommentDialog_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(CommentDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-90d88bf5"]]);
13403
13398
  //#endregion
13404
13399
  //#region src/components/CommentsLayer/commentsList/ReviewDirectoryListItem.vue?vue&type=script&setup=true&lang.ts
13405
13400
  var _hoisted_1$25 = [
@@ -15353,7 +15348,7 @@ var FloatingComments_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
15353
15348
  });
15354
15349
  //#endregion
15355
15350
  //#region src/components/CommentsLayer/FloatingComments.vue
15356
- var FloatingComments_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(FloatingComments_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e74251e0"]]);
15351
+ var FloatingComments_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(FloatingComments_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0655e424"]]);
15357
15352
  //#endregion
15358
15353
  //#region src/components/CommentsLayer/PdfCommentsLayer.vue?vue&type=script&setup=true&lang.ts
15359
15354
  var _hoisted_1$22 = {
@@ -15641,7 +15636,7 @@ var useWhiteboard = ({ proxy, layers, documents, modules }) => {
15641
15636
  //#endregion
15642
15637
  //#region src/components/Whiteboard/WhiteboardPage.vue
15643
15638
  var _hoisted_1$21 = ["data-page-index"];
15644
- var _sfc_main$17 = {
15639
+ var _sfc_main$2 = {
15645
15640
  __name: "WhiteboardPage",
15646
15641
  props: {
15647
15642
  whiteboard: {
@@ -15776,10 +15771,10 @@ var _sfc_main$17 = {
15776
15771
  };
15777
15772
  }
15778
15773
  };
15779
- var WhiteboardPage_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$17, [["__scopeId", "data-v-c876c9b5"]]);
15774
+ var WhiteboardPage_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$2, [["__scopeId", "data-v-c876c9b5"]]);
15780
15775
  //#endregion
15781
15776
  //#region src/components/Whiteboard/WhiteboardLayer.vue
15782
- var _sfc_main$16 = {
15777
+ var _sfc_main$1 = {
15783
15778
  __name: "WhiteboardLayer",
15784
15779
  props: {
15785
15780
  whiteboard: {
@@ -15848,7 +15843,7 @@ var _sfc_main$16 = {
15848
15843
  };
15849
15844
  }
15850
15845
  };
15851
- var WhiteboardLayer_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$16, [["__scopeId", "data-v-54546c3d"]]);
15846
+ var WhiteboardLayer_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$1, [["__scopeId", "data-v-54546c3d"]]);
15852
15847
  //#endregion
15853
15848
  //#region src/components/CommentsLayer/collect-removed-comment-ids.js
15854
15849
  /**
@@ -16870,7 +16865,7 @@ function usePasswordPrompt({ getSurfaceManager, getPasswordPromptConfig, onUnhan
16870
16865
  })
16871
16866
  });
16872
16867
  } else {
16873
- const PasswordPromptSurface = (await Promise.resolve().then(() => require("./chunks/PasswordPromptSurface-BpqP4pUa.cjs"))).default;
16868
+ const PasswordPromptSurface = (await Promise.resolve().then(() => require("./chunks/PasswordPromptSurface-BNkaztaP.cjs"))).default;
16874
16869
  const surfaceId = `password-prompt-${doc.id}`;
16875
16870
  handle = manager.open({
16876
16871
  id: surfaceId,
@@ -17565,7 +17560,7 @@ function useFindReplace({ getSurfaceManager, getActiveEditor, activeEditorRef, g
17565
17560
  } else {
17566
17561
  let FindReplaceSurface;
17567
17562
  try {
17568
- FindReplaceSurface = (await Promise.resolve().then(() => require("./chunks/FindReplaceSurface-BRs3JrCq.cjs"))).default;
17563
+ FindReplaceSurface = (await Promise.resolve().then(() => require("./chunks/FindReplaceSurface-BNDrJ6VS.cjs"))).default;
17569
17564
  } catch {
17570
17565
  opening = false;
17571
17566
  return;
@@ -19632,6 +19627,9 @@ function createV2EditorRuntimeAdapter(options) {
19632
19627
  setDocumentMode(mode) {
19633
19628
  host.setDocumentMode(mode);
19634
19629
  },
19630
+ async setUser(user) {
19631
+ await host.setUser?.(user);
19632
+ },
19635
19633
  getDocumentMode: () => host.getDocumentMode(),
19636
19634
  setTrackedChangesRenderOptions(options) {
19637
19635
  host.setTrackedChangesRenderOptions(options);
@@ -20475,11 +20473,11 @@ var SurfaceDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ re
20475
20473
  //#region src/components/surfaces/SurfaceDialog.vue
20476
20474
  var SurfaceDialog_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SurfaceDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-6ce23dd7"]]);
20477
20475
  //#endregion
20478
- //#region src/components/surfaces/SurfaceFloating.vue
20476
+ //#region src/components/surfaces/SurfaceFloating.vue?vue&type=script&setup=true&lang.ts
20479
20477
  var _hoisted_1$18 = ["aria-labelledby", "aria-label"];
20480
20478
  var _hoisted_2$14 = ["id"];
20481
20479
  var _hoisted_3$12 = { class: "sd-surface-floating__content" };
20482
- var _sfc_main$15 = {
20480
+ var SurfaceFloating_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
20483
20481
  __name: "SurfaceFloating",
20484
20482
  props: { surface: {
20485
20483
  type: Object,
@@ -20627,11 +20625,13 @@ var _sfc_main$15 = {
20627
20625
  ])) : __props.surface.component ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createBlock(require__plugin_vue_export_helper.resolveDynamicComponent(__props.surface.component), require__plugin_vue_export_helper.normalizeProps(require__plugin_vue_export_helper.mergeProps({ key: 1 }, mergedComponentProps.value)), null, 16)) : require__plugin_vue_export_helper.createCommentVNode("", true)])], 14, _hoisted_1$18);
20628
20626
  };
20629
20627
  }
20630
- };
20631
- var SurfaceFloating_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$15, [["__scopeId", "data-v-cd2be5db"]]);
20628
+ });
20632
20629
  //#endregion
20633
- //#region src/components/surfaces/SurfaceHost.vue
20634
- var _sfc_main$14 = {
20630
+ //#region src/components/surfaces/SurfaceFloating.vue
20631
+ var SurfaceFloating_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SurfaceFloating_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-d26a1197"]]);
20632
+ //#endregion
20633
+ //#region src/components/surfaces/SurfaceHost.vue?vue&type=script&setup=true&lang.ts
20634
+ var SurfaceHost_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
20635
20635
  __name: "SurfaceHost",
20636
20636
  props: { geometryTarget: {
20637
20637
  type: Object,
@@ -20781,7 +20781,7 @@ var _sfc_main$14 = {
20781
20781
  if (dialog.value) return;
20782
20782
  if (event.key === "Escape" && f.request.closeOnEscape !== false) {
20783
20783
  event.stopPropagation();
20784
- surfaceManager.close(f.id);
20784
+ surfaceManager?.close(f.id);
20785
20785
  }
20786
20786
  }
20787
20787
  let escapeListenerAttached = false;
@@ -20800,7 +20800,8 @@ var _sfc_main$14 = {
20800
20800
  if (!f || f.settled) return;
20801
20801
  if (dialog.value) return;
20802
20802
  const rootEl = floatingRef.value?.rootEl;
20803
- if (rootEl && !rootEl.contains(event.target)) surfaceManager.close(f.id);
20803
+ const target = event.target instanceof Node ? event.target : null;
20804
+ if (rootEl && !rootEl.contains(target)) surfaceManager?.close(f.id);
20804
20805
  }
20805
20806
  let pointerListenerAttached = false;
20806
20807
  function attachPointerListener() {
@@ -20830,7 +20831,7 @@ var _sfc_main$14 = {
20830
20831
  });
20831
20832
  function handleDialogClose() {
20832
20833
  const d = dialog.value;
20833
- if (d && !d.settled) surfaceManager.close(d.id);
20834
+ if (d && !d.settled) surfaceManager?.close(d.id);
20834
20835
  }
20835
20836
  return (_ctx, _cache) => {
20836
20837
  return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createBlock(require__plugin_vue_export_helper.Teleport, { to: "body" }, [hasAnySurface.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", {
@@ -20852,8 +20853,10 @@ var _sfc_main$14 = {
20852
20853
  }, null, 8, ["surface", "scroll-lock-target"])) : require__plugin_vue_export_helper.createCommentVNode("", true)]);
20853
20854
  };
20854
20855
  }
20855
- };
20856
- var SurfaceHost_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$14, [["__scopeId", "data-v-dad99b67"]]);
20856
+ });
20857
+ //#endregion
20858
+ //#region src/components/surfaces/SurfaceHost.vue
20859
+ var SurfaceHost_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SurfaceHost_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ae02e94c"]]);
20857
20860
  //#endregion
20858
20861
  //#region src/SuperDoc.vue?vue&type=script&setup=true&lang.ts
20859
20862
  var _hoisted_1$17 = ["data-superdoc-ui-owner"];
@@ -23487,7 +23490,7 @@ var SuperDoc_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require
23487
23490
  });
23488
23491
  //#endregion
23489
23492
  //#region src/SuperDoc.vue
23490
- var SuperDoc_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SuperDoc_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-da95e5c5"]]);
23493
+ var SuperDoc_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SuperDoc_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0c6f8747"]]);
23491
23494
  //#endregion
23492
23495
  //#region src/core/create-app.js
23493
23496
  var PINIA_DEVTOOLS_SETUP_EVENT = "devtools-plugin:setup";
@@ -38327,13 +38330,13 @@ var ToolbarButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ re
38327
38330
  //#region src/internal/toolbar/built-in/ToolbarButton.vue
38328
38331
  var ToolbarButton_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarButton_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-40889353"]]);
38329
38332
  //#endregion
38330
- //#region src/internal/toolbar/built-in/ToolbarSeparator.vue
38333
+ //#region src/internal/toolbar/built-in/ToolbarSeparator.vue?vue&type=script&setup=true&lang.ts
38331
38334
  var _hoisted_1$14 = {
38332
38335
  class: "toolbar-separator",
38333
38336
  role: "separator",
38334
38337
  "aria-label": "Toolbar separator"
38335
38338
  };
38336
- var _sfc_main$13 = {
38339
+ var ToolbarSeparator_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
38337
38340
  __name: "ToolbarSeparator",
38338
38341
  props: { active: {
38339
38342
  type: Boolean,
@@ -38353,8 +38356,10 @@ var _sfc_main$13 = {
38353
38356
  }, null, 4)]);
38354
38357
  };
38355
38358
  }
38356
- };
38357
- var ToolbarSeparator_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$13, [["__scopeId", "data-v-cb82253a"]]);
38359
+ });
38360
+ //#endregion
38361
+ //#region src/internal/toolbar/built-in/ToolbarSeparator.vue
38362
+ var ToolbarSeparator_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarSeparator_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-10932d46"]]);
38358
38363
  //#endregion
38359
38364
  //#region src/internal/toolbar/built-in/ToolbarDropdown.vue?vue&type=script&setup=true&lang.ts
38360
38365
  var _hoisted_1$13 = { class: "toolbar-dropdown" };
@@ -38758,7 +38763,7 @@ var ToolbarDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
38758
38763
  });
38759
38764
  //#endregion
38760
38765
  //#region src/internal/toolbar/built-in/ToolbarDropdown.vue
38761
- var ToolbarDropdown_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarDropdown_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-50758732"]]);
38766
+ var ToolbarDropdown_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarDropdown_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-942d76a6"]]);
38762
38767
  //#endregion
38763
38768
  //#region src/internal/toolbar/built-in/toolbar-focus-helpers.js
38764
38769
  var preventEditorFocusTransfer = (event) => {
@@ -38781,8 +38786,8 @@ var refocusEditorSurface = (superToolbar, preferredEditor = null) => {
38781
38786
  if (editor instanceof HTMLElement) editor.focus({ preventScroll: true });
38782
38787
  };
38783
38788
  //#endregion
38784
- //#region src/internal/toolbar/built-in/OverflowMenu.vue
38785
- var _sfc_main$12 = {
38789
+ //#region src/internal/toolbar/built-in/OverflowMenu.vue?vue&type=script&setup=true&lang.ts
38790
+ var OverflowMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
38786
38791
  __name: "OverflowMenu",
38787
38792
  props: {
38788
38793
  toolbarItem: {
@@ -38878,8 +38883,10 @@ var _sfc_main$12 = {
38878
38883
  ]);
38879
38884
  };
38880
38885
  }
38881
- };
38882
- var OverflowMenu_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$12, [["__scopeId", "data-v-1227fcf9"]]);
38886
+ });
38887
+ //#endregion
38888
+ //#region src/internal/toolbar/built-in/OverflowMenu.vue
38889
+ var OverflowMenu_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(OverflowMenu_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-d2e189fd"]]);
38883
38890
  //#endregion
38884
38891
  //#region src/internal/toolbar/built-in/font-typeahead.js
38885
38892
  /**
@@ -39506,10 +39513,10 @@ var ToolbarComboBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
39506
39513
  });
39507
39514
  //#endregion
39508
39515
  //#region src/internal/toolbar/built-in/ToolbarComboBox.vue
39509
- var ToolbarComboBox_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarComboBox_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e9143b7e"]]);
39516
+ var ToolbarComboBox_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ToolbarComboBox_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a400064a"]]);
39510
39517
  //#endregion
39511
39518
  //#region src/internal/toolbar/built-in/FontFamilyCombobox.vue
39512
- var _sfc_main$11 = {
39519
+ var FontFamilyCombobox_default = /* @__PURE__ */ require__plugin_vue_export_helper.defineComponent({
39513
39520
  __name: "FontFamilyCombobox",
39514
39521
  props: {
39515
39522
  item: {
@@ -39547,10 +39554,10 @@ var _sfc_main$11 = {
39547
39554
  ]);
39548
39555
  };
39549
39556
  }
39550
- };
39557
+ });
39551
39558
  //#endregion
39552
39559
  //#region src/internal/toolbar/built-in/FontSizeCombobox.vue
39553
- var _sfc_main$10 = {
39560
+ var FontSizeCombobox_default = /* @__PURE__ */ require__plugin_vue_export_helper.defineComponent({
39554
39561
  __name: "FontSizeCombobox",
39555
39562
  props: {
39556
39563
  item: {
@@ -39588,7 +39595,7 @@ var _sfc_main$10 = {
39588
39595
  ]);
39589
39596
  };
39590
39597
  }
39591
- };
39598
+ });
39592
39599
  //#endregion
39593
39600
  //#region src/internal/toolbar/built-in/SdTooltip.vue?vue&type=script&setup=true&lang.ts
39594
39601
  var AUTO_HIDE_DELAY = 2500;
@@ -39812,7 +39819,7 @@ var SdTooltip_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ requir
39812
39819
  //#region src/internal/toolbar/built-in/SdTooltip.vue
39813
39820
  var SdTooltip_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(SdTooltip_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-dfd6f1d1"]]);
39814
39821
  //#endregion
39815
- //#region src/internal/toolbar/built-in/ButtonGroup.vue
39822
+ //#region src/internal/toolbar/built-in/ButtonGroup.vue?vue&type=script&setup=true&lang.ts
39816
39823
  var _hoisted_1$11 = [
39817
39824
  "onKeydown",
39818
39825
  "tabindex",
@@ -39823,7 +39830,7 @@ var _hoisted_3$7 = { key: 0 };
39823
39830
  var _hoisted_4$5 = { key: 0 };
39824
39831
  var _hoisted_5$3 = { key: 0 };
39825
39832
  var _hoisted_6$2 = { key: 0 };
39826
- var _sfc_main$9 = {
39833
+ var ButtonGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
39827
39834
  __name: "ButtonGroup",
39828
39835
  props: {
39829
39836
  toolbarItems: {
@@ -39864,7 +39871,7 @@ var _sfc_main$9 = {
39864
39871
  ],
39865
39872
  setup(__props, { emit: __emit }) {
39866
39873
  const emit = __emit;
39867
- const { proxy } = require__plugin_vue_export_helper.getCurrentInstance();
39874
+ const proxy = require__plugin_vue_export_helper.getCurrentInstance()?.proxy;
39868
39875
  const toolbarItemRefs = require__plugin_vue_export_helper.ref([]);
39869
39876
  const buttonGroupRef = require__plugin_vue_export_helper.ref(null);
39870
39877
  const props = __props;
@@ -40047,37 +40054,35 @@ var _sfc_main$9 = {
40047
40054
  "aria-label": `${item.attributes.value.ariaLabel} - ${option.label}`
40048
40055
  };
40049
40056
  };
40050
- const moveToNextButton = (e) => {
40051
- const currentButton = e.target;
40052
- const nextButton = e.target.closest(".sd-toolbar-item-ctn").nextElementSibling;
40053
- if (nextButton) {
40054
- currentButton.setAttribute("tabindex", "-1");
40057
+ const moveToNextButton = (target) => {
40058
+ const nextButton = target.closest(".sd-toolbar-item-ctn")?.nextElementSibling;
40059
+ if (nextButton instanceof HTMLElement) {
40060
+ target.setAttribute("tabindex", "-1");
40055
40061
  nextButton.setAttribute("tabindex", "0");
40056
40062
  nextButton.focus();
40057
40063
  }
40058
40064
  };
40059
- const moveToPreviousButton = (e) => {
40060
- const currentButton = e.target;
40061
- const previousButton = e.target.closest(".sd-toolbar-item-ctn").previousElementSibling;
40062
- if (previousButton) {
40063
- currentButton.setAttribute("tabindex", "-1");
40065
+ const moveToPreviousButton = (target) => {
40066
+ const previousButton = target.closest(".sd-toolbar-item-ctn")?.previousElementSibling;
40067
+ if (previousButton instanceof HTMLElement) {
40068
+ target.setAttribute("tabindex", "-1");
40064
40069
  previousButton.setAttribute("tabindex", "0");
40065
40070
  previousButton.focus();
40066
40071
  }
40067
40072
  };
40068
- const moveToNextButtonGroup = (e) => {
40069
- const nextButtonGroup = e.target.closest(".button-group").nextElementSibling;
40070
- if (nextButtonGroup) {
40073
+ const moveToNextButtonGroup = (target) => {
40074
+ const nextButtonGroup = target.closest(".button-group")?.nextElementSibling;
40075
+ if (nextButtonGroup instanceof HTMLElement) {
40071
40076
  nextButtonGroup.setAttribute("tabindex", "0");
40072
40077
  nextButtonGroup.focus();
40073
40078
  } else {
40074
40079
  const editor = document.querySelector(".ProseMirror");
40075
- if (editor) editor.focus();
40080
+ if (editor instanceof HTMLElement) editor.focus();
40076
40081
  }
40077
40082
  };
40078
- const moveToPreviousButtonGroup = (e) => {
40079
- const previousButtonGroup = e.target.closest(".button-group").previousElementSibling;
40080
- if (previousButtonGroup) {
40083
+ const moveToPreviousButtonGroup = (target) => {
40084
+ const previousButtonGroup = target.closest(".button-group")?.previousElementSibling;
40085
+ if (previousButtonGroup instanceof HTMLElement) {
40081
40086
  previousButtonGroup.setAttribute("tabindex", "0");
40082
40087
  previousButtonGroup.focus();
40083
40088
  }
@@ -40091,7 +40096,9 @@ var _sfc_main$9 = {
40091
40096
  handleToolbarButtonClick(item);
40092
40097
  };
40093
40098
  const handleKeyDown = (e, item) => {
40094
- const isTypingField = e.target.nodeName === "INPUT" || e.target.nodeName === "TEXTAREA";
40099
+ const target = e.target;
40100
+ if (!(target instanceof Element)) return;
40101
+ const isTypingField = target.nodeName === "INPUT" || target.nodeName === "TEXTAREA";
40095
40102
  const isTypingToolbarItem = item.name.value === "fontSize" || item.name.value === "fontFamily";
40096
40103
  if (isTypingField && isTypingToolbarItem) return;
40097
40104
  if (![
@@ -40115,20 +40122,20 @@ var _sfc_main$9 = {
40115
40122
  break;
40116
40123
  case "ArrowRight":
40117
40124
  closeDropdowns();
40118
- moveToNextButton(e);
40125
+ moveToNextButton(target);
40119
40126
  break;
40120
40127
  case "ArrowLeft":
40121
40128
  closeDropdowns();
40122
- moveToPreviousButton(e);
40129
+ moveToPreviousButton(target);
40123
40130
  break;
40124
40131
  case "Tab":
40125
- if (e.shiftKey) moveToPreviousButtonGroup(e);
40126
- else moveToNextButtonGroup(e);
40132
+ if (e.shiftKey) moveToPreviousButtonGroup(target);
40133
+ else moveToNextButtonGroup(target);
40127
40134
  break;
40128
40135
  default: break;
40129
40136
  }
40130
40137
  };
40131
- const handleFocus = (e) => {
40138
+ const handleFocus = () => {
40132
40139
  const firstButton = toolbarItemRefs.value.find((item) => !item.classList.contains("sd-disabled"));
40133
40140
  if (firstButton) {
40134
40141
  firstButton.setAttribute("tabindex", "0");
@@ -40198,7 +40205,7 @@ var _sfc_main$9 = {
40198
40205
  disabled: !item.tooltip?.value,
40199
40206
  "content-style": { fontFamily: props.uiFontFamily }
40200
40207
  }, {
40201
- trigger: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createVNode(_sfc_main$11, {
40208
+ trigger: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createVNode(FontFamilyCombobox_default, {
40202
40209
  item,
40203
40210
  "ui-font-family": props.uiFontFamily,
40204
40211
  class: "sd-toolbar-button sd-editor-toolbar-dropdown",
@@ -40215,7 +40222,7 @@ var _sfc_main$9 = {
40215
40222
  disabled: !item.tooltip?.value,
40216
40223
  "content-style": { fontFamily: props.uiFontFamily }
40217
40224
  }, {
40218
- trigger: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createVNode(_sfc_main$10, {
40225
+ trigger: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createVNode(FontSizeCombobox_default, {
40219
40226
  item,
40220
40227
  "ui-font-family": props.uiFontFamily,
40221
40228
  class: "sd-toolbar-button sd-editor-toolbar-dropdown",
@@ -40313,8 +40320,10 @@ var _sfc_main$9 = {
40313
40320
  }), 128))], 36);
40314
40321
  };
40315
40322
  }
40316
- };
40317
- var ButtonGroup_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$9, [["__scopeId", "data-v-fb216897"]]);
40323
+ });
40324
+ //#endregion
40325
+ //#region src/internal/toolbar/built-in/ButtonGroup.vue
40326
+ var ButtonGroup_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(ButtonGroup_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-21333fed"]]);
40318
40327
  var TOOLBAR_FONTS = [
40319
40328
  ["Arial", "sans-serif"],
40320
40329
  ["Arial Black", "sans-serif"],
@@ -40834,14 +40843,14 @@ var useToolbarItem = (options) => {
40834
40843
  };
40835
40844
  };
40836
40845
  //#endregion
40837
- //#region src/internal/toolbar/built-in/AlignmentButtons.vue
40846
+ //#region src/internal/toolbar/built-in/AlignmentButtons.vue?vue&type=script&setup=true&lang.ts
40838
40847
  var _hoisted_1$9 = [
40839
40848
  "onClick",
40840
40849
  "innerHTML",
40841
40850
  "aria-label",
40842
40851
  "onKeydown"
40843
40852
  ];
40844
- var AlignmentButtons_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default({
40853
+ var AlignmentButtons_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
40845
40854
  __name: "AlignmentButtons",
40846
40855
  emits: ["select"],
40847
40856
  setup(__props, { emit: __emit }) {
@@ -40928,16 +40937,19 @@ var AlignmentButtons_default = /*#__PURE__*/ require__plugin_vue_export_helper._
40928
40937
  }), 64))], 2);
40929
40938
  };
40930
40939
  }
40931
- }, [["__scopeId", "data-v-13e5f7a4"]]);
40940
+ });
40932
40941
  //#endregion
40933
- //#region src/internal/toolbar/built-in/StyleButtonsList.vue
40942
+ //#region src/internal/toolbar/built-in/AlignmentButtons.vue
40943
+ var AlignmentButtons_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(AlignmentButtons_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-7ddf6e50"]]);
40944
+ //#endregion
40945
+ //#region src/internal/toolbar/built-in/StyleButtonsList.vue?vue&type=script&setup=true&lang.ts
40934
40946
  var _hoisted_1$8 = [
40935
40947
  "onClick",
40936
40948
  "innerHTML",
40937
40949
  "aria-label",
40938
40950
  "onKeydown"
40939
40951
  ];
40940
- var _sfc_main$6 = {
40952
+ var StyleButtonsList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
40941
40953
  __name: "StyleButtonsList",
40942
40954
  props: {
40943
40955
  buttons: {
@@ -41021,8 +41033,10 @@ var _sfc_main$6 = {
41021
41033
  }), 128))], 2);
41022
41034
  };
41023
41035
  }
41024
- };
41025
- var StyleButtonsList_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$6, [["__scopeId", "data-v-44f37ff6"]]);
41036
+ });
41037
+ //#endregion
41038
+ //#region src/internal/toolbar/built-in/StyleButtonsList.vue
41039
+ var StyleButtonsList_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(StyleButtonsList_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-539d0995"]]);
41026
41040
  //#endregion
41027
41041
  //#region src/internal/toolbar/built-in/list-style-buttons.js
41028
41042
  var bulletStyleButtons = [
@@ -41085,14 +41099,14 @@ var numberedStyleButtons = [
41085
41099
  }
41086
41100
  ];
41087
41101
  //#endregion
41088
- //#region src/internal/toolbar/built-in/DocumentMode.vue
41102
+ //#region src/internal/toolbar/built-in/DocumentMode.vue?vue&type=script&setup=true&lang.ts
41089
41103
  var _hoisted_1$7 = ["onClick", "onKeydown"];
41090
41104
  var _hoisted_2$7 = { class: "document-mode-column icon-column" };
41091
41105
  var _hoisted_3$6 = ["innerHTML"];
41092
41106
  var _hoisted_4$4 = { class: "document-mode-column text-column" };
41093
41107
  var _hoisted_5$2 = { class: "document-mode-type" };
41094
41108
  var _hoisted_6$1 = { class: "document-mode-description" };
41095
- var _sfc_main$5 = {
41109
+ var DocumentMode_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41096
41110
  __name: "DocumentMode",
41097
41111
  props: { options: { type: Array } },
41098
41112
  emits: ["select"],
@@ -41128,9 +41142,11 @@ var _sfc_main$5 = {
41128
41142
  case "ArrowUp":
41129
41143
  moveToPreviousOption(index);
41130
41144
  break;
41131
- case "Enter":
41132
- handleClick(props.options[index]);
41145
+ case "Enter": {
41146
+ const option = props.options?.[index];
41147
+ if (option) handleClick(option);
41133
41148
  break;
41149
+ }
41134
41150
  default: break;
41135
41151
  }
41136
41152
  };
@@ -41156,8 +41172,10 @@ var _sfc_main$5 = {
41156
41172
  }), 256))], 2);
41157
41173
  };
41158
41174
  }
41159
- };
41160
- var DocumentMode_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$5, [["__scopeId", "data-v-bee14d7a"]]);
41175
+ });
41176
+ //#endregion
41177
+ //#region src/internal/toolbar/built-in/DocumentMode.vue
41178
+ var DocumentMode_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(DocumentMode_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a20b9574"]]);
41161
41179
  //#endregion
41162
41180
  //#region src/internal/toolbar/built-in/LinkedStyle.vue?vue&type=script&setup=true&lang.ts
41163
41181
  var _hoisted_1$6 = {
@@ -41295,7 +41313,7 @@ var LinkedStyle_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ requ
41295
41313
  //#region src/internal/toolbar/built-in/LinkedStyle.vue
41296
41314
  var LinkedStyle_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(LinkedStyle_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4e36f956"]]);
41297
41315
  //#endregion
41298
- //#region src/internal/toolbar/built-in/AIWriter.vue
41316
+ //#region src/internal/toolbar/built-in/AIWriter.vue?vue&type=script&setup=true&lang.ts
41299
41317
  var _hoisted_1$5 = ["placeholder"];
41300
41318
  var _hoisted_2$5 = { class: "sd-ai-writer__footer" };
41301
41319
  var _hoisted_3$4 = {
@@ -41306,7 +41324,7 @@ var _hoisted_3$4 = {
41306
41324
  var _hoisted_4$2 = ["disabled"];
41307
41325
  var DEFAULT_AI_ENDPOINT = "https://sd-dev-express-gateway-i6xtm.ondigitalocean.app/insights";
41308
41326
  var SYSTEM_PROMPT = "You are an expert copywriter and you are immersed in a document editor. Only write what is asked for.";
41309
- var _sfc_main$4 = {
41327
+ var AIWriter_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41310
41328
  __name: "AIWriter",
41311
41329
  props: {
41312
41330
  selectedText: {
@@ -41353,13 +41371,13 @@ var _sfc_main$4 = {
41353
41371
  });
41354
41372
  function extractGeneratedText(payload) {
41355
41373
  if (typeof payload === "string") return payload;
41356
- if (!payload || typeof payload !== "object") return "";
41374
+ if (!require_create_super_doc_ui.isPlainObject(payload)) return "";
41357
41375
  const customPrompt = payload.custom_prompt;
41358
41376
  if (Array.isArray(customPrompt)) {
41359
41377
  const first = customPrompt[0];
41360
- if (first && typeof first.value === "string") return first.value;
41378
+ if (require_create_super_doc_ui.isPlainObject(first) && typeof first.value === "string") return first.value;
41361
41379
  }
41362
- if (customPrompt && typeof customPrompt === "object" && typeof customPrompt.value === "string") return customPrompt.value;
41380
+ if (require_create_super_doc_ui.isPlainObject(customPrompt) && typeof customPrompt.value === "string") return customPrompt.value;
41363
41381
  if (typeof payload.value === "string") return payload.value;
41364
41382
  if (typeof payload.text === "string") return payload.text;
41365
41383
  return "";
@@ -41393,7 +41411,7 @@ var _sfc_main$4 = {
41393
41411
  }
41394
41412
  function receiptSucceeded(receipt) {
41395
41413
  if (!receipt || typeof receipt !== "object") return true;
41396
- if (receipt.success === false || receipt.ok === false) return false;
41414
+ if ("success" in receipt && receipt.success === false || "ok" in receipt && receipt.ok === false) return false;
41397
41415
  return true;
41398
41416
  }
41399
41417
  function insertGeneratedText(text) {
@@ -41463,10 +41481,12 @@ var _sfc_main$4 = {
41463
41481
  }, require__plugin_vue_export_helper.toDisplayString(isLoading.value ? "Generating" : "Generate"), 9, _hoisted_4$2)])], 32);
41464
41482
  };
41465
41483
  }
41466
- };
41467
- var AIWriter_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$4, [["__scopeId", "data-v-67f6c6f7"]]);
41484
+ });
41468
41485
  //#endregion
41469
- //#region src/internal/toolbar/built-in/IconGridRow.vue
41486
+ //#region src/internal/toolbar/built-in/AIWriter.vue
41487
+ var AIWriter_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(AIWriter_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3951e804"]]);
41488
+ //#endregion
41489
+ //#region src/internal/toolbar/built-in/IconGridRow.vue?vue&type=script&setup=true&lang.ts
41470
41490
  var _hoisted_1$4 = [
41471
41491
  "aria-label",
41472
41492
  "onClick",
@@ -41475,7 +41495,7 @@ var _hoisted_1$4 = [
41475
41495
  var _hoisted_2$4 = ["innerHTML"];
41476
41496
  var _hoisted_3$3 = ["innerHTML"];
41477
41497
  var ROW_SIZE$1 = 7;
41478
- var _sfc_main$3 = {
41498
+ var IconGridRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41479
41499
  __name: "IconGridRow",
41480
41500
  props: {
41481
41501
  icons: {
@@ -41492,8 +41512,9 @@ var _sfc_main$3 = {
41492
41512
  const emit = __emit;
41493
41513
  const props = __props;
41494
41514
  const isActive = require__plugin_vue_export_helper.computed(() => (option) => {
41495
- if (!props.activeColor.value) return false;
41496
- return props.activeColor.value.toUpperCase() === option.value;
41515
+ const activeColor = props.activeColor?.value;
41516
+ if (!activeColor) return false;
41517
+ return activeColor.toUpperCase() === option.value;
41497
41518
  });
41498
41519
  const getCheckStyle = (color, optionIndex) => {
41499
41520
  if (optionIndex === 5 || ["#FFFFFF", "#FAFF09"].includes(color)) return { color: "#000" };
@@ -41601,17 +41622,19 @@ var _sfc_main$3 = {
41601
41622
  }), 128);
41602
41623
  };
41603
41624
  }
41604
- };
41605
- var IconGridRow_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$3, [["__scopeId", "data-v-05eb02fc"]]);
41625
+ });
41626
+ //#endregion
41627
+ //#region src/internal/toolbar/built-in/IconGridRow.vue
41628
+ var IconGridRow_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(IconGridRow_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b1771c36"]]);
41606
41629
  //#endregion
41607
41630
  //#region ../../shared/common/icons/droplet-slash.svg?raw
41608
41631
  var droplet_slash_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"/></svg>\n";
41609
41632
  //#endregion
41610
- //#region src/internal/toolbar/built-in/IconGrid.vue
41633
+ //#region src/internal/toolbar/built-in/IconGrid.vue?vue&type=script&setup=true&lang.ts
41611
41634
  var _hoisted_1$3 = { class: "options-grid-wrap" };
41612
41635
  var _hoisted_2$3 = ["innerHTML"];
41613
41636
  var _hoisted_3$2 = { class: "option-grid-ctn" };
41614
- var _sfc_main$2 = {
41637
+ var IconGrid_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41615
41638
  __name: "IconGrid",
41616
41639
  props: {
41617
41640
  icons: {
@@ -41651,15 +41674,17 @@ var _sfc_main$2 = {
41651
41674
  icons: __props.icons,
41652
41675
  "active-color": __props.activeColor,
41653
41676
  onSelect: handleSelect
41654
- }, null, 8, ["icons", "active-color"]), __props.customIcons.flat().length ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock(require__plugin_vue_export_helper.Fragment, { key: 0 }, [_cache[2] || (_cache[2] = require__plugin_vue_export_helper.createElementVNode("span", { class: "option-grid-ctn__subtitle" }, "Custom colors", -1)), require__plugin_vue_export_helper.createVNode(IconGridRow_default, {
41677
+ }, null, 8, ["icons", "active-color"]), __props.customIcons?.flat().length ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock(require__plugin_vue_export_helper.Fragment, { key: 0 }, [_cache[2] || (_cache[2] = require__plugin_vue_export_helper.createElementVNode("span", { class: "option-grid-ctn__subtitle" }, "Custom colors", -1)), require__plugin_vue_export_helper.createVNode(IconGridRow_default, {
41655
41678
  icons: __props.customIcons,
41656
41679
  "active-color": __props.activeColor,
41657
41680
  onSelect: handleSelect
41658
41681
  }, null, 8, ["icons", "active-color"])], 64)) : require__plugin_vue_export_helper.createCommentVNode("", true)])]);
41659
41682
  };
41660
41683
  }
41661
- };
41662
- var IconGrid_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$2, [["__scopeId", "data-v-52b0283a"]]);
41684
+ });
41685
+ //#endregion
41686
+ //#region src/internal/toolbar/built-in/IconGrid.vue
41687
+ var IconGrid_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(IconGrid_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-03719472"]]);
41663
41688
  //#endregion
41664
41689
  //#region src/internal/toolbar/built-in/color-dropdown-helpers.js
41665
41690
  var closeDropdown$1 = (dropdown) => {
@@ -41770,7 +41795,7 @@ var icons = [
41770
41795
  ]
41771
41796
  ];
41772
41797
  //#endregion
41773
- //#region src/internal/toolbar/built-in/TableGrid.vue
41798
+ //#region src/internal/toolbar/built-in/TableGrid.vue?vue&type=script&setup=true&lang.ts
41774
41799
  var _hoisted_1$2 = [
41775
41800
  "data-cols",
41776
41801
  "data-rows",
@@ -41779,7 +41804,7 @@ var _hoisted_1$2 = [
41779
41804
  ];
41780
41805
  var _hoisted_2$2 = ["aria-valuetext"];
41781
41806
  var ROW_SIZE = 5;
41782
- var TableGrid_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default({
41807
+ var TableGrid_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41783
41808
  __name: "TableGrid",
41784
41809
  emits: ["select", "clickoutside"],
41785
41810
  setup(__props, { emit: __emit }) {
@@ -41790,10 +41815,13 @@ var TableGrid_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_
41790
41815
  const tableGridItems = require__plugin_vue_export_helper.ref([]);
41791
41816
  const onTableGridMouseOver = (event) => {
41792
41817
  let target = event.target;
41818
+ if (!(target instanceof HTMLElement)) return;
41793
41819
  if (!!target.dataset.grid) return;
41794
- let allItems = [...target.parentElement.querySelectorAll("[data-item]")];
41795
- let cols = parseInt(target.dataset.cols, 10);
41796
- let rows = parseInt(target.dataset.rows, 10);
41820
+ let grid = target.parentElement;
41821
+ if (!grid) return;
41822
+ let allItems = Array.from(grid.querySelectorAll("[data-item]"));
41823
+ let cols = parseInt(target.dataset.cols ?? "", 10);
41824
+ let rows = parseInt(target.dataset.rows ?? "", 10);
41797
41825
  selectGridItems(allItems, cols, rows);
41798
41826
  };
41799
41827
  const selectGridItems = (allItems, cols, rows) => {
@@ -41801,8 +41829,8 @@ var TableGrid_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_
41801
41829
  selectedRows.value = rows;
41802
41830
  for (let i = 0; i < allItems.length; i++) {
41803
41831
  let item = allItems[i];
41804
- let itemsCols = parseInt(item.dataset.cols, 10);
41805
- let itemsRows = parseInt(item.dataset.rows, 10);
41832
+ let itemsCols = parseInt(item.dataset.cols ?? "", 10);
41833
+ let itemsRows = parseInt(item.dataset.rows ?? "", 10);
41806
41834
  if (itemsCols <= cols && itemsRows <= rows) item.classList.add("sd-selected");
41807
41835
  else item.classList.remove("sd-selected");
41808
41836
  }
@@ -41892,9 +41920,12 @@ var TableGrid_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_
41892
41920
  }, require__plugin_vue_export_helper.toDisplayString(selectedRows.value) + " x " + require__plugin_vue_export_helper.toDisplayString(selectedCols.value), 9, _hoisted_2$2)], 2);
41893
41921
  };
41894
41922
  }
41895
- }, [["__scopeId", "data-v-b87d6ca2"]]);
41923
+ });
41896
41924
  //#endregion
41897
- //#region src/internal/toolbar/built-in/TableActions.vue
41925
+ //#region src/internal/toolbar/built-in/TableGrid.vue
41926
+ var TableGrid_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(TableGrid_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-38daa3ad"]]);
41927
+ //#endregion
41928
+ //#region src/internal/toolbar/built-in/TableActions.vue?vue&type=script&setup=true&lang.ts
41898
41929
  var _hoisted_1$1 = { class: "toolbar-table-actions" };
41899
41930
  var _hoisted_2$1 = [
41900
41931
  "aria-disabled",
@@ -41905,7 +41936,7 @@ var _hoisted_2$1 = [
41905
41936
  var _hoisted_3$1 = { class: "toolbar-table-actions__icon" };
41906
41937
  var _hoisted_4$1 = ["innerHTML"];
41907
41938
  var _hoisted_5$1 = { class: "toolbar-table-actions__label" };
41908
- var _sfc_main = {
41939
+ var TableActions_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
41909
41940
  __name: "TableActions",
41910
41941
  props: { options: { type: Array } },
41911
41942
  emits: ["select"],
@@ -41934,8 +41965,10 @@ var _sfc_main = {
41934
41965
  }), 256))]);
41935
41966
  };
41936
41967
  }
41937
- };
41938
- var TableActions_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main, [["__scopeId", "data-v-72123aae"]]);
41968
+ });
41969
+ //#endregion
41970
+ //#region src/internal/toolbar/built-in/TableActions.vue
41971
+ var TableActions_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(TableActions_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-76ed2dc1"]]);
41939
41972
  //#endregion
41940
41973
  //#region src/internal/toolbar/built-in/PageNumberMenu.vue?vue&type=script&setup=true&lang.ts
41941
41974
  var _hoisted_1 = ["aria-busy"];
@@ -44925,6 +44958,15 @@ function getActiveFontRuntime(editor) {
44925
44958
  *
44926
44959
  * @class
44927
44960
  */
44961
+ function runtimeUserOf(user) {
44962
+ const text = (value) => typeof value === "string" && value ? value : void 0;
44963
+ return {
44964
+ name: text(user.name) ?? "",
44965
+ ...text(user.id) ? { id: text(user.id) } : {},
44966
+ ...text(user.email) ? { email: text(user.email) } : {},
44967
+ ...text(user.initials) ? { initials: text(user.initials) } : {}
44968
+ };
44969
+ }
44928
44970
  var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default {
44929
44971
  static {
44930
44972
  this.allowedTypes = [DOCX, PDF];
@@ -45155,6 +45197,7 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
45155
45197
  viewOptions: { layout: "print" },
45156
45198
  useLayoutEngine: true
45157
45199
  };
45200
+ this.#userSwitch = Promise.resolve();
45158
45201
  this.#fontsRelayEditors = /* @__PURE__ */ new WeakSet();
45159
45202
  this.#warnedMissingFonts = /* @__PURE__ */ new WeakMap();
45160
45203
  this.#lastFontsChangedPayload = null;
@@ -45251,7 +45294,7 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
45251
45294
  }
45252
45295
  this.userColorMap = /* @__PURE__ */ new Map();
45253
45296
  this.colorIndex = 0;
45254
- this.version = "2.29.0-next.2";
45297
+ this.version = "2.29.0-next.3";
45255
45298
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
45256
45299
  this.superdocId = config.superdocId || require_uuid.v4();
45257
45300
  this.colors = this.config.colors ?? [];
@@ -46106,6 +46149,46 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
46106
46149
  if (!editor) throw new Error("SuperDoc: source editor not yet created — wait for the ready event before upgrading");
46107
46150
  return editor;
46108
46151
  }
46152
+ setUser(user) {
46153
+ this.#requireReady("setUser");
46154
+ const name = typeof user?.name === "string" ? user.name.trim() : "";
46155
+ if (!name) return Promise.reject(/* @__PURE__ */ new TypeError("SuperDoc.setUser requires a non-empty user name."));
46156
+ const next = normalizeSuperDocUser({
46157
+ ...user,
46158
+ name
46159
+ });
46160
+ const applied = this.#userSwitch.then(() => this.#applyUser(next));
46161
+ this.#userSwitch = applied.catch(() => {});
46162
+ return applied;
46163
+ }
46164
+ #userSwitch;
46165
+ async #applyUser(next) {
46166
+ const current = this.config.user;
46167
+ if (current && [
46168
+ "id",
46169
+ "name",
46170
+ "email",
46171
+ "image",
46172
+ "initials"
46173
+ ].every((key) => (current[key] ?? null) === (next[key] ?? null))) return;
46174
+ const runtimes = this.#editorRuntimeRegistry.getAll();
46175
+ const results = await Promise.allSettled(runtimes.map((runtime) => runtime.setUser?.(runtimeUserOf(next))));
46176
+ const failure = results.find((result) => result.status === "rejected");
46177
+ if (failure) {
46178
+ if (current) await Promise.allSettled(runtimes.filter((_, index) => results[index].status === "fulfilled").map((runtime) => runtime.setUser?.(runtimeUserOf(current))));
46179
+ throw failure.reason;
46180
+ }
46181
+ const target = this.config.user ?? (this.config.user = {});
46182
+ for (const key of Object.keys(target)) delete target[key];
46183
+ Object.assign(target, next);
46184
+ this.user = target;
46185
+ this.#assignUserColor();
46186
+ const storeUser = this.superdocStore?.user;
46187
+ if (storeUser) {
46188
+ for (const key of Object.keys(storeUser)) delete storeUser[key];
46189
+ Object.assign(storeUser, target);
46190
+ }
46191
+ }
46109
46192
  /**
46110
46193
  * Add a user to the shared users list. Requires the instance to be
46111
46194
  * ready; pre-ready mutations would be silently overwritten by the