superdoc 2.23.1-next.6 → 2.23.1-next.8

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.
package/dist/superdoc.cjs CHANGED
@@ -304,7 +304,7 @@ var awarenessStatesToArray = (context, states) => {
304
304
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
305
305
  function getSuperdocVersion() {
306
306
  try {
307
- return "2.23.1-next.6";
307
+ return "2.23.1-next.8";
308
308
  } catch {
309
309
  return "unknown";
310
310
  }
@@ -12202,7 +12202,7 @@ function useUiFontFamily() {
12202
12202
  }
12203
12203
  //#endregion
12204
12204
  //#region src/components/CommentsLayer/CommentsDropdown.vue
12205
- var _hoisted_1$32 = { class: "comments-dropdown" };
12205
+ var _hoisted_1$31 = { class: "comments-dropdown" };
12206
12206
  var _hoisted_2$25 = ["onClick"];
12207
12207
  var _hoisted_3$21 = {
12208
12208
  key: 0,
@@ -12333,7 +12333,7 @@ var _sfc_main$39 = {
12333
12333
  window.removeEventListener("scroll", updateMenuPosition, true);
12334
12334
  });
12335
12335
  return (_ctx, _cache) => {
12336
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$32, [require__plugin_vue_export_helper.createElementVNode("div", {
12336
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$31, [require__plugin_vue_export_helper.createElementVNode("div", {
12337
12337
  ref_key: "triggerRef",
12338
12338
  ref: triggerRef,
12339
12339
  class: "comments-dropdown__trigger",
@@ -12363,7 +12363,7 @@ var _sfc_main$39 = {
12363
12363
  var CommentsDropdown_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$39, [["__scopeId", "data-v-7eced80a"]]);
12364
12364
  //#endregion
12365
12365
  //#region src/components/CommentsLayer/InternalDropdown.vue
12366
- var _hoisted_1$31 = { class: "sd-comment-option" };
12366
+ var _hoisted_1$30 = { class: "sd-comment-option" };
12367
12367
  var _hoisted_2$24 = ["innerHTML"];
12368
12368
  var _hoisted_3$20 = { class: "sd-option-state" };
12369
12369
  var _hoisted_4$12 = ["innerHTML"];
@@ -12434,7 +12434,7 @@ var _sfc_main$38 = {
12434
12434
  disabled: __props.isDisabled,
12435
12435
  "content-style": { fontFamily: require__plugin_vue_export_helper.unref(uiFontFamily) }
12436
12436
  }, {
12437
- default: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_1$31, [
12437
+ default: require__plugin_vue_export_helper.withCtx(() => [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_1$30, [
12438
12438
  require__plugin_vue_export_helper.createElementVNode("div", {
12439
12439
  class: "sd-active-icon",
12440
12440
  innerHTML: activeIcon.value
@@ -12600,7 +12600,7 @@ var isAllowed = (permission, role, isInternal, context = {}) => {
12600
12600
  };
12601
12601
  //#endregion
12602
12602
  //#region src/components/general/Avatar.vue
12603
- var _hoisted_1$30 = { class: "user-container" };
12603
+ var _hoisted_1$29 = { class: "user-container" };
12604
12604
  var _hoisted_2$23 = ["src"];
12605
12605
  var _hoisted_3$19 = {
12606
12606
  key: 1,
@@ -12623,7 +12623,7 @@ var _sfc_main$37 = {
12623
12623
  return email?.substring(0, 1)?.toUpperCase() || null;
12624
12624
  };
12625
12625
  return (_ctx, _cache) => {
12626
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$30, [__props.user.image ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("img", {
12626
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$29, [__props.user.image ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("img", {
12627
12627
  key: 0,
12628
12628
  class: "user-bg",
12629
12629
  src: __props.user.image.startsWith("http") ? __props.user.image : `data:image/png;base64,${__props.user.image}`
@@ -12634,7 +12634,7 @@ var _sfc_main$37 = {
12634
12634
  var Avatar_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$37, [["__scopeId", "data-v-c95b2073"]]);
12635
12635
  //#endregion
12636
12636
  //#region src/components/CommentsLayer/CommentHeader.vue
12637
- var _hoisted_1$29 = { class: "card-section comment-header" };
12637
+ var _hoisted_1$28 = { class: "card-section comment-header" };
12638
12638
  var _hoisted_2$22 = { class: "comment-header-left" };
12639
12639
  var _hoisted_3$18 = { class: "user-info" };
12640
12640
  var _hoisted_4$11 = { class: "user-name" };
@@ -12894,7 +12894,7 @@ var _sfc_main$36 = {
12894
12894
  return user;
12895
12895
  });
12896
12896
  return (_ctx, _cache) => {
12897
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$29, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$22, [require__plugin_vue_export_helper.createVNode(Avatar_default, {
12897
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$28, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$22, [require__plugin_vue_export_helper.createVNode(Avatar_default, {
12898
12898
  user: getCurrentUser.value,
12899
12899
  class: "avatar"
12900
12900
  }, null, 8, ["user"]), require__plugin_vue_export_helper.createElementVNode("div", _hoisted_3$18, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_4$11, [require__plugin_vue_export_helper.createTextVNode(require__plugin_vue_export_helper.toDisplayString(getCurrentUser.value.name), 1), isImported.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("span", _hoisted_5$9, "IMPORTED")) : require__plugin_vue_export_helper.createCommentVNode("", true)]), props.comment.createdTime ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_6$8, require__plugin_vue_export_helper.toDisplayString(require__plugin_vue_export_helper.unref(formatDate)(props.comment.createdTime)), 1)) : require__plugin_vue_export_helper.createCommentVNode("", true)])]), require__plugin_vue_export_helper.createElementVNode("div", { class: require__plugin_vue_export_helper.normalizeClass(["overflow-menu", { "is-visible": props.isActive }]) }, [
@@ -12946,7 +12946,7 @@ var _sfc_main$36 = {
12946
12946
  var CommentHeader_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$36, [["__scopeId", "data-v-f2f11c96"]]);
12947
12947
  //#endregion
12948
12948
  //#region src/components/CommentsLayer/CommentInput.vue
12949
- var _hoisted_1$28 = { class: "input-section" };
12949
+ var _hoisted_1$27 = { class: "input-section" };
12950
12950
  var _hoisted_2$21 = { class: "comment-composer" };
12951
12951
  var _hoisted_3$17 = [
12952
12952
  "aria-expanded",
@@ -13120,7 +13120,7 @@ var _sfc_main$35 = {
13120
13120
  require__plugin_vue_export_helper.watch(currentCommentText, scheduleInputHeightSync);
13121
13121
  __expose({ focus });
13122
13122
  return (_ctx, _cache) => {
13123
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$28, [__props.includeHeader ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createBlock(CommentHeader_default, {
13123
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$27, [__props.includeHeader ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createBlock(CommentHeader_default, {
13124
13124
  key: 0,
13125
13125
  config: __props.config,
13126
13126
  comment: __props.comment,
@@ -13166,8 +13166,116 @@ var _sfc_main$35 = {
13166
13166
  };
13167
13167
  var CommentInput_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$35, [["__scopeId", "data-v-0720a671"]]);
13168
13168
  //#endregion
13169
+ //#region src/internal/toolbar/built-in/url-safety.js
13170
+ /**
13171
+ * Minimal href sanitizer for the built-in link popover.
13172
+ *
13173
+ * The v1 toolbar used the shared `@superdoc/url-validation` package, which is not
13174
+ * a resolvable runtime dependency of the published `superdoc` ES build. This
13175
+ * keeps the same fail-closed posture (only known-safe schemes pass) without
13176
+ * pulling in that package: dangerous schemes (`javascript:`, `data:`,
13177
+ * `vbscript:`) return `null`, mirroring the v1 contract that callers treat a
13178
+ * `null` result as an invalid URL.
13179
+ */
13180
+ var SAFE_SCHEME = /^(https?|mailto|tel):/i;
13181
+ var DANGEROUS_SCHEME = /^(javascript|data|vbscript):/i;
13182
+ var HAS_SCHEME = /^[a-z][a-z0-9+.-]*:/i;
13183
+ /**
13184
+ * Validate and normalize an href. Returns `{ href }` for safe values, or `null`.
13185
+ * @param {string} value
13186
+ * @returns {{ href: string }|null}
13187
+ */
13188
+ function sanitizeHref(value) {
13189
+ if (typeof value !== "string") return null;
13190
+ const trimmed = value.trim();
13191
+ if (!trimmed) return null;
13192
+ if (trimmed.startsWith("#")) return { href: trimmed };
13193
+ if (DANGEROUS_SCHEME.test(trimmed)) return null;
13194
+ if (HAS_SCHEME.test(trimmed)) return SAFE_SCHEME.test(trimmed) ? { href: trimmed } : null;
13195
+ return { href: trimmed };
13196
+ }
13197
+ //#endregion
13198
+ //#region src/components/CommentsLayer/comment-urls.js
13199
+ function isAbsoluteWebUrl(value) {
13200
+ if (!/^https?:\/\/[^\s/?#\\]+/i.test(value) || /[\s\\]/u.test(value)) return false;
13201
+ try {
13202
+ const url = new URL(value);
13203
+ return (url.protocol === "https:" || url.protocol === "http:") && Boolean(url.hostname);
13204
+ } catch {
13205
+ return false;
13206
+ }
13207
+ }
13208
+ function trimUrlPunctuation(value) {
13209
+ const closingDelimiter = {
13210
+ "(": ")",
13211
+ "[": "]",
13212
+ "{": "}"
13213
+ };
13214
+ const balance = {
13215
+ ")": 0,
13216
+ "]": 0,
13217
+ "}": 0
13218
+ };
13219
+ for (const character of value) {
13220
+ const close = closingDelimiter[character];
13221
+ if (close) balance[close] += 1;
13222
+ else if (Object.hasOwn(balance, character)) balance[character] -= 1;
13223
+ }
13224
+ let end = value.length;
13225
+ while (end > 0) {
13226
+ const character = value[end - 1];
13227
+ if (".,!?;:".includes(character)) end -= 1;
13228
+ else if (balance[character] < 0) {
13229
+ balance[character] += 1;
13230
+ end -= 1;
13231
+ } else break;
13232
+ }
13233
+ return value.slice(0, end);
13234
+ }
13235
+ function configureLink(link, href) {
13236
+ link.setAttribute("href", href);
13237
+ link.setAttribute("target", "_blank");
13238
+ link.setAttribute("rel", "noopener noreferrer");
13239
+ }
13240
+ /** Render links without rewriting stored comment HTML or its rich-text structure. */
13241
+ function renderCommentHtml(value) {
13242
+ if (typeof value !== "string") return "";
13243
+ if (typeof document === "undefined") return value;
13244
+ const template = document.createElement("template");
13245
+ template.innerHTML = value;
13246
+ for (const link of template.content.querySelectorAll("a")) {
13247
+ const safe = sanitizeHref(link.getAttribute("href"));
13248
+ if (safe && (isAbsoluteWebUrl(safe.href) || /^(mailto|tel):\S+$/i.test(safe.href))) configureLink(link, safe.href);
13249
+ else link.replaceWith(...link.childNodes);
13250
+ }
13251
+ const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_TEXT);
13252
+ const textNodes = [];
13253
+ while (walker.nextNode()) textNodes.push(walker.currentNode);
13254
+ for (const node of textNodes) {
13255
+ if (node.parentElement?.closest("a, script, style, textarea, code, pre")) continue;
13256
+ const text = node.textContent;
13257
+ const fragment = document.createDocumentFragment();
13258
+ let end = 0;
13259
+ for (const match of text.matchAll(/(^|[\s([{])(https?:\/\/[^\s<>"']+)/gi)) {
13260
+ const href = trimUrlPunctuation(match[2]);
13261
+ if (!isAbsoluteWebUrl(href)) continue;
13262
+ const start = match.index + match[1].length;
13263
+ fragment.append(document.createTextNode(text.slice(end, start)));
13264
+ const link = document.createElement("a");
13265
+ configureLink(link, href);
13266
+ link.textContent = href;
13267
+ fragment.append(link);
13268
+ end = start + href.length;
13269
+ }
13270
+ if (end === 0) continue;
13271
+ fragment.append(document.createTextNode(text.slice(end)));
13272
+ node.replaceWith(fragment);
13273
+ }
13274
+ return template.innerHTML;
13275
+ }
13276
+ //#endregion
13169
13277
  //#region src/components/CommentsLayer/CommentDialog.vue
13170
- var _hoisted_1$27 = [
13278
+ var _hoisted_1$26 = [
13171
13279
  "aria-label",
13172
13280
  "data-comment-instance-id",
13173
13281
  "data-comment-thread-id",
@@ -13547,6 +13655,12 @@ var _sfc_main$34 = {
13547
13655
  return a.createdTime - b.createdTime;
13548
13656
  });
13549
13657
  });
13658
+ const renderedCommentTexts = require__plugin_vue_export_helper.computed(() => new Map(comments.value.map((comment) => [comment.commentId, renderCommentHtml(comment.commentText)])));
13659
+ const handleDialogClick = (event) => {
13660
+ if (event.target instanceof Element && event.target.closest(".comment a[href]")) return;
13661
+ event.preventDefault();
13662
+ return setFocus();
13663
+ };
13550
13664
  const dialogAccessibleLabel = require__plugin_vue_export_helper.computed(() => {
13551
13665
  if (props.comment.trackedChangeLabel) return props.comment.trackedChangeLabel;
13552
13666
  if (props.comment.trackedChange) return "Tracked change discussion";
@@ -14175,7 +14289,7 @@ var _sfc_main$34 = {
14175
14289
  "is-active": isDialogActive.value || isPendingNewComment.value,
14176
14290
  "is-resolved": props.comment.resolvedTime
14177
14291
  }]),
14178
- onClick: require__plugin_vue_export_helper.withModifiers(setFocus, ["stop", "prevent"]),
14292
+ onClick: require__plugin_vue_export_helper.withModifiers(handleDialogClick, ["stop"]),
14179
14293
  style: require__plugin_vue_export_helper.normalizeStyle(getSidebarCommentStyle.value),
14180
14294
  ref_key: "commentDialogElement",
14181
14295
  ref: commentDialogElement,
@@ -14312,7 +14426,7 @@ var _sfc_main$34 = {
14312
14426
  class: require__plugin_vue_export_helper.normalizeClass(["comment", index === 0 ? bodyOverflowClass.value : void 0]),
14313
14427
  ref_for: true,
14314
14428
  ref: index === 0 ? setParentBodyRef : void 0,
14315
- innerHTML: comment.commentText
14429
+ innerHTML: renderedCommentTexts.value.get(comment.commentId)
14316
14430
  }, null, 10, _hoisted_38)) : require__plugin_vue_export_helper.unref(isDebugging) && !isEditingThisComment.value(comment) ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_39, require__plugin_vue_export_helper.toDisplayString(require__plugin_vue_export_helper.unref(editorCommentPositions)[comment.importedId !== void 0 ? comment.importedId : comment.commentId]?.bounds), 1)) : (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_40, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_41, [require__plugin_vue_export_helper.createVNode(CommentInput_default, {
14317
14431
  ref_for: true,
14318
14432
  ref: setEditCommentInputRef(comment.commentId),
@@ -14385,14 +14499,14 @@ var _sfc_main$34 = {
14385
14499
  disabled: !hasTextContent.value || isV2WriteDisabled.value || isSubmittingReply.value,
14386
14500
  "data-disabled-reason": v2ReplyDisabledReason.value
14387
14501
  }, " Reply ", 10, _hoisted_53)])]))], 64)) : require__plugin_vue_export_helper.createCommentVNode("", true)
14388
- ], 64))], 14, _hoisted_1$27)), [[_directive_click_outside, handleClickOutside]]);
14502
+ ], 64))], 14, _hoisted_1$26)), [[_directive_click_outside, handleClickOutside]]);
14389
14503
  };
14390
14504
  }
14391
14505
  };
14392
- var CommentDialog_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$34, [["__scopeId", "data-v-dcbcc0d4"]]);
14506
+ var CommentDialog_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$34, [["__scopeId", "data-v-c189ab35"]]);
14393
14507
  //#endregion
14394
14508
  //#region src/components/CommentsLayer/commentsList/ReviewDirectoryListItem.vue
14395
- var _hoisted_1$26 = [
14509
+ var _hoisted_1$25 = [
14396
14510
  "tabindex",
14397
14511
  "aria-posinset",
14398
14512
  "aria-setsize",
@@ -14530,14 +14644,14 @@ var _sfc_main$33 = {
14530
14644
  "floating-page-index",
14531
14645
  "floating-position-entry",
14532
14646
  "is-floating-instance-active"
14533
- ])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 44, _hoisted_1$26);
14647
+ ])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 44, _hoisted_1$25);
14534
14648
  };
14535
14649
  }
14536
14650
  };
14537
14651
  var ReviewDirectoryListItem_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$33, [["__scopeId", "data-v-29650a06"]]);
14538
14652
  //#endregion
14539
14653
  //#region src/components/CommentsLayer/commentsList/commentsList.vue
14540
- var _hoisted_1$25 = ["aria-busy"];
14654
+ var _hoisted_1$24 = ["aria-busy"];
14541
14655
  var _hoisted_2$19 = { key: 0 };
14542
14656
  var _hoisted_3$15 = { key: 1 };
14543
14657
  var REPEATED_HEADER_FOOTER_STORY_TYPE = "headerFooterPart";
@@ -14698,7 +14812,7 @@ var _sfc_main$32 = {
14698
14812
  "total",
14699
14813
  "tab-index"
14700
14814
  ]);
14701
- }), 128))])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 8, _hoisted_1$25);
14815
+ }), 128))])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 8, _hoisted_1$24);
14702
14816
  };
