pptx-vanilla-viewer 3.2.0 → 3.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 +139 -0
- package/dist/{ai-panel-VXFE3ZMU.cjs → ai-panel-SKJEEM6W.cjs} +1 -1
- package/dist/{ai-panel-OTS3KRWC.js → ai-panel-ZJNNRCQC.js} +1 -1
- package/dist/{chunk-STTHTBBT.cjs → chunk-DCFIS6IJ.cjs} +50 -50
- package/dist/{chunk-Z2X65UZV.js → chunk-E6UE4V7R.js} +50 -50
- package/dist/{chunk-TDYVTQRW.cjs → chunk-FDZBDXQW.cjs} +3 -3
- package/dist/chunk-KR4EBOP3.js +2872 -0
- package/dist/{chunk-VEDH4HHL.js → chunk-LQ4JI3WP.js} +3 -3
- package/dist/chunk-TOWHSYAL.cjs +2872 -0
- package/dist/i18n/de.cjs +25 -2
- package/dist/i18n/de.mjs +25 -2
- package/dist/i18n/es.cjs +25 -2
- package/dist/i18n/es.mjs +25 -2
- package/dist/i18n/fr.cjs +25 -2
- package/dist/i18n/fr.mjs +25 -2
- package/dist/i18n/zh-CN.cjs +25 -2
- package/dist/i18n/zh-CN.mjs +25 -2
- package/dist/index.cjs +79 -67
- package/dist/index.d.ts +48 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -67
- package/dist/internals.cjs +1 -1
- package/dist/internals.d.ts +1 -1
- package/dist/internals.js +1 -1
- package/dist/styles.css +12 -0
- package/dist/{transition-overlay-DrWSHuvh.d.ts → transition-overlay-_0B-nMEW.d.ts} +314 -10
- package/dist/transition-overlay-_0B-nMEW.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-HUS3377F.cjs +0 -2766
- package/dist/chunk-ZAW5DLMV.js +0 -2766
- package/dist/transition-overlay-DrWSHuvh.d.ts.map +0 -1
|
@@ -2,7 +2,7 @@ import "fast-xml-parser";
|
|
|
2
2
|
import "jszip";
|
|
3
3
|
import { Doc } from "yjs";
|
|
4
4
|
import "opentype.js";
|
|
5
|
-
//#region ../core/dist/text-operations-
|
|
5
|
+
//#region ../core/dist/text-operations-S-lI2aBz.d.ts
|
|
6
6
|
//#region src/core/types/actions.d.ts
|
|
7
7
|
/**
|
|
8
8
|
* Action types: hyperlinks, slide jumps, macros, and action buttons.
|
|
@@ -1463,6 +1463,32 @@ interface TextStyle {
|
|
|
1463
1463
|
* @see element-paragraph-geometry.ts
|
|
1464
1464
|
*/
|
|
1465
1465
|
resolvedParagraphGeometry?: TextStyle;
|
|
1466
|
+
/**
|
|
1467
|
+
* Snapshot of the ELEMENT-scope `a:bodyPr` properties (vertical anchor,
|
|
1468
|
+
* text direction, columns, overflow, autofit, body insets, text wrap, and
|
|
1469
|
+
* the boolean/rotation attributes) as the load pipeline resolved them.
|
|
1470
|
+
*
|
|
1471
|
+
* A shape's own `a:bodyPr` is parsed first, then whatever it left
|
|
1472
|
+
* `undefined` is back-filled from the placeholder / layout / master
|
|
1473
|
+
* defaults (`applyPlaceholderBodyDefaults`), and a placeholder shape with
|
|
1474
|
+
* no `a:bodyPr` of its own has the INHERITED one parsed as if it were its
|
|
1475
|
+
* own. None of those three sources is distinguishable at
|
|
1476
|
+
* `element.textStyle` once the cascade finishes, so a writer that
|
|
1477
|
+
* re-emits every defined field turns an inherited anchor, inset, autofit
|
|
1478
|
+
* mode or `rtlCol` into a value pinned on the slide forever (and an
|
|
1479
|
+
* inherited `a:normAutofit` with no scale gets written back as
|
|
1480
|
+
* `a:spAutoFit`, flipping AutoSize from "shrink text" to "resize shape").
|
|
1481
|
+
*
|
|
1482
|
+
* Present only on an `element.textStyle` that came from a parsed deck.
|
|
1483
|
+
* The save path diffs the live style against this snapshot: a field that
|
|
1484
|
+
* still matches is an inheritance artefact and the writer leaves the
|
|
1485
|
+
* underlying `a:bodyPr` attribute untouched (whatever it already is,
|
|
1486
|
+
* present or absent); a field that differs was authored or has since
|
|
1487
|
+
* been edited and is written out.
|
|
1488
|
+
*
|
|
1489
|
+
* @see element-body-properties.ts
|
|
1490
|
+
*/
|
|
1491
|
+
resolvedBodyProperties?: TextStyle;
|
|
1466
1492
|
fontFamily?: string;
|
|
1467
1493
|
fontSize?: number;
|
|
1468
1494
|
/** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
|
|
@@ -1645,6 +1671,16 @@ interface TextStyle {
|
|
|
1645
1671
|
align: 'l' | 'ctr' | 'r' | 'dec';
|
|
1646
1672
|
leader?: 'none' | 'dot' | 'hyphen' | 'underscore';
|
|
1647
1673
|
}>;
|
|
1674
|
+
/**
|
|
1675
|
+
* True when the paragraph's own `a:pPr` authored an EMPTY `<a:tabLst/>`
|
|
1676
|
+
* (explicitly "no tab stops", overriding whatever the cascade would
|
|
1677
|
+
* otherwise supply) rather than omitting the element entirely (inherit).
|
|
1678
|
+
* fast-xml-parser gives a childless element as the empty string, so
|
|
1679
|
+
* `tabLst` and no-`tabLst` are otherwise indistinguishable once `tabStops`
|
|
1680
|
+
* comes back empty either way. Paragraph-scope only; not part of the
|
|
1681
|
+
* element-level geometry cascade.
|
|
1682
|
+
*/
|
|
1683
|
+
tabStopsExplicitEmpty?: boolean;
|
|
1648
1684
|
/** Body text wrapping mode from `a:bodyPr/@wrap`. */
|
|
1649
1685
|
textWrap?: 'square' | 'none';
|
|
1650
1686
|
/** Preset text warp type from `a:bodyPr/a:prstTxWarp`. */
|
|
@@ -1687,6 +1723,20 @@ interface TextStyle {
|
|
|
1687
1723
|
* serialised back on save, so it never disturbs the round-trip typefaces.
|
|
1688
1724
|
*/
|
|
1689
1725
|
scriptFallbackFont?: string;
|
|
1726
|
+
/**
|
|
1727
|
+
* Set alongside {@link scriptFallbackFont} when the resolved {@link fontFamily}
|
|
1728
|
+
* came only from the paragraph/list-style/theme CASCADE (the run's own
|
|
1729
|
+
* `a:rPr` authored no `a:latin`/`a:ea`/`a:cs` of its own). A run always
|
|
1730
|
+
* inherits SOME font this way (typically the theme's `+mn-lt`), so without
|
|
1731
|
+
* this flag `fontFamily` was indistinguishable from a run that genuinely
|
|
1732
|
+
* chose that font itself, and the renderer never applied the theme's
|
|
1733
|
+
* per-script override (see #83): `+mn-lt` names only the LATIN member of
|
|
1734
|
+
* the font scheme and was never meant to cover text in a different
|
|
1735
|
+
* dominant script. An explicit `a:latin`/`a:ea`/`a:cs` authored on the run
|
|
1736
|
+
* itself still always wins; only the cascade default yields to the
|
|
1737
|
+
* script-specific override.
|
|
1738
|
+
*/
|
|
1739
|
+
fontFamilyIsCascadeDefault?: boolean;
|
|
1690
1740
|
/** Text language from `a:rPr/@lang`. */
|
|
1691
1741
|
language?: string;
|
|
1692
1742
|
/** Hyperlink mouse-over target from `a:hlinkMouseOver`. */
|
|
@@ -1709,6 +1759,16 @@ interface TextStyle {
|
|
|
1709
1759
|
hyperlinkHighlightClick?: boolean;
|
|
1710
1760
|
/** Whether hyperlink ends a sound (`a:hlinkClick/@endSnd`). */
|
|
1711
1761
|
hyperlinkEndSound?: boolean;
|
|
1762
|
+
/**
|
|
1763
|
+
* Raw `a:hlinkClick/a:extLst` child, preserved verbatim for round-trip.
|
|
1764
|
+
* Carries vendor extensions this engine does not interpret, most commonly
|
|
1765
|
+
* `ahyp:hlinkClr` (Microsoft's "hyperlink color" extension,
|
|
1766
|
+
* `{A12FA001-AC4F-418D-AE19-62706E023703}`), which records whether a
|
|
1767
|
+
* hyperlink run should paint with the theme's text colour instead of the
|
|
1768
|
+
* hyperlink colour. Dropping the whole `a:extLst` silently reverted such a
|
|
1769
|
+
* run to the default (themed) hyperlink colour on save.
|
|
1770
|
+
*/
|
|
1771
|
+
hyperlinkExtensionXml?: XmlObject;
|
|
1712
1772
|
/** Kumimoji (ideographic text combining) flag for vertical CJK text (`a:rPr/@kumimoji`). */
|
|
1713
1773
|
kumimoji?: boolean;
|
|
1714
1774
|
/** Normalize height flag (`a:rPr/@normalizeH`). */
|
|
@@ -1862,6 +1922,15 @@ interface TextStyle {
|
|
|
1862
1922
|
textGlowRadius?: number;
|
|
1863
1923
|
/** Text glow opacity (0-1). */
|
|
1864
1924
|
textGlowOpacity?: number;
|
|
1925
|
+
/**
|
|
1926
|
+
* Original glow colour-choice XML (`a:glow`'s `a:schemeClr`/`a:srgbClr`/…
|
|
1927
|
+
* child), preserved verbatim so a theme colour reference round-trips
|
|
1928
|
+
* instead of always being re-serialized as a resolved `a:srgbClr` (which
|
|
1929
|
+
* cuts the glow off from theme/Recolor changes).
|
|
1930
|
+
*/
|
|
1931
|
+
textGlowColorXml?: XmlObject;
|
|
1932
|
+
/** Theme colour slot the glow colour resolved from, when it is `a:schemeClr`. */
|
|
1933
|
+
textGlowColorRef?: PptxThemeColorRef;
|
|
1865
1934
|
/** Text reflection enabled flag. */
|
|
1866
1935
|
textReflection?: boolean;
|
|
1867
1936
|
/** Text reflection blur radius in px. */
|
|
@@ -1998,6 +2067,18 @@ interface BulletInfo {
|
|
|
1998
2067
|
paragraphIndex?: number;
|
|
1999
2068
|
/** Bullet font family from `a:buFont`. */
|
|
2000
2069
|
fontFamily?: string;
|
|
2070
|
+
/**
|
|
2071
|
+
* PANOSE font-matching hint from `a:buFont/@panose`. `a:buFont` is a
|
|
2072
|
+
* CT_TextFont, the same complex type as `a:latin`/`a:ea`/`a:cs`/`a:sym`
|
|
2073
|
+
* (which carry the equivalent `TextStyle.latinFontPanose` etc.), so a
|
|
2074
|
+
* bullet's own PANOSE/pitch-family/charset decide the fallback glyph
|
|
2075
|
+
* PowerPoint substitutes when the named typeface is missing.
|
|
2076
|
+
*/
|
|
2077
|
+
fontPanose?: string;
|
|
2078
|
+
/** Font pitch-and-family byte from `a:buFont/@pitchFamily`. */
|
|
2079
|
+
fontPitchFamily?: number;
|
|
2080
|
+
/** Font character-set byte from `a:buFont/@charset`. */
|
|
2081
|
+
fontCharset?: number;
|
|
2001
2082
|
/** Bullet size as percentage of text font size from `a:buSzPct`. */
|
|
2002
2083
|
sizePercent?: number;
|
|
2003
2084
|
/** Bullet size in points from `a:buSzPts`. */
|
|
@@ -2039,6 +2120,18 @@ interface BulletInfo {
|
|
|
2039
2120
|
/** When true, `<a:buSzTx/>` was specified — inherit the bullet size from
|
|
2040
2121
|
* the run text font size. */
|
|
2041
2122
|
sizeInherit?: boolean;
|
|
2123
|
+
/**
|
|
2124
|
+
* True when this bullet resolution came from the paragraph's OWN `a:pPr`
|
|
2125
|
+
* rather than the shape's `a:lstStyle`, an inherited placeholder, or the
|
|
2126
|
+
* master's `a:defPPr` / `p:txStyles`. `resolveParagraphBulletInfo` walks
|
|
2127
|
+
* that cascade and returns the first match, so without this flag a
|
|
2128
|
+
* writer that re-emits every resolved `BulletInfo` in full pins an
|
|
2129
|
+
* inherited bullet (e.g. a master `buFont="Arial"` / `buChar="•"`) onto
|
|
2130
|
+
* every paragraph's own `a:pPr` the moment the slide is rewritten. The
|
|
2131
|
+
* save path only writes the bullet group when this is `true`, mirroring
|
|
2132
|
+
* how `paragraphProperties` gates every other per-paragraph field.
|
|
2133
|
+
*/
|
|
2134
|
+
ownedByParagraph?: boolean;
|
|
2042
2135
|
}
|
|
2043
2136
|
/**
|
|
2044
2137
|
* A single text run within a paragraph.
|
|
@@ -2081,6 +2174,23 @@ interface TextSegment {
|
|
|
2081
2174
|
fieldParagraphPropertiesXml?: XmlObject;
|
|
2082
2175
|
/** Raw OMML XML node for equation segments (from `a14:m` / `m:oMathPara`). */
|
|
2083
2176
|
equationXml?: Record<string, unknown>;
|
|
2177
|
+
/**
|
|
2178
|
+
* The ORIGINAL top-level paragraph child that carried this equation,
|
|
2179
|
+
* captured verbatim at parse time and keyed by its own tag: `{ 'a14:m':
|
|
2180
|
+
* ... }`, `{ 'm:oMathPara': ... }`, `{ 'm:oMath': ... }`, or `{
|
|
2181
|
+
* 'mc:AlternateContent': ... }` for an equation authored behind a
|
|
2182
|
+
* Choice/Fallback switch. `equationXml` above is the resolved math content
|
|
2183
|
+
* used for rendering (unwrapped one level for `a14:m`/`mc:AlternateContent`
|
|
2184
|
+
* sources); this field exists solely so the writer can re-emit an UNTOUCHED
|
|
2185
|
+
* equation byte-for-byte, Choice and Fallback both, instead of collapsing
|
|
2186
|
+
* it to a bare math element PowerPoint's own writer never produces.
|
|
2187
|
+
* `undefined` for a freshly inserted or edited equation, which the writer
|
|
2188
|
+
* instead reconstructs from `equationXml` (always `{ 'm:oMathPara': ... }`
|
|
2189
|
+
* or `{ 'm:oMath': ... }` for those cases). Any code that replaces
|
|
2190
|
+
* `equationXml` on an existing segment must drop this field, or the writer
|
|
2191
|
+
* would keep re-emitting the equation's OLD XML instead of the edit.
|
|
2192
|
+
*/
|
|
2193
|
+
equationSourceXml?: Record<string, unknown>;
|
|
2084
2194
|
/**
|
|
2085
2195
|
* Optional equation number for numbered equations (e.g. "(1)", "(2.3)").
|
|
2086
2196
|
* When present, the equation is rendered centered with the number right-aligned.
|
|
@@ -2365,6 +2475,24 @@ interface PptxShapeProperties {
|
|
|
2365
2475
|
*/
|
|
2366
2476
|
interface PlaceholderTextLevelStyle {
|
|
2367
2477
|
fontFamily?: string;
|
|
2478
|
+
/**
|
|
2479
|
+
* The RAW `a:defRPr/a:latin/@typeface` string (verbatim: a theme alias
|
|
2480
|
+
* such as `+mj-lt`/`+mn-lt`, or a literal face name) {@link fontFamily}
|
|
2481
|
+
* was resolved from. Master/layout text styles are parsed once and
|
|
2482
|
+
* cached, so `fontFamily` is a resolved-for-display snapshot; re-emitting
|
|
2483
|
+
* it as the literal name on every save (the master-level analogue of
|
|
2484
|
+
* `colorChoiceXml` below) flattens the theme alias the moment ANYTHING
|
|
2485
|
+
* about the deck is rewritten, even when this level was never touched.
|
|
2486
|
+
* Absent when the level declares no `a:latin`.
|
|
2487
|
+
*/
|
|
2488
|
+
fontTypefaceXml?: string;
|
|
2489
|
+
/**
|
|
2490
|
+
* Snapshot of {@link fontFamily} exactly as parsed, before any edit. The
|
|
2491
|
+
* save path diffs the live value against this: unchanged means re-emit
|
|
2492
|
+
* {@link fontTypefaceXml} verbatim (preserve the alias); different means
|
|
2493
|
+
* a genuine edit, so the new literal name is written instead.
|
|
2494
|
+
*/
|
|
2495
|
+
resolvedFontFamily?: string;
|
|
2368
2496
|
fontSize?: number;
|
|
2369
2497
|
bold?: boolean;
|
|
2370
2498
|
italic?: boolean;
|
|
@@ -2414,8 +2542,32 @@ interface PlaceholderTextLevelStyle {
|
|
|
2414
2542
|
tabStops?: TextStyle['tabStops'];
|
|
2415
2543
|
lineSpacing?: number;
|
|
2416
2544
|
lineSpacingExactPt?: number;
|
|
2545
|
+
/**
|
|
2546
|
+
* Space before the paragraph in px, resolved from EITHER `a:spcPts`
|
|
2547
|
+
* (absolute) or `a:spcPct` (a percentage of this level's own `a:defRPr`
|
|
2548
|
+
* font size) - the OOXML source is not distinguishable from this field
|
|
2549
|
+
* alone. See {@link spaceBeforePercent} / {@link resolvedSpaceBefore}.
|
|
2550
|
+
*/
|
|
2417
2551
|
spaceBefore?: number;
|
|
2418
2552
|
spaceAfter?: number;
|
|
2553
|
+
/**
|
|
2554
|
+
* Snapshot of {@link spaceBefore} / {@link spaceAfter} exactly as parsed.
|
|
2555
|
+
* Diffed the same way as {@link resolvedFontFamily}: unchanged means the
|
|
2556
|
+
* writer re-emits the ORIGINAL form (`a:spcPct` when
|
|
2557
|
+
* {@link spaceBeforePercent} / {@link spaceAfterPercent} is set); a value
|
|
2558
|
+
* that has since moved away from the snapshot is a genuine edit and is
|
|
2559
|
+
* always written as `a:spcPts`, since an editor works in absolute units.
|
|
2560
|
+
*/
|
|
2561
|
+
resolvedSpaceBefore?: number;
|
|
2562
|
+
resolvedSpaceAfter?: number;
|
|
2563
|
+
/**
|
|
2564
|
+
* The raw `a:spcPct` fraction (e.g. `0.2` for 20%) {@link spaceBefore} /
|
|
2565
|
+
* {@link spaceAfter} was resolved from, when the source used percentage
|
|
2566
|
+
* spacing rather than `a:spcPts`. Absent when the source used `a:spcPts`
|
|
2567
|
+
* (or authored no spacing at all).
|
|
2568
|
+
*/
|
|
2569
|
+
spaceBeforePercent?: number;
|
|
2570
|
+
spaceAfterPercent?: number;
|
|
2419
2571
|
/** Default tab interval in CSS pixels (`a:lvlXpPr/@defTabSz`). */
|
|
2420
2572
|
defaultTabSize?: number;
|
|
2421
2573
|
/** Whether East Asian line-breaking rules are enabled. */
|
|
@@ -5148,6 +5300,18 @@ interface PptxSmartArtLayoutDefinition {
|
|
|
5148
5300
|
rootNode: PptxSmartArtLayoutNode;
|
|
5149
5301
|
/** Original definition retained for constraint evaluation and foreign rules. */
|
|
5150
5302
|
rawXml?: XmlObject;
|
|
5303
|
+
/**
|
|
5304
|
+
* The un-parsed layout-definition part text (starting at `<dgm:layoutDef>`,
|
|
5305
|
+
* XML declaration included). `rawXml` above loses the document order of
|
|
5306
|
+
* differently-named siblings (the package-wide `fast-xml-parser`
|
|
5307
|
+
* configuration groups children into one array per tag), which the
|
|
5308
|
+
* per-point DiagramML engine (`core/utils/smartart-engine/`) needs to
|
|
5309
|
+
* execute a `layoutNode` body's `forEach`/`choose`/`constrLst` statements
|
|
5310
|
+
* in their real declared sequence - see that package's `ordered-xml.ts`.
|
|
5311
|
+
* `undefined` when the part could not be read (matches `rawXml`'s own
|
|
5312
|
+
* optionality); the engine falls back to the legacy interpreter then.
|
|
5313
|
+
*/
|
|
5314
|
+
rawXmlText?: string;
|
|
5151
5315
|
}
|
|
5152
5316
|
//#endregion
|
|
5153
5317
|
//#region src/core/types/smart-art-node.d.ts
|
|
@@ -6260,6 +6424,20 @@ interface PptxTableData {
|
|
|
6260
6424
|
* present when there is at least one effect.
|
|
6261
6425
|
*/
|
|
6262
6426
|
tableEffects?: ParsedTableStyleEffect[];
|
|
6427
|
+
/**
|
|
6428
|
+
* Table-cell-context default text size in points, resolved from the
|
|
6429
|
+
* slide's master `p:otherStyle` (ECMA-376 §19.3.1.42 CT_TextListStyle,
|
|
6430
|
+
* §19.3.1.52 for `p:txStyles`). PowerPoint sizes a table cell's text off
|
|
6431
|
+
* this master default (commonly 18pt) whenever neither the run nor the
|
|
6432
|
+
* (size-less) table style provides one; without it, cell text without an
|
|
6433
|
+
* explicit `a:rPr@sz` fell back to the browser's own default font size
|
|
6434
|
+
* (16px / 12pt) instead. A render-only hint: it is not part of any
|
|
6435
|
+
* individual cell's parsed style and is never written back on save, so
|
|
6436
|
+
* resaving an unstyled cell does not bake in an explicit size that was
|
|
6437
|
+
* never authored. `undefined` when no master/otherStyle size resolves
|
|
6438
|
+
* (renderers should leave the browser default in place in that case).
|
|
6439
|
+
*/
|
|
6440
|
+
defaultCellFontSize?: number;
|
|
6263
6441
|
}
|
|
6264
6442
|
/**
|
|
6265
6443
|
* A single fill reference within a table style section.
|
|
@@ -6285,6 +6463,14 @@ interface ParsedTableStyleFill {
|
|
|
6285
6463
|
tint?: number;
|
|
6286
6464
|
/** Shade value (0-100 000). */
|
|
6287
6465
|
shade?: number;
|
|
6466
|
+
/**
|
|
6467
|
+
* Alpha (opacity) value (0-100 000, where 100 000 is fully opaque) from an
|
|
6468
|
+
* `a:alpha` child of `a:schemeClr`/`a:srgbClr`. Several built-in table
|
|
6469
|
+
* styles (e.g. "Light Style 1/3", "Themed Style 1/2") band their rows with
|
|
6470
|
+
* a partially transparent tint of the theme colour rather than a tint/shade
|
|
6471
|
+
* blend.
|
|
6472
|
+
*/
|
|
6473
|
+
alpha?: number;
|
|
6288
6474
|
/** Explicit sRGB hex colour (e.g. `#FF8800`) from `a:srgbClr`. */
|
|
6289
6475
|
color?: string;
|
|
6290
6476
|
/** The fill was `a:noFill`: renders transparent and clears lower layers. */
|
|
@@ -7120,6 +7306,20 @@ interface ContentPartInkStroke {
|
|
|
7120
7306
|
* NAMES differ.
|
|
7121
7307
|
*/
|
|
7122
7308
|
tiltEncoding?: 'vector' | 'azimuthAltitude';
|
|
7309
|
+
/**
|
|
7310
|
+
* Per-point timestamps (milliseconds), decoded from the source InkML
|
|
7311
|
+
* trace's `T` channel when it declared one.
|
|
7312
|
+
*
|
|
7313
|
+
* Absent for the overwhelming majority of real decks: PowerPoint's own
|
|
7314
|
+
* SaveAs output declares only `X`/`Y` and has no per-point time channel at
|
|
7315
|
+
* all (see `contentpart-real-ink-roundtrip.test.ts`'s fixture), so this is
|
|
7316
|
+
* populated only for InkML sources that genuinely author one (a captured
|
|
7317
|
+
* digitizer session, OneNote, a Surface Hub export). When present, ink
|
|
7318
|
+
* replay ("watch the ink get drawn") uses each stroke's own first/last
|
|
7319
|
+
* timestamp to time its reveal instead of the fixed per-stroke cascade; see
|
|
7320
|
+
* `pptx-viewer-shared`'s `render/ink-replay-timeline.ts`.
|
|
7321
|
+
*/
|
|
7322
|
+
pointTimestamps?: number[];
|
|
7123
7323
|
}
|
|
7124
7324
|
/**
|
|
7125
7325
|
* A content-part element wrapped in `mc:AlternateContent`.
|
|
@@ -7164,6 +7364,34 @@ interface ZoomPptxElement extends PptxElementBase, PptxImageProperties {
|
|
|
7164
7364
|
summaryTargets?: SummaryZoomTarget[];
|
|
7165
7365
|
/** Layout mode authored on the Summary Zoom container. */
|
|
7166
7366
|
summaryLayout?: 'grid' | 'fixed';
|
|
7367
|
+
/**
|
|
7368
|
+
* `zmPr/@returnToParent` (MS-PPTX `CT_ZoomObjectProperties`, shared by all
|
|
7369
|
+
* three Zoom kinds): whether continuing forward from the destination slide
|
|
7370
|
+
* during a live show returns to this Zoom's origin slide instead of
|
|
7371
|
+
* advancing linearly through the deck. The schema declares `<xsd:attribute
|
|
7372
|
+
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
7373
|
+
* so an ABSENT attribute means `true`, not `false`. This codebase still
|
|
7374
|
+
* leaves the field `undefined` (rather than fabricating `true`) when the
|
|
7375
|
+
* source XML omits it, so a round-trip never invents an attribute the
|
|
7376
|
+
* source never had; a CONSUMER of this field (playback, e.g.
|
|
7377
|
+
* `pptx-viewer-shared`'s `resolveZoomNavigationTarget`) must read
|
|
7378
|
+
* `returnToParent !== false`, not `Boolean(returnToParent)`, to get the
|
|
7379
|
+
* spec-correct effective value. For `zoomType: 'summary'`, this mirrors the
|
|
7380
|
+
* first tile's own value; see {@link SummaryZoomTarget.returnToParent} for
|
|
7381
|
+
* the per-tile value.
|
|
7382
|
+
*/
|
|
7383
|
+
returnToParent?: boolean;
|
|
7384
|
+
/**
|
|
7385
|
+
* `zmPr/@transitionDur` (MS-PPTX `CT_ZoomObjectProperties`): the
|
|
7386
|
+
* zoom-transition length in milliseconds. PowerPoint's own writer emits a
|
|
7387
|
+
* unitless decimal-millisecond value for every OOXML `ST_UniversalTimeOffset`
|
|
7388
|
+
* this codebase has observed (see the media-trim/-fade parsers), so this
|
|
7389
|
+
* follows the same convention rather than the full TIMEOFFSET grammar's
|
|
7390
|
+
* unit suffixes. Undefined uses the destination slide's own transition.
|
|
7391
|
+
* For `zoomType: 'summary'`, this mirrors the first tile's own value; see
|
|
7392
|
+
* {@link SummaryZoomTarget.transitionDurationMs} for the per-tile value.
|
|
7393
|
+
*/
|
|
7394
|
+
transitionDurationMs?: number;
|
|
7167
7395
|
}
|
|
7168
7396
|
/** A single section tile within a PowerPoint Summary Zoom container. */
|
|
7169
7397
|
interface SummaryZoomTarget extends PptxImageProperties {
|
|
@@ -7179,6 +7407,10 @@ interface SummaryZoomTarget extends PptxImageProperties {
|
|
|
7179
7407
|
offsetFactorY?: number;
|
|
7180
7408
|
scaleFactorX?: number;
|
|
7181
7409
|
scaleFactorY?: number;
|
|
7410
|
+
/** This tile's own `zmPr/@returnToParent`; see {@link ZoomPptxElement.returnToParent}. */
|
|
7411
|
+
returnToParent?: boolean;
|
|
7412
|
+
/** This tile's own `zmPr/@transitionDur` in milliseconds; see {@link ZoomPptxElement.transitionDurationMs}. */
|
|
7413
|
+
transitionDurationMs?: number;
|
|
7182
7414
|
rawXml?: XmlObject;
|
|
7183
7415
|
}
|
|
7184
7416
|
/**
|
|
@@ -8179,6 +8411,17 @@ interface PptxAttributeAnimation {
|
|
|
8179
8411
|
* IS consulted regardless of this field's value. Absent means `lin`.
|
|
8180
8412
|
*/
|
|
8181
8413
|
calcMode?: 'discrete' | 'lin' | 'fmla';
|
|
8414
|
+
/**
|
|
8415
|
+
* `p:anim/@_p14:bounceEnd` (Office 2010 `p14` extension attribute,
|
|
8416
|
+
* MS-OI29500), normalized to a 0-1 fraction of this behaviour's own
|
|
8417
|
+
* duration. PowerPoint's Fly In "Bounce End" effect option writes this on
|
|
8418
|
+
* the position-ramp `p:anim` node(s): the fraction of the duration at
|
|
8419
|
+
* which the primary travel completes, with the remainder spent bouncing
|
|
8420
|
+
* and settling at the final value. Mirrored verbatim by PowerPoint onto
|
|
8421
|
+
* the enclosing `p:cTn/@_p14:presetBounceEnd`. Absent for every animation
|
|
8422
|
+
* that doesn't use this effect option (the overwhelming majority).
|
|
8423
|
+
*/
|
|
8424
|
+
bounceEnd?: number;
|
|
8182
8425
|
}
|
|
8183
8426
|
/** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
|
|
8184
8427
|
interface PptxHslColorDelta {
|
|
@@ -8260,7 +8503,19 @@ interface PptxTextAnimationTarget {
|
|
|
8260
8503
|
* These map directly to OOXML condition event attribute values
|
|
8261
8504
|
* (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
|
|
8262
8505
|
*/
|
|
8263
|
-
type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
|
|
8506
|
+
type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick' | 'onMediaBookmark';
|
|
8507
|
+
/**
|
|
8508
|
+
* `p14:bmkTgt` (Office 2010 `p14` extension, MS-OI29500): names the specific
|
|
8509
|
+
* media element and bookmark an `evt="onMediaBookmark"` condition fires for.
|
|
8510
|
+
* `bookmarkName` matches a `p14:bmk/@_name` on that media element's own
|
|
8511
|
+
* `p14:bmkLst` (see `MediaBookmark.label` in `core/types/elements.ts`).
|
|
8512
|
+
*/
|
|
8513
|
+
interface PptxMediaBookmarkTarget {
|
|
8514
|
+
/** `p14:bmkTgt/@_spid`: the media element's shape id. */
|
|
8515
|
+
shapeId: string;
|
|
8516
|
+
/** `p14:bmkTgt/@_bmkName`: the bookmark's name. */
|
|
8517
|
+
bookmarkName: string;
|
|
8518
|
+
}
|
|
8264
8519
|
/**
|
|
8265
8520
|
* Structured representation of a single OOXML animation condition
|
|
8266
8521
|
* from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
|
|
@@ -8280,6 +8535,11 @@ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick'
|
|
|
8280
8535
|
interface AnimationCondition {
|
|
8281
8536
|
/** Event that triggers the condition. */
|
|
8282
8537
|
event?: AnimationConditionEvent;
|
|
8538
|
+
/**
|
|
8539
|
+
* The media element/bookmark this condition fires for, when
|
|
8540
|
+
* {@link event} is `onMediaBookmark`. See {@link PptxMediaBookmarkTarget}.
|
|
8541
|
+
*/
|
|
8542
|
+
bookmarkTarget?: PptxMediaBookmarkTarget;
|
|
8283
8543
|
/** Delay in milliseconds (from `@_delay`). "indefinite" is represented as -1. */
|
|
8284
8544
|
delay?: number;
|
|
8285
8545
|
/** Target time node ID reference (from `@_tn`). */
|
|
@@ -9128,7 +9388,12 @@ interface PptxSlideTransition {
|
|
|
9128
9388
|
spokes?: number;
|
|
9129
9389
|
/** Pattern type for shred transition. */
|
|
9130
9390
|
pattern?: string;
|
|
9131
|
-
/**
|
|
9391
|
+
/**
|
|
9392
|
+
* Through-black flag (OOXML `@_thruBlk`). COM-verified to actually apply to
|
|
9393
|
+
* `cut` and `fade` (see {@link TRANSITION_THRUBLK_TYPES}); parsed generically
|
|
9394
|
+
* off any standard transition child so an unexpected authored value still
|
|
9395
|
+
* round-trips.
|
|
9396
|
+
*/
|
|
9132
9397
|
thruBlk?: boolean;
|
|
9133
9398
|
/** Split orientation (horz/vert) parsed from `@_orient`. */
|
|
9134
9399
|
orient?: PptxSplitOrientation;
|
|
@@ -9598,7 +9863,12 @@ interface PptxHeaderFooter {
|
|
|
9598
9863
|
hasDateTime?: boolean;
|
|
9599
9864
|
dateTimeText?: string;
|
|
9600
9865
|
dateTimeAuto?: boolean;
|
|
9601
|
-
/**
|
|
9866
|
+
/**
|
|
9867
|
+
* The master date placeholder's own `a:fld/@type` (e.g. "datetime2"), NOT a
|
|
9868
|
+
* format pattern. It is one of the predefined OOXML datetime field types
|
|
9869
|
+
* (`datetime1`-`datetime13`); the display pattern for each is resolved by
|
|
9870
|
+
* `resolveFieldDateText` in `packages/shared/src/render/text-field-substitution.ts`.
|
|
9871
|
+
*/
|
|
9602
9872
|
dateFormat?: string;
|
|
9603
9873
|
hasSlideNumber?: boolean;
|
|
9604
9874
|
}
|
|
@@ -10095,7 +10365,7 @@ interface PptxEmbeddedFont {
|
|
|
10095
10365
|
originalPartBytes?: Uint8Array;
|
|
10096
10366
|
}
|
|
10097
10367
|
//#endregion
|
|
10098
|
-
//#region ../core/dist/index-
|
|
10368
|
+
//#region ../core/dist/index-D4AXE4vG.d.ts
|
|
10099
10369
|
//#region src/core/types/theme-presets.d.ts
|
|
10100
10370
|
/**
|
|
10101
10371
|
* A complete theme preset that can be applied to a presentation.
|
|
@@ -12595,13 +12865,21 @@ interface InlineTextSelection {
|
|
|
12595
12865
|
* Pure string logic: resolves OOXML field runs (slide number, date/time,
|
|
12596
12866
|
* header/footer, document properties, slide title) into their display text.
|
|
12597
12867
|
* Extracted from the React `viewer/utils/text-field-substitution` module so
|
|
12598
|
-
* every binding substitutes identically.
|
|
12868
|
+
* every binding substitutes identically. The locale-aware datetime engine
|
|
12869
|
+
* lives in `text-field-datetime.ts`.
|
|
12599
12870
|
*/
|
|
12600
12871
|
/** Context for substituting field placeholders (slide number, date/time, header/footer, etc.). */
|
|
12601
12872
|
interface FieldSubstitutionContext {
|
|
12602
12873
|
slideNumber?: number;
|
|
12603
12874
|
dateTimeText?: string;
|
|
12604
|
-
/**
|
|
12875
|
+
/**
|
|
12876
|
+
* The deck's master date-field default TYPE (`a:fld/@type` on the slide
|
|
12877
|
+
* master's `dt` placeholder, e.g. "datetime2"; see `header-footer-parts.ts`).
|
|
12878
|
+
* This is a field TYPE, not a format pattern, and is used ONLY as a
|
|
12879
|
+
* fallback for a field authored with the generic, unnumbered `datetime`
|
|
12880
|
+
* type - a field that already names its own `datetime1`-`datetime13` type
|
|
12881
|
+
* always uses that type, never this one (see `substituteFieldText`).
|
|
12882
|
+
*/
|
|
12605
12883
|
dateFormat?: string;
|
|
12606
12884
|
/** Footer text from PptxHeaderFooter settings. */
|
|
12607
12885
|
footerText?: string;
|
|
@@ -12978,7 +13256,7 @@ declare const P14_TRANSITION_KEYFRAMES = "\n/* ── Conveyor (translate X with
|
|
|
12978
13256
|
/** Part 2: prism / reveal / ripple / shred / switch / vortex / warp / wheelReverse / window. */
|
|
12979
13257
|
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";
|
|
12980
13258
|
/** Both p14 keyframe blocks concatenated, for single `<style>` injection. */
|
|
12981
|
-
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";
|
|
13259
|
+
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";
|
|
12982
13260
|
//#endregion
|
|
12983
13261
|
//#region src/render/p14-transition-css.d.ts
|
|
12984
13262
|
/**
|
|
@@ -13199,6 +13477,10 @@ declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | n
|
|
|
13199
13477
|
/** Blackout state, as carried by {@link PresentationSnapshot}. */
|
|
13200
13478
|
type PresentationBlackout = PresentationSnapshot['blackout'];
|
|
13201
13479
|
//#endregion
|
|
13480
|
+
//#region src/render/paste-special.d.ts
|
|
13481
|
+
/** The four paste formats PowerPoint's Paste Options / Paste Special offer. */
|
|
13482
|
+
type PasteSpecialFormat = 'keep-source-formatting' | 'use-destination-theme' | 'picture' | 'keep-text-only';
|
|
13483
|
+
//#endregion
|
|
13202
13484
|
//#region src/render/alignment-guides.d.ts
|
|
13203
13485
|
/** A single alignment guide, positioned in authored slide pixels. */
|
|
13204
13486
|
interface Guide {
|
|
@@ -13322,6 +13604,28 @@ declare function createImageElementFromFile(file: Blob, canvasSize: CanvasSize,
|
|
|
13322
13604
|
*/
|
|
13323
13605
|
/** Shape preset geometry types offered by the insert picker. */
|
|
13324
13606
|
type ShapePresetType = 'rect' | 'roundRect' | 'ellipse' | 'cylinder' | 'rtArrow' | 'leftArrow' | 'upArrow' | 'downArrow' | 'triangle' | 'rtTriangle' | 'diamond' | 'parallelogram' | 'trapezoid' | 'pentagon' | 'hexagon' | 'octagon' | 'chevron' | 'star5' | 'star6' | 'star8' | 'plus' | 'heart' | 'cloud' | 'sun' | 'moon' | 'pie' | 'plaque' | 'teardrop' | 'line' | 'connector';
|
|
13607
|
+
//#endregion
|
|
13608
|
+
//#region src/render/zoom-return-navigation.d.ts
|
|
13609
|
+
/**
|
|
13610
|
+
* The navigation-relevant fields of a Zoom click target, independent of
|
|
13611
|
+
* `zoomType`.
|
|
13612
|
+
*
|
|
13613
|
+
* `returnToParent` is already resolved to its EFFECTIVE value here (not the
|
|
13614
|
+
* raw, possibly-`undefined` `ZoomPptxElement`/`SummaryZoomTarget` field):
|
|
13615
|
+
* `CT_ZoomObjectProperties/@returnToParent` (MS-PPTX) is `<xsd:attribute
|
|
13616
|
+
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
13617
|
+
* so an ABSENT attribute means true, not false. Core deliberately stores
|
|
13618
|
+
* `undefined` rather than fabricating `true` (so a round-trip never invents
|
|
13619
|
+
* an attribute the source never had), which makes `Boolean(x)` the wrong way
|
|
13620
|
+
* to read it; the two `resolve*NavigationTarget` functions below are the only
|
|
13621
|
+
* place that distinction should be made.
|
|
13622
|
+
*/
|
|
13623
|
+
interface ZoomNavigationTarget {
|
|
13624
|
+
targetSlideIndex: number;
|
|
13625
|
+
targetSectionId?: string;
|
|
13626
|
+
returnToParent: boolean;
|
|
13627
|
+
transitionDurationMs?: number;
|
|
13628
|
+
}
|
|
13325
13629
|
interface AutosaveRecord {
|
|
13326
13630
|
key: string;
|
|
13327
13631
|
data: Uint8Array;
|
|
@@ -13591,5 +13895,5 @@ interface TransitionOverlayParams {
|
|
|
13591
13895
|
*/
|
|
13592
13896
|
declare function playTransitionOverlay(params: TransitionOverlayParams): () => void;
|
|
13593
13897
|
//#endregion
|
|
13594
|
-
export {
|
|
13595
|
-
//# sourceMappingURL=transition-overlay-
|
|
13898
|
+
export { RANDOM_ELIGIBLE_TYPES as $, PptxSmartArtData as $n, savedPresentationFileName as $t, FieldSubstitutionContext as A, PptxComment as An, canInteractWithElement as At, MobileSheetKey as B, PptxEmbeddedFont as Bn, loadPresentationDeck as Bt, ElementAnimationState as C, PptxAnimationRepeatMode as Cn, ViewerMode as Ct, ExternalCollaborationAwareness as D, PptxAnimationTrigger as Dn, WHEEL_SPOKE_COUNTS as Dt, ElementUpdateOptions as E, PptxAnimationTimingCurve as En, ViewportFitPadding as Et, InlineTextEditSnapshot as F, PptxCustomProperty as Fn, getP14TransitionAnimations as Ft, PPTX_OPEN_ACCEPT as G, PptxModernCommentAuthor as Gn, rememberSessionDeck as Gt, P14_TRANSITION_KEYFRAMES as H, PptxHeaderFooter as Hn, overlayInlineTextSnapshot as Ht, InlineTextSelection as I, PptxCustomShow as In, getSessionTabId as It, PowerPointViewerAPI as J, PptxPresentationProperties as Jn, resolveOrientation as Jt, PRESENTATION_OPEN_EXTENSIONS as K, PptxModifyVerifier as Kn, resolveDirection as Kt, InsertChartKind as L, PptxData as Ln, getSlideTransitionAnimations as Lt, Guide as M, PptxCommentMention as Mn, describeCollaborationShellState as Mt, INSTANT as N, PptxCompatibilityWarning as Nn, forgetSessionDeck as Nt, ExternalCollaborationSession as O, PptxAppProperties as On, ZoomNavigationTarget as Ot, InlineListReadResult as P, PptxCoreProperties as Pn, getCinematicTransitionAnimations as Pt, PrintSettings as Q, PptxSlideTransition as Qn, restoreSessionDeck as Qt, MasterViewCrudAction as R, PptxElement as Rn, isLegacyBinaryPresentation as Rt, EASE as S, PptxAnimationPreset as Sn, ViewerFontSource as St, ElementUpdate as T, PptxAnimationTimelineAnchor as Tn, ViewportFitOptions as Tt, P14_TRANSITION_KEYFRAMES_2 as U, PptxImageEffects as Un, parsePresentationSessionId as Ut, ModifyPasswordCheckResult as V, PptxHandoutMaster as Vn, loadSessionDeck as Vt, P14_TRANSITION_KEYFRAMES_ALL as W, PptxLayoutPreview as Wn, presentationBaseName as Wt, PresentationPointerTool as X, PptxSlide as Xn, resolveTransitionDurationMs as Xt, PresentationBlackout as Y, PptxSection as Yn, resolveSlideTransition as Yt, PresentationSnapshot as Z, PptxSlideMaster as Zn, resolveWheelSpokeCount as Zt, CompatibilityWarningToast as _, OleObjectType as _n, TextSegment as _r, SlideTransitionAnimations as _t, AnimationGroup as a, defaultThemeColors as an, PptxTheme as ar, RulerUnit as at, DEFAULT_MORPH_DURATION_MS as b, PptxAfterAnimationAction as bn, TextAdvancedChanges as bt, CanvasSize as c, vermilionLightTheme as cn, PptxThemeFontScheme as cr, SLIDE_TRANSITION_KEYFRAMES_CSS as ct, CollabLoadOrigin as d, PptxHandlerSaveOptions as dn, PptxViewProperties as dr, SessionDeck as dt, ThemeCatalogEntry as en, PptxSmartArtNodeStyle as er, ReadOnlyRecommendation as et, CollaborationConfig as f, PptxSaveFormat as fn, ShapeStyle as fr, ShapePresetType as ft, CollaborationTransport as g, MediaPptxElement as gn, TablePptxElement as gr, SlideTemplateId as gt, CollaborationShellState as h, MasterViewTab as hn, SmartArtLayoutType as hr, SlideSizeRescaleMode as ht, AlignEdge as i, defaultRadius as in, PptxTextStyleLevels as ir, RibbonTransitionDraft as it, GradientState as j, PptxCommentAuthor as jn, createImageElementFromFile as jt, ExternalCollaborationSnapshot as k, PptxChartData as kn, buildInlineTextCommitPatch as kt, ChangeCaseMode as l, AccessibilityIssue as ln, PptxThemeOption as lr, SanitizedPresence as lt, CollaborationRole as m, ElementAction as mn, SmartArtLayout as mr, SlideSizeEmu as mt, playTransitionOverlay as n, ViewerThemeColors as nn, PptxTableData as nr, ResolvedDirection as nt, AutosaveRecord as o, themeToCssVars as on, PptxThemeColorRef as or, RunProgramNotice as ot, CollaborationLivePatcher as p, SvgExportOptions as pn, SmartArtColorScheme as pr, ShareDefaults as pt, PasteSpecialFormat as q, PptxNotesMaster as qn, resolveDirection8 as qt, AccountAuthConfig as r, defaultCssVars as rn, PptxTagCollection as rr, ResolvedDirection8 as rt, CINEMATIC_TRANSITION_KEYFRAMES as s, vermilionDarkTheme as sn, PptxThemeColorScheme as sr, SLIDE_TRANSITION_KEYFRAMES as st, TransitionOverlayParams as t, ViewerTheme as tn, PptxTableCellStyle as tr, RemoteCursor as tt, ChartPartRef as u, PptxHandler as un, PptxTransitionType as ur, SavedPresentationFormat as ut, ConnectionStatus as v, OlePptxElement as vn, TextStyle as vr, StrokeToInkElementOpts as vt, ElementClipboardPayload as w, PptxAnimationSequence as wn, ViewerQuickAccessOptions as wt, DEFAULT_TRANSITION_DURATION_MS as x, PptxAnimationDirection as xn, ToolbarActionId as xt, CssStyleMap as y, ParsedTableStyleMap as yn, XmlObject as yr, TRANSITION_SPEED_DURATION_MS as yt, MasterViewCrudActionId as z, PptxElementAnimation as zn, isSupportedPresentationFile as zt };
|
|
13899
|
+
//# sourceMappingURL=transition-overlay-_0B-nMEW.d.ts.map
|