pptx-react-viewer 2.7.0 → 2.8.0
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/CHANGELOG.md +4 -0
- package/dist/{AiChatPanel-G6DKXSM3.js → AiChatPanel-GTCK35EI.js} +22 -22
- package/dist/AiChatPanel-GTCK35EI.js.br +0 -0
- package/dist/AiChatPanel-GTCK35EI.js.gz +0 -0
- package/dist/{AiChatPanel-J5IGSCYA.mjs → AiChatPanel-UXPHPUQV.mjs} +3 -3
- package/dist/AiChatPanel-UXPHPUQV.mjs.br +0 -0
- package/dist/AiChatPanel-UXPHPUQV.mjs.gz +0 -0
- package/dist/{Model3DScene-ID6CQKEJ.mjs → Model3DScene-HDUHTKPF.mjs} +1 -1
- package/dist/Model3DScene-HDUHTKPF.mjs.br +0 -0
- package/dist/Model3DScene-HDUHTKPF.mjs.gz +0 -0
- package/dist/{Model3DScene-S7LKZ6IA.js → Model3DScene-USPBP3KE.js} +2 -2
- package/dist/Model3DScene-USPBP3KE.js.br +0 -0
- package/dist/Model3DScene-USPBP3KE.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-V5H6MXYW.mjs → SurfaceChart3DScene-7SLM73XC.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-V5H6MXYW.mjs.br → SurfaceChart3DScene-7SLM73XC.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-7SLM73XC.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-XSJXJM6H.js → SurfaceChart3DScene-NZ3K5CC6.js} +2 -2
- package/dist/SurfaceChart3DScene-NZ3K5CC6.js.br +0 -0
- package/dist/SurfaceChart3DScene-NZ3K5CC6.js.gz +0 -0
- package/dist/{chunk-IGKLB7NQ.mjs → chunk-AHPZGUL7.mjs} +2 -2
- package/dist/chunk-AHPZGUL7.mjs.br +0 -0
- package/dist/chunk-AHPZGUL7.mjs.gz +0 -0
- package/dist/{chunk-4KMTZLNS.js → chunk-KGXDCDA5.js} +320 -327
- package/dist/chunk-KGXDCDA5.js.br +0 -0
- package/dist/chunk-KGXDCDA5.js.gz +0 -0
- package/dist/{chunk-2LOBDOTK.js → chunk-MZJMOEEX.js} +155 -66
- package/dist/chunk-MZJMOEEX.js.br +0 -0
- package/dist/chunk-MZJMOEEX.js.gz +0 -0
- package/dist/{chunk-YUHEJWUN.mjs → chunk-OIH753PJ.mjs} +7 -14
- package/dist/chunk-OIH753PJ.mjs.br +0 -0
- package/dist/chunk-OIH753PJ.mjs.gz +0 -0
- package/dist/{chunk-SOLHDKNK.mjs → chunk-PVCUYPU7.mjs} +1 -1
- package/dist/chunk-PVCUYPU7.mjs.br +0 -0
- package/dist/chunk-PVCUYPU7.mjs.gz +0 -0
- package/dist/{chunk-B4XJTZR4.js → chunk-SMW4QYGK.js} +236 -236
- package/dist/chunk-SMW4QYGK.js.br +0 -0
- package/dist/chunk-SMW4QYGK.js.gz +0 -0
- package/dist/{chunk-GLQFRVAN.js → chunk-SOBKYMMR.js} +988 -961
- package/dist/chunk-SOBKYMMR.js.br +0 -0
- package/dist/chunk-SOBKYMMR.js.gz +0 -0
- package/dist/{chunk-Y4EB65WB.mjs → chunk-TJ5QMUUJ.mjs} +152 -125
- package/dist/chunk-TJ5QMUUJ.mjs.br +0 -0
- package/dist/chunk-TJ5QMUUJ.mjs.gz +0 -0
- package/dist/{chunk-6C4UY7GX.js → chunk-VFLBLJ4G.js} +3 -3
- package/dist/chunk-VFLBLJ4G.js.br +0 -0
- package/dist/chunk-VFLBLJ4G.js.gz +0 -0
- package/dist/{chunk-WH46JCNF.mjs → chunk-VH2QF5CT.mjs} +154 -67
- package/dist/chunk-VH2QF5CT.mjs.br +0 -0
- package/dist/chunk-VH2QF5CT.mjs.gz +0 -0
- package/dist/index.js +34 -34
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +78 -78
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +3 -3
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.js +21 -21
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-G6DKXSM3.js.br +0 -0
- package/dist/AiChatPanel-G6DKXSM3.js.gz +0 -0
- package/dist/AiChatPanel-J5IGSCYA.mjs.br +0 -0
- package/dist/AiChatPanel-J5IGSCYA.mjs.gz +0 -0
- package/dist/Model3DScene-ID6CQKEJ.mjs.br +0 -0
- package/dist/Model3DScene-ID6CQKEJ.mjs.gz +0 -0
- package/dist/Model3DScene-S7LKZ6IA.js.br +0 -0
- package/dist/Model3DScene-S7LKZ6IA.js.gz +0 -0
- package/dist/SurfaceChart3DScene-V5H6MXYW.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-XSJXJM6H.js.br +0 -0
- package/dist/SurfaceChart3DScene-XSJXJM6H.js.gz +0 -0
- package/dist/chunk-2LOBDOTK.js.br +0 -0
- package/dist/chunk-2LOBDOTK.js.gz +0 -0
- package/dist/chunk-4KMTZLNS.js.br +0 -0
- package/dist/chunk-4KMTZLNS.js.gz +0 -0
- package/dist/chunk-6C4UY7GX.js.br +0 -0
- package/dist/chunk-6C4UY7GX.js.gz +0 -0
- package/dist/chunk-B4XJTZR4.js.br +0 -0
- package/dist/chunk-B4XJTZR4.js.gz +0 -0
- package/dist/chunk-GLQFRVAN.js.br +0 -0
- package/dist/chunk-GLQFRVAN.js.gz +0 -0
- package/dist/chunk-IGKLB7NQ.mjs.br +0 -0
- package/dist/chunk-IGKLB7NQ.mjs.gz +0 -0
- package/dist/chunk-SOLHDKNK.mjs.br +0 -0
- package/dist/chunk-SOLHDKNK.mjs.gz +0 -0
- package/dist/chunk-WH46JCNF.mjs.br +0 -0
- package/dist/chunk-WH46JCNF.mjs.gz +0 -0
- package/dist/chunk-Y4EB65WB.mjs.br +0 -0
- package/dist/chunk-Y4EB65WB.mjs.gz +0 -0
- package/dist/chunk-YUHEJWUN.mjs.br +0 -0
- package/dist/chunk-YUHEJWUN.mjs.gz +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -19829,6 +19829,13 @@ function extractChildBehaviourDurationMs(cTn, toArray2) {
|
|
|
19829
19829
|
}
|
|
19830
19830
|
return longest;
|
|
19831
19831
|
}
|
|
19832
|
+
function isInteractiveSequence(seq) {
|
|
19833
|
+
const cTn = seq["p:cTn"];
|
|
19834
|
+
if (!cTn || String(cTn["@_nodeType"] || "") === "mainSeq") {
|
|
19835
|
+
return false;
|
|
19836
|
+
}
|
|
19837
|
+
return extractTriggerShapeId(cTn) !== void 0;
|
|
19838
|
+
}
|
|
19832
19839
|
var PptxNativeAnimationService = class {
|
|
19833
19840
|
/**
|
|
19834
19841
|
* Parse native OOXML animations from a slide's timing tree.
|
|
@@ -20029,6 +20036,9 @@ var PptxNativeAnimationService = class {
|
|
|
20029
20036
|
);
|
|
20030
20037
|
}
|
|
20031
20038
|
for (const sequence of sequences) {
|
|
20039
|
+
if (isInteractiveSequence(sequence)) {
|
|
20040
|
+
continue;
|
|
20041
|
+
}
|
|
20032
20042
|
this.walkTimingTree(sequence, animations, trigger, group);
|
|
20033
20043
|
}
|
|
20034
20044
|
for (const excl of exclusives) {
|
|
@@ -20054,6 +20064,9 @@ var PptxNativeAnimationService = class {
|
|
|
20054
20064
|
);
|
|
20055
20065
|
}
|
|
20056
20066
|
for (const sequence of directSequences) {
|
|
20067
|
+
if (isInteractiveSequence(sequence)) {
|
|
20068
|
+
continue;
|
|
20069
|
+
}
|
|
20057
20070
|
this.walkTimingTree(sequence, animations, currentTrigger, group);
|
|
20058
20071
|
}
|
|
20059
20072
|
}
|
|
@@ -20157,6 +20170,36 @@ var PptxNativeAnimationService = class {
|
|
|
20157
20170
|
}
|
|
20158
20171
|
return void 0;
|
|
20159
20172
|
}
|
|
20173
|
+
/**
|
|
20174
|
+
* Collect every interactive `p:seq` reachable from `node`.
|
|
20175
|
+
*
|
|
20176
|
+
* Interactive sequences are normally siblings of the main sequence under the
|
|
20177
|
+
* root `p:par`, but a deck may nest one deeper. The generic walk skips every
|
|
20178
|
+
* sequence {@link isInteractiveSequence} matches, so this collector has to
|
|
20179
|
+
* reach exactly the same set or those effects would be dropped entirely.
|
|
20180
|
+
* Collection stops at an interactive sequence: its own subtree is walked by
|
|
20181
|
+
* {@link parseInteractiveSequences} under that sequence's trigger shape.
|
|
20182
|
+
*/
|
|
20183
|
+
collectInteractiveSequences(node, found) {
|
|
20184
|
+
const containers = [];
|
|
20185
|
+
const cTn = node["p:cTn"];
|
|
20186
|
+
const childTnList = cTn?.["p:childTnLst"];
|
|
20187
|
+
if (childTnList) {
|
|
20188
|
+
containers.push(
|
|
20189
|
+
...ensureArray5(childTnList["p:par"]),
|
|
20190
|
+
...ensureArray5(childTnList["p:seq"]),
|
|
20191
|
+
...ensureArray5(childTnList["p:excl"])
|
|
20192
|
+
);
|
|
20193
|
+
}
|
|
20194
|
+
containers.push(...ensureArray5(node["p:par"]), ...ensureArray5(node["p:seq"]));
|
|
20195
|
+
for (const container of containers) {
|
|
20196
|
+
if (isInteractiveSequence(container)) {
|
|
20197
|
+
found.push(container);
|
|
20198
|
+
continue;
|
|
20199
|
+
}
|
|
20200
|
+
this.collectInteractiveSequences(container, found);
|
|
20201
|
+
}
|
|
20202
|
+
}
|
|
20160
20203
|
/**
|
|
20161
20204
|
* Parse interactive sequences from the root `p:par` node.
|
|
20162
20205
|
*
|
|
@@ -20167,25 +20210,11 @@ var PptxNativeAnimationService = class {
|
|
|
20167
20210
|
* See ISO/IEC 29500-1 S19.5.60 (CT_TLTimeNodeSequence).
|
|
20168
20211
|
*/
|
|
20169
20212
|
parseInteractiveSequences(rootPar, animations) {
|
|
20170
|
-
const
|
|
20171
|
-
|
|
20172
|
-
return;
|
|
20173
|
-
}
|
|
20174
|
-
const childTnList = rootCTn["p:childTnLst"];
|
|
20175
|
-
if (!childTnList) {
|
|
20176
|
-
return;
|
|
20177
|
-
}
|
|
20178
|
-
const sequences = ensureArray5(childTnList["p:seq"]);
|
|
20213
|
+
const sequences = [];
|
|
20214
|
+
this.collectInteractiveSequences(rootPar, sequences);
|
|
20179
20215
|
for (const seq of sequences) {
|
|
20180
20216
|
const seqCTn = seq["p:cTn"];
|
|
20181
|
-
|
|
20182
|
-
continue;
|
|
20183
|
-
}
|
|
20184
|
-
const nodeType = String(seqCTn["@_nodeType"] || "");
|
|
20185
|
-
if (nodeType === "mainSeq") {
|
|
20186
|
-
continue;
|
|
20187
|
-
}
|
|
20188
|
-
const triggerShapeId = extractTriggerShapeId(seqCTn);
|
|
20217
|
+
const triggerShapeId = seqCTn ? extractTriggerShapeId(seqCTn) : void 0;
|
|
20189
20218
|
if (!triggerShapeId) {
|
|
20190
20219
|
continue;
|
|
20191
20220
|
}
|
|
@@ -98273,6 +98302,10 @@ function interpolateOutline(from, to, t) {
|
|
|
98273
98302
|
return parts.join(" ");
|
|
98274
98303
|
}
|
|
98275
98304
|
var MORPH_EASING = "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
98305
|
+
var MORPH_FADE_OUT_HOLD_PERCENT = 4;
|
|
98306
|
+
var MORPH_FADE_OUT_END_PERCENT = 23;
|
|
98307
|
+
var MORPH_FADE_IN_START_PERCENT = 42;
|
|
98308
|
+
var MORPH_FADE_IN_EASING = "cubic-bezier(0, 0, 0.35, 1)";
|
|
98276
98309
|
var PROXIMITY_THRESHOLD = 300;
|
|
98277
98310
|
var PROXIMITY_SIZE_RATIO_LIMIT = 2;
|
|
98278
98311
|
var GEOMETRY_MORPH_STEPS = 8;
|
|
@@ -98334,6 +98367,21 @@ ${body}
|
|
|
98334
98367
|
keyframes
|
|
98335
98368
|
};
|
|
98336
98369
|
}
|
|
98370
|
+
function getElementMorphName(element) {
|
|
98371
|
+
if (element.name) {
|
|
98372
|
+
const name = element.name.trim();
|
|
98373
|
+
if (name.startsWith("!!")) {
|
|
98374
|
+
return name;
|
|
98375
|
+
}
|
|
98376
|
+
}
|
|
98377
|
+
if (hasTextProperties(element) && element.text) {
|
|
98378
|
+
const text2 = element.text.trim();
|
|
98379
|
+
if (text2.startsWith("!!")) {
|
|
98380
|
+
return text2;
|
|
98381
|
+
}
|
|
98382
|
+
}
|
|
98383
|
+
return void 0;
|
|
98384
|
+
}
|
|
98337
98385
|
function groupChildren(element) {
|
|
98338
98386
|
if (element.type !== "group") {
|
|
98339
98387
|
return void 0;
|
|
@@ -98359,34 +98407,42 @@ function toAbsolute(child22, offsetX, offsetY) {
|
|
|
98359
98407
|
}
|
|
98360
98408
|
return { ...child22, x: child22.x + offsetX, y: child22.y + offsetY };
|
|
98361
98409
|
}
|
|
98362
|
-
function
|
|
98410
|
+
function sameBox(a, b) {
|
|
98411
|
+
return Math.abs(a.x - b.x) <= 0.5 && Math.abs(a.y - b.y) <= 0.5 && Math.abs(a.width - b.width) <= 0.5 && Math.abs(a.height - b.height) <= 0.5;
|
|
98412
|
+
}
|
|
98413
|
+
function correspondingGroup(group, candidates) {
|
|
98414
|
+
const morphName = getElementMorphName(group);
|
|
98415
|
+
return candidates.find((candidate) => {
|
|
98416
|
+
if (candidate.type !== "group") {
|
|
98417
|
+
return false;
|
|
98418
|
+
}
|
|
98419
|
+
if (morphName !== void 0 && getElementMorphName(candidate) === morphName) {
|
|
98420
|
+
return true;
|
|
98421
|
+
}
|
|
98422
|
+
if (group.name && candidate.name === group.name) {
|
|
98423
|
+
return true;
|
|
98424
|
+
}
|
|
98425
|
+
return sameBox(group, candidate);
|
|
98426
|
+
});
|
|
98427
|
+
}
|
|
98428
|
+
function flattenMorphElements(elements, counterpart, offsetX = 0, offsetY = 0) {
|
|
98363
98429
|
const out = [];
|
|
98364
98430
|
for (const element of elements) {
|
|
98365
98431
|
const children8 = groupChildren(element);
|
|
98366
98432
|
if (children8 && containsMorphNamedDescendant(element)) {
|
|
98367
|
-
|
|
98368
|
-
|
|
98433
|
+
const twin = correspondingGroup(element, counterpart);
|
|
98434
|
+
const twinChildren = twin ? groupChildren(twin) ?? [] : void 0;
|
|
98435
|
+
if (twinChildren) {
|
|
98436
|
+
out.push(
|
|
98437
|
+
...flattenMorphElements(children8, twinChildren, offsetX + element.x, offsetY + element.y)
|
|
98438
|
+
);
|
|
98439
|
+
continue;
|
|
98440
|
+
}
|
|
98369
98441
|
}
|
|
98370
98442
|
out.push(toAbsolute(element, offsetX, offsetY));
|
|
98371
98443
|
}
|
|
98372
98444
|
return out;
|
|
98373
98445
|
}
|
|
98374
|
-
var SAME_BOX_TOLERANCE_PX = 0.5;
|
|
98375
|
-
function getElementMorphName(element) {
|
|
98376
|
-
if (element.name) {
|
|
98377
|
-
const name = element.name.trim();
|
|
98378
|
-
if (name.startsWith("!!")) {
|
|
98379
|
-
return name;
|
|
98380
|
-
}
|
|
98381
|
-
}
|
|
98382
|
-
if (hasTextProperties(element) && element.text) {
|
|
98383
|
-
const text2 = element.text.trim();
|
|
98384
|
-
if (text2.startsWith("!!")) {
|
|
98385
|
-
return text2;
|
|
98386
|
-
}
|
|
98387
|
-
}
|
|
98388
|
-
return void 0;
|
|
98389
|
-
}
|
|
98390
98446
|
var NV_PR_KEYS = [
|
|
98391
98447
|
"p:nvSpPr",
|
|
98392
98448
|
"p:nvPicPr",
|
|
@@ -98422,8 +98478,8 @@ function matchMorphElementsFull(fromSlide, toSlide) {
|
|
|
98422
98478
|
const pairs2 = [];
|
|
98423
98479
|
const usedFrom = /* @__PURE__ */ new Set();
|
|
98424
98480
|
const usedTo = /* @__PURE__ */ new Set();
|
|
98425
|
-
const fromElements = flattenMorphElements(fromSlide.elements);
|
|
98426
|
-
const toElements = flattenMorphElements(toSlide.elements);
|
|
98481
|
+
const fromElements = flattenMorphElements(fromSlide.elements, toSlide.elements);
|
|
98482
|
+
const toElements = flattenMorphElements(toSlide.elements, fromSlide.elements);
|
|
98427
98483
|
for (const fromEl of fromElements) {
|
|
98428
98484
|
const fromName = getElementMorphName(fromEl);
|
|
98429
98485
|
if (!fromName) {
|
|
@@ -98520,22 +98576,6 @@ function matchMorphElementsFull(fromSlide, toSlide) {
|
|
|
98520
98576
|
usedTo.add(bestMatch.id);
|
|
98521
98577
|
}
|
|
98522
98578
|
}
|
|
98523
|
-
for (const fromEl of fromElements) {
|
|
98524
|
-
if (usedFrom.has(fromEl.id)) {
|
|
98525
|
-
continue;
|
|
98526
|
-
}
|
|
98527
|
-
for (const toEl of toElements) {
|
|
98528
|
-
if (usedTo.has(toEl.id)) {
|
|
98529
|
-
continue;
|
|
98530
|
-
}
|
|
98531
|
-
if (Math.abs(fromEl.x - toEl.x) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.y - toEl.y) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.width - toEl.width) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.height - toEl.height) <= SAME_BOX_TOLERANCE_PX) {
|
|
98532
|
-
pairs2.push({ fromElement: fromEl, toElement: toEl });
|
|
98533
|
-
usedFrom.add(fromEl.id);
|
|
98534
|
-
usedTo.add(toEl.id);
|
|
98535
|
-
break;
|
|
98536
|
-
}
|
|
98537
|
-
}
|
|
98538
|
-
}
|
|
98539
98579
|
const unmatchedFrom = fromElements.filter((el) => !usedFrom.has(el.id));
|
|
98540
98580
|
const unmatchedTo = toElements.filter((el) => !usedTo.has(el.id));
|
|
98541
98581
|
return { pairs: pairs2, unmatchedFrom, unmatchedTo };
|
|
@@ -98860,9 +98900,13 @@ function shortestRotationTarget(fromDeg, toDeg) {
|
|
|
98860
98900
|
let delta = (toDeg - fromDeg) % 360;
|
|
98861
98901
|
if (delta > 180) {
|
|
98862
98902
|
delta -= 360;
|
|
98863
|
-
} else if (delta
|
|
98903
|
+
} else if (delta < -180) {
|
|
98864
98904
|
delta += 360;
|
|
98865
98905
|
}
|
|
98906
|
+
if (Math.abs(Math.abs(delta) - 180) < 1e-9) {
|
|
98907
|
+
const start = (fromDeg % 360 + 360) % 360;
|
|
98908
|
+
delta = start >= 90 && start < 270 ? 180 : -180;
|
|
98909
|
+
}
|
|
98866
98910
|
return fromDeg + delta;
|
|
98867
98911
|
}
|
|
98868
98912
|
function staticTransformSuffix(el) {
|
|
@@ -98872,20 +98916,29 @@ function staticTransformSuffix(el) {
|
|
|
98872
98916
|
function generateUnmatchedFadeOutAnimations(elements, durationMs, startIndex) {
|
|
98873
98917
|
return elements.map((el, i) => {
|
|
98874
98918
|
const safeName = `pptx-morph-fadeout-${startIndex + i}-${el.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
|
|
98919
|
+
const transform = ` transform: scale(1)${staticTransformSuffix(el)};`;
|
|
98875
98920
|
const keyframes = `
|
|
98876
98921
|
@keyframes ${safeName} {
|
|
98877
|
-
|
|
98922
|
+
0% {
|
|
98878
98923
|
opacity: ${el.opacity ?? 1};
|
|
98879
|
-
|
|
98924
|
+
${transform}
|
|
98880
98925
|
}
|
|
98881
|
-
|
|
98926
|
+
${MORPH_FADE_OUT_HOLD_PERCENT}% {
|
|
98927
|
+
opacity: ${el.opacity ?? 1};
|
|
98928
|
+
${transform}
|
|
98929
|
+
}
|
|
98930
|
+
${MORPH_FADE_OUT_END_PERCENT}% {
|
|
98931
|
+
opacity: 0;
|
|
98932
|
+
${transform}
|
|
98933
|
+
}
|
|
98934
|
+
100% {
|
|
98882
98935
|
opacity: 0;
|
|
98883
|
-
|
|
98936
|
+
${transform}
|
|
98884
98937
|
}
|
|
98885
98938
|
}`;
|
|
98886
98939
|
return {
|
|
98887
98940
|
elementId: el.id,
|
|
98888
|
-
animation: `${safeName} ${durationMs}ms
|
|
98941
|
+
animation: `${safeName} ${durationMs}ms linear forwards`,
|
|
98889
98942
|
keyframes
|
|
98890
98943
|
};
|
|
98891
98944
|
});
|
|
@@ -98893,20 +98946,26 @@ function generateUnmatchedFadeOutAnimations(elements, durationMs, startIndex) {
|
|
|
98893
98946
|
function generateUnmatchedFadeInAnimations(elements, durationMs, startIndex) {
|
|
98894
98947
|
return elements.map((el, i) => {
|
|
98895
98948
|
const safeName = `pptx-morph-fadein-${startIndex + i}-${el.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
|
|
98949
|
+
const transform = ` transform: scale(1)${staticTransformSuffix(el)};`;
|
|
98896
98950
|
const keyframes = `
|
|
98897
98951
|
@keyframes ${safeName} {
|
|
98898
|
-
|
|
98952
|
+
0% {
|
|
98899
98953
|
opacity: 0;
|
|
98900
|
-
|
|
98954
|
+
${transform}
|
|
98901
98955
|
}
|
|
98902
|
-
|
|
98956
|
+
${MORPH_FADE_IN_START_PERCENT}% {
|
|
98957
|
+
opacity: 0;
|
|
98958
|
+
animation-timing-function: ${MORPH_FADE_IN_EASING};
|
|
98959
|
+
${transform}
|
|
98960
|
+
}
|
|
98961
|
+
100% {
|
|
98903
98962
|
opacity: ${el.opacity ?? 1};
|
|
98904
|
-
|
|
98963
|
+
${transform}
|
|
98905
98964
|
}
|
|
98906
98965
|
}`;
|
|
98907
98966
|
return {
|
|
98908
98967
|
elementId: el.id,
|
|
98909
|
-
animation: `${safeName} ${durationMs}ms
|
|
98968
|
+
animation: `${safeName} ${durationMs}ms linear forwards`,
|
|
98910
98969
|
keyframes
|
|
98911
98970
|
};
|
|
98912
98971
|
});
|
|
@@ -98980,7 +99039,7 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
|
|
|
98980
99039
|
return void 0;
|
|
98981
99040
|
}
|
|
98982
99041
|
const animations = generateFullMorphTransition(fromSlide, toSlide, durationMs, mode);
|
|
98983
|
-
const outgoingElements = flattenMorphElements(fromSlide.elements);
|
|
99042
|
+
const outgoingElements = flattenMorphElements(fromSlide.elements, toSlide.elements);
|
|
98984
99043
|
const outgoingIds = new Set(outgoingElements.map((element) => element.id));
|
|
98985
99044
|
const incomingAnimations = /* @__PURE__ */ new Map();
|
|
98986
99045
|
const outgoingAnimations = /* @__PURE__ */ new Map();
|
|
@@ -108183,6 +108242,34 @@ var SHORTCUT_REFERENCE_ITEMS = VIEWER_SHORTCUT_REFERENCE;
|
|
|
108183
108242
|
function shouldLoopContinuously(input) {
|
|
108184
108243
|
return Boolean(input.loopContinuously) || input.showType === "kiosk";
|
|
108185
108244
|
}
|
|
108245
|
+
function resolveAutoAdvanceDelayMs(slide, options) {
|
|
108246
|
+
if (options?.useTimings === false) {
|
|
108247
|
+
return void 0;
|
|
108248
|
+
}
|
|
108249
|
+
const advanceAfterMs = slide?.transition?.advanceAfterMs;
|
|
108250
|
+
if (typeof advanceAfterMs !== "number" || !Number.isFinite(advanceAfterMs) || advanceAfterMs < 0) {
|
|
108251
|
+
return void 0;
|
|
108252
|
+
}
|
|
108253
|
+
return advanceAfterMs;
|
|
108254
|
+
}
|
|
108255
|
+
var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [role="dialog"]';
|
|
108256
|
+
function isInertMedia(node) {
|
|
108257
|
+
return (node.tagName === "VIDEO" || node.tagName === "AUDIO") && !node.controls;
|
|
108258
|
+
}
|
|
108259
|
+
function isPresentationAdvanceClick(target) {
|
|
108260
|
+
if (typeof Element === "undefined" || !(target instanceof Element)) {
|
|
108261
|
+
return false;
|
|
108262
|
+
}
|
|
108263
|
+
for (let node = target; node !== null; node = node.parentElement) {
|
|
108264
|
+
if (isInertMedia(node)) {
|
|
108265
|
+
continue;
|
|
108266
|
+
}
|
|
108267
|
+
if (node.matches(PRESENTATION_INERT_CLICK_SELECTOR)) {
|
|
108268
|
+
return false;
|
|
108269
|
+
}
|
|
108270
|
+
}
|
|
108271
|
+
return true;
|
|
108272
|
+
}
|
|
108186
108273
|
function applyRehearsalTimings(slides, timings) {
|
|
108187
108274
|
return slides.map((slide, index) => {
|
|
108188
108275
|
const advanceAfterMs = timings[index];
|
|
@@ -111124,6 +111211,7 @@ exports.isLastSlide = isLastSlide;
|
|
|
111124
111211
|
exports.isMixedContentBlocked = isMixedContentBlocked;
|
|
111125
111212
|
exports.isMobileViewport = isMobileViewport;
|
|
111126
111213
|
exports.isPpactionUrl = isPpactionUrl;
|
|
111214
|
+
exports.isPresentationAdvanceClick = isPresentationAdvanceClick;
|
|
111127
111215
|
exports.isPresentationSessionMessage = isPresentationSessionMessage;
|
|
111128
111216
|
exports.isTemplateElement = isTemplateElement;
|
|
111129
111217
|
exports.isTemplateElementId = isTemplateElementId2;
|
|
@@ -111198,6 +111286,7 @@ exports.reorderSmartArtNode = reorderSmartArtNode;
|
|
|
111198
111286
|
exports.rerouteConnectorsForMovedElements = rerouteConnectorsForMovedElements;
|
|
111199
111287
|
exports.resetPresenterTimer = resetPresenterTimer;
|
|
111200
111288
|
exports.resolveAudienceScreenPlacement = resolveAudienceScreenPlacement;
|
|
111289
|
+
exports.resolveAutoAdvanceDelayMs = resolveAutoAdvanceDelayMs;
|
|
111201
111290
|
exports.resolveCssTextAlign = resolveCssTextAlign;
|
|
111202
111291
|
exports.resolveDrawingShapeNodeId = resolveDrawingShapeNodeId;
|
|
111203
111292
|
exports.resolveFontForScript = resolveFontForScript;
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-
|
|
1
|
+
import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-AHPZGUL7.mjs';
|
|
2
2
|
import { translationsEn } from './chunk-Z6HIZWIQ.mjs';
|
|
3
|
-
import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-
|
|
3
|
+
import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-VH2QF5CT.mjs';
|
|
4
4
|
import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
|
|
5
5
|
import JSZip from 'jszip';
|
|
6
6
|
import { useTranslation } from 'react-i18next';
|
|
@@ -1882,20 +1882,13 @@ function useSlideNavigation(input) {
|
|
|
1882
1882
|
});
|
|
1883
1883
|
const scheduleAutoAdvanceForSlide = useCallback(
|
|
1884
1884
|
(slideIndex) => {
|
|
1885
|
-
|
|
1885
|
+
const delayMs = resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
|
|
1886
|
+
if (delayMs === void 0) {
|
|
1886
1887
|
return;
|
|
1887
1888
|
}
|
|
1888
|
-
const
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
return;
|
|
1892
|
-
}
|
|
1893
|
-
const timer = window.setTimeout(
|
|
1894
|
-
() => {
|
|
1895
|
-
movePresentationSlideRef.current(1);
|
|
1896
|
-
},
|
|
1897
|
-
Math.max(0, advanceAfterMs)
|
|
1898
|
-
);
|
|
1889
|
+
const timer = window.setTimeout(() => {
|
|
1890
|
+
movePresentationSlideRef.current(1);
|
|
1891
|
+
}, delayMs);
|
|
1899
1892
|
presentationTimersRef.current.push(timer);
|
|
1900
1893
|
},
|
|
1901
1894
|
[slides, presentationTimersRef, useTimings]
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ThemePresets, PptxMarkdownConverter } from './chunk-
|
|
1
|
+
import { ThemePresets, PptxMarkdownConverter } from './chunk-VH2QF5CT.mjs';
|
|
2
2
|
import { __export } from './chunk-XGB3TDIC.mjs';
|
|
3
3
|
import * as mcp from 'pptx-viewer-mcp';
|
|
4
4
|
import * as mcpSchemas from 'pptx-viewer-mcp/schemas';
|
|
Binary file
|
|
Binary file
|