14703
14817
  }
14704
14818
  };
@@ -15168,7 +15282,7 @@ var resolveRemovedReviewCardContinuityTarget = ({ previousIds, currentIds, remov
15168
15282
  };
15169
15283
  //#endregion
15170
15284
  //#region src/components/CommentsLayer/FloatingComments.vue
15171
- var _hoisted_1$24 = [
15285
+ var _hoisted_1$23 = [
15172
15286
  "data-comment-id",
15173
15287
  "data-comment-instance-id",
15174
15288
  "data-comment-thread-id",
@@ -16038,7 +16152,7 @@ var _sfc_main$31 = {
16038
16152
  "floating-page-index",
16039
16153
  "floating-position-entry",
16040
16154
  "is-floating-instance-active"
16041
- ])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 14, _hoisted_1$24);
16155
+ ])) : require__plugin_vue_export_helper.createCommentVNode("", true)], 14, _hoisted_1$23);
16042
16156
  }), 128))], 4)], 36);
16043
16157
  };
16044
16158
  }
@@ -16046,7 +16160,7 @@ var _sfc_main$31 = {
16046
16160
  var FloatingComments_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$31, [["__scopeId", "data-v-15b59a51"]]);
16047
16161
  //#endregion
16048
16162
  //#region src/components/CommentsLayer/PdfCommentsLayer.vue
