pptx-react-viewer 4.2.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.
Files changed (136) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/dist/{AiChatPanel-SEIRQ3XP.mjs → AiChatPanel-QJHUDIWT.mjs} +4 -4
  3. package/dist/AiChatPanel-QJHUDIWT.mjs.br +0 -0
  4. package/dist/AiChatPanel-QJHUDIWT.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-VVTLQXQ5.js → AiChatPanel-UFMSTNCB.js} +28 -28
  6. package/dist/AiChatPanel-UFMSTNCB.js.br +0 -0
  7. package/dist/AiChatPanel-UFMSTNCB.js.gz +0 -0
  8. package/dist/{Model3DScene-DCTVSK2F.mjs → Model3DScene-3GOC5HUS.mjs} +1 -1
  9. package/dist/Model3DScene-3GOC5HUS.mjs.br +0 -0
  10. package/dist/Model3DScene-3GOC5HUS.mjs.gz +0 -0
  11. package/dist/{Model3DScene-SCWQXMEA.js → Model3DScene-KXNJBAQD.js} +2 -2
  12. package/dist/Model3DScene-KXNJBAQD.js.br +0 -0
  13. package/dist/Model3DScene-KXNJBAQD.js.gz +0 -0
  14. package/dist/{chunk-S65QSO6T.js → chunk-7WWINBGF.js} +17172 -8075
  15. package/dist/chunk-7WWINBGF.js.br +0 -0
  16. package/dist/chunk-7WWINBGF.js.gz +0 -0
  17. package/dist/{chunk-KTSDPBQZ.js → chunk-AI6K5EAE.js} +1270 -1079
  18. package/dist/chunk-AI6K5EAE.js.br +0 -0
  19. package/dist/chunk-AI6K5EAE.js.gz +0 -0
  20. package/dist/{chunk-3WYNGYB6.js → chunk-CSY422LU.js} +5 -5
  21. package/dist/chunk-CSY422LU.js.br +0 -0
  22. package/dist/chunk-CSY422LU.js.gz +0 -0
  23. package/dist/{chunk-VPJOJJ36.mjs → chunk-D3TZOCQP.mjs} +17139 -8067
  24. package/dist/chunk-D3TZOCQP.mjs.br +0 -0
  25. package/dist/chunk-D3TZOCQP.mjs.gz +0 -0
  26. package/dist/{chunk-NXGUR2DO.js → chunk-I4D6JQOI.js} +27 -2
  27. package/dist/chunk-I4D6JQOI.js.br +0 -0
  28. package/dist/chunk-I4D6JQOI.js.gz +0 -0
  29. package/dist/{chunk-PC7H3C5W.mjs → chunk-JQXN6PO7.mjs} +27 -2
  30. package/dist/chunk-JQXN6PO7.mjs.br +0 -0
  31. package/dist/chunk-JQXN6PO7.mjs.gz +0 -0
  32. package/dist/{chunk-ZYIJODUR.mjs → chunk-LUHUYBGW.mjs} +211 -20
  33. package/dist/chunk-LUHUYBGW.mjs.br +0 -0
  34. package/dist/chunk-LUHUYBGW.mjs.gz +0 -0
  35. package/dist/{chunk-5MRNT4V6.js → chunk-OWTHF5N4.js} +209 -187
  36. package/dist/chunk-OWTHF5N4.js.br +0 -0
  37. package/dist/chunk-OWTHF5N4.js.gz +0 -0
  38. package/dist/{chunk-4GTDG2FH.mjs → chunk-WCHKDZP6.mjs} +660 -197
  39. package/dist/chunk-WCHKDZP6.mjs.br +0 -0
  40. package/dist/chunk-WCHKDZP6.mjs.gz +0 -0
  41. package/dist/{chunk-B5YZABYX.mjs → chunk-WNFHFFYE.mjs} +32 -10
  42. package/dist/chunk-WNFHFFYE.mjs.br +0 -0
  43. package/dist/chunk-WNFHFFYE.mjs.gz +0 -0
  44. package/dist/{chunk-L4XBWL7J.mjs → chunk-XMKLY2SE.mjs} +1 -1
  45. package/dist/chunk-XMKLY2SE.mjs.br +0 -0
  46. package/dist/chunk-XMKLY2SE.mjs.gz +0 -0
  47. package/dist/{chunk-P2SBIMYF.js → chunk-YJKR7Z3X.js} +2161 -1698
  48. package/dist/chunk-YJKR7Z3X.js.br +0 -0
  49. package/dist/chunk-YJKR7Z3X.js.gz +0 -0
  50. package/dist/i18n/de.cjs +25 -2
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +25 -2
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +25 -2
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +25 -2
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +25 -2
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +25 -2
  66. package/dist/i18n/fr.mjs.br +0 -0
  67. package/dist/i18n/fr.mjs.gz +0 -0
  68. package/dist/i18n/zh-CN.cjs +25 -2
  69. package/dist/i18n/zh-CN.cjs.br +0 -0
  70. package/dist/i18n/zh-CN.cjs.gz +0 -0
  71. package/dist/i18n/zh-CN.mjs +25 -2
  72. package/dist/i18n/zh-CN.mjs.br +0 -0
  73. package/dist/i18n/zh-CN.mjs.gz +0 -0
  74. package/dist/i18n.js +4 -4
  75. package/dist/i18n.js.br +0 -0
  76. package/dist/i18n.js.gz +0 -0
  77. package/dist/i18n.mjs +1 -1
  78. package/dist/i18n.mjs.br +0 -0
  79. package/dist/i18n.mjs.gz +0 -0
  80. package/dist/index.d.ts +311 -6
  81. package/dist/index.js +49 -49
  82. package/dist/index.js.br +0 -0
  83. package/dist/index.js.gz +0 -0
  84. package/dist/index.mjs +6 -6
  85. package/dist/index.mjs.br +0 -0
  86. package/dist/index.mjs.gz +0 -0
  87. package/dist/internals.d.ts +461 -42
  88. package/dist/internals.js +105 -105
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +4 -4
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/viewer/index.d.ts +274 -4
  98. package/dist/viewer/index.js +27 -27
  99. package/dist/viewer/index.js.br +0 -0
  100. package/dist/viewer/index.js.gz +0 -0
  101. package/dist/viewer/index.mjs +6 -6
  102. package/dist/viewer/index.mjs.br +0 -0
  103. package/dist/viewer/index.mjs.gz +0 -0
  104. package/package.json +1 -1
  105. package/dist/AiChatPanel-SEIRQ3XP.mjs.br +0 -0
  106. package/dist/AiChatPanel-SEIRQ3XP.mjs.gz +0 -0
  107. package/dist/AiChatPanel-VVTLQXQ5.js.br +0 -0
  108. package/dist/AiChatPanel-VVTLQXQ5.js.gz +0 -0
  109. package/dist/Model3DScene-DCTVSK2F.mjs.br +0 -0
  110. package/dist/Model3DScene-DCTVSK2F.mjs.gz +0 -0
  111. package/dist/Model3DScene-SCWQXMEA.js.br +0 -0
  112. package/dist/Model3DScene-SCWQXMEA.js.gz +0 -0
  113. package/dist/chunk-3WYNGYB6.js.br +0 -0
  114. package/dist/chunk-3WYNGYB6.js.gz +0 -0
  115. package/dist/chunk-4GTDG2FH.mjs.br +0 -0
  116. package/dist/chunk-4GTDG2FH.mjs.gz +0 -0
  117. package/dist/chunk-5MRNT4V6.js.br +0 -0
  118. package/dist/chunk-5MRNT4V6.js.gz +0 -0
  119. package/dist/chunk-B5YZABYX.mjs.br +0 -0
  120. package/dist/chunk-B5YZABYX.mjs.gz +0 -0
  121. package/dist/chunk-KTSDPBQZ.js.br +0 -0
  122. package/dist/chunk-KTSDPBQZ.js.gz +0 -0
  123. package/dist/chunk-L4XBWL7J.mjs.br +0 -0
  124. package/dist/chunk-L4XBWL7J.mjs.gz +0 -0
  125. package/dist/chunk-NXGUR2DO.js.br +0 -0
  126. package/dist/chunk-NXGUR2DO.js.gz +0 -0
  127. package/dist/chunk-P2SBIMYF.js.br +0 -0
  128. package/dist/chunk-P2SBIMYF.js.gz +0 -0
  129. package/dist/chunk-PC7H3C5W.mjs.br +0 -0
  130. package/dist/chunk-PC7H3C5W.mjs.gz +0 -0
  131. package/dist/chunk-S65QSO6T.js.br +0 -0
  132. package/dist/chunk-S65QSO6T.js.gz +0 -0
  133. package/dist/chunk-VPJOJJ36.mjs.br +0 -0
  134. package/dist/chunk-VPJOJJ36.mjs.gz +0 -0
  135. package/dist/chunk-ZYIJODUR.mjs.br +0 -0
  136. package/dist/chunk-ZYIJODUR.mjs.gz +0 -0
