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.
- package/dist/chunks/{create-super-doc-ui-B6Va_J_0.es.js → create-super-doc-ui-BRahDsch.es.js} +70 -0
- package/dist/chunks/{create-super-doc-ui-8dttPeGi.cjs → create-super-doc-ui-CFlvn2wr.cjs} +70 -0
- package/dist/collaboration-upgrade-engine.cjs +1 -1
- package/dist/collaboration-upgrade-engine.es.js +1 -1
- package/dist/document-api/src/types/clipboard.d.ts +5 -1
- package/dist/layout-engine/contracts/src/index.d.ts +2 -1
- package/dist/layout-engine/contracts/src/run-helpers.d.ts +1 -0
- package/dist/layout-engine/layout-bridge/src/marker-run-key.d.ts +2 -0
- package/dist/layout-engine/layout-engine/src/paginator.d.ts +1 -0
- package/dist/layout-engine/style-engine/src/ooxml/index.d.ts +1 -1
- package/dist/public/ui-react.cjs +1 -1
- package/dist/public/ui-react.es.js +1 -1
- package/dist/public/ui-vue.cjs +1 -1
- package/dist/public/ui-vue.es.js +1 -1
- package/dist/public/ui.cjs +1 -1
- package/dist/public/ui.es.js +1 -1
- package/dist/style.css +1 -1
- package/dist/style.layered.css +1 -1
- package/dist/superdoc/src/public/ui/types.d.ts +19 -1
- package/dist/superdoc/src/public/ui.d.cts +4 -0
- package/dist/superdoc/src/public/ui.d.ts +1 -1
- package/dist/superdoc/src/stores/comments-store.d.ts +4 -7
- package/dist/superdoc/src/stores/superdoc-store.d.ts +12 -21
- package/dist/superdoc.cjs +7 -284
- package/dist/superdoc.es.js +7 -284
- package/dist-cdn/style.layered.css +1 -1
- package/dist-cdn/superdoc.min.css +1 -1
- package/dist-cdn/superdoc.min.js +42 -42
- package/package.json +2 -2
package/dist/superdoc.es.js
CHANGED
|
@@ -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-
|
|
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.
|
|
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,
|
|
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
|
-
})
|
|
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,
|
|
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-
|
|
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.
|
|
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 ?? [];
|