16049
- var _hoisted_1$23 = {
16163
+ var _hoisted_1$22 = {
16050
16164
  class: "superdoc__pdf-comments-layer pdf-comments-layer",
16051
16165
  "aria-hidden": "false"
16052
16166
  };
@@ -16152,7 +16266,7 @@ var PdfCommentsLayer_default = /*#__PURE__*/ require__plugin_vue_export_helper._
16152
16266
  emit("anchor-activate", anchor.commentId);
16153
16267
  };
16154
16268
  return (_ctx, _cache) => {
16155
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$23, [(require__plugin_vue_export_helper.openBlock(true), require__plugin_vue_export_helper.createElementBlock(require__plugin_vue_export_helper.Fragment, null, require__plugin_vue_export_helper.renderList(pdfCommentAnchors.value, (anchor) => {
16269
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$22, [(require__plugin_vue_export_helper.openBlock(true), require__plugin_vue_export_helper.createElementBlock(require__plugin_vue_export_helper.Fragment, null, require__plugin_vue_export_helper.renderList(pdfCommentAnchors.value, (anchor) => {
16156
16270
  return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", {
16157
16271
  key: anchor.commentId,
16158
16272
  class: "sd-comment-anchor sd-highlight",
@@ -16321,7 +16435,7 @@ var useWhiteboard = ({ proxy, layers, documents, modules }) => {
16321
16435
  };
16322
16436
  //#endregion
16323
16437
  //#region src/components/Whiteboard/WhiteboardPage.vue
16324
- var _hoisted_1$22 = ["data-page-index"];
16438
+ var _hoisted_1$21 = ["data-page-index"];
16325
16439
  var _sfc_main$29 = {
16326
16440
  __name: "WhiteboardPage",
16327
16441
  props: {
@@ -16453,7 +16567,7 @@ var _sfc_main$29 = {
16453
16567
  height: (__props.pageSize?.height ?? __props.page.size?.height) + "px",
16454
16568
  transform: `translate(${__props.pageOffset?.left ?? 0}px, ${__props.pageOffset?.top ?? 0}px)`
16455
16569
  })
16456
- }, null, 44, _hoisted_1$22);
16570
+ }, null, 44, _hoisted_1$21);
16457
16571
  };
16458
16572
  }
16459
16573
  };
@@ -16532,7 +16646,7 @@ var _sfc_main$28 = {
16532
16646
  var WhiteboardLayer_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$28, [["__scopeId", "data-v-54546c3d"]]);
16533
16647
  //#endregion
16534
16648
  //#region src/components/HtmlViewer/HtmlViewer.vue
16535
- var _hoisted_1$21 = { class: "superdoc-html-viewer" };
16649
+ var _hoisted_1$20 = { class: "superdoc-html-viewer" };
16536
16650
  var _hoisted_2$17 = { class: "superdoc-html-viewer__document" };
16537
16651
  var _hoisted_3$14 = ["innerHTML"];
16538
16652
  var _sfc_main$27 = {
@@ -16582,7 +16696,7 @@ var _sfc_main$27 = {
16582
16696
  initViewer();
16583
16697
  });
16584
16698
  return (_ctx, _cache) => {
16585
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$21, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$17, [require__plugin_vue_export_helper.createElementVNode("div", {
16699
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$20, [require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$17, [require__plugin_vue_export_helper.createElementVNode("div", {
16586
16700
  class: "superdoc-html-viewer__content",
16587
16701
  innerHTML: documentContent.value,
16588
16702
  onMouseup: handleSelectionChange
@@ -18623,35 +18737,6 @@ function shouldHandleFindShortcut(event, { focusInside, owner }) {
18623
18737
  return (!active || active === document.body || active === document.documentElement) && ownsAmbientFindShortcut(owner);
18624
18738
  }
18625
18739
  //#endregion
18626
- //#region src/internal/toolbar/built-in/url-safety.js
18627
- /**
18628
- * Minimal href sanitizer for the built-in link popover.
18629
- *
18630
- * The v1 toolbar used the shared `@superdoc/url-validation` package, which is not
18631
- * a resolvable runtime dependency of the published `superdoc` ES build. This
18632
- * keeps the same fail-closed posture (only known-safe schemes pass) without
18633
- * pulling in that package: dangerous schemes (`javascript:`, `data:`,
18634
- * `vbscript:`) return `null`, mirroring the v1 contract that callers treat a
18635
- * `null` result as an invalid URL.
18636
- */
18637
- var SAFE_SCHEME = /^(https?|mailto|tel):/i;
18638
- var DANGEROUS_SCHEME = /^(javascript|data|vbscript):/i;
18639
- var HAS_SCHEME = /^[a-z][a-z0-9+.-]*:/i;
18640
- /**
18641
- * Validate and normalize an href. Returns `{ href }` for safe values, or `null`.
18642
- * @param {string} value
18643
- * @returns {{ href: string }|null}
18644
- */
18645
- function sanitizeHref(value) {
18646
- if (typeof value !== "string") return null;
18647
- const trimmed = value.trim();
18648
- if (!trimmed) return null;
18649
- if (trimmed.startsWith("#")) return { href: trimmed };
18650
- if (DANGEROUS_SCHEME.test(trimmed)) return null;
18651
- if (HAS_SCHEME.test(trimmed)) return SAFE_SCHEME.test(trimmed) ? { href: trimmed } : null;
18652
- return { href: trimmed };
18653
- }
18654
- //#endregion
18655
18740
  //#region ../../shared/common/icons/bold-solid.svg?raw
18656
18741
  var bold_solid_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M0 64C0 46.3 14.3 32 32 32l48 0 16 0 128 0c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128L96 480l-16 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-160L48 96 32 96C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64L112 96l0 128 112 0zM112 288l0 128 144 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-112 0z\"/></svg>";
18657
18742
  //#endregion
@@ -18874,7 +18959,7 @@ var toolbarIcons = {
18874
18959
  };
18875
18960
  //#endregion
18876
18961
  //#region src/internal/toolbar/built-in/LinkInput.vue
18877
- var _hoisted_1$20 = {
18962
+ var _hoisted_1$19 = {
18878
18963
  key: 0,
18879
18964
  class: "link-title"
18880
18965
  };
@@ -19133,7 +19218,7 @@ var _sfc_main$26 = {
19133
19218
  if (props.goToAnchor) props.goToAnchor(anchorUrl);
19134
19219
  };
19135
19220
  return (_ctx, _cache) => {
19136
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", { class: require__plugin_vue_export_helper.normalizeClass(["link-input-ctn", { "high-contrast": require__plugin_vue_export_helper.unref(isHighContrastMode) }]) }, [isAnchor.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$20, "Page anchor")) : isViewingMode.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_2$16, "Link details")) : isEditing.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_3$13, "Edit link")) : (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_4$8, "Add link")), __props.showInput && !isAnchor.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_5$6, [
19221
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", { class: require__plugin_vue_export_helper.normalizeClass(["link-input-ctn", { "high-contrast": require__plugin_vue_export_helper.unref(isHighContrastMode) }]) }, [isAnchor.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$19, "Page anchor")) : isViewingMode.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_2$16, "Link details")) : isEditing.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_3$13, "Edit link")) : (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_4$8, "Add link")), __props.showInput && !isAnchor.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_5$6, [
19137
19222
  require__plugin_vue_export_helper.createElementVNode("div", _hoisted_6$5, [_cache[5] || (_cache[5] = require__plugin_vue_export_helper.createElementVNode("div", { class: "input-icon text-input-icon" }, "T", -1)), require__plugin_vue_export_helper.withDirectives(require__plugin_vue_export_helper.createElementVNode("input", {
19138
19223
  type: "text",
19139
19224
  name: "text",
@@ -21510,7 +21595,7 @@ var FOCUSABLE_SELECTOR = [
21510
21595
  ].join(", ");
21511
21596
  //#endregion
21512
21597
  //#region src/components/surfaces/SurfaceDialog.vue
21513
- var _hoisted_1$19 = ["aria-labelledby", "aria-label"];
21598
+ var _hoisted_1$18 = ["aria-labelledby", "aria-label"];
21514
21599
  var _hoisted_2$15 = ["id"];
21515
21600
  var _hoisted_3$12 = { class: "sd-surface-dialog__content" };
21516
21601
  var _sfc_main$24 = {
@@ -21658,14 +21743,14 @@ var _sfc_main$24 = {
21658
21743
  "render",
21659
21744
  "resolve",
21660
21745
  "close"
21661
- ])) : __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)])], 12, _hoisted_1$19)], 32);
21746
+ ])) : __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)])], 12, _hoisted_1$18)], 32);
21662
21747
  };
21663
21748
  }
