@harbour-enterprises/superdoc 0.24.0 → 0.25.0-next.2
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-qk_hITc5.cjs → PdfViewer-CEc5ST9t.cjs} +1 -1
- package/dist/chunks/{PdfViewer-BiHh3x6b.es.js → PdfViewer-CoEXViCu.es.js} +1 -1
- package/dist/chunks/{index-Di6nG2sc.cjs → index-ChgYIPZ8.cjs} +166 -76
- package/dist/chunks/{index-aMnFs35I.es.js → index-DtXgSPMT.es.js} +166 -76
- package/dist/chunks/{super-editor.es-BKZvTraR.cjs → super-editor.es-B-E_YaLO.cjs} +163 -18
- package/dist/chunks/{super-editor.es-Dz7y81Yr.es.js → super-editor.es-BePxEtE8.es.js} +163 -18
- 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-yaef8OIs.js} +122 -19
- package/dist/super-editor/chunks/{toolbar-DMobfM6u.js → toolbar-Dc5uyyIp.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/src/extensions/track-changes/trackChangesHelpers/markDeletion.d.ts +1 -1
- 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 +327 -92
- package/dist/superdoc.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
/**
|
|
@@ -49354,7 +49354,7 @@ const markInsertion = ({ tr, from: from2, to, user, date }) => {
|
|
|
49354
49354
|
});
|
|
49355
49355
|
return insertionMark;
|
|
49356
49356
|
};
|
|
49357
|
-
const markDeletion = ({ tr, from: from2, to, user, date }) => {
|
|
49357
|
+
const markDeletion = ({ tr, from: from2, to, user, date, id: providedId }) => {
|
|
49358
49358
|
let trackedMark = findTrackedMarkBetween({
|
|
49359
49359
|
tr,
|
|
49360
49360
|
from: from2,
|
|
@@ -49363,7 +49363,9 @@ const markDeletion = ({ tr, from: from2, to, user, date }) => {
|
|
|
49363
49363
|
attrs: { authorEmail: user.email }
|
|
49364
49364
|
});
|
|
49365
49365
|
let id;
|
|
49366
|
-
if (
|
|
49366
|
+
if (providedId) {
|
|
49367
|
+
id = providedId;
|
|
49368
|
+
} else if (trackedMark) {
|
|
49367
49369
|
id = trackedMark.mark.attrs.id;
|
|
49368
49370
|
} else {
|
|
49369
49371
|
id = v4();
|
|
@@ -50635,7 +50637,8 @@ const replaceStep = ({ state: state2, tr, step, newTr, map: map22, user, date, o
|
|
|
50635
50637
|
from: step.from,
|
|
50636
50638
|
to: step.to,
|
|
50637
50639
|
user,
|
|
50638
|
-
date
|
|
50640
|
+
date,
|
|
50641
|
+
id: meta.insertedMark?.attrs?.id
|
|
50639
50642
|
});
|
|
50640
50643
|
meta.deletionNodes = deletionNodes;
|
|
50641
50644
|
meta.deletionMark = deletionMark2;
|
|
@@ -52563,7 +52566,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
52563
52566
|
customUpdatedFiles: {},
|
|
52564
52567
|
isHeaderFooterChanged: false,
|
|
52565
52568
|
isCustomXmlChanged: false,
|
|
52566
|
-
focusTarget: null
|
|
52569
|
+
focusTarget: null,
|
|
52570
|
+
permissionResolver: null
|
|
52567
52571
|
});
|
|
52568
52572
|
__privateMethod$1(this, _Editor_instances, initContainerElement_fn).call(this, options);
|
|
52569
52573
|
__privateMethod$1(this, _Editor_instances, checkHeadless_fn).call(this, options);
|
|
@@ -53325,7 +53329,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
53325
53329
|
* @returns {Object | void} Migration results
|
|
53326
53330
|
*/
|
|
53327
53331
|
processCollaborationMigrations() {
|
|
53328
|
-
console.debug("[checkVersionMigrations] Current editor version", "0.
|
|
53332
|
+
console.debug("[checkVersionMigrations] Current editor version", "0.24.0");
|
|
53329
53333
|
if (!this.options.ydoc) return;
|
|
53330
53334
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
53331
53335
|
let docVersion = metaMap.get("version");
|
|
@@ -67321,11 +67325,105 @@ const TrackFormat = Mark2.create({
|
|
|
67321
67325
|
return ["span", Attribute2.mergeAttributes(this.options.htmlAttributes, htmlAttributes), 0];
|
|
67322
67326
|
}
|
|
67323
67327
|
});
|
|
67328
|
+
const PERMISSION_MAP = {
|
|
67329
|
+
accept: {
|
|
67330
|
+
own: "RESOLVE_OWN",
|
|
67331
|
+
other: "RESOLVE_OTHER"
|
|
67332
|
+
},
|
|
67333
|
+
reject: {
|
|
67334
|
+
own: "REJECT_OWN",
|
|
67335
|
+
other: "REJECT_OTHER"
|
|
67336
|
+
}
|
|
67337
|
+
};
|
|
67338
|
+
const buildKey = (change) => {
|
|
67339
|
+
const id = change.mark?.attrs?.id ?? `${change.from}-${change.to}`;
|
|
67340
|
+
return `${id}:${change.mark?.type?.name ?? "unknown"}`;
|
|
67341
|
+
};
|
|
67342
|
+
const mergeChange = (bucket, change) => {
|
|
67343
|
+
const key2 = buildKey(change);
|
|
67344
|
+
const existing = bucket.get(key2);
|
|
67345
|
+
if (existing) {
|
|
67346
|
+
existing.from = Math.min(existing.from, change.from);
|
|
67347
|
+
existing.to = Math.max(existing.to, change.to);
|
|
67348
|
+
existing.segments.push({ from: change.from, to: change.to });
|
|
67349
|
+
} else {
|
|
67350
|
+
bucket.set(key2, {
|
|
67351
|
+
id: change.mark?.attrs?.id ?? null,
|
|
67352
|
+
type: change.mark?.type?.name ?? null,
|
|
67353
|
+
attrs: { ...change.mark?.attrs ?? {} },
|
|
67354
|
+
from: change.from,
|
|
67355
|
+
to: change.to,
|
|
67356
|
+
segments: [{ from: change.from, to: change.to }]
|
|
67357
|
+
});
|
|
67358
|
+
}
|
|
67359
|
+
};
|
|
67360
|
+
const collectTrackedChanges = ({ state: state2, from: from2, to }) => {
|
|
67361
|
+
if (!state2) return [];
|
|
67362
|
+
const collapsed = from2 === to;
|
|
67363
|
+
const changes = getTrackChanges(state2);
|
|
67364
|
+
if (!changes?.length) return [];
|
|
67365
|
+
const bucket = /* @__PURE__ */ new Map();
|
|
67366
|
+
changes.forEach((change) => {
|
|
67367
|
+
const overlaps = collapsed ? change.from <= from2 && change.to >= from2 : change.from < to && change.to > from2;
|
|
67368
|
+
if (!overlaps) return;
|
|
67369
|
+
mergeChange(bucket, change);
|
|
67370
|
+
});
|
|
67371
|
+
return Array.from(bucket.values());
|
|
67372
|
+
};
|
|
67373
|
+
const derivePermissionKey = ({ action, isOwn }) => {
|
|
67374
|
+
const mapping = PERMISSION_MAP[action];
|
|
67375
|
+
if (!mapping) return null;
|
|
67376
|
+
return isOwn ? mapping.own : mapping.other;
|
|
67377
|
+
};
|
|
67378
|
+
const resolveChanges = (editor) => {
|
|
67379
|
+
if (!editor) return { role: "editor", isInternal: false, currentUser: null, resolver: null };
|
|
67380
|
+
const role = editor.options?.role ?? "editor";
|
|
67381
|
+
const isInternal = Boolean(editor.options?.isInternal);
|
|
67382
|
+
const currentUser = editor.options?.user ?? null;
|
|
67383
|
+
const resolver = editor.options?.permissionResolver;
|
|
67384
|
+
return { role, isInternal, currentUser, resolver };
|
|
67385
|
+
};
|
|
67386
|
+
const isTrackedChangeActionAllowed = ({ editor, action, trackedChanges }) => {
|
|
67387
|
+
if (!trackedChanges?.length) return true;
|
|
67388
|
+
const { role, isInternal, currentUser, resolver } = resolveChanges(editor);
|
|
67389
|
+
if (typeof resolver !== "function") return true;
|
|
67390
|
+
const currentEmail = currentUser?.email ?? null;
|
|
67391
|
+
return trackedChanges.every((change) => {
|
|
67392
|
+
const authorEmail = change.attrs?.authorEmail ?? null;
|
|
67393
|
+
const isOwn = Boolean(currentEmail && authorEmail && currentEmail === authorEmail);
|
|
67394
|
+
const permission = derivePermissionKey({ action, isOwn });
|
|
67395
|
+
if (!permission) return true;
|
|
67396
|
+
const payload = {
|
|
67397
|
+
permission,
|
|
67398
|
+
role,
|
|
67399
|
+
isInternal,
|
|
67400
|
+
trackedChange: {
|
|
67401
|
+
id: change.id,
|
|
67402
|
+
type: change.type,
|
|
67403
|
+
attrs: change.attrs,
|
|
67404
|
+
from: change.from,
|
|
67405
|
+
to: change.to,
|
|
67406
|
+
segments: change.segments,
|
|
67407
|
+
commentId: change.id
|
|
67408
|
+
},
|
|
67409
|
+
comment: change.comment ?? null
|
|
67410
|
+
};
|
|
67411
|
+
return resolver(payload) !== false;
|
|
67412
|
+
});
|
|
67413
|
+
};
|
|
67414
|
+
const collectTrackedChangesForContext = ({ state: state2, pos, trackedChangeId }) => {
|
|
67415
|
+
if (pos == null) return [];
|
|
67416
|
+
const changes = collectTrackedChanges({ state: state2, from: pos, to: pos });
|
|
67417
|
+
if (!trackedChangeId) return changes;
|
|
67418
|
+
return changes.filter((change) => change.id === trackedChangeId);
|
|
67419
|
+
};
|
|
67324
67420
|
const TrackChanges = Extension.create({
|
|
67325
67421
|
name: "trackChanges",
|
|
67326
67422
|
addCommands() {
|
|
67327
67423
|
return {
|
|
67328
|
-
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67424
|
+
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67425
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67426
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "accept", trackedChanges })) return false;
|
|
67329
67427
|
let { tr, doc: doc2 } = state2;
|
|
67330
67428
|
tr.setMeta("acceptReject", true);
|
|
67331
67429
|
const map22 = new Mapping();
|
|
@@ -67363,7 +67461,9 @@ const TrackChanges = Extension.create({
|
|
|
67363
67461
|
}
|
|
67364
67462
|
return true;
|
|
67365
67463
|
},
|
|
67366
|
-
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67464
|
+
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67465
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67466
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "reject", trackedChanges })) return false;
|
|
67367
67467
|
const { tr, doc: doc2 } = state2;
|
|
67368
67468
|
tr.setMeta("acceptReject", true);
|
|
67369
67469
|
const map22 = new Mapping();
|
|
@@ -83786,7 +83886,7 @@ var __accessCheck = (obj, member, msg2) => member.has(obj) || __typeError("Canno
|
|
|
83786
83886
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
83787
83887
|
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
83888
|
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;
|
|
83889
|
+
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, enrichTrackedChanges_fn, runCommandWithArgumentOnly_fn;
|
|
83790
83890
|
var eventemitter3 = { exports: {} };
|
|
83791
83891
|
var hasRequiredEventemitter3;
|
|
83792
83892
|
function requireEventemitter3() {
|
|
@@ -83838,7 +83938,7 @@ function requireEventemitter3() {
|
|
|
83838
83938
|
var evt = prefix2 ? prefix2 + event : event, handlers2 = this._events[evt];
|
|
83839
83939
|
if (!handlers2) return [];
|
|
83840
83940
|
if (handlers2.fn) return [handlers2.fn];
|
|
83841
|
-
for (var i2 = 0,
|
|
83941
|
+
for (var i2 = 0, l3 = handlers2.length, ee = new Array(l3); i2 < l3; i2++) {
|
|
83842
83942
|
ee[i2] = handlers2[i2].fn;
|
|
83843
83943
|
}
|
|
83844
83944
|
return ee;
|
|
@@ -84994,18 +85094,18 @@ const _sfc_main$7 = {
|
|
|
84994
85094
|
}, [
|
|
84995
85095
|
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (i2) => {
|
|
84996
85096
|
return vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: i2 }, [
|
|
84997
|
-
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (
|
|
85097
|
+
(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(5, (n) => {
|
|
84998
85098
|
return vue.createBaseVNode("div", {
|
|
84999
85099
|
class: "toolbar-table-grid__item",
|
|
85000
|
-
key: `${i2}_${
|
|
85001
|
-
"data-cols":
|
|
85100
|
+
key: `${i2}_${n}`,
|
|
85101
|
+
"data-cols": n,
|
|
85002
85102
|
"data-rows": i2,
|
|
85003
85103
|
"data-item": "true",
|
|
85004
85104
|
ref_for: true,
|
|
85005
85105
|
ref_key: "tableGridItems",
|
|
85006
85106
|
ref: tableGridItems,
|
|
85007
|
-
onKeydown: vue.withModifiers((event) => handleKeyDown2(event,
|
|
85008
|
-
onClick: vue.withModifiers(($event) => handleClick2({ cols:
|
|
85107
|
+
onKeydown: vue.withModifiers((event) => handleKeyDown2(event, n, i2), ["prevent"]),
|
|
85108
|
+
onClick: vue.withModifiers(($event) => handleClick2({ cols: n, rows: i2 }), ["stop", "prevent"])
|
|
85009
85109
|
}, null, 40, _hoisted_1$6);
|
|
85010
85110
|
}), 64))
|
|
85011
85111
|
], 64);
|
|
@@ -86740,10 +86840,31 @@ class SuperToolbar extends EventEmitter2 {
|
|
|
86740
86840
|
__privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
|
|
86741
86841
|
return;
|
|
86742
86842
|
}
|
|
86843
|
+
const { state: state2 } = this.activeEditor;
|
|
86844
|
+
const selection = state2.selection;
|
|
86845
|
+
const selectionTrackedChanges = __privateMethod(this, _SuperToolbar_instances, enrichTrackedChanges_fn).call(this, collectTrackedChanges({ state: state2, from: selection.from, to: selection.to }));
|
|
86846
|
+
const hasTrackedChanges = selectionTrackedChanges.length > 0;
|
|
86847
|
+
const hasValidSelection = hasTrackedChanges;
|
|
86848
|
+
const canAcceptTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86849
|
+
editor: this.activeEditor,
|
|
86850
|
+
action: "accept",
|
|
86851
|
+
trackedChanges: selectionTrackedChanges
|
|
86852
|
+
});
|
|
86853
|
+
const canRejectTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86854
|
+
editor: this.activeEditor,
|
|
86855
|
+
action: "reject",
|
|
86856
|
+
trackedChanges: selectionTrackedChanges
|
|
86857
|
+
});
|
|
86743
86858
|
const marks = getActiveFormatting(this.activeEditor);
|
|
86744
86859
|
const inTable = isInTable$1(this.activeEditor.state);
|
|
86745
86860
|
this.toolbarItems.forEach((item) => {
|
|
86746
86861
|
item.resetDisabled();
|
|
86862
|
+
if (item.name.value === "acceptTrackedChangeBySelection") {
|
|
86863
|
+
item.setDisabled(!canAcceptTrackedChanges);
|
|
86864
|
+
}
|
|
86865
|
+
if (item.name.value === "rejectTrackedChangeOnSelection") {
|
|
86866
|
+
item.setDisabled(!canRejectTrackedChanges);
|
|
86867
|
+
}
|
|
86747
86868
|
if (item.name.value === "linkedStyles") {
|
|
86748
86869
|
if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {
|
|
86749
86870
|
return item.deactivate();
|
|
@@ -86916,6 +87037,19 @@ updateToolbarHistory_fn = function() {
|
|
|
86916
87037
|
this.redoDepth = redoDepth(this.activeEditor.state);
|
|
86917
87038
|
}
|
|
86918
87039
|
};
|
|
87040
|
+
enrichTrackedChanges_fn = function(trackedChanges = []) {
|
|
87041
|
+
if (!trackedChanges?.length) return trackedChanges;
|
|
87042
|
+
const store = this.superdoc?.commentsStore;
|
|
87043
|
+
if (!store?.getComment) return trackedChanges;
|
|
87044
|
+
return trackedChanges.map((change) => {
|
|
87045
|
+
const commentId = change.id;
|
|
87046
|
+
if (!commentId) return change;
|
|
87047
|
+
const storeComment = store.getComment(commentId);
|
|
87048
|
+
if (!storeComment) return change;
|
|
87049
|
+
const comment = typeof storeComment.getValues === "function" ? storeComment.getValues() : storeComment;
|
|
87050
|
+
return { ...change, comment };
|
|
87051
|
+
});
|
|
87052
|
+
};
|
|
86919
87053
|
runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback = false }, callback) {
|
|
86920
87054
|
if (!argument || !this.activeEditor) return;
|
|
86921
87055
|
let command2 = item.command;
|
|
@@ -87320,6 +87454,7 @@ async function getEditorContext(editor, event) {
|
|
|
87320
87454
|
state2.selection.$head.marks().forEach((mark) => activeMarks.push(mark.type.name));
|
|
87321
87455
|
}
|
|
87322
87456
|
const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete") || activeMarks.includes("trackFormat");
|
|
87457
|
+
const trackedChanges = event ? collectTrackedChangesForContext({ state: state2, pos, trackedChangeId }) : collectTrackedChanges({ state: state2, from: from2, to });
|
|
87323
87458
|
const cursorCoords = pos ? view.coordsAtPos(pos) : null;
|
|
87324
87459
|
const cursorPosition = cursorCoords ? {
|
|
87325
87460
|
x: cursorCoords.left,
|
|
@@ -87353,7 +87488,9 @@ async function getEditorContext(editor, event) {
|
|
|
87353
87488
|
event,
|
|
87354
87489
|
trigger: event ? "click" : "slash",
|
|
87355
87490
|
// Editor reference for advanced use cases
|
|
87356
|
-
editor
|
|
87491
|
+
editor,
|
|
87492
|
+
// Tracked change metadata
|
|
87493
|
+
trackedChanges
|
|
87357
87494
|
};
|
|
87358
87495
|
return context;
|
|
87359
87496
|
}
|
|
@@ -87450,6 +87587,14 @@ const shouldShowItem = (item, context) => {
|
|
|
87450
87587
|
}
|
|
87451
87588
|
}
|
|
87452
87589
|
};
|
|
87590
|
+
const canPerformTrackedChange = (context, action) => {
|
|
87591
|
+
if (!context?.editor) return true;
|
|
87592
|
+
return isTrackedChangeActionAllowed({
|
|
87593
|
+
editor: context.editor,
|
|
87594
|
+
action,
|
|
87595
|
+
trackedChanges: context.trackedChanges ?? []
|
|
87596
|
+
});
|
|
87597
|
+
};
|
|
87453
87598
|
function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
87454
87599
|
const { selectedText, editor } = context;
|
|
87455
87600
|
if (arguments.length === 1 && editor?.options?.slashMenuConfig) {
|
|
@@ -87507,7 +87652,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87507
87652
|
},
|
|
87508
87653
|
showWhen: (context2) => {
|
|
87509
87654
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87510
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87655
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "accept");
|
|
87511
87656
|
}
|
|
87512
87657
|
},
|
|
87513
87658
|
{
|
|
@@ -87524,7 +87669,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87524
87669
|
},
|
|
87525
87670
|
showWhen: (context2) => {
|
|
87526
87671
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87527
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87672
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "reject");
|
|
87528
87673
|
}
|
|
87529
87674
|
}
|
|
87530
87675
|
]
|
|
@@ -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
|
/**
|
|
@@ -49337,7 +49337,7 @@ const markInsertion = ({ tr, from: from2, to, user, date }) => {
|
|
|
49337
49337
|
});
|
|
49338
49338
|
return insertionMark;
|
|
49339
49339
|
};
|
|
49340
|
-
const markDeletion = ({ tr, from: from2, to, user, date }) => {
|
|
49340
|
+
const markDeletion = ({ tr, from: from2, to, user, date, id: providedId }) => {
|
|
49341
49341
|
let trackedMark = findTrackedMarkBetween({
|
|
49342
49342
|
tr,
|
|
49343
49343
|
from: from2,
|
|
@@ -49346,7 +49346,9 @@ const markDeletion = ({ tr, from: from2, to, user, date }) => {
|
|
|
49346
49346
|
attrs: { authorEmail: user.email }
|
|
49347
49347
|
});
|
|
49348
49348
|
let id;
|
|
49349
|
-
if (
|
|
49349
|
+
if (providedId) {
|
|
49350
|
+
id = providedId;
|
|
49351
|
+
} else if (trackedMark) {
|
|
49350
49352
|
id = trackedMark.mark.attrs.id;
|
|
49351
49353
|
} else {
|
|
49352
49354
|
id = v4();
|
|
@@ -50618,7 +50620,8 @@ const replaceStep = ({ state: state2, tr, step, newTr, map: map22, user, date, o
|
|
|
50618
50620
|
from: step.from,
|
|
50619
50621
|
to: step.to,
|
|
50620
50622
|
user,
|
|
50621
|
-
date
|
|
50623
|
+
date,
|
|
50624
|
+
id: meta.insertedMark?.attrs?.id
|
|
50622
50625
|
});
|
|
50623
50626
|
meta.deletionNodes = deletionNodes;
|
|
50624
50627
|
meta.deletionMark = deletionMark2;
|
|
@@ -52546,7 +52549,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
52546
52549
|
customUpdatedFiles: {},
|
|
52547
52550
|
isHeaderFooterChanged: false,
|
|
52548
52551
|
isCustomXmlChanged: false,
|
|
52549
|
-
focusTarget: null
|
|
52552
|
+
focusTarget: null,
|
|
52553
|
+
permissionResolver: null
|
|
52550
52554
|
});
|
|
52551
52555
|
__privateMethod$1(this, _Editor_instances, initContainerElement_fn).call(this, options);
|
|
52552
52556
|
__privateMethod$1(this, _Editor_instances, checkHeadless_fn).call(this, options);
|
|
@@ -53308,7 +53312,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
53308
53312
|
* @returns {Object | void} Migration results
|
|
53309
53313
|
*/
|
|
53310
53314
|
processCollaborationMigrations() {
|
|
53311
|
-
console.debug("[checkVersionMigrations] Current editor version", "0.
|
|
53315
|
+
console.debug("[checkVersionMigrations] Current editor version", "0.24.0");
|
|
53312
53316
|
if (!this.options.ydoc) return;
|
|
53313
53317
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
53314
53318
|
let docVersion = metaMap.get("version");
|
|
@@ -67304,11 +67308,105 @@ const TrackFormat = Mark2.create({
|
|
|
67304
67308
|
return ["span", Attribute2.mergeAttributes(this.options.htmlAttributes, htmlAttributes), 0];
|
|
67305
67309
|
}
|
|
67306
67310
|
});
|
|
67311
|
+
const PERMISSION_MAP = {
|
|
67312
|
+
accept: {
|
|
67313
|
+
own: "RESOLVE_OWN",
|
|
67314
|
+
other: "RESOLVE_OTHER"
|
|
67315
|
+
},
|
|
67316
|
+
reject: {
|
|
67317
|
+
own: "REJECT_OWN",
|
|
67318
|
+
other: "REJECT_OTHER"
|
|
67319
|
+
}
|
|
67320
|
+
};
|
|
67321
|
+
const buildKey = (change) => {
|
|
67322
|
+
const id = change.mark?.attrs?.id ?? `${change.from}-${change.to}`;
|
|
67323
|
+
return `${id}:${change.mark?.type?.name ?? "unknown"}`;
|
|
67324
|
+
};
|
|
67325
|
+
const mergeChange = (bucket, change) => {
|
|
67326
|
+
const key2 = buildKey(change);
|
|
67327
|
+
const existing = bucket.get(key2);
|
|
67328
|
+
if (existing) {
|
|
67329
|
+
existing.from = Math.min(existing.from, change.from);
|
|
67330
|
+
existing.to = Math.max(existing.to, change.to);
|
|
67331
|
+
existing.segments.push({ from: change.from, to: change.to });
|
|
67332
|
+
} else {
|
|
67333
|
+
bucket.set(key2, {
|
|
67334
|
+
id: change.mark?.attrs?.id ?? null,
|
|
67335
|
+
type: change.mark?.type?.name ?? null,
|
|
67336
|
+
attrs: { ...change.mark?.attrs ?? {} },
|
|
67337
|
+
from: change.from,
|
|
67338
|
+
to: change.to,
|
|
67339
|
+
segments: [{ from: change.from, to: change.to }]
|
|
67340
|
+
});
|
|
67341
|
+
}
|
|
67342
|
+
};
|
|
67343
|
+
const collectTrackedChanges = ({ state: state2, from: from2, to }) => {
|
|
67344
|
+
if (!state2) return [];
|
|
67345
|
+
const collapsed = from2 === to;
|
|
67346
|
+
const changes = getTrackChanges(state2);
|
|
67347
|
+
if (!changes?.length) return [];
|
|
67348
|
+
const bucket = /* @__PURE__ */ new Map();
|
|
67349
|
+
changes.forEach((change) => {
|
|
67350
|
+
const overlaps = collapsed ? change.from <= from2 && change.to >= from2 : change.from < to && change.to > from2;
|
|
67351
|
+
if (!overlaps) return;
|
|
67352
|
+
mergeChange(bucket, change);
|
|
67353
|
+
});
|
|
67354
|
+
return Array.from(bucket.values());
|
|
67355
|
+
};
|
|
67356
|
+
const derivePermissionKey = ({ action, isOwn }) => {
|
|
67357
|
+
const mapping = PERMISSION_MAP[action];
|
|
67358
|
+
if (!mapping) return null;
|
|
67359
|
+
return isOwn ? mapping.own : mapping.other;
|
|
67360
|
+
};
|
|
67361
|
+
const resolveChanges = (editor) => {
|
|
67362
|
+
if (!editor) return { role: "editor", isInternal: false, currentUser: null, resolver: null };
|
|
67363
|
+
const role = editor.options?.role ?? "editor";
|
|
67364
|
+
const isInternal = Boolean(editor.options?.isInternal);
|
|
67365
|
+
const currentUser = editor.options?.user ?? null;
|
|
67366
|
+
const resolver = editor.options?.permissionResolver;
|
|
67367
|
+
return { role, isInternal, currentUser, resolver };
|
|
67368
|
+
};
|
|
67369
|
+
const isTrackedChangeActionAllowed = ({ editor, action, trackedChanges }) => {
|
|
67370
|
+
if (!trackedChanges?.length) return true;
|
|
67371
|
+
const { role, isInternal, currentUser, resolver } = resolveChanges(editor);
|
|
67372
|
+
if (typeof resolver !== "function") return true;
|
|
67373
|
+
const currentEmail = currentUser?.email ?? null;
|
|
67374
|
+
return trackedChanges.every((change) => {
|
|
67375
|
+
const authorEmail = change.attrs?.authorEmail ?? null;
|
|
67376
|
+
const isOwn = Boolean(currentEmail && authorEmail && currentEmail === authorEmail);
|
|
67377
|
+
const permission = derivePermissionKey({ action, isOwn });
|
|
67378
|
+
if (!permission) return true;
|
|
67379
|
+
const payload = {
|
|
67380
|
+
permission,
|
|
67381
|
+
role,
|
|
67382
|
+
isInternal,
|
|
67383
|
+
trackedChange: {
|
|
67384
|
+
id: change.id,
|
|
67385
|
+
type: change.type,
|
|
67386
|
+
attrs: change.attrs,
|
|
67387
|
+
from: change.from,
|
|
67388
|
+
to: change.to,
|
|
67389
|
+
segments: change.segments,
|
|
67390
|
+
commentId: change.id
|
|
67391
|
+
},
|
|
67392
|
+
comment: change.comment ?? null
|
|
67393
|
+
};
|
|
67394
|
+
return resolver(payload) !== false;
|
|
67395
|
+
});
|
|
67396
|
+
};
|
|
67397
|
+
const collectTrackedChangesForContext = ({ state: state2, pos, trackedChangeId }) => {
|
|
67398
|
+
if (pos == null) return [];
|
|
67399
|
+
const changes = collectTrackedChanges({ state: state2, from: pos, to: pos });
|
|
67400
|
+
if (!trackedChangeId) return changes;
|
|
67401
|
+
return changes.filter((change) => change.id === trackedChangeId);
|
|
67402
|
+
};
|
|
67307
67403
|
const TrackChanges = Extension.create({
|
|
67308
67404
|
name: "trackChanges",
|
|
67309
67405
|
addCommands() {
|
|
67310
67406
|
return {
|
|
67311
|
-
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67407
|
+
acceptTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67408
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67409
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "accept", trackedChanges })) return false;
|
|
67312
67410
|
let { tr, doc: doc2 } = state2;
|
|
67313
67411
|
tr.setMeta("acceptReject", true);
|
|
67314
67412
|
const map22 = new Mapping();
|
|
@@ -67346,7 +67444,9 @@ const TrackChanges = Extension.create({
|
|
|
67346
67444
|
}
|
|
67347
67445
|
return true;
|
|
67348
67446
|
},
|
|
67349
|
-
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch }) => {
|
|
67447
|
+
rejectTrackedChangesBetween: (from2, to) => ({ state: state2, dispatch, editor }) => {
|
|
67448
|
+
const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
|
|
67449
|
+
if (!isTrackedChangeActionAllowed({ editor, action: "reject", trackedChanges })) return false;
|
|
67350
67450
|
const { tr, doc: doc2 } = state2;
|
|
67351
67451
|
tr.setMeta("acceptReject", true);
|
|
67352
67452
|
const map22 = new Mapping();
|
|
@@ -83769,7 +83869,7 @@ var __accessCheck = (obj, member, msg2) => member.has(obj) || __typeError("Canno
|
|
|
83769
83869
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
83770
83870
|
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
83871
|
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;
|
|
83872
|
+
var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, enrichTrackedChanges_fn, runCommandWithArgumentOnly_fn;
|
|
83773
83873
|
var eventemitter3 = { exports: {} };
|
|
83774
83874
|
var hasRequiredEventemitter3;
|
|
83775
83875
|
function requireEventemitter3() {
|
|
@@ -83821,7 +83921,7 @@ function requireEventemitter3() {
|
|
|
83821
83921
|
var evt = prefix2 ? prefix2 + event : event, handlers2 = this._events[evt];
|
|
83822
83922
|
if (!handlers2) return [];
|
|
83823
83923
|
if (handlers2.fn) return [handlers2.fn];
|
|
83824
|
-
for (var i2 = 0,
|
|
83924
|
+
for (var i2 = 0, l3 = handlers2.length, ee = new Array(l3); i2 < l3; i2++) {
|
|
83825
83925
|
ee[i2] = handlers2[i2].fn;
|
|
83826
83926
|
}
|
|
83827
83927
|
return ee;
|
|
@@ -84977,18 +85077,18 @@ const _sfc_main$7 = {
|
|
|
84977
85077
|
}, [
|
|
84978
85078
|
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (i2) => {
|
|
84979
85079
|
return openBlock(), createElementBlock(Fragment$1, { key: i2 }, [
|
|
84980
|
-
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (
|
|
85080
|
+
(openBlock(), createElementBlock(Fragment$1, null, renderList(5, (n) => {
|
|
84981
85081
|
return createBaseVNode("div", {
|
|
84982
85082
|
class: "toolbar-table-grid__item",
|
|
84983
|
-
key: `${i2}_${
|
|
84984
|
-
"data-cols":
|
|
85083
|
+
key: `${i2}_${n}`,
|
|
85084
|
+
"data-cols": n,
|
|
84985
85085
|
"data-rows": i2,
|
|
84986
85086
|
"data-item": "true",
|
|
84987
85087
|
ref_for: true,
|
|
84988
85088
|
ref_key: "tableGridItems",
|
|
84989
85089
|
ref: tableGridItems,
|
|
84990
|
-
onKeydown: withModifiers((event) => handleKeyDown2(event,
|
|
84991
|
-
onClick: withModifiers(($event) => handleClick2({ cols:
|
|
85090
|
+
onKeydown: withModifiers((event) => handleKeyDown2(event, n, i2), ["prevent"]),
|
|
85091
|
+
onClick: withModifiers(($event) => handleClick2({ cols: n, rows: i2 }), ["stop", "prevent"])
|
|
84992
85092
|
}, null, 40, _hoisted_1$6);
|
|
84993
85093
|
}), 64))
|
|
84994
85094
|
], 64);
|
|
@@ -86723,10 +86823,31 @@ class SuperToolbar extends EventEmitter2 {
|
|
|
86723
86823
|
__privateMethod(this, _SuperToolbar_instances, deactivateAll_fn).call(this);
|
|
86724
86824
|
return;
|
|
86725
86825
|
}
|
|
86826
|
+
const { state: state2 } = this.activeEditor;
|
|
86827
|
+
const selection = state2.selection;
|
|
86828
|
+
const selectionTrackedChanges = __privateMethod(this, _SuperToolbar_instances, enrichTrackedChanges_fn).call(this, collectTrackedChanges({ state: state2, from: selection.from, to: selection.to }));
|
|
86829
|
+
const hasTrackedChanges = selectionTrackedChanges.length > 0;
|
|
86830
|
+
const hasValidSelection = hasTrackedChanges;
|
|
86831
|
+
const canAcceptTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86832
|
+
editor: this.activeEditor,
|
|
86833
|
+
action: "accept",
|
|
86834
|
+
trackedChanges: selectionTrackedChanges
|
|
86835
|
+
});
|
|
86836
|
+
const canRejectTrackedChanges = hasValidSelection && isTrackedChangeActionAllowed({
|
|
86837
|
+
editor: this.activeEditor,
|
|
86838
|
+
action: "reject",
|
|
86839
|
+
trackedChanges: selectionTrackedChanges
|
|
86840
|
+
});
|
|
86726
86841
|
const marks = getActiveFormatting(this.activeEditor);
|
|
86727
86842
|
const inTable = isInTable$1(this.activeEditor.state);
|
|
86728
86843
|
this.toolbarItems.forEach((item) => {
|
|
86729
86844
|
item.resetDisabled();
|
|
86845
|
+
if (item.name.value === "acceptTrackedChangeBySelection") {
|
|
86846
|
+
item.setDisabled(!canAcceptTrackedChanges);
|
|
86847
|
+
}
|
|
86848
|
+
if (item.name.value === "rejectTrackedChangeOnSelection") {
|
|
86849
|
+
item.setDisabled(!canRejectTrackedChanges);
|
|
86850
|
+
}
|
|
86730
86851
|
if (item.name.value === "linkedStyles") {
|
|
86731
86852
|
if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {
|
|
86732
86853
|
return item.deactivate();
|
|
@@ -86899,6 +87020,19 @@ updateToolbarHistory_fn = function() {
|
|
|
86899
87020
|
this.redoDepth = redoDepth(this.activeEditor.state);
|
|
86900
87021
|
}
|
|
86901
87022
|
};
|
|
87023
|
+
enrichTrackedChanges_fn = function(trackedChanges = []) {
|
|
87024
|
+
if (!trackedChanges?.length) return trackedChanges;
|
|
87025
|
+
const store = this.superdoc?.commentsStore;
|
|
87026
|
+
if (!store?.getComment) return trackedChanges;
|
|
87027
|
+
return trackedChanges.map((change) => {
|
|
87028
|
+
const commentId = change.id;
|
|
87029
|
+
if (!commentId) return change;
|
|
87030
|
+
const storeComment = store.getComment(commentId);
|
|
87031
|
+
if (!storeComment) return change;
|
|
87032
|
+
const comment = typeof storeComment.getValues === "function" ? storeComment.getValues() : storeComment;
|
|
87033
|
+
return { ...change, comment };
|
|
87034
|
+
});
|
|
87035
|
+
};
|
|
86902
87036
|
runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback = false }, callback) {
|
|
86903
87037
|
if (!argument || !this.activeEditor) return;
|
|
86904
87038
|
let command2 = item.command;
|
|
@@ -87303,6 +87437,7 @@ async function getEditorContext(editor, event) {
|
|
|
87303
87437
|
state2.selection.$head.marks().forEach((mark) => activeMarks.push(mark.type.name));
|
|
87304
87438
|
}
|
|
87305
87439
|
const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete") || activeMarks.includes("trackFormat");
|
|
87440
|
+
const trackedChanges = event ? collectTrackedChangesForContext({ state: state2, pos, trackedChangeId }) : collectTrackedChanges({ state: state2, from: from2, to });
|
|
87306
87441
|
const cursorCoords = pos ? view.coordsAtPos(pos) : null;
|
|
87307
87442
|
const cursorPosition = cursorCoords ? {
|
|
87308
87443
|
x: cursorCoords.left,
|
|
@@ -87336,7 +87471,9 @@ async function getEditorContext(editor, event) {
|
|
|
87336
87471
|
event,
|
|
87337
87472
|
trigger: event ? "click" : "slash",
|
|
87338
87473
|
// Editor reference for advanced use cases
|
|
87339
|
-
editor
|
|
87474
|
+
editor,
|
|
87475
|
+
// Tracked change metadata
|
|
87476
|
+
trackedChanges
|
|
87340
87477
|
};
|
|
87341
87478
|
return context;
|
|
87342
87479
|
}
|
|
@@ -87433,6 +87570,14 @@ const shouldShowItem = (item, context) => {
|
|
|
87433
87570
|
}
|
|
87434
87571
|
}
|
|
87435
87572
|
};
|
|
87573
|
+
const canPerformTrackedChange = (context, action) => {
|
|
87574
|
+
if (!context?.editor) return true;
|
|
87575
|
+
return isTrackedChangeActionAllowed({
|
|
87576
|
+
editor: context.editor,
|
|
87577
|
+
action,
|
|
87578
|
+
trackedChanges: context.trackedChanges ?? []
|
|
87579
|
+
});
|
|
87580
|
+
};
|
|
87436
87581
|
function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
87437
87582
|
const { selectedText, editor } = context;
|
|
87438
87583
|
if (arguments.length === 1 && editor?.options?.slashMenuConfig) {
|
|
@@ -87490,7 +87635,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87490
87635
|
},
|
|
87491
87636
|
showWhen: (context2) => {
|
|
87492
87637
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87493
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87638
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "accept");
|
|
87494
87639
|
}
|
|
87495
87640
|
},
|
|
87496
87641
|
{
|
|
@@ -87507,7 +87652,7 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
|
|
|
87507
87652
|
},
|
|
87508
87653
|
showWhen: (context2) => {
|
|
87509
87654
|
const { trigger: trigger2, isTrackedChange } = context2;
|
|
87510
|
-
return trigger2 === TRIGGERS.click && isTrackedChange;
|
|
87655
|
+
return trigger2 === TRIGGERS.click && isTrackedChange && canPerformTrackedChange(context2, "reject");
|
|
87511
87656
|
}
|
|
87512
87657
|
}
|
|
87513
87658
|
]
|
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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"}
|