pptx-react-viewer 4.3.0 → 4.4.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 +106 -0
- package/dist/{AiChatPanel-UCEK3ZTD.mjs → AiChatPanel-QJHUDIWT.mjs} +4 -4
- package/dist/AiChatPanel-QJHUDIWT.mjs.br +0 -0
- package/dist/AiChatPanel-QJHUDIWT.mjs.gz +0 -0
- package/dist/{AiChatPanel-7UQA25FA.js → AiChatPanel-UFMSTNCB.js} +28 -28
- package/dist/AiChatPanel-UFMSTNCB.js.br +0 -0
- package/dist/AiChatPanel-UFMSTNCB.js.gz +0 -0
- package/dist/{Model3DScene-AI2JTBQM.mjs → Model3DScene-3GOC5HUS.mjs} +1 -1
- package/dist/Model3DScene-3GOC5HUS.mjs.br +0 -0
- package/dist/Model3DScene-3GOC5HUS.mjs.gz +0 -0
- package/dist/{Model3DScene-X3DS3ELB.js → Model3DScene-KXNJBAQD.js} +2 -2
- package/dist/{Model3DScene-X3DS3ELB.js.br → Model3DScene-KXNJBAQD.js.br} +0 -0
- package/dist/Model3DScene-KXNJBAQD.js.gz +0 -0
- package/dist/{chunk-UTI4CLYJ.js → chunk-7WWINBGF.js} +1133 -418
- package/dist/chunk-7WWINBGF.js.br +0 -0
- package/dist/chunk-7WWINBGF.js.gz +0 -0
- package/dist/{chunk-42XEZVUQ.js → chunk-AI6K5EAE.js} +1261 -1077
- package/dist/chunk-AI6K5EAE.js.br +0 -0
- package/dist/chunk-AI6K5EAE.js.gz +0 -0
- package/dist/{chunk-KAO5USPE.js → chunk-CSY422LU.js} +5 -5
- package/dist/chunk-CSY422LU.js.br +0 -0
- package/dist/chunk-CSY422LU.js.gz +0 -0
- package/dist/{chunk-3UWJWJCR.mjs → chunk-D3TZOCQP.mjs} +1118 -419
- package/dist/chunk-D3TZOCQP.mjs.br +0 -0
- package/dist/chunk-D3TZOCQP.mjs.gz +0 -0
- package/dist/{chunk-W5KLLGVH.js → chunk-I4D6JQOI.js} +25 -0
- package/dist/chunk-I4D6JQOI.js.br +0 -0
- package/dist/chunk-I4D6JQOI.js.gz +0 -0
- package/dist/{chunk-OBQ453H6.mjs → chunk-JQXN6PO7.mjs} +25 -0
- package/dist/chunk-JQXN6PO7.mjs.br +0 -0
- package/dist/chunk-JQXN6PO7.mjs.gz +0 -0
- package/dist/{chunk-RXYLPESV.mjs → chunk-LUHUYBGW.mjs} +201 -17
- package/dist/chunk-LUHUYBGW.mjs.br +0 -0
- package/dist/chunk-LUHUYBGW.mjs.gz +0 -0
- package/dist/{chunk-E7O4HTS5.js → chunk-OWTHF5N4.js} +197 -183
- package/dist/chunk-OWTHF5N4.js.br +0 -0
- package/dist/chunk-OWTHF5N4.js.gz +0 -0
- package/dist/{chunk-SKTZSG7Q.mjs → chunk-WCHKDZP6.mjs} +305 -47
- package/dist/chunk-WCHKDZP6.mjs.br +0 -0
- package/dist/chunk-WCHKDZP6.mjs.gz +0 -0
- package/dist/{chunk-PLDG3CXW.mjs → chunk-WNFHFFYE.mjs} +16 -2
- package/dist/chunk-WNFHFFYE.mjs.br +0 -0
- package/dist/chunk-WNFHFFYE.mjs.gz +0 -0
- package/dist/{chunk-YQJOCGOK.mjs → chunk-XMKLY2SE.mjs} +1 -1
- package/dist/chunk-XMKLY2SE.mjs.br +0 -0
- package/dist/chunk-XMKLY2SE.mjs.gz +0 -0
- package/dist/{chunk-Y7LI2JIR.js → chunk-YJKR7Z3X.js} +1103 -845
- package/dist/chunk-YJKR7Z3X.js.br +0 -0
- package/dist/chunk-YJKR7Z3X.js.gz +0 -0
- package/dist/i18n/de.cjs +23 -0
- package/dist/i18n/de.cjs.br +0 -0
- package/dist/i18n/de.cjs.gz +0 -0
- package/dist/i18n/de.mjs +23 -0
- package/dist/i18n/de.mjs.br +0 -0
- package/dist/i18n/de.mjs.gz +0 -0
- package/dist/i18n/es.cjs +23 -0
- package/dist/i18n/es.cjs.br +0 -0
- package/dist/i18n/es.cjs.gz +0 -0
- package/dist/i18n/es.mjs +23 -0
- package/dist/i18n/es.mjs.br +0 -0
- package/dist/i18n/es.mjs.gz +0 -0
- package/dist/i18n/fr.cjs +23 -0
- package/dist/i18n/fr.cjs.br +0 -0
- package/dist/i18n/fr.cjs.gz +0 -0
- package/dist/i18n/fr.mjs +23 -0
- package/dist/i18n/fr.mjs.br +0 -0
- package/dist/i18n/fr.mjs.gz +0 -0
- package/dist/i18n/zh-CN.cjs +23 -0
- package/dist/i18n/zh-CN.cjs.br +0 -0
- package/dist/i18n/zh-CN.cjs.gz +0 -0
- package/dist/i18n/zh-CN.mjs +23 -0
- package/dist/i18n/zh-CN.mjs.br +0 -0
- package/dist/i18n/zh-CN.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +71 -7
- package/dist/index.js +49 -49
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +173 -43
- package/dist/internals.js +105 -105
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.d.ts +49 -7
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-7UQA25FA.js.br +0 -0
- package/dist/AiChatPanel-7UQA25FA.js.gz +0 -0
- package/dist/AiChatPanel-UCEK3ZTD.mjs.br +0 -0
- package/dist/AiChatPanel-UCEK3ZTD.mjs.gz +0 -0
- package/dist/Model3DScene-AI2JTBQM.mjs.br +0 -0
- package/dist/Model3DScene-AI2JTBQM.mjs.gz +0 -0
- package/dist/Model3DScene-X3DS3ELB.js.gz +0 -0
- package/dist/chunk-3UWJWJCR.mjs.br +0 -0
- package/dist/chunk-3UWJWJCR.mjs.gz +0 -0
- package/dist/chunk-42XEZVUQ.js.br +0 -0
- package/dist/chunk-42XEZVUQ.js.gz +0 -0
- package/dist/chunk-E7O4HTS5.js.br +0 -0
- package/dist/chunk-E7O4HTS5.js.gz +0 -0
- package/dist/chunk-KAO5USPE.js.br +0 -0
- package/dist/chunk-KAO5USPE.js.gz +0 -0
- package/dist/chunk-OBQ453H6.mjs.br +0 -0
- package/dist/chunk-OBQ453H6.mjs.gz +0 -0
- package/dist/chunk-PLDG3CXW.mjs.br +0 -0
- package/dist/chunk-PLDG3CXW.mjs.gz +0 -0
- package/dist/chunk-RXYLPESV.mjs.br +0 -0
- package/dist/chunk-RXYLPESV.mjs.gz +0 -0
- package/dist/chunk-SKTZSG7Q.mjs.br +0 -0
- package/dist/chunk-SKTZSG7Q.mjs.gz +0 -0
- package/dist/chunk-UTI4CLYJ.js.br +0 -0
- package/dist/chunk-UTI4CLYJ.js.gz +0 -0
- package/dist/chunk-W5KLLGVH.js.br +0 -0
- package/dist/chunk-W5KLLGVH.js.gz +0 -0
- package/dist/chunk-Y7LI2JIR.js.br +0 -0
- package/dist/chunk-Y7LI2JIR.js.gz +0 -0
- package/dist/chunk-YQJOCGOK.mjs.br +0 -0
- package/dist/chunk-YQJOCGOK.mjs.gz +0 -0
package/dist/internals.d.ts
CHANGED
|
@@ -1692,6 +1692,16 @@ interface TextStyle {
|
|
|
1692
1692
|
hyperlinkHighlightClick?: boolean;
|
|
1693
1693
|
/** Whether hyperlink ends a sound (`a:hlinkClick/@endSnd`). */
|
|
1694
1694
|
hyperlinkEndSound?: boolean;
|
|
1695
|
+
/**
|
|
1696
|
+
* Raw `a:hlinkClick/a:extLst` child, preserved verbatim for round-trip.
|
|
1697
|
+
* Carries vendor extensions this engine does not interpret, most commonly
|
|
1698
|
+
* `ahyp:hlinkClr` (Microsoft's "hyperlink color" extension,
|
|
1699
|
+
* `{A12FA001-AC4F-418D-AE19-62706E023703}`), which records whether a
|
|
1700
|
+
* hyperlink run should paint with the theme's text colour instead of the
|
|
1701
|
+
* hyperlink colour. Dropping the whole `a:extLst` silently reverted such a
|
|
1702
|
+
* run to the default (themed) hyperlink colour on save.
|
|
1703
|
+
*/
|
|
1704
|
+
hyperlinkExtensionXml?: XmlObject;
|
|
1695
1705
|
/** Kumimoji (ideographic text combining) flag for vertical CJK text (`a:rPr/@kumimoji`). */
|
|
1696
1706
|
kumimoji?: boolean;
|
|
1697
1707
|
/** Normalize height flag (`a:rPr/@normalizeH`). */
|
|
@@ -1845,6 +1855,15 @@ interface TextStyle {
|
|
|
1845
1855
|
textGlowRadius?: number;
|
|
1846
1856
|
/** Text glow opacity (0-1). */
|
|
1847
1857
|
textGlowOpacity?: number;
|
|
1858
|
+
/**
|
|
1859
|
+
* Original glow colour-choice XML (`a:glow`'s `a:schemeClr`/`a:srgbClr`/…
|
|
1860
|
+
* child), preserved verbatim so a theme colour reference round-trips
|
|
1861
|
+
* instead of always being re-serialized as a resolved `a:srgbClr` (which
|
|
1862
|
+
* cuts the glow off from theme/Recolor changes).
|
|
1863
|
+
*/
|
|
1864
|
+
textGlowColorXml?: XmlObject;
|
|
1865
|
+
/** Theme colour slot the glow colour resolved from, when it is `a:schemeClr`. */
|
|
1866
|
+
textGlowColorRef?: PptxThemeColorRef;
|
|
1848
1867
|
/** Text reflection enabled flag. */
|
|
1849
1868
|
textReflection?: boolean;
|
|
1850
1869
|
/** Text reflection blur radius in px. */
|
|
@@ -1981,6 +2000,18 @@ interface BulletInfo {
|
|
|
1981
2000
|
paragraphIndex?: number;
|
|
1982
2001
|
/** Bullet font family from `a:buFont`. */
|
|
1983
2002
|
fontFamily?: string;
|
|
2003
|
+
/**
|
|
2004
|
+
* PANOSE font-matching hint from `a:buFont/@panose`. `a:buFont` is a
|
|
2005
|
+
* CT_TextFont, the same complex type as `a:latin`/`a:ea`/`a:cs`/`a:sym`
|
|
2006
|
+
* (which carry the equivalent `TextStyle.latinFontPanose` etc.), so a
|
|
2007
|
+
* bullet's own PANOSE/pitch-family/charset decide the fallback glyph
|
|
2008
|
+
* PowerPoint substitutes when the named typeface is missing.
|
|
2009
|
+
*/
|
|
2010
|
+
fontPanose?: string;
|
|
2011
|
+
/** Font pitch-and-family byte from `a:buFont/@pitchFamily`. */
|
|
2012
|
+
fontPitchFamily?: number;
|
|
2013
|
+
/** Font character-set byte from `a:buFont/@charset`. */
|
|
2014
|
+
fontCharset?: number;
|
|
1984
2015
|
/** Bullet size as percentage of text font size from `a:buSzPct`. */
|
|
1985
2016
|
sizePercent?: number;
|
|
1986
2017
|
/** Bullet size in points from `a:buSzPts`. */
|
|
@@ -7270,11 +7301,17 @@ interface ZoomPptxElement extends PptxElementBase, PptxImageProperties {
|
|
|
7270
7301
|
* `zmPr/@returnToParent` (MS-PPTX `CT_ZoomObjectProperties`, shared by all
|
|
7271
7302
|
* three Zoom kinds): whether continuing forward from the destination slide
|
|
7272
7303
|
* during a live show returns to this Zoom's origin slide instead of
|
|
7273
|
-
* advancing linearly through the deck.
|
|
7274
|
-
*
|
|
7275
|
-
*
|
|
7276
|
-
*
|
|
7277
|
-
*
|
|
7304
|
+
* advancing linearly through the deck. The schema declares `<xsd:attribute
|
|
7305
|
+
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
7306
|
+
* so an ABSENT attribute means `true`, not `false`. This codebase still
|
|
7307
|
+
* leaves the field `undefined` (rather than fabricating `true`) when the
|
|
7308
|
+
* source XML omits it, so a round-trip never invents an attribute the
|
|
7309
|
+
* source never had; a CONSUMER of this field (playback, e.g.
|
|
7310
|
+
* `pptx-viewer-shared`'s `resolveZoomNavigationTarget`) must read
|
|
7311
|
+
* `returnToParent !== false`, not `Boolean(returnToParent)`, to get the
|
|
7312
|
+
* spec-correct effective value. For `zoomType: 'summary'`, this mirrors the
|
|
7313
|
+
* first tile's own value; see {@link SummaryZoomTarget.returnToParent} for
|
|
7314
|
+
* the per-tile value.
|
|
7278
7315
|
*/
|
|
7279
7316
|
returnToParent?: boolean;
|
|
7280
7317
|
/**
|
|
@@ -9284,7 +9321,12 @@ interface PptxSlideTransition {
|
|
|
9284
9321
|
spokes?: number;
|
|
9285
9322
|
/** Pattern type for shred transition. */
|
|
9286
9323
|
pattern?: string;
|
|
9287
|
-
/**
|
|
9324
|
+
/**
|
|
9325
|
+
* Through-black flag (OOXML `@_thruBlk`). COM-verified to actually apply to
|
|
9326
|
+
* `cut` and `fade` (see {@link TRANSITION_THRUBLK_TYPES}); parsed generically
|
|
9327
|
+
* off any standard transition child so an unexpected authored value still
|
|
9328
|
+
* round-trips.
|
|
9329
|
+
*/
|
|
9288
9330
|
thruBlk?: boolean;
|
|
9289
9331
|
/** Split orientation (horz/vert) parsed from `@_orient`. */
|
|
9290
9332
|
orient?: PptxSplitOrientation;
|
|
@@ -13190,7 +13232,7 @@ declare const P14_TRANSITION_KEYFRAMES = "\n/* ── Conveyor (translate X with
|
|
|
13190
13232
|
/** Part 2: prism / reveal / ripple / shred / switch / vortex / warp / wheelReverse / window. */
|
|
13191
13233
|
declare const P14_TRANSITION_KEYFRAMES_2 = "\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
|
|
13192
13234
|
/** Both p14 keyframe blocks concatenated, for single `<style>` injection. */
|
|
13193
|
-
declare const P14_TRANSITION_KEYFRAMES_ALL = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
|
|
13235
|
+
declare const P14_TRANSITION_KEYFRAMES_ALL = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n\n\n@keyframes pptx-tr-vortex-in-left { from { transform: translateX(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-left { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-right { from { transform: translateX(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-right { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(40%) rotate(720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-up { from { transform: translateY(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-up { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-down { from { transform: translateY(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-down { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(40%) rotate(720deg) scale(0); opacity: 0; } }\n\n\n@keyframes pptx-tr-ripple-in-lu { from { clip-path: circle(0% at 0% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 0%); opacity: 0.9; } to { clip-path: circle(150% at 0% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ru { from { clip-path: circle(0% at 100% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 0%); opacity: 0.9; } to { clip-path: circle(150% at 100% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ld { from { clip-path: circle(0% at 0% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 100%); opacity: 0.9; } to { clip-path: circle(150% at 0% 100%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-rd { from { clip-path: circle(0% at 100% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 100%); opacity: 0.9; } to { clip-path: circle(150% at 100% 100%); opacity: 1; } }\n\n\n@keyframes pptx-tr-glitter-diamond-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-hexagon-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n";
|
|
13194
13236
|
//#endregion
|
|
13195
13237
|
//#region src/render/p14-transition-css.d.ts
|
|
13196
13238
|
/**
|
|
@@ -13271,6 +13313,10 @@ interface PresentationInkStroke {
|
|
|
13271
13313
|
points: PresentationInkPoint[];
|
|
13272
13314
|
}
|
|
13273
13315
|
//#endregion
|
|
13316
|
+
//#region src/render/paste-special.d.ts
|
|
13317
|
+
/** The four paste formats PowerPoint's Paste Options / Paste Special offer. */
|
|
13318
|
+
type PasteSpecialFormat = 'keep-source-formatting' | 'use-destination-theme' | 'picture' | 'keep-text-only';
|
|
13319
|
+
//#endregion
|
|
13274
13320
|
//#region src/render/find-replace.d.ts
|
|
13275
13321
|
/** Identifies a single match of the find query at segment-level precision. */
|
|
13276
13322
|
interface FindResult {
|
|
@@ -13343,6 +13389,37 @@ interface FontEmbeddingDescriptor {
|
|
|
13343
13389
|
/** Present only when `interactive` is false. */
|
|
13344
13390
|
disabledReasonKey?: string;
|
|
13345
13391
|
}
|
|
13392
|
+
//#endregion
|
|
13393
|
+
//#region src/render/zoom-return-navigation.d.ts
|
|
13394
|
+
/**
|
|
13395
|
+
* The navigation-relevant fields of a Zoom click target, independent of
|
|
13396
|
+
* `zoomType`.
|
|
13397
|
+
*
|
|
13398
|
+
* `returnToParent` is already resolved to its EFFECTIVE value here (not the
|
|
13399
|
+
* raw, possibly-`undefined` `ZoomPptxElement`/`SummaryZoomTarget` field):
|
|
13400
|
+
* `CT_ZoomObjectProperties/@returnToParent` (MS-PPTX) is `<xsd:attribute
|
|
13401
|
+
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
13402
|
+
* so an ABSENT attribute means true, not false. Core deliberately stores
|
|
13403
|
+
* `undefined` rather than fabricating `true` (so a round-trip never invents
|
|
13404
|
+
* an attribute the source never had), which makes `Boolean(x)` the wrong way
|
|
13405
|
+
* to read it; the two `resolve*NavigationTarget` functions below are the only
|
|
13406
|
+
* place that distinction should be made.
|
|
13407
|
+
*/
|
|
13408
|
+
interface ZoomNavigationTarget {
|
|
13409
|
+
targetSlideIndex: number;
|
|
13410
|
+
targetSectionId?: string;
|
|
13411
|
+
returnToParent: boolean;
|
|
13412
|
+
transitionDurationMs?: number;
|
|
13413
|
+
}
|
|
13414
|
+
/** A pending "return to the zoom's origin slide" excursion, tracked by the binding across forward-advance steps. */
|
|
13415
|
+
interface ZoomExcursion {
|
|
13416
|
+
/** The slide to jump back to once `endSlideIndex` is passed (the slide the zoom was clicked from). */
|
|
13417
|
+
returnSlideIndex: number;
|
|
13418
|
+
/** The last slide index of the zoom's target range; see {@link resolveZoomExcursionEndIndex}. */
|
|
13419
|
+
endSlideIndex: number;
|
|
13420
|
+
/** The zoom's own `transitionDur`, applied to the jump INTO the target and to the return jump. */
|
|
13421
|
+
transitionDurationMs?: number;
|
|
13422
|
+
}
|
|
13346
13423
|
/** Everything a binding needs to render the recovery dialog, and nothing else. */
|
|
13347
13424
|
interface AutosaveRecoveryPrompt {
|
|
13348
13425
|
/** IndexedDB key the snapshot is stored under (the deck's file path/name). */
|
|
@@ -13979,7 +14056,7 @@ interface ElementContextMenuState {
|
|
|
13979
14056
|
elementId: string;
|
|
13980
14057
|
}
|
|
13981
14058
|
/** Identifies an action triggered from the element right-click context menu. */
|
|
13982
|
-
type ElementContextMenuAction = 'copy' | 'cut' | 'paste' | 'duplicate' | 'delete' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'bringForward' | 'sendBackward' | 'bringToFront' | 'sendToBack' | 'comment' | 'addComment' | 'group' | 'ungroup' | 'editPoints' | 'editHyperlink';
|
|
14059
|
+
type ElementContextMenuAction = 'copy' | 'cut' | 'paste' | 'duplicate' | 'delete' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'bringForward' | 'sendBackward' | 'bringToFront' | 'sendToBack' | 'comment' | 'addComment' | 'group' | 'ungroup' | 'editPoints' | 'editHyperlink' | 'edit-text' | 'save-as-picture' | 'edit-alt-text' | 'size-and-position' | 'format-shape';
|
|
13983
14060
|
/**
|
|
13984
14061
|
* State of an active marquee (rubber-band) selection rectangle.
|
|
13985
14062
|
* Created when the user clicks and drags on the canvas background,
|
|
@@ -14593,6 +14670,25 @@ interface UseElementManipulationInput {
|
|
|
14593
14670
|
ops: ElementOperations;
|
|
14594
14671
|
history: EditorHistoryResult;
|
|
14595
14672
|
onOpenHyperlinkDialog: () => void;
|
|
14673
|
+
/**
|
|
14674
|
+
* Enter inline text edit for `elementId`, same as double-clicking it.
|
|
14675
|
+
* Wired to `canvasHandlers.handleElementDoubleClick`; omitted (never) in
|
|
14676
|
+
* production, only in tests that do not exercise "Edit Text".
|
|
14677
|
+
*/
|
|
14678
|
+
onEditText?: (elementId: string) => void;
|
|
14679
|
+
/**
|
|
14680
|
+
* Rasterise `elementId`'s own DOM node and download it as PNG ("Save as
|
|
14681
|
+
* Picture"). Lives outside this hook because it needs the binding's
|
|
14682
|
+
* `html2canvasFallback` driver and a DOM lookup, neither of which this
|
|
14683
|
+
* hook otherwise touches.
|
|
14684
|
+
*/
|
|
14685
|
+
onSaveElementAsPicture?: (elementId: string) => void;
|
|
14686
|
+
/**
|
|
14687
|
+
* Notified with the freshly-inserted clone after an ordinary paste, so the
|
|
14688
|
+
* Paste Options mini-toolbar (`usePasteSpecial`) has something to reformat.
|
|
14689
|
+
* Not called for Duplicate: PowerPoint's toolbar only follows a paste.
|
|
14690
|
+
*/
|
|
14691
|
+
onPasted?: (element: PptxElement) => void;
|
|
14596
14692
|
}
|
|
14597
14693
|
interface ElementManipulationHandlers {
|
|
14598
14694
|
handleCopy: () => void;
|
|
@@ -14714,6 +14810,28 @@ interface InsertElementHandlers {
|
|
|
14714
14810
|
}
|
|
14715
14811
|
declare function useInsertElements(input: UseInsertElementsInput): InsertElementHandlers;
|
|
14716
14812
|
//#endregion
|
|
14813
|
+
//#region src/viewer/hooks/usePasteSpecial.d.ts
|
|
14814
|
+
/** The pasted element the "Paste Options" toolbar is currently anchored to. */
|
|
14815
|
+
interface PasteOptionsToolbarState {
|
|
14816
|
+
elementId: string;
|
|
14817
|
+
/** The pristine "Keep Source Formatting" clone every choice re-derives from. */
|
|
14818
|
+
sourceClone: PptxElement;
|
|
14819
|
+
}
|
|
14820
|
+
interface UsePasteSpecialResult {
|
|
14821
|
+
isPasteSpecialDialogOpen: boolean;
|
|
14822
|
+
openPasteSpecialDialog: () => void;
|
|
14823
|
+
closePasteSpecialDialog: () => void;
|
|
14824
|
+
/** Ctrl+Alt+V / dialog OK: paste the clipboard element in the chosen format. */
|
|
14825
|
+
pasteWithFormat: (format: PasteSpecialFormat) => Promise<void>;
|
|
14826
|
+
/** The Paste Options toolbar shown right after an ordinary Ctrl+V paste. */
|
|
14827
|
+
pasteOptionsToolbar: PasteOptionsToolbarState | null;
|
|
14828
|
+
/** Record an ordinary paste's result so the toolbar has something to reformat. */
|
|
14829
|
+
notePastedElement: (element: PptxElement) => void;
|
|
14830
|
+
/** Re-derive the pasted element in `format` from the frozen source clone. */
|
|
14831
|
+
reformatPastedElement: (format: PasteSpecialFormat) => Promise<void>;
|
|
14832
|
+
dismissPasteOptionsToolbar: () => void;
|
|
14833
|
+
}
|
|
14834
|
+
//#endregion
|
|
14717
14835
|
//#region src/viewer/hooks/presentation-mode/useCustomShowRunner.d.ts
|
|
14718
14836
|
/**
|
|
14719
14837
|
* useCustomShowRunner: the runtime side of `ppaction://customshow?id=<id>[&return=true]`.
|
|
@@ -14884,7 +15002,7 @@ interface UsePresentationModeResult {
|
|
|
14884
15002
|
openAllSlides: () => void;
|
|
14885
15003
|
closeAllSlides: () => void;
|
|
14886
15004
|
movePresentationSlide: (direction: 1 | -1, trigger?: SlideAdvanceTrigger) => void;
|
|
14887
|
-
navigateToSlide: (slideIndex: number) => void;
|
|
15005
|
+
navigateToSlide: (slideIndex: number, transitionOverride?: PptxSlideTransition) => void;
|
|
14888
15006
|
/** `elementId` is the clicked element, for the verbs that act on it (`playMedia`, `oleVerb`). */
|
|
14889
15007
|
handlePresentationAction: (action: PptxAction, elementId?: string) => void;
|
|
14890
15008
|
/**
|
|
@@ -14934,13 +15052,14 @@ interface UsePresentationModeResult {
|
|
|
14934
15052
|
rehearsalPaused: boolean;
|
|
14935
15053
|
/** Toggle the rehearsal timer pause state. */
|
|
14936
15054
|
toggleRehearsalPause: () => void;
|
|
14937
|
-
/**
|
|
14938
|
-
|
|
14939
|
-
|
|
14940
|
-
|
|
14941
|
-
|
|
14942
|
-
|
|
14943
|
-
|
|
15055
|
+
/**
|
|
15056
|
+
* Handle a zoom element (or Summary Zoom tile) click in presentation mode:
|
|
15057
|
+
* navigates to the target, applying its own `zmPr/@transitionDur`, and (when
|
|
15058
|
+
* `returnToParent` is set) arms an automatic return once the show reaches
|
|
15059
|
+
* the end of the target's range. See `useZoomNavigation` / `useSlideNavigation`.
|
|
15060
|
+
*/
|
|
15061
|
+
handleZoomClick: (target: ZoomNavigationTarget, returnSlideIndex: number) => void;
|
|
15062
|
+
/** Clear a pending "return to zoom" excursion (e.g. when presentation mode ends). */
|
|
14944
15063
|
clearZoomReturn: () => void;
|
|
14945
15064
|
/** Open the audience display in a separate browser window. Returns `true` if successful. */
|
|
14946
15065
|
openAudienceWindow: () => boolean;
|
|
@@ -15652,6 +15771,8 @@ interface EditorOperationsResult {
|
|
|
15652
15771
|
canvasHandlers: CanvasInteractionHandlers;
|
|
15653
15772
|
insertHandlers: InsertElementHandlers;
|
|
15654
15773
|
manipulation: ElementManipulationHandlers;
|
|
15774
|
+
/** Paste Special (Ctrl+Alt+V) dialog + the post-paste Paste Options toolbar. */
|
|
15775
|
+
pasteSpecial: UsePasteSpecialResult;
|
|
15655
15776
|
slideOps: SlideManagementHandlers;
|
|
15656
15777
|
tableOps: TableOperationHandlers;
|
|
15657
15778
|
/**
|
|
@@ -15822,7 +15943,7 @@ interface SlideCanvasProps {
|
|
|
15822
15943
|
/** All slides in the presentation (for zoom element thumbnails). */
|
|
15823
15944
|
allSlides?: readonly PptxSlide[];
|
|
15824
15945
|
/** Callback fired when a zoom element is clicked in presentation mode. */
|
|
15825
|
-
onZoomClick?: (
|
|
15946
|
+
onZoomClick?: (target: ZoomNavigationTarget, returnSlideIndex: number) => void;
|
|
15826
15947
|
/** Index of the current slide (for zoom return navigation). */
|
|
15827
15948
|
sourceSlideIndex?: number;
|
|
15828
15949
|
/** Context for text field placeholder substitution (slide number, header/footer, etc.). */
|
|
@@ -17218,6 +17339,8 @@ interface UseKeyboardShortcutWiringInput {
|
|
|
17218
17339
|
copyFormatFromSelection: () => void;
|
|
17219
17340
|
/** Ctrl/Cmd+Shift+V: apply the copied format to the given element ids. */
|
|
17220
17341
|
pasteFormatToSelection: (targetIds: string[]) => void;
|
|
17342
|
+
/** Ctrl/Cmd+Alt+V: open the Paste Special dialog. */
|
|
17343
|
+
onPasteSpecial: () => void;
|
|
17221
17344
|
}
|
|
17222
17345
|
declare function useKeyboardShortcutWiring(input: UseKeyboardShortcutWiringInput): void;
|
|
17223
17346
|
//#endregion
|
|
@@ -17542,6 +17665,8 @@ interface ClipboardInput {
|
|
|
17542
17665
|
} | null>>;
|
|
17543
17666
|
ops: ElementOperations;
|
|
17544
17667
|
history: EditorHistoryResult;
|
|
17668
|
+
/** Notified with the freshly-inserted clone after an ordinary paste. */
|
|
17669
|
+
onPasted?: (element: PptxElement) => void;
|
|
17545
17670
|
}
|
|
17546
17671
|
declare function useClipboardHandlers(input: ClipboardInput): ClipboardHandlers;
|
|
17547
17672
|
//#endregion
|
|
@@ -17757,6 +17882,8 @@ interface UseKeyboardShortcutsInput {
|
|
|
17757
17882
|
onCycleSelectionNext?: () => void;
|
|
17758
17883
|
/** Shift+Tab: select the previous element on the slide. */
|
|
17759
17884
|
onCycleSelectionPrev?: () => void;
|
|
17885
|
+
/** Ctrl/Cmd+Alt+V: open the Paste Special dialog. */
|
|
17886
|
+
onPasteSpecial?: () => void;
|
|
17760
17887
|
}
|
|
17761
17888
|
declare function useKeyboardShortcuts(input: UseKeyboardShortcutsInput): void;
|
|
17762
17889
|
//#endregion
|
|
@@ -17998,10 +18125,18 @@ interface UseSlideNavigationInput {
|
|
|
17998
18125
|
onOleVerb?: (verb: number, elementId: string | undefined) => void;
|
|
17999
18126
|
/** `ppaction://program`. */
|
|
18000
18127
|
onRunProgram?: (target: string) => void;
|
|
18128
|
+
/**
|
|
18129
|
+
* A pending "return to zoom" excursion armed by `useZoomNavigation`'s
|
|
18130
|
+
* `handleZoomClick`. Consulted on every forward advance: once the show
|
|
18131
|
+
* reaches `excursion.endSlideIndex`, the step jumps back to
|
|
18132
|
+
* `excursion.returnSlideIndex` (playing the zoom's own `transitionDur`)
|
|
18133
|
+
* instead of continuing linearly through the deck.
|
|
18134
|
+
*/
|
|
18135
|
+
zoomExcursionRef: React.RefObject<ZoomExcursion | undefined>;
|
|
18001
18136
|
}
|
|
18002
18137
|
interface UseSlideNavigationResult {
|
|
18003
18138
|
movePresentationSlide: (direction: 1 | -1, trigger?: SlideAdvanceTrigger) => void;
|
|
18004
|
-
navigateToSlide: (slideIndex: number) => void;
|
|
18139
|
+
navigateToSlide: (slideIndex: number, transitionOverride?: PptxSlideTransition) => void;
|
|
18005
18140
|
/** `elementId` is the clicked element, for the verbs that act on it (`playMedia`, `oleVerb`). */
|
|
18006
18141
|
handlePresentationAction: (action: PptxAction, elementId?: string) => void;
|
|
18007
18142
|
scheduleAutoAdvanceForSlide: (slideIndex: number) => void;
|
|
@@ -18013,43 +18148,38 @@ declare function useSlideNavigation(input: UseSlideNavigationInput): UseSlideNav
|
|
|
18013
18148
|
* Input for the useZoomNavigation sub-hook.
|
|
18014
18149
|
*/
|
|
18015
18150
|
interface UseZoomNavigationInput {
|
|
18016
|
-
|
|
18017
|
-
|
|
18151
|
+
slides: readonly PptxSlide[];
|
|
18152
|
+
/** Navigate to a specific slide index, optionally overriding the destination's own transition. */
|
|
18153
|
+
navigateToSlide: (slideIndex: number, transitionOverride?: PptxSlideTransition) => void;
|
|
18154
|
+
/**
|
|
18155
|
+
* Shared with `useSlideNavigation`'s forward-advance step: set here on a
|
|
18156
|
+
* zoom click that requests `returnToParent`, and consumed there once the
|
|
18157
|
+
* show reaches the end of the zoom's target range.
|
|
18158
|
+
*/
|
|
18159
|
+
zoomExcursionRef: React.RefObject<ZoomExcursion | undefined>;
|
|
18018
18160
|
}
|
|
18019
18161
|
/**
|
|
18020
18162
|
* Return type for the useZoomNavigation sub-hook.
|
|
18021
18163
|
*/
|
|
18022
18164
|
interface UseZoomNavigationResult {
|
|
18023
18165
|
/**
|
|
18024
|
-
* Handle a zoom element click
|
|
18025
|
-
*
|
|
18026
|
-
|
|
18027
|
-
|
|
18028
|
-
|
|
18029
|
-
* The slide index to return to after a zoom navigation, or `null` if
|
|
18030
|
-
* there is no pending return.
|
|
18031
|
-
*/
|
|
18032
|
-
zoomReturnSlideIndex: React.RefObject<number | null>;
|
|
18033
|
-
/**
|
|
18034
|
-
* Navigate back to the zoom summary slide (if a return index is set).
|
|
18035
|
-
* Returns `true` if navigation occurred, `false` otherwise.
|
|
18036
|
-
*/
|
|
18037
|
-
returnToZoomSlide: () => boolean;
|
|
18038
|
-
/**
|
|
18039
|
-
* Clear the stored return index (e.g. when the user manually navigates
|
|
18040
|
-
* away from the zoomed section).
|
|
18166
|
+
* Handle a zoom element (or Summary Zoom tile) click: navigates to the
|
|
18167
|
+
* target slide, applying the zoom's own `transitionDur` when authored, and
|
|
18168
|
+
* (when the target's `returnToParent` is set) arms an excursion so the
|
|
18169
|
+
* next forward "advance" past the target's range returns here instead of
|
|
18170
|
+
* continuing linearly through the deck.
|
|
18041
18171
|
*/
|
|
18172
|
+
handleZoomClick: (target: ZoomNavigationTarget, returnSlideIndex: number) => void;
|
|
18173
|
+
/** Clear a pending zoom excursion (e.g. when presentation mode ends). */
|
|
18042
18174
|
clearZoomReturn: () => void;
|
|
18043
18175
|
}
|
|
18044
18176
|
/**
|
|
18045
18177
|
* Sub-hook that manages zoom element navigation in presentation mode.
|
|
18046
18178
|
*
|
|
18047
|
-
*
|
|
18048
|
-
*
|
|
18049
|
-
*
|
|
18050
|
-
*
|
|
18051
|
-
* The caller can later use `returnToZoomSlide()` to navigate back to
|
|
18052
|
-
* the summary zoom slide.
|
|
18179
|
+
* The actual "return to zoom" jump is executed by `useSlideNavigation`'s
|
|
18180
|
+
* forward-advance step (it owns the deck's natural next-slide computation);
|
|
18181
|
+
* this hook only arms the excursion `useSlideNavigation` consults, via the
|
|
18182
|
+
* `zoomExcursionRef` both hooks share.
|
|
18053
18183
|
*/
|
|
18054
18184
|
declare function useZoomNavigation(input: UseZoomNavigationInput): UseZoomNavigationResult;
|
|
18055
18185
|
//#endregion
|