21664
21749
  };
21665
21750
  var SurfaceDialog_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$24, [["__scopeId", "data-v-582b6534"]]);
21666
21751
  //#endregion
21667
21752
  //#region src/components/surfaces/SurfaceFloating.vue
21668
- var _hoisted_1$18 = ["aria-labelledby", "aria-label"];
21753
+ var _hoisted_1$17 = ["aria-labelledby", "aria-label"];
21669
21754
  var _hoisted_2$14 = ["id"];
21670
21755
  var _hoisted_3$11 = { class: "sd-surface-floating__content" };
21671
21756
  var _sfc_main$23 = {
@@ -21813,7 +21898,7 @@ var _sfc_main$23 = {
21813
21898
  "render",
21814
21899
  "resolve",
21815
21900
  "close"
21816
- ])) : __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);
21901
+ ])) : __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$17);
21817
21902
  };
21818
21903
  }
21819
21904
  };
@@ -22045,7 +22130,7 @@ var _sfc_main$22 = {
22045
22130
  var SurfaceHost_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$22, [["__scopeId", "data-v-dad99b67"]]);
22046
22131
  //#endregion
22047
22132
  //#region src/SuperDoc.vue
22048
- var _hoisted_1$17 = ["innerHTML"];
22133
+ var _hoisted_1$16 = ["innerHTML"];
22049
22134
  var _hoisted_2$13 = { class: "superdoc__document document" };
