@harbour-enterprises/superdoc 0.24.0-next.6 → 0.25.0-next.1
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/{PdfViewer-BiHh3x6b.es.js → PdfViewer-BEbvklge.es.js} +1 -1
- package/dist/chunks/{PdfViewer-qk_hITc5.cjs → PdfViewer-CvksDDwi.cjs} +1 -1
- package/dist/chunks/{index-aMnFs35I.es.js → index-B9Ad3j3k.es.js} +166 -76
- package/dist/chunks/{index-Di6nG2sc.cjs → index-Bf3lSVG2.cjs} +166 -76
- package/dist/chunks/{super-editor.es-Dz7y81Yr.es.js → super-editor.es--RpCOiR4.es.js} +157 -15
- package/dist/chunks/{super-editor.es-BKZvTraR.cjs → super-editor.es-Bh07I_ue.cjs} +157 -15
- package/dist/core/SuperDoc.d.ts +20 -0
- package/dist/core/SuperDoc.d.ts.map +1 -1
- package/dist/core/collaboration/permissions.d.ts +7 -1
- package/dist/core/collaboration/permissions.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +23 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/style.css +55 -55
- package/dist/super-editor/ai-writer.es.js +2 -2
- package/dist/super-editor/chunks/{converter-CI3WqmGV.js → converter-gSy6s2VK.js} +1 -1
- package/dist/super-editor/chunks/{docx-zipper-D4fk50d9.js → docx-zipper-CceGxV02.js} +1 -1
- package/dist/super-editor/chunks/{editor-DC6pZVp1.js → editor-CyBtLJFF.js} +116 -16
- package/dist/super-editor/chunks/{toolbar-DMobfM6u.js → toolbar-1Ejr8Exl.js} +2 -2
- package/dist/super-editor/converter.es.js +1 -1
- package/dist/super-editor/docx-zipper.es.js +2 -2
- package/dist/super-editor/editor.es.js +3 -3
- package/dist/super-editor/file-zipper.es.js +1 -1
- package/dist/super-editor/super-editor/src/components/slash-menu/tests/testHelpers.d.ts +1 -0
- package/dist/super-editor/super-editor/src/core/Editor.d.ts +18 -0
- package/dist/super-editor/super-editor/src/extensions/track-changes/permission-helpers.d.ts +110 -0
- package/dist/super-editor/super-editor.es.js +66 -21
- package/dist/super-editor/toolbar.es.js +2 -2
- package/dist/super-editor.cjs +1 -1
- package/dist/super-editor.es.js +1 -1
- package/dist/superdoc.cjs +2 -2
- package/dist/superdoc.es.js +2 -2
- package/dist/superdoc.umd.js +321 -89
- package/dist/superdoc.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -35124,7 +35124,7 @@ const _SuperConverter = class _SuperConverter2 {
|
|
|
35124
35124
|
static getStoredSuperdocVersion(docx) {
|
|
35125
35125
|
return _SuperConverter2.getStoredCustomProperty(docx, "SuperdocVersion");
|
|
35126
35126
|
}
|
|
35127
|
-
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "0.
|
|
35127
|
+
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "0.24.0") {
|
|
35128
35128
|
return _SuperConverter2.setStoredCustomProperty(docx, "SuperdocVersion", version2, false);
|
|
35129
35129
|
}
|
|
35130
35130
|
/**
|
|
@@ -52546,7 +52546,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
52546
52546
|
customUpdatedFiles: {},
|
|
52547
52547
|
isHeaderFooterChanged: false,
|
|
52548
52548
|
isCustomXmlChanged: false,
|
|
52549
|
-
focusTarget: null
|
|
52549
|
+
focusTarget: null,
|
|
52550
|
+
permissionResolver: null
|
|
52550
52551
|
});
|
|
52551
52552
|
__privateMethod$1(this, _Editor_instances, initContainerElement_fn).call(this, options);
|
|
52552
52553
|
__privateMethod$1(this, _Editor_instances, checkHeadless_fn).call(this, options);
|
|
@@ -53308,7 +53309,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
53308
53309
|
* @returns {Object | void} Migration results
|
|
53309
53310
|
*/
|
|
53310
53311
|
processCollaborationMigrations() {
|
|
53311
|
-
console.debug("[checkVersionMigrations] Current editor version", "0.
|
|
53312
|
+
console.debug("[checkVersionMigrations] Current editor version", "0.24.0");
|
|
53312
53313
|
if (!this.options.ydoc) return;
|
|
53313
53314
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
53314
53315
|
let docVersion = metaMap.get("version");
|
|
@@ -67304,11 +67305,105 @@ const TrackFormat = Mark2.create({
|
|
|
67304
67305
|
return ["span", Attribute2.mergeAttributes(this.options.htmlAttributes, htmlAttributes), 0];
|
|
67305
67306
|
}
|
|
67306
67307
|
});
|
|
67308
|
+
const PERMISSION_MAP = {
|
|
67309
|
+
accept: {
|
|
67310
|
+
own: "RESOLVE_OWN",
|
|
67311
|
+
other: "RESOLVE_OTHER"
|
|
67312
|
+
},
|
|
67313
|
+
reject: {
|
|
67314
|
+
own: "REJECT_OWN",
|
|
67315
|
+
other: "REJECT_OTHER"
|
|
67316
|
+
}
|
|
67317
|
+
};
|
|
67318
|
+
const buildKey = (change) => {
|
|
67319
|
+
const id = change.mark?.attrs?.id ?? `${change.from}-${change.to}`;
|
|
67320
|
+
return `${id}:${change.mark?.type?.name ?? "unknown"}`;
|
|
67321
|
+
};
|
|
67322
|
+
const mergeChange = (bucket, change) => {
|
|
67323
|
+
const key2 = buildKey(change);
|
|
67324
|
+
const existing = bucket.get(key2);
|
|
67325
|
+
if (existing) {
|
|
67326
|
+
existing.from = Math.min(existing.from, change.from);
|
|
67327
|
+
existing.to = Math.max(existing.to, change.to);
|
|
67328
|
+
existing.segments.push({ from: change.from, to: change.to });
|
|
67329
|
+
} else {
|
|
67330
|
+
bucket.set(key2, {
|
|
67331
|
+
id: change.mark?.attrs?.id ?? null,
|
|
67332
|
+
type: change.mark?.type?.name ?? null,
|
|
67333
|
+
attrs: { ...change.mark?.attrs ?? {} },
|
|
67334
|
+
from: change.from,
|
|
67335
|
+
to: change.to,
|
|
67336
|
+
segments: [{ from: change.from, to: change.to }]
|
|
67337
|
+
});
|
|
67338
|
+
}
|
|
67339
|
+
};
|
|
67340
|
+
const collectTrackedChanges = ({ state: state2, from: from2, to }) => {
|
|
67341
|
+
if (!state2) return [];
|
|
67342
|
+
const collapsed = from2 === to;
|
|
67343
|
+
const changes = getTrackChanges(state2);
|
|
67344
|
+
if (!changes?.length) return [];
|
|
67345
|
+
const bucket = /* @__PURE__ */ new Map();
|
|
67346
|
+
changes.forEach((change) => {
|
|
67347
|
+
const overlaps = collapsed ? change.from <= from2 && change.to >= from2 : change.from < to && change.to > from2;
|
|
67348
|
+
if (!overlaps) return;
|
|
67349
|
+
mergeChange(bucket, change);
|
|
67350
|
+
});
|
|
67351
|
+
return Array.from(bucket.values());
|
|
67352
|
+
};
|
|
67353
|
+
const derivePermissionKey = ({ action, isOwn }) => {
|
|
67354
|
+
const mapping = PERMISSION_MAP[action];
|
|
67355
|
+
if (!mapping) return null;
|
|
67356
|
+
return isOwn ? mapping.own : mapping.other;
|
|
67357
|
+
};
|
|
67358
|
+
const resolveChanges = (editor) => {
|
|
67359
|
+
if (!editor) return { role: "editor", isInternal: false, currentUser: null, resolver: null };
|
|
67360
|
+
const role = editor.options?.role ?? "editor";
|
|
67361
|
+
const isInternal = Boolean(editor.options?.isInternal);
|
|
67362
|
+
const currentUser = editor.options?.user ?? null;
|
|
67363
|
+
const resolver = editor.options?.permissionResolver;
|
|
67364
|
+
return { role, isInternal, currentUser, resolver };
|
|
67365
|
+
};
|
|
67366
|
+
const isTrackedChangeActionAllowed = ({ editor, action, trackedChanges }) => {
|
|
67367
|
+
if (!trackedChanges?.length) return true;
|
|
67368
|
+
const { role, isInternal, currentUser, resolver } = resolveChanges(editor);
|
|
67369
|
+
if (typeof resolver !== "function") return true;
|
|
67370
|
+
const currentEmail = currentUser?.email ?? null;
|
|
67371
|
+
return trackedChanges.every((change) => {
|
|
67372
|
+
const authorEmail = change.attrs?.authorEmail ?? null;
|
|
67373
|
+
const isOwn = Boolean(currentEmail && authorEmail && currentEmail === authorEmail);
|
|
67374
|
+
const permission = derivePermissionKey({ action, isOwn });
|
|
67375
|
+
if (!permission) return true;
|
|
67376
|
+
const payload = {
|
|
67377
|
+
permission,
|
|
67378
|
+
role,
|
|
67379
|
+
isInternal,
|
|
67380
|
+
trackedChange: {
|
|
67381
|
+
id: change.id,
|
|
67382
|
+
type: change.type,
|
|
67383
|
+
attrs: change.attrs,
|
|
67384
|
+
from: change.from,
|
|
67385
|
+
to: change.to,
|
|
67386
|
+
segments: change.segments,
|
|
67387
|
+
commentId: change.id
|
|
67388
|
+
},
|
|
67389
|
+
comment: change.comment ?? null
|
|
67390
|
+
};
|
|
67391
|
+
return resolver(payload) !== false;
|
|
67392
|
+
});
|
|
67393
|
+
};
|
|
67394
|
+
const collectTrackedChangesForContext = ({ state: state2, pos, trackedChangeId }) => {
|
|
67395
|
+
if (pos == null) return [];
|
|
67396
|
+
const changes = collectTrackedChanges({ state: state2, from: pos, to: pos });
|
|
67397
|
+
if (!trackedChangeId) return changes;
|
|
67398
|
+
return changes.filter((change) => change.id === trackedChangeId);
|
|
67399
|
+
};
|
|
67307
67400
|
const TrackChanges = Extension.create({
|
|
67308
67401
|
name: "trackChanges",
|
|
67309
67402
|
addCommands() {
|
|
67310
67403
|
return {
|
|
67311
|
-
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67404
|
+
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67405
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67406
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "accept", trackedChanges })) return false;
|
|
67312
67407
|
let { tr, doc: doc2 } = state2;
|
|
67313
67408
|
tr.setMeta("acceptReject", true);
|
|
67314
67409
|
const map22 = new Mapping();
|
|
@@ -67346,7 +67441,9 @@ const TrackChanges = Extension.create({
|
|
|
67346
67441
|
}
|
|
67347
67442
|
return true;
|
|
67348
67443
|
},
|
|
67349
|
-
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67444
|
+
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67445
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67446
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "reject", trackedChanges })) return false;
|
|
67350
67447
|
const { tr, doc: doc2 } = state2;
|
|
67351
67448
|
tr.setMeta("acceptReject", true);
|
|
67352
67449
|
const map22 = new Mapping();
|
|
@@ -83769,7 +83866,7 @@ var __accessCheck = (obj, member, msg2) => member.has(obj) || __typeError("Canno
|
|
|
83769
83866
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
83770
83867
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
83771
83868
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
83772
|
-
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
|
|
83869
|
+
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, enrichTrackedChanges_fn, runCommandWithArgumentOnly_fn;
|
|
83773
83870
|
var eventemitter3 = { exports: {} };
|
|
83774
83871
|
var hasRequiredEventemitter3;
|
|
83775
83872
|
function requireEventemitter3() {
|
|
@@ -83821,7 +83918,7 @@ function requireEventemitter3() {
|
|
|
83821
83918
|
var evt = prefix2 ? prefix2 + event : event, handlers2 = this._events[evt];
|
|
83822
83919
|
if (!handlers2) return [];
|
|
83823
83920
|
if (handlers2.fn) return [handlers2.fn];
|
|
83824
|
-
for (var i2 = 0,
|
|
83921
|
+
for (var i2 = 0, l3 = handlers2.length, ee = new Array(l3); i2 < l3; i2++) {
|
|
83825
83922
|
ee[i2] = handlers2[i2].fn;
|
|
83826
83923
|
}
|
|
83827
83924
|
return ee;
|
|
@@ -84977,18 +85074,18 @@ const _sfc_main$7 = {
|
|
|
84977
85074
|
}, [
|
|
84978
85075
|
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (i2) => {
|
|
84979
85076
|
return openBlock(), createElementBlock(Fragment$1, { key: i2 }, [
|
|
84980
|
-
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (
|
|
85077
|
+
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (n) => {
|
|
84981
85078
|
return createBaseVNode("div", {
|
|
84982
85079
|
class: "toolbar-table-grid__item",
|
|
84983
|
-
key: `${i2}_${
|
|
84984
|
-
"data-cols":
|
|
85080
|
+
key: `${i2}_${n}`,
|
|
85081
|
+
"data-cols": n,
|
|
84985
85082
|
"data-rows": i2,
|
|
84986
85083
|
"data-item": "true",
|
|
84987
85084
|
ref_for: true,
|
|
84988
85085
|
ref_key: "tableGridItems",
|
|
84989
85086
|
ref: tableGridItems,
|
|
84990
|
-
onKeydown: withModifiers((event) => handleKeyDown2(event,
|
|
84991
|
-
onClick: withModifiers(($event) => handleClick2({ cols:
|
|
85087
|
+
onKeydown: withModifiers((event) => handleKeyDown2(event, n, i2), ["prevent"]),
|
|
85088
|
+
onClick: withModifiers(($event) => handleClick2({ cols: n, rows: i2 }), ["stop", "prevent"])
|
|
84992
85089
|
}, null, 40, _hoisted_1$6);
|
|
84993
85090
|
}), 64))
|
|
84994
85091
|
], 64);
|
|
@@ -86723,10 +86820,31 @@ class SuperToolbar extends EventEmitter2 {
|
|
|
86723
86820
|
__privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
|
|
86724
86821
|
return;
|
|
86725
86822
|
}
|
|
86823
|
+
const { state: state2 } = this.activeEditor;
|
|
86824
|
+
const selection = state2.selection;
|
|
86825
|
+
const selectionTrackedChanges = __privateMethod(this, _SuperToolbar_instances, enrichTrackedChanges_fn).call(this, collectTrackedChanges({ state: state2, from: selection.from, to: selection.to }));
|
|
86826
|
+
const hasTrackedChanges = selectionTrackedChanges.length > 0;
|
|
86827
|
+
const hasValidSelection = hasTrackedChanges;
|
|
86828
|
+
const canAcceptTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86829
|
+
editor: this.activeEditor,
|
|
86830
|
+
action: "accept",
|
|
86831
|
+
trackedChanges: selectionTrackedChanges
|
|
86832
|
+
});
|
|
86833
|
+
const canRejectTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86834
|
+
editor: this.activeEditor,
|
|
86835
|
+
action: "reject",
|
|
86836
|
+
trackedChanges: selectionTrackedChanges
|
|
86837
|
+
});
|
|
86726
86838
|
const marks = getActiveFormatting(this.activeEditor);
|
|
86727
86839
|
const inTable = isInTable$1(this.activeEditor.state);
|
|
86728
86840
|
this.toolbarItems.forEach((item) => {
|
|
86729
86841
|
item.resetDisabled();
|
|
86842
|
+
if (item.name.value === "acceptTrackedChangeBySelection") {
|
|
86843
|
+
item.setDisabled(!canAcceptTrackedChanges);
|
|
86844
|
+
}
|
|
86845
|
+
if (item.name.value === "rejectTrackedChangeOnSelection") {
|
|
86846
|
+
item.setDisabled(!canRejectTrackedChanges);
|
|
86847
|
+
}
|
|
86730
86848
|
if (item.name.value === "linkedStyles") {
|
|
86731
86849
|
if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {
|
|
86732
86850
|
return item.deactivate();
|
|
@@ -86899,6 +87017,19 @@ updateToolbarHistory_fn = function() {
|
|
|
86899
87017
|
this.redoDepth = redoDepth(this.activeEditor.state);
|
|
86900
87018
|
}
|
|
86901
87019
|
};
|
|
87020
|
+
enrichTrackedChanges_fn = function(trackedChanges = []) {
|
|
87021
|
+
if (!trackedChanges?.length) return trackedChanges;
|
|
87022
|
+
const store = this.superdoc?.commentsStore;
|
|
87023
|
+
if (!store?.getComment) return trackedChanges;
|
|
87024
|
+
return trackedChanges.map((change) => {
|
|
87025
|
+
const commentId = change.id;
|
|
87026
|
+
if (!commentId) return change;
|
|
87027
|
+
const storeComment = store.getComment(commentId);
|
|
87028
|
+
if (!storeComment) return change;
|
|
87029
|
+
const comment = typeof storeComment.getValues === "function" ? storeComment.getValues() : storeComment;
|
|
87030
|
+
return { ...change, comment };
|
|
87031
|
+
});
|
|
87032
|
+
};
|
|
86902
87033
|
runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback = false }, callback) {
|
|
86903
87034
|
if (!argument || !this.activeEditor) return;
|
|
86904
87035
|
let command2 = item.command;
|
|
@@ -87303,6 +87434,7 @@ async function getEditorContext(editor, event) {
|
|
|
87303
87434
|
state2.selection.$head.marks().forEach((mark) => activeMarks.push(mark.type.name));
|
|
87304
87435
|
}
|
|
87305
87436
|
const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete") || activeMarks.includes("trackFormat");
|
|
87437
|
+
const trackedChanges = event ? collectTrackedChangesForContext({ state: state2, pos, trackedChangeId }) : collectTrackedChanges({ state: state2, from: from2, to });
|
|
87306
87438
|
const cursorCoords = pos ? view.coordsAtPos(pos) : null;
|
|
87307
87439
|
const cursorPosition = cursorCoords ? {
|
|
87308
87440
|
x: cursorCoords.left,
|
|
@@ -87336,7 +87468,9 @@ async function getEditorContext(editor, event) {
|
|
|
87336
87468
|
event,
|
|
87337
87469
|
trigger: event ? "click" : "slash",
|
|
87338
87470
|
// Editor reference for advanced use cases
|
|
87339
|
-
editor
|
|
87471
|
+
editor,
|
|
87472
|
+
// Tracked change metadata
|
|
87473
|
+
trackedChanges
|
|
87340
87474
|
};
|
|
87341
87475
|
return context;
|
|
87342
87476
|
}
|
|
@@ -87433,6 +87567,14 @@ const shouldShowItem = (item, context) => {
|
|
|
87433
87567
|
}
|
|
87434
87568
|
}
|
|
87435
87569
|
};
|
|
87570
|
+
const canPerformTrackedChange = (context, action) => {
|
|
87571
|
+
if (!context?.editor) return true;
|
|
87572
|
+
return isTrackedChangeActionAllowed({
|
|
87573
|
+
editor: context.editor,
|
|
87574
|
+
action,
|
|
87575
|
+
trackedChanges: context.trackedChanges ?? []
|
|
87576
|
+
});
|
|
87577
|
+
};
|
|
87436
87578
|
function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
87437
87579
|
const { selectedText, editor } = context;
|
|
87438
87580
|
if (arguments.length === 1 && editor?.options?.slashMenuConfig) {
|
|
@@ -87490,7 +87632,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87490
87632
|
},
|
|
87491
87633
|
showWhen: (context2) => {
|
|
87492
87634
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87493
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87635
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "accept");
|
|
87494
87636
|
}
|
|
87495
87637
|
},
|
|
87496
87638
|
{
|
|
@@ -87507,7 +87649,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87507
87649
|
},
|
|
87508
87650
|
showWhen: (context2) => {
|
|
87509
87651
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87510
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87652
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "reject");
|
|
87511
87653
|
}
|
|
87512
87654
|
}
|
|
87513
87655
|
]
|
|
@@ -35141,7 +35141,7 @@ const _SuperConverter = class _SuperConverter2 {
|
|
|
35141
35141
|
static getStoredSuperdocVersion(docx) {
|
|
35142
35142
|
return _SuperConverter2.getStoredCustomProperty(docx, "SuperdocVersion");
|
|
35143
35143
|
}
|
|
35144
|
-
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "0.
|
|
35144
|
+
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "0.24.0") {
|
|
35145
35145
|
return _SuperConverter2.setStoredCustomProperty(docx, "SuperdocVersion", version2, false);
|
|
35146
35146
|
}
|
|
35147
35147
|
/**
|
|
@@ -52563,7 +52563,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
52563
52563
|
customUpdatedFiles: {},
|
|
52564
52564
|
isHeaderFooterChanged: false,
|
|
52565
52565
|
isCustomXmlChanged: false,
|
|
52566
|
-
focusTarget: null
|
|
52566
|
+
focusTarget: null,
|
|
52567
|
+
permissionResolver: null
|
|
52567
52568
|
});
|
|
52568
52569
|
__privateMethod$1(this, _Editor_instances, initContainerElement_fn).call(this, options);
|
|
52569
52570
|
__privateMethod$1(this, _Editor_instances, checkHeadless_fn).call(this, options);
|
|
@@ -53325,7 +53326,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
53325
53326
|
* @returns {Object | void} Migration results
|
|
53326
53327
|
*/
|
|
53327
53328
|
processCollaborationMigrations() {
|
|
53328
|
-
console.debug("[checkVersionMigrations] Current editor version", "0.
|
|
53329
|
+
console.debug("[checkVersionMigrations] Current editor version", "0.24.0");
|
|
53329
53330
|
if (!this.options.ydoc) return;
|
|
53330
53331
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
53331
53332
|
let docVersion = metaMap.get("version");
|
|
@@ -67321,11 +67322,105 @@ const TrackFormat = Mark2.create({
|
|
|
67321
67322
|
return ["span", Attribute2.mergeAttributes(this.options.htmlAttributes, htmlAttributes), 0];
|
|
67322
67323
|
}
|
|
67323
67324
|
});
|
|
67325
|
+
const PERMISSION_MAP = {
|
|
67326
|
+
accept: {
|
|
67327
|
+
own: "RESOLVE_OWN",
|
|
67328
|
+
other: "RESOLVE_OTHER"
|
|
67329
|
+
},
|
|
67330
|
+
reject: {
|
|
67331
|
+
own: "REJECT_OWN",
|
|
67332
|
+
other: "REJECT_OTHER"
|
|
67333
|
+
}
|
|
67334
|
+
};
|
|
67335
|
+
const buildKey = (change) => {
|
|
67336
|
+
const id = change.mark?.attrs?.id ?? `${change.from}-${change.to}`;
|
|
67337
|
+
return `${id}:${change.mark?.type?.name ?? "unknown"}`;
|
|
67338
|
+
};
|
|
67339
|
+
const mergeChange = (bucket, change) => {
|
|
67340
|
+
const key2 = buildKey(change);
|
|
67341
|
+
const existing = bucket.get(key2);
|
|
67342
|
+
if (existing) {
|
|
67343
|
+
existing.from = Math.min(existing.from, change.from);
|
|
67344
|
+
existing.to = Math.max(existing.to, change.to);
|
|
67345
|
+
existing.segments.push({ from: change.from, to: change.to });
|
|
67346
|
+
} else {
|
|
67347
|
+
bucket.set(key2, {
|
|
67348
|
+
id: change.mark?.attrs?.id ?? null,
|
|
67349
|
+
type: change.mark?.type?.name ?? null,
|
|
67350
|
+
attrs: { ...change.mark?.attrs ?? {} },
|
|
67351
|
+
from: change.from,
|
|
67352
|
+
to: change.to,
|
|
67353
|
+
segments: [{ from: change.from, to: change.to }]
|
|
67354
|
+
});
|
|
67355
|
+
}
|
|
67356
|
+
};
|
|
67357
|
+
const collectTrackedChanges = ({ state: state2, from: from2, to }) => {
|
|
67358
|
+
if (!state2) return [];
|
|
67359
|
+
const collapsed = from2 === to;
|
|
67360
|
+
const changes = getTrackChanges(state2);
|
|
67361
|
+
if (!changes?.length) return [];
|
|
67362
|
+
const bucket = /* @__PURE__ */ new Map();
|
|
67363
|
+
changes.forEach((change) => {
|
|
67364
|
+
const overlaps = collapsed ? change.from <= from2 && change.to >= from2 : change.from < to && change.to > from2;
|
|
67365
|
+
if (!overlaps) return;
|
|
67366
|
+
mergeChange(bucket, change);
|
|
67367
|
+
});
|
|
67368
|
+
return Array.from(bucket.values());
|
|
67369
|
+
};
|
|
67370
|
+
const derivePermissionKey = ({ action, isOwn }) => {
|
|
67371
|
+
const mapping = PERMISSION_MAP[action];
|
|
67372
|
+
if (!mapping) return null;
|
|
67373
|
+
return isOwn ? mapping.own : mapping.other;
|
|
67374
|
+
};
|
|
67375
|
+
const resolveChanges = (editor) => {
|
|
67376
|
+
if (!editor) return { role: "editor", isInternal: false, currentUser: null, resolver: null };
|
|
67377
|
+
const role = editor.options?.role ?? "editor";
|
|
67378
|
+
const isInternal = Boolean(editor.options?.isInternal);
|
|
67379
|
+
const currentUser = editor.options?.user ?? null;
|
|
67380
|
+
const resolver = editor.options?.permissionResolver;
|
|
67381
|
+
return { role, isInternal, currentUser, resolver };
|
|
67382
|
+
};
|
|
67383
|
+
const isTrackedChangeActionAllowed = ({ editor, action, trackedChanges }) => {
|
|
67384
|
+
if (!trackedChanges?.length) return true;
|
|
67385
|
+
const { role, isInternal, currentUser, resolver } = resolveChanges(editor);
|
|
67386
|
+
if (typeof resolver !== "function") return true;
|
|
67387
|
+
const currentEmail = currentUser?.email ?? null;
|
|
67388
|
+
return trackedChanges.every((change) => {
|
|
67389
|
+
const authorEmail = change.attrs?.authorEmail ?? null;
|
|
67390
|
+
const isOwn = Boolean(currentEmail && authorEmail && currentEmail === authorEmail);
|
|
67391
|
+
const permission = derivePermissionKey({ action, isOwn });
|
|
67392
|
+
if (!permission) return true;
|
|
67393
|
+
const payload = {
|
|
67394
|
+
permission,
|
|
67395
|
+
role,
|
|
67396
|
+
isInternal,
|
|
67397
|
+
trackedChange: {
|
|
67398
|
+
id: change.id,
|
|
67399
|
+
type: change.type,
|
|
67400
|
+
attrs: change.attrs,
|
|
67401
|
+
from: change.from,
|
|
67402
|
+
to: change.to,
|
|
67403
|
+
segments: change.segments,
|
|
67404
|
+
commentId: change.id
|
|
67405
|
+
},
|
|
67406
|
+
comment: change.comment ?? null
|
|
67407
|
+
};
|
|
67408
|
+
return resolver(payload) !== false;
|
|
67409
|
+
});
|
|
67410
|
+
};
|
|
67411
|
+
const collectTrackedChangesForContext = ({ state: state2, pos, trackedChangeId }) => {
|
|
67412
|
+
if (pos == null) return [];
|
|
67413
|
+
const changes = collectTrackedChanges({ state: state2, from: pos, to: pos });
|
|
67414
|
+
if (!trackedChangeId) return changes;
|
|
67415
|
+
return changes.filter((change) => change.id === trackedChangeId);
|
|
67416
|
+
};
|
|
67324
67417
|
const TrackChanges = Extension.create({
|
|
67325
67418
|
name: "trackChanges",
|
|
67326
67419
|
addCommands() {
|
|
67327
67420
|
return {
|
|
67328
|
-
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67421
|
+
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67422
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67423
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "accept", trackedChanges })) return false;
|
|
67329
67424
|
let { tr, doc: doc2 } = state2;
|
|
67330
67425
|
tr.setMeta("acceptReject", true);
|
|
67331
67426
|
const map22 = new Mapping();
|
|
@@ -67363,7 +67458,9 @@ const TrackChanges = Extension.create({
|
|
|
67363
67458
|
}
|
|
67364
67459
|
return true;
|
|
67365
67460
|
},
|
|
67366
|
-
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67461
|
+
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67462
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67463
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "reject", trackedChanges })) return false;
|
|
67367
67464
|
const { tr, doc: doc2 } = state2;
|
|
67368
67465
|
tr.setMeta("acceptReject", true);
|
|
67369
67466
|
const map22 = new Mapping();
|
|
@@ -83786,7 +83883,7 @@ var __accessCheck = (obj, member, msg2) => member.has(obj) || __typeError("Canno
|
|
|
83786
83883
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
83787
83884
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
83788
83885
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
83789
|
-
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
|
|
83886
|
+
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, enrichTrackedChanges_fn, runCommandWithArgumentOnly_fn;
|
|
83790
83887
|
var eventemitter3 = { exports: {} };
|
|
83791
83888
|
var hasRequiredEventemitter3;
|
|
83792
83889
|
function requireEventemitter3() {
|
|
@@ -83838,7 +83935,7 @@ function requireEventemitter3() {
|
|
|
83838
83935
|
var evt = prefix2 ? prefix2 + event : event, handlers2 = this._events[evt];
|
|
83839
83936
|
if (!handlers2) return [];
|
|
83840
83937
|
if (handlers2.fn) return [handlers2.fn];
|
|
83841
|
-
for (var i2 = 0,
|
|
83938
|
+
for (var i2 = 0, l3 = handlers2.length, ee = new Array(l3); i2 < l3; i2++) {
|
|
83842
83939
|
ee[i2] = handlers2[i2].fn;
|
|
83843
83940
|
}
|
|
83844
83941
|
return ee;
|
|
@@ -84994,18 +85091,18 @@ const _sfc_main$7 = {
|
|
|
84994
85091
|
}, [
|
|
84995
85092
|
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (i2) => {
|
|
84996
85093
|
return vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: i2 }, [
|
|
84997
|
-
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (
|
|
85094
|
+
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (n) => {
|
|
84998
85095
|
return vue.createBaseVNode("div", {
|
|
84999
85096
|
class: "toolbar-table-grid__item",
|
|
85000
|
-
key: `${i2}_${
|
|
85001
|
-
"data-cols":
|
|
85097
|
+
key: `${i2}_${n}`,
|
|
85098
|
+
"data-cols": n,
|
|
85002
85099
|
"data-rows": i2,
|
|
85003
85100
|
"data-item": "true",
|
|
85004
85101
|
ref_for: true,
|
|
85005
85102
|
ref_key: "tableGridItems",
|
|
85006
85103
|
ref: tableGridItems,
|
|
85007
|
-
onKeydown: vue.withModifiers((event) => handleKeyDown2(event,
|
|
85008
|
-
onClick: vue.withModifiers(($event) => handleClick2({ cols:
|
|
85104
|
+
onKeydown: vue.withModifiers((event) => handleKeyDown2(event, n, i2), ["prevent"]),
|
|
85105
|
+
onClick: vue.withModifiers(($event) => handleClick2({ cols: n, rows: i2 }), ["stop", "prevent"])
|
|
85009
85106
|
}, null, 40, _hoisted_1$6);
|
|
85010
85107
|
}), 64))
|
|
85011
85108
|
], 64);
|
|
@@ -86740,10 +86837,31 @@ class SuperToolbar extends EventEmitter2 {
|
|
|
86740
86837
|
__privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
|
|
86741
86838
|
return;
|
|
86742
86839
|
}
|
|
86840
|
+
const { state: state2 } = this.activeEditor;
|
|
86841
|
+
const selection = state2.selection;
|
|
86842
|
+
const selectionTrackedChanges = __privateMethod(this, _SuperToolbar_instances, enrichTrackedChanges_fn).call(this, collectTrackedChanges({ state: state2, from: selection.from, to: selection.to }));
|
|
86843
|
+
const hasTrackedChanges = selectionTrackedChanges.length > 0;
|
|
86844
|
+
const hasValidSelection = hasTrackedChanges;
|
|
86845
|
+
const canAcceptTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86846
|
+
editor: this.activeEditor,
|
|
86847
|
+
action: "accept",
|
|
86848
|
+
trackedChanges: selectionTrackedChanges
|
|
86849
|
+
});
|
|
86850
|
+
const canRejectTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86851
|
+
editor: this.activeEditor,
|
|
86852
|
+
action: "reject",
|
|
86853
|
+
trackedChanges: selectionTrackedChanges
|
|
86854
|
+
});
|
|
86743
86855
|
const marks = getActiveFormatting(this.activeEditor);
|
|
86744
86856
|
const inTable = isInTable$1(this.activeEditor.state);
|
|
86745
86857
|
this.toolbarItems.forEach((item) => {
|
|
86746
86858
|
item.resetDisabled();
|
|
86859
|
+
if (item.name.value === "acceptTrackedChangeBySelection") {
|
|
86860
|
+
item.setDisabled(!canAcceptTrackedChanges);
|
|
86861
|
+
}
|
|
86862
|
+
if (item.name.value === "rejectTrackedChangeOnSelection") {
|
|
86863
|
+
item.setDisabled(!canRejectTrackedChanges);
|
|
86864
|
+
}
|
|
86747
86865
|
if (item.name.value === "linkedStyles") {
|
|
86748
86866
|
if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {
|
|
86749
86867
|
return item.deactivate();
|
|
@@ -86916,6 +87034,19 @@ updateToolbarHistory_fn = function() {
|
|
|
86916
87034
|
this.redoDepth = redoDepth(this.activeEditor.state);
|
|
86917
87035
|
}
|
|
86918
87036
|
};
|
|
87037
|
+
enrichTrackedChanges_fn = function(trackedChanges = []) {
|
|
87038
|
+
if (!trackedChanges?.length) return trackedChanges;
|
|
87039
|
+
const store = this.superdoc?.commentsStore;
|
|
87040
|
+
if (!store?.getComment) return trackedChanges;
|
|
87041
|
+
return trackedChanges.map((change) => {
|
|
87042
|
+
const commentId = change.id;
|
|
87043
|
+
if (!commentId) return change;
|
|
87044
|
+
const storeComment = store.getComment(commentId);
|
|
87045
|
+
if (!storeComment) return change;
|
|
87046
|
+
const comment = typeof storeComment.getValues === "function" ? storeComment.getValues() : storeComment;
|
|
87047
|
+
return { ...change, comment };
|
|
87048
|
+
});
|
|
87049
|
+
};
|
|
86919
87050
|
runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback = false }, callback) {
|
|
86920
87051
|
if (!argument || !this.activeEditor) return;
|
|
86921
87052
|
let command2 = item.command;
|
|
@@ -87320,6 +87451,7 @@ async function getEditorContext(editor, event) {
|
|
|
87320
87451
|
state2.selection.$head.marks().forEach((mark) => activeMarks.push(mark.type.name));
|
|
87321
87452
|
}
|
|
87322
87453
|
const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete") || activeMarks.includes("trackFormat");
|
|
87454
|
+
const trackedChanges = event ? collectTrackedChangesForContext({ state: state2, pos, trackedChangeId }) : collectTrackedChanges({ state: state2, from: from2, to });
|
|
87323
87455
|
const cursorCoords = pos ? view.coordsAtPos(pos) : null;
|
|
87324
87456
|
const cursorPosition = cursorCoords ? {
|
|
87325
87457
|
x: cursorCoords.left,
|
|
@@ -87353,7 +87485,9 @@ async function getEditorContext(editor, event) {
|
|
|
87353
87485
|
event,
|
|
87354
87486
|
trigger: event ? "click" : "slash",
|
|
87355
87487
|
// Editor reference for advanced use cases
|
|
87356
|
-
editor
|
|
87488
|
+
editor,
|
|
87489
|
+
// Tracked change metadata
|
|
87490
|
+
trackedChanges
|
|
87357
87491
|
};
|
|
87358
87492
|
return context;
|
|
87359
87493
|
}
|
|
@@ -87450,6 +87584,14 @@ const shouldShowItem = (item, context) => {
|
|
|
87450
87584
|
}
|
|
87451
87585
|
}
|
|
87452
87586
|
};
|
|
87587
|
+
const canPerformTrackedChange = (context, action) => {
|
|
87588
|
+
if (!context?.editor) return true;
|
|
87589
|
+
return isTrackedChangeActionAllowed({
|
|
87590
|
+
editor: context.editor,
|
|
87591
|
+
action,
|
|
87592
|
+
trackedChanges: context.trackedChanges ?? []
|
|
87593
|
+
});
|
|
87594
|
+
};
|
|
87453
87595
|
function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
87454
87596
|
const { selectedText, editor } = context;
|
|
87455
87597
|
if (arguments.length === 1 && editor?.options?.slashMenuConfig) {
|
|
@@ -87507,7 +87649,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87507
87649
|
},
|
|
87508
87650
|
showWhen: (context2) => {
|
|
87509
87651
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87510
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87652
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "accept");
|
|
87511
87653
|
}
|
|
87512
87654
|
},
|
|
87513
87655
|
{
|
|
@@ -87524,7 +87666,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87524
87666
|
},
|
|
87525
87667
|
showWhen: (context2) => {
|
|
87526
87668
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87527
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87669
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "reject");
|
|
87528
87670
|
}
|
|
87529
87671
|
}
|
|
87530
87672
|
]
|
package/dist/core/SuperDoc.d.ts
CHANGED
|
@@ -134,6 +134,26 @@ export class SuperDoc extends EventEmitter<string | symbol, any> {
|
|
|
134
134
|
* @returns {void}
|
|
135
135
|
*/
|
|
136
136
|
togglePagination(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Determine whether the current configuration allows a given permission.
|
|
139
|
+
* Used by downstream consumers (toolbar, context menu, commands) to keep
|
|
140
|
+
* tracked-change affordances consistent with customer overrides.
|
|
141
|
+
*
|
|
142
|
+
* @param {Object} params
|
|
143
|
+
* @param {string} params.permission Permission key to evaluate
|
|
144
|
+
* @param {string} [params.role=this.config.role] Role to evaluate against
|
|
145
|
+
* @param {boolean} [params.isInternal=this.config.isInternal] Internal/external flag
|
|
146
|
+
* @param {Object|null} [params.comment] Comment object (if already resolved)
|
|
147
|
+
* @param {Object|null} [params.trackedChange] Tracked change metadata (id, attrs, etc.)
|
|
148
|
+
* @returns {boolean}
|
|
149
|
+
*/
|
|
150
|
+
canPerformPermission({ permission, role, isInternal, comment, trackedChange, }?: {
|
|
151
|
+
permission: string;
|
|
152
|
+
role?: string;
|
|
153
|
+
isInternal?: boolean;
|
|
154
|
+
comment?: any | null;
|
|
155
|
+
trackedChange?: any | null;
|
|
156
|
+
}): boolean;
|
|
137
157
|
toolbarElement: any;
|
|
138
158
|
toolbar: SuperToolbar;
|
|
139
159
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperDoc.d.ts","sourceRoot":"","sources":["../../src/core/SuperDoc.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SuperDoc.d.ts","sourceRoot":"","sources":["../../src/core/SuperDoc.js"],"names":[],"mappings":"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"}
|
|
@@ -10,5 +10,11 @@ export const PERMISSIONS: Readonly<{
|
|
|
10
10
|
UPLOAD_VERSION: "UPLOAD_VERSION";
|
|
11
11
|
VERSION_HISTORY: "VERSION_HISTORY";
|
|
12
12
|
}>;
|
|
13
|
-
export function isAllowed(permission: string, role: string, isInternal: boolean
|
|
13
|
+
export function isAllowed(permission: string, role: string, isInternal: boolean, context?: {
|
|
14
|
+
comment?: any;
|
|
15
|
+
superdoc?: any;
|
|
16
|
+
currentUser?: any;
|
|
17
|
+
permissionResolver?: Function;
|
|
18
|
+
trackedChange?: any;
|
|
19
|
+
}): boolean;
|
|
14
20
|
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/core/collaboration/permissions.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/core/collaboration/permissions.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkFI,2FAPJ;IAAyB,OAAO;IACP,QAAQ;IACR,WAAW;IACT,kBAAkB;IACpB,aAAa;CACtC,WAoBF"}
|