pptx-react-viewer 1.17.1 → 1.19.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 (121) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +1 -1
  3. package/dist/{Model3DScene-YA4F63DT.js → Model3DScene-CQP7JLKK.js} +3 -3
  4. package/dist/Model3DScene-CQP7JLKK.js.br +0 -0
  5. package/dist/Model3DScene-CQP7JLKK.js.gz +0 -0
  6. package/dist/{Model3DScene-QHDYQXL2.mjs → Model3DScene-J2KBVMEZ.mjs} +2 -2
  7. package/dist/Model3DScene-J2KBVMEZ.mjs.br +0 -0
  8. package/dist/Model3DScene-J2KBVMEZ.mjs.gz +0 -0
  9. package/dist/PowerPointViewer-C4d7SKZf.d.ts.map +1 -1
  10. package/dist/{SurfaceChart3DScene-GUAS2NWQ.mjs → SurfaceChart3DScene-52VUVZSC.mjs} +2 -2
  11. package/dist/SurfaceChart3DScene-52VUVZSC.mjs.br +0 -0
  12. package/dist/SurfaceChart3DScene-52VUVZSC.mjs.gz +0 -0
  13. package/dist/{SurfaceChart3DScene-TGNJHTJQ.js → SurfaceChart3DScene-U6LVKSKR.js} +3 -3
  14. package/dist/SurfaceChart3DScene-U6LVKSKR.js.br +0 -0
  15. package/dist/SurfaceChart3DScene-U6LVKSKR.js.gz +0 -0
  16. package/dist/{chunk-XRYREYXC.mjs → chunk-3ZGCM6RC.mjs} +39271 -20532
  17. package/dist/chunk-3ZGCM6RC.mjs.br +0 -0
  18. package/dist/chunk-3ZGCM6RC.mjs.gz +0 -0
  19. package/dist/{chunk-IZXN663G.js → chunk-AALZCSY4.js} +7 -0
  20. package/dist/chunk-AALZCSY4.js.br +0 -0
  21. package/dist/chunk-AALZCSY4.js.gz +0 -0
  22. package/dist/{chunk-MGLRKGCH.js → chunk-AD3EAEY6.js} +39323 -20531
  23. package/dist/chunk-AD3EAEY6.js.br +0 -0
  24. package/dist/chunk-AD3EAEY6.js.gz +0 -0
  25. package/dist/{chunk-WH7YXV3I.js → chunk-DBZLZMED.js} +24152 -23261
  26. package/dist/chunk-DBZLZMED.js.br +0 -0
  27. package/dist/chunk-DBZLZMED.js.gz +0 -0
  28. package/dist/{chunk-JWS3RQKN.js → chunk-P3T4E6JQ.js} +3573 -907
  29. package/dist/chunk-P3T4E6JQ.js.br +0 -0
  30. package/dist/chunk-P3T4E6JQ.js.gz +0 -0
  31. package/dist/{chunk-G22EWPLH.mjs → chunk-R7FTNSSP.mjs} +3498 -882
  32. package/dist/chunk-R7FTNSSP.mjs.br +0 -0
  33. package/dist/chunk-R7FTNSSP.mjs.gz +0 -0
  34. package/dist/{chunk-5CD34U2V.mjs → chunk-RIRK64DM.mjs} +7 -0
  35. package/dist/chunk-RIRK64DM.mjs.br +0 -0
  36. package/dist/chunk-RIRK64DM.mjs.gz +0 -0
  37. package/dist/{chunk-PCQH2UBR.mjs → chunk-SLJXGFZS.mjs} +24109 -23218
  38. package/dist/chunk-SLJXGFZS.mjs.br +0 -0
  39. package/dist/chunk-SLJXGFZS.mjs.gz +0 -0
  40. package/dist/{chunk-HN7CPQUG.mjs → chunk-XGTMHQR7.mjs} +244 -785
  41. package/dist/chunk-XGTMHQR7.mjs.br +0 -0
  42. package/dist/chunk-XGTMHQR7.mjs.gz +0 -0
  43. package/dist/{chunk-SXCO5HHN.js → chunk-YF6JD4DO.js} +679 -1231
  44. package/dist/chunk-YF6JD4DO.js.br +0 -0
  45. package/dist/chunk-YF6JD4DO.js.gz +0 -0
  46. package/dist/dist-3YRZ26TL.mjs +2 -0
  47. package/dist/dist-3YRZ26TL.mjs.br +0 -0
  48. package/dist/dist-3YRZ26TL.mjs.gz +0 -0
  49. package/dist/{dist-2ZAH7U6U.js → dist-M2P6HBG4.js} +719 -507
  50. package/dist/dist-M2P6HBG4.js.br +0 -0
  51. package/dist/dist-M2P6HBG4.js.gz +0 -0
  52. package/dist/hooks-unstable.d.ts +1006 -165
  53. package/dist/hooks-unstable.d.ts.map +1 -1
  54. package/dist/hooks-unstable.js +78 -78
  55. package/dist/hooks-unstable.js.br +0 -0
  56. package/dist/hooks-unstable.js.gz +0 -0
  57. package/dist/hooks-unstable.mjs +4 -4
  58. package/dist/hooks-unstable.mjs.br +0 -0
  59. package/dist/hooks-unstable.mjs.gz +0 -0
  60. package/dist/i18n.js +3 -3
  61. package/dist/i18n.js.br +0 -0
  62. package/dist/i18n.js.gz +0 -0
  63. package/dist/i18n.mjs +1 -1
  64. package/dist/i18n.mjs.br +0 -0
  65. package/dist/i18n.mjs.gz +0 -0
  66. package/dist/{index-XGt7MZpa.d.ts → index-DmHVR48M.d.ts} +25 -3
  67. package/dist/index-DmHVR48M.d.ts.map +1 -0
  68. package/dist/index.d.ts +828 -137
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +19 -19
  71. package/dist/index.js.br +0 -0
  72. package/dist/index.js.gz +0 -0
  73. package/dist/index.mjs +5 -5
  74. package/dist/index.mjs.br +0 -0
  75. package/dist/index.mjs.gz +0 -0
  76. package/dist/pptx-viewer.css +1 -1
  77. package/dist/pptx-viewer.css.br +0 -0
  78. package/dist/pptx-viewer.css.gz +0 -0
  79. package/dist/viewer/index.d.ts +946 -147
  80. package/dist/viewer/index.d.ts.map +1 -1
  81. package/dist/viewer/index.js +24 -20
  82. package/dist/viewer/index.js.br +0 -0
  83. package/dist/viewer/index.js.gz +0 -0
  84. package/dist/viewer/index.mjs +5 -5
  85. package/dist/viewer/index.mjs.br +0 -0
  86. package/dist/viewer/index.mjs.gz +0 -0
  87. package/package.json +1 -1
  88. package/dist/Model3DScene-QHDYQXL2.mjs.br +0 -0
  89. package/dist/Model3DScene-QHDYQXL2.mjs.gz +0 -0
  90. package/dist/Model3DScene-YA4F63DT.js.br +0 -0
  91. package/dist/Model3DScene-YA4F63DT.js.gz +0 -0
  92. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.br +0 -0
  93. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.gz +0 -0
  94. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.br +0 -0
  95. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.gz +0 -0
  96. package/dist/chunk-5CD34U2V.mjs.br +0 -0
  97. package/dist/chunk-5CD34U2V.mjs.gz +0 -0
  98. package/dist/chunk-G22EWPLH.mjs.br +0 -0
  99. package/dist/chunk-G22EWPLH.mjs.gz +0 -0
  100. package/dist/chunk-HN7CPQUG.mjs.br +0 -0
  101. package/dist/chunk-HN7CPQUG.mjs.gz +0 -0
  102. package/dist/chunk-IZXN663G.js.br +0 -0
  103. package/dist/chunk-IZXN663G.js.gz +0 -0
  104. package/dist/chunk-JWS3RQKN.js.br +0 -0
  105. package/dist/chunk-JWS3RQKN.js.gz +0 -0
  106. package/dist/chunk-MGLRKGCH.js.br +0 -0
  107. package/dist/chunk-MGLRKGCH.js.gz +0 -0
  108. package/dist/chunk-PCQH2UBR.mjs.br +0 -0
  109. package/dist/chunk-PCQH2UBR.mjs.gz +0 -0
  110. package/dist/chunk-SXCO5HHN.js.br +0 -0
  111. package/dist/chunk-SXCO5HHN.js.gz +0 -0
  112. package/dist/chunk-WH7YXV3I.js.br +0 -0
  113. package/dist/chunk-WH7YXV3I.js.gz +0 -0
  114. package/dist/chunk-XRYREYXC.mjs.br +0 -0
  115. package/dist/chunk-XRYREYXC.mjs.gz +0 -0
  116. package/dist/dist-2ZAH7U6U.js.br +0 -0
  117. package/dist/dist-2ZAH7U6U.js.gz +0 -0
  118. package/dist/dist-MXDC6YTS.mjs +0 -2
  119. package/dist/dist-MXDC6YTS.mjs.br +0 -0
  120. package/dist/dist-MXDC6YTS.mjs.gz +0 -0
  121. package/dist/index-XGt7MZpa.d.ts.map +0 -1
@@ -359,6 +359,8 @@ interface CustomGeometryPath {
359
359
  * and the text rectangle are not lost when a custGeom is edited and saved.
360
360
  */
361
361
  interface CustomGeometryRawData {
362
+ /** Raw `a:avLst` XML content (adjustment value list). */
363
+ avLstXml?: unknown;
362
364
  /** Raw `a:gdLst` XML content (guide list). */
363
365
  gdLstXml?: unknown;
364
366
  /** Raw `a:ahLst` XML content (adjustment handles). */
@@ -499,7 +501,7 @@ interface PptxCustomPathProperties {
499
501
  pathHeight?: number;
500
502
  /** Structured custom geometry paths for editing (maps to a:custGeom/a:pathLst). */
501
503
  customGeometryPaths?: CustomGeometryPath[];
502
- /** Raw a:gdLst/a:ahLst/a:cxnLst/a:rect XML preserved for round-trip serialization. */
504
+ /** Raw adjustment/guide/handle/connection/text-rectangle XML preserved for serialization. */
503
505
  customGeometryRawData?: CustomGeometryRawData;
504
506
  /**
505
507
  * Typed XY adjustment handles parsed from `a:custGeom/a:ahLst/a:ahXY`.
@@ -599,6 +601,10 @@ interface Text3DStyle {
599
601
  interface Pptx3DScene {
600
602
  /** Camera preset type, e.g. "orthographicFront", "perspectiveFront". */
601
603
  cameraPreset?: string;
604
+ /** Camera field of view in 1/60000 degrees (`a:camera/@fov`). */
605
+ cameraFieldOfView?: number;
606
+ /** Camera zoom as an OOXML percentage fraction (`a:camera/@zoom`, 1 = 100%). */
607
+ cameraZoom?: number;
602
608
  /** Camera rotation around X axis in 1/60000 degrees. */
603
609
  cameraRotX?: number;
604
610
  /** Camera rotation around Y axis in 1/60000 degrees. */
@@ -609,6 +615,12 @@ interface Pptx3DScene {
609
615
  lightRigType?: string;
610
616
  /** Light rig direction, e.g. "t", "b", "l", "r", "tl". */
611
617
  lightRigDirection?: string;
618
+ /** Light-rig rotation latitude in 1/60000 degrees. */
619
+ lightRigRotX?: number;
620
+ /** Light-rig rotation longitude in 1/60000 degrees. */
621
+ lightRigRotY?: number;
622
+ /** Light-rig rotation revolution in 1/60000 degrees. */
623
+ lightRigRotZ?: number;
612
624
  /** Whether a 3D backdrop plane is present (`a:backdrop`). */
613
625
  hasBackdrop?: boolean;
614
626
  /** Backdrop plane anchor X in EMU. */
@@ -617,6 +629,18 @@ interface Pptx3DScene {
617
629
  backdropAnchorY?: number;
618
630
  /** Backdrop plane anchor Z in EMU. */
619
631
  backdropAnchorZ?: number;
632
+ /** Backdrop normal vector X component. */
633
+ backdropNormalX?: number;
634
+ /** Backdrop normal vector Y component. */
635
+ backdropNormalY?: number;
636
+ /** Backdrop normal vector Z component. */
637
+ backdropNormalZ?: number;
638
+ /** Backdrop up vector X component. */
639
+ backdropUpX?: number;
640
+ /** Backdrop up vector Y component. */
641
+ backdropUpY?: number;
642
+ /** Backdrop up vector Z component. */
643
+ backdropUpZ?: number;
620
644
  }
621
645
  /**
622
646
  * 3D shape extrusion/bevel from `a:sp3d`.
@@ -688,6 +712,12 @@ type PptxTextWarpPreset = 'textNoShape' | 'textPlain' | 'textStop' | 'textTriang
688
712
  * @module pptx-types/shape-style
689
713
  */
690
714
 
715
+ interface PptxCustomDashSegment {
716
+ /** Dash length as a non-negative percentage in thousandths of one percent. */
717
+ dash: number;
718
+ /** Space length as a non-negative percentage in thousandths of one percent. */
719
+ space: number;
720
+ }
691
721
  /**
692
722
  * Comprehensive visual style for a shape, connector, or image element.
693
723
  *
@@ -736,9 +766,13 @@ interface ShapeStyle {
736
766
  */
737
767
  fillColorXml?: XmlObject;
738
768
  fillGradient?: string;
769
+ /** Original `gradFill` XML retained for unknown-child and extension round-tripping. */
770
+ fillGradientXml?: XmlObject;
739
771
  fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'image' | 'theme' | 'group';
740
772
  fillPatternPreset?: string;
741
773
  fillPatternBackgroundColor?: string;
774
+ /** Original `pattFill` XML retained for unknown-child round-tripping. */
775
+ fillPatternXml?: XmlObject;
742
776
  /** Raw XML node for pattern fill foreground colour (preserves color transforms). */
743
777
  fillPatternFgClrXml?: XmlObject;
744
778
  /** Raw XML node for pattern fill background colour (preserves color transforms). */
@@ -804,6 +838,14 @@ interface ShapeStyle {
804
838
  /** Pen line alignment (`a:ln/@algn`): `ctr` (centre, default) or `in` (inside). */
805
839
  lineAlignment?: 'ctr' | 'in';
806
840
  shadowColor?: string;
841
+ /** Preserved source `a:effectLst`, including unknown effects and extensions. */
842
+ effectListXml?: XmlObject;
843
+ /** Original outer-shadow node used for lossless surgical updates. */
844
+ outerShadowXml?: XmlObject;
845
+ /** Resolved source shadow colour used to detect colour edits. */
846
+ outerShadowOriginalColor?: string;
847
+ /** Source shadow opacity used to detect alpha edits. */
848
+ outerShadowOriginalOpacity?: number;
807
849
  shadowBlur?: number;
808
850
  shadowOffsetX?: number;
809
851
  shadowOffsetY?: number;
@@ -847,11 +889,23 @@ interface ShapeStyle {
847
889
  /** Multiple shadow layers (for advanced effects). */
848
890
  shadows?: ShadowEffect[];
849
891
  glowColor?: string;
892
+ /** Original glow node used for lossless surgical updates. */
893
+ glowXml?: XmlObject;
894
+ /** Resolved source glow colour used to detect colour edits. */
895
+ glowOriginalColor?: string;
896
+ /** Source glow opacity used to detect alpha edits. */
897
+ glowOriginalOpacity?: number;
850
898
  glowRadius?: number;
851
899
  glowOpacity?: number;
852
900
  softEdgeRadius?: number;
853
901
  /** Inner shadow colour (`a:innerShdw`). */
854
902
  innerShadowColor?: string;
903
+ /** Original inner-shadow node used for lossless surgical updates. */
904
+ innerShadowXml?: XmlObject;
905
+ /** Resolved source inner-shadow colour used to detect colour edits. */
906
+ innerShadowOriginalColor?: string;
907
+ /** Source inner-shadow opacity used to detect alpha edits. */
908
+ innerShadowOriginalOpacity?: number;
855
909
  /** Inner shadow opacity (0-1). */
856
910
  innerShadowOpacity?: number;
857
911
  /** Inner shadow blur radius in px. */
@@ -860,8 +914,12 @@ interface ShapeStyle {
860
914
  innerShadowOffsetX?: number;
861
915
  /** Inner shadow vertical offset in px. */
862
916
  innerShadowOffsetY?: number;
917
+ /** Original soft-edge node, including vendor attributes and extensions. */
918
+ softEdgeXml?: XmlObject;
863
919
  /** Reflection effect — distance from shape bottom in px. */
864
920
  reflectionBlurRadius?: number;
921
+ /** Original reflection node, including vendor attributes and extensions. */
922
+ reflectionXml?: XmlObject;
865
923
  /** Reflection start opacity (0-1). */
866
924
  reflectionStartOpacity?: number;
867
925
  /** Reflection end opacity (0-1). */
@@ -892,11 +950,12 @@ interface ShapeStyle {
892
950
  connectorStartConnection?: ConnectorConnectionPoint;
893
951
  /** Connection point for the end of a connector. */
894
952
  connectorEndConnection?: ConnectorConnectionPoint;
895
- /** Custom dash segments array (`a:custDash/a:ds`). Each entry has dash length and space length in EMU. */
896
- customDashSegments?: Array<{
897
- dash: number;
898
- space: number;
899
- }>;
953
+ /** Custom dash pattern, measured relative to line width in thousandths of one percent. */
954
+ customDashSegments?: PptxCustomDashSegment[];
955
+ /** Original `a:ds` payloads retained by index for lossless edits. */
956
+ customDashSegmentXml?: XmlObject[];
957
+ /** Original `a:custDash` payload retained for lossless edits. */
958
+ customDashXml?: XmlObject;
900
959
  /** 3D scene/camera settings from `a:scene3d`. */
901
960
  scene3d?: Pptx3DScene;
902
961
  /** 3D shape extrusion/bevel from `a:sp3d`. */
@@ -1008,6 +1067,8 @@ interface ShapeStyle {
1008
1067
  * ```
1009
1068
  */
1010
1069
  interface TextStyle {
1070
+ /** Original `a:rPr` XML retained by projections that share the shape-text model. */
1071
+ runPropertiesXml?: XmlObject;
1011
1072
  fontFamily?: string;
1012
1073
  fontSize?: number;
1013
1074
  /** When true, renderer should shrink text to fit the shape bounds. */
@@ -1357,6 +1418,8 @@ interface TextStyle {
1357
1418
  text3d?: Text3DStyle;
1358
1419
  /** 3D scene (camera + light rig) settings on the text body (`a:bodyPr/a:scene3d`). */
1359
1420
  textBodyScene3d?: Pptx3DScene;
1421
+ /** Raw `a:scene3d` subtree used to preserve extensions and unmodelled children. */
1422
+ textBodyScene3dXml?: XmlObject;
1360
1423
  /**
1361
1424
  * Raw `<a:extLst>` subtree captured from `<a:bodyPr>`. Preserved verbatim so
1362
1425
  * authored extensions (e.g. content placeholders, custom application data)
@@ -1733,12 +1796,126 @@ interface PlaceholderTextLevelStyle {
1733
1796
  spaceAfter?: number;
1734
1797
  }
1735
1798
 
1799
+ /** Tick-mark placement from ChartML `ST_TickMark`. */
1800
+ type PptxChartTickMark = 'cross' | 'in' | 'none' | 'out';
1801
+ /** Typed axis tick and category/date label controls. */
1802
+ interface PptxChartAxisLabelFormatting {
1803
+ /** Primary and secondary tick-mark placement. */
1804
+ majorTickMark?: PptxChartTickMark;
1805
+ minorTickMark?: PptxChartTickMark;
1806
+ /** Tick-label position from ChartML `ST_TickLblPos`. */
1807
+ tickLblPos?: 'high' | 'low' | 'nextTo' | 'none';
1808
+ /** Automatic category/date axis behavior (`c:auto`). */
1809
+ auto?: boolean;
1810
+ /** Category-axis label alignment (`c:lblAlgn`). */
1811
+ labelAlignment?: 'ctr' | 'l' | 'r';
1812
+ /** Category/date label distance, from 0 through 1000 percent. */
1813
+ labelOffset?: number;
1814
+ /** Number of category/date labels between rendered labels. */
1815
+ tickLabelSkip?: number;
1816
+ /** Number of category/date tick positions between major tick marks. */
1817
+ tickMarkSkip?: number;
1818
+ /** Suppress multi-level category labels (`c:noMultiLvlLbl`). */
1819
+ noMultiLevelLabels?: boolean;
1820
+ }
1821
+
1822
+ interface PptxChartPivotFormat {
1823
+ index: number;
1824
+ shapePropertiesXml?: XmlObject | null;
1825
+ markerXml?: XmlObject | null;
1826
+ dataLabelXml?: XmlObject | null;
1827
+ extensionListXml?: XmlObject | null;
1828
+ rawXml?: XmlObject;
1829
+ }
1830
+ /** Editable classic ChartML `c:pivotFmts` collection. */
1831
+ interface PptxChartPivotFormats {
1832
+ formats: PptxChartPivotFormat[];
1833
+ rawXml?: XmlObject;
1834
+ }
1835
+
1836
+ /** Editable classic ChartML `c:pivotSource` metadata. */
1837
+ interface PptxChartPivotSource {
1838
+ /** Pivot table reference stored as `c:name` text. */
1839
+ name: string;
1840
+ /** Required unsigned format identifier stored in `c:fmtId/@val`. */
1841
+ formatId: number;
1842
+ /** Internal source subtree used to preserve extensions and foreign markup. */
1843
+ rawXml?: XmlObject;
1844
+ }
1845
+
1846
+ /** Headers and footers used when a classic ChartML chart is printed. */
1847
+ interface PptxChartPrintHeaderFooter {
1848
+ oddHeader?: string;
1849
+ oddFooter?: string;
1850
+ evenHeader?: string;
1851
+ evenFooter?: string;
1852
+ firstHeader?: string;
1853
+ firstFooter?: string;
1854
+ alignWithMargins?: boolean;
1855
+ differentOddEven?: boolean;
1856
+ differentFirst?: boolean;
1857
+ /** Original subtree retained for foreign attributes and extension children. */
1858
+ rawXml?: unknown;
1859
+ }
1860
+ /** Required page margins from ChartML `c:pageMargins`, measured in inches. */
1861
+ interface PptxChartPageMargins {
1862
+ left: number;
1863
+ right: number;
1864
+ top: number;
1865
+ bottom: number;
1866
+ header: number;
1867
+ footer: number;
1868
+ /** Original leaf retained for foreign attributes. */
1869
+ rawXml?: unknown;
1870
+ }
1871
+ /** Printer page configuration from ChartML `c:pageSetup`. */
1872
+ interface PptxChartPageSetup {
1873
+ paperSize?: number;
1874
+ firstPageNumber?: number;
1875
+ orientation?: 'default' | 'portrait' | 'landscape';
1876
+ blackAndWhite?: boolean;
1877
+ draft?: boolean;
1878
+ useFirstPageNumber?: boolean;
1879
+ horizontalDpi?: number;
1880
+ verticalDpi?: number;
1881
+ copies?: number;
1882
+ /** Original leaf retained for foreign attributes. */
1883
+ rawXml?: unknown;
1884
+ }
1885
+ /** Editable `c:printSettings` content from a classic ChartML chart space. */
1886
+ interface PptxChartPrintSettings {
1887
+ headerFooter?: PptxChartPrintHeaderFooter | null;
1888
+ pageMargins?: PptxChartPageMargins | null;
1889
+ pageSetup?: PptxChartPageSetup | null;
1890
+ /** `null` removes the legacy header/footer drawing relationship element. */
1891
+ legacyDrawingHeaderFooterRelationshipId?: string | null;
1892
+ /** Original subtree retained for unknown and extension content. */
1893
+ rawXml?: unknown;
1894
+ }
1895
+
1896
+ /** Editable classic ChartML `c:protection` settings. */
1897
+ interface PptxChartProtection {
1898
+ /** Prevent editing the chart object. */
1899
+ chartObject?: boolean | null;
1900
+ /** Prevent editing the chart data. */
1901
+ data?: boolean | null;
1902
+ /** Prevent editing chart formatting. */
1903
+ formatting?: boolean | null;
1904
+ /** Prevent selecting chart elements. */
1905
+ selection?: boolean | null;
1906
+ /** Prevent chart user-interface operations. */
1907
+ userInterface?: boolean | null;
1908
+ /** Internal source subtree used to preserve foreign markup during edits. */
1909
+ rawXml?: XmlObject;
1910
+ }
1911
+
1736
1912
  /**
1737
1913
  * Chart types: chart categories, series data, style metadata, data tables,
1738
1914
  * trendlines, error bars, and the composite `PptxChartData`.
1739
1915
  *
1740
1916
  * @module pptx-types/chart
1741
1917
  */
1918
+
1742
1919
  /**
1743
1920
  * Supported chart type discriminators.
1744
1921
  *
@@ -1775,6 +1952,7 @@ type PptxChartTrendlineType = 'linear' | 'exponential' | 'logarithmic' | 'polyno
1775
1952
  */
1776
1953
  interface PptxChartTrendline {
1777
1954
  trendlineType: PptxChartTrendlineType;
1955
+ name?: string;
1778
1956
  order?: number;
1779
1957
  period?: number;
1780
1958
  forward?: number;
@@ -1783,6 +1961,13 @@ interface PptxChartTrendline {
1783
1961
  displayRSq?: boolean;
1784
1962
  displayEq?: boolean;
1785
1963
  color?: string;
1964
+ label?: PptxChartTrendlineLabel | null;
1965
+ }
1966
+ /** Typed, commonly edited properties of `c:trendlineLbl`. */
1967
+ interface PptxChartTrendlineLabel {
1968
+ layout?: PptxChartManualLayout;
1969
+ numberFormatCode?: string;
1970
+ sourceLinked?: boolean;
1786
1971
  }
1787
1972
  /** Error-bar direction axis. */
1788
1973
  type PptxChartErrBarDir = 'x' | 'y';
@@ -1819,6 +2004,8 @@ interface PptxChartErrBars {
1819
2004
  val?: number;
1820
2005
  customPlus?: number[];
1821
2006
  customMinus?: number[];
2007
+ noEndCap?: boolean;
2008
+ color?: string;
1822
2009
  }
1823
2010
  /**
1824
2011
  * Visibility flags for the chart data table (axes + legend keys).
@@ -1868,9 +2055,17 @@ interface PptxChartShapeProps {
1868
2055
  /** Line dash style (a:prstDash/@val), e.g. 'solid', 'dash', 'dot', 'lgDash'. */
1869
2056
  strokeDashStyle?: string;
1870
2057
  }
2058
+ /** Up/down bar formatting on line and stock charts (`c:upDownBars`). */
2059
+ interface PptxChartUpDownBars {
2060
+ /** Gap between bars as a percentage, constrained to 0 through 500. */
2061
+ gapWidth?: number;
2062
+ upBars?: PptxChartShapeProps;
2063
+ downBars?: PptxChartShapeProps;
2064
+ }
1871
2065
  /** Marker appearance on a chart series or data point. */
1872
2066
  interface PptxChartMarker {
1873
2067
  symbol: PptxChartMarkerSymbol;
2068
+ /** Marker size in points, constrained by ST_MarkerSize to 2 through 72. */
1874
2069
  size?: number;
1875
2070
  spPr?: PptxChartShapeProps;
1876
2071
  }
@@ -1881,26 +2076,43 @@ interface PptxChartDataPoint {
1881
2076
  explosion?: number;
1882
2077
  invertIfNegative?: boolean;
1883
2078
  marker?: PptxChartMarker;
2079
+ /** Render a bubble-chart point with a 3-D appearance. */
2080
+ bubble3D?: boolean;
1884
2081
  }
2082
+ /** Schema values accepted by `c:dLblPos`. */
2083
+ type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
1885
2084
  /** Individual data label override (c:dLbl). */
1886
2085
  interface PptxChartDataLabel {
1887
2086
  idx: number;
2087
+ /** Suppress this data point's automatically generated label. */
2088
+ deleted?: boolean;
1888
2089
  showVal?: boolean;
1889
2090
  showCatName?: boolean;
1890
2091
  showSerName?: boolean;
1891
2092
  showPercent?: boolean;
1892
2093
  showLegendKey?: boolean;
1893
2094
  showBubbleSize?: boolean;
1894
- position?: string;
2095
+ position?: PptxChartDataLabelPosition;
1895
2096
  text?: string;
2097
+ separator?: string;
2098
+ showLeaderLines?: boolean;
1896
2099
  }
1897
2100
  /** Axis number format. */
1898
2101
  interface PptxChartAxisNumFmt {
1899
2102
  formatCode: string;
1900
2103
  sourceLinked?: boolean;
1901
2104
  }
2105
+ /** Typed contents of a value-axis display-unit label (`c:dispUnitsLbl`). */
2106
+ interface PptxChartDisplayUnitsLabel {
2107
+ /** Literal label text. Omit to preserve the source text subtree. */
2108
+ text?: string;
2109
+ /** Manual label placement. `null` removes only the manual layout. */
2110
+ layout?: PptxChartManualLayout | null;
2111
+ /** Label shape formatting. `null` removes `c:spPr`. */
2112
+ spPr?: PptxChartShapeProps | null;
2113
+ }
1902
2114
  /** Axis formatting for category, value, or date axes. */
1903
- interface PptxChartAxisFormatting {
2115
+ interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
1904
2116
  axisType: 'catAx' | 'valAx' | 'dateAx' | 'serAx';
1905
2117
  /** Axis position: "b" (bottom), "l" (left), "r" (right), "t" (top). */
1906
2118
  axPos?: 'b' | 'l' | 'r' | 't';
@@ -1908,6 +2120,12 @@ interface PptxChartAxisFormatting {
1908
2120
  axisId?: number;
1909
2121
  /** Cross-axis identifier — the axis this axis crosses. */
1910
2122
  crossAxisId?: number;
2123
+ /** Automatic crossing mode (`c:crosses`). Mutually exclusive with `crossesAt`. */
2124
+ crosses?: 'autoZero' | 'min' | 'max';
2125
+ /** Explicit crossing value (`c:crossesAt`). Units depend on the axis type. */
2126
+ crossesAt?: number;
2127
+ /** Whether a value axis crosses between or at category tick marks. */
2128
+ crossBetween?: 'between' | 'midCat';
1911
2129
  numFmt?: PptxChartAxisNumFmt;
1912
2130
  titleText?: string;
1913
2131
  spPr?: PptxChartShapeProps;
@@ -1925,6 +2143,8 @@ interface PptxChartAxisFormatting {
1925
2143
  min?: number;
1926
2144
  /** Maximum axis value override (c:max/@val). */
1927
2145
  max?: number;
2146
+ /** Axis value direction (`c:scaling/c:orientation/@val`). */
2147
+ orientation?: 'minMax' | 'maxMin';
1928
2148
  /** Whether the axis is deleted/hidden (c:delete/@val). */
1929
2149
  deleted?: boolean;
1930
2150
  /**
@@ -1934,8 +2154,12 @@ interface PptxChartAxisFormatting {
1934
2154
  displayUnits?: 'hundreds' | 'thousands' | 'tenThousands' | 'hundredThousands' | 'millions' | 'tenMillions' | 'hundredMillions' | 'billions' | 'trillions' | 'custom';
1935
2155
  /** Custom display unit divisor value (c:dispUnits/c:custUnit/@val). Only used when displayUnits is 'custom'. */
1936
2156
  displayUnitsValue?: number;
1937
- /** Display units label text (c:dispUnits/c:dispUnitsLbl). Overrides the built-in default label when present. */
1938
- displayUnitsLabel?: string;
2157
+ /**
2158
+ * Display-unit label contents (`c:dispUnits/c:dispUnitsLbl`). A string is
2159
+ * retained as a compatibility shorthand for `{ text: string }`; `null`
2160
+ * explicitly removes the label.
2161
+ */
2162
+ displayUnitsLabel?: string | PptxChartDisplayUnitsLabel | null;
1939
2163
  /** Whether logarithmic scaling is enabled (presence of c:scaling/c:logBase). */
1940
2164
  logScale?: boolean;
1941
2165
  /** Logarithmic base value (c:scaling/c:logBase/@val), typically 10 or e. */
@@ -1944,14 +2168,69 @@ interface PptxChartAxisFormatting {
1944
2168
  majorUnit?: number;
1945
2169
  /** Minor-unit interval between secondary tick marks (c:minorUnit/@val). */
1946
2170
  minorUnit?: number;
1947
- /** Tick-label position (c:tickLblPos/@val): 'high', 'low', 'nextTo', or 'none'. */
1948
- tickLblPos?: 'high' | 'low' | 'nextTo' | 'none';
2171
+ /** Calendar unit used to interpret date-axis serial values. */
2172
+ baseTimeUnit?: 'days' | 'months' | 'years';
2173
+ majorTimeUnit?: 'days' | 'months' | 'years';
2174
+ minorTimeUnit?: 'days' | 'months' | 'years';
1949
2175
  }
1950
2176
  /** 3D wall or floor element formatting. */
1951
2177
  interface PptxChart3DSurface {
1952
2178
  thickness?: number;
1953
2179
  spPr?: PptxChartShapeProps;
1954
2180
  }
2181
+ /** Office 2016 ChartEx box-and-whisker series layout options. */
2182
+ interface PptxChartBoxWhiskerOptions {
2183
+ quartileMethod?: 'inclusive' | 'exclusive';
2184
+ showMeanLine?: boolean;
2185
+ showMeanMarker?: boolean;
2186
+ /** Show non-outlier (inner) data points. */
2187
+ showInnerPoints?: boolean;
2188
+ showOutlierPoints?: boolean;
2189
+ }
2190
+ /** Office 2016 ChartEx histogram and Pareto series layout options. */
2191
+ interface PptxChartHistogramOptions {
2192
+ /** Maps to `clusteredColumn` for histogram columns or `paretoLine`. */
2193
+ layout?: 'histogram' | 'pareto';
2194
+ /** Exactly one of binSize and binCount is emitted by the ChartEx writer. */
2195
+ binSize?: number;
2196
+ binCount?: number;
2197
+ intervalClosed?: 'l' | 'r';
2198
+ underflow?: number | 'auto';
2199
+ overflow?: number | 'auto';
2200
+ }
2201
+ /** Office 2016 ChartEx waterfall series layout options. */
2202
+ interface PptxChartWaterfallOptions {
2203
+ /** Zero-based data point indexes rendered as absolute subtotal or total bars. */
2204
+ subtotalIndices?: number[];
2205
+ /** Whether connector lines are visible between adjacent bars. */
2206
+ connectorLines?: boolean;
2207
+ }
2208
+ /** Office 2016 ChartEx geographic series dimensions and layout options. */
2209
+ interface PptxChartRegionMapOptions {
2210
+ /** Optional provider entity identifiers aligned with categories and values. */
2211
+ entityIds?: string[];
2212
+ /** Original `cx:pt/@idx` values for category points. */
2213
+ categorySourceIndices?: number[];
2214
+ /** Original `cx:pt/@idx` values for colour-value points. */
2215
+ valueSourceIndices?: number[];
2216
+ /** Original `cx:pt/@idx` values for entity-ID points. */
2217
+ entityIdSourceIndices?: number[];
2218
+ regionLabelLayout?: 'none' | 'bestFitOnly' | 'showAll';
2219
+ projectionType?: 'mercator' | 'miller' | 'robinson' | 'albers';
2220
+ viewedRegionType?: 'dataOnly' | 'postalCode' | 'county' | 'state' | 'countryRegion' | 'countryRegionList' | 'world';
2221
+ cultureLanguage?: string;
2222
+ /** ISO-3166-1 alpha-2 region code. */
2223
+ cultureRegion?: string;
2224
+ attribution?: string;
2225
+ /** Opaque authored provider cache under `cx:geography/cx:geoCache`. */
2226
+ geographyCache?: XmlObject;
2227
+ }
2228
+ /** Layout for parent category labels in a hierarchical ChartEx treemap. */
2229
+ type PptxChartParentLabelLayout = 'none' | 'banner' | 'overlapping';
2230
+ /** Per-series layout options for an Office 2016+ ChartEx treemap. */
2231
+ interface PptxChartTreemapOptions {
2232
+ parentLabelLayout?: PptxChartParentLabelLayout;
2233
+ }
1955
2234
  /**
1956
2235
  * A single data series within a chart.
1957
2236
  *
@@ -1987,6 +2266,11 @@ interface PptxChartSeries {
1987
2266
  * series.
1988
2267
  */
1989
2268
  seriesChartType?: PptxChartType;
2269
+ boxWhiskerOptions?: PptxChartBoxWhiskerOptions;
2270
+ histogramOptions?: PptxChartHistogramOptions;
2271
+ waterfallOptions?: PptxChartWaterfallOptions;
2272
+ regionMapOptions?: PptxChartRegionMapOptions;
2273
+ treemapOptions?: PptxChartTreemapOptions;
1990
2274
  }
1991
2275
  /**
1992
2276
  * Chart-level data-label options (`c:dLbls` directly under a chart-type
@@ -2004,12 +2288,32 @@ interface PptxChartDataLabelOptions {
2004
2288
  showPercent?: boolean;
2005
2289
  /** Show the legend key swatch (`c:showLegendKey`). */
2006
2290
  showLegendKey?: boolean;
2291
+ /** Show bubble size (`c:showBubbleSize`). */
2292
+ showBubbleSize?: boolean;
2293
+ /** Text placed between combined label components (`c:separator`). */
2294
+ separator?: string;
2295
+ /** Show leader lines where supported (`c:showLeaderLines`). */
2296
+ showLeaderLines?: boolean;
2007
2297
  /**
2008
2298
  * Label position (`c:dLblPos`). Valid values depend on the chart type
2009
2299
  * (`ctr`, `inEnd`, `inBase`, `outEnd`, `bestFit`, `l`, `r`, `t`, `b`).
2010
2300
  * Omit to let PowerPoint use the type default.
2011
2301
  */
2012
- position?: 'ctr' | 'inEnd' | 'inBase' | 'outEnd' | 'bestFit' | 'l' | 'r' | 't' | 'b';
2302
+ position?: PptxChartDataLabelPosition;
2303
+ }
2304
+ /** Typed text defaults for a single chart legend entry. */
2305
+ interface PptxChartLegendTextStyle {
2306
+ fontFamily?: string;
2307
+ fontSize?: number;
2308
+ bold?: boolean;
2309
+ italic?: boolean;
2310
+ color?: string;
2311
+ }
2312
+ /** Per-series legend entry override (`c:legendEntry`). */
2313
+ interface PptxChartLegendEntry {
2314
+ index: number;
2315
+ deleted?: boolean;
2316
+ textStyle?: PptxChartLegendTextStyle;
2013
2317
  }
2014
2318
  /**
2015
2319
  * Style / formatting metadata for a chart.
@@ -2032,6 +2336,8 @@ interface PptxChartStyle {
2032
2336
  hasLegend?: boolean;
2033
2337
  /** Legend position (t, b, l, r, tr). */
2034
2338
  legendPosition?: string;
2339
+ /** Per-series visibility and text-style overrides. */
2340
+ legendEntries?: PptxChartLegendEntry[];
2035
2341
  /** Whether the chart has a title. */
2036
2342
  hasTitle?: boolean;
2037
2343
  /** Whether gridlines are visible. */
@@ -2092,6 +2398,14 @@ interface PptxChartOfPieOptions {
2092
2398
  serLines?: boolean;
2093
2399
  gapWidth?: number;
2094
2400
  }
2401
+ /** Classic `c:bubbleChart` options from CT_BubbleChart. */
2402
+ interface PptxBubbleChartOptions {
2403
+ bubble3D?: boolean;
2404
+ /** Bubble diameter scale in percent, constrained to 0 through 300. */
2405
+ bubbleScale?: number;
2406
+ showNegativeBubbles?: boolean;
2407
+ sizeRepresents?: 'area' | 'w';
2408
+ }
2095
2409
  /**
2096
2410
  * 3D viewing parameters for a chart (`c:view3D`, ECMA-376 §21.2.2.228 /
2097
2411
  * CT_View3D).
@@ -2132,6 +2446,27 @@ interface PptxChartChrome {
2132
2446
  dispBlanksAs?: 'gap' | 'zero' | 'span';
2133
2447
  showDLblsOverMax?: boolean;
2134
2448
  }
2449
+ /** Manual chart placement from `c:layout/c:manualLayout` (CT_ManualLayout). */
2450
+ interface PptxChartManualLayout {
2451
+ layoutTarget?: 'inner' | 'outer';
2452
+ xMode?: 'edge' | 'factor';
2453
+ yMode?: 'edge' | 'factor';
2454
+ widthMode?: 'edge' | 'factor';
2455
+ heightMode?: 'edge' | 'factor';
2456
+ x?: number;
2457
+ y?: number;
2458
+ width?: number;
2459
+ height?: number;
2460
+ }
2461
+ /**
2462
+ * Typed manual layouts for chart regions that accept `c:layout`.
2463
+ * A `null` region removes its manual layout without removing extensions.
2464
+ */
2465
+ interface PptxChartLayouts {
2466
+ title?: PptxChartManualLayout | null;
2467
+ plotArea?: PptxChartManualLayout | null;
2468
+ legend?: PptxChartManualLayout | null;
2469
+ }
2135
2470
  /** Parsed data extracted from an embedded xlsx workbook. */
2136
2471
  interface PptxEmbeddedWorkbookData {
2137
2472
  /** Category labels from the first column/row. */
@@ -2141,6 +2476,16 @@ interface PptxEmbeddedWorkbookData {
2141
2476
  name: string;
2142
2477
  values: number[];
2143
2478
  }>;
2479
+ /** Whether the workbook uses the 1904 date system. */
2480
+ date1904?: boolean;
2481
+ }
2482
+ /** Raw numeric category cache used by a classic ChartML date axis. */
2483
+ interface PptxChartDateCategories {
2484
+ values: number[];
2485
+ /** False/default uses Excel's 1900 date system; true uses the 1904 system. */
2486
+ date1904?: boolean;
2487
+ /** Number format copied from the numeric category cache. */
2488
+ formatCode?: string;
2144
2489
  }
2145
2490
  /**
2146
2491
  * Complete parsed chart data for a {@link ChartPptxElement}.
@@ -2164,6 +2509,13 @@ interface PptxChartData {
2164
2509
  title?: string;
2165
2510
  chartType: PptxChartType;
2166
2511
  categories: string[];
2512
+ /**
2513
+ * Hierarchical category levels in source XML order for ChartEx hierarchy charts.
2514
+ * Level 0 contains the leaf labels and remains mirrored by {@link categories}
2515
+ * for consumers that only understand a flat category axis.
2516
+ */
2517
+ categoryLevels?: string[][];
2518
+ dateCategories?: PptxChartDateCategories;
2167
2519
  series: PptxChartSeries[];
2168
2520
  /** Chart style/formatting metadata. */
2169
2521
  style?: PptxChartStyle;
@@ -2173,9 +2525,12 @@ interface PptxChartData {
2173
2525
  chartPartPath?: string;
2174
2526
  /** Internal: relationship ID linking the graphic frame to the chart part. */
2175
2527
  chartRelationshipId?: string;
2176
- dataTable?: PptxChartDataTable;
2528
+ /** `null` explicitly removes an existing ChartML data table. */
2529
+ dataTable?: PptxChartDataTable | null;
2177
2530
  dropLines?: PptxChartLineStyle;
2178
2531
  hiLowLines?: PptxChartLineStyle;
2532
+ /** `null` explicitly removes an existing up/down-bars container. */
2533
+ upDownBars?: PptxChartUpDownBars | null;
2179
2534
  axes?: PptxChartAxisFormatting[];
2180
2535
  floor?: PptxChart3DSurface;
2181
2536
  sideWall?: PptxChart3DSurface;
@@ -2197,12 +2552,7 @@ interface PptxChartData {
2197
2552
  * The chart still renders using its cached series data; this field
2198
2553
  * is metadata about the data origin, preserved for round-trip fidelity.
2199
2554
  */
2200
- pivotSource?: {
2201
- /** Pivot table reference name, e.g. "[workbook.xlsx]Sheet1!PivotTable1". */
2202
- name: string;
2203
- /** Format identifier from c:fmtId/@val. */
2204
- formatId?: number;
2205
- };
2555
+ pivotSource?: PptxChartPivotSource | null;
2206
2556
  /**
2207
2557
  * Whether only visible cells are plotted (c:plotVisOnly).
2208
2558
  * When `true` (the default), hidden cells are excluded from the chart.
@@ -2225,6 +2575,12 @@ interface PptxChartData {
2225
2575
  * - `"acrossLinear"` — gradient across series
2226
2576
  */
2227
2577
  colorMethod?: 'cycle' | 'withinLinear' | 'acrossLinear';
2578
+ /** Internal source color-style part path used for lossless dirty saves. */
2579
+ colorStylePartPath?: string;
2580
+ /** Internal parsed palette snapshot used to detect actual edits. */
2581
+ colorStyleOriginalPalette?: string[];
2582
+ /** Internal parsed method snapshot used to detect actual edits. */
2583
+ colorStyleOriginalMethod?: 'cycle' | 'withinLinear' | 'acrossLinear';
2228
2584
  /**
2229
2585
  * Pie-of-pie / Bar-of-pie options (`c:ofPieChart`, CT_OfPieChart).
2230
2586
  *
@@ -2233,6 +2589,8 @@ interface PptxChartData {
2233
2589
  * `ofPieChart` element can be re-emitted on save with full fidelity.
2234
2590
  */
2235
2591
  ofPieOptions?: PptxChartOfPieOptions;
2592
+ /** Classic bubble-chart display options (`c:bubbleChart`). */
2593
+ bubbleOptions?: PptxBubbleChartOptions;
2236
2594
  /**
2237
2595
  * 3D viewing parameters (`c:view3D`, CT_View3D).
2238
2596
  *
@@ -2248,6 +2606,12 @@ interface PptxChartData {
2248
2606
  * source data, so absence does not produce empty `<c:…/>` placeholders.
2249
2607
  */
2250
2608
  chartChrome?: PptxChartChrome;
2609
+ /** `c:chartSpace/c:printSettings`; `null` removes the container on save. */
2610
+ printSettings?: PptxChartPrintSettings | null;
2611
+ /** `c:chartSpace/c:protection`; `null` removes the container on save. */
2612
+ protection?: PptxChartProtection | null;
2613
+ /** Editable manual placement for the title, plot area, and legend. */
2614
+ layouts?: PptxChartLayouts;
2251
2615
  /**
2252
2616
  * Raw `c:userShapes` XML subtree (a drawing tree) preserved verbatim.
2253
2617
  *
@@ -2264,7 +2628,8 @@ interface PptxChartData {
2264
2628
  * for charts whose data originates from a PivotTable. Preserved
2265
2629
  * verbatim for round-trip fidelity.
2266
2630
  */
2267
- pivotFmtsXml?: unknown;
2631
+ /** Typed pivot-chart format persistence; `null` removes `c:pivotFmts`. */
2632
+ pivotFormats?: PptxChartPivotFormats | null;
2268
2633
  /**
2269
2634
  * Color-map override (`c:clrMapOvr`) carrying 12 attributes that
2270
2635
  * remap theme colour roles for this chart only. Preserved as a flat
@@ -2273,107 +2638,61 @@ interface PptxChartData {
2273
2638
  clrMapOvr?: Record<string, string>;
2274
2639
  }
2275
2640
 
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
2641
  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
2642
  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`. */
2643
+ type EffectDagNode = EffectDagContainer | EffectDagBlend | EffectDagXfrm | EffectDagRelOff | EffectDagBlur | EffectDagAlphaOutset | EffectDagPresetShadow | EffectDagRawLeaf;
2325
2644
  interface EffectDagContainer {
2326
2645
  kind: 'cont';
2327
- /** `@type` — `sib` or `tree`. */
2328
2646
  type: EffectDagContainerType;
2329
- /** Optional `@name` attribute. */
2330
2647
  name?: string;
2331
- /** Ordered children. */
2332
2648
  children: EffectDagNode[];
2333
2649
  }
2334
- /** `a:blend` — CT_BlendEffect. Always wraps a single `a:cont` child. */
2335
2650
  interface EffectDagBlend {
2336
2651
  kind: 'blend';
2337
- /** `@blend` attribute. */
2338
2652
  mode: EffectDagBlendMode;
2339
- /** Required child `a:cont` container. */
2340
2653
  container: EffectDagContainer;
2341
2654
  }
2342
- /** `a:xfrmEffect` — CT_TransformEffect. Affine transform with no children. */
2343
2655
  interface EffectDagXfrm {
2344
2656
  kind: 'xfrmEffect';
2345
- /** Horizontal scale, percentage * 1000 (e.g. 100000 = 100%). */
2346
2657
  sx?: number;
2347
- /** Vertical scale, percentage * 1000. */
2348
2658
  sy?: number;
2349
- /** Horizontal skew, degrees * 60000. */
2350
2659
  kx?: number;
2351
- /** Vertical skew, degrees * 60000. */
2352
2660
  ky?: number;
2353
- /** Horizontal translation in EMU. */
2354
2661
  tx?: number;
2355
- /** Vertical translation in EMU. */
2356
2662
  ty?: number;
2357
2663
  }
2358
- /** `a:relOff` — CT_RelativeOffsetEffect. Relative offset in 1000ths of a percent. */
2359
2664
  interface EffectDagRelOff {
2360
2665
  kind: 'relOff';
2361
- /** Horizontal offset, percentage * 1000. */
2362
2666
  tx?: number;
2363
- /** Vertical offset, percentage * 1000. */
2364
2667
  ty?: number;
2365
2668
  }
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
- */
2669
+ /** Typed CT_BlurEffect with its original payload retained for lossless edits. */
2670
+ interface EffectDagBlur {
2671
+ kind: 'blur';
2672
+ radiusEmu?: number;
2673
+ grow?: boolean;
2674
+ xml: XmlObject;
2675
+ }
2676
+ /** Typed CT_AlphaOutsetEffect with original XML retained for lossless edits. */
2677
+ interface EffectDagAlphaOutset {
2678
+ kind: 'alphaOutset';
2679
+ radiusEmu?: number;
2680
+ xml: XmlObject;
2681
+ }
2682
+ /** Typed CT_PresetShadowEffect with colour and extension XML retained verbatim. */
2683
+ interface EffectDagPresetShadow {
2684
+ kind: 'prstShdw';
2685
+ preset?: `shdw${number}`;
2686
+ distanceEmu?: number;
2687
+ direction?: number;
2688
+ xml: XmlObject;
2689
+ }
2370
2690
  interface EffectDagRawLeaf {
2371
2691
  kind: 'raw';
2372
- /** Local element name without the `a:` prefix (e.g. `outerShdw`, `glow`). */
2373
2692
  tag: string;
2374
- /** Raw XML object captured at load — preserved verbatim on save. */
2375
2693
  xml: Record<string, unknown>;
2376
2694
  }
2695
+
2377
2696
  /**
2378
2697
  * Image recolour/adjustment properties parsed from blip extensions.
2379
2698
  *
@@ -2399,6 +2718,8 @@ interface PptxImageEffects {
2399
2718
  duotone?: {
2400
2719
  color1: string;
2401
2720
  color2: string;
2721
+ /** Original effect XML, retained while the resolved colours are unchanged. */
2722
+ rawXml?: XmlObject;
2402
2723
  };
2403
2724
  /** Grayscale flag. */
2404
2725
  grayscale?: boolean;
@@ -2413,8 +2734,10 @@ interface PptxImageEffects {
2413
2734
  artisticEffect?: string;
2414
2735
  /** Artistic effect radius/amount. */
2415
2736
  artisticRadius?: number;
2416
- /** Alpha modulation fixed overall opacity (0-100, where 100 = fully opaque). */
2737
+ /** Alpha modulation fixed: non-negative percentage (100 means unchanged opacity). */
2417
2738
  alphaModFix?: number;
2739
+ /** Original alpha modulation fixed node, including foreign attributes. */
2740
+ alphaModFixRawXml?: XmlObject;
2418
2741
  /** Bi-level threshold — converts to 1-bit black/white (0-100). */
2419
2742
  biLevel?: number;
2420
2743
  /** Colour change — swap one colour range for another (used for transparency keying). */
@@ -2423,7 +2746,13 @@ interface PptxImageEffects {
2423
2746
  clrTo: string;
2424
2747
  /** Whether the target colour is fully transparent (alpha = 0). */
2425
2748
  clrToTransparent?: boolean;
2749
+ /** Original effect XML, including colour transforms and extensions. */
2750
+ rawXml?: XmlObject;
2426
2751
  };
2752
+ /** Original grayscale node, including extension or foreign attributes. */
2753
+ grayscaleRawXml?: XmlObject;
2754
+ /** Original bi-level node, including extension or foreign attributes. */
2755
+ biLevelRawXml?: XmlObject;
2427
2756
  /**
2428
2757
  * Alpha inverse effect (`a:alphaInv`). Inverts the alpha channel; an optional
2429
2758
  * colour child shifts the inversion baseline.
@@ -2431,11 +2760,17 @@ interface PptxImageEffects {
2431
2760
  alphaInv?: {
2432
2761
  /** Optional baseline colour (hex). */
2433
2762
  color?: string;
2763
+ /** Original effect XML, including colour transforms and foreign attributes. */
2764
+ rawXml?: XmlObject;
2434
2765
  };
2435
2766
  /** Alpha ceiling (`a:alphaCeiling`) — clamps any non-zero alpha to fully opaque. Boolean flag. */
2436
2767
  alphaCeiling?: boolean;
2768
+ /** Original alpha ceiling node, including foreign attributes. */
2769
+ alphaCeilingRawXml?: XmlObject;
2437
2770
  /** Alpha floor (`a:alphaFloor`) — clamps any non-fully-opaque alpha to fully transparent. Boolean flag. */
2438
2771
  alphaFloor?: boolean;
2772
+ /** Original alpha floor node, including foreign attributes. */
2773
+ alphaFloorRawXml?: XmlObject;
2439
2774
  /**
2440
2775
  * Alpha modulate (`a:alphaMod`). The schema requires a single `cont` (effect
2441
2776
  * container) child; we preserve the inner XML opaquely for round-trip.
@@ -2443,11 +2778,17 @@ interface PptxImageEffects {
2443
2778
  alphaMod?: {
2444
2779
  /** Raw opaque XML for the `a:cont` child to preserve on save. */
2445
2780
  contRawXml?: Record<string, unknown>;
2781
+ /** Original effect XML, including foreign attributes. */
2782
+ rawXml?: XmlObject;
2446
2783
  };
2447
2784
  /** Alpha replace (`a:alphaRepl`) — replaces alpha with the given fixed-percent value (0..100). */
2448
2785
  alphaRepl?: number;
2786
+ /** Original alpha replace node, including foreign attributes. */
2787
+ alphaReplRawXml?: XmlObject;
2449
2788
  /** Alpha bi-level (`a:alphaBiLevel`) — threshold (0..100) above which alpha becomes fully opaque. */
2450
2789
  alphaBiLevel?: number;
2790
+ /** Original alpha bi-level node, including foreign attributes. */
2791
+ alphaBiLevelRawXml?: XmlObject;
2451
2792
  /**
2452
2793
  * Colour replace (`a:clrRepl`) — replaces all colour information in an image
2453
2794
  * with the given solid colour. Stores the raw colour child to preserve scheme
@@ -2590,6 +2931,7 @@ declare module "./hooks-unstable" {
2590
2931
  *
2591
2932
  * @module pptx-types/media
2592
2933
  */
2934
+
2593
2935
  /**
2594
2936
  * Discriminator for embedded media element types.
2595
2937
  *
@@ -2600,6 +2942,13 @@ declare module "./hooks-unstable" {
2600
2942
  * ```
2601
2943
  */
2602
2944
  type PptxMediaType = 'video' | 'audio' | 'unknown';
2945
+ type PptxMediaReferenceKind = 'audioCd' | 'wavAudioFile' | 'audioFile' | 'videoFile' | 'quickTimeFile';
2946
+ interface PptxAudioCdPosition {
2947
+ track: number;
2948
+ time?: number;
2949
+ /** Original `st` or `end` node, retained for lossless edits. */
2950
+ rawXml?: XmlObject;
2951
+ }
2603
2952
  /**
2604
2953
  * A named bookmark within a media clip timeline.
2605
2954
  *
@@ -2676,6 +3025,112 @@ interface MediaCaptionTrack {
2676
3025
  isDefault?: boolean;
2677
3026
  }
2678
3027
 
3028
+ type PptxSmartArtConstraintRelationship = 'self' | 'ch' | 'des';
3029
+ type PptxSmartArtConstraintOperator = 'none' | 'equ' | 'gte' | 'lte';
3030
+ type PptxSmartArtConstraintPointType = 'all' | 'doc' | 'node' | 'norm' | 'nonNorm' | 'asst' | 'nonAsst' | 'parTrans' | 'pres' | 'sibTrans';
3031
+ interface PptxSmartArtConstraintTarget {
3032
+ for?: PptxSmartArtConstraintRelationship;
3033
+ forName?: string;
3034
+ pointType?: PptxSmartArtConstraintPointType;
3035
+ }
3036
+ /** Editable DiagramML CT_Constraint. */
3037
+ interface PptxSmartArtConstraint extends PptxSmartArtConstraintTarget {
3038
+ type: string;
3039
+ referenceType?: string;
3040
+ referenceFor?: PptxSmartArtConstraintRelationship;
3041
+ referenceForName?: string;
3042
+ referencePointType?: PptxSmartArtConstraintPointType;
3043
+ operator?: PptxSmartArtConstraintOperator;
3044
+ value?: number;
3045
+ factor?: number;
3046
+ /** Original constraint retained for foreign attributes and extension content. */
3047
+ rawXml?: XmlObject;
3048
+ }
3049
+ /** Editable DiagramML CT_NumericRule. */
3050
+ interface PptxSmartArtNumericRule extends PptxSmartArtConstraintTarget {
3051
+ type: string;
3052
+ value?: number;
3053
+ factor?: number;
3054
+ max?: number;
3055
+ /** Original rule retained for foreign attributes and extension content. */
3056
+ rawXml?: XmlObject;
3057
+ }
3058
+
3059
+ /** Typed, editable metadata from a DiagramML layout-definition part. */
3060
+
3061
+ interface PptxSmartArtLocalizedText {
3062
+ value: string;
3063
+ language?: string;
3064
+ }
3065
+ interface PptxSmartArtLayoutCategory {
3066
+ type: string;
3067
+ priority: number;
3068
+ }
3069
+ interface PptxSmartArtAlgorithmParameter {
3070
+ type: string;
3071
+ value?: string;
3072
+ }
3073
+ /** Typed DiagramML CT_Algorithm data attached to a layout node. */
3074
+ interface PptxSmartArtLayoutAlgorithm {
3075
+ type: string;
3076
+ revision?: number;
3077
+ parameters?: PptxSmartArtAlgorithmParameter[];
3078
+ }
3079
+ interface PptxSmartArtIteratorAttributes {
3080
+ name?: string;
3081
+ reference?: string;
3082
+ axis?: string[];
3083
+ pointTypes?: string[];
3084
+ hideLastTransition?: boolean[];
3085
+ start?: number[];
3086
+ count?: number[];
3087
+ step?: number[];
3088
+ }
3089
+ interface PptxSmartArtForEach extends PptxSmartArtIteratorAttributes {
3090
+ rawXml?: XmlObject;
3091
+ }
3092
+ interface PptxSmartArtWhen extends PptxSmartArtIteratorAttributes {
3093
+ function: string;
3094
+ argument?: string;
3095
+ operator: string;
3096
+ value: string;
3097
+ rawXml?: XmlObject;
3098
+ }
3099
+ interface PptxSmartArtChoose {
3100
+ name?: string;
3101
+ when: PptxSmartArtWhen[];
3102
+ otherwise?: {
3103
+ name?: string;
3104
+ rawXml?: XmlObject;
3105
+ } | null;
3106
+ rawXml?: XmlObject;
3107
+ }
3108
+ /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3109
+ interface PptxSmartArtLayoutNode {
3110
+ name?: string;
3111
+ styleLabel?: string;
3112
+ childOrder?: 'b' | 't';
3113
+ moveWith?: string;
3114
+ algorithm?: PptxSmartArtLayoutAlgorithm;
3115
+ forEach?: PptxSmartArtForEach[];
3116
+ choose?: PptxSmartArtChoose[];
3117
+ constraints?: PptxSmartArtConstraint[];
3118
+ rules?: PptxSmartArtNumericRule[];
3119
+ children?: PptxSmartArtLayoutNode[];
3120
+ }
3121
+ /** Metadata and root node from DiagramML CT_DiagramDefinition. */
3122
+ interface PptxSmartArtLayoutDefinition {
3123
+ uniqueId?: string;
3124
+ minimumVersion?: string;
3125
+ defaultStyle?: string;
3126
+ titles?: PptxSmartArtLocalizedText[];
3127
+ descriptions?: PptxSmartArtLocalizedText[];
3128
+ categories?: PptxSmartArtLayoutCategory[];
3129
+ rootNode: PptxSmartArtLayoutNode;
3130
+ /** Original definition retained for constraint evaluation and foreign rules. */
3131
+ rawXml?: XmlObject;
3132
+ }
3133
+
2679
3134
  /**
2680
3135
  * SmartArt node types: per-run text, per-node visual override, and the
2681
3136
  * data-model node itself. Split out of `smart-art.ts` to keep each type file
@@ -2685,6 +3140,7 @@ interface MediaCaptionTrack {
2685
3140
  *
2686
3141
  * @module pptx-types/smart-art-node
2687
3142
  */
3143
+
2688
3144
  /**
2689
3145
  * A single run of text inside a SmartArt node, capturing the run text and the
2690
3146
  * raw `a:rPr` run-properties object verbatim so per-run formatting (bold,
@@ -2708,6 +3164,54 @@ interface PptxSmartArtTextRun {
2708
3164
  * round-trip. Untyped XML, hence the loose record shape.
2709
3165
  */
2710
3166
  rPr?: Record<string, unknown>;
3167
+ /** Resolved standard shape-text style derived from {@link rPr}. */
3168
+ style?: TextStyle;
3169
+ /** Raw run XML used to retain unmodelled extension children on save. */
3170
+ rawXml?: Record<string, unknown>;
3171
+ /** Original direct-child order, including unmodelled extension children. */
3172
+ childOrder?: string[];
3173
+ }
3174
+ /** An ordered item within a SmartArt text paragraph. */
3175
+ type PptxSmartArtTextParagraphItem = {
3176
+ kind: 'run';
3177
+ run: PptxSmartArtTextRun;
3178
+ } | {
3179
+ kind: 'break';
3180
+ rPr?: Record<string, unknown>;
3181
+ style?: TextStyle;
3182
+ rawXml?: Record<string, unknown>;
3183
+ childOrder?: string[];
3184
+ } | {
3185
+ kind: 'field';
3186
+ id?: string;
3187
+ fieldType?: string;
3188
+ text: string;
3189
+ rPr?: Record<string, unknown>;
3190
+ style?: TextStyle;
3191
+ pPr?: Record<string, unknown>;
3192
+ rawXml?: Record<string, unknown>;
3193
+ childOrder?: string[];
3194
+ } | {
3195
+ kind: 'tab';
3196
+ rawXml?: Record<string, unknown>;
3197
+ childOrder?: string[];
3198
+ } | {
3199
+ kind: 'raw';
3200
+ name: string;
3201
+ value: unknown;
3202
+ };
3203
+ /** A complete `a:p` paragraph in a SmartArt data-model text body. */
3204
+ interface PptxSmartArtTextParagraph {
3205
+ /** Paragraph properties (`a:pPr`) preserved verbatim. */
3206
+ pPr?: Record<string, unknown>;
3207
+ /** Text children in source order. */
3208
+ items: PptxSmartArtTextParagraphItem[];
3209
+ /** End-paragraph run properties (`a:endParaRPr`) preserved verbatim. */
3210
+ endParaRPr?: Record<string, unknown>;
3211
+ /** Resolved style for the paragraph terminator. */
3212
+ endParaStyle?: TextStyle;
3213
+ /** Raw paragraph XML used to retain unmodelled extension children on save. */
3214
+ rawXml?: Record<string, unknown>;
2711
3215
  }
2712
3216
  /**
2713
3217
  * Per-node visual override for a SmartArt node.
@@ -2763,6 +3267,8 @@ interface PptxSmartArtNodeStyle {
2763
3267
  interface PptxSmartArtNode {
2764
3268
  id: string;
2765
3269
  text: string;
3270
+ /** CT_Pt connection identifier, when the point references a connection. */
3271
+ connectionId?: string | null;
2766
3272
  parentId?: string;
2767
3273
  children?: PptxSmartArtNode[];
2768
3274
  /** Node type from `@_type` attribute (e.g. "doc", "node", "asst", "pres"). */
@@ -2775,6 +3281,11 @@ interface PptxSmartArtNode {
2775
3281
  * is not flattened. When {@link text} diverges, the runs are ignored.
2776
3282
  */
2777
3283
  runs?: PptxSmartArtTextRun[];
3284
+ /**
3285
+ * Complete typed paragraph model. Unlike {@link runs}, this retains every
3286
+ * paragraph and the ordered run, field, break, and tab children within it.
3287
+ */
3288
+ paragraphs?: PptxSmartArtTextParagraph[];
2778
3289
  /**
2779
3290
  * Optional per-node visual override (fill / line / font colour, bold /
2780
3291
  * italic). Read at parse time from the point's `spPr` / first-run `rPr`, set
@@ -2784,6 +3295,64 @@ interface PptxSmartArtNode {
2784
3295
  style?: PptxSmartArtNodeStyle;
2785
3296
  }
2786
3297
 
3298
+ /** Editable metadata shared by DiagramML quick-style and color definitions. */
3299
+ interface PptxSmartArtDefinitionText {
3300
+ value: string;
3301
+ language?: string;
3302
+ }
3303
+ interface PptxSmartArtDefinitionCategory {
3304
+ type: string;
3305
+ priority: number;
3306
+ }
3307
+ type PptxSmartArtColorApplicationMethod = 'span' | 'cycle' | 'repeat';
3308
+ type PptxSmartArtHueDirection = 'cw' | 'ccw';
3309
+ /** CT_Colors application metadata. Color-choice children remain preserved XML. */
3310
+ interface PptxSmartArtColorListMetadata {
3311
+ method?: PptxSmartArtColorApplicationMethod;
3312
+ hueDirection?: PptxSmartArtHueDirection;
3313
+ }
3314
+ /** CT_StyleLabel metadata from a quick-style definition. */
3315
+ interface PptxSmartArtQuickStyleLabel {
3316
+ name: string;
3317
+ }
3318
+ /** CT_CTStyleLabel metadata from a color-transform definition. */
3319
+ interface PptxSmartArtColorStyleLabel {
3320
+ name: string;
3321
+ fill?: PptxSmartArtColorListMetadata;
3322
+ line?: PptxSmartArtColorListMetadata;
3323
+ effect?: PptxSmartArtColorListMetadata;
3324
+ textLine?: PptxSmartArtColorListMetadata;
3325
+ textFill?: PptxSmartArtColorListMetadata;
3326
+ textEffect?: PptxSmartArtColorListMetadata;
3327
+ }
3328
+ interface PptxSmartArtDefinitionMetadata {
3329
+ uniqueId?: string;
3330
+ minimumVersion?: string;
3331
+ titles?: PptxSmartArtDefinitionText[];
3332
+ descriptions?: PptxSmartArtDefinitionText[];
3333
+ categories?: PptxSmartArtDefinitionCategory[];
3334
+ }
3335
+ /** Typed CT_ColorTransform metadata and the resolved legacy color palette. */
3336
+ interface PptxSmartArtColorTransform extends PptxSmartArtDefinitionMetadata {
3337
+ /** Legacy resolved display name. */
3338
+ name?: string;
3339
+ /** Ordered resolved fill colors for rendering. */
3340
+ fillColors: string[];
3341
+ /** Ordered resolved line colors for rendering. */
3342
+ lineColors: string[];
3343
+ /** Ordered CT_CTStyleLabel metadata. */
3344
+ labels?: PptxSmartArtColorStyleLabel[];
3345
+ }
3346
+ /** Typed CT_StyleDefinition metadata and legacy rendering hint. */
3347
+ interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
3348
+ /** Legacy resolved display name. */
3349
+ name?: string;
3350
+ /** Legacy effect-intensity rendering hint. */
3351
+ effectIntensity?: string;
3352
+ /** Ordered CT_StyleLabel metadata. Complex style payload remains preserved XML. */
3353
+ labels?: PptxSmartArtQuickStyleLabel[];
3354
+ }
3355
+
2787
3356
  /**
2788
3357
  * SmartArt types: layout categories, layout presets, colour schemes,
2789
3358
  * data-model nodes/connections, drawing shapes, chrome, and the composite
@@ -2846,6 +3415,8 @@ type SmartArtStyle = 'flat' | 'moderate' | 'intense';
2846
3415
  * ```
2847
3416
  */
2848
3417
  interface PptxSmartArtConnection {
3418
+ /** Stable CT_Cxn model identifier. Required when serialized. */
3419
+ modelId?: string | null;
2849
3420
  /** Model ID of the source node. */
2850
3421
  sourceId: string;
2851
3422
  /** Model ID of the destination node. */
@@ -2856,6 +3427,12 @@ interface PptxSmartArtConnection {
2856
3427
  srcOrd?: number;
2857
3428
  /** Destination index for ordering. */
2858
3429
  destOrd?: number;
3430
+ /** Model ID of the parent transition point associated with this edge. */
3431
+ parentTransitionId?: string | null;
3432
+ /** Model ID of the sibling transition point associated with this edge. */
3433
+ siblingTransitionId?: string | null;
3434
+ /** Layout presentation identifier used by presentation connections. */
3435
+ presentationId?: string | null;
2859
3436
  }
2860
3437
  /**
2861
3438
  * A pre-computed shape from `ppt/diagrams/drawing*.xml`.
@@ -2872,7 +3449,7 @@ interface PptxSmartArtConnection {
2872
3449
  * // => satisfies PptxSmartArtDrawingShape
2873
3450
  * ```
2874
3451
  */
2875
- interface PptxSmartArtDrawingShape {
3452
+ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
2876
3453
  /** Shape ID within the drawing. */
2877
3454
  id: string;
2878
3455
  /** Preset geometry type (e.g. "roundRect", "ellipse"). */
@@ -2896,6 +3473,8 @@ interface PptxSmartArtDrawingShape {
2896
3473
  strokeWidth?: number;
2897
3474
  /** Text content of the shape. */
2898
3475
  text?: string;
3476
+ /** Standard rich-text segments projected from the associated SmartArt node. */
3477
+ textSegments?: TextSegment[];
2899
3478
  /** Font size in points. */
2900
3479
  fontSize?: number;
2901
3480
  /** Font colour (hex). */
@@ -2922,45 +3501,6 @@ interface PptxSmartArtChrome {
2922
3501
  /** Outline stroke width in points. */
2923
3502
  outlineWidth?: number;
2924
3503
  }
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
3504
  /**
2965
3505
  * Complete parsed SmartArt data for a {@link SmartArtPptxElement}.
2966
3506
  *
@@ -3000,14 +3540,28 @@ interface PptxSmartArtData {
3000
3540
  colorTransform?: PptxSmartArtColorTransform;
3001
3541
  /** Quick style from `ppt/diagrams/quickStyles*.xml`. */
3002
3542
  quickStyle?: PptxSmartArtQuickStyle;
3543
+ /** Editable metadata from the related DiagramML layout definition. */
3544
+ layoutDefinition?: PptxSmartArtLayoutDefinition;
3003
3545
  /** Relationship ID for the diagram data part (for round-trip save). */
3004
3546
  dataRelId?: string;
3547
+ /** Relationship ID for the diagram layout part. */
3548
+ layoutRelId?: string;
3005
3549
  /** Relationship ID for the drawing part. */
3006
3550
  drawingRelId?: string;
3007
3551
  /** Relationship ID for the colours part. */
3008
3552
  colorsRelId?: string;
3009
3553
  /** Relationship ID for the quick-styles part. */
3010
3554
  styleRelId?: string;
3555
+ /** Internal save hint: the layout definition changed in the editor. */
3556
+ layoutDirty?: boolean;
3557
+ /** Internal save hint: typed layout-definition metadata changed. */
3558
+ layoutDefinitionDirty?: boolean;
3559
+ /** Internal save hint: quick-style definition metadata changed. */
3560
+ quickStyleDirty?: boolean;
3561
+ /** Internal save hint: color-transform definition metadata changed. */
3562
+ colorTransformDirty?: boolean;
3563
+ /** Internal save hint: cached drawing geometry or text changed in the editor. */
3564
+ drawingDirty?: boolean;
3011
3565
  }
3012
3566
 
3013
3567
  /**
@@ -3616,6 +4170,13 @@ interface MediaPptxElement extends PptxElementBase {
3616
4170
  mediaPath?: string;
3617
4171
  mediaData?: string;
3618
4172
  mediaMimeType?: string;
4173
+ mediaReferenceKind?: PptxMediaReferenceKind;
4174
+ mediaReferenceName?: string;
4175
+ /** Explicit DrawingML `audioFile/@contentType` value when present. */
4176
+ mediaReferenceContentType?: string;
4177
+ audioCdStart?: PptxAudioCdPosition;
4178
+ audioCdEnd?: PptxAudioCdPosition;
4179
+ rawMediaReferenceXml?: XmlObject;
3619
4180
  /** Trim start in milliseconds (from p:cMediaNode p:cTn @st). */
3620
4181
  trimStartMs?: number;
3621
4182
  /** Trim end in milliseconds (from p:cMediaNode p:cTn @end). */
@@ -3736,6 +4297,10 @@ interface ContentPartPptxElement extends PptxElementBase {
3736
4297
  type: 'contentPart';
3737
4298
  /** Ink strokes contained in this content part. */
3738
4299
  inkStrokes?: ContentPartInkStroke[];
4300
+ /** Package path of the related InkML part. */
4301
+ inkPartPath?: string;
4302
+ /** Parsed InkML root retained for unknown-node preservation on dirty save. */
4303
+ inkPartRawXml?: XmlObject;
3739
4304
  }
3740
4305
  /**
3741
4306
  * A Slide Zoom or Section Zoom element (PowerPoint Zoom Object).
@@ -3756,12 +4321,32 @@ interface ContentPartPptxElement extends PptxElementBase {
3756
4321
  */
3757
4322
  interface ZoomPptxElement extends PptxElementBase, PptxImageProperties {
3758
4323
  type: 'zoom';
3759
- /** Type of zoom: slide-level or section-level. */
3760
- zoomType: 'slide' | 'section';
4324
+ /** Type of zoom: slide-level, section-level, or a multi-section summary. */
4325
+ zoomType: 'slide' | 'section' | 'summary';
3761
4326
  /** Zero-based index of the target slide. */
3762
4327
  targetSlideIndex: number;
3763
4328
  /** Section ID for section zoom. */
3764
4329
  targetSectionId?: string;
4330
+ /** Ordered section tiles in a Summary Zoom container. */
4331
+ summaryTargets?: SummaryZoomTarget[];
4332
+ /** Layout mode authored on the Summary Zoom container. */
4333
+ summaryLayout?: 'grid' | 'fixed';
4334
+ }
4335
+ /** A single section tile within a PowerPoint Summary Zoom container. */
4336
+ interface SummaryZoomTarget extends PptxImageProperties {
4337
+ sectionId: string;
4338
+ targetSlideIndex: number;
4339
+ x: number;
4340
+ y: number;
4341
+ width: number;
4342
+ height: number;
4343
+ title?: string;
4344
+ description?: string;
4345
+ offsetFactorX?: number;
4346
+ offsetFactorY?: number;
4347
+ scaleFactorX?: number;
4348
+ scaleFactorY?: number;
4349
+ rawXml?: XmlObject;
3765
4350
  }
3766
4351
  /**
3767
4352
  * A 3D model object embedded via `p16:model3D` inside an
@@ -4050,6 +4635,44 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
4050
4635
  * is preserved alongside other animations.
4051
4636
  */
4052
4637
  type PptxNativeAnimationKind = 'media';
4638
+ /** A target selected by `p:tgtEl` in the PresentationML timing model. */
4639
+ type PptxAnimationTarget = {
4640
+ type: 'shape';
4641
+ shapeId: string;
4642
+ rawXml?: XmlObject;
4643
+ } | {
4644
+ type: 'slide';
4645
+ rawXml?: XmlObject;
4646
+ } | {
4647
+ type: 'sound';
4648
+ relationshipId: string;
4649
+ name?: string;
4650
+ rawXml?: XmlObject;
4651
+ } | {
4652
+ type: 'ink';
4653
+ shapeId: string;
4654
+ rawXml?: XmlObject;
4655
+ } | {
4656
+ type: 'unknown';
4657
+ rawXml: XmlObject;
4658
+ };
4659
+ /** Nested build choice carried by `p:bldGraphic`. */
4660
+ type PptxGraphicBuild = {
4661
+ mode: 'asOne';
4662
+ rawXml?: XmlObject;
4663
+ } | {
4664
+ mode: 'sub';
4665
+ kind: 'diagram';
4666
+ build: string;
4667
+ reverse: boolean;
4668
+ rawXml?: XmlObject;
4669
+ } | {
4670
+ mode: 'sub';
4671
+ kind: 'chart';
4672
+ build: string;
4673
+ animateBackground: boolean;
4674
+ rawXml?: XmlObject;
4675
+ };
4053
4676
  /**
4054
4677
  * Parsed native animation record from `p:timing / p:tnLst`.
4055
4678
  *
@@ -4071,6 +4694,8 @@ type PptxNativeAnimationKind = 'media';
4071
4694
  interface PptxNativeAnimation {
4072
4695
  /** Target element/shape ID. */
4073
4696
  targetId?: string;
4697
+ /** Full timing target, including sound and ink target variants. */
4698
+ target?: PptxAnimationTarget;
4074
4699
  /** Trigger type. */
4075
4700
  trigger?: PptxAnimationTrigger;
4076
4701
  /** Shape ID that triggers this animation when clicked (interactive sequence). */
@@ -4175,6 +4800,8 @@ interface PptxNativeAnimation {
4175
4800
  * that aren't OLE charts).
4176
4801
  */
4177
4802
  graphicBuild?: string;
4803
+ /** Schema-accurate `p:bldGraphic/p:bldAsOne|p:bldSub` representation. */
4804
+ graphicBuildProperties?: PptxGraphicBuild;
4178
4805
  /**
4179
4806
  * Opaque map of `p:cTn` attributes that don't have a typed home on this
4180
4807
  * interface but must round-trip through parse → save. Keys are stored
@@ -4291,6 +4918,8 @@ interface AnimationCondition {
4291
4918
  targetShapeId?: string;
4292
4919
  /** Whether the condition targets a slide (from `p:tgtEl/p:sldTgt`). */
4293
4920
  targetSlide?: boolean;
4921
+ /** Full target choice, including `p:sndTgt` and `p:inkTgt`. */
4922
+ target?: PptxAnimationTarget;
4294
4923
  }
4295
4924
  /** Iteration configuration from `p:iterate`. */
4296
4925
  interface PptxAnimationIterate {
@@ -4369,12 +4998,40 @@ interface PptxElementAnimation {
4369
4998
  stopSound?: boolean;
4370
4999
  }
4371
5000
 
5001
+ interface PptxEmbeddedFontDataId {
5002
+ /** Required relationship identifier from `r:id`. */
5003
+ relationshipId?: string | null;
5004
+ /** Original leaf retained for unknown attribute preservation. */
5005
+ rawXml?: XmlObject;
5006
+ }
5007
+ interface PptxEmbeddedFontDescriptor {
5008
+ typeface?: string | null;
5009
+ panose?: string | null;
5010
+ pitchFamily?: string | null;
5011
+ charset?: string | null;
5012
+ rawXml?: XmlObject;
5013
+ }
5014
+ interface PptxEmbeddedFontListEntry {
5015
+ font: PptxEmbeddedFontDescriptor;
5016
+ regular?: PptxEmbeddedFontDataId | null;
5017
+ bold?: PptxEmbeddedFontDataId | null;
5018
+ italic?: PptxEmbeddedFontDataId | null;
5019
+ boldItalic?: PptxEmbeddedFontDataId | null;
5020
+ rawXml?: XmlObject;
5021
+ }
5022
+ interface PptxEmbeddedFontList {
5023
+ fonts: PptxEmbeddedFontListEntry[];
5024
+ /** Original list retained for unknown attribute and child preservation. */
5025
+ rawXml?: XmlObject;
5026
+ }
5027
+
4372
5028
  /**
4373
5029
  * Metadata types: slide comments, compatibility warnings, tags,
4374
5030
  * custom properties, core/app document properties.
4375
5031
  *
4376
5032
  * @module pptx-types/metadata
4377
5033
  */
5034
+
4378
5035
  /**
4379
5036
  * A slide comment — may be a legacy positional comment or a modern
4380
5037
  * threaded comment with replies.
@@ -4394,6 +5051,10 @@ interface PptxElementAnimation {
4394
5051
  interface PptxComment {
4395
5052
  id: string;
4396
5053
  text: string;
5054
+ /** Storage vocabulary used by this comment. Omitted means legacy PresentationML. */
5055
+ format?: 'legacy' | 'modern';
5056
+ /** Stable GUID author identifier used by Office 2021 modern comments. */
5057
+ authorId?: string;
4397
5058
  /** Optional parent comment id for reply threading metadata. */
4398
5059
  parentId?: string;
4399
5060
  author?: string;
@@ -4402,12 +5063,35 @@ interface PptxComment {
4402
5063
  y?: number;
4403
5064
  /** Whether this comment has been resolved/marked done. */
4404
5065
  resolved?: boolean;
5066
+ /** Native p188 status token. */
5067
+ status?: 'active' | 'resolved' | 'closed';
5068
+ /** Modern comment classification tags and author IDs that liked the comment. */
5069
+ tags?: string[];
5070
+ likes?: string[];
5071
+ startDate?: string;
5072
+ dueDate?: string;
5073
+ assignedTo?: string[];
5074
+ /** Task completion in thousandths of a percent, from 0 through 100000. */
5075
+ complete?: number;
5076
+ priority?: number;
5077
+ title?: string;
4405
5078
  /** Modern threaded comment support (p15:threadingInfo). */
4406
5079
  threadId?: string;
4407
5080
  /** Replies to this comment (for modern threaded comments). */
4408
5081
  replies?: PptxComment[];
4409
5082
  /** ID of the element this comment is associated with (if any). */
4410
5083
  elementId?: string;
5084
+ /** Original `p:cm` subtree, retained for unknown child and extension preservation. */
5085
+ rawXml?: XmlObject;
5086
+ }
5087
+ /** Office 2021 comment author from the p188 Author part. */
5088
+ interface PptxModernCommentAuthor {
5089
+ id: string;
5090
+ name: string;
5091
+ initials?: string;
5092
+ userId: string;
5093
+ providerId: string;
5094
+ rawXml?: XmlObject;
4411
5095
  }
4412
5096
  /**
4413
5097
  * A comment author from `ppt/commentAuthors.xml`.
@@ -4440,6 +5124,8 @@ interface PptxCommentAuthor {
4440
5124
  lastIdx: number;
4441
5125
  /** Colour index assigned to this author (`@_clrIdx`). */
4442
5126
  clrIdx: number;
5127
+ /** Original `p:cmAuthor` subtree, retained for unknown attribute preservation. */
5128
+ rawXml?: XmlObject;
4443
5129
  }
4444
5130
  /**
4445
5131
  * A compatibility warning generated during parse or save when the
@@ -4494,9 +5180,17 @@ interface PptxTag {
4494
5180
  */
4495
5181
  interface PptxTagCollection {
4496
5182
  /** File path within the PPTX archive. */
4497
- path: string;
5183
+ path?: string;
5184
+ /** Package owner of the tags relationship. New collections default to presentation. */
5185
+ owner?: 'presentation' | 'slide' | 'part';
5186
+ /** Source OPC part that owns the relationship, e.g. ppt/slides/slide1.xml. */
5187
+ sourcePartPath?: string;
5188
+ /** Durable relationship identifier from the owning part. */
5189
+ relationshipId?: string;
4498
5190
  /** Tags in this collection. */
4499
5191
  tags: PptxTag[];
5192
+ /** Parsed tag-list XML retained for unknown-node preservation. */
5193
+ rawXml?: XmlObject;
4500
5194
  }
4501
5195
  /**
4502
5196
  * A custom document property from `docProps/custom.xml`.
@@ -4601,6 +5295,19 @@ interface PptxAppProperties {
4601
5295
  /** Hyperlink base URL. */
4602
5296
  hyperlinkBase?: string;
4603
5297
  }
5298
+
5299
+ type PptxPrintOutput = 'slides' | 'handouts1' | 'handouts2' | 'handouts3' | 'handouts4' | 'handouts6' | 'handouts9' | 'notes' | 'outline';
5300
+ type PptxPrintColorMode = 'bw' | 'gray' | 'clr';
5301
+ /** PresentationML `CT_PrintProperties` (`p:prnPr`). */
5302
+ interface PptxPresentationPrintProperties {
5303
+ printWhat?: PptxPrintOutput | null;
5304
+ colorMode?: PptxPrintColorMode | null;
5305
+ hiddenSlides?: boolean | null;
5306
+ scaleToFitPaper?: boolean | null;
5307
+ frameSlides?: boolean | null;
5308
+ /** Original subtree retained for unknown attributes and `p:extLst`. */
5309
+ rawXml?: XmlObject;
5310
+ }
4604
5311
  /**
4605
5312
  * Resolved hex values for the 12 theme colour slots.
4606
5313
  *
@@ -4887,6 +5594,8 @@ interface PptxTheme {
4887
5594
  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
5595
  /** Split orientation from OOXML `@_orient`. */
4889
5596
  type PptxSplitOrientation = 'horz' | 'vert';
5597
+ /** Schema-defined `ST_TransitionSpeed` values. */
5598
+ type PptxTransitionSpeed = 'slow' | 'med' | 'fast';
4890
5599
  /**
4891
5600
  * Slide transition configuration.
4892
5601
  *
@@ -4903,6 +5612,8 @@ type PptxSplitOrientation = 'horz' | 'vert';
4903
5612
  */
4904
5613
  interface PptxSlideTransition {
4905
5614
  type: PptxTransitionType;
5615
+ /** Schema-defined transition speed. Defaults to `fast` when omitted. */
5616
+ speed?: PptxTransitionSpeed;
4906
5617
  durationMs?: number;
4907
5618
  direction?: string;
4908
5619
  advanceOnClick?: boolean;
@@ -4917,6 +5628,10 @@ interface PptxSlideTransition {
4917
5628
  orient?: PptxSplitOrientation;
4918
5629
  /** Relationship ID of transition sound from `p:sndAc/p:stSnd/@r:embed` when present. */
4919
5630
  soundRId?: string;
5631
+ /** Embedded WAV display name from `p:stSnd/p:snd/@name`. */
5632
+ soundName?: string;
5633
+ /** Whether the transition sound repeats until another sound starts. */
5634
+ soundLoop?: boolean;
4920
5635
  /** Resolved transition sound media path within the package. */
4921
5636
  soundPath?: string;
4922
5637
  /** Human-readable sound file name (extracted from soundPath). */
@@ -4930,6 +5645,8 @@ interface PptxSlideTransition {
4930
5645
  rawSoundAction?: XmlObject;
4931
5646
  /** Preserved extension-list XML node from `p:extLst` within the transition for lossless round-trip. */
4932
5647
  rawExtLst?: XmlObject;
5648
+ /** Original transition node, retained to preserve unknown attributes and children. */
5649
+ rawTransition?: XmlObject;
4933
5650
  }
4934
5651
 
4935
5652
  /**
@@ -4949,6 +5666,11 @@ interface PptxViewScale {
4949
5666
  n: number;
4950
5667
  /** Denominator of the scale percentage (e.g. 100 for 100%). */
4951
5668
  d: number;
5669
+ /** Optional independent vertical scale. When absent, the X scale is used. */
5670
+ sy?: {
5671
+ n: number;
5672
+ d: number;
5673
+ };
4952
5674
  }
4953
5675
  /**
4954
5676
  * Origin point for a view (x, y in twips or EMU).
@@ -4957,6 +5679,16 @@ interface PptxViewOrigin {
4957
5679
  x: number;
4958
5680
  y: number;
4959
5681
  }
5682
+ /** A horizontal or vertical drawing guide in slide coordinates. */
5683
+ interface PptxViewGuide {
5684
+ orientation?: 'horz' | 'vert';
5685
+ position?: number;
5686
+ }
5687
+ /** Positive grid spacing from `p:gridSpacing`. */
5688
+ interface PptxGridSpacing {
5689
+ cx: number;
5690
+ cy: number;
5691
+ }
4960
5692
  /**
4961
5693
  * Restored region dimensions for normal view splitter.
4962
5694
  * Represents `p:restoredLeft` or `p:restoredTop`.
@@ -4998,6 +5730,10 @@ interface PptxCommonSlideViewProperties {
4998
5730
  snapToObjects?: boolean;
4999
5731
  /** Whether drawing guides are shown. */
5000
5732
  showGuides?: boolean;
5733
+ /** Whether the application may vary the scale automatically. */
5734
+ variableScale?: boolean;
5735
+ /** Drawing guides shown in this slide view. */
5736
+ guides?: PptxViewGuide[];
5001
5737
  /** View origin (scroll position). */
5002
5738
  origin?: PptxViewOrigin;
5003
5739
  /** View scale. */
@@ -5025,6 +5761,8 @@ interface PptxViewProperties {
5025
5761
  };
5026
5762
  /** Notes view properties. */
5027
5763
  notesViewPr?: PptxCommonSlideViewProperties;
5764
+ /** Grid spacing in positive DrawingML coordinates. */
5765
+ gridSpacing?: PptxGridSpacing;
5028
5766
  /** Raw XML preserved for lossless round-trip of unparsed attributes. */
5029
5767
  rawXml?: Record<string, unknown>;
5030
5768
  }
@@ -5039,12 +5777,16 @@ interface PptxViewProperties {
5039
5777
  * @see ECMA-376 Part 1, §19.2.1.3 (custDataLst), §19.3.1.6 (custData)
5040
5778
  */
5041
5779
  interface PptxCustomerData {
5042
- /** Resolved part path inside the package (e.g. `ppt/customerData/item1.xml`). */
5043
- id: string;
5780
+ /** Resolved part path inside the package (e.g. `customXml/item1.xml`). */
5781
+ id?: string;
5044
5782
  /** Relationship ID referencing the custom data part. */
5045
- relId: string;
5783
+ relId?: string;
5046
5784
  /** Raw string content of the custom data part (if resolvable). */
5047
5785
  data?: string;
5786
+ /** OPC content type for the custom data part. */
5787
+ contentType?: string;
5788
+ /** Raw `p:custData` XML retained for unknown-node preservation. */
5789
+ rawXml?: XmlObject;
5048
5790
  }
5049
5791
  /**
5050
5792
  * An ActiveX control reference from `p:controls / p:control`.
@@ -5169,6 +5911,8 @@ interface PptxSlide {
5169
5911
  /** Optional `<p:cSld @name>` value of the notes slide, for round-trip. */
5170
5912
  notesCSldName?: string;
5171
5913
  comments?: PptxComment[];
5914
+ /** Source package metadata for an Office 2021 p188 comment part. */
5915
+ modernCommentPart?: PptxModernCommentPart;
5172
5916
  warnings?: PptxCompatibilityWarning[];
5173
5917
  rawXml?: XmlObject;
5174
5918
  /** Per-slide colour map override parsed from `p:clrMapOvr`. */
@@ -5187,6 +5931,24 @@ interface PptxSlide {
5187
5931
  activeXControls?: PptxActiveXControl[];
5188
5932
  /** Per-slide header/footer flags from `<p:hf>` (P-H3). */
5189
5933
  headerFooterFlags?: PptxHeaderFooterFlags;
5934
+ /** Server-backed slide synchronization metadata stored in a related OPC part. */
5935
+ slideSynchronization?: PptxSlideSyncProperties;
5936
+ }
5937
+ interface PptxModernCommentPart {
5938
+ path: string;
5939
+ relationshipId: string;
5940
+ /** Original p188:cmLst root, including unknown attributes and extensions. */
5941
+ rawXml?: XmlObject;
5942
+ }
5943
+ /** Metadata from a `p:sldSyncPr` slide synchronization data part. */
5944
+ interface PptxSlideSyncProperties {
5945
+ serverSlideId: string;
5946
+ serverSlideModifiedTime: string;
5947
+ clientInsertedTime: string;
5948
+ extensionList?: XmlObject;
5949
+ rawXml?: XmlObject;
5950
+ partPath?: string;
5951
+ relationshipId?: string;
5190
5952
  }
5191
5953
  /**
5192
5954
  * A slide layout available in the loaded presentation.
@@ -5273,11 +6035,13 @@ interface PptxPresentationProperties {
5273
6035
  showSlidesTo?: number;
5274
6036
  /** Whether to show subtitles/captions during presentation mode. */
5275
6037
  showSubtitles?: boolean;
5276
- /** Print settings: slides per page. */
6038
+ /** Typed `p:prnPr` settings. Set to null during save to remove the element. */
6039
+ printProperties?: PptxPresentationPrintProperties | null;
6040
+ /** @deprecated Use `printProperties.printWhat`; retained as a handout compatibility alias. */
5277
6041
  printSlidesPerPage?: number;
5278
- /** Print settings: frame slides. */
6042
+ /** @deprecated Use `printProperties.frameSlides`. */
5279
6043
  printFrameSlides?: boolean;
5280
- /** Print settings: colour mode (from `p:prnPr/@clrMode`). */
6044
+ /** @deprecated Use `printProperties.colorMode`. */
5281
6045
  printColorMode?: 'clr' | 'gray' | 'bw';
5282
6046
  /** Most-recently-used colours from the presentation palette. */
5283
6047
  mruColors?: string[];
@@ -5314,6 +6078,8 @@ interface PptxCustomShow {
5314
6078
  id: string;
5315
6079
  /** Ordered list of slide relationship IDs included in this custom show. */
5316
6080
  slideRIds: string[];
6081
+ /** Original `p:custShow` subtree used to preserve unmodelled attributes and extensions. */
6082
+ rawXml?: XmlObject;
5317
6083
  }
5318
6084
  /**
5319
6085
  * An ordered section in the presentation (from `p:sectionLst` / `p14:sectionLst`).
@@ -5342,6 +6108,8 @@ interface PptxSection {
5342
6108
  collapsed?: boolean;
5343
6109
  /** Section highlight color hex (from p15:sectionPr/@clr). */
5344
6110
  color?: string;
6111
+ /** Original section subtree used to preserve unmodelled attributes and extensions. */
6112
+ rawXml?: XmlObject;
5345
6113
  }
5346
6114
  /**
5347
6115
  * Write-protection hash data parsed from `p:modifyVerifier` in `presentation.xml`.
@@ -5410,11 +6178,13 @@ interface PptxPhotoAlbum {
5410
6178
  */
5411
6179
  interface PptxKinsoku {
5412
6180
  /** Language code (e.g. "ja-JP", "zh-CN"). */
5413
- lang?: string;
6181
+ lang?: string | null;
5414
6182
  /** Characters that cannot begin a line. */
5415
6183
  invalStChars?: string;
5416
6184
  /** Characters that cannot end a line. */
5417
6185
  invalEndChars?: string;
6186
+ /** Original leaf retained for unknown attribute preservation. */
6187
+ rawXml?: XmlObject;
5418
6188
  }
5419
6189
  /**
5420
6190
  * Root data structure returned by {@link PptxHandlerCore.load}.
@@ -5465,6 +6235,8 @@ interface PptxData {
5465
6235
  isPasswordProtected?: boolean;
5466
6236
  /** Embedded font data (name + binary data URL) extracted from the presentation. */
5467
6237
  embeddedFonts?: PptxEmbeddedFont[];
6238
+ /** Typed `p:embeddedFontLst` package metadata, including unresolved variants. */
6239
+ embeddedFontList?: PptxEmbeddedFontList;
5468
6240
  /** Most-recently-used colour list from presentation properties. */
5469
6241
  mruColors?: string[];
5470
6242
  /** Parsed notes master data if present in the PPTX. */
@@ -5505,6 +6277,8 @@ interface PptxData {
5505
6277
  thumbnailData?: Uint8Array;
5506
6278
  /** Comment authors parsed from `ppt/commentAuthors.xml` for round-trip preservation. */
5507
6279
  commentAuthors?: PptxCommentAuthor[];
6280
+ /** Office 2021 p188 authors from the modern Author part. */
6281
+ modernCommentAuthors?: PptxModernCommentAuthor[];
5508
6282
  /**
5509
6283
  * OOXML conformance class of the loaded file.
5510
6284
  * - `'strict'` -- ISO/IEC 29500 Strict (uses `purl.oclc.org` namespace URIs)
@@ -5797,10 +6571,17 @@ interface ChartSeriesInput {
5797
6571
  name: string;
5798
6572
  values: number[];
5799
6573
  color?: string;
6574
+ boxWhiskerOptions?: PptxChartBoxWhiskerOptions;
6575
+ histogramOptions?: PptxChartHistogramOptions;
6576
+ waterfallOptions?: PptxChartWaterfallOptions;
6577
+ regionMapOptions?: PptxChartRegionMapOptions;
6578
+ treemapOptions?: PptxChartTreemapOptions;
5800
6579
  }
5801
6580
  interface ChartInput {
5802
6581
  series: ChartSeriesInput[];
5803
6582
  categories: string[];
6583
+ /** ChartEx hierarchy levels in leaf-to-root XML order. */
6584
+ categoryLevels?: string[][];
5804
6585
  title?: string;
5805
6586
  hasLegend?: boolean;
5806
6587
  legendPosition?: 't' | 'b' | 'l' | 'r' | 'tr';
@@ -6314,10 +7095,12 @@ interface PptxHandlerSaveOptions {
6314
7095
  slideLayouts?: PptxSlideLayout[];
6315
7096
  /** Updated tag collections to save back to ppt/tags/tag*.xml. */
6316
7097
  tags?: PptxTagCollection[];
7098
+ /** Presentation-level customer data references to author or update. */
7099
+ customerData?: PptxCustomerData[];
6317
7100
  /** Photo album metadata to save back to `p:photoAlbum`. */
6318
7101
  photoAlbum?: PptxPhotoAlbum;
6319
7102
  /** East Asian line-break settings to save back to `p:kinsoku`. */
6320
- kinsoku?: PptxKinsoku;
7103
+ kinsoku?: PptxKinsoku | null;
6321
7104
  /** Write-protection verifier. Set to `null` to remove, `undefined` to preserve existing. */
6322
7105
  modifyVerifier?: PptxModifyVerifier | null;
6323
7106
  /** View properties to save back to ppt/viewProps.xml. */
@@ -6349,6 +7132,8 @@ interface PptxHandlerSaveOptions {
6349
7132
  * preserved (i.e. the default is lossless round-trip).
6350
7133
  */
6351
7134
  embeddedFonts?: PptxEmbeddedFont[];
7135
+ /** Typed embedded-font list metadata. Set to null to remove fonts and relationships. */
7136
+ embeddedFontList?: PptxEmbeddedFontList | null;
6352
7137
  /**
6353
7138
  * OOXML conformance class for the saved output.
6354
7139
  * - `'preserve'` (default): use the same conformance as the loaded file.
@@ -7082,10 +7867,12 @@ type CollaborationRole = 'owner' | 'collaborator' | 'viewer';
7082
7867
  * any signaling server, which makes this mode usable from static hosting.
7083
7868
  */
7084
7869
  type CollaborationTransport = 'websocket' | 'webrtc';
7870
+ /** How the local user entered a collaboration session. */
7871
+ type CollaborationSessionIntent = 'create' | 'join';
7085
7872
  /**
7086
7873
  * Real-time collaboration configuration.
7087
7874
  *
7088
- * The same shape is accepted by the React, Vue, and Angular bindings.
7875
+ * The same shape is accepted by every framework binding.
7089
7876
  */
7090
7877
  interface CollaborationConfig {
7091
7878
  /** Unique identifier for the collaboration room (alphanumeric, hyphens, underscores). */
@@ -7113,6 +7900,13 @@ interface CollaborationConfig {
7113
7900
  authToken?: string;
7114
7901
  /** Role in the session; defaults to `'collaborator'`. */
7115
7902
  role?: CollaborationRole;
7903
+ /**
7904
+ * Whether this client created the room or joined an existing room. Providers
7905
+ * do not use this value, but hosts can use it to avoid publishing local file
7906
+ * bytes when handling a join request. Omitted values retain the legacy
7907
+ * create-session behaviour.
7908
+ */
7909
+ sessionIntent?: CollaborationSessionIntent;
7116
7910
  /**
7117
7911
  * Elected-writer write-back callback (Area 3 of the C3 hardening plan).
7118
7912
  *
@@ -7212,6 +8006,44 @@ declare const MOBILE_BREAKPOINT = 768;
7212
8006
  declare const TABLET_BREAKPOINT = 1024;
7213
8007
  /** Device orientation as reported by the screen / viewport aspect ratio. */
7214
8008
  type DeviceOrientation = 'portrait' | 'landscape';
8009
+
8010
+ interface PresentationSnapshot {
8011
+ slideIndex: number;
8012
+ buildStep: number;
8013
+ sequence: number;
8014
+ blackout: 'none' | 'black' | 'white';
8015
+ paused: boolean;
8016
+ elapsedMs: number;
8017
+ zoom?: PresentationZoomState;
8018
+ pointer?: PresentationPointerState;
8019
+ inkStrokes?: PresentationInkStroke[];
8020
+ caption?: string;
8021
+ subtitlesVisible?: boolean;
8022
+ }
8023
+ interface PresentationZoomState {
8024
+ scale: number;
8025
+ originX: number;
8026
+ originY: number;
8027
+ }
8028
+ type PresentationPointerTool = 'none' | 'laser' | 'pen' | 'highlighter' | 'eraser';
8029
+ interface PresentationPointerState {
8030
+ tool: PresentationPointerTool;
8031
+ x: number;
8032
+ y: number;
8033
+ color: string;
8034
+ }
8035
+ interface PresentationInkPoint {
8036
+ x: number;
8037
+ y: number;
8038
+ }
8039
+ interface PresentationInkStroke {
8040
+ id: string;
8041
+ slideIndex: number;
8042
+ tool: 'pen' | 'highlighter';
8043
+ color: string;
8044
+ width: number;
8045
+ points: PresentationInkPoint[];
8046
+ }
7215
8047
  interface TouchGestureCallbacks {
7216
8048
  /** Called continuously during a pinch gesture with the new (clamped) scale. */
7217
8049
  onPinchZoom?: (newScale: number) => void;
@@ -7226,6 +8058,20 @@ interface ElementClipboardPayload {
7226
8058
  isTemplate: boolean;
7227
8059
  }
7228
8060
 
8061
+ /** Framework-neutral virtual-list range used by every thumbnail sidebar. */
8062
+ interface VirtualizedRange {
8063
+ startIndex: number;
8064
+ endIndex: number;
8065
+ totalHeight: number;
8066
+ offsetY: number;
8067
+ visibleRange: {
8068
+ start: number;
8069
+ end: number;
8070
+ };
8071
+ }
8072
+ /** Compute the rendered item window for fixed-height virtual lists. */
8073
+ declare function computeVirtualRange(totalItems: number, itemHeight: number, scrollTop: number, viewportHeight: number, overscan?: number): VirtualizedRange;
8074
+
7229
8075
  /**
7230
8076
  * Pure handout layout calculations, shared by every binding's print path.
7231
8077
  *
@@ -7622,6 +8468,17 @@ interface UsePresentationModeResult {
7622
8468
  isAudienceWindowOpen: () => boolean;
7623
8469
  /** Send a slide index to the audience window explicitly. */
7624
8470
  syncSlideToAudience: (slideIndex: number) => void;
8471
+ syncStateToAudience: (snapshot: PresentationSnapshot) => void;
8472
+ presenterSnapshot: PresentationSnapshot;
8473
+ setPresenterBlackout: (blackout: PresentationSnapshot['blackout']) => void;
8474
+ togglePresenterTimer: () => void;
8475
+ resetPresenterTimer: () => void;
8476
+ stepPresenterZoom: (direction: 1 | -1) => void;
8477
+ resetPresenterZoom: () => void;
8478
+ setPresenterCaption: (caption: string) => void;
8479
+ setPresenterSubtitlesVisible: (visible: boolean) => void;
8480
+ updatePresenterSnapshot: (patch: Partial<PresentationSnapshot>) => void;
8481
+ swapPresenterDisplays: () => Promise<boolean>;
7625
8482
  }
7626
8483
  //#endregion
7627
8484
  //#region src/viewer/hooks/useThemeSwitching.d.ts
@@ -8028,6 +8885,8 @@ interface UsePresentationKeyboardInput {
8028
8885
  onToggleToolbar?: () => void;
8029
8886
  /** Toggle between presenter view (split-screen with notes) and fullscreen. */
8030
8887
  onTogglePresenterView?: () => void;
8888
+ onToggleBlackScreen?: () => void;
8889
+ onToggleWhiteScreen?: () => void;
8031
8890
  rehearsing: boolean;
8032
8891
  recordCurrentSlideTime: (slideIndex: number) => void;
8033
8892
  presentationSlideIndex: number;
@@ -8075,12 +8934,15 @@ interface UsePresenterWindowInput {
8075
8934
  isPresenterMode: boolean;
8076
8935
  /** Raw PPTX bytes to share with the audience tab via IndexedDB. */
8077
8936
  content?: ArrayBuffer | Uint8Array | null;
8937
+ snapshot: PresentationSnapshot;
8078
8938
  }
8079
8939
  interface UsePresenterWindowResult {
8080
8940
  openAudienceWindow: () => boolean;
8081
8941
  closeAudienceWindow: () => void;
8082
8942
  isAudienceWindowOpen: () => boolean;
8083
8943
  syncSlideToAudience: (slideIndex: number) => void;
8944
+ syncStateToAudience: (snapshot: PresentationSnapshot) => void;
8945
+ swapDisplays: () => Promise<boolean>;
8084
8946
  }
8085
8947
  declare function usePresenterWindow(input: UsePresenterWindowInput): UsePresenterWindowResult;
8086
8948
  //#endregion
@@ -8090,6 +8952,7 @@ interface UseAudienceModeInput {
8090
8952
  onSetMode: (mode: ViewerMode) => void;
8091
8953
  onSetActiveSlideIndex: (index: number) => void;
8092
8954
  containerRef: React.RefObject<HTMLElement | null>;
8955
+ onSnapshot?: (snapshot: PresentationSnapshot) => void;
8093
8956
  }
8094
8957
  /**
8095
8958
  * When the page was opened with the `#pptx-audience` hash, this hook:
@@ -9751,34 +10614,12 @@ interface VirtualizedSlidesOptions {
9751
10614
  /** Number of extra items to render above/below the viewport. */
9752
10615
  overscan?: number;
9753
10616
  }
9754
- interface VirtualizedRange {
9755
- /** The first index to render (inclusive). */
9756
- startIndex: number;
9757
- /** The last index to render (inclusive). */
9758
- endIndex: number;
9759
- /** Total height of the virtual container (for scrollbar sizing). */
9760
- totalHeight: number;
9761
- /** Offset (top padding) to position the rendered window correctly. */
9762
- offsetY: number;
9763
- /** The visible range without overscan (for analytics/testing). */
9764
- visibleRange: {
9765
- start: number;
9766
- end: number;
9767
- };
9768
- }
9769
10617
  interface VirtualizedSlidesResult extends VirtualizedRange {
9770
10618
  /** Ref to attach to the scroll container element. */
9771
10619
  scrollContainerRef: React.RefObject<HTMLDivElement | null>;
9772
10620
  /** Call this to scroll a specific index into view. */
9773
10621
  scrollToIndex: (index: number, behavior?: ScrollBehavior) => void;
9774
10622
  }
9775
- /**
9776
- * Compute the rendered index range given scroll state and item dimensions.
9777
- *
9778
- * This is a pure function with no React or DOM dependencies so it can
9779
- * be unit-tested without `renderHook` or a DOM environment.
9780
- */
9781
- declare function computeVirtualRange(totalItems: number, itemHeight: number, scrollTop: number, viewportHeight: number, overscan?: number): VirtualizedRange;
9782
10623
  declare function useVirtualizedSlides({ totalItems, itemHeight, overscan }: VirtualizedSlidesOptions): VirtualizedSlidesResult;
9783
10624
  //#endregion
9784
10625
  //#region src/viewer/hooks/useIsMobile.d.ts