22050
22135
  var _hoisted_3$10 = { class: "floating-comments" };
22051
22136
  var TRACKED_CHANGE_CARRIERS_RESTAMPED_EVENT = "superdoc:v2-tracked-change-carriers-restamped";
@@ -24493,7 +24578,7 @@ var SuperDoc_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_v
24493
24578
  }, [require__plugin_vue_export_helper.createElementVNode("div", {
24494
24579
  class: "superdoc__tools-icon",
24495
24580
  innerHTML: require__plugin_vue_export_helper.unref(superdocIcons).comment
24496
- }, null, 8, _hoisted_1$17)], 32)], 4)) : require__plugin_vue_export_helper.createCommentVNode("", true), require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$13, [
24581
+ }, null, 8, _hoisted_1$16)], 32)], 4)) : require__plugin_vue_export_helper.createCommentVNode("", true), require__plugin_vue_export_helper.createElementVNode("div", _hoisted_2$13, [
24497
24582
  isCommentsEnabled.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", {
24498
24583
  key: 0,
24499
24584
  class: "superdoc__selection-layer selection-layer",
@@ -39189,7 +39274,7 @@ var throttle = (func, wait, options) => {
39189
39274
  };
39190
39275
  //#endregion
39191
39276
  //#region src/internal/toolbar/built-in/ToolbarButtonIcon.vue
39192
- var _hoisted_1$16 = { class: "sd-toolbar-icon" };
39277
+ var _hoisted_1$15 = { class: "sd-toolbar-icon" };
39193
39278
  var _hoisted_2$12 = ["innerHTML"];
39194
39279
  var _sfc_main$20 = {
39195
39280
  __name: "ToolbarButtonIcon",
@@ -39217,7 +39302,7 @@ var _sfc_main$20 = {
39217
39302
  return ["color", "highlight"].includes(props.name);
39218
39303
  });
39219
39304
  return (_ctx, _cache) => {
39220
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$16, [require__plugin_vue_export_helper.createElementVNode("div", {
39305
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$15, [require__plugin_vue_export_helper.createElementVNode("div", {
39221
39306
  class: require__plugin_vue_export_helper.normalizeClass(["sd-toolbar-icon__icon", [`sd-toolbar-icon__icon--${props.name}`]]),
39222
39307
  innerHTML: __props.icon
39223
39308
  }, null, 10, _hoisted_2$12), hasColorBar.value ? (require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", {
@@ -39231,7 +39316,7 @@ var _sfc_main$20 = {
39231
39316
  var ToolbarButtonIcon_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$20, [["__scopeId", "data-v-65ecd5b1"]]);
39232
39317
  //#endregion
39233
39318
  //#region src/internal/toolbar/built-in/ToolbarButton.vue
39234
- var _hoisted_1$15 = [
39319
+ var _hoisted_1$14 = [
39235
39320
  "role",
39236
39321
  "aria-label",
39237
39322
  "aria-disabled"
@@ -39525,14 +39610,14 @@ var _sfc_main$19 = {
39525
39610
  }, null, 12, _hoisted_10$1)) : require__plugin_vue_export_helper.createCommentVNode("", true)
39526
39611
  ], 64)),
39527
39612
  require__plugin_vue_export_helper.createElementVNode("div", _hoisted_11$1, require__plugin_vue_export_helper.toDisplayString(`${require__plugin_vue_export_helper.unref(attributes).ariaLabel} ${require__plugin_vue_export_helper.unref(active) ? "selected" : "unset"}`), 1)
39528
- ], 10, _hoisted_2$11)], 46, _hoisted_1$15);
39613
+ ], 10, _hoisted_2$11)], 46, _hoisted_1$14);
39529
39614
  };
