pptx-react-viewer 1.17.0 → 1.18.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 (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -1
  3. package/dist/{Model3DScene-YA4F63DT.js → Model3DScene-GVWQ6SOM.js} +3 -3
  4. package/dist/Model3DScene-GVWQ6SOM.js.br +0 -0
  5. package/dist/Model3DScene-GVWQ6SOM.js.gz +0 -0
  6. package/dist/{Model3DScene-QHDYQXL2.mjs → Model3DScene-JGVLIDLD.mjs} +2 -2
  7. package/dist/Model3DScene-JGVLIDLD.mjs.br +0 -0
  8. package/dist/Model3DScene-JGVLIDLD.mjs.gz +0 -0
  9. package/dist/{SurfaceChart3DScene-GUAS2NWQ.mjs → SurfaceChart3DScene-DBWSDSKI.mjs} +2 -2
  10. package/dist/SurfaceChart3DScene-DBWSDSKI.mjs.br +0 -0
  11. package/dist/SurfaceChart3DScene-DBWSDSKI.mjs.gz +0 -0
  12. package/dist/{SurfaceChart3DScene-TGNJHTJQ.js → SurfaceChart3DScene-ZOTOHOIE.js} +3 -3
  13. package/dist/SurfaceChart3DScene-ZOTOHOIE.js.br +0 -0
  14. package/dist/SurfaceChart3DScene-ZOTOHOIE.js.gz +0 -0
  15. package/dist/{chunk-XW5OMXW6.js → chunk-73ST7AC6.js} +2269 -1651
  16. package/dist/chunk-73ST7AC6.js.br +0 -0
  17. package/dist/chunk-73ST7AC6.js.gz +0 -0
  18. package/dist/{chunk-WGLJ32FW.js → chunk-AALZCSY4.js} +8 -1
  19. package/dist/chunk-AALZCSY4.js.br +0 -0
  20. package/dist/chunk-AALZCSY4.js.gz +0 -0
  21. package/dist/{chunk-MGLRKGCH.js → chunk-EXDUEXTO.js} +26101 -15360
  22. package/dist/chunk-EXDUEXTO.js.br +0 -0
  23. package/dist/chunk-EXDUEXTO.js.gz +0 -0
  24. package/dist/{chunk-JWS3RQKN.js → chunk-HBXPK572.js} +584 -144
  25. package/dist/chunk-HBXPK572.js.br +0 -0
  26. package/dist/chunk-HBXPK572.js.gz +0 -0
  27. package/dist/{chunk-G22EWPLH.mjs → chunk-HHTZQHKZ.mjs} +532 -119
  28. package/dist/chunk-HHTZQHKZ.mjs.br +0 -0
  29. package/dist/chunk-HHTZQHKZ.mjs.gz +0 -0
  30. package/dist/{chunk-3P6O7ZDM.js → chunk-JDRC3PSY.js} +655 -491
  31. package/dist/chunk-JDRC3PSY.js.br +0 -0
  32. package/dist/chunk-JDRC3PSY.js.gz +0 -0
  33. package/dist/{chunk-LNSHC2Z5.mjs → chunk-KMLIWCNL.mjs} +1460 -842
  34. package/dist/chunk-KMLIWCNL.mjs.br +0 -0
  35. package/dist/chunk-KMLIWCNL.mjs.gz +0 -0
  36. package/dist/{chunk-HJQZJ3VE.mjs → chunk-RIRK64DM.mjs} +8 -1
  37. package/dist/chunk-RIRK64DM.mjs.br +0 -0
  38. package/dist/chunk-RIRK64DM.mjs.gz +0 -0
  39. package/dist/{chunk-XRYREYXC.mjs → chunk-SBNTEQUA.mjs} +26062 -15360
  40. package/dist/chunk-SBNTEQUA.mjs.br +0 -0
  41. package/dist/chunk-SBNTEQUA.mjs.gz +0 -0
  42. package/dist/{chunk-LLHFNGAF.mjs → chunk-Z4MDCPAY.mjs} +223 -59
  43. package/dist/chunk-Z4MDCPAY.mjs.br +0 -0
  44. package/dist/chunk-Z4MDCPAY.mjs.gz +0 -0
  45. package/dist/{dist-2ZAH7U6U.js → dist-KRRXYUGI.js} +663 -507
  46. package/dist/dist-KRRXYUGI.js.br +0 -0
  47. package/dist/dist-KRRXYUGI.js.gz +0 -0
  48. package/dist/dist-N6PAPXK6.mjs +2 -0
  49. package/dist/dist-N6PAPXK6.mjs.br +0 -0
  50. package/dist/dist-N6PAPXK6.mjs.gz +0 -0
  51. package/dist/hooks-unstable.d.ts +484 -117
  52. package/dist/hooks-unstable.d.ts.map +1 -1
  53. package/dist/hooks-unstable.js +75 -75
  54. package/dist/hooks-unstable.js.br +0 -0
  55. package/dist/hooks-unstable.js.gz +0 -0
  56. package/dist/hooks-unstable.mjs +4 -4
  57. package/dist/hooks-unstable.mjs.br +0 -0
  58. package/dist/hooks-unstable.mjs.gz +0 -0
  59. package/dist/i18n.js +3 -3
  60. package/dist/i18n.js.br +0 -0
  61. package/dist/i18n.js.gz +0 -0
  62. package/dist/i18n.mjs +1 -1
  63. package/dist/i18n.mjs.br +0 -0
  64. package/dist/i18n.mjs.gz +0 -0
  65. package/dist/{index-XGt7MZpa.d.ts → index-DmHVR48M.d.ts} +25 -3
  66. package/dist/index-DmHVR48M.d.ts.map +1 -0
  67. package/dist/index.d.ts +412 -117
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +19 -19
  70. package/dist/index.js.br +3 -1
  71. package/dist/index.js.gz +0 -0
  72. package/dist/index.mjs +5 -5
  73. package/dist/index.mjs.br +3 -4
  74. package/dist/index.mjs.gz +0 -0
  75. package/dist/pptx-viewer.css +1 -1
  76. package/dist/pptx-viewer.css.br +0 -0
  77. package/dist/pptx-viewer.css.gz +0 -0
  78. package/dist/viewer/index.d.ts +438 -121
  79. package/dist/viewer/index.d.ts.map +1 -1
  80. package/dist/viewer/index.js +24 -20
  81. package/dist/viewer/index.js.br +0 -0
  82. package/dist/viewer/index.js.gz +0 -0
  83. package/dist/viewer/index.mjs +5 -5
  84. package/dist/viewer/index.mjs.br +0 -0
  85. package/dist/viewer/index.mjs.gz +0 -0
  86. package/package.json +1 -1
  87. package/dist/Model3DScene-QHDYQXL2.mjs.br +0 -0
  88. package/dist/Model3DScene-QHDYQXL2.mjs.gz +0 -0
  89. package/dist/Model3DScene-YA4F63DT.js.br +0 -0
  90. package/dist/Model3DScene-YA4F63DT.js.gz +0 -0
  91. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.br +0 -0
  92. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.gz +0 -0
  93. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.br +0 -0
  94. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.gz +0 -0
  95. package/dist/chunk-3P6O7ZDM.js.br +0 -0
  96. package/dist/chunk-3P6O7ZDM.js.gz +0 -0
  97. package/dist/chunk-G22EWPLH.mjs.br +0 -0
  98. package/dist/chunk-G22EWPLH.mjs.gz +0 -0
  99. package/dist/chunk-HJQZJ3VE.mjs.br +0 -0
  100. package/dist/chunk-HJQZJ3VE.mjs.gz +0 -0
  101. package/dist/chunk-JWS3RQKN.js.br +0 -0
  102. package/dist/chunk-JWS3RQKN.js.gz +0 -0
  103. package/dist/chunk-LLHFNGAF.mjs.br +0 -0
  104. package/dist/chunk-LLHFNGAF.mjs.gz +0 -0
  105. package/dist/chunk-LNSHC2Z5.mjs.br +0 -0
  106. package/dist/chunk-LNSHC2Z5.mjs.gz +0 -0
  107. package/dist/chunk-MGLRKGCH.js.br +0 -0
  108. package/dist/chunk-MGLRKGCH.js.gz +0 -0
  109. package/dist/chunk-WGLJ32FW.js.br +0 -0
  110. package/dist/chunk-WGLJ32FW.js.gz +0 -0
  111. package/dist/chunk-XRYREYXC.mjs.br +0 -0
  112. package/dist/chunk-XRYREYXC.mjs.gz +0 -0
  113. package/dist/chunk-XW5OMXW6.js.br +0 -0
  114. package/dist/chunk-XW5OMXW6.js.gz +0 -0
  115. package/dist/dist-2ZAH7U6U.js.br +0 -0
  116. package/dist/dist-2ZAH7U6U.js.gz +0 -0
  117. package/dist/dist-MXDC6YTS.mjs +0 -2
  118. package/dist/dist-MXDC6YTS.mjs.br +0 -0
  119. package/dist/dist-MXDC6YTS.mjs.gz +0 -0
  120. package/dist/index-XGt7MZpa.d.ts.map +0 -1
@@ -599,6 +599,10 @@ interface Text3DStyle {
599
599
  interface Pptx3DScene {
600
600
  /** Camera preset type, e.g. "orthographicFront", "perspectiveFront". */
601
601
  cameraPreset?: string;
602
+ /** Camera field of view in 1/60000 degrees (`a:camera/@fov`). */
603
+ cameraFieldOfView?: number;
604
+ /** Camera zoom as an OOXML percentage fraction (`a:camera/@zoom`, 1 = 100%). */
605
+ cameraZoom?: number;
602
606
  /** Camera rotation around X axis in 1/60000 degrees. */
603
607
  cameraRotX?: number;
604
608
  /** Camera rotation around Y axis in 1/60000 degrees. */
@@ -609,6 +613,12 @@ interface Pptx3DScene {
609
613
  lightRigType?: string;
610
614
  /** Light rig direction, e.g. "t", "b", "l", "r", "tl". */
611
615
  lightRigDirection?: string;
616
+ /** Light-rig rotation latitude in 1/60000 degrees. */
617
+ lightRigRotX?: number;
618
+ /** Light-rig rotation longitude in 1/60000 degrees. */
619
+ lightRigRotY?: number;
620
+ /** Light-rig rotation revolution in 1/60000 degrees. */
621
+ lightRigRotZ?: number;
612
622
  /** Whether a 3D backdrop plane is present (`a:backdrop`). */
613
623
  hasBackdrop?: boolean;
614
624
  /** Backdrop plane anchor X in EMU. */
@@ -617,6 +627,18 @@ interface Pptx3DScene {
617
627
  backdropAnchorY?: number;
618
628
  /** Backdrop plane anchor Z in EMU. */
619
629
  backdropAnchorZ?: number;
630
+ /** Backdrop normal vector X component. */
631
+ backdropNormalX?: number;
632
+ /** Backdrop normal vector Y component. */
633
+ backdropNormalY?: number;
634
+ /** Backdrop normal vector Z component. */
635
+ backdropNormalZ?: number;
636
+ /** Backdrop up vector X component. */
637
+ backdropUpX?: number;
638
+ /** Backdrop up vector Y component. */
639
+ backdropUpY?: number;
640
+ /** Backdrop up vector Z component. */
641
+ backdropUpZ?: number;
620
642
  }
621
643
  /**
622
644
  * 3D shape extrusion/bevel from `a:sp3d`.
@@ -736,9 +758,13 @@ interface ShapeStyle {
736
758
  */
737
759
  fillColorXml?: XmlObject;
738
760
  fillGradient?: string;
761
+ /** Original `gradFill` XML retained for unknown-child and extension round-tripping. */
762
+ fillGradientXml?: XmlObject;
739
763
  fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'image' | 'theme' | 'group';
740
764
  fillPatternPreset?: string;
741
765
  fillPatternBackgroundColor?: string;
766
+ /** Original `pattFill` XML retained for unknown-child round-tripping. */
767
+ fillPatternXml?: XmlObject;
742
768
  /** Raw XML node for pattern fill foreground colour (preserves color transforms). */
743
769
  fillPatternFgClrXml?: XmlObject;
744
770
  /** Raw XML node for pattern fill background colour (preserves color transforms). */
@@ -804,6 +830,14 @@ interface ShapeStyle {
804
830
  /** Pen line alignment (`a:ln/@algn`): `ctr` (centre, default) or `in` (inside). */
805
831
  lineAlignment?: 'ctr' | 'in';
806
832
  shadowColor?: string;
833
+ /** Preserved source `a:effectLst`, including unknown effects and extensions. */
834
+ effectListXml?: XmlObject;
835
+ /** Original outer-shadow node used for lossless surgical updates. */
836
+ outerShadowXml?: XmlObject;
837
+ /** Resolved source shadow colour used to detect colour edits. */
838
+ outerShadowOriginalColor?: string;
839
+ /** Source shadow opacity used to detect alpha edits. */
840
+ outerShadowOriginalOpacity?: number;
807
841
  shadowBlur?: number;
808
842
  shadowOffsetX?: number;
809
843
  shadowOffsetY?: number;
@@ -847,11 +881,23 @@ interface ShapeStyle {
847
881
  /** Multiple shadow layers (for advanced effects). */
848
882
  shadows?: ShadowEffect[];
849
883
  glowColor?: string;
884
+ /** Original glow node used for lossless surgical updates. */
885
+ glowXml?: XmlObject;
886
+ /** Resolved source glow colour used to detect colour edits. */
887
+ glowOriginalColor?: string;
888
+ /** Source glow opacity used to detect alpha edits. */
889
+ glowOriginalOpacity?: number;
850
890
  glowRadius?: number;
851
891
  glowOpacity?: number;
852
892
  softEdgeRadius?: number;
853
893
  /** Inner shadow colour (`a:innerShdw`). */
854
894
  innerShadowColor?: string;
895
+ /** Original inner-shadow node used for lossless surgical updates. */
896
+ innerShadowXml?: XmlObject;
897
+ /** Resolved source inner-shadow colour used to detect colour edits. */
898
+ innerShadowOriginalColor?: string;
899
+ /** Source inner-shadow opacity used to detect alpha edits. */
900
+ innerShadowOriginalOpacity?: number;
855
901
  /** Inner shadow opacity (0-1). */
856
902
  innerShadowOpacity?: number;
857
903
  /** Inner shadow blur radius in px. */
@@ -860,8 +906,12 @@ interface ShapeStyle {
860
906
  innerShadowOffsetX?: number;
861
907
  /** Inner shadow vertical offset in px. */
862
908
  innerShadowOffsetY?: number;
909
+ /** Original soft-edge node, including vendor attributes and extensions. */
910
+ softEdgeXml?: XmlObject;
863
911
  /** Reflection effect — distance from shape bottom in px. */
864
912
  reflectionBlurRadius?: number;
913
+ /** Original reflection node, including vendor attributes and extensions. */
914
+ reflectionXml?: XmlObject;
865
915
  /** Reflection start opacity (0-1). */
866
916
  reflectionStartOpacity?: number;
867
917
  /** Reflection end opacity (0-1). */
@@ -1357,6 +1407,8 @@ interface TextStyle {
1357
1407
  text3d?: Text3DStyle;
1358
1408
  /** 3D scene (camera + light rig) settings on the text body (`a:bodyPr/a:scene3d`). */
1359
1409
  textBodyScene3d?: Pptx3DScene;
1410
+ /** Raw `a:scene3d` subtree used to preserve extensions and unmodelled children. */
1411
+ textBodyScene3dXml?: XmlObject;
1360
1412
  /**
1361
1413
  * Raw `<a:extLst>` subtree captured from `<a:bodyPr>`. Preserved verbatim so
1362
1414
  * authored extensions (e.g. content placeholders, custom application data)
@@ -1733,12 +1785,32 @@ interface PlaceholderTextLevelStyle {
1733
1785
  spaceAfter?: number;
1734
1786
  }
1735
1787
 
1788
+ /** Tick-mark placement from ChartML `ST_TickMark`. */
1789
+ type PptxChartTickMark = 'cross' | 'in' | 'none' | 'out';
1790
+ /** Typed axis tick and category/date label controls. */
1791
+ interface PptxChartAxisLabelFormatting {
1792
+ /** Primary and secondary tick-mark placement. */
1793
+ majorTickMark?: PptxChartTickMark;
1794
+ minorTickMark?: PptxChartTickMark;
1795
+ /** Tick-label position from ChartML `ST_TickLblPos`. */
1796
+ tickLblPos?: 'high' | 'low' | 'nextTo' | 'none';
1797
+ /** Automatic category/date axis behavior (`c:auto`). */
1798
+ auto?: boolean;
1799
+ /** Category-axis label alignment (`c:lblAlgn`). */
1800
+ labelAlignment?: 'ctr' | 'l' | 'r';
1801
+ /** Category/date label distance, from 0 through 1000 percent. */
1802
+ labelOffset?: number;
1803
+ /** Suppress multi-level category labels (`c:noMultiLvlLbl`). */
1804
+ noMultiLevelLabels?: boolean;
1805
+ }
1806
+
1736
1807
  /**
1737
1808
  * Chart types: chart categories, series data, style metadata, data tables,
1738
1809
  * trendlines, error bars, and the composite `PptxChartData`.
1739
1810
  *
1740
1811
  * @module pptx-types/chart
1741
1812
  */
1813
+
1742
1814
  /**
1743
1815
  * Supported chart type discriminators.
1744
1816
  *
@@ -1775,6 +1847,7 @@ type PptxChartTrendlineType = 'linear' | 'exponential' | 'logarithmic' | 'polyno
1775
1847
  */
1776
1848
  interface PptxChartTrendline {
1777
1849
  trendlineType: PptxChartTrendlineType;
1850
+ name?: string;
1778
1851
  order?: number;
1779
1852
  period?: number;
1780
1853
  forward?: number;
@@ -1783,6 +1856,13 @@ interface PptxChartTrendline {
1783
1856
  displayRSq?: boolean;
1784
1857
  displayEq?: boolean;
1785
1858
  color?: string;
1859
+ label?: PptxChartTrendlineLabel | null;
1860
+ }
1861
+ /** Typed, commonly edited properties of `c:trendlineLbl`. */
1862
+ interface PptxChartTrendlineLabel {
1863
+ layout?: PptxChartManualLayout;
1864
+ numberFormatCode?: string;
1865
+ sourceLinked?: boolean;
1786
1866
  }
1787
1867
  /** Error-bar direction axis. */
1788
1868
  type PptxChartErrBarDir = 'x' | 'y';
@@ -1819,6 +1899,8 @@ interface PptxChartErrBars {
1819
1899
  val?: number;
1820
1900
  customPlus?: number[];
1821
1901
  customMinus?: number[];
1902
+ noEndCap?: boolean;
1903
+ color?: string;
1822
1904
  }
1823
1905
  /**
1824
1906
  * Visibility flags for the chart data table (axes + legend keys).
@@ -1868,6 +1950,13 @@ interface PptxChartShapeProps {
1868
1950
  /** Line dash style (a:prstDash/@val), e.g. 'solid', 'dash', 'dot', 'lgDash'. */
1869
1951
  strokeDashStyle?: string;
1870
1952
  }
1953
+ /** Up/down bar formatting on line and stock charts (`c:upDownBars`). */
1954
+ interface PptxChartUpDownBars {
1955
+ /** Gap between bars as a percentage, constrained to 0 through 500. */
1956
+ gapWidth?: number;
1957
+ upBars?: PptxChartShapeProps;
1958
+ downBars?: PptxChartShapeProps;
1959
+ }
1871
1960
  /** Marker appearance on a chart series or data point. */
1872
1961
  interface PptxChartMarker {
1873
1962
  symbol: PptxChartMarkerSymbol;
@@ -1882,25 +1971,40 @@ interface PptxChartDataPoint {
1882
1971
  invertIfNegative?: boolean;
1883
1972
  marker?: PptxChartMarker;
1884
1973
  }
1974
+ /** Schema values accepted by `c:dLblPos`. */
1975
+ type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
1885
1976
  /** Individual data label override (c:dLbl). */
1886
1977
  interface PptxChartDataLabel {
1887
1978
  idx: number;
1979
+ /** Suppress this data point's automatically generated label. */
1980
+ deleted?: boolean;
1888
1981
  showVal?: boolean;
1889
1982
  showCatName?: boolean;
1890
1983
  showSerName?: boolean;
1891
1984
  showPercent?: boolean;
1892
1985
  showLegendKey?: boolean;
1893
1986
  showBubbleSize?: boolean;
1894
- position?: string;
1987
+ position?: PptxChartDataLabelPosition;
1895
1988
  text?: string;
1989
+ separator?: string;
1990
+ showLeaderLines?: boolean;
1896
1991
  }
1897
1992
  /** Axis number format. */
1898
1993
  interface PptxChartAxisNumFmt {
1899
1994
  formatCode: string;
1900
1995
  sourceLinked?: boolean;
1901
1996
  }
1997
+ /** Typed contents of a value-axis display-unit label (`c:dispUnitsLbl`). */
1998
+ interface PptxChartDisplayUnitsLabel {
1999
+ /** Literal label text. Omit to preserve the source text subtree. */
2000
+ text?: string;
2001
+ /** Manual label placement. `null` removes only the manual layout. */
2002
+ layout?: PptxChartManualLayout | null;
2003
+ /** Label shape formatting. `null` removes `c:spPr`. */
2004
+ spPr?: PptxChartShapeProps | null;
2005
+ }
1902
2006
  /** Axis formatting for category, value, or date axes. */
1903
- interface PptxChartAxisFormatting {
2007
+ interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
1904
2008
  axisType: 'catAx' | 'valAx' | 'dateAx' | 'serAx';
1905
2009
  /** Axis position: "b" (bottom), "l" (left), "r" (right), "t" (top). */
1906
2010
  axPos?: 'b' | 'l' | 'r' | 't';
@@ -1934,8 +2038,12 @@ interface PptxChartAxisFormatting {
1934
2038
  displayUnits?: 'hundreds' | 'thousands' | 'tenThousands' | 'hundredThousands' | 'millions' | 'tenMillions' | 'hundredMillions' | 'billions' | 'trillions' | 'custom';
1935
2039
  /** Custom display unit divisor value (c:dispUnits/c:custUnit/@val). Only used when displayUnits is 'custom'. */
1936
2040
  displayUnitsValue?: number;
1937
- /** Display units label text (c:dispUnits/c:dispUnitsLbl). Overrides the built-in default label when present. */
1938
- displayUnitsLabel?: string;
2041
+ /**
2042
+ * Display-unit label contents (`c:dispUnits/c:dispUnitsLbl`). A string is
2043
+ * retained as a compatibility shorthand for `{ text: string }`; `null`
2044
+ * explicitly removes the label.
2045
+ */
2046
+ displayUnitsLabel?: string | PptxChartDisplayUnitsLabel | null;
1939
2047
  /** Whether logarithmic scaling is enabled (presence of c:scaling/c:logBase). */
1940
2048
  logScale?: boolean;
1941
2049
  /** Logarithmic base value (c:scaling/c:logBase/@val), typically 10 or e. */
@@ -1944,8 +2052,6 @@ interface PptxChartAxisFormatting {
1944
2052
  majorUnit?: number;
1945
2053
  /** Minor-unit interval between secondary tick marks (c:minorUnit/@val). */
1946
2054
  minorUnit?: number;
1947
- /** Tick-label position (c:tickLblPos/@val): 'high', 'low', 'nextTo', or 'none'. */
1948
- tickLblPos?: 'high' | 'low' | 'nextTo' | 'none';
1949
2055
  }
1950
2056
  /** 3D wall or floor element formatting. */
1951
2057
  interface PptxChart3DSurface {
@@ -2004,12 +2110,32 @@ interface PptxChartDataLabelOptions {
2004
2110
  showPercent?: boolean;
2005
2111
  /** Show the legend key swatch (`c:showLegendKey`). */
2006
2112
  showLegendKey?: boolean;
2113
+ /** Show bubble size (`c:showBubbleSize`). */
2114
+ showBubbleSize?: boolean;
2115
+ /** Text placed between combined label components (`c:separator`). */
2116
+ separator?: string;
2117
+ /** Show leader lines where supported (`c:showLeaderLines`). */
2118
+ showLeaderLines?: boolean;
2007
2119
  /**
2008
2120
  * Label position (`c:dLblPos`). Valid values depend on the chart type
2009
2121
  * (`ctr`, `inEnd`, `inBase`, `outEnd`, `bestFit`, `l`, `r`, `t`, `b`).
2010
2122
  * Omit to let PowerPoint use the type default.
2011
2123
  */
2012
- position?: 'ctr' | 'inEnd' | 'inBase' | 'outEnd' | 'bestFit' | 'l' | 'r' | 't' | 'b';
2124
+ position?: PptxChartDataLabelPosition;
2125
+ }
2126
+ /** Typed text defaults for a single chart legend entry. */
2127
+ interface PptxChartLegendTextStyle {
2128
+ fontFamily?: string;
2129
+ fontSize?: number;
2130
+ bold?: boolean;
2131
+ italic?: boolean;
2132
+ color?: string;
2133
+ }
2134
+ /** Per-series legend entry override (`c:legendEntry`). */
2135
+ interface PptxChartLegendEntry {
2136
+ index: number;
2137
+ deleted?: boolean;
2138
+ textStyle?: PptxChartLegendTextStyle;
2013
2139
  }
2014
2140
  /**
2015
2141
  * Style / formatting metadata for a chart.
@@ -2032,6 +2158,8 @@ interface PptxChartStyle {
2032
2158
  hasLegend?: boolean;
2033
2159
  /** Legend position (t, b, l, r, tr). */
2034
2160
  legendPosition?: string;
2161
+ /** Per-series visibility and text-style overrides. */
2162
+ legendEntries?: PptxChartLegendEntry[];
2035
2163
  /** Whether the chart has a title. */
2036
2164
  hasTitle?: boolean;
2037
2165
  /** Whether gridlines are visible. */
@@ -2092,6 +2220,14 @@ interface PptxChartOfPieOptions {
2092
2220
  serLines?: boolean;
2093
2221
  gapWidth?: number;
2094
2222
  }
2223
+ /** Classic `c:bubbleChart` options from CT_BubbleChart. */
2224
+ interface PptxBubbleChartOptions {
2225
+ bubble3D?: boolean;
2226
+ /** Bubble diameter scale in percent, constrained to 0 through 300. */
2227
+ bubbleScale?: number;
2228
+ showNegativeBubbles?: boolean;
2229
+ sizeRepresents?: 'area' | 'w';
2230
+ }
2095
2231
  /**
2096
2232
  * 3D viewing parameters for a chart (`c:view3D`, ECMA-376 §21.2.2.228 /
2097
2233
  * CT_View3D).
@@ -2132,6 +2268,27 @@ interface PptxChartChrome {
2132
2268
  dispBlanksAs?: 'gap' | 'zero' | 'span';
2133
2269
  showDLblsOverMax?: boolean;
2134
2270
  }
2271
+ /** Manual chart placement from `c:layout/c:manualLayout` (CT_ManualLayout). */
2272
+ interface PptxChartManualLayout {
2273
+ layoutTarget?: 'inner' | 'outer';
2274
+ xMode?: 'edge' | 'factor';
2275
+ yMode?: 'edge' | 'factor';
2276
+ widthMode?: 'edge' | 'factor';
2277
+ heightMode?: 'edge' | 'factor';
2278
+ x?: number;
2279
+ y?: number;
2280
+ width?: number;
2281
+ height?: number;
2282
+ }
2283
+ /**
2284
+ * Typed manual layouts for chart regions that accept `c:layout`.
2285
+ * A `null` region removes its manual layout without removing extensions.
2286
+ */
2287
+ interface PptxChartLayouts {
2288
+ title?: PptxChartManualLayout | null;
2289
+ plotArea?: PptxChartManualLayout | null;
2290
+ legend?: PptxChartManualLayout | null;
2291
+ }
2135
2292
  /** Parsed data extracted from an embedded xlsx workbook. */
2136
2293
  interface PptxEmbeddedWorkbookData {
2137
2294
  /** Category labels from the first column/row. */
@@ -2173,9 +2330,12 @@ interface PptxChartData {
2173
2330
  chartPartPath?: string;
2174
2331
  /** Internal: relationship ID linking the graphic frame to the chart part. */
2175
2332
  chartRelationshipId?: string;
2176
- dataTable?: PptxChartDataTable;
2333
+ /** `null` explicitly removes an existing ChartML data table. */
2334
+ dataTable?: PptxChartDataTable | null;
2177
2335
  dropLines?: PptxChartLineStyle;
2178
2336
  hiLowLines?: PptxChartLineStyle;
2337
+ /** `null` explicitly removes an existing up/down-bars container. */
2338
+ upDownBars?: PptxChartUpDownBars | null;
2179
2339
  axes?: PptxChartAxisFormatting[];
2180
2340
  floor?: PptxChart3DSurface;
2181
2341
  sideWall?: PptxChart3DSurface;
@@ -2233,6 +2393,8 @@ interface PptxChartData {
2233
2393
  * `ofPieChart` element can be re-emitted on save with full fidelity.
2234
2394
  */
2235
2395
  ofPieOptions?: PptxChartOfPieOptions;
2396
+ /** Classic bubble-chart display options (`c:bubbleChart`). */
2397
+ bubbleOptions?: PptxBubbleChartOptions;
2236
2398
  /**
2237
2399
  * 3D viewing parameters (`c:view3D`, CT_View3D).
2238
2400
  *
@@ -2248,6 +2410,8 @@ interface PptxChartData {
2248
2410
  * source data, so absence does not produce empty `<c:…/>` placeholders.
2249
2411
  */
2250
2412
  chartChrome?: PptxChartChrome;
2413
+ /** Editable manual placement for the title, plot area, and legend. */
2414
+ layouts?: PptxChartLayouts;
2251
2415
  /**
2252
2416
  * Raw `c:userShapes` XML subtree (a drawing tree) preserved verbatim.
2253
2417
  *
@@ -2273,107 +2437,55 @@ interface PptxChartData {
2273
2437
  clrMapOvr?: Record<string, string>;
2274
2438
  }
2275
2439
 
2276
- /**
2277
- * Image types: effects, crop shapes, and properties shared by image/picture
2278
- * elements.
2279
- *
2280
- * @module pptx-types/image
2281
- */
2282
- /**
2283
- * Blend mode for `a:blend` container nodes inside an `a:effectDag` (CT_BlendEffect).
2284
- *
2285
- * Per ECMA-376 §20.1.8.10, valid values are: `darken`, `lighten`, `mult`,
2286
- * `over`, `screen`.
2287
- */
2288
2440
  type EffectDagBlendMode = 'darken' | 'lighten' | 'mult' | 'over' | 'screen';
2289
- /**
2290
- * Container node kind inside an `a:effectDag` (CT_EffectContainer @type).
2291
- *
2292
- * Per ECMA-376 §20.1.8.20, `sib` (sibling) draws each child independently
2293
- * over the same source; `tree` (tree) chains effects so each sees the output
2294
- * of its siblings.
2295
- */
2296
2441
  type EffectDagContainerType = 'sib' | 'tree';
2297
- /**
2298
- * Typed model of the directed-acyclic effect graph stored in `a:effectDag`.
2299
- *
2300
- * The four "structural" container/transform nodes are typed; any other inner
2301
- * effect (e.g. `a:outerShdw`, `a:glow`, `a:alphaInv`) is preserved verbatim
2302
- * as a raw XML object via the {@link EffectDagRawLeaf} variant so we never
2303
- * have to recurse into the full effect taxonomy.
2304
- *
2305
- * @example
2306
- * ```ts
2307
- * // <a:effectDag>
2308
- * // <a:cont type="sib">
2309
- * // <a:blend blend="mult"><a:cont type="tree" /></a:blend>
2310
- * // </a:cont>
2311
- * // </a:effectDag>
2312
- * const dag: EffectDagContainer = {
2313
- * kind: "cont",
2314
- * type: "sib",
2315
- * children: [{
2316
- * kind: "blend",
2317
- * mode: "mult",
2318
- * container: { kind: "cont", type: "tree", children: [] },
2319
- * }],
2320
- * };
2321
- * ```
2322
- */
2323
- type EffectDagNode = EffectDagContainer | EffectDagBlend | EffectDagXfrm | EffectDagRelOff | EffectDagRawLeaf;
2324
- /** `a:cont` — CT_EffectContainer. Recursive; mirrors the top-level `effectDag`. */
2442
+ type EffectDagNode = EffectDagContainer | EffectDagBlend | EffectDagXfrm | EffectDagRelOff | EffectDagBlur | EffectDagPresetShadow | EffectDagRawLeaf;
2325
2443
  interface EffectDagContainer {
2326
2444
  kind: 'cont';
2327
- /** `@type` — `sib` or `tree`. */
2328
2445
  type: EffectDagContainerType;
2329
- /** Optional `@name` attribute. */
2330
2446
  name?: string;
2331
- /** Ordered children. */
2332
2447
  children: EffectDagNode[];
2333
2448
  }
2334
- /** `a:blend` — CT_BlendEffect. Always wraps a single `a:cont` child. */
2335
2449
  interface EffectDagBlend {
2336
2450
  kind: 'blend';
2337
- /** `@blend` attribute. */
2338
2451
  mode: EffectDagBlendMode;
2339
- /** Required child `a:cont` container. */
2340
2452
  container: EffectDagContainer;
2341
2453
  }
2342
- /** `a:xfrmEffect` — CT_TransformEffect. Affine transform with no children. */
2343
2454
  interface EffectDagXfrm {
2344
2455
  kind: 'xfrmEffect';
2345
- /** Horizontal scale, percentage * 1000 (e.g. 100000 = 100%). */
2346
2456
  sx?: number;
2347
- /** Vertical scale, percentage * 1000. */
2348
2457
  sy?: number;
2349
- /** Horizontal skew, degrees * 60000. */
2350
2458
  kx?: number;
2351
- /** Vertical skew, degrees * 60000. */
2352
2459
  ky?: number;
2353
- /** Horizontal translation in EMU. */
2354
2460
  tx?: number;
2355
- /** Vertical translation in EMU. */
2356
2461
  ty?: number;
2357
2462
  }
2358
- /** `a:relOff` — CT_RelativeOffsetEffect. Relative offset in 1000ths of a percent. */
2359
2463
  interface EffectDagRelOff {
2360
2464
  kind: 'relOff';
2361
- /** Horizontal offset, percentage * 1000. */
2362
2465
  tx?: number;
2363
- /** Vertical offset, percentage * 1000. */
2364
2466
  ty?: number;
2365
2467
  }
2366
- /**
2367
- * Catch-all leaf preserving any non-container effect (e.g. `a:outerShdw`,
2368
- * `a:glow`, `a:alphaInv`) as raw XML. Re-emitted verbatim on save.
2369
- */
2468
+ /** Typed CT_BlurEffect with its original payload retained for lossless edits. */
2469
+ interface EffectDagBlur {
2470
+ kind: 'blur';
2471
+ radiusEmu?: number;
2472
+ grow?: boolean;
2473
+ xml: XmlObject;
2474
+ }
2475
+ /** Typed CT_PresetShadowEffect with colour and extension XML retained verbatim. */
2476
+ interface EffectDagPresetShadow {
2477
+ kind: 'prstShdw';
2478
+ preset?: `shdw${number}`;
2479
+ distanceEmu?: number;
2480
+ direction?: number;
2481
+ xml: XmlObject;
2482
+ }
2370
2483
  interface EffectDagRawLeaf {
2371
2484
  kind: 'raw';
2372
- /** Local element name without the `a:` prefix (e.g. `outerShdw`, `glow`). */
2373
2485
  tag: string;
2374
- /** Raw XML object captured at load — preserved verbatim on save. */
2375
2486
  xml: Record<string, unknown>;
2376
2487
  }
2488
+
2377
2489
  /**
2378
2490
  * Image recolour/adjustment properties parsed from blip extensions.
2379
2491
  *
@@ -2600,6 +2712,11 @@ declare module "./hooks-unstable" {
2600
2712
  * ```
2601
2713
  */
2602
2714
  type PptxMediaType = 'video' | 'audio' | 'unknown';
2715
+ type PptxMediaReferenceKind = 'audioCd' | 'wavAudioFile' | 'audioFile' | 'videoFile' | 'quickTimeFile';
2716
+ interface PptxAudioCdPosition {
2717
+ track: number;
2718
+ time?: number;
2719
+ }
2603
2720
  /**
2604
2721
  * A named bookmark within a media clip timeline.
2605
2722
  *
@@ -2676,6 +2793,34 @@ interface MediaCaptionTrack {
2676
2793
  isDefault?: boolean;
2677
2794
  }
2678
2795
 
2796
+ /** Typed, editable metadata from a DiagramML layout-definition part. */
2797
+ interface PptxSmartArtLocalizedText {
2798
+ value: string;
2799
+ language?: string;
2800
+ }
2801
+ interface PptxSmartArtLayoutCategory {
2802
+ type: string;
2803
+ priority: number;
2804
+ }
2805
+ /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
2806
+ interface PptxSmartArtLayoutNode {
2807
+ name?: string;
2808
+ styleLabel?: string;
2809
+ childOrder?: 'b' | 't';
2810
+ moveWith?: string;
2811
+ children?: PptxSmartArtLayoutNode[];
2812
+ }
2813
+ /** Metadata and root node from DiagramML CT_DiagramDefinition. */
2814
+ interface PptxSmartArtLayoutDefinition {
2815
+ uniqueId?: string;
2816
+ minimumVersion?: string;
2817
+ defaultStyle?: string;
2818
+ titles?: PptxSmartArtLocalizedText[];
2819
+ descriptions?: PptxSmartArtLocalizedText[];
2820
+ categories?: PptxSmartArtLayoutCategory[];
2821
+ rootNode: PptxSmartArtLayoutNode;
2822
+ }
2823
+
2679
2824
  /**
2680
2825
  * SmartArt node types: per-run text, per-node visual override, and the
2681
2826
  * data-model node itself. Split out of `smart-art.ts` to keep each type file
@@ -2763,6 +2908,8 @@ interface PptxSmartArtNodeStyle {
2763
2908
  interface PptxSmartArtNode {
2764
2909
  id: string;
2765
2910
  text: string;
2911
+ /** CT_Pt connection identifier, when the point references a connection. */
2912
+ connectionId?: string | null;
2766
2913
  parentId?: string;
2767
2914
  children?: PptxSmartArtNode[];
2768
2915
  /** Node type from `@_type` attribute (e.g. "doc", "node", "asst", "pres"). */
@@ -2784,6 +2931,64 @@ interface PptxSmartArtNode {
2784
2931
  style?: PptxSmartArtNodeStyle;
2785
2932
  }
2786
2933
 
2934
+ /** Editable metadata shared by DiagramML quick-style and color definitions. */
2935
+ interface PptxSmartArtDefinitionText {
2936
+ value: string;
2937
+ language?: string;
2938
+ }
2939
+ interface PptxSmartArtDefinitionCategory {
2940
+ type: string;
2941
+ priority: number;
2942
+ }
2943
+ type PptxSmartArtColorApplicationMethod = 'span' | 'cycle' | 'repeat';
2944
+ type PptxSmartArtHueDirection = 'cw' | 'ccw';
2945
+ /** CT_Colors application metadata. Color-choice children remain preserved XML. */
2946
+ interface PptxSmartArtColorListMetadata {
2947
+ method?: PptxSmartArtColorApplicationMethod;
2948
+ hueDirection?: PptxSmartArtHueDirection;
2949
+ }
2950
+ /** CT_StyleLabel metadata from a quick-style definition. */
2951
+ interface PptxSmartArtQuickStyleLabel {
2952
+ name: string;
2953
+ }
2954
+ /** CT_CTStyleLabel metadata from a color-transform definition. */
2955
+ interface PptxSmartArtColorStyleLabel {
2956
+ name: string;
2957
+ fill?: PptxSmartArtColorListMetadata;
2958
+ line?: PptxSmartArtColorListMetadata;
2959
+ effect?: PptxSmartArtColorListMetadata;
2960
+ textLine?: PptxSmartArtColorListMetadata;
2961
+ textFill?: PptxSmartArtColorListMetadata;
2962
+ textEffect?: PptxSmartArtColorListMetadata;
2963
+ }
2964
+ interface PptxSmartArtDefinitionMetadata {
2965
+ uniqueId?: string;
2966
+ minimumVersion?: string;
2967
+ titles?: PptxSmartArtDefinitionText[];
2968
+ descriptions?: PptxSmartArtDefinitionText[];
2969
+ categories?: PptxSmartArtDefinitionCategory[];
2970
+ }
2971
+ /** Typed CT_ColorTransform metadata and the resolved legacy color palette. */
2972
+ interface PptxSmartArtColorTransform extends PptxSmartArtDefinitionMetadata {
2973
+ /** Legacy resolved display name. */
2974
+ name?: string;
2975
+ /** Ordered resolved fill colors for rendering. */
2976
+ fillColors: string[];
2977
+ /** Ordered resolved line colors for rendering. */
2978
+ lineColors: string[];
2979
+ /** Ordered CT_CTStyleLabel metadata. */
2980
+ labels?: PptxSmartArtColorStyleLabel[];
2981
+ }
2982
+ /** Typed CT_StyleDefinition metadata and legacy rendering hint. */
2983
+ interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
2984
+ /** Legacy resolved display name. */
2985
+ name?: string;
2986
+ /** Legacy effect-intensity rendering hint. */
2987
+ effectIntensity?: string;
2988
+ /** Ordered CT_StyleLabel metadata. Complex style payload remains preserved XML. */
2989
+ labels?: PptxSmartArtQuickStyleLabel[];
2990
+ }
2991
+
2787
2992
  /**
2788
2993
  * SmartArt types: layout categories, layout presets, colour schemes,
2789
2994
  * data-model nodes/connections, drawing shapes, chrome, and the composite
@@ -2846,6 +3051,8 @@ type SmartArtStyle = 'flat' | 'moderate' | 'intense';
2846
3051
  * ```
2847
3052
  */
2848
3053
  interface PptxSmartArtConnection {
3054
+ /** Stable CT_Cxn model identifier. Required when serialized. */
3055
+ modelId?: string | null;
2849
3056
  /** Model ID of the source node. */
2850
3057
  sourceId: string;
2851
3058
  /** Model ID of the destination node. */
@@ -2856,6 +3063,12 @@ interface PptxSmartArtConnection {
2856
3063
  srcOrd?: number;
2857
3064
  /** Destination index for ordering. */
2858
3065
  destOrd?: number;
3066
+ /** Model ID of the parent transition point associated with this edge. */
3067
+ parentTransitionId?: string | null;
3068
+ /** Model ID of the sibling transition point associated with this edge. */
3069
+ siblingTransitionId?: string | null;
3070
+ /** Layout presentation identifier used by presentation connections. */
3071
+ presentationId?: string | null;
2859
3072
  }
2860
3073
  /**
2861
3074
  * A pre-computed shape from `ppt/diagrams/drawing*.xml`.
@@ -2922,45 +3135,6 @@ interface PptxSmartArtChrome {
2922
3135
  /** Outline stroke width in points. */
2923
3136
  outlineWidth?: number;
2924
3137
  }
2925
- /**
2926
- * Colour transform entry from `ppt/diagrams/colors*.xml`.
2927
- *
2928
- * @example
2929
- * ```ts
2930
- * const transform: PptxSmartArtColorTransform = {
2931
- * name: "Colorful - Accent Colors",
2932
- * fillColors: ["#4F81BD", "#C0504D", "#9BBB59"],
2933
- * lineColors: ["#385D8A", "#8C3836", "#71893F"],
2934
- * };
2935
- * // => satisfies PptxSmartArtColorTransform
2936
- * ```
2937
- */
2938
- interface PptxSmartArtColorTransform {
2939
- /** Colour scheme name / title. */
2940
- name?: string;
2941
- /** Ordered list of fill colours (hex) for each node. */
2942
- fillColors: string[];
2943
- /** Ordered list of line colours (hex). */
2944
- lineColors: string[];
2945
- }
2946
- /**
2947
- * Style entry from `ppt/diagrams/quickStyles*.xml`.
2948
- *
2949
- * @example
2950
- * ```ts
2951
- * const qs: PptxSmartArtQuickStyle = {
2952
- * name: "Moderate Effect",
2953
- * effectIntensity: "moderate",
2954
- * };
2955
- * // => satisfies PptxSmartArtQuickStyle
2956
- * ```
2957
- */
2958
- interface PptxSmartArtQuickStyle {
2959
- /** Style name / title. */
2960
- name?: string;
2961
- /** Effect intensity identifier (e.g. "subtle", "moderate", "intense"). */
2962
- effectIntensity?: string;
2963
- }
2964
3138
  /**
2965
3139
  * Complete parsed SmartArt data for a {@link SmartArtPptxElement}.
2966
3140
  *
@@ -3000,14 +3174,28 @@ interface PptxSmartArtData {
3000
3174
  colorTransform?: PptxSmartArtColorTransform;
3001
3175
  /** Quick style from `ppt/diagrams/quickStyles*.xml`. */
3002
3176
  quickStyle?: PptxSmartArtQuickStyle;
3177
+ /** Editable metadata from the related DiagramML layout definition. */
3178
+ layoutDefinition?: PptxSmartArtLayoutDefinition;
3003
3179
  /** Relationship ID for the diagram data part (for round-trip save). */
3004
3180
  dataRelId?: string;
3181
+ /** Relationship ID for the diagram layout part. */
3182
+ layoutRelId?: string;
3005
3183
  /** Relationship ID for the drawing part. */
3006
3184
  drawingRelId?: string;
3007
3185
  /** Relationship ID for the colours part. */
3008
3186
  colorsRelId?: string;
3009
3187
  /** Relationship ID for the quick-styles part. */
3010
3188
  styleRelId?: string;
3189
+ /** Internal save hint: the layout definition changed in the editor. */
3190
+ layoutDirty?: boolean;
3191
+ /** Internal save hint: typed layout-definition metadata changed. */
3192
+ layoutDefinitionDirty?: boolean;
3193
+ /** Internal save hint: quick-style definition metadata changed. */
3194
+ quickStyleDirty?: boolean;
3195
+ /** Internal save hint: color-transform definition metadata changed. */
3196
+ colorTransformDirty?: boolean;
3197
+ /** Internal save hint: cached drawing geometry or text changed in the editor. */
3198
+ drawingDirty?: boolean;
3011
3199
  }
3012
3200
 
3013
3201
  /**
@@ -3616,6 +3804,11 @@ interface MediaPptxElement extends PptxElementBase {
3616
3804
  mediaPath?: string;
3617
3805
  mediaData?: string;
3618
3806
  mediaMimeType?: string;
3807
+ mediaReferenceKind?: PptxMediaReferenceKind;
3808
+ mediaReferenceName?: string;
3809
+ audioCdStart?: PptxAudioCdPosition;
3810
+ audioCdEnd?: PptxAudioCdPosition;
3811
+ rawMediaReferenceXml?: XmlObject;
3619
3812
  /** Trim start in milliseconds (from p:cMediaNode p:cTn @st). */
3620
3813
  trimStartMs?: number;
3621
3814
  /** Trim end in milliseconds (from p:cMediaNode p:cTn @end). */
@@ -4050,6 +4243,44 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
4050
4243
  * is preserved alongside other animations.
4051
4244
  */
4052
4245
  type PptxNativeAnimationKind = 'media';
4246
+ /** A target selected by `p:tgtEl` in the PresentationML timing model. */
4247
+ type PptxAnimationTarget = {
4248
+ type: 'shape';
4249
+ shapeId: string;
4250
+ rawXml?: XmlObject;
4251
+ } | {
4252
+ type: 'slide';
4253
+ rawXml?: XmlObject;
4254
+ } | {
4255
+ type: 'sound';
4256
+ relationshipId: string;
4257
+ name?: string;
4258
+ rawXml?: XmlObject;
4259
+ } | {
4260
+ type: 'ink';
4261
+ shapeId: string;
4262
+ rawXml?: XmlObject;
4263
+ } | {
4264
+ type: 'unknown';
4265
+ rawXml: XmlObject;
4266
+ };
4267
+ /** Nested build choice carried by `p:bldGraphic`. */
4268
+ type PptxGraphicBuild = {
4269
+ mode: 'asOne';
4270
+ rawXml?: XmlObject;
4271
+ } | {
4272
+ mode: 'sub';
4273
+ kind: 'diagram';
4274
+ build: string;
4275
+ reverse: boolean;
4276
+ rawXml?: XmlObject;
4277
+ } | {
4278
+ mode: 'sub';
4279
+ kind: 'chart';
4280
+ build: string;
4281
+ animateBackground: boolean;
4282
+ rawXml?: XmlObject;
4283
+ };
4053
4284
  /**
4054
4285
  * Parsed native animation record from `p:timing / p:tnLst`.
4055
4286
  *
@@ -4071,6 +4302,8 @@ type PptxNativeAnimationKind = 'media';
4071
4302
  interface PptxNativeAnimation {
4072
4303
  /** Target element/shape ID. */
4073
4304
  targetId?: string;
4305
+ /** Full timing target, including sound and ink target variants. */
4306
+ target?: PptxAnimationTarget;
4074
4307
  /** Trigger type. */
4075
4308
  trigger?: PptxAnimationTrigger;
4076
4309
  /** Shape ID that triggers this animation when clicked (interactive sequence). */
@@ -4175,6 +4408,8 @@ interface PptxNativeAnimation {
4175
4408
  * that aren't OLE charts).
4176
4409
  */
4177
4410
  graphicBuild?: string;
4411
+ /** Schema-accurate `p:bldGraphic/p:bldAsOne|p:bldSub` representation. */
4412
+ graphicBuildProperties?: PptxGraphicBuild;
4178
4413
  /**
4179
4414
  * Opaque map of `p:cTn` attributes that don't have a typed home on this
4180
4415
  * interface but must round-trip through parse → save. Keys are stored
@@ -4291,6 +4526,8 @@ interface AnimationCondition {
4291
4526
  targetShapeId?: string;
4292
4527
  /** Whether the condition targets a slide (from `p:tgtEl/p:sldTgt`). */
4293
4528
  targetSlide?: boolean;
4529
+ /** Full target choice, including `p:sndTgt` and `p:inkTgt`. */
4530
+ target?: PptxAnimationTarget;
4294
4531
  }
4295
4532
  /** Iteration configuration from `p:iterate`. */
4296
4533
  interface PptxAnimationIterate {
@@ -4375,6 +4612,7 @@ interface PptxElementAnimation {
4375
4612
  *
4376
4613
  * @module pptx-types/metadata
4377
4614
  */
4615
+
4378
4616
  /**
4379
4617
  * A slide comment — may be a legacy positional comment or a modern
4380
4618
  * threaded comment with replies.
@@ -4394,6 +4632,10 @@ interface PptxElementAnimation {
4394
4632
  interface PptxComment {
4395
4633
  id: string;
4396
4634
  text: string;
4635
+ /** Storage vocabulary used by this comment. Omitted means legacy PresentationML. */
4636
+ format?: 'legacy' | 'modern';
4637
+ /** Stable GUID author identifier used by Office 2021 modern comments. */
4638
+ authorId?: string;
4397
4639
  /** Optional parent comment id for reply threading metadata. */
4398
4640
  parentId?: string;
4399
4641
  author?: string;
@@ -4402,12 +4644,35 @@ interface PptxComment {
4402
4644
  y?: number;
4403
4645
  /** Whether this comment has been resolved/marked done. */
4404
4646
  resolved?: boolean;
4647
+ /** Native p188 status token. */
4648
+ status?: 'active' | 'resolved' | 'closed';
4649
+ /** Modern comment classification tags and author IDs that liked the comment. */
4650
+ tags?: string[];
4651
+ likes?: string[];
4652
+ startDate?: string;
4653
+ dueDate?: string;
4654
+ assignedTo?: string[];
4655
+ /** Task completion in thousandths of a percent, from 0 through 100000. */
4656
+ complete?: number;
4657
+ priority?: number;
4658
+ title?: string;
4405
4659
  /** Modern threaded comment support (p15:threadingInfo). */
4406
4660
  threadId?: string;
4407
4661
  /** Replies to this comment (for modern threaded comments). */
4408
4662
  replies?: PptxComment[];
4409
4663
  /** ID of the element this comment is associated with (if any). */
4410
4664
  elementId?: string;
4665
+ /** Original `p:cm` subtree, retained for unknown child and extension preservation. */
4666
+ rawXml?: XmlObject;
4667
+ }
4668
+ /** Office 2021 comment author from the p188 Author part. */
4669
+ interface PptxModernCommentAuthor {
4670
+ id: string;
4671
+ name: string;
4672
+ initials?: string;
4673
+ userId: string;
4674
+ providerId: string;
4675
+ rawXml?: XmlObject;
4411
4676
  }
4412
4677
  /**
4413
4678
  * A comment author from `ppt/commentAuthors.xml`.
@@ -4440,6 +4705,8 @@ interface PptxCommentAuthor {
4440
4705
  lastIdx: number;
4441
4706
  /** Colour index assigned to this author (`@_clrIdx`). */
4442
4707
  clrIdx: number;
4708
+ /** Original `p:cmAuthor` subtree, retained for unknown attribute preservation. */
4709
+ rawXml?: XmlObject;
4443
4710
  }
4444
4711
  /**
4445
4712
  * A compatibility warning generated during parse or save when the
@@ -4887,6 +5154,8 @@ interface PptxTheme {
4887
5154
  type PptxTransitionType = 'none' | 'cut' | 'fade' | 'push' | 'wipe' | 'split' | 'randomBar' | 'blinds' | 'checker' | 'circle' | 'comb' | 'cover' | 'diamond' | 'dissolve' | 'plus' | 'pull' | 'random' | 'strips' | 'uncover' | 'wedge' | 'wheel' | 'zoom' | 'newsflash' | 'morph' | 'conveyor' | 'doors' | 'ferris' | 'flash' | 'flythrough' | 'gallery' | 'glitter' | 'honeycomb' | 'pan' | 'prism' | 'reveal' | 'ripple' | 'shred' | 'switch' | 'vortex' | 'warp' | 'wheelReverse' | 'window' | 'cube' | 'flip' | 'rotate' | 'orbit';
4888
5155
  /** Split orientation from OOXML `@_orient`. */
4889
5156
  type PptxSplitOrientation = 'horz' | 'vert';
5157
+ /** Schema-defined `ST_TransitionSpeed` values. */
5158
+ type PptxTransitionSpeed = 'slow' | 'med' | 'fast';
4890
5159
  /**
4891
5160
  * Slide transition configuration.
4892
5161
  *
@@ -4903,6 +5172,8 @@ type PptxSplitOrientation = 'horz' | 'vert';
4903
5172
  */
4904
5173
  interface PptxSlideTransition {
4905
5174
  type: PptxTransitionType;
5175
+ /** Schema-defined transition speed. Defaults to `fast` when omitted. */
5176
+ speed?: PptxTransitionSpeed;
4906
5177
  durationMs?: number;
4907
5178
  direction?: string;
4908
5179
  advanceOnClick?: boolean;
@@ -4917,6 +5188,10 @@ interface PptxSlideTransition {
4917
5188
  orient?: PptxSplitOrientation;
4918
5189
  /** Relationship ID of transition sound from `p:sndAc/p:stSnd/@r:embed` when present. */
4919
5190
  soundRId?: string;
5191
+ /** Embedded WAV display name from `p:stSnd/p:snd/@name`. */
5192
+ soundName?: string;
5193
+ /** Whether the transition sound repeats until another sound starts. */
5194
+ soundLoop?: boolean;
4920
5195
  /** Resolved transition sound media path within the package. */
4921
5196
  soundPath?: string;
4922
5197
  /** Human-readable sound file name (extracted from soundPath). */
@@ -4930,6 +5205,8 @@ interface PptxSlideTransition {
4930
5205
  rawSoundAction?: XmlObject;
4931
5206
  /** Preserved extension-list XML node from `p:extLst` within the transition for lossless round-trip. */
4932
5207
  rawExtLst?: XmlObject;
5208
+ /** Original transition node, retained to preserve unknown attributes and children. */
5209
+ rawTransition?: XmlObject;
4933
5210
  }
4934
5211
 
4935
5212
  /**
@@ -5169,6 +5446,8 @@ interface PptxSlide {
5169
5446
  /** Optional `<p:cSld @name>` value of the notes slide, for round-trip. */
5170
5447
  notesCSldName?: string;
5171
5448
  comments?: PptxComment[];
5449
+ /** Source package metadata for an Office 2021 p188 comment part. */
5450
+ modernCommentPart?: PptxModernCommentPart;
5172
5451
  warnings?: PptxCompatibilityWarning[];
5173
5452
  rawXml?: XmlObject;
5174
5453
  /** Per-slide colour map override parsed from `p:clrMapOvr`. */
@@ -5187,6 +5466,24 @@ interface PptxSlide {
5187
5466
  activeXControls?: PptxActiveXControl[];
5188
5467
  /** Per-slide header/footer flags from `<p:hf>` (P-H3). */
5189
5468
  headerFooterFlags?: PptxHeaderFooterFlags;
5469
+ /** Server-backed slide synchronization metadata stored in a related OPC part. */
5470
+ slideSynchronization?: PptxSlideSyncProperties;
5471
+ }
5472
+ interface PptxModernCommentPart {
5473
+ path: string;
5474
+ relationshipId: string;
5475
+ /** Original p188:cmLst root, including unknown attributes and extensions. */
5476
+ rawXml?: XmlObject;
5477
+ }
5478
+ /** Metadata from a `p:sldSyncPr` slide synchronization data part. */
5479
+ interface PptxSlideSyncProperties {
5480
+ serverSlideId: string;
5481
+ serverSlideModifiedTime: string;
5482
+ clientInsertedTime: string;
5483
+ extensionList?: XmlObject;
5484
+ rawXml?: XmlObject;
5485
+ partPath?: string;
5486
+ relationshipId?: string;
5190
5487
  }
5191
5488
  /**
5192
5489
  * A slide layout available in the loaded presentation.
@@ -5314,6 +5611,8 @@ interface PptxCustomShow {
5314
5611
  id: string;
5315
5612
  /** Ordered list of slide relationship IDs included in this custom show. */
5316
5613
  slideRIds: string[];
5614
+ /** Original `p:custShow` subtree used to preserve unmodelled attributes and extensions. */
5615
+ rawXml?: XmlObject;
5317
5616
  }
5318
5617
  /**
5319
5618
  * An ordered section in the presentation (from `p:sectionLst` / `p14:sectionLst`).
@@ -5342,6 +5641,8 @@ interface PptxSection {
5342
5641
  collapsed?: boolean;
5343
5642
  /** Section highlight color hex (from p15:sectionPr/@clr). */
5344
5643
  color?: string;
5644
+ /** Original section subtree used to preserve unmodelled attributes and extensions. */
5645
+ rawXml?: XmlObject;
5345
5646
  }
5346
5647
  /**
5347
5648
  * Write-protection hash data parsed from `p:modifyVerifier` in `presentation.xml`.
@@ -5505,6 +5806,8 @@ interface PptxData {
5505
5806
  thumbnailData?: Uint8Array;
5506
5807
  /** Comment authors parsed from `ppt/commentAuthors.xml` for round-trip preservation. */
5507
5808
  commentAuthors?: PptxCommentAuthor[];
5809
+ /** Office 2021 p188 authors from the modern Author part. */
5810
+ modernCommentAuthors?: PptxModernCommentAuthor[];
5508
5811
  /**
5509
5812
  * OOXML conformance class of the loaded file.
5510
5813
  * - `'strict'` -- ISO/IEC 29500 Strict (uses `purl.oclc.org` namespace URIs)
@@ -7082,10 +7385,12 @@ type CollaborationRole = 'owner' | 'collaborator' | 'viewer';
7082
7385
  * any signaling server, which makes this mode usable from static hosting.
7083
7386
  */
7084
7387
  type CollaborationTransport = 'websocket' | 'webrtc';
7388
+ /** How the local user entered a collaboration session. */
7389
+ type CollaborationSessionIntent = 'create' | 'join';
7085
7390
  /**
7086
7391
  * Real-time collaboration configuration.
7087
7392
  *
7088
- * The same shape is accepted by the React, Vue, and Angular bindings.
7393
+ * The same shape is accepted by every framework binding.
7089
7394
  */
7090
7395
  interface CollaborationConfig {
7091
7396
  /** Unique identifier for the collaboration room (alphanumeric, hyphens, underscores). */
@@ -7113,6 +7418,13 @@ interface CollaborationConfig {
7113
7418
  authToken?: string;
7114
7419
  /** Role in the session; defaults to `'collaborator'`. */
7115
7420
  role?: CollaborationRole;
7421
+ /**
7422
+ * Whether this client created the room or joined an existing room. Providers
7423
+ * do not use this value, but hosts can use it to avoid publishing local file
7424
+ * bytes when handling a join request. Omitted values retain the legacy
7425
+ * create-session behaviour.
7426
+ */
7427
+ sessionIntent?: CollaborationSessionIntent;
7116
7428
  /**
7117
7429
  * Elected-writer write-back callback (Area 3 of the C3 hardening plan).
7118
7430
  *
@@ -7212,6 +7524,44 @@ declare const MOBILE_BREAKPOINT = 768;
7212
7524
  declare const TABLET_BREAKPOINT = 1024;
7213
7525
  /** Device orientation as reported by the screen / viewport aspect ratio. */
7214
7526
  type DeviceOrientation = 'portrait' | 'landscape';
7527
+
7528
+ interface PresentationSnapshot {
7529
+ slideIndex: number;
7530
+ buildStep: number;
7531
+ sequence: number;
7532
+ blackout: 'none' | 'black' | 'white';
7533
+ paused: boolean;
7534
+ elapsedMs: number;
7535
+ zoom?: PresentationZoomState;
7536
+ pointer?: PresentationPointerState;
7537
+ inkStrokes?: PresentationInkStroke[];
7538
+ caption?: string;
7539
+ subtitlesVisible?: boolean;
7540
+ }
7541
+ interface PresentationZoomState {
7542
+ scale: number;
7543
+ originX: number;
7544
+ originY: number;
7545
+ }
7546
+ type PresentationPointerTool = 'none' | 'laser' | 'pen' | 'highlighter' | 'eraser';
7547
+ interface PresentationPointerState {
7548
+ tool: PresentationPointerTool;
7549
+ x: number;
7550
+ y: number;
7551
+ color: string;
7552
+ }
7553
+ interface PresentationInkPoint {
7554
+ x: number;
7555
+ y: number;
7556
+ }
7557
+ interface PresentationInkStroke {
7558
+ id: string;
7559
+ slideIndex: number;
7560
+ tool: 'pen' | 'highlighter';
7561
+ color: string;
7562
+ width: number;
7563
+ points: PresentationInkPoint[];
7564
+ }
7215
7565
  interface TouchGestureCallbacks {
7216
7566
  /** Called continuously during a pinch gesture with the new (clamped) scale. */
7217
7567
  onPinchZoom?: (newScale: number) => void;
@@ -7622,6 +7972,17 @@ interface UsePresentationModeResult {
7622
7972
  isAudienceWindowOpen: () => boolean;
7623
7973
  /** Send a slide index to the audience window explicitly. */
7624
7974
  syncSlideToAudience: (slideIndex: number) => void;
7975
+ syncStateToAudience: (snapshot: PresentationSnapshot) => void;
7976
+ presenterSnapshot: PresentationSnapshot;
7977
+ setPresenterBlackout: (blackout: PresentationSnapshot['blackout']) => void;
7978
+ togglePresenterTimer: () => void;
7979
+ resetPresenterTimer: () => void;
7980
+ stepPresenterZoom: (direction: 1 | -1) => void;
7981
+ resetPresenterZoom: () => void;
7982
+ setPresenterCaption: (caption: string) => void;
7983
+ setPresenterSubtitlesVisible: (visible: boolean) => void;
7984
+ updatePresenterSnapshot: (patch: Partial<PresentationSnapshot>) => void;
7985
+ swapPresenterDisplays: () => Promise<boolean>;
7625
7986
  }
7626
7987
  //#endregion
7627
7988
  //#region src/viewer/hooks/useThemeSwitching.d.ts
@@ -8028,6 +8389,8 @@ interface UsePresentationKeyboardInput {
8028
8389
  onToggleToolbar?: () => void;
8029
8390
  /** Toggle between presenter view (split-screen with notes) and fullscreen. */
8030
8391
  onTogglePresenterView?: () => void;
8392
+ onToggleBlackScreen?: () => void;
8393
+ onToggleWhiteScreen?: () => void;
8031
8394
  rehearsing: boolean;
8032
8395
  recordCurrentSlideTime: (slideIndex: number) => void;
8033
8396
  presentationSlideIndex: number;
@@ -8075,12 +8438,15 @@ interface UsePresenterWindowInput {
8075
8438
  isPresenterMode: boolean;
8076
8439
  /** Raw PPTX bytes to share with the audience tab via IndexedDB. */
8077
8440
  content?: ArrayBuffer | Uint8Array | null;
8441
+ snapshot: PresentationSnapshot;
8078
8442
  }
8079
8443
  interface UsePresenterWindowResult {
8080
8444
  openAudienceWindow: () => boolean;
8081
8445
  closeAudienceWindow: () => void;
8082
8446
  isAudienceWindowOpen: () => boolean;
8083
8447
  syncSlideToAudience: (slideIndex: number) => void;
8448
+ syncStateToAudience: (snapshot: PresentationSnapshot) => void;
8449
+ swapDisplays: () => Promise<boolean>;
8084
8450
  }
8085
8451
  declare function usePresenterWindow(input: UsePresenterWindowInput): UsePresenterWindowResult;
8086
8452
  //#endregion
@@ -8090,6 +8456,7 @@ interface UseAudienceModeInput {
8090
8456
  onSetMode: (mode: ViewerMode) => void;
8091
8457
  onSetActiveSlideIndex: (index: number) => void;
8092
8458
  containerRef: React.RefObject<HTMLElement | null>;
8459
+ onSnapshot?: (snapshot: PresentationSnapshot) => void;
8093
8460
  }
8094
8461
  /**
8095
8462
  * When the page was opened with the `#pptx-audience` hash, this hook: