superdoc 2.28.0-next.13 → 2.28.0-next.15

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.
@@ -1,6 +1,6 @@
1
1
  import { i as __toESM$2 } from "./chunks/rolldown-runtime-0pSA04fp.es.js";
2
2
  import { t as blank_default } from "./chunks/blank-docx-DzQccOlW.es.js";
3
- import { _ as createInteractionHistory, a as registerFirstPartyCommandMutation, b as recordInteraction, c as applyV2CommentInvalidationFromMutation, d as createImageFilePicker, f as resolveImageSrc, g as closeInteractionHistory, h as DOM_CLASS_NAMES, i as readFirstPartyPageNumbers, l as getV2TrackedChangeMutationImpact, m as isSyntheticTrackedChangeCommentLaneItem, n as executeFirstPartyCommandAsync, o as isRecord, r as executeFirstPartyShortcutAsync, t as createSuperDocUI, u as isPlainObject$1, v as getWorkflowRecording, y as isWorkflowRecordingEnabled } from "./chunks/create-super-doc-ui-B6Va_J_0.es.js";
3
+ import { _ as createInteractionHistory, a as registerFirstPartyCommandMutation, b as recordInteraction, c as applyV2CommentInvalidationFromMutation, d as createImageFilePicker, f as resolveImageSrc, g as closeInteractionHistory, h as DOM_CLASS_NAMES, i as readFirstPartyPageNumbers, l as getV2TrackedChangeMutationImpact, m as isSyntheticTrackedChangeCommentLaneItem, n as executeFirstPartyCommandAsync, o as isRecord, r as executeFirstPartyShortcutAsync, t as createSuperDocUI, u as isPlainObject$1, v as getWorkflowRecording, y as isWorkflowRecordingEnabled } from "./chunks/create-super-doc-ui-BRahDsch.es.js";
4
4
  import { t as import_eventemitter3 } from "./chunks/eventemitter3-DEIiXiH2.es.js";
5
5
  import { t as v4 } from "./chunks/uuid-H0Xcmmhy.es.js";
6
6
  import { $ as vModelText, A as onActivated, B as renderSlot, C as isRef$1, D as normalizeClass, E as nextTick, F as openBlock, G as toRaw$2, H as resolveDynamicComponent, I as provide$1, J as unref, K as toRef, L as reactive, M as onDeactivated, N as onMounted, O as normalizeProps, P as onScopeDispose$1, Q as vModelSelect, R as ref, S as isReactive$1, T as mergeProps, U as shallowRef$1, V as resolveDirective, W as toDisplayString, X as useSlots, Y as useAttrs, Z as vModelCheckbox, _ as getCurrentInstance, a as computed$1, b as hasInjectionContext, c as createCommentVNode, d as createStaticVNode, et as watch$1, f as createTextVNode, g as effectScope, h as defineComponent, i as Transition, it as withModifiers, j as onBeforeUnmount, k as normalizeStyle, l as createElementBlock, m as defineAsyncComponent, n as Fragment, nt as withDirectives, o as createApp, p as createVNode, q as toRefs, r as Teleport, rt as withKeys, s as createBlock, t as _plugin_vue_export_helper_default, tt as withCtx, u as createElementVNode, v as getCurrentScope, w as markRaw, x as inject$1, y as h, z as renderList } from "./chunks/_plugin-vue_export-helper-7ZiLY07t.es.js";