39530
39615
  }
39531
39616
  };
39532
39617
  var ToolbarButton_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$19, [["__scopeId", "data-v-96796456"]]);
39533
39618
  //#endregion
39534
39619
  //#region src/internal/toolbar/built-in/ToolbarSeparator.vue
39535
- var _hoisted_1$14 = {
39620
+ var _hoisted_1$13 = {
39536
39621
  class: "toolbar-separator",
39537
39622
  role: "separator",
39538
39623
  "aria-label": "Toolbar separator"
@@ -39551,7 +39636,7 @@ var _sfc_main$18 = {
39551
39636
  return "var(--sd-ui-border, #dbdbdb)";
39552
39637
  };
39553
39638
  return (_ctx, _cache) => {
39554
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$14, [require__plugin_vue_export_helper.createElementVNode("div", {
39639
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$13, [require__plugin_vue_export_helper.createElementVNode("div", {
39555
39640
  class: "separator-inner",
39556
39641
  style: require__plugin_vue_export_helper.normalizeStyle({ backgroundColor: getSeparatorColor() })
39557
39642
  }, null, 4)]);
@@ -39561,7 +39646,7 @@ var _sfc_main$18 = {
39561
39646
  var ToolbarSeparator_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$18, [["__scopeId", "data-v-cb82253a"]]);
39562
39647
  //#endregion
39563
39648
  //#region src/internal/toolbar/built-in/ToolbarDropdown.vue
39564
- var _hoisted_1$13 = { class: "toolbar-dropdown" };
39649
+ var _hoisted_1$12 = { class: "toolbar-dropdown" };
39565
39650
  var _hoisted_2$10 = ["onClick"];
39566
39651
  var _hoisted_3$8 = {
39567
39652
  key: 0,
@@ -39916,7 +40001,7 @@ var _sfc_main$17 = {
39916
40001
  window.removeEventListener("scroll", updateMenuPosition, true);
39917
40002
  });
39918
40003
  return (_ctx, _cache) => {
39919
- return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$13, [require__plugin_vue_export_helper.createElementVNode("div", {
40004
+ return require__plugin_vue_export_helper.openBlock(), require__plugin_vue_export_helper.createElementBlock("div", _hoisted_1$12, [require__plugin_vue_export_helper.createElementVNode("div", {
39920
40005
  ref_key: "triggerRef",
39921
40006
  ref: triggerRef,
39922
40007
  class: "toolbar-dropdown-trigger",
@@ -40183,7 +40268,7 @@ var normalizeCustomFontSize = (value) => {
40183
40268
  };
40184
40269
  //#endregion
40185
40270
  //#region src/internal/toolbar/built-in/ToolbarComboBox.vue
40186
- var _hoisted_1$12 = ["data-item"];
40271
+ var _hoisted_1$11 = ["data-item"];
40187
40272
  var _hoisted_2$9 = [
40188
40273
  "id",
40189
40274
  "value",
@@ -40694,7 +40779,7 @@ var _sfc_main$15 = {
40694
40779
  }), [require__plugin_vue_export_helper.createElementVNode("span", _hoisted_7$1, require__plugin_vue_export_helper.toDisplayString(option.label), 1)], 16, _hoisted_6$3);
40695
40780
  }), 128))], 14, _hoisted_5$4)) : require__plugin_vue_export_helper.createCommentVNode("", true)])),
40696
40781
  require__plugin_vue_export_helper.createElementVNode("span", _hoisted_8$1, require__plugin_vue_export_helper.toDisplayString(appliedLabel.value), 1)
40697
- ], 14, _hoisted_1$12);
40782
+ ], 14, _hoisted_1$11);
40698
40783
  };
