pptx-react-viewer 2.16.0 → 2.16.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/CHANGELOG.md +4 -0
- package/dist/{AiChatPanel-VKGWK23E.js → AiChatPanel-MCGNCS7Q.js} +22 -22
- package/dist/AiChatPanel-MCGNCS7Q.js.br +0 -0
- package/dist/AiChatPanel-MCGNCS7Q.js.gz +0 -0
- package/dist/{AiChatPanel-TYU52HDW.mjs → AiChatPanel-WJXPCHQK.mjs} +3 -3
- package/dist/AiChatPanel-WJXPCHQK.mjs.br +0 -0
- package/dist/AiChatPanel-WJXPCHQK.mjs.gz +0 -0
- package/dist/{Model3DScene-267BHD5T.mjs → Model3DScene-IXW2AKAU.mjs} +1 -1
- package/dist/{Model3DScene-267BHD5T.mjs.br → Model3DScene-IXW2AKAU.mjs.br} +0 -0
- package/dist/Model3DScene-IXW2AKAU.mjs.gz +0 -0
- package/dist/{Model3DScene-TG7OSR6V.js → Model3DScene-Q2DTGVQ7.js} +2 -2
- package/dist/Model3DScene-Q2DTGVQ7.js.br +0 -0
- package/dist/Model3DScene-Q2DTGVQ7.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-GK4JHZAC.js → SurfaceChart3DScene-AD43LAOO.js} +2 -2
- package/dist/SurfaceChart3DScene-AD43LAOO.js.br +0 -0
- package/dist/SurfaceChart3DScene-AD43LAOO.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-RPRVXRQZ.mjs → SurfaceChart3DScene-MODEHQ6G.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-RPRVXRQZ.mjs.br → SurfaceChart3DScene-MODEHQ6G.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-MODEHQ6G.mjs.gz +0 -0
- package/dist/{chunk-P3Y3OMAD.js → chunk-4GX347MG.js} +517 -65
- package/dist/chunk-4GX347MG.js.br +0 -0
- package/dist/{chunk-P3Y3OMAD.js.gz → chunk-4GX347MG.js.gz} +0 -0
- package/dist/{chunk-PILJZ5OE.js → chunk-CIK6XUOH.js} +3 -3
- package/dist/chunk-CIK6XUOH.js.br +0 -0
- package/dist/{chunk-PILJZ5OE.js.gz → chunk-CIK6XUOH.js.gz} +0 -0
- package/dist/{chunk-7W5MCYBN.js → chunk-JV6DI7AK.js} +1100 -1073
- package/dist/chunk-JV6DI7AK.js.br +0 -0
- package/dist/chunk-JV6DI7AK.js.gz +0 -0
- package/dist/{chunk-VNVURLZM.mjs → chunk-LDD2UVCV.mjs} +54 -27
- package/dist/chunk-LDD2UVCV.mjs.br +0 -0
- package/dist/chunk-LDD2UVCV.mjs.gz +0 -0
- package/dist/{chunk-OIITLGKQ.mjs → chunk-MDFCBYEM.mjs} +510 -65
- package/dist/chunk-MDFCBYEM.mjs.br +0 -0
- package/dist/{chunk-OIITLGKQ.mjs.gz → chunk-MDFCBYEM.mjs.gz} +0 -0
- package/dist/{chunk-GOPIG4VW.js → chunk-NKE64XVV.js} +348 -344
- package/dist/chunk-NKE64XVV.js.br +0 -0
- package/dist/chunk-NKE64XVV.js.gz +0 -0
- package/dist/{chunk-AX75ONFY.js → chunk-P6KM7RO5.js} +415 -396
- package/dist/chunk-P6KM7RO5.js.br +0 -0
- package/dist/chunk-P6KM7RO5.js.gz +0 -0
- package/dist/{chunk-ULB35HMJ.mjs → chunk-QI2JCXTH.mjs} +1 -1
- package/dist/chunk-QI2JCXTH.mjs.br +0 -0
- package/dist/chunk-QI2JCXTH.mjs.gz +0 -0
- package/dist/{chunk-TWPZJXLC.mjs → chunk-UWYHBCLM.mjs} +11 -7
- package/dist/chunk-UWYHBCLM.mjs.br +0 -0
- package/dist/chunk-UWYHBCLM.mjs.gz +0 -0
- package/dist/{chunk-FFBY2TKD.mjs → chunk-Z4CS2ZYN.mjs} +173 -154
- package/dist/chunk-Z4CS2ZYN.mjs.br +0 -0
- package/dist/chunk-Z4CS2ZYN.mjs.gz +0 -0
- package/dist/index.js +39 -39
- 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 +43 -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 +26 -26
- 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-TYU52HDW.mjs.br +0 -0
- package/dist/AiChatPanel-TYU52HDW.mjs.gz +0 -0
- package/dist/AiChatPanel-VKGWK23E.js.br +0 -0
- package/dist/AiChatPanel-VKGWK23E.js.gz +0 -0
- package/dist/Model3DScene-267BHD5T.mjs.gz +0 -0
- package/dist/Model3DScene-TG7OSR6V.js.br +0 -0
- package/dist/Model3DScene-TG7OSR6V.js.gz +0 -0
- package/dist/SurfaceChart3DScene-GK4JHZAC.js.br +0 -0
- package/dist/SurfaceChart3DScene-GK4JHZAC.js.gz +0 -0
- package/dist/SurfaceChart3DScene-RPRVXRQZ.mjs.gz +0 -0
- package/dist/chunk-7W5MCYBN.js.br +0 -0
- package/dist/chunk-7W5MCYBN.js.gz +0 -0
- package/dist/chunk-AX75ONFY.js.br +0 -0
- package/dist/chunk-AX75ONFY.js.gz +0 -0
- package/dist/chunk-FFBY2TKD.mjs.br +0 -0
- package/dist/chunk-FFBY2TKD.mjs.gz +0 -0
- package/dist/chunk-GOPIG4VW.js.br +0 -0
- package/dist/chunk-GOPIG4VW.js.gz +0 -0
- package/dist/chunk-OIITLGKQ.mjs.br +0 -0
- package/dist/chunk-P3Y3OMAD.js.br +0 -0
- package/dist/chunk-PILJZ5OE.js.br +0 -0
- package/dist/chunk-TWPZJXLC.mjs.br +0 -0
- package/dist/chunk-TWPZJXLC.mjs.gz +0 -0
- package/dist/chunk-ULB35HMJ.mjs.br +0 -0
- package/dist/chunk-ULB35HMJ.mjs.gz +0 -0
- package/dist/chunk-VNVURLZM.mjs.br +0 -0
- package/dist/chunk-VNVURLZM.mjs.gz +0 -0
|
@@ -101994,39 +101994,11 @@ function getImageFitStyle(el) {
|
|
|
101994
101994
|
if (!isImageLikeElement(el)) {
|
|
101995
101995
|
return uncropped;
|
|
101996
101996
|
}
|
|
101997
|
-
const
|
|
101998
|
-
|
|
101999
|
-
const frRight = el.fillRectRight ?? 0;
|
|
102000
|
-
const frBottom = el.fillRectBottom ?? 0;
|
|
102001
|
-
const hasFillRect = Math.abs(frLeft) + Math.abs(frTop) + Math.abs(frRight) + Math.abs(frBottom) > 1e-4;
|
|
102002
|
-
const placementTransform = hasFillRect ? `translate(${round2(frLeft * 100)}%, ${round2(frTop * 100)}%) scale(${round6(
|
|
102003
|
-
Math.max(0.01, 1 - frLeft - frRight)
|
|
102004
|
-
)}, ${round6(Math.max(0.01, 1 - frTop - frBottom))})` : "";
|
|
102005
|
-
const cropLeft = clampCropValue(el.cropLeft);
|
|
102006
|
-
const cropTop = clampCropValue(el.cropTop);
|
|
102007
|
-
const cropRight = clampCropValue(el.cropRight);
|
|
102008
|
-
const cropBottom = clampCropValue(el.cropBottom);
|
|
102009
|
-
const hasCrop = cropLeft + cropRight > 1e-4 || cropTop + cropBottom > 1e-4;
|
|
102010
|
-
if (!hasCrop && !hasFillRect) {
|
|
101997
|
+
const { placement, crop } = imageFitTransformParts(el);
|
|
101998
|
+
if (!placement && !crop) {
|
|
102011
101999
|
return uncropped;
|
|
102012
102000
|
}
|
|
102013
|
-
|
|
102014
|
-
if (hasCrop) {
|
|
102015
|
-
const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
|
|
102016
|
-
const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
|
|
102017
|
-
const left = clampCropValue(cropLeft * horizontalScale);
|
|
102018
|
-
const right = clampCropValue(cropRight * horizontalScale);
|
|
102019
|
-
const top = clampCropValue(cropTop * verticalScale);
|
|
102020
|
-
const bottom = clampCropValue(cropBottom * verticalScale);
|
|
102021
|
-
const remainingWidth = Math.max(0.01, 1 - left - right);
|
|
102022
|
-
const remainingHeight = Math.max(0.01, 1 - top - bottom);
|
|
102023
|
-
const tx = Math.round(-left / remainingWidth * 1e4) / 100;
|
|
102024
|
-
const ty = Math.round(-top / remainingHeight * 1e4) / 100;
|
|
102025
|
-
const sx = Math.round(1 / remainingWidth * 1e6) / 1e6;
|
|
102026
|
-
const sy = Math.round(1 / remainingHeight * 1e6) / 1e6;
|
|
102027
|
-
cropTransform = `translate(${tx}%, ${ty}%) scale(${sx}, ${sy})`;
|
|
102028
|
-
}
|
|
102029
|
-
const transform = [placementTransform, cropTransform].filter(Boolean).join(" ");
|
|
102001
|
+
const transform = [placement, crop].filter(Boolean).join(" ");
|
|
102030
102002
|
return {
|
|
102031
102003
|
position: "absolute",
|
|
102032
102004
|
width: "100%",
|
|
@@ -102038,6 +102010,47 @@ function getImageFitStyle(el) {
|
|
|
102038
102010
|
transform
|
|
102039
102011
|
};
|
|
102040
102012
|
}
|
|
102013
|
+
var IDENTITY_TRANSFORM_PAIR = "translate(0%, 0%) scale(1, 1)";
|
|
102014
|
+
function imageFitTransformParts(el) {
|
|
102015
|
+
if (!isImageLikeElement(el)) {
|
|
102016
|
+
return { placement: "", crop: "" };
|
|
102017
|
+
}
|
|
102018
|
+
const frLeft = el.fillRectLeft ?? 0;
|
|
102019
|
+
const frTop = el.fillRectTop ?? 0;
|
|
102020
|
+
const frRight = el.fillRectRight ?? 0;
|
|
102021
|
+
const frBottom = el.fillRectBottom ?? 0;
|
|
102022
|
+
const hasFillRect = Math.abs(frLeft) + Math.abs(frTop) + Math.abs(frRight) + Math.abs(frBottom) > 1e-4;
|
|
102023
|
+
const placement = hasFillRect ? `translate(${round2(frLeft * 100)}%, ${round2(frTop * 100)}%) scale(${round6(
|
|
102024
|
+
Math.max(0.01, 1 - frLeft - frRight)
|
|
102025
|
+
)}, ${round6(Math.max(0.01, 1 - frTop - frBottom))})` : "";
|
|
102026
|
+
const cropLeft = clampCropValue(el.cropLeft);
|
|
102027
|
+
const cropTop = clampCropValue(el.cropTop);
|
|
102028
|
+
const cropRight = clampCropValue(el.cropRight);
|
|
102029
|
+
const cropBottom = clampCropValue(el.cropBottom);
|
|
102030
|
+
if (cropLeft + cropRight <= 1e-4 && cropTop + cropBottom <= 1e-4) {
|
|
102031
|
+
return { placement, crop: "" };
|
|
102032
|
+
}
|
|
102033
|
+
const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
|
|
102034
|
+
const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
|
|
102035
|
+
const left = clampCropValue(cropLeft * horizontalScale);
|
|
102036
|
+
const right = clampCropValue(cropRight * horizontalScale);
|
|
102037
|
+
const top = clampCropValue(cropTop * verticalScale);
|
|
102038
|
+
const bottom = clampCropValue(cropBottom * verticalScale);
|
|
102039
|
+
const remainingWidth = Math.max(0.01, 1 - left - right);
|
|
102040
|
+
const remainingHeight = Math.max(0.01, 1 - top - bottom);
|
|
102041
|
+
const tx = Math.round(-left / remainingWidth * 1e4) / 100;
|
|
102042
|
+
const ty = Math.round(-top / remainingHeight * 1e4) / 100;
|
|
102043
|
+
const sx = Math.round(1 / remainingWidth * 1e6) / 1e6;
|
|
102044
|
+
const sy = Math.round(1 / remainingHeight * 1e6) / 1e6;
|
|
102045
|
+
return { placement, crop: `translate(${tx}%, ${ty}%) scale(${sx}, ${sy})` };
|
|
102046
|
+
}
|
|
102047
|
+
function buildImageFitTransform(el, padToIdentity = false) {
|
|
102048
|
+
const { placement, crop } = imageFitTransformParts(el);
|
|
102049
|
+
if (!padToIdentity) {
|
|
102050
|
+
return [placement, crop].filter(Boolean).join(" ");
|
|
102051
|
+
}
|
|
102052
|
+
return `${placement || IDENTITY_TRANSFORM_PAIR} ${crop || IDENTITY_TRANSFORM_PAIR}`;
|
|
102053
|
+
}
|
|
102041
102054
|
function round2(value) {
|
|
102042
102055
|
return Math.round(value * 100) / 100;
|
|
102043
102056
|
}
|
|
@@ -107783,8 +107796,118 @@ function buildTextRunFilterChain(style) {
|
|
|
107783
107796
|
}
|
|
107784
107797
|
return parts.length > 0 ? parts.join(" ") : void 0;
|
|
107785
107798
|
}
|
|
107786
|
-
var
|
|
107787
|
-
var
|
|
107799
|
+
var ADVANCE_STEPS_PER_PX = 6;
|
|
107800
|
+
var MAX_TRACKING_PX_PER_CHAR = 1 / (2 * ADVANCE_STEPS_PER_PX);
|
|
107801
|
+
var MAX_CACHE_ENTRIES = 2e4;
|
|
107802
|
+
var measureContext;
|
|
107803
|
+
var trackingCache = /* @__PURE__ */ new Map();
|
|
107804
|
+
var fontsHookInstalled = false;
|
|
107805
|
+
function installFontLoadHook() {
|
|
107806
|
+
if (fontsHookInstalled || typeof document === "undefined") {
|
|
107807
|
+
return;
|
|
107808
|
+
}
|
|
107809
|
+
fontsHookInstalled = true;
|
|
107810
|
+
document.fonts?.addEventListener?.("loadingdone", () => {
|
|
107811
|
+
trackingCache = /* @__PURE__ */ new Map();
|
|
107812
|
+
});
|
|
107813
|
+
}
|
|
107814
|
+
function getMeasureContext() {
|
|
107815
|
+
if (measureContext !== void 0) {
|
|
107816
|
+
return measureContext;
|
|
107817
|
+
}
|
|
107818
|
+
if (typeof document === "undefined") {
|
|
107819
|
+
measureContext = null;
|
|
107820
|
+
return null;
|
|
107821
|
+
}
|
|
107822
|
+
installFontLoadHook();
|
|
107823
|
+
measureContext = document.createElement("canvas").getContext("2d");
|
|
107824
|
+
return measureContext;
|
|
107825
|
+
}
|
|
107826
|
+
function toCanvasFont(font) {
|
|
107827
|
+
const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE;
|
|
107828
|
+
const family = font.fontFamily || DEFAULT_FONT_FAMILY;
|
|
107829
|
+
return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family}`;
|
|
107830
|
+
}
|
|
107831
|
+
function advancesOf(ctx, canvasFont, chars) {
|
|
107832
|
+
ctx.font = canvasFont;
|
|
107833
|
+
ctx.fontKerning = "none";
|
|
107834
|
+
const advances = [];
|
|
107835
|
+
let previous = 0;
|
|
107836
|
+
let prefix = "";
|
|
107837
|
+
for (const char of chars) {
|
|
107838
|
+
prefix += char;
|
|
107839
|
+
const width = ctx.measureText(prefix).width;
|
|
107840
|
+
advances.push(width - previous);
|
|
107841
|
+
previous = width;
|
|
107842
|
+
}
|
|
107843
|
+
return advances;
|
|
107844
|
+
}
|
|
107845
|
+
function resolveMetricTrackingPx(text2, font) {
|
|
107846
|
+
if (!text2) {
|
|
107847
|
+
return 0;
|
|
107848
|
+
}
|
|
107849
|
+
const canvasFont = toCanvasFont(font);
|
|
107850
|
+
const key = `${canvasFont}\0${text2}`;
|
|
107851
|
+
const cached = trackingCache.get(key);
|
|
107852
|
+
if (cached !== void 0) {
|
|
107853
|
+
return cached;
|
|
107854
|
+
}
|
|
107855
|
+
const ctx = getMeasureContext();
|
|
107856
|
+
if (!ctx) {
|
|
107857
|
+
return 0;
|
|
107858
|
+
}
|
|
107859
|
+
const chars = [...text2];
|
|
107860
|
+
let powerPoint = 0;
|
|
107861
|
+
for (const advance of advancesOf(ctx, canvasFont, chars)) {
|
|
107862
|
+
powerPoint += Math.round(advance * ADVANCE_STEPS_PER_PX);
|
|
107863
|
+
}
|
|
107864
|
+
ctx.fontKerning = "auto";
|
|
107865
|
+
const natural = ctx.measureText(text2).width;
|
|
107866
|
+
if (!(natural > 0)) {
|
|
107867
|
+
return 0;
|
|
107868
|
+
}
|
|
107869
|
+
powerPoint /= ADVANCE_STEPS_PER_PX;
|
|
107870
|
+
const limit = MAX_TRACKING_PX_PER_CHAR;
|
|
107871
|
+
const raw = (powerPoint - natural) / chars.length;
|
|
107872
|
+
const tracking = Math.min(limit, Math.max(-limit, raw));
|
|
107873
|
+
if (trackingCache.size >= MAX_CACHE_ENTRIES) {
|
|
107874
|
+
trackingCache = /* @__PURE__ */ new Map();
|
|
107875
|
+
}
|
|
107876
|
+
trackingCache.set(key, tracking);
|
|
107877
|
+
return tracking;
|
|
107878
|
+
}
|
|
107879
|
+
function isBreakBoundary(previous, next) {
|
|
107880
|
+
const previousSpace = /\s/u.test(previous);
|
|
107881
|
+
const nextSpace = /\s/u.test(next);
|
|
107882
|
+
if (previousSpace !== nextSpace) {
|
|
107883
|
+
return true;
|
|
107884
|
+
}
|
|
107885
|
+
return previous === "-" && next !== "-" && !nextSpace;
|
|
107886
|
+
}
|
|
107887
|
+
function splitRunForMetrics(text2, font) {
|
|
107888
|
+
const chars = [...text2];
|
|
107889
|
+
if (chars.length < 2 || !getMeasureContext()) {
|
|
107890
|
+
return [{ text: text2, tracking: resolveMetricTrackingPx(text2, font) }];
|
|
107891
|
+
}
|
|
107892
|
+
const pieces = [];
|
|
107893
|
+
let current = chars[0];
|
|
107894
|
+
for (let i = 1; i < chars.length; i++) {
|
|
107895
|
+
if (isBreakBoundary(chars[i - 1], chars[i])) {
|
|
107896
|
+
pieces.push(current);
|
|
107897
|
+
current = "";
|
|
107898
|
+
}
|
|
107899
|
+
current += chars[i];
|
|
107900
|
+
}
|
|
107901
|
+
pieces.push(current);
|
|
107902
|
+
if (pieces.length === 1) {
|
|
107903
|
+
return [{ text: text2, tracking: resolveMetricTrackingPx(text2, font) }];
|
|
107904
|
+
}
|
|
107905
|
+
return pieces.map((piece) => ({ text: piece, tracking: resolveMetricTrackingPx(piece, font) }));
|
|
107906
|
+
}
|
|
107907
|
+
function pieceLetterSpacing(authoredPx, tracking) {
|
|
107908
|
+
const spacing = authoredPx + tracking;
|
|
107909
|
+
return spacing === 0 ? void 0 : `${spacing}px`;
|
|
107910
|
+
}
|
|
107788
107911
|
function resolveParagraphStrutFontSize(segments, bodyFontSize) {
|
|
107789
107912
|
let largest;
|
|
107790
107913
|
for (const segment of segments) {
|
|
@@ -107895,6 +108018,43 @@ function correspondingGroup(group2, candidates) {
|
|
|
107895
108018
|
return sameBox(group2, candidate);
|
|
107896
108019
|
});
|
|
107897
108020
|
}
|
|
108021
|
+
var CHILD_OVERLAP_RATIO = 0.5;
|
|
108022
|
+
function boxOverlapRatio(a, b) {
|
|
108023
|
+
const left = Math.max(a.x, b.x);
|
|
108024
|
+
const top = Math.max(a.y, b.y);
|
|
108025
|
+
const right = Math.min(a.x + a.width, b.x + b.width);
|
|
108026
|
+
const bottom = Math.min(a.y + a.height, b.y + b.height);
|
|
108027
|
+
if (right <= left || bottom <= top) {
|
|
108028
|
+
return 0;
|
|
108029
|
+
}
|
|
108030
|
+
const intersection = (right - left) * (bottom - top);
|
|
108031
|
+
const union = a.width * a.height + b.width * b.height - intersection;
|
|
108032
|
+
return union > 0 ? intersection / union : 0;
|
|
108033
|
+
}
|
|
108034
|
+
function childrenPair(a, b) {
|
|
108035
|
+
const morphName = getElementMorphName(a);
|
|
108036
|
+
if (morphName !== void 0 && getElementMorphName(b) === morphName) {
|
|
108037
|
+
return true;
|
|
108038
|
+
}
|
|
108039
|
+
if (a.name && a.name === b.name) {
|
|
108040
|
+
return true;
|
|
108041
|
+
}
|
|
108042
|
+
return boxOverlapRatio(a, b) >= CHILD_OVERLAP_RATIO;
|
|
108043
|
+
}
|
|
108044
|
+
function childrenCorrespond(a, b) {
|
|
108045
|
+
if (a.length !== b.length || a.length === 0) {
|
|
108046
|
+
return false;
|
|
108047
|
+
}
|
|
108048
|
+
const unclaimed = b.map((child22) => child22);
|
|
108049
|
+
for (const child22 of a) {
|
|
108050
|
+
const index = unclaimed.findIndex((candidate) => childrenPair(child22, candidate));
|
|
108051
|
+
if (index < 0) {
|
|
108052
|
+
return false;
|
|
108053
|
+
}
|
|
108054
|
+
unclaimed.splice(index, 1);
|
|
108055
|
+
}
|
|
108056
|
+
return true;
|
|
108057
|
+
}
|
|
107898
108058
|
function flattenMorphElements(elements, counterpart, offsetX = 0, offsetY = 0) {
|
|
107899
108059
|
const out = [];
|
|
107900
108060
|
for (const element of elements) {
|
|
@@ -107902,7 +108062,7 @@ function flattenMorphElements(elements, counterpart, offsetX = 0, offsetY = 0) {
|
|
|
107902
108062
|
if (children8 && containsMorphNamedDescendant(element)) {
|
|
107903
108063
|
const twin = correspondingGroup(element, counterpart);
|
|
107904
108064
|
const twinChildren = twin ? groupChildren(twin) ?? [] : void 0;
|
|
107905
|
-
if (twinChildren) {
|
|
108065
|
+
if (twinChildren && childrenCorrespond(children8, twinChildren)) {
|
|
107906
108066
|
out.push(
|
|
107907
108067
|
...flattenMorphElements(children8, twinChildren, offsetX + element.x, offsetY + element.y)
|
|
107908
108068
|
);
|
|
@@ -108122,6 +108282,7 @@ function interpolateOutline(from, to, t) {
|
|
|
108122
108282
|
return parts.join(" ");
|
|
108123
108283
|
}
|
|
108124
108284
|
var MORPH_EASING = "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
108285
|
+
var MORPH_CROSSFADE_EASING = "cubic-bezier(0.2, 0, 0.4, 1)";
|
|
108125
108286
|
var MORPH_FADE_OUT_HOLD_PERCENT = 4;
|
|
108126
108287
|
var MORPH_FADE_OUT_END_PERCENT = 23;
|
|
108127
108288
|
var MORPH_FADE_IN_START_PERCENT = 42;
|
|
@@ -108187,6 +108348,88 @@ ${body}
|
|
|
108187
108348
|
keyframes
|
|
108188
108349
|
};
|
|
108189
108350
|
}
|
|
108351
|
+
var CROP_EPSILON = 1e-4;
|
|
108352
|
+
function cropInsets(element) {
|
|
108353
|
+
if (!isImageLikeElement(element)) {
|
|
108354
|
+
return [0, 0, 0, 0, 0, 0, 0, 0];
|
|
108355
|
+
}
|
|
108356
|
+
return [
|
|
108357
|
+
element.cropLeft ?? 0,
|
|
108358
|
+
element.cropTop ?? 0,
|
|
108359
|
+
element.cropRight ?? 0,
|
|
108360
|
+
element.cropBottom ?? 0,
|
|
108361
|
+
element.fillRectLeft ?? 0,
|
|
108362
|
+
element.fillRectTop ?? 0,
|
|
108363
|
+
element.fillRectRight ?? 0,
|
|
108364
|
+
element.fillRectBottom ?? 0
|
|
108365
|
+
];
|
|
108366
|
+
}
|
|
108367
|
+
function morphImageCropChanged(fromElement, toElement) {
|
|
108368
|
+
if (!isImageLikeElement(fromElement) || !isImageLikeElement(toElement)) {
|
|
108369
|
+
return false;
|
|
108370
|
+
}
|
|
108371
|
+
const from = cropInsets(fromElement);
|
|
108372
|
+
const to = cropInsets(toElement);
|
|
108373
|
+
return from.some((value, index) => Math.abs(value - to[index]) > CROP_EPSILON);
|
|
108374
|
+
}
|
|
108375
|
+
function cropKeyframes(name, fromTransform, toTransform) {
|
|
108376
|
+
return `
|
|
108377
|
+
@keyframes ${name} {
|
|
108378
|
+
from {
|
|
108379
|
+
transform-origin: top left;
|
|
108380
|
+
transform: ${fromTransform};
|
|
108381
|
+
}
|
|
108382
|
+
to {
|
|
108383
|
+
transform-origin: top left;
|
|
108384
|
+
transform: ${toTransform};
|
|
108385
|
+
}
|
|
108386
|
+
}`;
|
|
108387
|
+
}
|
|
108388
|
+
function generateImageCropMorphAnimations(pairs2, durationMs) {
|
|
108389
|
+
const animations = [];
|
|
108390
|
+
for (let index = 0; index < pairs2.length; index++) {
|
|
108391
|
+
const { fromElement, toElement } = pairs2[index];
|
|
108392
|
+
if (!morphImageCropChanged(fromElement, toElement)) {
|
|
108393
|
+
continue;
|
|
108394
|
+
}
|
|
108395
|
+
const safeName = `pptx-morph-crop-${index}-${toElement.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
|
|
108396
|
+
animations.push({
|
|
108397
|
+
elementId: toElement.id,
|
|
108398
|
+
target: "image",
|
|
108399
|
+
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
|
|
108400
|
+
keyframes: cropKeyframes(
|
|
108401
|
+
safeName,
|
|
108402
|
+
buildImageFitTransform(fromElement, true),
|
|
108403
|
+
buildImageFitTransform(toElement, true)
|
|
108404
|
+
)
|
|
108405
|
+
});
|
|
108406
|
+
}
|
|
108407
|
+
return animations;
|
|
108408
|
+
}
|
|
108409
|
+
function generateImageCropGhostAnimations(pairs2, durationMs, ghostIds) {
|
|
108410
|
+
const animations = [];
|
|
108411
|
+
for (let index = 0; index < pairs2.length; index++) {
|
|
108412
|
+
const { fromElement, toElement } = pairs2[index];
|
|
108413
|
+
if (ghostIds && !ghostIds.has(fromElement.id)) {
|
|
108414
|
+
continue;
|
|
108415
|
+
}
|
|
108416
|
+
if (!morphImageCropChanged(fromElement, toElement)) {
|
|
108417
|
+
continue;
|
|
108418
|
+
}
|
|
108419
|
+
const safeName = `pptx-morph-crop-ghost-${index}-${fromElement.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
|
|
108420
|
+
animations.push({
|
|
108421
|
+
elementId: fromElement.id,
|
|
108422
|
+
target: "image",
|
|
108423
|
+
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
|
|
108424
|
+
keyframes: cropKeyframes(
|
|
108425
|
+
safeName,
|
|
108426
|
+
buildImageFitTransform(fromElement, true),
|
|
108427
|
+
buildImageFitTransform(toElement, true)
|
|
108428
|
+
)
|
|
108429
|
+
});
|
|
108430
|
+
}
|
|
108431
|
+
return animations;
|
|
108432
|
+
}
|
|
108190
108433
|
var TEXT_MAX_DEPTH = 8;
|
|
108191
108434
|
function elementText(element, depth = 0) {
|
|
108192
108435
|
const own = element.text ?? "";
|
|
@@ -108360,6 +108603,69 @@ function matchMorphElementsFull(fromSlide, toSlide) {
|
|
|
108360
108603
|
const unmatchedTo = toElements.filter((el) => !usedTo.has(el.id));
|
|
108361
108604
|
return { pairs: pairs2, unmatchedFrom, unmatchedTo };
|
|
108362
108605
|
}
|
|
108606
|
+
function travelledBox(from, to) {
|
|
108607
|
+
const boxes = to ? [from, to] : [from];
|
|
108608
|
+
return {
|
|
108609
|
+
left: Math.min(...boxes.map((element) => element.x)),
|
|
108610
|
+
top: Math.min(...boxes.map((element) => element.y)),
|
|
108611
|
+
right: Math.max(...boxes.map((element) => element.x + element.width)),
|
|
108612
|
+
bottom: Math.max(...boxes.map((element) => element.y + element.height))
|
|
108613
|
+
};
|
|
108614
|
+
}
|
|
108615
|
+
function boxesOverlap(a, b) {
|
|
108616
|
+
return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;
|
|
108617
|
+
}
|
|
108618
|
+
function buildMorphMergedOrder(outgoing, incoming, pairs2) {
|
|
108619
|
+
const partnerOf = new Map(pairs2.map((pair) => [pair.toElement.id, pair.fromElement.id]));
|
|
108620
|
+
const outgoingIndex = new Map(outgoing.map((element, index) => [element.id, index]));
|
|
108621
|
+
const rank = /* @__PURE__ */ new Map();
|
|
108622
|
+
let next = 0;
|
|
108623
|
+
let cursor = 0;
|
|
108624
|
+
const flushOutgoingBelow = (limit) => {
|
|
108625
|
+
while (cursor < limit) {
|
|
108626
|
+
const element = outgoing[cursor];
|
|
108627
|
+
cursor += 1;
|
|
108628
|
+
if (!rank.has(element.id)) {
|
|
108629
|
+
rank.set(element.id, next);
|
|
108630
|
+
next += 1;
|
|
108631
|
+
}
|
|
108632
|
+
}
|
|
108633
|
+
};
|
|
108634
|
+
for (const element of incoming) {
|
|
108635
|
+
const partner = partnerOf.get(element.id);
|
|
108636
|
+
const partnerIndex = partner === void 0 ? void 0 : outgoingIndex.get(partner);
|
|
108637
|
+
if (partner === void 0 || partnerIndex === void 0) {
|
|
108638
|
+
rank.set(element.id, next);
|
|
108639
|
+
next += 1;
|
|
108640
|
+
continue;
|
|
108641
|
+
}
|
|
108642
|
+
flushOutgoingBelow(partnerIndex + 1);
|
|
108643
|
+
rank.set(element.id, rank.get(partner) ?? next);
|
|
108644
|
+
}
|
|
108645
|
+
flushOutgoingBelow(outgoing.length);
|
|
108646
|
+
return rank;
|
|
108647
|
+
}
|
|
108648
|
+
function resolveMorphOverlayArrivals(outgoing, incoming, pairs2, holdingGhostIds) {
|
|
108649
|
+
const rank = buildMorphMergedOrder(outgoing, incoming, pairs2);
|
|
108650
|
+
const matched = new Set(pairs2.map((pair) => pair.toElement.id));
|
|
108651
|
+
const counterpart = new Map(pairs2.map((pair) => [pair.fromElement.id, pair.toElement]));
|
|
108652
|
+
const ghosts = outgoing.filter((element) => holdingGhostIds.has(element.id)).map((element) => ({
|
|
108653
|
+
rank: rank.get(element.id) ?? 0,
|
|
108654
|
+
box: travelledBox(element, counterpart.get(element.id))
|
|
108655
|
+
}));
|
|
108656
|
+
const lifted = /* @__PURE__ */ new Set();
|
|
108657
|
+
for (const element of incoming) {
|
|
108658
|
+
if (matched.has(element.id)) {
|
|
108659
|
+
continue;
|
|
108660
|
+
}
|
|
108661
|
+
const mine = rank.get(element.id) ?? 0;
|
|
108662
|
+
const box = travelledBox(element);
|
|
108663
|
+
if (ghosts.some((ghost) => ghost.rank < mine && boxesOverlap(ghost.box, box))) {
|
|
108664
|
+
lifted.add(element.id);
|
|
108665
|
+
}
|
|
108666
|
+
}
|
|
108667
|
+
return lifted;
|
|
108668
|
+
}
|
|
108363
108669
|
function tokenizeText(element, mode) {
|
|
108364
108670
|
if (!hasTextProperties(element) || !element.text) {
|
|
108365
108671
|
return [];
|
|
@@ -108595,19 +108901,7 @@ function morphPairNeedsCrossfade(fromElement, toElement) {
|
|
|
108595
108901
|
}
|
|
108596
108902
|
var GEOMETRY_EPSILON = 0.5;
|
|
108597
108903
|
function isInertMorphPair(fromElement, toElement) {
|
|
108598
|
-
return Math.abs(fromElement.x - toElement.x) <= GEOMETRY_EPSILON && Math.abs(fromElement.y - toElement.y) <= GEOMETRY_EPSILON && Math.abs(fromElement.width - toElement.width) <= GEOMETRY_EPSILON && Math.abs(fromElement.height - toElement.height) <= GEOMETRY_EPSILON && (fromElement.rotation ?? 0) === (toElement.rotation ?? 0) && Boolean(fromElement.flipHorizontal) === Boolean(toElement.flipHorizontal) && Boolean(fromElement.flipVertical) === Boolean(toElement.flipVertical) && (fromElement.opacity ?? 1) === (toElement.opacity ?? 1) && !morphPairNeedsCrossfade(fromElement, toElement);
|
|
108599
|
-
}
|
|
108600
|
-
function travelledBox(from, to) {
|
|
108601
|
-
const boxes = to ? [from, to] : [from];
|
|
108602
|
-
return {
|
|
108603
|
-
left: Math.min(...boxes.map((element) => element.x)),
|
|
108604
|
-
top: Math.min(...boxes.map((element) => element.y)),
|
|
108605
|
-
right: Math.max(...boxes.map((element) => element.x + element.width)),
|
|
108606
|
-
bottom: Math.max(...boxes.map((element) => element.y + element.height))
|
|
108607
|
-
};
|
|
108608
|
-
}
|
|
108609
|
-
function boxesOverlap(a, b) {
|
|
108610
|
-
return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;
|
|
108904
|
+
return !morphImageCropChanged(fromElement, toElement) && Math.abs(fromElement.x - toElement.x) <= GEOMETRY_EPSILON && Math.abs(fromElement.y - toElement.y) <= GEOMETRY_EPSILON && Math.abs(fromElement.width - toElement.width) <= GEOMETRY_EPSILON && Math.abs(fromElement.height - toElement.height) <= GEOMETRY_EPSILON && (fromElement.rotation ?? 0) === (toElement.rotation ?? 0) && Boolean(fromElement.flipHorizontal) === Boolean(toElement.flipHorizontal) && Boolean(fromElement.flipVertical) === Boolean(toElement.flipVertical) && (fromElement.opacity ?? 1) === (toElement.opacity ?? 1) && !morphPairNeedsCrossfade(fromElement, toElement);
|
|
108611
108905
|
}
|
|
108612
108906
|
function resolveMorphGhostIds(outgoingElements, pairs2) {
|
|
108613
108907
|
const counterparts = new Map(pairs2.map((pair) => [pair.fromElement.id, pair.toElement]));
|
|
@@ -108629,6 +108923,10 @@ function crossfadeIncomingMayFadeIn(element) {
|
|
|
108629
108923
|
if (image.imagePath || image.svgPath) {
|
|
108630
108924
|
return false;
|
|
108631
108925
|
}
|
|
108926
|
+
const children8 = element.children;
|
|
108927
|
+
if (children8?.length) {
|
|
108928
|
+
return children8.every((child22) => crossfadeIncomingMayFadeIn(child22));
|
|
108929
|
+
}
|
|
108632
108930
|
if (!hasShapeProperties(element)) {
|
|
108633
108931
|
return true;
|
|
108634
108932
|
}
|
|
@@ -108662,13 +108960,15 @@ function generateMorphAnimations(pairs2, durationMs, _mode = "object", ghostIds)
|
|
|
108662
108960
|
const inert = ghosted && isInertMorphPair(fromElement, toElement);
|
|
108663
108961
|
const crossfadesIn = !inert && morphPairNeedsCrossfade(fromElement, toElement) && crossfadeIncomingMayFadeIn(toElement);
|
|
108664
108962
|
const fromProps = [
|
|
108665
|
-
` transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${fromRot}deg)${flips}
|
|
108666
|
-
` opacity: ${inert ? 0 : crossfadesIn ? 0 : fromOpacity};`
|
|
108963
|
+
` transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${fromRot}deg)${flips};`
|
|
108667
108964
|
];
|
|
108668
108965
|
const toProps = [
|
|
108669
|
-
` transform: translate(0, 0) scale(1, 1) rotate(${toRot}deg)${flips}
|
|
108670
|
-
` opacity: ${inert ? 0 : toOpacity};`
|
|
108966
|
+
` transform: translate(0, 0) scale(1, 1) rotate(${toRot}deg)${flips};`
|
|
108671
108967
|
];
|
|
108968
|
+
if (!crossfadesIn) {
|
|
108969
|
+
fromProps.push(` opacity: ${inert ? 0 : fromOpacity};`);
|
|
108970
|
+
toProps.push(` opacity: ${inert ? 0 : toOpacity};`);
|
|
108971
|
+
}
|
|
108672
108972
|
const colorInterp = buildColorInterpolationProps(fromElement, toElement);
|
|
108673
108973
|
if (colorInterp) {
|
|
108674
108974
|
fromProps.push(` background-color: ${colorInterp.fromBg};`);
|
|
@@ -108687,10 +108987,18 @@ ${fromProps.join("\n")}
|
|
|
108687
108987
|
to {
|
|
108688
108988
|
${toProps.join("\n")}
|
|
108689
108989
|
}
|
|
108690
|
-
}
|
|
108990
|
+
}${crossfadesIn ? `
|
|
108991
|
+
@keyframes ${safeName}-fade {
|
|
108992
|
+
from {
|
|
108993
|
+
opacity: 0;
|
|
108994
|
+
}
|
|
108995
|
+
to {
|
|
108996
|
+
opacity: ${toOpacity};
|
|
108997
|
+
}
|
|
108998
|
+
}` : ""}`;
|
|
108691
108999
|
animations.push({
|
|
108692
109000
|
elementId: toElement.id,
|
|
108693
|
-
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
|
|
109001
|
+
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards${crossfadesIn ? `, ${safeName}-fade ${durationMs}ms ${MORPH_CROSSFADE_EASING} forwards` : ""}`,
|
|
108694
109002
|
keyframes
|
|
108695
109003
|
});
|
|
108696
109004
|
}
|
|
@@ -108712,22 +109020,31 @@ function generateMorphGhostAnimations(pairs2, durationMs, startIndex, ghostIds)
|
|
|
108712
109020
|
const fromRot = fromElement.rotation ?? 0;
|
|
108713
109021
|
const toRot = shortestRotationTarget(fromRot, toElement.rotation ?? 0);
|
|
108714
109022
|
const flips = `${fromElement.flipHorizontal ? " scaleX(-1)" : ""}${fromElement.flipVertical ? " scaleY(-1)" : ""}`;
|
|
109023
|
+
const opacity2 = fromElement.opacity ?? 1;
|
|
108715
109024
|
const keyframes = `
|
|
108716
109025
|
@keyframes ${safeName} {
|
|
108717
109026
|
from {
|
|
108718
109027
|
transform-origin: center;
|
|
108719
|
-
transform: translate(0, 0) scale(1, 1) rotate(${fromRot}deg)${flips}
|
|
108720
|
-
opacity: ${
|
|
109028
|
+
transform: translate(0, 0) scale(1, 1) rotate(${fromRot}deg)${flips};${fadesOut ? "" : `
|
|
109029
|
+
opacity: ${opacity2};`}
|
|
108721
109030
|
}
|
|
108722
109031
|
to {
|
|
108723
109032
|
transform-origin: center;
|
|
108724
|
-
transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${toRot}deg)${flips}
|
|
108725
|
-
opacity: ${
|
|
109033
|
+
transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${toRot}deg)${flips};${fadesOut ? "" : `
|
|
109034
|
+
opacity: ${opacity2};`}
|
|
108726
109035
|
}
|
|
108727
|
-
}
|
|
109036
|
+
}${fadesOut ? `
|
|
109037
|
+
@keyframes ${safeName}-fade {
|
|
109038
|
+
from {
|
|
109039
|
+
opacity: ${opacity2};
|
|
109040
|
+
}
|
|
109041
|
+
to {
|
|
109042
|
+
opacity: 0;
|
|
109043
|
+
}
|
|
109044
|
+
}` : ""}`;
|
|
108728
109045
|
animations.push({
|
|
108729
109046
|
elementId: fromElement.id,
|
|
108730
|
-
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
|
|
109047
|
+
animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards${fadesOut ? `, ${safeName}-fade ${durationMs}ms ${MORPH_CROSSFADE_EASING} forwards` : ""}`,
|
|
108731
109048
|
keyframes
|
|
108732
109049
|
});
|
|
108733
109050
|
}
|
|
@@ -108837,6 +109154,7 @@ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "obj
|
|
|
108837
109154
|
allAnimations.push(geo);
|
|
108838
109155
|
}
|
|
108839
109156
|
}
|
|
109157
|
+
allAnimations.push(...generateImageCropMorphAnimations(matchResult.pairs, durationMs));
|
|
108840
109158
|
if (mode === "word" || mode === "character") {
|
|
108841
109159
|
for (let i = 0; i < matchResult.pairs.length; i++) {
|
|
108842
109160
|
const pair = matchResult.pairs[i];
|
|
@@ -108853,6 +109171,7 @@ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "obj
|
|
|
108853
109171
|
ghostIds
|
|
108854
109172
|
);
|
|
108855
109173
|
allAnimations.push(...ghosts);
|
|
109174
|
+
allAnimations.push(...generateImageCropGhostAnimations(matchResult.pairs, durationMs, ghostIds));
|
|
108856
109175
|
const fadeOuts = generateUnmatchedFadeOutAnimations(
|
|
108857
109176
|
matchResult.unmatchedFrom,
|
|
108858
109177
|
durationMs,
|
|
@@ -108867,6 +109186,16 @@ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "obj
|
|
|
108867
109186
|
allAnimations.push(...fadeIns);
|
|
108868
109187
|
return allAnimations;
|
|
108869
109188
|
}
|
|
109189
|
+
var LIFTED_HIDDEN_NAME = "pptx-morph-lifted-hidden";
|
|
109190
|
+
var LIFTED_HIDDEN_KEYFRAMES = `
|
|
109191
|
+
@keyframes ${LIFTED_HIDDEN_NAME} {
|
|
109192
|
+
from {
|
|
109193
|
+
opacity: 0;
|
|
109194
|
+
}
|
|
109195
|
+
to {
|
|
109196
|
+
opacity: 0;
|
|
109197
|
+
}
|
|
109198
|
+
}`;
|
|
108870
109199
|
function morphOptionToMode(option) {
|
|
108871
109200
|
if (option === "byWord") {
|
|
108872
109201
|
return "word";
|
|
@@ -108889,26 +109218,79 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
|
|
|
108889
109218
|
const outgoingIds = new Set(flattenedOutgoing.map((element) => element.id));
|
|
108890
109219
|
const incomingAnimations = /* @__PURE__ */ new Map();
|
|
108891
109220
|
const outgoingAnimations = /* @__PURE__ */ new Map();
|
|
109221
|
+
const incomingImageAnimations = /* @__PURE__ */ new Map();
|
|
109222
|
+
const outgoingImageAnimations = /* @__PURE__ */ new Map();
|
|
108892
109223
|
const keyframes = [];
|
|
108893
109224
|
for (const animation of animations) {
|
|
108894
109225
|
keyframes.push(animation.keyframes);
|
|
108895
|
-
|
|
108896
|
-
|
|
108897
|
-
|
|
108898
|
-
incomingAnimations.set(animation.elementId, animation.animation);
|
|
108899
|
-
}
|
|
109226
|
+
const isOutgoing = outgoingIds.has(animation.elementId);
|
|
109227
|
+
const target = animation.target === "image" ? isOutgoing ? outgoingImageAnimations : incomingImageAnimations : isOutgoing ? outgoingAnimations : incomingAnimations;
|
|
109228
|
+
target.set(animation.elementId, animation.animation);
|
|
108900
109229
|
}
|
|
108901
109230
|
const outgoingElements = flattenedOutgoing.filter(
|
|
108902
109231
|
(element) => outgoingAnimations.has(element.id)
|
|
108903
109232
|
);
|
|
109233
|
+
const flattenedIncoming = flattenMorphElements(toSlide.elements, fromSlide.elements);
|
|
109234
|
+
const holdingGhostIds = new Set(
|
|
109235
|
+
match.pairs.filter(
|
|
109236
|
+
(candidate) => outgoingAnimations.has(candidate.fromElement.id) && !morphPairNeedsCrossfade(candidate.fromElement, candidate.toElement)
|
|
109237
|
+
).map((candidate) => candidate.fromElement.id)
|
|
109238
|
+
);
|
|
109239
|
+
const lifted = resolveMorphOverlayArrivals(
|
|
109240
|
+
flattenedOutgoing,
|
|
109241
|
+
flattenedIncoming,
|
|
109242
|
+
match.pairs,
|
|
109243
|
+
holdingGhostIds
|
|
109244
|
+
);
|
|
109245
|
+
const overlayIncomingAnimations = /* @__PURE__ */ new Map();
|
|
109246
|
+
for (const id of lifted) {
|
|
109247
|
+
const animation = incomingAnimations.get(id);
|
|
109248
|
+
if (animation === void 0) {
|
|
109249
|
+
continue;
|
|
109250
|
+
}
|
|
109251
|
+
overlayIncomingAnimations.set(id, animation);
|
|
109252
|
+
incomingAnimations.set(id, `${LIFTED_HIDDEN_NAME} ${durationMs}ms linear forwards`);
|
|
109253
|
+
}
|
|
109254
|
+
if (overlayIncomingAnimations.size > 0) {
|
|
109255
|
+
keyframes.push(LIFTED_HIDDEN_KEYFRAMES);
|
|
109256
|
+
}
|
|
109257
|
+
const overlayIncomingElements = flattenedIncoming.filter(
|
|
109258
|
+
(element) => overlayIncomingAnimations.has(element.id)
|
|
109259
|
+
);
|
|
108904
109260
|
return {
|
|
108905
109261
|
keyframesCss: keyframes.join("\n"),
|
|
108906
109262
|
incomingAnimations,
|
|
108907
109263
|
outgoingAnimations,
|
|
109264
|
+
incomingImageAnimations,
|
|
109265
|
+
outgoingImageAnimations,
|
|
109266
|
+
overlayIncomingAnimations,
|
|
108908
109267
|
outgoingElements,
|
|
109268
|
+
overlayIncomingElements,
|
|
108909
109269
|
durationMs
|
|
108910
109270
|
};
|
|
108911
109271
|
}
|
|
109272
|
+
function cssAttributeValue(value) {
|
|
109273
|
+
return value.replace(/\\/gu, "\\\\").replace(/"/gu, '\\"');
|
|
109274
|
+
}
|
|
109275
|
+
function buildMorphAnimationRules(plan, scopeAttribute, which = "incoming", only) {
|
|
109276
|
+
const prefix = scopeAttribute ? `[${scopeAttribute}] ` : "";
|
|
109277
|
+
const rules = [];
|
|
109278
|
+
const emit = (animations, suffix) => {
|
|
109279
|
+
for (const [elementId, animation] of animations) {
|
|
109280
|
+
rules.push(
|
|
109281
|
+
`${prefix}[data-element-id="${cssAttributeValue(elementId)}"]${suffix} { animation: ${animation}; }`
|
|
109282
|
+
);
|
|
109283
|
+
}
|
|
109284
|
+
};
|
|
109285
|
+
if (only !== "image") {
|
|
109286
|
+
emit(
|
|
109287
|
+
which === "outgoing" ? plan.outgoingAnimations : which === "lifted" ? plan.overlayIncomingAnimations : plan.incomingAnimations,
|
|
109288
|
+
""
|
|
109289
|
+
);
|
|
109290
|
+
}
|
|
109291
|
+
emit(which === "outgoing" ? plan.outgoingImageAnimations : plan.incomingImageAnimations, " img");
|
|
109292
|
+
return rules.join("\n");
|
|
109293
|
+
}
|
|
108912
109294
|
function hexToRgb6(hex10) {
|
|
108913
109295
|
const clean = hex10.replace(/^#/u, "");
|
|
108914
109296
|
return {
|
|
@@ -119085,6 +119467,69 @@ function mediaTransportVisible(surface) {
|
|
|
119085
119467
|
}
|
|
119086
119468
|
return surface.canvasTransport;
|
|
119087
119469
|
}
|
|
119470
|
+
function mediaFallbackVisual(surface, input) {
|
|
119471
|
+
const contentOnly = surface.presenting || surface.preview;
|
|
119472
|
+
if (contentOnly) {
|
|
119473
|
+
return { poster: input.hasPoster, dimPoster: false, badge: "none", placeholder: "none" };
|
|
119474
|
+
}
|
|
119475
|
+
const missing = input.missing === true;
|
|
119476
|
+
if (input.hasPoster) {
|
|
119477
|
+
return {
|
|
119478
|
+
poster: true,
|
|
119479
|
+
dimPoster: missing,
|
|
119480
|
+
badge: missing ? "missing" : "play",
|
|
119481
|
+
placeholder: "none"
|
|
119482
|
+
};
|
|
119483
|
+
}
|
|
119484
|
+
return {
|
|
119485
|
+
poster: false,
|
|
119486
|
+
dimPoster: false,
|
|
119487
|
+
badge: "none",
|
|
119488
|
+
placeholder: missing ? "missing" : "typed"
|
|
119489
|
+
};
|
|
119490
|
+
}
|
|
119491
|
+
var MEDIA_FALLBACK_ICONS = {
|
|
119492
|
+
play: ["M5 3 L19 12 L5 21 Z"],
|
|
119493
|
+
missing: ["M12 2 a10 10 0 1 0 0 20 a10 10 0 1 0 0-20", "M4 4 L20 20"],
|
|
119494
|
+
audio: [
|
|
119495
|
+
"M9 18V5l12-2v13",
|
|
119496
|
+
"M6 15 a3 3 0 1 0 0 6 a3 3 0 1 0 0-6",
|
|
119497
|
+
"M18 13 a3 3 0 1 0 0 6 a3 3 0 1 0 0-6"
|
|
119498
|
+
]
|
|
119499
|
+
};
|
|
119500
|
+
function mediaFallbackIcon(visual, mediaType) {
|
|
119501
|
+
if (visual.badge === "missing" || visual.placeholder === "missing") {
|
|
119502
|
+
return MEDIA_FALLBACK_ICONS.missing;
|
|
119503
|
+
}
|
|
119504
|
+
if (visual.badge === "play") {
|
|
119505
|
+
return MEDIA_FALLBACK_ICONS.play;
|
|
119506
|
+
}
|
|
119507
|
+
if (visual.placeholder === "typed") {
|
|
119508
|
+
if (mediaType === "audio") {
|
|
119509
|
+
return MEDIA_FALLBACK_ICONS.audio;
|
|
119510
|
+
}
|
|
119511
|
+
if (mediaType === "video") {
|
|
119512
|
+
return MEDIA_FALLBACK_ICONS.play;
|
|
119513
|
+
}
|
|
119514
|
+
}
|
|
119515
|
+
return [];
|
|
119516
|
+
}
|
|
119517
|
+
function mediaFallbackLabelKey(visual, mediaType) {
|
|
119518
|
+
if (visual.badge === "missing" || visual.placeholder === "missing") {
|
|
119519
|
+
return "pptx.media.notFound";
|
|
119520
|
+
}
|
|
119521
|
+
if (visual.placeholder !== "typed") {
|
|
119522
|
+
return void 0;
|
|
119523
|
+
}
|
|
119524
|
+
if (mediaType === "video") {
|
|
119525
|
+
return "pptx.media.videoClip";
|
|
119526
|
+
}
|
|
119527
|
+
if (mediaType === "audio") {
|
|
119528
|
+
return "pptx.media.audioClip";
|
|
119529
|
+
}
|
|
119530
|
+
return "pptx.elementType.media";
|
|
119531
|
+
}
|
|
119532
|
+
var MEDIA_CHROME_ATTRIBUTE = "data-pptx-media-chrome";
|
|
119088
119533
|
var persistentAudioMap = /* @__PURE__ */ new Map();
|
|
119089
119534
|
function registerPersistentAudio(elementId, dataUrl, mimetype, loop, volume, trimStartSec) {
|
|
119090
119535
|
if (persistentAudioMap.has(elementId) || typeof document === "undefined") {
|
|
@@ -123353,6 +123798,7 @@ exports.LINK_TOOLTIP_PANEL_CLASS = LINK_TOOLTIP_PANEL_CLASS;
|
|
|
123353
123798
|
exports.LOCAL_SYNC_ORIGIN = LOCAL_SYNC_ORIGIN;
|
|
123354
123799
|
exports.MATERIAL_PRESETS = MATERIAL_PRESETS;
|
|
123355
123800
|
exports.MAX_ZOOM_SCALE = MAX_ZOOM_SCALE;
|
|
123801
|
+
exports.MEDIA_CHROME_ATTRIBUTE = MEDIA_CHROME_ATTRIBUTE;
|
|
123356
123802
|
exports.MIN_ZOOM_SCALE = MIN_ZOOM_SCALE;
|
|
123357
123803
|
exports.MOBILE_BREAKPOINT = MOBILE_BREAKPOINT;
|
|
123358
123804
|
exports.MOTION_PATH_FAMILIES = MOTION_PATH_FAMILIES;
|
|
@@ -123367,7 +123813,6 @@ exports.OUTLINE_SLIDE_ATTR = OUTLINE_SLIDE_ATTR;
|
|
|
123367
123813
|
exports.OUTLINE_VIEW_ATTR = OUTLINE_VIEW_ATTR;
|
|
123368
123814
|
exports.PATTERN_OPTIONS = PATTERN_OPTIONS;
|
|
123369
123815
|
exports.PEN_COLORS = PEN_COLORS;
|
|
123370
|
-
exports.POWERPOINT_METRIC_TRACKING = POWERPOINT_METRIC_TRACKING;
|
|
123371
123816
|
exports.PRESENTATION_CHANNEL_NAME = PRESENTATION_CHANNEL_NAME;
|
|
123372
123817
|
exports.PRESENTATION_HASH = PRESENTATION_HASH;
|
|
123373
123818
|
exports.PRESENTATION_MESSAGE_ORIGIN = PRESENTATION_MESSAGE_ORIGIN;
|
|
@@ -123480,6 +123925,7 @@ exports.buildHollowHitOutline = buildHollowHitOutline;
|
|
|
123480
123925
|
exports.buildInitialGuides = buildInitialGuides;
|
|
123481
123926
|
exports.buildInnerShadowCssFromShapeStyle = buildInnerShadowCssFromShapeStyle;
|
|
123482
123927
|
exports.buildJoinCollaborationConfig = buildJoinCollaborationConfig;
|
|
123928
|
+
exports.buildMorphAnimationRules = buildMorphAnimationRules;
|
|
123483
123929
|
exports.buildMorphTransitionPlan = buildMorphTransitionPlan;
|
|
123484
123930
|
exports.buildMotionPathPreview = buildMotionPathPreview;
|
|
123485
123931
|
exports.buildMultiLayerShadowCss = buildMultiLayerShadowCss;
|
|
@@ -123755,6 +124201,9 @@ exports.mapOutlineKey = mapOutlineKey;
|
|
|
123755
124201
|
exports.mapPresentationKey = mapPresentationKey;
|
|
123756
124202
|
exports.mapPresentationWheel = mapPresentationWheel;
|
|
123757
124203
|
exports.mayLeaveSlideShow = mayLeaveSlideShow;
|
|
124204
|
+
exports.mediaFallbackIcon = mediaFallbackIcon;
|
|
124205
|
+
exports.mediaFallbackLabelKey = mediaFallbackLabelKey;
|
|
124206
|
+
exports.mediaFallbackVisual = mediaFallbackVisual;
|
|
123758
124207
|
exports.mediaPlaybackAttributes = mediaPlaybackAttributes;
|
|
123759
124208
|
exports.mediaTransportVisible = mediaTransportVisible;
|
|
123760
124209
|
exports.mergeAdditiveSelection = mergeAdditiveSelection;
|
|
@@ -123801,6 +124250,7 @@ exports.parseDrawingColorOpacity = parseDrawingColorOpacity;
|
|
|
123801
124250
|
exports.parsePanoseString = parsePanoseString;
|
|
123802
124251
|
exports.parsePpactionUrl = parsePpactionUrl;
|
|
123803
124252
|
exports.pickSupportedMimeType = pickSupportedMimeType;
|
|
124253
|
+
exports.pieceLetterSpacing = pieceLetterSpacing;
|
|
123804
124254
|
exports.placeAudienceWindow = placeAudienceWindow;
|
|
123805
124255
|
exports.placeCaretAtEnd = placeCaretAtEnd;
|
|
123806
124256
|
exports.polygonsToSvgPath = polygonsToSvgPath;
|
|
@@ -123861,6 +124311,7 @@ exports.resolveGroupChildFill = resolveGroupChildFill;
|
|
|
123861
124311
|
exports.resolveInkColor = resolveInkColor;
|
|
123862
124312
|
exports.resolveInkOpacity = resolveInkOpacity;
|
|
123863
124313
|
exports.resolveInkWidth = resolveInkWidth;
|
|
124314
|
+
exports.resolveMetricTrackingPx = resolveMetricTrackingPx;
|
|
123864
124315
|
exports.resolveOleType = resolveOleType;
|
|
123865
124316
|
exports.resolveParagraphAlign = resolveParagraphAlign;
|
|
123866
124317
|
exports.resolveParagraphRtl = resolveParagraphRtl;
|
|
@@ -123924,6 +124375,7 @@ exports.slideProgressPercent = slideProgressPercent;
|
|
|
123924
124375
|
exports.slideStatusLabel = slideStatusLabel;
|
|
123925
124376
|
exports.snapBoxToGrid = snapBoxToGrid;
|
|
123926
124377
|
exports.splitCell = splitCell;
|
|
124378
|
+
exports.splitRunForMetrics = splitRunForMetrics;
|
|
123927
124379
|
exports.splitSeriesByAxis = splitSeriesByAxis;
|
|
123928
124380
|
exports.stepPresenterZoom = stepPresenterZoom;
|
|
123929
124381
|
exports.stopAllPersistentAudio = stopAllPersistentAudio;
|