@@ -258,7 +258,7 @@ var v_click_outside_default = {
258
258
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
259
259
  function getSuperdocVersion() {
260
260
  try {
261
- return "2.28.0-next.13";
261
+ return "2.28.0-next.15";
262
262
  } catch {
263
263
  return "unknown";
264
264
  }
@@ -7401,11 +7401,6 @@ var buildTrackedChangeDecisionLinkIndex = (allComments, previous = /* @__PURE__
7401
7401
  };
7402
7402
  //#endregion
7403
7403
  //#region src/stores/comments-store.js
7404
- var trackChangesHelpers = {
7405
- getTrackChanges: () => [],
7406
- enumerateStructuralRowChanges: () => []
7407
- };
7408
- var getTrackedChangeIndex = () => null;
7409
7404
  var makeTrackedChangeAnchorKey = ({ storyKey, rawId }) => `tc::${storyKey}::${rawId}`;
7410
7405
  var COMMENT_DRAFT_BR_TAG = /<br(?:\s[^>]*)?\s*\/?>/gi;
7411
7406
  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;
@@ -7965,72 +7960,6 @@ var useCommentsStore = defineStore("comments", () => {
7965
7960
  return source === DOCUMENT_EDITOR_SELECTION_SOURCE;
7966
7961
  };
7967
7962
  const isTrackedChangeThread = (comment) => Boolean(comment?.trackedChange) || Boolean(trackedChangeThreadParentIdForComment$1(comment));
7968
- const syncTrackedChangePositionsWithDocument = ({ documentId, editor } = {}) => {
7969
- if (!editor?.state) return 0;
7970
- if (!commentsList.value?.length) return 0;
7971
- const currentPositions = editorCommentPositions.value || {};
7972
- if (!Object.keys(currentPositions).length) return 0;
7973
- const resolveExistingPositionKey = (aliasIds) => aliasIds.find((key) => currentPositions[key] !== void 0) ?? null;
7974
- const candidateRootPositionKeys = /* @__PURE__ */ new Set();
7975
- const rootAliasesByPositionKey = /* @__PURE__ */ new Map();
7976
- commentsList.value.forEach((comment) => {
7977
- if (!comment?.trackedChange) return;
7978
- if (documentId) {
7979
- const resolvedDocumentId = comment?.fileId ?? null;
7980
- if (resolvedDocumentId && resolvedDocumentId !== documentId) return;
7981
- }
7982
- const aliasIds = getCommentAliasIds(comment);
7983
- const normalizedPositionKey = resolveExistingPositionKey(aliasIds);
7984
- if (!normalizedPositionKey) return;
7985
- candidateRootPositionKeys.add(normalizedPositionKey);
7986
- rootAliasesByPositionKey.set(normalizedPositionKey, new Set(aliasIds));
7987
- });
7988
- if (!candidateRootPositionKeys.size) return 0;
7989
- const trackedIds = new Set(trackChangesHelpers.getTrackChanges(editor.state).map(({ mark }) => mark?.attrs?.id).filter((id) => id !== void 0 && id !== null).map((id) => String(id)));
7990
- const trackedChangeIndex = typeof getTrackedChangeIndex === "function" ? getTrackedChangeIndex(editor) : null;
7991
- let liveAnchorKeySource = [];
7992
- try {
7993
- liveAnchorKeySource = trackedChangeIndex?.getAll?.() ?? [];
7994
- } catch {}
7995
- const liveAnchorKeys = new Set(liveAnchorKeySource.map((snapshot) => snapshot?.anchorKey).filter((anchorKey) => typeof anchorKey === "string" && anchorKey.length > 0));
7996
- const staleRootPositionKeys = new Set(Array.from(candidateRootPositionKeys).filter((positionKey) => {
7997
- const aliases = rootAliasesByPositionKey.get(positionKey) ?? /* @__PURE__ */ new Set([positionKey]);
7998
- if (Array.from(aliases).some((alias) => liveAnchorKeys.has(alias))) return false;
7999
- return !Array.from(aliases).some((alias) => trackedIds.has(alias));
8000
- }));
8001
- if (!staleRootPositionKeys.size) return 0;
8002
- const staleRootAliasIds = /* @__PURE__ */ new Set();
8003
- staleRootPositionKeys.forEach((positionKey) => {
8004
- (rootAliasesByPositionKey.get(positionKey) ?? /* @__PURE__ */ new Set([positionKey])).forEach((alias) => staleRootAliasIds.add(alias));
8005
- });
8006
- const stalePositionKeys = new Set(staleRootPositionKeys);
8007
- commentsList.value.forEach((comment) => {
8008
- const aliasIds = getCommentAliasIds(comment);
8009
- const normalizedPositionKey = resolveExistingPositionKey(aliasIds);
8010
- if (!normalizedPositionKey) return;
8011
- if ([
8012
- trackedChangeThreadParentIdForComment$1(comment),
8013
- comment?.threadingParentCommentId,
8014
- comment?.parentCommentId
8015
- ].map((id) => normalizeCommentId(id)).filter(Boolean).some((id) => staleRootAliasIds.has(id))) stalePositionKeys.add(normalizedPositionKey);
8016
- });
8017
- const nextPositions = { ...currentPositions };
8018
- stalePositionKeys.forEach((key) => {
8019
- delete nextPositions[key];
8020
- });
8021
- editorCommentPositions.value = nextPositions;
8022
- if (activeComment.value !== void 0 && activeComment.value !== null) {
8023
- const activeCommentModel = getComment(activeComment.value);
8024
- const activeAliases = new Set(getCommentAliasIds(activeCommentModel ?? activeComment.value));
8025
- const activeParentKeys = [
8026
- trackedChangeThreadParentIdForComment$1(activeCommentModel),
8027
- activeCommentModel?.threadingParentCommentId,
8028
- activeCommentModel?.parentCommentId
8029
- ].map((id) => normalizeCommentId(id)).filter(Boolean);
8030
- if (Array.from(activeAliases).some((id) => staleRootAliasIds.has(id)) || activeParentKeys.some((id) => staleRootAliasIds.has(id))) clearActiveCommentSelection();
8031
- }
8032
- return stalePositionKeys.size;
8033
- };
8034
7963
  const collectStandardCommentDocumentState = (editor) => {
8035
7964
  const doc = editor?.state?.doc;
8036
7965
  if (!doc || typeof doc.descendants !== "function") return null;
@@ -8212,7 +8141,7 @@ var useCommentsStore = defineStore("comments", () => {
8212
8141
  * @param {Object} param0.params The tracked change params
8213
8142
  * @returns {void}
8214
8143
  */
8215
- const handleTrackedChangeUpdate = ({ superdoc, params, broadcastChanges = true, documentState = void 0, trackedChangeIdentityIndex = null }) => {
8144
+ const handleTrackedChangeUpdate = ({ superdoc, params, broadcastChanges = true, trackedChangeIdentityIndex = null }) => {
8216
8145
  const span = startInteractionSpan("store.trackedChanges.handleUpdate", "store-reconciliation", {
8217
8146
  event: params?.event ?? null,
8218
8147
  changeId: params?.changeId ?? null,
@@ -8229,26 +8158,6 @@ var useCommentsStore = defineStore("comments", () => {
8229
8158
  const normalizedCustomAttributes = hasCustomAttributes ? normalizeTrackedChangeCustomAttributes(customAttributes) : void 0;
8230
8159
  const normalizedImportedId = hasImportedId ? importedId != null ? String(importedId) : null : void 0;
8231
8160
  const normalizedDocumentId = documentId != null ? String(documentId) : null;
8232
- if (!(trackedChangeDisplayType === "tableInsert" || trackedChangeDisplayType === "tableDelete") && normalizedChangeId) {
8233
- const effectiveDocumentId = normalizedDocumentId ?? (superdoc?.activeEditor?.options?.documentId != null ? String(superdoc.activeEditor.options.documentId) : null);
8234
- const docEditor = effectiveDocumentId ? superdocStore.getDocument(effectiveDocumentId)?.getEditor?.() : null;
8235
- const docState = documentState !== void 0 ? documentState : docEditor?.state ?? superdoc?.activeEditor?.state ?? null;
8236
- if (docState) {
8237
- const { ranges: tableRanges, ids: structuralIds } = computeTrackedTableSummaryForState(docState);
8238
- const ranges = trackChangesHelpers.getTrackChanges(docState, normalizedChangeId);
8239
- const inRange = tableRanges.length > 0 && ranges.length > 0 && isInlineRangeInsideTrackedTable(ranges, tableRanges);
8240
- const isStructuralRowIdEcho = ranges.length === 0 && structuralIds.has(normalizedChangeId);
8241
- if (inRange || isStructuralRowIdEcho) {
8242
- pruneSuppressedInlineTableComments({
8243
- suppressedIds: /* @__PURE__ */ new Set([normalizedChangeId]),
8244
- activeDocumentId: effectiveDocumentId,
8245
- superdoc,
8246
- broadcastChanges
8247
- });
8248
- return;
8249
- }
8250
- }
8251
- }
8252
8161
  const hasStoryMetadata = trackedChangeStory !== void 0 || trackedChangeStoryKind !== void 0 || trackedChangeStoryLabel !== void 0 || trackedChangeAnchorKey !== void 0;
8253
8162
  const normalizedTrackedChangeStory = hasStoryMetadata ? trackedChangeStory ?? null : BODY_TRACKED_CHANGE_STORY;
8254
8163
  const normalizedTrackedChangeStoryKind = hasStoryMetadata ? trackedChangeStoryKind ?? null : "body";
@@ -10084,53 +9993,6 @@ var useCommentsStore = defineStore("comments", () => {
10084
9993
  const activeCommentId = activeComment.value != null ? String(activeComment.value) : null;
10085
9994
  if (activeCommentId && removedAliasIds.has(activeCommentId)) clearActiveCommentSelection();
10086
9995
  }
10087
- /**
10088
- * Remove inline tracked-change comments whose change id is subsumed by a
10089
- * tracked whole-table change. Mirrors the deletion-event emission of
10090
- * `pruneStaleTrackedChangeComments` but is keyed on an explicit suppressed-id
10091
- * set rather than mark liveness (the mark is still live; only the review item
10092
- * is unwanted). Also clears the active-comment selection if it pointed at a
10093
- * now-suppressed change, so no stale active-on-click dialog can reference it.
10094
- *
10095
- * @param {{ suppressedIds: Set<string>, activeDocumentId: string, superdoc: any, broadcastChanges?: boolean }} input
10096
- */
10097
- const pruneSuppressedInlineTableComments = ({ suppressedIds, activeDocumentId, superdoc = null, broadcastChanges = true }) => {
10098
- if (!(suppressedIds instanceof Set) || !suppressedIds.size || !activeDocumentId) return;
10099
- const removedComments = [];
10100
- commentsList.value = commentsList.value.filter((comment) => {
10101
- if (!comment?.trackedChange) return true;
10102
- if (!isBodyTrackedChangeComment(comment)) return true;
10103
- if (isStructuralTableBubble(comment)) return true;
10104
- if (!belongsToTrackedChangeSyncDocument(comment, activeDocumentId)) return true;
10105
- const commentId = comment.commentId != null ? String(comment.commentId) : null;
10106
- const importedId = comment.importedId != null ? String(comment.importedId) : null;
10107
- if (!(commentId && suppressedIds.has(commentId) || importedId && suppressedIds.has(importedId))) return true;
10108
- removedComments.push(comment);
10109
- return false;
10110
- });
10111
- if (!removedComments.length) return;
10112
- const removedIds = /* @__PURE__ */ new Set();
10113
- removedComments.forEach((comment) => {
10114
- if (comment.commentId != null) removedIds.add(String(comment.commentId));
10115
- if (comment.importedId != null) removedIds.add(String(comment.importedId));
10116
- const payload = getCommentEventPayload(comment);
10117
- const event = {
10118
- type: COMMENT_EVENTS.DELETED,
10119
- comment: payload,
10120
- changes: [{
10121
- key: "deleted",
10122
- commentId: payload.commentId,
10123
- fileId: payload.fileId
10124
- }]
10125
- };
10126
- if (broadcastChanges) {
10127
- syncCommentsToClients(superdoc, event);
10128
- superdoc?.emit?.("comments-update", event);
10129
- }
10130
- });
10131
- const activeCommentId = activeComment.value != null ? String(activeComment.value) : null;
10132
- if (activeCommentId && removedIds.has(activeCommentId)) clearActiveCommentSelection();
10133
- };
10134
9996
  const getCommentDocumentId = (comment) => {
10135
9997
  if (!comment) return null;
10136
9998
  if (comment.fileId != null) return String(comment.fileId);
@@ -11048,150 +10910,12 @@ var useCommentsStore = defineStore("comments", () => {
11048
10910
  const clearEditorCommentPositions = () => {
11049
10911
  editorCommentPositions.value = {};
11050
10912
  };
11051
- /**
11052
- * Identify the single structural (whole-table) bubble for a tracked table so
11053
- * it is NEVER suppressed by the table-subsume filter below. The structural
11054
- * bubble is the parent "Added table" / "Deleted table" change; its public
11055
- * id is `word:structural:<id>` (or a bare structural fallback) and its display
11056
- * type is `tableInsert` / `tableDelete`.
11057
- *
11058
- * @param {Object} comment
11059
- * @returns {boolean}
11060
- */
11061
- const isStructuralTableBubble = (comment) => {
11062
- if (!comment?.trackedChange) return false;
11063
- const displayType = comment?.trackedChangeDisplayType;
11064
- if (displayType === "tableInsert" || displayType === "tableDelete") return true;
11065
- return [
11066
- comment?.commentId,
11067
- comment?.importedId,
11068
- comment?.trackedChangeAnchorKey
11069
- ].map((id) => id != null ? String(id) : "").filter(Boolean).some((id) => id.includes("word:structural:"));
11070
- };
11071
- /**
11072
- * Compute the decidable whole-table tracked-change ranges for a comment's
11073
- * document, memoized per editor state so the filter does not re-enumerate the
11074
- * document once per comment. Returns `[]` when the document has no tracked
11075
- * whole-table change (the common case), so non-tracked tables and inline-only
11076
- * tracked changes are never affected.
11077
- *
11078
- * @param {string | null | undefined} fileId
11079
- * @returns {Array<{ from: number, to: number }>}
11080
- */
11081
- const trackedTableSummaryCache = /* @__PURE__ */ new WeakMap();
11082
- /**
11083
- * Single source of truth for the decidable whole-table tracked changes in an
11084
- * editor state, enumerated and memoized ONCE per state. Returns:
11085
- * - `ranges`: each tracked whole-table's `{ from, to }` document span. Used to
11086
- * test whether an inline tracked change falls inside a tracked table.
11087
- * - `ids`: every change id associated with those tables (the change's public
11088
- * id / revisionId / revisionGroupId / sourceId plus each row's trackChange
11089
- * id / sourceId). Text typed inside a tracked-inserted row inherits that
11090
- * row's revision id, so such an inline change reports a changeId that is one
11091
- * of these — it must be subsumed by the structural bubble, not get its own
11092
- * review item.
11093
- *
11094
- * @param {object | null | undefined} state
11095
- * @returns {{ ranges: Array<{ from: number, to: number }>, ids: Set<string> }}
11096
- */
11097
- const computeTrackedTableSummaryForState = (state) => {
11098
- if (!state) return {
11099
- ranges: [],
11100
- ids: /* @__PURE__ */ new Set()
11101
- };
11102
- const cached = trackedTableSummaryCache.get(state);
11103
- if (cached) return cached;
11104
- const ranges = [];
11105
- const ids = /* @__PURE__ */ new Set();
11106
- const add = (value) => {
11107
- if (value != null && value !== "") ids.add(String(value));
11108
- };
11109
- const enumerate = trackChangesHelpers?.enumerateStructuralRowChanges;
11110
- if (typeof enumerate === "function") {
11111
- let structuralChanges = [];
11112
- try {
11113
- structuralChanges = enumerate(state) ?? [];
11114
- } catch {
11115
- structuralChanges = [];
11116
- }
11117
- for (const change of structuralChanges) {
11118
- if (!change?.decidable || !change?.wholeTable) continue;
11119
- const from = Number(change.tableFrom);
11120
- const to = Number(change.tableTo);
11121
- if (Number.isFinite(from) && Number.isFinite(to)) ranges.push({
11122
- from,
11123
- to
11124
- });
11125
- add(change.id);
11126
- add(change.revisionId);
11127
- add(change.revisionGroupId);
11128
- add(change.sourceId);
11129
- for (const row of change.rows || []) {
11130
- const tc = row?.node?.attrs?.trackChange;
11131
- add(tc?.id);
11132
- add(tc?.sourceId);
11133
- }
11134
- }
11135
- }
11136
- const summary = {
11137
- ranges,
11138
- ids
11139
- };
11140
- trackedTableSummaryCache.set(state, summary);
11141
- return summary;
11142
- };
11143
- const getTrackedTableRangesForDocument = (fileId) => {
11144
- const editor = superdocStore.getDocument(fileId)?.getEditor?.();
11145
- return computeTrackedTableSummaryForState(editor?.state).ranges;
11146
- };
11147
- /**
11148
- * True when every `{ from, to }` range of an inline tracked change is wholly
11149
- * contained within some decidable whole-table tracked-change range. Such an
11150
- * inline change is subsumed by the structural "Inserted/Deleted table" review
11151
- * item and must NOT become an independent review item (no comment object →
11152
- * no floating bubble and no active-on-click dialog). The underlying
11153
- * trackInsert/trackDelete mark (the green highlight) is untouched — only the
11154
- * review-item comment is suppressed.
11155
- *
11156
- * @param {Array<{ from?: number, to?: number }>} changeRanges
11157
- * @param {Array<{ from: number, to: number }>} tableRanges
11158
- * @returns {boolean}
11159
- */
11160
- const isInlineRangeInsideTrackedTable = (changeRanges, tableRanges) => {
11161
- if (!tableRanges?.length || !changeRanges?.length) return false;
11162
- return changeRanges.every((seg) => {
11163
- const start = Number(seg?.from);
11164
- const end = Number(seg?.to);
11165
- if (!Number.isFinite(start) || !Number.isFinite(end)) return false;
11166
- return tableRanges.some((table) => start >= table.from && end <= table.to);
11167
- });
11168
- };
11169
- /**
11170
- * Suppress an inline tracked-change bubble whose document range falls within a
11171
- * tracked whole-table change's range, so only the structural "Added table"
11172
- * / "Deleted table" bubble shows for that table (matching Word / Google Docs).
11173
- * The structural bubble itself, real user comments, and inline tracked changes
11174
- * inside a NON-tracked table are never suppressed.
11175
- *
11176
- * @param {Object} comment
11177
- * @returns {boolean} True when the bubble must NOT render.
11178
- */
11179
- const isInlineTrackedChangeInsideTrackedTable = (comment) => {
11180
- if (!comment?.trackedChange) return false;
11181
- if (isStructuralTableBubble(comment)) return false;
11182
- const ranges = getTrackedTableRangesForDocument(comment?.fileId);
11183
- if (!ranges.length) return false;
11184
- const entry = resolveCommentPositionEntry(comment).entry;
11185
- const range = getCommentPositionRange(entry);
11186
- if (!range) return false;
11187
- return ranges.some((table) => range.start >= table.from && range.end <= table.to);
11188
- };
11189
10913
  const getFloatingComments = computed$1(() => {
11190
10914
  return getGroupedComments.value?.parentComments.filter((c) => !c.resolvedTime).filter((c) => {
11191
10915
  if (!isEditorBackedComment(c)) return true;
11192
10916
  if (isTrackedChangeThread(c)) return true;
11193
10917
  return Boolean(resolveCommentPositionEntry(c).entry);
11194
- }).filter((c) => !isInlineTrackedChangeInsideTrackedTable(c));
10918
+ });
11195
10919
  });
11196
10920
  const getFloatingCommentInstances = computed$1(() => {
11197
10921
  return getFloatingComments.value.flatMap((comment) => {
@@ -11311,7 +11035,6 @@ var useCommentsStore = defineStore("comments", () => {
11311
11035
  clearEditorCommentPositions,
11312
11036
  handleTrackedChangeUpdate,
11313
11037
  syncResolvedCommentsWithDocument,
11314
- syncTrackedChangePositionsWithDocument,
11315
11038
  setActiveFloatingCommentInstance,
11316
11039
  requestInstantSidebarAlignment,
11317
11040
  peekInstantSidebarAlignment,
@@ -21294,7 +21017,7 @@ var SuperDoc_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21294
21017
  }
21295
21018
  });
21296
21019
  const { getConfig, documentsWithConverations, commentsList, pendingComment, activeComment, skipSelectionUpdate, commentsByDocument, isCommentsListVisible, isFloatingCommentsReady, generalCommentIds, hasSyncedCollaborationComments, editorCommentPositions, hasInitializedLocations, isCommentHighlighted, hasOpenTrackedChanges } = storeToRefs(commentsStore);
21297
- const { showAddComment, handleEditorLocationsUpdate, handleTrackedChangeUpdate, syncTrackedChangePositionsWithDocument, addComment, addHydratedComment, getComment, resolveCommentPositionEntry, belongsToDocument, COMMENT_EVENTS, requestInstantSidebarAlignment, peekInstantSidebarAlignment, clearInstantSidebarAlignment } = commentsStore;
21020
+ const { showAddComment, handleEditorLocationsUpdate, handleTrackedChangeUpdate, addComment, addHydratedComment, getComment, resolveCommentPositionEntry, belongsToDocument, COMMENT_EVENTS, requestInstantSidebarAlignment, peekInstantSidebarAlignment, clearInstantSidebarAlignment } = commentsStore;
21298
21021
  const { proxy } = getCurrentInstance();
21299
21022
  commentsStore.proxy = proxy;
21300
21023
  const documentOpenTelemetry = createDocumentOpenTelemetry(proxy.$superdoc.config);
@@ -23863,7 +23586,7 @@ var SuperDoc_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
23863
23586
  ], 46, _hoisted_1$17);
23864
23587
  };
23865
23588
  }
23866
- }, [["__scopeId", "data-v-f7cc9a3c"]]);
23589
+ }, [["__scopeId", "data-v-9c1ff6d7"]]);
23867
23590
  //#endregion
23868
23591
  //#region src/core/create-app.js
23869
23592
  var PINIA_DEVTOOLS_SETUP_EVENT = "devtools-plugin:setup";
@@ -45563,7 +45286,7 @@ var SuperDoc = class extends import_eventemitter3.default {
45563
45286
  }
45564
45287
  this.userColorMap = /* @__PURE__ */ new Map();
45565
45288
  this.colorIndex = 0;
45566
- this.version = "2.28.0-next.13";
45289
+ this.version = "2.28.0-next.15";
45567
45290
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
45568
45291
  this.superdocId = config.superdocId || v4();
45569
45292
  this.colors = this.config.colors ?? [];