40699
40784
  }
40700
40785
  };
@@ -40783,7 +40868,6 @@ var _sfc_main$13 = {
40783
40868
  };
40784
40869
  //#endregion
40785
40870
  //#region src/internal/toolbar/built-in/SdTooltip.vue
40786
- var _hoisted_1$11 = ["data-placement"];
40787
40871
  var AUTO_HIDE_DELAY = 2500;
40788
40872
  var _sfc_main$12 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
40789
40873
  __name: "SdTooltip",
@@ -40819,7 +40903,6 @@ var _sfc_main$12 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
40819
40903
  top: "0px",
40820
40904
  left: "0px"
40821
40905
  });
40822
- const placement = require__plugin_vue_export_helper.ref("top");
40823
40906
  let closeTimeout = null;
40824
40907
  let openTimeout = null;
40825
40908
  let autoHideTimeout = null;
@@ -40857,48 +40940,17 @@ var _sfc_main$12 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
40857
40940
  close();
40858
40941
  }, AUTO_HIDE_DELAY);
40859
40942
  };
40860
- const getElementSize = (element, dimension) => {
40861
- const styles = window.getComputedStyle(element);
40862
- const size = parseFloat(styles[dimension]);
40863
- if (!Number.isFinite(size)) return dimension === "width" ? element.offsetWidth : element.offsetHeight;
40864
- if (styles.boxSizing === "border-box") return size;
40865
- return (dimension === "width" ? [
40866
- "paddingLeft",
40867
- "paddingRight",
40868
- "borderLeftWidth",
40869
- "borderRightWidth"
40870
- ] : [
40871
- "paddingTop",
40872
- "paddingBottom",
40873
- "borderTopWidth",
40874
- "borderBottomWidth"
40875
- ]).reduce((total, property) => total + (parseFloat(styles[property]) || 0), size);
40876
- };
40877
40943
  const updatePosition = () => {
40878
40944
  if (!triggerRef.value || !contentRef.value) return;
40879
40945
  const triggerRect = triggerRef.value.getBoundingClientRect();
40880
- const contentWidth = getElementSize(contentRef.value, "width");
40881
- const contentHeight = getElementSize(contentRef.value, "height");
40946
+ const contentWidth = contentRef.value.offsetWidth;
40947
+ const contentHeight = contentRef.value.offsetHeight;
40882
40948
  const viewportWidth = window.innerWidth || document.documentElement.clientWidth || 0;
40883
- const viewportHeight = document.documentElement.clientHeight || window.innerHeight || 0;
40884
40949
  const gutter = 8;
40885
- const offset = 10;
40886
40950
  let left = triggerRect.left + triggerRect.width / 2 - contentWidth / 2;
40887
40951
  left = Math.max(gutter, Math.min(left, viewportWidth - contentWidth - gutter));
40888
- const topAbove = triggerRect.top - contentHeight - offset;
40889
- const topBelow = triggerRect.bottom + offset;
40890
- const fitsAbove = topAbove >= gutter;
40891
- const fitsBelow = topBelow + contentHeight <= viewportHeight - gutter;
40892
- const availableAbove = triggerRect.top - offset;
40893
- const availableBelow = viewportHeight - triggerRect.bottom - offset;
40894
- if (fitsAbove) placement.value = "top";
40895
- else if (fitsBelow) placement.value = "bottom";
40896
- else placement.value = availableAbove >= availableBelow ? "top" : "bottom";
40897
- const desiredTop = placement.value === "top" ? topAbove : topBelow;
40898
- const minTop = Math.min(gutter, Math.max(0, viewportHeight - contentHeight));
40899
- const maxTop = Math.max(minTop, viewportHeight - contentHeight - gutter);
40900
40952
  position.value = {
40901
- top: `${Math.max(minTop, Math.min(desiredTop, maxTop))}px`,
40953
+ top: `${triggerRect.top - contentHeight - 10}px`,
40902
40954
  left: `${left}px`
40903
40955
  };
40904
40956
  };