@@ -1398,6 +1398,32 @@ interface TextStyle {
1398
1398
  * @see element-paragraph-geometry.ts
1399
1399
  */
1400
1400
  resolvedParagraphGeometry?: TextStyle;
1401
+ /**
1402
+ * Snapshot of the ELEMENT-scope `a:bodyPr` properties (vertical anchor,
1403
+ * text direction, columns, overflow, autofit, body insets, text wrap, and
1404
+ * the boolean/rotation attributes) as the load pipeline resolved them.
1405
+ *
1406
+ * A shape's own `a:bodyPr` is parsed first, then whatever it left
1407
+ * `undefined` is back-filled from the placeholder / layout / master
1408
+ * defaults (`applyPlaceholderBodyDefaults`), and a placeholder shape with
1409
+ * no `a:bodyPr` of its own has the INHERITED one parsed as if it were its
1410
+ * own. None of those three sources is distinguishable at
1411
+ * `element.textStyle` once the cascade finishes, so a writer that
1412
+ * re-emits every defined field turns an inherited anchor, inset, autofit
1413
+ * mode or `rtlCol` into a value pinned on the slide forever (and an
1414
+ * inherited `a:normAutofit` with no scale gets written back as
1415
+ * `a:spAutoFit`, flipping AutoSize from "shrink text" to "resize shape").
1416
+ *
1417
+ * Present only on an `element.textStyle` that came from a parsed deck.
1418
+ * The save path diffs the live style against this snapshot: a field that
1419
+ * still matches is an inheritance artefact and the writer leaves the
1420
+ * underlying `a:bodyPr` attribute untouched (whatever it already is,
1421
+ * present or absent); a field that differs was authored or has since
1422
+ * been edited and is written out.
1423
+ *
1424
+ * @see element-body-properties.ts
1425
+ */
1426
+ resolvedBodyProperties?: TextStyle;
1401
1427
  fontFamily?: string;
1402
1428
  fontSize?: number;
1403
1429
  /** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
@@ -1580,6 +1606,16 @@ interface TextStyle {
1580
1606
  align: 'l' | 'ctr' | 'r' | 'dec';
1581
1607
  leader?: 'none' | 'dot' | 'hyphen' | 'underscore';
1582
1608
  }>;
1609
+ /**
1610
+ * True when the paragraph's own `a:pPr` authored an EMPTY `<a:tabLst/>`
1611
+ * (explicitly "no tab stops", overriding whatever the cascade would
1612
+ * otherwise supply) rather than omitting the element entirely (inherit).
1613
+ * fast-xml-parser gives a childless element as the empty string, so
1614
+ * `tabLst` and no-`tabLst` are otherwise indistinguishable once `tabStops`
1615
+ * comes back empty either way. Paragraph-scope only; not part of the
1616
+ * element-level geometry cascade.
1617
+ */
1618
+ tabStopsExplicitEmpty?: boolean;
1583
1619
  /** Body text wrapping mode from `a:bodyPr/@wrap`. */
1584
1620
  textWrap?: 'square' | 'none';
1585
1621
  /** Preset text warp type from `a:bodyPr/a:prstTxWarp`. */
@@ -1622,6 +1658,20 @@ interface TextStyle {
1622
1658
  * serialised back on save, so it never disturbs the round-trip typefaces.
1623
1659
  */
1624
1660
  scriptFallbackFont?: string;
1661
+ /**
1662
+ * Set alongside {@link scriptFallbackFont} when the resolved {@link fontFamily}
1663
+ * came only from the paragraph/list-style/theme CASCADE (the run's own
1664
+ * `a:rPr` authored no `a:latin`/`a:ea`/`a:cs` of its own). A run always
1665
+ * inherits SOME font this way (typically the theme's `+mn-lt`), so without
1666
+ * this flag `fontFamily` was indistinguishable from a run that genuinely
1667
+ * chose that font itself, and the renderer never applied the theme's
1668
+ * per-script override (see #83): `+mn-lt` names only the LATIN member of
1669
+ * the font scheme and was never meant to cover text in a different
1670
+ * dominant script. An explicit `a:latin`/`a:ea`/`a:cs` authored on the run
1671
+ * itself still always wins; only the cascade default yields to the
1672
+ * script-specific override.
1673
+ */
1674
+ fontFamilyIsCascadeDefault?: boolean;
1625
1675
  /** Text language from `a:rPr/@lang`. */
1626
1676
  language?: string;
1627
1677
  /** Hyperlink mouse-over target from `a:hlinkMouseOver`. */
@@ -1644,6 +1694,16 @@ interface TextStyle {
1644
1694
  hyperlinkHighlightClick?: boolean;
1645
1695
  /** Whether hyperlink ends a sound (`a:hlinkClick/@endSnd`). */
1646
1696
  hyperlinkEndSound?: boolean;
1697
+ /**
1698
+ * Raw `a:hlinkClick/a:extLst` child, preserved verbatim for round-trip.
1699
+ * Carries vendor extensions this engine does not interpret, most commonly
1700
+ * `ahyp:hlinkClr` (Microsoft's "hyperlink color" extension,
1701
+ * `{A12FA001-AC4F-418D-AE19-62706E023703}`), which records whether a
1702
+ * hyperlink run should paint with the theme's text colour instead of the
1703
+ * hyperlink colour. Dropping the whole `a:extLst` silently reverted such a
1704
+ * run to the default (themed) hyperlink colour on save.
1705
+ */
1706
+ hyperlinkExtensionXml?: XmlObject;
1647
1707
  /** Kumimoji (ideographic text combining) flag for vertical CJK text (`a:rPr/@kumimoji`). */
1648
1708
  kumimoji?: boolean;
1649
1709
  /** Normalize height flag (`a:rPr/@normalizeH`). */
@@ -1797,6 +1857,15 @@ interface TextStyle {
1797
1857
  textGlowRadius?: number;
1798
1858
  /** Text glow opacity (0-1). */
1799
1859
  textGlowOpacity?: number;
1860
+ /**
1861
+ * Original glow colour-choice XML (`a:glow`'s `a:schemeClr`/`a:srgbClr`/…
1862
+ * child), preserved verbatim so a theme colour reference round-trips
1863
+ * instead of always being re-serialized as a resolved `a:srgbClr` (which
1864
+ * cuts the glow off from theme/Recolor changes).
1865
+ */
1866
+ textGlowColorXml?: XmlObject;
1867
+ /** Theme colour slot the glow colour resolved from, when it is `a:schemeClr`. */
1868
+ textGlowColorRef?: PptxThemeColorRef;
1800
1869
  /** Text reflection enabled flag. */
1801
1870
  textReflection?: boolean;
1802
1871
  /** Text reflection blur radius in px. */
@@ -1933,6 +2002,18 @@ interface BulletInfo {
1933
2002
  paragraphIndex?: number;
1934
2003
  /** Bullet font family from `a:buFont`. */
1935
2004
  fontFamily?: string;
2005
+ /**
2006
+ * PANOSE font-matching hint from `a:buFont/@panose`. `a:buFont` is a
2007
+ * CT_TextFont, the same complex type as `a:latin`/`a:ea`/`a:cs`/`a:sym`
2008
+ * (which carry the equivalent `TextStyle.latinFontPanose` etc.), so a
2009
+ * bullet's own PANOSE/pitch-family/charset decide the fallback glyph
2010
+ * PowerPoint substitutes when the named typeface is missing.
2011
+ */
2012
+ fontPanose?: string;
2013
+ /** Font pitch-and-family byte from `a:buFont/@pitchFamily`. */
2014
+ fontPitchFamily?: number;
2015
+ /** Font character-set byte from `a:buFont/@charset`. */
2016
+ fontCharset?: number;
1936
2017
  /** Bullet size as percentage of text font size from `a:buSzPct`. */
1937
2018
  sizePercent?: number;
1938
2019
  /** Bullet size in points from `a:buSzPts`. */
@@ -1974,6 +2055,18 @@ interface BulletInfo {
1974
2055
  /** When true, `<a:buSzTx/>` was specified — inherit the bullet size from
1975
2056
  * the run text font size. */
1976
2057
  sizeInherit?: boolean;
2058
+ /**
2059
+ * True when this bullet resolution came from the paragraph's OWN `a:pPr`
2060
+ * rather than the shape's `a:lstStyle`, an inherited placeholder, or the
2061
+ * master's `a:defPPr` / `p:txStyles`. `resolveParagraphBulletInfo` walks
2062
+ * that cascade and returns the first match, so without this flag a
2063
+ * writer that re-emits every resolved `BulletInfo` in full pins an
2064
+ * inherited bullet (e.g. a master `buFont="Arial"` / `buChar="•"`) onto
2065
+ * every paragraph's own `a:pPr` the moment the slide is rewritten. The
2066
+ * save path only writes the bullet group when this is `true`, mirroring
2067
+ * how `paragraphProperties` gates every other per-paragraph field.
2068
+ */
2069
+ ownedByParagraph?: boolean;
1977
2070
  }
1978
2071
  /**
1979
2072
  * A single text run within a paragraph.
@@ -2016,6 +2109,23 @@ interface TextSegment {
2016
2109
  fieldParagraphPropertiesXml?: XmlObject;
2017
2110
  /** Raw OMML XML node for equation segments (from `a14:m` / `m:oMathPara`). */
2018
2111
  equationXml?: Record<string, unknown>;
2112
+ /**
2113
+ * The ORIGINAL top-level paragraph child that carried this equation,
2114
+ * captured verbatim at parse time and keyed by its own tag: `{ 'a14:m':
2115
+ * ... }`, `{ 'm:oMathPara': ... }`, `{ 'm:oMath': ... }`, or `{
2116
+ * 'mc:AlternateContent': ... }` for an equation authored behind a
2117
+ * Choice/Fallback switch. `equationXml` above is the resolved math content
2118
+ * used for rendering (unwrapped one level for `a14:m`/`mc:AlternateContent`
2119
+ * sources); this field exists solely so the writer can re-emit an UNTOUCHED
2120
+ * equation byte-for-byte, Choice and Fallback both, instead of collapsing
2121
+ * it to a bare math element PowerPoint's own writer never produces.
2122
+ * `undefined` for a freshly inserted or edited equation, which the writer
2123
+ * instead reconstructs from `equationXml` (always `{ 'm:oMathPara': ... }`
2124
+ * or `{ 'm:oMath': ... }` for those cases). Any code that replaces
2125
+ * `equationXml` on an existing segment must drop this field, or the writer
2126
+ * would keep re-emitting the equation's OLD XML instead of the edit.
2127
+ */
2128
+ equationSourceXml?: Record<string, unknown>;
2019
2129
  /**
2020
2130
  * Optional equation number for numbered equations (e.g. "(1)", "(2.3)").
2021
2131
  * When present, the equation is rendered centered with the number right-aligned.
@@ -2300,6 +2410,24 @@ interface PptxShapeProperties {
2300
2410
  */
2301
2411
  interface PlaceholderTextLevelStyle {
2302
2412
  fontFamily?: string;
2413
+ /**
2414
+ * The RAW `a:defRPr/a:latin/@typeface` string (verbatim: a theme alias
2415
+ * such as `+mj-lt`/`+mn-lt`, or a literal face name) {@link fontFamily}
2416
+ * was resolved from. Master/layout text styles are parsed once and
2417
+ * cached, so `fontFamily` is a resolved-for-display snapshot; re-emitting
2418
+ * it as the literal name on every save (the master-level analogue of
2419
+ * `colorChoiceXml` below) flattens the theme alias the moment ANYTHING
2420
+ * about the deck is rewritten, even when this level was never touched.
2421
+ * Absent when the level declares no `a:latin`.
2422
+ */
2423
+ fontTypefaceXml?: string;
2424
+ /**
2425
+ * Snapshot of {@link fontFamily} exactly as parsed, before any edit. The
2426
+ * save path diffs the live value against this: unchanged means re-emit
2427
+ * {@link fontTypefaceXml} verbatim (preserve the alias); different means
2428
+ * a genuine edit, so the new literal name is written instead.
2429
+ */
2430
+ resolvedFontFamily?: string;
2303
2431
  fontSize?: number;
2304
2432
  bold?: boolean;
2305
2433
  italic?: boolean;
@@ -2349,8 +2477,32 @@ interface PlaceholderTextLevelStyle {
2349
2477
  tabStops?: TextStyle['tabStops'];
2350
2478
  lineSpacing?: number;
2351
2479
  lineSpacingExactPt?: number;
2480
+ /**
2481
+ * Space before the paragraph in px, resolved from EITHER `a:spcPts`
2482
+ * (absolute) or `a:spcPct` (a percentage of this level's own `a:defRPr`
2483
+ * font size) - the OOXML source is not distinguishable from this field
2484
+ * alone. See {@link spaceBeforePercent} / {@link resolvedSpaceBefore}.
2485
+ */
2352
2486
  spaceBefore?: number;
2353
2487
  spaceAfter?: number;
2488
+ /**
2489
+ * Snapshot of {@link spaceBefore} / {@link spaceAfter} exactly as parsed.
2490
+ * Diffed the same way as {@link resolvedFontFamily}: unchanged means the
2491
+ * writer re-emits the ORIGINAL form (`a:spcPct` when
2492
+ * {@link spaceBeforePercent} / {@link spaceAfterPercent} is set); a value
2493
+ * that has since moved away from the snapshot is a genuine edit and is
2494
+ * always written as `a:spcPts`, since an editor works in absolute units.
2495
+ */
2496
+ resolvedSpaceBefore?: number;
2497
+ resolvedSpaceAfter?: number;
2498
+ /**
2499
+ * The raw `a:spcPct` fraction (e.g. `0.2` for 20%) {@link spaceBefore} /
2500
+ * {@link spaceAfter} was resolved from, when the source used percentage
2501
+ * spacing rather than `a:spcPts`. Absent when the source used `a:spcPts`
2502
+ * (or authored no spacing at all).
2503
+ */
2504
+ spaceBeforePercent?: number;
2505
+ spaceAfterPercent?: number;
2354
2506
  /** Default tab interval in CSS pixels (`a:lvlXpPr/@defTabSz`). */
2355
2507
  defaultTabSize?: number;
2356
2508
  /** Whether East Asian line-breaking rules are enabled. */
@@ -5083,6 +5235,18 @@ interface PptxSmartArtLayoutDefinition {
5083
5235
  rootNode: PptxSmartArtLayoutNode;
5084
5236
  /** Original definition retained for constraint evaluation and foreign rules. */
5085
5237
  rawXml?: XmlObject;
5238
+ /**
5239
+ * The un-parsed layout-definition part text (starting at `<dgm:layoutDef>`,
5240
+ * XML declaration included). `rawXml` above loses the document order of
5241
+ * differently-named siblings (the package-wide `fast-xml-parser`
5242
+ * configuration groups children into one array per tag), which the
5243
+ * per-point DiagramML engine (`core/utils/smartart-engine/`) needs to
5244
+ * execute a `layoutNode` body's `forEach`/`choose`/`constrLst` statements
5245
+ * in their real declared sequence - see that package's `ordered-xml.ts`.
5246
+ * `undefined` when the part could not be read (matches `rawXml`'s own
5247
+ * optionality); the engine falls back to the legacy interpreter then.
5248
+ */
5249
+ rawXmlText?: string;
5086
5250
  }
5087
5251
  //#endregion
5088
5252
  //#region src/core/types/smart-art-node.d.ts
@@ -6195,6 +6359,20 @@ interface PptxTableData {
6195
6359
  * present when there is at least one effect.
6196
6360
  */
6197
6361
  tableEffects?: ParsedTableStyleEffect[];
6362
+ /**
6363
+ * Table-cell-context default text size in points, resolved from the
6364
+ * slide's master `p:otherStyle` (ECMA-376 §19.3.1.42 CT_TextListStyle,
6365
+ * §19.3.1.52 for `p:txStyles`). PowerPoint sizes a table cell's text off
6366
+ * this master default (commonly 18pt) whenever neither the run nor the
6367
+ * (size-less) table style provides one; without it, cell text without an
6368
+ * explicit `a:rPr@sz` fell back to the browser's own default font size
6369
+ * (16px / 12pt) instead. A render-only hint: it is not part of any
6370
+ * individual cell's parsed style and is never written back on save, so
6371
+ * resaving an unstyled cell does not bake in an explicit size that was
6372
+ * never authored. `undefined` when no master/otherStyle size resolves
6373
+ * (renderers should leave the browser default in place in that case).
6374
+ */
6375
+ defaultCellFontSize?: number;
6198
6376
  }
6199
6377
  /**
6200
6378
  * A single fill reference within a table style section.
@@ -6220,6 +6398,14 @@ interface ParsedTableStyleFill {
6220
6398
  tint?: number;
6221
6399
  /** Shade value (0-100 000). */
6222
6400
  shade?: number;
6401
+ /**
6402
+ * Alpha (opacity) value (0-100 000, where 100 000 is fully opaque) from an
6403
+ * `a:alpha` child of `a:schemeClr`/`a:srgbClr`. Several built-in table
6404
+ * styles (e.g. "Light Style 1/3", "Themed Style 1/2") band their rows with
6405
+ * a partially transparent tint of the theme colour rather than a tint/shade
6406
+ * blend.
6407
+ */
6408
+ alpha?: number;
6223
6409
  /** Explicit sRGB hex colour (e.g. `#FF8800`) from `a:srgbClr`. */
6224
6410
  color?: string;
6225
6411
  /** The fill was `a:noFill`: renders transparent and clears lower layers. */
@@ -7055,6 +7241,20 @@ interface ContentPartInkStroke {
7055
7241
  * NAMES differ.
7056
7242
  */
7057
7243
  tiltEncoding?: 'vector' | 'azimuthAltitude';
7244
+ /**
7245
+ * Per-point timestamps (milliseconds), decoded from the source InkML
7246
+ * trace's `T` channel when it declared one.
7247
+ *
7248
+ * Absent for the overwhelming majority of real decks: PowerPoint's own
7249
+ * SaveAs output declares only `X`/`Y` and has no per-point time channel at
7250
+ * all (see `contentpart-real-ink-roundtrip.test.ts`'s fixture), so this is
7251
+ * populated only for InkML sources that genuinely author one (a captured
7252
+ * digitizer session, OneNote, a Surface Hub export). When present, ink
7253
+ * replay ("watch the ink get drawn") uses each stroke's own first/last
7254
+ * timestamp to time its reveal instead of the fixed per-stroke cascade; see
7255
+ * `pptx-viewer-shared`'s `render/ink-replay-timeline.ts`.
7256
+ */
7257
+ pointTimestamps?: number[];
7058
7258
  }
7059
7259
  /**
7060
7260
  * A content-part element wrapped in `mc:AlternateContent`.
@@ -7099,6 +7299,34 @@ interface ZoomPptxElement extends PptxElementBase, PptxImageProperties {
7099
7299
  summaryTargets?: SummaryZoomTarget[];
7100
7300
  /** Layout mode authored on the Summary Zoom container. */
7101
7301
  summaryLayout?: 'grid' | 'fixed';
7302
+ /**
7303
+ * `zmPr/@returnToParent` (MS-PPTX `CT_ZoomObjectProperties`, shared by all
7304
+ * three Zoom kinds): whether continuing forward from the destination slide
7305
+ * during a live show returns to this Zoom's origin slide instead of
7306
+ * advancing linearly through the deck. The schema declares `<xsd:attribute
7307
+ * name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
7308
+ * so an ABSENT attribute means `true`, not `false`. This codebase still
7309
+ * leaves the field `undefined` (rather than fabricating `true`) when the
7310
+ * source XML omits it, so a round-trip never invents an attribute the
7311
+ * source never had; a CONSUMER of this field (playback, e.g.
7312
+ * `pptx-viewer-shared`'s `resolveZoomNavigationTarget`) must read
7313
+ * `returnToParent !== false`, not `Boolean(returnToParent)`, to get the
7314
+ * spec-correct effective value. For `zoomType: 'summary'`, this mirrors the
7315
+ * first tile's own value; see {@link SummaryZoomTarget.returnToParent} for
7316
+ * the per-tile value.
7317
+ */
7318
+ returnToParent?: boolean;
7319
+ /**
7320
+ * `zmPr/@transitionDur` (MS-PPTX `CT_ZoomObjectProperties`): the
7321
+ * zoom-transition length in milliseconds. PowerPoint's own writer emits a
7322
+ * unitless decimal-millisecond value for every OOXML `ST_UniversalTimeOffset`
7323
+ * this codebase has observed (see the media-trim/-fade parsers), so this
7324
+ * follows the same convention rather than the full TIMEOFFSET grammar's
7325
+ * unit suffixes. Undefined uses the destination slide's own transition.
7326
+ * For `zoomType: 'summary'`, this mirrors the first tile's own value; see
7327
+ * {@link SummaryZoomTarget.transitionDurationMs} for the per-tile value.
7328
+ */
7329
+ transitionDurationMs?: number;
7102
7330
  }
7103
7331
  /** A single section tile within a PowerPoint Summary Zoom container. */
7104
7332
  interface SummaryZoomTarget extends PptxImageProperties {
@@ -7114,6 +7342,10 @@ interface SummaryZoomTarget extends PptxImageProperties {
7114
7342
  offsetFactorY?: number;
7115
7343
  scaleFactorX?: number;
7116
7344
  scaleFactorY?: number;
7345
+ /** This tile's own `zmPr/@returnToParent`; see {@link ZoomPptxElement.returnToParent}. */
7346
+ returnToParent?: boolean;
7347
+ /** This tile's own `zmPr/@transitionDur` in milliseconds; see {@link ZoomPptxElement.transitionDurationMs}. */
7348
+ transitionDurationMs?: number;
7117
7349
  rawXml?: XmlObject;
7118
7350
  }
7119
7351
  /**
@@ -8104,6 +8336,17 @@ interface PptxAttributeAnimation {
8104
8336
  * IS consulted regardless of this field's value. Absent means `lin`.
8105
8337
  */
8106
8338
  calcMode?: 'discrete' | 'lin' | 'fmla';
8339
+ /**
8340
+ * `p:anim/@_p14:bounceEnd` (Office 2010 `p14` extension attribute,
8341
+ * MS-OI29500), normalized to a 0-1 fraction of this behaviour's own
8342
+ * duration. PowerPoint's Fly In "Bounce End" effect option writes this on
8343
+ * the position-ramp `p:anim` node(s): the fraction of the duration at
8344
+ * which the primary travel completes, with the remainder spent bouncing
8345
+ * and settling at the final value. Mirrored verbatim by PowerPoint onto
8346
+ * the enclosing `p:cTn/@_p14:presetBounceEnd`. Absent for every animation
8347
+ * that doesn't use this effect option (the overwhelming majority).
8348
+ */
8349
+ bounceEnd?: number;
8107
8350
  }
8108
8351
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
8109
8352
  interface PptxHslColorDelta {
@@ -8185,7 +8428,19 @@ interface PptxTextAnimationTarget {
8185
8428
  * These map directly to OOXML condition event attribute values
8186
8429
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
8187
8430
  */
8188
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
8431
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick' | 'onMediaBookmark';
8432
+ /**
8433
+ * `p14:bmkTgt` (Office 2010 `p14` extension, MS-OI29500): names the specific
8434
+ * media element and bookmark an `evt="onMediaBookmark"` condition fires for.
8435
+ * `bookmarkName` matches a `p14:bmk/@_name` on that media element's own
8436
+ * `p14:bmkLst` (see `MediaBookmark.label` in `core/types/elements.ts`).
8437
+ */
8438
+ interface PptxMediaBookmarkTarget {
8439
+ /** `p14:bmkTgt/@_spid`: the media element's shape id. */
8440
+ shapeId: string;
8441
+ /** `p14:bmkTgt/@_bmkName`: the bookmark's name. */
8442
+ bookmarkName: string;
8443
+ }
8189
8444
  /**
8190
8445
  * Structured representation of a single OOXML animation condition
8191
8446
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -8205,6 +8460,11 @@ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick'
8205
8460
  interface AnimationCondition {
8206
8461
  /** Event that triggers the condition. */
8207
8462
  event?: AnimationConditionEvent;
8463
+ /**
8464
+ * The media element/bookmark this condition fires for, when
8465
+ * {@link event} is `onMediaBookmark`. See {@link PptxMediaBookmarkTarget}.
8466
+ */
8467
+ bookmarkTarget?: PptxMediaBookmarkTarget;
8208
8468
  /** Delay in milliseconds (from `@_delay`). "indefinite" is represented as -1. */
8209
8469
  delay?: number;
8210
8470
  /** Target time node ID reference (from `@_tn`). */
@@ -9053,7 +9313,12 @@ interface PptxSlideTransition {
9053
9313
  spokes?: number;
9054
9314
  /** Pattern type for shred transition. */
9055
9315
  pattern?: string;
9056
- /** Through-black flag for blinds/checker (OOXML `@_thruBlk`). */
9316
+ /**
9317
+ * Through-black flag (OOXML `@_thruBlk`). COM-verified to actually apply to
9318
+ * `cut` and `fade` (see {@link TRANSITION_THRUBLK_TYPES}); parsed generically
9319
+ * off any standard transition child so an unexpected authored value still
9320
+ * round-trips.
9321
+ */
9057
9322
  thruBlk?: boolean;
9058
9323
  /** Split orientation (horz/vert) parsed from `@_orient`. */
9059
9324
  orient?: PptxSplitOrientation;
@@ -9523,7 +9788,12 @@ interface PptxHeaderFooter {
9523
9788
  hasDateTime?: boolean;
9524
9789
  dateTimeText?: string;
9525
9790
  dateTimeAuto?: boolean;
9526
- /** OOXML date format pattern (e.g. "M/d/yyyy", "dddd, MMMM dd, yyyy"). */
9791
+ /**
9792
+ * The master date placeholder's own `a:fld/@type` (e.g. "datetime2"), NOT a
9793
+ * format pattern. It is one of the predefined OOXML datetime field types
9794
+ * (`datetime1`-`datetime13`); the display pattern for each is resolved by
9795
+ * `resolveFieldDateText` in `packages/shared/src/render/text-field-substitution.ts`.
9796
+ */
9527
9797
  dateFormat?: string;
9528
9798
  hasSlideNumber?: boolean;
9529
9799
  }
@@ -12507,7 +12777,7 @@ interface ElementContextMenuState {
12507
12777
  elementId: string;
12508
12778
  }
12509
12779
  /** Identifies an action triggered from the element right-click context menu. */
12510
- 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';
12780
+ 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';
12511
12781
  /**
12512
12782
  * State of an active marquee (rubber-band) selection rectangle.
12513
12783
  * Created when the user clicks and drags on the canvas background,
@@ -1,96 +1,96 @@
1
1
  'use strict';
2
2
 
3
- var chunkKTSDPBQZ_js = require('../chunk-KTSDPBQZ.js');
4
- require('../chunk-3WYNGYB6.js');
5
- var chunkP2SBIMYF_js = require('../chunk-P2SBIMYF.js');
6
- var chunk5MRNT4V6_js = require('../chunk-5MRNT4V6.js');
7
- var chunkS65QSO6T_js = require('../chunk-S65QSO6T.js');
8
- require('../chunk-NXGUR2DO.js');
3
+ var chunkAI6K5EAE_js = require('../chunk-AI6K5EAE.js');
4
+ require('../chunk-CSY422LU.js');
5
+ var chunkYJKR7Z3X_js = require('../chunk-YJKR7Z3X.js');
6
+ var chunkOWTHF5N4_js = require('../chunk-OWTHF5N4.js');
7
+ var chunk7WWINBGF_js = require('../chunk-7WWINBGF.js');
8
+ require('../chunk-I4D6JQOI.js');
9
9
  require('../chunk-4VNS5WPM.js');
10
10
 
11
11
 
12
12
 
13
13
  Object.defineProperty(exports, "CollaborationStatusIndicator", {
14
14
  enumerable: true,
15
- get: function () { return chunkKTSDPBQZ_js.CollaborationStatusIndicator; }
15
+ get: function () { return chunkAI6K5EAE_js.CollaborationStatusIndicator; }
16
16
  });
17
17
  Object.defineProperty(exports, "PowerPointViewer", {
18
18
  enumerable: true,
19
- get: function () { return chunkKTSDPBQZ_js.PowerPointViewer; }
19
+ get: function () { return chunkAI6K5EAE_js.PowerPointViewer; }
20
20
  });
21
21
  Object.defineProperty(exports, "UserAvatarBar", {
22
22
  enumerable: true,
23
- get: function () { return chunkKTSDPBQZ_js.UserAvatarBar; }
23
+ get: function () { return chunkAI6K5EAE_js.UserAvatarBar; }
24
24
  });
25
25
  Object.defineProperty(exports, "CollaborationProvider", {
26
26
  enumerable: true,
27
- get: function () { return chunkP2SBIMYF_js.CollaborationProvider; }
27
+ get: function () { return chunkYJKR7Z3X_js.CollaborationProvider; }
28
28
  });
29
29
  Object.defineProperty(exports, "RemoteUserCursors", {
30
30
  enumerable: true,
31
- get: function () { return chunkP2SBIMYF_js.RemoteUserCursors; }
31
+ get: function () { return chunkYJKR7Z3X_js.RemoteUserCursors; }
32
32
  });
33
33
  Object.defineProperty(exports, "isAudienceTab", {
34
34
  enumerable: true,
35
- get: function () { return chunkP2SBIMYF_js.isAudienceTab; }
35
+ get: function () { return chunkYJKR7Z3X_js.isAudienceTab; }
36
36
  });
37
37
  Object.defineProperty(exports, "parseAudienceNonce", {
38
38
  enumerable: true,
39
- get: function () { return chunkP2SBIMYF_js.parseAudienceNonce; }
39
+ get: function () { return chunkYJKR7Z3X_js.parseAudienceNonce; }
40
40
  });
41
41
  Object.defineProperty(exports, "useCollaborativeHistory", {
42
42
  enumerable: true,
43
- get: function () { return chunkP2SBIMYF_js.useCollaborativeHistory; }
43
+ get: function () { return chunkYJKR7Z3X_js.useCollaborativeHistory; }
44
44
  });
45
45
  Object.defineProperty(exports, "useCollaborativeState", {
46
46
  enumerable: true,
47
- get: function () { return chunkP2SBIMYF_js.useCollaborativeState; }
47
+ get: function () { return chunkYJKR7Z3X_js.useCollaborativeState; }
48
48
  });
49
49
  Object.defineProperty(exports, "usePresenceTracking", {
50
50
  enumerable: true,
51
- get: function () { return chunkP2SBIMYF_js.usePresenceTracking; }
51
+ get: function () { return chunkYJKR7Z3X_js.usePresenceTracking; }
52
52
  });
53
53
  Object.defineProperty(exports, "useThemeSwitching", {
54
54
  enumerable: true,
55
- get: function () { return chunkP2SBIMYF_js.useThemeSwitching; }
55
+ get: function () { return chunkYJKR7Z3X_js.useThemeSwitching; }
56
56
  });
57
57
  Object.defineProperty(exports, "useYjsProvider", {
58
58
  enumerable: true,
59
- get: function () { return chunkP2SBIMYF_js.useYjsProvider; }
59
+ get: function () { return chunkYJKR7Z3X_js.useYjsProvider; }
60
60
  });
61
61
  Object.defineProperty(exports, "getAnimationInitialStyle", {
62
62
  enumerable: true,
63
- get: function () { return chunk5MRNT4V6_js.getAnimationInitialStyle; }
63
+ get: function () { return chunkOWTHF5N4_js.getAnimationInitialStyle; }
64
64
  });
65
65
  Object.defineProperty(exports, "clearAudienceContent", {
66
66
  enumerable: true,
67
- get: function () { return chunkS65QSO6T_js.clearAudienceContent; }
67
+ get: function () { return chunk7WWINBGF_js.clearAudienceContent; }
68
68
  });
69
69
  Object.defineProperty(exports, "forgetSessionDeck", {
70
70
  enumerable: true,
71
- get: function () { return chunkS65QSO6T_js.forgetSessionDeck; }
71
+ get: function () { return chunk7WWINBGF_js.forgetSessionDeck; }
72
72
  });
73
73
  Object.defineProperty(exports, "getSessionTabId", {
74
74
  enumerable: true,
75
- get: function () { return chunkS65QSO6T_js.getSessionTabId; }
75
+ get: function () { return chunk7WWINBGF_js.getSessionTabId; }
76
76
  });
77
77
  Object.defineProperty(exports, "loadAudienceContent", {
78
78
  enumerable: true,
79
- get: function () { return chunkS65QSO6T_js.loadAudienceContent; }
79
+ get: function () { return chunk7WWINBGF_js.loadAudienceContent; }
80
80
  });
81
81
  Object.defineProperty(exports, "loadSessionDeck", {
82
82
  enumerable: true,
83
- get: function () { return chunkS65QSO6T_js.loadSessionDeck; }
83
+ get: function () { return chunk7WWINBGF_js.loadSessionDeck; }
84
84
  });
85
85
  Object.defineProperty(exports, "rememberSessionDeck", {
86
86
  enumerable: true,
87
- get: function () { return chunkS65QSO6T_js.rememberSessionDeck; }
87
+ get: function () { return chunk7WWINBGF_js.rememberSessionDeck; }
88
88
  });
89
89
  Object.defineProperty(exports, "restoreSessionDeck", {
90
90
  enumerable: true,
91
- get: function () { return chunkS65QSO6T_js.restoreSessionDeck; }
91
+ get: function () { return chunk7WWINBGF_js.restoreSessionDeck; }
92
92
  });
93
93
  Object.defineProperty(exports, "storeAudienceContent", {
94
94
  enumerable: true,
95
- get: function () { return chunkS65QSO6T_js.storeAudienceContent; }
95
+ get: function () { return chunk7WWINBGF_js.storeAudienceContent; }
96
96
  });
Binary file
Binary file
@@ -1,7 +1,7 @@
1
- export { CollaborationStatusIndicator, PowerPointViewer, UserAvatarBar } from '../chunk-ZYIJODUR.mjs';
2
- import '../chunk-L4XBWL7J.mjs';
3
- export { CollaborationProvider, RemoteUserCursors, isAudienceTab, parseAudienceNonce, useCollaborativeHistory, useCollaborativeState, usePresenceTracking, useThemeSwitching, useYjsProvider } from '../chunk-4GTDG2FH.mjs';
4
- export { getAnimationInitialStyle } from '../chunk-B5YZABYX.mjs';
5
- export { clearAudienceContent, forgetSessionDeck, getSessionTabId, loadAudienceContent, loadSessionDeck, rememberSessionDeck, restoreSessionDeck, storeAudienceContent } from '../chunk-VPJOJJ36.mjs';
6
- import '../chunk-PC7H3C5W.mjs';
1
+ export { CollaborationStatusIndicator, PowerPointViewer, UserAvatarBar } from '../chunk-LUHUYBGW.mjs';
2
+ import '../chunk-XMKLY2SE.mjs';
3
+ export { CollaborationProvider, RemoteUserCursors, isAudienceTab, parseAudienceNonce, useCollaborativeHistory, useCollaborativeState, usePresenceTracking, useThemeSwitching, useYjsProvider } from '../chunk-WCHKDZP6.mjs';
4
+ export { getAnimationInitialStyle } from '../chunk-WNFHFFYE.mjs';
5
+ export { clearAudienceContent, forgetSessionDeck, getSessionTabId, loadAudienceContent, loadSessionDeck, rememberSessionDeck, restoreSessionDeck, storeAudienceContent } from '../chunk-D3TZOCQP.mjs';
6
+ import '../chunk-JQXN6PO7.mjs';
7
7
  import '../chunk-XGB3TDIC.mjs';
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-react-viewer",
3
- "version": "4.2.0",
3
+ "version": "4.4.0",
4
4
  "description": "React PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "editor",
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file