@@ -41009,19 +41061,18 @@ var _sfc_main$12 = /*@__PURE__*/ Object.assign({ inheritAttrs: false }, {
41009
41061
  ref: contentRef,
41010
41062
  class: require__plugin_vue_export_helper.normalizeClass(mergedContentClass.value),
41011
41063
  style: require__plugin_vue_export_helper.normalizeStyle(contentStyle.value),
41012
- "data-placement": placement.value,
41013
41064
  onMouseenter: handleContentMouseEnter,
41014
41065
  onMouseleave: handleContentMouseLeave
41015
41066
  }, [_cache[0] || (_cache[0] = require__plugin_vue_export_helper.createElementVNode("span", {
41016
41067
  class: "sd-tooltip-arrow",
41017
41068
  "aria-hidden": "true"
41018
- }, null, -1)), require__plugin_vue_export_helper.renderSlot(_ctx.$slots, "default", {}, void 0, true)], 46, _hoisted_1$11)) : require__plugin_vue_export_helper.createCommentVNode("", true)]),
41069
+ }, null, -1)), require__plugin_vue_export_helper.renderSlot(_ctx.$slots, "default", {}, void 0, true)], 38)) : require__plugin_vue_export_helper.createCommentVNode("", true)]),
41019
41070
  _: 3
41020
41071
  }, 8, ["css"])]))], 64);
41021
41072
  };
41022
41073
  }
41023
41074
  });
41024
- var SdTooltip_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$12, [["__scopeId", "data-v-44bd03f9"]]);
41075
+ var SdTooltip_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$12, [["__scopeId", "data-v-1449088a"]]);
41025
41076
  //#endregion
41026
41077
  //#region src/internal/toolbar/built-in/ButtonGroup.vue
41027
41078
  var _hoisted_1$10 = [
@@ -46472,7 +46523,7 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
46472
46523
  }
46473
46524
  this.userColorMap = /* @__PURE__ */ new Map();
46474
46525
  this.colorIndex = 0;
46475
- this.version = "2.23.1-next.6";
46526
+ this.version = "2.23.1-next.8";
46476
46527
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
46477
46528
  this.superdocId = config.superdocId || require_uuid.v4();
46478
46529
  this.colors = this.config.colors ?? [];