pptx-react-viewer 3.5.4 → 3.7.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 (163) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{AiChatPanel-CCJNQGER.mjs → AiChatPanel-L5QGWVZK.mjs} +4 -4
  3. package/dist/AiChatPanel-L5QGWVZK.mjs.br +0 -0
  4. package/dist/AiChatPanel-L5QGWVZK.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-LPZWDNVU.js → AiChatPanel-M3AHKYPS.js} +25 -25
  6. package/dist/AiChatPanel-M3AHKYPS.js.br +0 -0
  7. package/dist/AiChatPanel-M3AHKYPS.js.gz +0 -0
  8. package/dist/{Area3DChartScene-P6YM6ZL7.mjs → Area3DChartScene-AE2XYKDW.mjs} +1 -1
  9. package/dist/Area3DChartScene-AE2XYKDW.mjs.br +1 -0
  10. package/dist/Area3DChartScene-AE2XYKDW.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-LJCWBNQ3.js → Area3DChartScene-ZQLQK6L4.js} +2 -2
  12. package/dist/Area3DChartScene-ZQLQK6L4.js.br +0 -0
  13. package/dist/Area3DChartScene-ZQLQK6L4.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-DIVOJURZ.mjs → Bar3DChartScene-FQV62XOI.mjs} +1 -1
  15. package/dist/Bar3DChartScene-FQV62XOI.mjs.br +2 -0
  16. package/dist/Bar3DChartScene-FQV62XOI.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-7DNQ4X5T.js → Bar3DChartScene-TZ6ADFBS.js} +2 -2
  18. package/dist/Bar3DChartScene-TZ6ADFBS.js.br +0 -0
  19. package/dist/Bar3DChartScene-TZ6ADFBS.js.gz +0 -0
  20. package/dist/{Line3DChartScene-UF6DHP36.js → Line3DChartScene-5CKPAX63.js} +2 -2
  21. package/dist/Line3DChartScene-5CKPAX63.js.br +0 -0
  22. package/dist/Line3DChartScene-5CKPAX63.js.gz +0 -0
  23. package/dist/{Line3DChartScene-ZZVNUKIJ.mjs → Line3DChartScene-FEUY3PCE.mjs} +1 -1
  24. package/dist/Line3DChartScene-FEUY3PCE.mjs.br +1 -0
  25. package/dist/Line3DChartScene-FEUY3PCE.mjs.gz +0 -0
  26. package/dist/{Model3DScene-C7MZ22DH.js → Model3DScene-BLXEALM6.js} +2 -2
  27. package/dist/Model3DScene-BLXEALM6.js.br +0 -0
  28. package/dist/Model3DScene-BLXEALM6.js.gz +0 -0
  29. package/dist/{Model3DScene-XXMAAKBR.mjs → Model3DScene-V3DHIISV.mjs} +1 -1
  30. package/dist/Model3DScene-V3DHIISV.mjs.br +0 -0
  31. package/dist/Model3DScene-V3DHIISV.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-N2Y25VG5.js → PieChart3DScene-GHHT3PDV.js} +2 -2
  33. package/dist/PieChart3DScene-GHHT3PDV.js.br +0 -0
  34. package/dist/PieChart3DScene-GHHT3PDV.js.gz +0 -0
  35. package/dist/{PieChart3DScene-7LX3IL2Q.mjs → PieChart3DScene-VZI2VARG.mjs} +1 -1
  36. package/dist/{PieChart3DScene-7LX3IL2Q.mjs.br → PieChart3DScene-VZI2VARG.mjs.br} +0 -0
  37. package/dist/PieChart3DScene-VZI2VARG.mjs.gz +0 -0
  38. package/dist/PowerPointViewer-Cl6jBPNw.d.ts.map +1 -1
  39. package/dist/{SurfaceChart3DScene-ADA7NUIW.mjs → SurfaceChart3DScene-T36E2HBA.mjs} +1 -1
  40. package/dist/SurfaceChart3DScene-T36E2HBA.mjs.br +0 -0
  41. package/dist/SurfaceChart3DScene-T36E2HBA.mjs.gz +0 -0
  42. package/dist/{SurfaceChart3DScene-WXJHYOGJ.js → SurfaceChart3DScene-WWIMQ65D.js} +2 -2
  43. package/dist/SurfaceChart3DScene-WWIMQ65D.js.br +0 -0
  44. package/dist/SurfaceChart3DScene-WWIMQ65D.js.gz +0 -0
  45. package/dist/{chunk-UOMFINNJ.js → chunk-3EJFZ7TE.js} +33 -5
  46. package/dist/chunk-3EJFZ7TE.js.br +0 -0
  47. package/dist/chunk-3EJFZ7TE.js.gz +0 -0
  48. package/dist/{chunk-YQOK4E2A.js → chunk-DCNHUEWQ.js} +35917 -23497
  49. package/dist/chunk-DCNHUEWQ.js.br +0 -0
  50. package/dist/chunk-DCNHUEWQ.js.gz +0 -0
  51. package/dist/{chunk-JCJ3EPG6.mjs → chunk-FGTMS7LR.mjs} +14 -23
  52. package/dist/chunk-FGTMS7LR.mjs.br +0 -0
  53. package/dist/chunk-FGTMS7LR.mjs.gz +0 -0
  54. package/dist/{chunk-U52MKWVA.mjs → chunk-JANUSAEK.mjs} +189 -225
  55. package/dist/chunk-JANUSAEK.mjs.br +0 -0
  56. package/dist/chunk-JANUSAEK.mjs.gz +0 -0
  57. package/dist/{chunk-NM652EZS.mjs → chunk-NV55GU5V.mjs} +35881 -23494
  58. package/dist/chunk-NV55GU5V.mjs.br +0 -0
  59. package/dist/chunk-NV55GU5V.mjs.gz +0 -0
  60. package/dist/{chunk-2FMQ7M3L.js → chunk-OBE4TB76.js} +494 -575
  61. package/dist/chunk-OBE4TB76.js.br +0 -0
  62. package/dist/chunk-OBE4TB76.js.gz +0 -0
  63. package/dist/{chunk-EVVWCF2M.mjs → chunk-PC62KGU3.mjs} +67 -148
  64. package/dist/chunk-PC62KGU3.mjs.br +0 -0
  65. package/dist/chunk-PC62KGU3.mjs.gz +0 -0
  66. package/dist/{chunk-HHJZK26I.js → chunk-TUSALM3A.js} +1603 -1310
  67. package/dist/chunk-TUSALM3A.js.br +0 -0
  68. package/dist/chunk-TUSALM3A.js.gz +0 -0
  69. package/dist/{chunk-IWQSAKPM.mjs → chunk-TXY2E7VQ.mjs} +445 -152
  70. package/dist/chunk-TXY2E7VQ.mjs.br +0 -0
  71. package/dist/chunk-TXY2E7VQ.mjs.gz +0 -0
  72. package/dist/{chunk-UTMTXJGM.js → chunk-VIFDZIVX.js} +375 -412
  73. package/dist/chunk-VIFDZIVX.js.br +0 -0
  74. package/dist/chunk-VIFDZIVX.js.gz +0 -0
  75. package/dist/{chunk-UTIMT5CZ.js → chunk-W24OJ7H5.js} +14 -23
  76. package/dist/chunk-W24OJ7H5.js.br +0 -0
  77. package/dist/chunk-W24OJ7H5.js.gz +0 -0
  78. package/dist/{chunk-IVPT3U5C.mjs → chunk-WKODF5ZU.mjs} +29 -1
  79. package/dist/chunk-WKODF5ZU.mjs.br +0 -0
  80. package/dist/chunk-WKODF5ZU.mjs.gz +0 -0
  81. package/dist/i18n.js +4 -4
  82. package/dist/i18n.js.br +0 -0
  83. package/dist/i18n.js.gz +0 -0
  84. package/dist/i18n.mjs +1 -1
  85. package/dist/i18n.mjs.br +0 -0
  86. package/dist/i18n.mjs.gz +0 -0
  87. package/dist/index.d.ts +1012 -45
  88. package/dist/index.js +47 -47
  89. package/dist/index.js.br +0 -0
  90. package/dist/index.js.gz +0 -0
  91. package/dist/index.mjs +6 -6
  92. package/dist/index.mjs.br +0 -0
  93. package/dist/index.mjs.gz +0 -0
  94. package/dist/internals.d.ts +1023 -45
  95. package/dist/internals.d.ts.map +1 -1
  96. package/dist/internals.js +79 -79
  97. package/dist/internals.js.br +0 -0
  98. package/dist/internals.js.gz +0 -0
  99. package/dist/internals.mjs +4 -4
  100. package/dist/internals.mjs.br +0 -0
  101. package/dist/internals.mjs.gz +0 -0
  102. package/dist/{useViewerBuildingBlocks-f6oNGKMX.d.ts → useViewerBuildingBlocks-C8F_4Pzb.d.ts} +3 -1
  103. package/dist/useViewerBuildingBlocks-C8F_4Pzb.d.ts.map +1 -0
  104. package/dist/viewer/index.d.ts +933 -45
  105. package/dist/viewer/index.js +27 -27
  106. package/dist/viewer/index.js.br +0 -0
  107. package/dist/viewer/index.js.gz +0 -0
  108. package/dist/viewer/index.mjs +6 -6
  109. package/dist/viewer/index.mjs.br +0 -0
  110. package/dist/viewer/index.mjs.gz +0 -0
  111. package/package.json +2 -2
  112. package/dist/AiChatPanel-CCJNQGER.mjs.br +0 -0
  113. package/dist/AiChatPanel-CCJNQGER.mjs.gz +0 -0
  114. package/dist/AiChatPanel-LPZWDNVU.js.br +0 -0
  115. package/dist/AiChatPanel-LPZWDNVU.js.gz +0 -0
  116. package/dist/Area3DChartScene-LJCWBNQ3.js.br +0 -0
  117. package/dist/Area3DChartScene-LJCWBNQ3.js.gz +0 -0
  118. package/dist/Area3DChartScene-P6YM6ZL7.mjs.br +0 -0
  119. package/dist/Area3DChartScene-P6YM6ZL7.mjs.gz +0 -0
  120. package/dist/Bar3DChartScene-7DNQ4X5T.js.br +0 -1
  121. package/dist/Bar3DChartScene-7DNQ4X5T.js.gz +0 -0
  122. package/dist/Bar3DChartScene-DIVOJURZ.mjs.br +0 -0
  123. package/dist/Bar3DChartScene-DIVOJURZ.mjs.gz +0 -0
  124. package/dist/Line3DChartScene-UF6DHP36.js.br +0 -0
  125. package/dist/Line3DChartScene-UF6DHP36.js.gz +0 -0
  126. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.br +0 -0
  127. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.gz +0 -0
  128. package/dist/Model3DScene-C7MZ22DH.js.br +0 -0
  129. package/dist/Model3DScene-C7MZ22DH.js.gz +0 -0
  130. package/dist/Model3DScene-XXMAAKBR.mjs.br +0 -0
  131. package/dist/Model3DScene-XXMAAKBR.mjs.gz +0 -0
  132. package/dist/PieChart3DScene-7LX3IL2Q.mjs.gz +0 -0
  133. package/dist/PieChart3DScene-N2Y25VG5.js.br +0 -0
  134. package/dist/PieChart3DScene-N2Y25VG5.js.gz +0 -0
  135. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.br +0 -0
  136. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.gz +0 -0
  137. package/dist/SurfaceChart3DScene-WXJHYOGJ.js.br +0 -0
  138. package/dist/SurfaceChart3DScene-WXJHYOGJ.js.gz +0 -0
  139. package/dist/chunk-2FMQ7M3L.js.br +0 -0
  140. package/dist/chunk-2FMQ7M3L.js.gz +0 -0
  141. package/dist/chunk-EVVWCF2M.mjs.br +0 -0
  142. package/dist/chunk-EVVWCF2M.mjs.gz +0 -0
  143. package/dist/chunk-HHJZK26I.js.br +0 -0
  144. package/dist/chunk-HHJZK26I.js.gz +0 -0
  145. package/dist/chunk-IVPT3U5C.mjs.br +0 -0
  146. package/dist/chunk-IVPT3U5C.mjs.gz +0 -0
  147. package/dist/chunk-IWQSAKPM.mjs.br +0 -0
  148. package/dist/chunk-IWQSAKPM.mjs.gz +0 -0
  149. package/dist/chunk-JCJ3EPG6.mjs.br +0 -0
  150. package/dist/chunk-JCJ3EPG6.mjs.gz +0 -0
  151. package/dist/chunk-NM652EZS.mjs.br +0 -0
  152. package/dist/chunk-NM652EZS.mjs.gz +0 -0
  153. package/dist/chunk-U52MKWVA.mjs.br +0 -0
  154. package/dist/chunk-U52MKWVA.mjs.gz +0 -0
  155. package/dist/chunk-UOMFINNJ.js.br +0 -0
  156. package/dist/chunk-UOMFINNJ.js.gz +0 -0
  157. package/dist/chunk-UTIMT5CZ.js.br +0 -0
  158. package/dist/chunk-UTIMT5CZ.js.gz +0 -0
  159. package/dist/chunk-UTMTXJGM.js.br +0 -0
  160. package/dist/chunk-UTMTXJGM.js.gz +0 -0
  161. package/dist/chunk-YQOK4E2A.js.br +0 -0
  162. package/dist/chunk-YQOK4E2A.js.gz +0 -0
  163. package/dist/useViewerBuildingBlocks-f6oNGKMX.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -63,6 +63,12 @@ interface PptxAction {
63
63
  soundRId?: string;
64
64
  /** Resolved media target path for the optional click sound. */
65
65
  soundPath?: string;
66
+ /**
67
+ * `CT_Hyperlink/@endSnd` (ECMA-376 20.1.2.2.23): PowerPoint's Action
68
+ * Settings "Stop previous sound" checkbox. Round-tripped for now (issue
69
+ * G14); not yet wired into playback.
70
+ */
71
+ endSnd?: boolean;
66
72
  }
67
73
  //#endregion
68
74
  //#region src/core/types/common.d.ts
@@ -85,7 +91,7 @@ interface PptxAction {
85
91
  * // => "wavy" — one of: sng | dbl | heavy | dotted | dash | wavy | none | ...
86
92
  * ```
87
93
  */
88
- type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'none';
94
+ type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'words' | 'none';
89
95
  /**
90
96
  * Connector connection point reference — links a connector endpoint to a
91
97
  * specific shape on the slide.
@@ -420,6 +426,16 @@ interface CustomGeometryRawData {
420
426
  cxnLstXml?: unknown;
421
427
  /** Raw `a:rect` XML content (text rectangle). */
422
428
  rectXml?: unknown;
429
+ /**
430
+ * Raw `a:pathLst` XML content: every `a:path`'s formula-bearing `a:pt`
431
+ * x/y attributes, `a:arcTo` params, `a:close`, and per-path `@w`/`@h`/
432
+ * `@fill`/`@stroke`/`@extrusionOk`, preserved verbatim (not the
433
+ * parse-time-resolved numbers in `customGeometryPaths`). Lets a live
434
+ * `shapeAdjustments` drag re-evaluate the outline against the CURRENT
435
+ * guide values instead of the ones baked in at parse time; see
436
+ * `geometry/custom-geometry-live-eval.ts`.
437
+ */
438
+ pathLstXml?: unknown;
423
439
  }
424
440
  /**
425
441
  * XY-style adjustment handle (`a:ahXY`) on a custom geometry.
@@ -575,6 +591,44 @@ interface PptxCustomPathProperties {
575
591
  customGeometryTextRect?: CustomGeometryTextRect;
576
592
  }
577
593
  //#endregion
594
+ //#region src/core/types/color-ref.d.ts
595
+ /**
596
+ * Theme colour references: the typed counterpart of `<a:schemeClr>`.
597
+ *
598
+ * A colour picked from the theme palette is remembered as a scheme slot plus
599
+ * PowerPoint's luminance variants rather than as the sRGB it currently
600
+ * resolves to, so a later theme change re-colours the shape (and a saved file
601
+ * keeps `<a:schemeClr>` instead of a canonical `<a:srgbClr>`).
602
+ *
603
+ * @module types/color-ref
604
+ */
605
+ /**
606
+ * The scheme slot names `a:schemeClr/@val` accepts (ECMA-376 `ST_SchemeColorIndex`).
607
+ * `bg1`/`tx1`/`bg2`/`tx2` are the colour-map aliases a slide resolves through
608
+ * `p:clrMap`; `phClr` is the placeholder colour used inside a theme's style
609
+ * matrix and is never chosen from a picker.
610
+ */
611
+ type PptxThemeColorSchemeName = 'dk1' | 'lt1' | 'dk2' | 'lt2' | 'accent1' | 'accent2' | 'accent3' | 'accent4' | 'accent5' | 'accent6' | 'hlink' | 'folHlink' | 'bg1' | 'tx1' | 'bg2' | 'tx2' | 'phClr';
612
+ /**
613
+ * A theme colour choice. Every transform is a 0..1 fraction of the OOXML
614
+ * percentage (`lumMod val="20000"` is `lumMod: 0.2`), matching how the parser
615
+ * reads them, and is applied in the order `a:schemeClr` children are written:
616
+ * `tint`, `shade`, `lumMod`, `lumOff`, `alpha`.
617
+ */
618
+ interface PptxThemeColorRef {
619
+ scheme: PptxThemeColorSchemeName;
620
+ /** `a:lumMod`: multiply HSL luminance (PowerPoint's "Lighter/Darker" rows). */
621
+ lumMod?: number;
622
+ /** `a:lumOff`: add to HSL luminance after `lumMod` ("Lighter N%" rows). */
623
+ lumOff?: number;
624
+ /** `a:tint`: blend towards white. */
625
+ tint?: number;
626
+ /** `a:shade`: blend towards black. */
627
+ shade?: number;
628
+ /** `a:alpha`: opacity fraction (1 = opaque). */
629
+ alpha?: number;
630
+ }
631
+ //#endregion
578
632
  //#region src/core/types/effect-dag.d.ts
579
633
  type EffectDagBlendMode = 'darken' | 'lighten' | 'mult' | 'over' | 'screen';
580
634
  type EffectDagContainerType = 'sib' | 'tree';
@@ -864,6 +918,15 @@ interface ShapeStyle {
864
918
  * back to canonical `<a:srgbClr>`.
865
919
  */
866
920
  fillColorXml?: XmlObject;
921
+ /**
922
+ * Typed theme colour reference for the fill, set when {@link fillColorXml}
923
+ * is a plain `a:schemeClr` (see `themeColorRefFromColorChoice`). When
924
+ * present it WINS on save: the writer emits `<a:schemeClr>` from this ref
925
+ * instead of the resolved {@link fillColor}, so the fill keeps following
926
+ * the theme palette after a later theme change. `undefined` means the fill
927
+ * is a plain hex (or a colour kind a ref cannot express).
928
+ */
929
+ fillColorRef?: PptxThemeColorRef;
867
930
  fillGradient?: string;
868
931
  /** Original `gradFill` XML retained for unknown-child and extension round-tripping. */
869
932
  fillGradientXml?: XmlObject;
@@ -898,6 +961,12 @@ interface ShapeStyle {
898
961
  opacity?: number;
899
962
  /** Raw XML colour node preserved for round-trip (e.g. a:schemeClr with transforms). */
900
963
  originalColorXml?: XmlObject;
964
+ /**
965
+ * Typed theme colour reference for this stop, set when
966
+ * {@link originalColorXml} is a plain `a:schemeClr`. Wins on save, same
967
+ * as {@link ShapeStyle.fillColorRef}.
968
+ */
969
+ colorRef?: PptxThemeColorRef;
901
970
  }>;
902
971
  fillGradientAngle?: number;
903
972
  fillGradientType?: 'linear' | 'radial';
@@ -944,6 +1013,12 @@ interface ShapeStyle {
944
1013
  * round-trip serialisation. See {@link fillColorXml} for the rationale.
945
1014
  */
946
1015
  strokeColorXml?: XmlObject;
1016
+ /**
1017
+ * Typed theme colour reference for the outline, mirroring
1018
+ * {@link fillColorRef}: set when {@link strokeColorXml} is a plain
1019
+ * `a:schemeClr`, and wins on save.
1020
+ */
1021
+ strokeColorRef?: PptxThemeColorRef;
947
1022
  /**
948
1023
  * Kind of fill painted on the outline (`a:ln` child). Distinguishes a solid
949
1024
  * outline from a gradient/pattern/none outline so save can emit the correct
@@ -1177,6 +1252,21 @@ interface ShapeStyle {
1177
1252
  dagFillOverlayColor?: string;
1178
1253
  /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1179
1254
  dagFillOverlayOpacity?: number;
1255
+ /** Fill overlay blend mode from a direct `a:effectLst/a:fillOverlay/@blend`. */
1256
+ shapeFillOverlayBlend?: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
1257
+ /**
1258
+ * Fill overlay tint colour (hex `#RRGGBB`) from a direct
1259
+ * `a:effectLst/a:fillOverlay`'s `a:solidFill`/`a:gradFill`.
1260
+ */
1261
+ shapeFillOverlayColor?: string;
1262
+ /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1263
+ shapeFillOverlayOpacity?: number;
1264
+ /** Original source `a:fillOverlay` node, preserved for lossless surgical updates. */
1265
+ fillOverlayXml?: XmlObject;
1266
+ /** Resolved source fill-overlay colour used to detect colour edits. */
1267
+ shapeFillOverlayOriginalColor?: string;
1268
+ /** Source fill-overlay opacity used to detect alpha edits. */
1269
+ shapeFillOverlayOriginalOpacity?: number;
1180
1270
  /** `<a:lnRef @idx>` — 1-based index into the theme's lnStyleLst. */
1181
1271
  lnRefIdx?: number;
1182
1272
  /** Raw XML colour child of `<a:lnRef>` (e.g. `<a:schemeClr>` with transforms). */
@@ -1432,8 +1522,25 @@ interface TextStyle {
1432
1522
  * verbatim when the resolved {@link color} still matches this node.
1433
1523
  */
1434
1524
  colorXml?: XmlObject;
1525
+ /**
1526
+ * Typed theme colour reference for the run's text colour, set when
1527
+ * {@link colorXml} is a plain `a:schemeClr` (see
1528
+ * `themeColorRefFromColorChoice`). When present it WINS on save: the
1529
+ * writer emits `<a:schemeClr>` from this ref instead of the resolved
1530
+ * {@link color}, so the text keeps following the theme palette after a
1531
+ * later theme change.
1532
+ */
1533
+ colorRef?: PptxThemeColorRef;
1435
1534
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1436
- vAlign?: 'top' | 'middle' | 'bottom';
1535
+ /**
1536
+ * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
1537
+ * `distributed`/`justified` (`dist`/`just`) stretch line spacing so the
1538
+ * paragraph block fills the box's full vertical extent, distinct from true
1539
+ * centering (`middle`/`ctr`); both approximate to a middle-anchored render
1540
+ * (see `text-body-layout.ts`) since CSS has no native vertical-justify
1541
+ * primitive, but round-trip losslessly through parse/save.
1542
+ */
1543
+ vAlign?: 'top' | 'middle' | 'bottom' | 'distributed' | 'justified';
1437
1544
  /** Right-to-left paragraph/run direction (`a:pPr/@rtl`, `a:rPr/@rtl`). */
1438
1545
  rtl?: boolean;
1439
1546
  /** Body text direction (`a:bodyPr/@vert`).
@@ -1849,6 +1956,12 @@ interface BulletInfo {
1849
1956
  * identity rather than being flattened to `<a:srgbClr/>` on save.
1850
1957
  */
1851
1958
  colorXml?: XmlObject;
1959
+ /**
1960
+ * Typed theme colour reference for the bullet colour, set when
1961
+ * {@link colorXml} is a plain `a:schemeClr`. Wins on save, same as
1962
+ * {@link TextStyle.colorRef}.
1963
+ */
1964
+ colorRef?: PptxThemeColorRef;
1852
1965
  /** True when `a:buNone` explicitly suppresses bullets. */
1853
1966
  none?: boolean;
1854
1967
  /** Picture bullet: relationship ID from `a:buBlip` → `a:blip[@r:embed]`. */
@@ -2254,6 +2367,50 @@ interface PptxChartAxisLabelFormatting {
2254
2367
  noMultiLevelLabels?: boolean;
2255
2368
  }
2256
2369
  //#endregion
2370
+ //#region src/core/types/chart-ex.d.ts
2371
+ /**
2372
+ * Chart-formatting types that don't fit an existing, owned type module for
2373
+ * this wave (`types/chart.ts` is owned elsewhere; see its own module doc).
2374
+ * Despite the file name, `PptxChartDataPointPicture` is a CLASSIC (`c:`)
2375
+ * construct, not ChartEx (`cx:`) - it landed here only because it needs a
2376
+ * home outside `chart.ts`.
2377
+ *
2378
+ * @module pptx-types/chart-ex
2379
+ */
2380
+ /** `c:dPt/c:pictureOptions/c:pictureFormat/@val` (ST_PictureFormat). */
2381
+ type PptxChartPictureFormat = 'stretch' | 'stack' | 'stackScale';
2382
+ /**
2383
+ * Per-data-point picture-fill flags (`c:dPt/c:pictureOptions`): PowerPoint's
2384
+ * "Picture or texture fill" with "Stack"/"Stretch" semantics on a bar/column
2385
+ * data point, distinct from the point's plain `c:spPr` solid/gradient fill.
2386
+ *
2387
+ * The flags parse purely (`parseChartDataPointPicture` in
2388
+ * `utils/chart-datapoint-serializer.ts`); {@link imageUrl} is a separate,
2389
+ * later addition populated by the runtime (`PptxHandlerRuntimeChartParsing.ts`)
2390
+ * once the sibling `c:spPr/a:blipFill/a:blip`'s `r:embed`/`r:link` is resolved
2391
+ * against the chart part's relationships, since that resolution needs zip/file
2392
+ * access the pure parser does not have.
2393
+ */
2394
+ interface PptxChartDataPointPicture {
2395
+ /** Apply the picture to the front face of a 3-D bar/column (`c:applyToFront`). */
2396
+ applyToFront?: boolean;
2397
+ /** Apply the picture to the side faces of a 3-D bar/column (`c:applyToSides`). */
2398
+ applyToSides?: boolean;
2399
+ /** Apply the picture to the end face of a 3-D bar/column (`c:applyToEnd`). */
2400
+ applyToEnd?: boolean;
2401
+ /** Stretch, or stack repeated tiles at their natural size (or scaled). */
2402
+ pictureFormat?: PptxChartPictureFormat;
2403
+ /** Height, in points, of one repeated picture tile for "stack"/"stackScale" (`c:pictureStackUnit/@val`). */
2404
+ pictureStackUnit?: number;
2405
+ /**
2406
+ * Resolved picture source (a `data:`/`blob:` URL) for the point's sibling
2407
+ * `c:spPr/a:blipFill/a:blip`. Populated by the runtime after relationship
2408
+ * resolution (C2-G9 render half); absent until then, and absent entirely
2409
+ * when the point has no picture fill or the image could not be resolved.
2410
+ */
2411
+ imageUrl?: string;
2412
+ }
2413
+ //#endregion
2257
2414
  //#region src/core/types/chart-pivot-format.d.ts
2258
2415
  interface PptxChartPivotFormat {
2259
2416
  index: number;
@@ -2317,6 +2474,15 @@ interface PptxChartPageSetup {
2317
2474
  horizontalDpi?: number;
2318
2475
  verticalDpi?: number;
2319
2476
  copies?: number;
2477
+ /**
2478
+ * Custom paper height, used when {@link paperSize} is `0`
2479
+ * (`c:pageSetup/@paperHeight`, ST_PositiveUniversalMeasure, e.g. `"297mm"`).
2480
+ * Kept as the raw measure string rather than converted, matching how the
2481
+ * schema stores it.
2482
+ */
2483
+ paperHeight?: string;
2484
+ /** Custom paper width, used when {@link paperSize} is `0` (`@paperWidth`). */
2485
+ paperWidth?: string;
2320
2486
  /** Original leaf retained for foreign attributes. */
2321
2487
  rawXml?: unknown;
2322
2488
  }
@@ -2348,6 +2514,98 @@ interface PptxChartProtection {
2348
2514
  rawXml?: XmlObject;
2349
2515
  }
2350
2516
  //#endregion
2517
+ //#region src/core/types/chart-style-definition.d.ts
2518
+ /**
2519
+ * Typed subset of an Office 2013+ chart-style part (`ppt/charts/style#.xml`,
2520
+ * root element `cs:chartStyle`, relationship type
2521
+ * `.../2012/relationships/chartStyle`).
2522
+ *
2523
+ * PowerPoint's Design-tab "Chart Styles" gallery (1-48) writes `c:style/@val`
2524
+ * on the chart part itself (already modeled as `PptxChartStyle.styleId`) and,
2525
+ * for most styles, this SEPARATE part spelling out the per-element
2526
+ * `cs:lnRef`/`cs:fillRef`/`cs:effectRef`/`cs:fontRef`/`cs:defRPr` defaults a
2527
+ * chart element falls back to when its own XML leaves it unstyled. Without
2528
+ * parsing this part, styles beyond the one PowerPoint happens to have baked
2529
+ * inline are visually inert.
2530
+ *
2531
+ * @module pptx-types/chart-style-definition
2532
+ */
2533
+ /**
2534
+ * One styled chart-element entry (`cs:title`, `cs:axisTitle`,
2535
+ * `cs:categoryAxis`, ...). Colours are resolved to hex at parse time (scheme
2536
+ * colour references via `cs:fontRef`/`cs:lnRef`/`cs:fillRef` are already
2537
+ * flattened against the theme, matching how classic chart colours resolve
2538
+ * elsewhere in this codebase). Fields are present only when the source XML
2539
+ * carried a value for them.
2540
+ */
2541
+ interface PptxChartStylePartEntry {
2542
+ /** Text size in points, from `cs:defRPr/@sz` (hundredths of a point). */
2543
+ fontSize?: number;
2544
+ bold?: boolean;
2545
+ italic?: boolean;
2546
+ /** Resolved text colour: `cs:defRPr/a:solidFill`, or `cs:fontRef`'s scheme colour. */
2547
+ color?: string;
2548
+ /** Resolved line colour from `cs:lnRef`'s scheme colour reference. */
2549
+ lineColor?: string;
2550
+ /** Line width in points, when directly authored (rare; most styles reference a theme line style by index only). */
2551
+ lineWidth?: number;
2552
+ /** Resolved fill colour from `cs:fillRef`'s scheme colour reference. */
2553
+ fillColor?: string;
2554
+ }
2555
+ /**
2556
+ * Parsed per-element style defaults from a chart-style part. Only the
2557
+ * elements this viewer actually renders distinct defaults for are modeled;
2558
+ * elements PowerPoint's style gallery also styles (data table, trendlines,
2559
+ * up/down bars, ...) are out of scope until a renderer needs them.
2560
+ */
2561
+ interface PptxChartStyleDefinition {
2562
+ title?: PptxChartStylePartEntry;
2563
+ axisTitle?: PptxChartStylePartEntry;
2564
+ categoryAxis?: PptxChartStylePartEntry;
2565
+ valueAxis?: PptxChartStylePartEntry;
2566
+ legend?: PptxChartStylePartEntry;
2567
+ dataLabel?: PptxChartStylePartEntry;
2568
+ dataPoint?: PptxChartStylePartEntry;
2569
+ dataPointLine?: PptxChartStylePartEntry;
2570
+ gridlineMajor?: PptxChartStylePartEntry;
2571
+ gridlineMinor?: PptxChartStylePartEntry;
2572
+ chartArea?: PptxChartStylePartEntry;
2573
+ plotArea?: PptxChartStylePartEntry;
2574
+ }
2575
+ //#endregion
2576
+ //#region src/core/types/chart-title.d.ts
2577
+ /**
2578
+ * Chart title rich-text run type, split out of `types/chart.ts` (already at
2579
+ * the repo's file-size limit) to keep that module from growing further.
2580
+ *
2581
+ * @module pptx-types/chart-title
2582
+ */
2583
+ /**
2584
+ * One run of a chart title's rich text (`c:title/c:tx/c:rich/a:p/a:r`).
2585
+ *
2586
+ * The flat `PptxChartData.title` field only ever captured the FIRST run's
2587
+ * text with no per-run formatting; `titleRuns` (when present) is the
2588
+ * lossless, multi-run replacement parsed from the same `c:rich` body. Absent
2589
+ * when the title has no rich text at all (an empty/auto title, or one
2590
+ * authored as a linked-cell reference).
2591
+ */
2592
+ interface PptxChartTitleRun {
2593
+ /** This run's text (`a:t`). */
2594
+ text: string;
2595
+ /** `a:rPr/@_b`. */
2596
+ bold?: boolean;
2597
+ /** `a:rPr/@_i`. */
2598
+ italic?: boolean;
2599
+ /**
2600
+ * Font size in POINTS (`a:rPr/@_sz`, hundredths of a point / 100), matching
2601
+ * `PptxChartLegendTextStyle.fontSize`'s convention rather than the pixel
2602
+ * convention `TextStyle.fontSize` uses for slide text.
2603
+ */
2604
+ fontSize?: number;
2605
+ /** Resolved hex colour (e.g. `"#FF0000"`) from `a:rPr/a:solidFill`. */
2606
+ color?: string;
2607
+ }
2608
+ //#endregion
2351
2609
  //#region src/core/types/chart-user-shapes.d.ts
2352
2610
  /**
2353
2611
  * Types for chart drawing-overlay shapes (`c:userShapes`).
@@ -2386,8 +2644,16 @@ interface PptxChartUserShapeParagraph {
2386
2644
  * `absSizeAnchor` the extent is {@link ext} in EMU.
2387
2645
  */
2388
2646
  interface PptxChartUserShape {
2389
- /** Shape kind: text/preset shape, connector, or picture. */
2390
- kind: 'sp' | 'cxnSp' | 'pic';
2647
+ /**
2648
+ * Shape kind: text/preset shape, connector, picture, a group of the
2649
+ * above (`grpSp`, flattened: each grouped child becomes its own entry
2650
+ * reusing the anchor's own bounding box, an approximation since the
2651
+ * group's internal chOff/chExt transform is not applied), or a bare
2652
+ * placeholder for a `graphicFrame` anchor child (deep content such as a
2653
+ * nested chart or table is out of scope; it only keeps the anchor's
2654
+ * space accounted for instead of the whole overlay disappearing).
2655
+ */
2656
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2391
2657
  /** Anchor kind that positioned the shape. */
2392
2658
  anchor: 'rel' | 'abs';
2393
2659
  /** Top-left corner as chart-relative fractions (0-1). */
@@ -2488,6 +2754,10 @@ interface PptxChartTrendline {
2488
2754
  displayRSq?: boolean;
2489
2755
  displayEq?: boolean;
2490
2756
  color?: string;
2757
+ /** Trendline width in points (`c:trendline/c:spPr/a:ln/@w`, EMU / 12700). */
2758
+ lineWidth?: number;
2759
+ /** Trendline dash style (`c:trendline/c:spPr/a:ln/a:prstDash/@val`). */
2760
+ lineDashStyle?: string;
2491
2761
  label?: PptxChartTrendlineLabel | null;
2492
2762
  }
2493
2763
  /** Typed, commonly edited properties of `c:trendlineLbl`. */
@@ -2533,6 +2803,10 @@ interface PptxChartErrBars {
2533
2803
  customMinus?: number[];
2534
2804
  noEndCap?: boolean;
2535
2805
  color?: string;
2806
+ /** Error-bar line width in points (`c:errBars/c:spPr/a:ln/@w`, EMU / 12700). */
2807
+ width?: number;
2808
+ /** Error-bar line dash style (`c:errBars/c:spPr/a:ln/a:prstDash/@val`). */
2809
+ dashStyle?: string;
2536
2810
  }
2537
2811
  /**
2538
2812
  * Visibility flags for the chart data table (axes + legend keys).
@@ -2619,6 +2893,8 @@ interface PptxChartDataPoint {
2619
2893
  marker?: PptxChartMarker;
2620
2894
  /** Render a bubble-chart point with a 3-D appearance. */
2621
2895
  bubble3D?: boolean;
2896
+ /** Per-point picture-fill flags (`c:dPt/c:pictureOptions`). */
2897
+ picture?: PptxChartDataPointPicture;
2622
2898
  }
2623
2899
  /** Schema values accepted by `c:dLblPos`. */
2624
2900
  type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
@@ -2637,6 +2913,32 @@ interface PptxChartDataLabel {
2637
2913
  text?: string;
2638
2914
  separator?: string;
2639
2915
  showLeaderLines?: boolean;
2916
+ /**
2917
+ * Per-label number-format override (`c:dLbl/c:numFmt/@formatCode`), taking
2918
+ * precedence over the chart-level {@link PptxChartDataLabelOptions.numberFormat}
2919
+ * and the series' own {@link PptxChartSeries.numberFormat} when set.
2920
+ */
2921
+ numberFormat?: string;
2922
+ /**
2923
+ * Manually dragged label position (`c:dLbl/c:layout/c:manualLayout`), the
2924
+ * same CT_ManualLayout shape used for title/legend/plotArea. `null`
2925
+ * explicitly clears a drag back to the automatic position.
2926
+ */
2927
+ layout?: PptxChartManualLayout | null;
2928
+ /**
2929
+ * This label's own font (`c:dLbl/c:txPr/a:p/a:pPr/a:defRPr`, or ChartEx
2930
+ * `cx:dataLabel/cx:txPr`), taking precedence over the chart/series-level
2931
+ * {@link PptxChartDataLabelOptions.txPr} when set. Reuses the legend
2932
+ * entry's flat text-style shape since both are the same
2933
+ * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2934
+ */
2935
+ txPr?: PptxChartLegendTextStyle;
2936
+ /**
2937
+ * This label's own shape formatting (`c:dLbl/c:spPr`): fill/line colour,
2938
+ * width, and dash style for the label's callout box, taking precedence
2939
+ * over any chart/series-level default when set.
2940
+ */
2941
+ spPr?: PptxChartShapeProps;
2640
2942
  }
2641
2943
  /** Axis number format. */
2642
2944
  interface PptxChartAxisNumFmt {
@@ -2651,6 +2953,16 @@ interface PptxChartDisplayUnitsLabel {
2651
2953
  layout?: PptxChartManualLayout | null;
2652
2954
  /** Label shape formatting. `null` removes `c:spPr`. */
2653
2955
  spPr?: PptxChartShapeProps | null;
2956
+ /**
2957
+ * The label's own run font, when it carries a distinct `txPr` from the
2958
+ * axis's own (ChartEx `cx:unitsLabel/cx:txPr`; classic `c:dispUnitsLbl`
2959
+ * has no equivalent child, so this is only ever populated from a ChartEx
2960
+ * axis).
2961
+ */
2962
+ fontFamily?: string;
2963
+ fontSize?: number;
2964
+ fontBold?: boolean;
2965
+ fontColor?: string;
2654
2966
  }
2655
2967
  /** Axis formatting for category, value, or date axes. */
2656
2968
  interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
@@ -2755,8 +3067,27 @@ interface PptxChartWaterfallOptions {
2755
3067
  /** Whether connector lines are visible between adjacent bars. */
2756
3068
  connectorLines?: boolean;
2757
3069
  }
3070
+ /**
3071
+ * A single breakpoint in a ChartEx colour-by-value scale
3072
+ * (`cx:valueColorPositions/cx:colorPosition`). `kind` selects which of
3073
+ * CT_ColorPosition's union members was authored; `value` is absent for
3074
+ * `min`/`max` (they are implicit endpoints) and required otherwise.
3075
+ */
3076
+ interface PptxCxValueColorPosition {
3077
+ kind: 'min' | 'max' | 'number' | 'percent';
3078
+ value?: number;
3079
+ }
2758
3080
  /** Office 2016 ChartEx geographic series dimensions and layout options. */
2759
3081
  interface PptxChartRegionMapOptions {
3082
+ /**
3083
+ * Colour-by-value gradient stops (`cx:valueColors/cx:colors/cx:color`),
3084
+ * resolved to hex, 2 or 3 entries (matching PowerPoint's two- and
3085
+ * three-colour scale UI). Paired index-for-index with
3086
+ * {@link valueColorPositions} when both are present.
3087
+ */
3088
+ valueColors?: string[];
3089
+ /** Gradient breakpoints for {@link valueColors} (`cx:valueColorPositions`). */
3090
+ valueColorPositions?: PptxCxValueColorPosition[];
2760
3091
  /** Optional provider entity identifiers aligned with categories and values. */
2761
3092
  entityIds?: string[];
2762
3093
  /** Original `cx:pt/@idx` values for category points. */
@@ -2921,6 +3252,20 @@ interface PptxChartDataLabelOptions {
2921
3252
  * Omit to let PowerPoint use the type default.
2922
3253
  */
2923
3254
  position?: PptxChartDataLabelPosition;
3255
+ /**
3256
+ * Chart-level number-format override (`c:dLbls/c:numFmt/@formatCode`),
3257
+ * applied to every label of the series/chart-type unless a per-point
3258
+ * {@link PptxChartDataLabel.numberFormat} overrides it.
3259
+ */
3260
+ numberFormat?: string;
3261
+ /**
3262
+ * Default font for every label at this level (`c:dLbls/c:txPr`, or
3263
+ * ChartEx `cx:dataLabels/cx:txPr`), overridden by a per-point
3264
+ * {@link PptxChartDataLabel.txPr} when set. `c:dLbls` at the chart-type
3265
+ * level and the series level cascade the same way the show flags do
3266
+ * (point > series > chart-type).
3267
+ */
3268
+ txPr?: PptxChartLegendTextStyle;
2924
3269
  }
2925
3270
  /** Typed text defaults for a single chart legend entry. */
2926
3271
  interface PptxChartLegendTextStyle {
@@ -2977,6 +3322,17 @@ interface PptxChartStyle {
2977
3322
  hasDataLabels?: boolean;
2978
3323
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
2979
3324
  dataLabels?: PptxChartDataLabelOptions;
3325
+ /**
3326
+ * Font styling for the chart's own title (`c:title/c:txPr`), edited via
3327
+ * `applyChartTitleStyleToXml` (chart-title-style-serializer.ts). Distinct
3328
+ * from an axis title's styling (`PptxChartAxisFormatting.fontFamily` etc.).
3329
+ */
3330
+ titleFontFamily?: string;
3331
+ titleFontSize?: number;
3332
+ titleFontBold?: boolean;
3333
+ titleFontColor?: string;
3334
+ /** Title text-box fill/border (`c:title/c:spPr`). `null` removes it. */
3335
+ titleSpPr?: PptxChartShapeProps | null;
2980
3336
  }
2981
3337
  /**
2982
3338
  * External data source reference for a chart (c:externalData).
@@ -3146,6 +3502,16 @@ interface PptxChartDateCategories {
3146
3502
  */
3147
3503
  interface PptxChartData {
3148
3504
  title?: string;
3505
+ /**
3506
+ * Rich-text runs of the title, parsed from `c:title/c:tx/c:rich` (issue:
3507
+ * chart title rich text). Lossless multi-run alternative to the flat
3508
+ * {@link title}: when present, the writer serialises every run's own
3509
+ * bold/italic/size/color; when absent, save falls back to the flat
3510
+ * `title` path as before. Only populated for a classic (`c:`) chart's
3511
+ * rich (typed) title, not a ChartEx (`cx:`) title or one authored as a
3512
+ * linked-cell reference.
3513
+ */
3514
+ titleRuns?: PptxChartTitleRun[];
3149
3515
  chartType: PptxChartType;
3150
3516
  categories: string[];
3151
3517
  /**
@@ -3237,8 +3603,10 @@ interface PptxChartData {
3237
3603
  chartRelationshipId?: string;
3238
3604
  /** `null` explicitly removes an existing ChartML data table. */
3239
3605
  dataTable?: PptxChartDataTable | null;
3240
- dropLines?: PptxChartLineStyle;
3241
- hiLowLines?: PptxChartLineStyle;
3606
+ /** `null` explicitly removes an existing `c:dropLines` element. */
3607
+ dropLines?: PptxChartLineStyle | null;
3608
+ /** `null` explicitly removes an existing `c:hiLowLines` element. */
3609
+ hiLowLines?: PptxChartLineStyle | null;
3242
3610
  /** `null` explicitly removes an existing up/down-bars container. */
3243
3611
  upDownBars?: PptxChartUpDownBars | null;
3244
3612
  axes?: PptxChartAxisFormatting[];
@@ -3353,10 +3721,45 @@ interface PptxChartData {
3353
3721
  pivotFormats?: PptxChartPivotFormats | null;
3354
3722
  /**
3355
3723
  * Color-map override (`c:clrMapOvr`) carrying 12 attributes that
3356
- * remap theme colour roles for this chart only. Preserved as a flat
3357
- * `attribute value` map for round-trip fidelity.
3724
+ * remap theme colour roles for this chart only. Modeled as a flat
3725
+ * `attribute -> value` map (e.g. `{ bg1: 'lt1', accent1: 'accent2' }`)
3726
+ * so unknown/future attributes round-trip without code changes.
3727
+ * `null` explicitly removes an existing `c:clrMapOvr`; an empty object
3728
+ * is treated the same as `null` on save.
3729
+ */
3730
+ clrMapOvr?: Record<string, string> | null;
3731
+ /**
3732
+ * Whether the chart's own cached numeric values use the 1904 date epoch
3733
+ * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
3734
+ * any embedded workbook's `workbookPr/@date1904` (a chart can lack an
3735
+ * embedded workbook entirely, or its cache can legitimately differ from the
3736
+ * workbook's current setting). Absent when the source XML omits the
3737
+ * element, in which case the 1900 system applies (the schema default).
3738
+ */
3739
+ date1904?: boolean;
3740
+ /**
3741
+ * PowerPoint's "Rounded corners" chart-area option
3742
+ * (`c:chartSpace/c:roundedCorners/@val`, default `false`). Absent when the
3743
+ * source XML omits the element.
3358
3744
  */
3359
- clrMapOvr?: Record<string, string>;
3745
+ roundedCorners?: boolean;
3746
+ /**
3747
+ * 3-D chart depth/spacing along the series axis, as a percentage
3748
+ * (`c:gapDepth/@val`, `ST_GapAmount`, 0 through 500). Legal on
3749
+ * `bar3D`/`area3D`/`line3D`/`surface` chart-type containers only. Read-only
3750
+ * for rendering, matching {@link barGapWidth}/{@link barOverlap}: save
3751
+ * round-trips it via the preserved chart XML rather than a typed edit path.
3752
+ */
3753
+ gapDepth?: number;
3754
+ /**
3755
+ * Parsed Office 2013+ chart-style part (`ppt/charts/style#.xml`,
3756
+ * `cs:chartStyle`), providing per-element font/line/fill defaults for
3757
+ * whichever built-in "Chart Styles" gallery entry ({@link PptxChartStyle.styleId})
3758
+ * is active. Absent when the chart has no such part (common for
3759
+ * automation-authored charts, where PowerPoint still implies style 2's
3760
+ * look via its own bundled defaults).
3761
+ */
3762
+ chartStyleDefinition?: PptxChartStyleDefinition;
3360
3763
  }
3361
3764
  //#endregion
3362
3765
  //#region src/core/types/image.d.ts
@@ -3880,6 +4283,52 @@ interface MediaCaptionTrack {
3880
4283
  isDefault?: boolean;
3881
4284
  }
3882
4285
  //#endregion
4286
+ //#region src/core/types/smart-art-chrome.d.ts
4287
+ /**
4288
+ * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4289
+ *
4290
+ * @example
4291
+ * ```ts
4292
+ * const chrome: PptxSmartArtChrome = {
4293
+ * backgroundColor: "#F0F0F0",
4294
+ * outlineColor: "#333333",
4295
+ * outlineWidth: 1,
4296
+ * };
4297
+ * // => satisfies PptxSmartArtChrome
4298
+ * ```
4299
+ */
4300
+ interface PptxSmartArtChrome {
4301
+ /**
4302
+ * Background fill colour (hex). When the real `dgm:bg` fill is a gradient
4303
+ * or pattern (see {@link PptxSmartArtChrome.backgroundFillXml}), this is an
4304
+ * APPROXIMATION (the gradient's first stop, or the pattern's foreground
4305
+ * colour) for a consumer that only wants one display colour, not the full fill.
4306
+ */
4307
+ backgroundColor?: string;
4308
+ /**
4309
+ * Raw `dgm:bg` fill XML, present only when the background is a gradient or
4310
+ * pattern fill (a solid fill is fully captured by {@link PptxSmartArtChrome.backgroundColor}
4311
+ * alone). Round-trip only: `smartart-save-chrome.ts` re-emits this verbatim
4312
+ * instead of flattening the fill to a solid colour on save.
4313
+ */
4314
+ backgroundFillXml?: PptxSmartArtRawBackgroundFill;
4315
+ /** Outline stroke colour (hex). */
4316
+ outlineColor?: string;
4317
+ /** Outline stroke width in points. */
4318
+ outlineWidth?: number;
4319
+ }
4320
+ /**
4321
+ * A `dgm:bg` fill this viewer doesn't fully model as first-class chrome
4322
+ * (gradient or pattern), preserved verbatim for round-trip. See
4323
+ * {@link PptxSmartArtChrome.backgroundFillXml}.
4324
+ */
4325
+ interface PptxSmartArtRawBackgroundFill {
4326
+ /** Local element name of the fill under `dgm:bg` (`gradFill` or `pattFill`). */
4327
+ localName: 'gradFill' | 'pattFill';
4328
+ /** The fill element's own attributes/children, as parsed. */
4329
+ xml: XmlObject;
4330
+ }
4331
+ //#endregion
3883
4332
  //#region src/core/types/smart-art-constraint-rules.d.ts
3884
4333
  type PptxSmartArtConstraintRelationship = 'self' | 'ch' | 'des';
3885
4334
  type PptxSmartArtConstraintOperator = 'none' | 'equ' | 'gte' | 'lte';
@@ -3978,6 +4427,14 @@ interface PptxSmartArtLayoutNodeShape {
3978
4427
  adjustments?: PptxSmartArtShapeAdjustment[];
3979
4428
  /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3980
4429
  hideGeometry?: boolean;
4430
+ /**
4431
+ * `dgm:shape/@lkTxEntry` (CT_Shape, boolean, default false): this node is a
4432
+ * decorative shape that should mirror its paired content node's text
4433
+ * rather than always rendering blank. See `smartart-layout-interpreter-
4434
+ * pyramid.ts`'s `arrangePyramid`, the interpreter's one existing
4435
+ * synthesized-decorative-shape call site.
4436
+ */
4437
+ lkTxEntry?: boolean;
3981
4438
  }
3982
4439
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3983
4440
  interface PptxSmartArtLayoutNode {
@@ -4205,6 +4662,13 @@ interface PptxSmartArtNode {
4205
4662
  * generic cycled palette (see `applySmartArtRoleColors`).
4206
4663
  */
4207
4664
  styleRole?: string;
4665
+ /**
4666
+ * `dgm:prSet/@coherent3DOff` (`CT_ElemPropSet`) resolved from the node's
4667
+ * paired presentation point: when true, this node opts out of the
4668
+ * diagram's overall coherent-3D scene rotation (a `dgm:scene3d`/`dgm:sp3d`
4669
+ * quick-style variation) applied to every other node.
4670
+ */
4671
+ coherent3DOff?: boolean;
4208
4672
  /**
4209
4673
  * Per-run text + run-properties for the node's first paragraph, captured at
4210
4674
  * parse time. When the joined run text still equals {@link text} (the node
@@ -4252,9 +4716,29 @@ interface PptxSmartArtColorListMetadata {
4252
4716
  method?: PptxSmartArtColorApplicationMethod;
4253
4717
  hueDirection?: PptxSmartArtHueDirection;
4254
4718
  }
4719
+ /**
4720
+ * A quick-style label's `a:lnRef`/`a:fillRef`/`a:effectRef`/`a:fontRef`
4721
+ * (`CT_ShapeStyle`, the same complex type an ordinary shape's `p:style`
4722
+ * uses), resolved against the theme's `fmtScheme` at parse time instead of
4723
+ * the coarse subtle/moderate/intense enum ({@link PptxSmartArtQuickStyle.effectIntensity}).
4724
+ * Only populated when a theme format scheme was available when the quick
4725
+ * style was parsed. See G13 in the 2026-09 diagram audit.
4726
+ */
4727
+ interface PptxSmartArtResolvedStyleRef {
4728
+ fillColor?: string;
4729
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'theme';
4730
+ strokeColor?: string;
4731
+ strokeWidth?: number;
4732
+ /** `a:effectRef`'s theme-resolved outer shadow colour, when the style has one. */
4733
+ shadowColor?: string;
4734
+ /** `a:fontRef`'s theme-resolved typeface (`+mn-lt`/`+mj-lt` -> the theme's actual font). */
4735
+ fontTypeface?: string;
4736
+ }
4255
4737
  /** CT_StyleLabel metadata from a quick-style definition. */
4256
4738
  interface PptxSmartArtQuickStyleLabel {
4257
4739
  name: string;
4740
+ /** Theme-resolved `dgm:style` refs for this label's role, when available. */
4741
+ resolvedStyle?: PptxSmartArtResolvedStyleRef;
4258
4742
  }
4259
4743
  /** CT_CTStyleLabel metadata from a color-transform definition. */
4260
4744
  interface PptxSmartArtColorStyleLabel {
@@ -4517,27 +5001,6 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
4517
5001
  textFrameWidth?: number;
4518
5002
  textFrameHeight?: number;
4519
5003
  }
4520
- /**
4521
- * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4522
- *
4523
- * @example
4524
- * ```ts
4525
- * const chrome: PptxSmartArtChrome = {
4526
- * backgroundColor: "#F0F0F0",
4527
- * outlineColor: "#333333",
4528
- * outlineWidth: 1,
4529
- * };
4530
- * // => satisfies PptxSmartArtChrome
4531
- * ```
4532
- */
4533
- interface PptxSmartArtChrome {
4534
- /** Background fill colour (hex). */
4535
- backgroundColor?: string;
4536
- /** Outline stroke colour (hex). */
4537
- outlineColor?: string;
4538
- /** Outline stroke width in points. */
4539
- outlineWidth?: number;
4540
- }
4541
5004
  /**
4542
5005
  * Presentation layout variables from `dgm:prSet/dgm:presLayoutVars` (data model)
4543
5006
  * or `dgm:varLst` (layout definition defaults).
@@ -4641,13 +5104,55 @@ interface PptxSmartArtData {
4641
5104
  drawingDirty?: boolean;
4642
5105
  }
4643
5106
  //#endregion
4644
- //#region src/core/types/table.d.ts
5107
+ //#region src/core/types/table-style-edit.d.ts
5108
+ /**
5109
+ * A `a:fillRef`/`a:lnRef`/`a:effectRef`-style style-matrix reference: an
5110
+ * index into the theme's format scheme (`a:fmtScheme/a:fillStyleLst`, 1-based
5111
+ * per ECMA-376 §20.1.4.1.12) plus an optional colour transform child.
5112
+ *
5113
+ * Distinct from an already-resolved {@link ParsedTableStyleFill}: a fill ref
5114
+ * points AT a theme style-matrix entry rather than carrying a colour choice
5115
+ * directly, though the two commonly appear together (`<a:fillRef idx="2">
5116
+ * <a:schemeClr val="accent1"/></a:fillRef>`).
5117
+ *
5118
+ * @example
5119
+ * ```ts
5120
+ * const ref: ParsedTableFillRef = { idx: 2, color: { schemeColor: 'accent1' } };
5121
+ * // => satisfies ParsedTableFillRef
5122
+ * ```
5123
+ */
5124
+ interface ParsedTableFillRef {
5125
+ /** 1-based index into the theme format scheme's fill style list. */
5126
+ idx: number;
5127
+ /** Colour transform child (`a:schemeClr`/`a:srgbClr`) applied to the referenced style. */
5128
+ color?: ParsedTableStyleFill;
5129
+ }
4645
5130
  /**
4646
- * Table types: cell styling, cell data, rows, table data, and the parsed
4647
- * table style map from `ppt/tableStyles.xml`.
5131
+ * One leaf (or `effectDag`-wrapped) node of an `a:effectLst`/`a:effectDag`
5132
+ * effect chain, kept mostly opaque: {@link kind} names the OOXML element so a
5133
+ * consumer can recognise common effects (`outerShdw`, `glow`, `softEdge`,
5134
+ * `reflection`, `blur`, `innerShdw`, `prstShdw`, `fillOverlay`, `alphaModFix`,
5135
+ * `alphaInv`, `grayscl`, `biLevel`, `duotone`, `hsl`, `lum`, `tint`) without
5136
+ * this module re-deriving the full shape-effect taxonomy already modelled on
5137
+ * `ShapeStyle`; {@link xml} preserves the node verbatim for lossless re-emit.
4648
5138
  *
4649
- * @module pptx-types/table
5139
+ * @example
5140
+ * ```ts
5141
+ * const effect: ParsedTableStyleEffect = {
5142
+ * kind: 'outerShdw',
5143
+ * xml: { '@_blurRad': '40000', '@_dist': '20000', '@_dir': '5400000' },
5144
+ * };
5145
+ * // => satisfies ParsedTableStyleEffect
5146
+ * ```
4650
5147
  */
5148
+ interface ParsedTableStyleEffect {
5149
+ /** The OOXML element's local name, e.g. `outerShdw`, `glow`, `softEdge`. */
5150
+ kind: string;
5151
+ /** Verbatim XML node (attributes + children) for lossless round-trip. */
5152
+ xml: XmlObject;
5153
+ }
5154
+ //#endregion
5155
+ //#region src/core/types/table.d.ts
4651
5156
  /**
4652
5157
  * Per-cell visual style for a table cell.
4653
5158
  *
@@ -4684,6 +5189,14 @@ interface PptxTableCellStyle {
4684
5189
  * future expansion alongside the run-properties round-trip path.
4685
5190
  */
4686
5191
  colorXml?: XmlObject;
5192
+ /**
5193
+ * Typed theme colour reference for the cell text colour, set when
5194
+ * {@link colorXml} is a plain `a:schemeClr`. Wins on save, mirroring
5195
+ * `TextStyle.colorRef`. Distinct from {@link ParsedTableStyleFill.schemeColor},
5196
+ * which describes a `ppt/tableStyles.xml` section fill rather than an
5197
+ * individual cell override.
5198
+ */
5199
+ colorRef?: PptxThemeColorRef;
4687
5200
  backgroundColor?: string;
4688
5201
  /**
4689
5202
  * Raw XML colour-choice node preserved from cell `a:tcPr/a:solidFill` for
@@ -4691,6 +5204,12 @@ interface PptxTableCellStyle {
4691
5204
  * {@link backgroundColor} still matches the original colour.
4692
5205
  */
4693
5206
  backgroundColorXml?: XmlObject;
5207
+ /**
5208
+ * Typed theme colour reference for the cell fill, set when
5209
+ * {@link backgroundColorXml} is a plain `a:schemeClr`. Wins on save,
5210
+ * mirroring `ShapeStyle.fillColorRef`.
5211
+ */
5212
+ backgroundColorRef?: PptxThemeColorRef;
4694
5213
  borderColor?: string;
4695
5214
  /** Top border width in px. */
4696
5215
  borderTopWidth?: number;
@@ -4994,6 +5513,24 @@ interface PptxTableData {
4994
5513
  bandColCycle?: number;
4995
5514
  /** Right-to-left table layout from `a:tblPr/@rtl`. */
4996
5515
  rtl?: boolean;
5516
+ /**
5517
+ * `a:tblPr`'s OWN fill (`CT_TableProperties` §21.1.3.15's
5518
+ * `EG_FillProperties`), independent of any `a:tblStyleLst`-referenced style
5519
+ * or that style's `a:tblBg`. Applied as the lowest-priority fill layer,
5520
+ * beneath the table style's `wholeTbl` fill. Real PowerPoint decks route
5521
+ * table appearance through `tableStyleId` instead, so this mainly matters
5522
+ * for non-PowerPoint authoring tools (issue G6).
5523
+ */
5524
+ tableFill?: ParsedTableStyleFill;
5525
+ /**
5526
+ * `a:tblPr`'s own `a:effectLst` (or `a:effectDag`) effect chain,
5527
+ * independent of the referenced table style, decomposed into a typed
5528
+ * sequence of {@link ParsedTableStyleEffect} nodes (issue G6). Each node
5529
+ * keeps its own XML verbatim for lossless round-trip; empty array is
5530
+ * normalised to `undefined` by the parser so `tableEffects` is only ever
5531
+ * present when there is at least one effect.
5532
+ */
5533
+ tableEffects?: ParsedTableStyleEffect[];
4997
5534
  }
4998
5535
  /**
4999
5536
  * A single fill reference within a table style section.
@@ -5115,7 +5652,7 @@ interface ParsedTableStyleText {
5115
5652
  * A single border side within a table style's `a:tcStyle/a:tcBdr`.
5116
5653
  *
5117
5654
  * Corresponds to one of `a:left`, `a:right`, `a:top`, `a:bottom`,
5118
- * `a:insideH`, `a:insideV`, `a:tl2br`, `a:bl2tr` (each a
5655
+ * `a:insideH`, `a:insideV`, `a:tl2br`, `a:tr2bl` (each a
5119
5656
  * `CT_ThemeableLineStyle` wrapping an `a:ln`).
5120
5657
  *
5121
5658
  * @example
@@ -5155,19 +5692,34 @@ interface ParsedTableStyleBorders {
5155
5692
  insideV?: ParsedTableStyleBorder;
5156
5693
  /** Top-left to bottom-right diagonal. */
5157
5694
  tl2br?: ParsedTableStyleBorder;
5158
- /** Bottom-left to top-right diagonal. */
5159
- bl2tr?: ParsedTableStyleBorder;
5695
+ /**
5696
+ * Top-right to bottom-left diagonal (`a:tr2bl`, ECMA-376's
5697
+ * `CT_TableCellBorderStyle` sequence: left/right/top/bottom/insideH/
5698
+ * insideV/tl2br/tr2bl). The field keeps its historical `bl2tr` spelling
5699
+ * only in the sense that it names the same geometric anti-diagonal line
5700
+ * (top-right-to-bottom-left and bottom-left-to-top-right describe one
5701
+ * undirected diagonal); the parser accepts the real `a:tr2bl` element and,
5702
+ * leniently, a legacy `a:bl2tr` this app previously wrote (issue G4).
5703
+ */
5704
+ tr2bl?: ParsedTableStyleBorder;
5160
5705
  }
5161
5706
  /**
5162
5707
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
5163
5708
  *
5164
- * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Currently
5165
- * captures only the resolved scheme-fill colour (verbatim XML for fill
5166
- * / effect references is preserved separately by the save path).
5709
+ * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Captures the
5710
+ * resolved scheme-fill colour, an unresolved style-matrix `a:fillRef`, and a
5711
+ * presence flag for effects (verbatim XML for the effect list is preserved
5712
+ * separately by the save path).
5167
5713
  */
5168
5714
  interface ParsedTableBackground {
5169
5715
  /** Solid fill (resolved from `a:fill > a:solidFill > a:schemeClr`). */
5170
5716
  fill?: ParsedTableStyleFill;
5717
+ /**
5718
+ * Style-matrix fill reference (`<a:fillRef idx="N">...</a:fillRef>`),
5719
+ * mutually exclusive with {@link fill} (`a:fill` is the choice sibling of
5720
+ * `a:fillRef` in `CT_TableBackgroundStyle`).
5721
+ */
5722
+ fillRef?: ParsedTableFillRef;
5171
5723
  /** Has an `a:effectLst` child that should be round-tripped. */
5172
5724
  hasEffectLst?: boolean;
5173
5725
  }
@@ -5224,6 +5776,26 @@ interface ParsedTableStyleEntry {
5224
5776
  swCellText?: ParsedTableStyleText;
5225
5777
  neCellText?: ParsedTableStyleText;
5226
5778
  nwCellText?: ParsedTableStyleText;
5779
+ /**
5780
+ * Per-role 3D bevel + lighting from `a:tcStyle/a:cell3D` (CT_Cell3D),
5781
+ * distinct from the per-cell `a:tcPr/a:cell3D` {@link PptxTableCellStyle}
5782
+ * already supports. None of PowerPoint's 74 built-in gallery styles use
5783
+ * this (0 hits in the built-in catalogue), so it only matters for a
5784
+ * hand-authored or third-party table style.
5785
+ */
5786
+ wholeTblCell3D?: PptxTableCell3D;
5787
+ firstRowCell3D?: PptxTableCell3D;
5788
+ lastRowCell3D?: PptxTableCell3D;
5789
+ firstColCell3D?: PptxTableCell3D;
5790
+ lastColCell3D?: PptxTableCell3D;
5791
+ band1HCell3D?: PptxTableCell3D;
5792
+ band2HCell3D?: PptxTableCell3D;
5793
+ band1VCell3D?: PptxTableCell3D;
5794
+ band2VCell3D?: PptxTableCell3D;
5795
+ seCellCell3D?: PptxTableCell3D;
5796
+ swCellCell3D?: PptxTableCell3D;
5797
+ neCellCell3D?: PptxTableCell3D;
5798
+ nwCellCell3D?: PptxTableCell3D;
5227
5799
  }
5228
5800
  /**
5229
5801
  * Map of GUID → table style entry.
@@ -5246,6 +5818,38 @@ interface ParsedTableStyleEntry {
5246
5818
  type ParsedTableStyleMap = Record<string, ParsedTableStyleEntry>;
5247
5819
  //#endregion
5248
5820
  //#region src/core/types/elements.d.ts
5821
+ /**
5822
+ * Accessibility metadata from `p:cNvPr/a:extLst`'s "Mark as decorative"
5823
+ * vendor extension (issue G16). PowerPoint's Alt Text pane writes
5824
+ * `a:ext[@uri='{C183D7F6-B498-43B3-948B-1728B52AA6E4}']/adec:decorative
5825
+ * val="1"` when a shape or image is marked decorative; mixed into the
5826
+ * element variants whose `p:cNvPr` that pane covers.
5827
+ */
5828
+ interface PptxAccessibilityProperties {
5829
+ /**
5830
+ * Whether the element is marked decorative. When true, alt text /
5831
+ * aria-label / Markdown export should skip describing the element even
5832
+ * when {@link PptxImageProperties.altText} (or similar) is present.
5833
+ */
5834
+ isDecorative?: boolean;
5835
+ }
5836
+ /**
5837
+ * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5838
+ * property distinct from `a:picLocks`.
5839
+ */
5840
+ interface PptxPictureNonVisualProperties {
5841
+ /**
5842
+ * `a:cNvPicPr/@preferRelativeResize` (ST_Boolean, defaults to `true` when
5843
+ * absent). Controls whether a picture's crop rectangle is reinterpreted
5844
+ * relative to the picture's ORIGINAL dimensions or its CURRENT
5845
+ * (already-resized) dimensions when it is resized again after being
5846
+ * cropped. Parsed and round-tripped for now; not yet wired into
5847
+ * resize-after-crop arithmetic (this app always uses current-size
5848
+ * semantics, which only diverges from `preferRelativeResize="0"` on a
5849
+ * second resize after a crop).
5850
+ */
5851
+ preferRelativeResize?: boolean;
5852
+ }
5249
5853
  /**
5250
5854
  * A text box — a plain rectangle containing text, typically with no
5251
5855
  * visible fill or stroke.
@@ -5279,7 +5883,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5279
5883
  * // => satisfies ShapePptxElement
5280
5884
  * ```
5281
5885
  */
5282
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties {
5886
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
5283
5887
  type: 'shape';
5284
5888
  }
5285
5889
  /**
@@ -5318,7 +5922,7 @@ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, Pptx
5318
5922
  * // => satisfies ImagePptxElement
5319
5923
  * ```
5320
5924
  */
5321
- interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5925
+ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5322
5926
  type: 'image';
5323
5927
  }
5324
5928
  /**
@@ -5327,7 +5931,7 @@ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCus
5327
5931
  * Functionally identical to {@link ImagePptxElement} but distinguished by
5328
5932
  * the `type` discriminant for semantic clarity.
5329
5933
  */
5330
- interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5934
+ interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5331
5935
  type: 'picture';
5332
5936
  }
5333
5937
  /**
@@ -5367,6 +5971,13 @@ interface TablePptxElement extends PptxElementBase {
5367
5971
  type: 'table';
5368
5972
  /** Parsed table cell data for editing. */
5369
5973
  tableData?: PptxTableData;
5974
+ /**
5975
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`, the
5976
+ * same non-visual-properties attribute a picture's alt text comes from.
5977
+ */
5978
+ altText?: string;
5979
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
5980
+ title?: string;
5370
5981
  /**
5371
5982
  * Unrecognised extensions captured from `a:graphicData/a:extLst` so they
5372
5983
  * round-trip losslessly. See {@link PptxGraphicFrameExtension}.
@@ -5382,6 +5993,10 @@ interface TablePptxElement extends PptxElementBase {
5382
5993
  interface ChartPptxElement extends PptxElementBase {
5383
5994
  type: 'chart';
5384
5995
  chartData?: PptxChartData;
5996
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
5997
+ altText?: string;
5998
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
5999
+ title?: string;
5385
6000
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5386
6001
  extensionXml?: PptxGraphicFrameExtension[];
5387
6002
  }
@@ -5399,6 +6014,10 @@ interface ChartPptxElement extends PptxElementBase {
5399
6014
  interface SmartArtPptxElement extends PptxElementBase {
5400
6015
  type: 'smartArt';
5401
6016
  smartArtData?: PptxSmartArtData;
6017
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6018
+ altText?: string;
6019
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6020
+ title?: string;
5402
6021
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5403
6022
  extensionXml?: PptxGraphicFrameExtension[];
5404
6023
  }
@@ -5477,6 +6096,18 @@ interface OlePptxElement extends PptxElementBase {
5477
6096
  * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5478
6097
  */
5479
6098
  oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
6099
+ /**
6100
+ * `p:link/@updateAutomatic` (`CT_OleObjectLink`, ECMA-376 §19.3.2.4):
6101
+ * whether a LINKED OLE object refreshes automatically from its source
6102
+ * (PowerPoint's Edit Links dialog "Automatic" vs. "Manual" radio buttons).
6103
+ * Only meaningful when {@link isLinked} is `true`. The schema default is
6104
+ * `false`; `undefined` means the source authored no explicit value.
6105
+ */
6106
+ oleUpdateAutomatic?: boolean;
6107
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6108
+ altText?: string;
6109
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6110
+ title?: string;
5480
6111
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5481
6112
  extensionXml?: PptxGraphicFrameExtension[];
5482
6113
  }
@@ -5568,6 +6199,15 @@ interface MediaPptxElement extends PptxElementBase {
5568
6199
  * (`r:embed`). Defaults to embedded when undefined.
5569
6200
  */
5570
6201
  isLinked?: boolean;
6202
+ /**
6203
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`.
6204
+ * Only populated for the `p:graphicFrame`-shaped (SDK-created) media
6205
+ * form; a `p:pic`-shaped media element's alt text is not currently
6206
+ * parsed (see `PptxHandlerRuntimePictureParsing.ts`).
6207
+ */
6208
+ altText?: string;
6209
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. Same scope note as {@link altText}. */
6210
+ title?: string;
5571
6211
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5572
6212
  extensionXml?: PptxGraphicFrameExtension[];
5573
6213
  }
@@ -6061,12 +6701,63 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
6061
6701
  * is preserved alongside other animations.
6062
6702
  */
6063
6703
  type PptxNativeAnimationKind = 'media';
6704
+ /**
6705
+ * `p:spTgt/p:graphicEl` (CT_TLGraphicalObjectBuildElement, ECMA-376 S19.5.34):
6706
+ * identifies exactly which series/category/element of a chart or diagram
6707
+ * build a per-stage effect reveals, when a deck authors one effect per stage
6708
+ * instead of a single staged `p:bldGraphic` reveal.
6709
+ */
6710
+ interface PptxAnimationGraphicElementTarget {
6711
+ /** Which graphic kind: `p:dgm` (diagram) or `p:chart`. */
6712
+ kind: 'dgm' | 'chart';
6713
+ /** `@_seriesIdx`, 0-based series index, when the target is series-scoped. */
6714
+ seriesIdx?: number;
6715
+ /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6716
+ categoryIdx?: number;
6717
+ /**
6718
+ * `p:dgm/@_id` (CT_TLBuildDiagram, ECMA-376 S19.5.10): the diagram DATA MODEL
6719
+ * point id (`dgm:pt/@modelId`) this per-stage effect reveals, when a
6720
+ * `p:bldDgm` build authors one effect per node instead of a single staged
6721
+ * reveal. `dgm`-kind targets only; a `chart`-kind target never carries this.
6722
+ * Matches `PptxSmartArtNode.id` (parsed from the same `@modelId`), so a
6723
+ * diagram renderer can reveal the exact authored node.
6724
+ */
6725
+ id?: string;
6726
+ /**
6727
+ * `@_bldStep`: `ST_TLChartBuildStep` (`category` / `categoryEl` / `series` /
6728
+ * `seriesEl`) for a `chart`-kind target, or `ST_TLDiagramBuildStep`
6729
+ * (`sp` / `bg`) for a `dgm`-kind target.
6730
+ */
6731
+ bldStep?: string;
6732
+ }
6733
+ /**
6734
+ * `p:spTgt/p:oleChartEl` (CT_TLOleChartTargetElement, ECMA-376 S19.5.44):
6735
+ * legacy pre-DrawingML OLE Graph chart sub-element targeting.
6736
+ */
6737
+ interface PptxAnimationOleChartElementTarget {
6738
+ /** `@_type` (ST_TLOleChartSubelementType): entireChart / series / category / ... */
6739
+ subelementType: string;
6740
+ /** `@_lvl`, optional sub-element level. */
6741
+ level?: number;
6742
+ }
6064
6743
  /** A target selected by `p:tgtEl` in the PresentationML timing model. */
6065
6744
  type PptxAnimationTarget = {
6066
6745
  type: 'shape';
6067
6746
  shapeId: string;
6068
6747
  /** Whether `p:spTgt/p:bg` limits the effect to the shape background. */
6069
6748
  backgroundOnly?: boolean;
6749
+ /**
6750
+ * `p:spTgt/p:subSp/@_spid`: the id of a shape NESTED inside the group
6751
+ * named by {@link shapeId} (CT_TLSubShapeId, ECMA-376 S19.5.71).
6752
+ * PowerPoint authors this when a user animates one member of a group
6753
+ * without ungrouping it: `shapeId` stays the outer group's id for
6754
+ * round-trip, but this sub-shape is the real playback target.
6755
+ */
6756
+ subShapeId?: string;
6757
+ /** `p:spTgt/p:graphicEl`: chart/diagram series/category/element target. */
6758
+ graphicElement?: PptxAnimationGraphicElementTarget;
6759
+ /** `p:spTgt/p:oleChartEl`: legacy OLE chart sub-element target. */
6760
+ oleChartElement?: PptxAnimationOleChartElementTarget;
6070
6761
  rawXml?: XmlObject;
6071
6762
  } | {
6072
6763
  type: 'slide';
@@ -6446,6 +7137,74 @@ interface PptxNativeAnimation {
6446
7137
  * PowerPoint that only emit the SMIL-style filter string.
6447
7138
  */
6448
7139
  effectFilter?: PptxAnimationEffectFilter;
7140
+ /**
7141
+ * This effect's own `p:cTn/@_id` (a raw OOXML time-node id, not a shape
7142
+ * id). Lets playback resolve a `p:cond/@tn` dependency (see
7143
+ * {@link AnimationCondition.targetTimeNodeId}) against the SPECIFIC node
7144
+ * it names rather than assuming it is always the positionally-previous
7145
+ * effect. Absent when the node carried no `@_id`.
7146
+ */
7147
+ nodeId?: number;
7148
+ /**
7149
+ * Interpolation mode for this effect's PRIMARY `p:anim`-family behaviour
7150
+ * (the same node {@link keyframes}/{@link attrName} were read from), from
7151
+ * `@_calcmode` (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2). See
7152
+ * {@link PptxAttributeAnimation.calcMode} for the per-component version.
7153
+ */
7154
+ calcMode?: 'discrete' | 'lin' | 'fmla';
7155
+ /**
7156
+ * `p:cBhvr/@_additive` (ST_TLBehaviorAdditiveType, ECMA-376 S19.5.4):
7157
+ * controls how this behaviour's value composites with sibling behaviours
7158
+ * driving the same attribute on the same target. `sum` accumulates
7159
+ * (e.g. a combined scale+rotate), `repl`/`base`/`none`/`mult` replace or
7160
+ * otherwise combine. Absent means the OOXML default (`base`).
7161
+ */
7162
+ cBhvrAdditive?: 'base' | 'sum' | 'repl' | 'mult' | 'none';
7163
+ /**
7164
+ * `p:cBhvr/@_accumulate` (ST_TLBehaviorAccumulateType): `always` means
7165
+ * each `p:cTn/@repeatCount` repeat starts from the PREVIOUS repeat's end
7166
+ * value (e.g. a 3x Spin totals 1080deg instead of replaying 0-360 three
7167
+ * times); `none` (the OOXML default) resets every repeat.
7168
+ */
7169
+ cBhvrAccumulate?: 'none' | 'always';
7170
+ /**
7171
+ * `p:cBhvr/@_xfrmType` (only meaningful on `p:animMotion`): `point`
7172
+ * (default) or `img`, a legacy compatibility hint. Round-tripped only.
7173
+ */
7174
+ cBhvrXfrmType?: 'point' | 'img';
7175
+ /**
7176
+ * `p:cBhvr/@_override` (ST_TLBehaviorOverrideType): `normal` (default) or
7177
+ * `childStyle`, a legacy compatibility hint. Round-tripped only.
7178
+ */
7179
+ cBhvrOverride?: 'normal' | 'childStyle';
7180
+ /**
7181
+ * `p:set` discrete attribute assignments composed alongside this effect
7182
+ * (ECMA-376 S19.5.79 CT_TLSetBehavior): an instantaneous (non-interpolated)
7183
+ * value change, as opposed to {@link attributeAnimations}'s `p:anim`
7184
+ * keyframe ramps. PowerPoint authors several font-style emphasis effects
7185
+ * this way (Bold Reveal, Underline, Bold Flash, Change Font Size), since
7186
+ * "on/off" or "size N" has nothing to interpolate. Not yet consulted by
7187
+ * shared playback (round-trip/typed-model only so far).
7188
+ */
7189
+ setAnimations?: PptxSetAnimation[];
7190
+ }
7191
+ /**
7192
+ * One `p:set` discrete (non-interpolated) attribute assignment composed
7193
+ * alongside an authored effect. See {@link PptxNativeAnimation.setAnimations}.
7194
+ *
7195
+ * @see ECMA-376 S19.5.79 CT_TLSetBehavior
7196
+ */
7197
+ interface PptxSetAnimation {
7198
+ /** Lowercased target attribute from `p:cBhvr/p:attrNameLst/p:attrName`. */
7199
+ attrName: string;
7200
+ /** Decoded value from `p:to` (same variant shape as a `p:tav/p:val`). */
7201
+ value: string | boolean | number;
7202
+ /** Discriminant indicating which `p:to` child carried the value. */
7203
+ valueType: 'str' | 'bool' | 'int' | 'flt' | 'clr';
7204
+ /** Duration from this behaviour's nested `p:cTn/@dur`. */
7205
+ durationMs?: number;
7206
+ /** Start offset from this behaviour's nested `p:stCondLst`. */
7207
+ delayMs?: number;
6449
7208
  }
6450
7209
  /**
6451
7210
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -6512,6 +7271,14 @@ interface PptxAttributeAnimation {
6512
7271
  durationMs?: number;
6513
7272
  /** Start offset from this behaviour's nested `p:stCondLst`. */
6514
7273
  delayMs?: number;
7274
+ /**
7275
+ * Interpolation mode from this behaviour's own `@_calcmode`
7276
+ * (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2): `discrete` snaps to
7277
+ * each `p:tav` stop with no interpolation, `lin` (the OOXML default)
7278
+ * interpolates linearly, `fmla` evaluates `p:tav/@fmla` (not consulted at
7279
+ * playback here; formulas are round-tripped only). Absent means `lin`.
7280
+ */
7281
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6515
7282
  }
6516
7283
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
6517
7284
  interface PptxHslColorDelta {
@@ -6578,7 +7345,7 @@ interface PptxTextAnimationTarget {
6578
7345
  * These map directly to OOXML condition event attribute values
6579
7346
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
6580
7347
  */
6581
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio';
7348
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
6582
7349
  /**
6583
7350
  * Structured representation of a single OOXML animation condition
6584
7351
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -6705,6 +7472,16 @@ interface PptxElementAnimation {
6705
7472
  * OOXML equivalent and is not required for playback.
6706
7473
  */
6707
7474
  soundFileName?: string;
7475
+ /**
7476
+ * Per-build-level timing template(s) from the {@link sequence}'s own
7477
+ * `p:bldP/p:tmplLst` (ECMA-376 §19.5.84), carried over from the loaded
7478
+ * `PptxNativeAnimation.buildTemplates` this element animation was derived
7479
+ * from so a full timing-tree rebuild (`PptxAnimationWriteService`'s
7480
+ * `buildTimingXml`, when the slide had no prior `p:timing`) can re-emit
7481
+ * them instead of silently dropping the deck's authored per-level
7482
+ * defaults. Absent when {@link sequence} carries no such template.
7483
+ */
7484
+ buildTemplates?: PptxTimingTemplate[];
6708
7485
  }
6709
7486
  /**
6710
7487
  * A read-only anchor representing one of the deck's own effect groups: a
@@ -7621,6 +8398,22 @@ interface PptxActiveXControl {
7621
8398
  name?: string;
7622
8399
  /** Shape ID this control is linked to (from @spid). */
7623
8400
  shapeId?: string;
8401
+ /**
8402
+ * `p:control/@showAsIcon` (CT_Control, ECMA-376 S19.3.1.2): whether the
8403
+ * control renders as its static icon rather than its live appearance.
8404
+ * `undefined` when the source authored no explicit value (schema default
8405
+ * `false`).
8406
+ */
8407
+ showAsIcon?: boolean;
8408
+ /**
8409
+ * `p:control/@imgW` in EMU (ST_PositiveCoordinate32): the width the host
8410
+ * reserves for the control's icon/preview image. Distinct from
8411
+ * {@link width}, which is the fallback `p:pic`'s own `a:ext/@cx` in px;
8412
+ * `imgW`/`imgH` are direct attributes on `p:control` itself.
8413
+ */
8414
+ imgWidthEmu?: number;
8415
+ /** `p:control/@imgH` in EMU (ST_PositiveCoordinate32). @see imgWidthEmu */
8416
+ imgHeightEmu?: number;
7624
8417
  /** X position (px) of the control's fallback picture, if present. */
7625
8418
  x?: number;
7626
8419
  /** Y position (px) of the control's fallback picture, if present. */
@@ -7918,10 +8711,32 @@ interface PptxPresentationProperties {
7918
8711
  printProperties?: PptxPresentationPrintProperties | null;
7919
8712
  /** Most-recently-used colours from the presentation palette. */
7920
8713
  mruColors?: string[];
7921
- /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
8714
+ /**
8715
+ * Pen colour for presentation mode annotations (from `p:showPr/p:penClr`).
8716
+ * `p:penClr` is a full `EG_ColorChoice` (P1-G2): a scheme/preset/system
8717
+ * swatch resolves to a hex string here just like a direct `a:srgbClr`.
8718
+ */
7922
8719
  penColor?: string;
8720
+ /**
8721
+ * The resolved hex value {@link penColor} had at parse time, and the
8722
+ * original `p:penClr` colour-choice XML node, preserved so a save that
8723
+ * never touches the pen colour re-emits the original scheme/preset
8724
+ * reference verbatim instead of flattening it to a baked `a:srgbClr`.
8725
+ * Internal round-trip bookkeeping; not meant to be set by API callers.
8726
+ */
8727
+ penColorOriginal?: string;
8728
+ /** @see penColorOriginal */
8729
+ penColorXml?: XmlObject;
7923
8730
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
7924
8731
  kioskRestartTime?: number;
8732
+ /**
8733
+ * `p:showPr/p:browse/@showScrollbar` (CT_ShowInfoBrowse §19.2.1.10 /
8734
+ * §19.3.1.43), the "Show scrollbar" checkbox in PowerPoint's Set Up Show
8735
+ * dialog. Only meaningful when `showType` is `"browsed"`; the schema
8736
+ * default is `true`. `undefined` means the source authored no explicit
8737
+ * value (or `showType` is not `"browsed"`).
8738
+ */
8739
+ showScrollbar?: boolean;
7925
8740
  }
7926
8741
  /**
7927
8742
  * Slide dimensions from `p:sldSz` (CT_SlideSize, ECMA-376 §19.2.1.39).
@@ -8055,6 +8870,34 @@ interface PptxPhotoAlbum {
8055
8870
  layout?: string;
8056
8871
  /** Frame style applied to each photo (e.g. "frameStyle1"). */
8057
8872
  frame?: string;
8873
+ /**
8874
+ * `p:photoAlbum/@isPhoto` (ECMA-376 S19.2.1.27, CT_PhotoAlbum): whether
8875
+ * the pictures placed by the album wizard are real photographs, as
8876
+ * opposed to clip art or other embedded images. `undefined` when the
8877
+ * source authored no explicit value (schema default `false`); this is a
8878
+ * purely declarative wizard-provenance flag, not something this library
8879
+ * gates any layout/frame behaviour on.
8880
+ */
8881
+ isPhoto?: boolean;
8882
+ }
8883
+ /**
8884
+ * A recognizer-owned `p:smartTags` reference from `presentation.xml`
8885
+ * (CT_SmartTags, ECMA-376 S19.2.1.42): a bare relationship id pointing at a
8886
+ * legacy Office "Smart Tags" recognizer part, distinct from the
8887
+ * user-authored `p:tags` construct (see {@link PptxTagCollection}).
8888
+ *
8889
+ * This library has no data model for recognizer part CONTENT (there is no
8890
+ * way to create, inspect, or edit one through the public API), so this type
8891
+ * only captures enough to preserve an authored reference losslessly: the
8892
+ * relationship id and, when resolvable, the target part path.
8893
+ */
8894
+ interface PptxSmartTagsReference {
8895
+ /** Relationship id from `p:smartTags/@r:id`. */
8896
+ relId: string;
8897
+ /** Resolved ZIP path of the referenced recognizer part, when resolvable. */
8898
+ targetPath?: string;
8899
+ /** Raw `p:smartTags` XML retained for lossless round-trip. */
8900
+ rawXml?: XmlObject;
8058
8901
  }
8059
8902
  /**
8060
8903
  * East Asian line-break (kinsoku) settings from `p:kinsoku` in `presentation.xml`.
@@ -8119,6 +8962,13 @@ interface PptxData {
8119
8962
  themeOptions?: PptxThemeOption[];
8120
8963
  /** Parsed table style definitions from `ppt/tableStyles.xml`. */
8121
8964
  tableStyleMap?: ParsedTableStyleMap;
8965
+ /**
8966
+ * The current default table style GUID (`ppt/tableStyles.xml`'s
8967
+ * `a:tblStyleLst/@def`): the style PowerPoint applies to a newly inserted
8968
+ * table. Matches `PptxSaveOptions.tableStylesDefaultId` so a save call
8969
+ * that omits it can fall back to what was loaded.
8970
+ */
8971
+ tableStylesDefaultId?: string;
8122
8972
  /** Whether the presentation is password-protected. */
8123
8973
  isPasswordProtected?: boolean;
8124
8974
  /** Embedded font data (name + binary data URL) extracted from the presentation. */
@@ -8178,6 +9028,14 @@ interface PptxData {
8178
9028
  modifyVerifier?: PptxModifyVerifier;
8179
9029
  /** Photo album metadata from `p:photoAlbum` in `presentation.xml`. */
8180
9030
  photoAlbum?: PptxPhotoAlbum;
9031
+ /**
9032
+ * Legacy Smart Tags recognizer reference from `p:smartTags` in
9033
+ * `presentation.xml`. Read-only: there is no data model for the
9034
+ * recognizer part's own content, so this exists to make the reference
9035
+ * inspectable and to prove it survives a save (the owning part and its
9036
+ * relationship are preserved passively, like any other unmodelled part).
9037
+ */
9038
+ smartTags?: PptxSmartTagsReference;
8181
9039
  /** East Asian line-break settings from `p:kinsoku` in `presentation.xml`. */
8182
9040
  kinsoku?: PptxKinsoku;
8183
9041
  /** Custom XML data parts from `customXml/` in the OPC package. */
@@ -8342,6 +9200,14 @@ type FillInput = {
8342
9200
  type: 'solid';
8343
9201
  color: string;
8344
9202
  opacity?: number;
9203
+ /**
9204
+ * A theme colour to use instead of a plain hex. When set, the shape
9205
+ * saves as `<a:schemeClr>` (e.g. `{ scheme: 'accent1', lumMod: 0.8 }`
9206
+ * for "Accent 1, Lighter 80%") so it keeps following the theme after a
9207
+ * later theme change; `color` still supplies the immediate resolved
9208
+ * hex for renderers that read it directly.
9209
+ */
9210
+ themeColorRef?: PptxThemeColorRef;
8345
9211
  } | {
8346
9212
  type: 'gradient';
8347
9213
  /**
@@ -8377,6 +9243,8 @@ interface StrokeInput {
8377
9243
  opacity?: number;
8378
9244
  join?: 'round' | 'bevel' | 'miter';
8379
9245
  cap?: 'flat' | 'rnd' | 'sq';
9246
+ /** A theme colour for the outline; see {@link FillInput}'s `themeColorRef`. */
9247
+ themeColorRef?: PptxThemeColorRef;
8380
9248
  }
8381
9249
  interface ShadowInput {
8382
9250
  color?: string;
@@ -8393,6 +9261,8 @@ interface TextStyleInput {
8393
9261
  underline?: boolean;
8394
9262
  strikethrough?: boolean;
8395
9263
  color?: string;
9264
+ /** A theme colour for the run; see {@link FillInput}'s `themeColorRef`. */
9265
+ themeColorRef?: PptxThemeColorRef;
8396
9266
  alignment?: 'left' | 'center' | 'right' | 'justify';
8397
9267
  verticalAlignment?: 'top' | 'middle' | 'bottom';
8398
9268
  lineSpacing?: number;
@@ -9020,6 +9890,24 @@ interface PptxHandlerSaveOptions {
9020
9890
  * part untouched.
9021
9891
  */
9022
9892
  tableStyles?: ParsedTableStyleMap;
9893
+ /**
9894
+ * Set `ppt/tableStyles.xml`'s `<a:tblStyleLst @def>` to this style GUID
9895
+ * (normalised to uppercase-with-braces). `undefined` preserves the
9896
+ * existing default; there is no removal form (`@def` is required by the
9897
+ * schema and PowerPoint always points it at a real style). No-op when the
9898
+ * archive has no `ppt/tableStyles.xml`, same as {@link tableStyles}.
9899
+ */
9900
+ tableStylesDefaultId?: string;
9901
+ /**
9902
+ * Style GUIDs to remove from `ppt/tableStyles.xml` entirely, kept as a
9903
+ * separate opt-in list rather than inferred from omission on
9904
+ * {@link tableStyles}: that map is documented as safe to pass a PARTIAL
9905
+ * edit (only the entries a caller actually touched), so treating every
9906
+ * GUID missing from it as "delete this" would silently destroy untouched
9907
+ * styles on an ordinary targeted edit. A GUID here that is also the
9908
+ * current (or newly requested) default is left in place and skipped.
9909
+ */
9910
+ tableStylesToDelete?: string[];
9023
9911
  /**
9024
9912
  * Target output format.
9025
9913
  * - `'pptx'` (default): Standard presentation.
@@ -10069,6 +10957,62 @@ type ChartBuildMode = 'asOne' | 'bySeries' | 'byCategory' | 'byElement';
10069
10957
  * - `byLvlAtOnce` a whole level is revealed per stage (`lvlAtOnce`).
10070
10958
  */
10071
10959
  type DiagramBuildMode = 'asOne' | 'byOne' | 'byLvl' | 'byLvlAtOnce';
10960
+ /**
10961
+ * One authored `p:graphicEl` reveal unit resolved onto a chart, per
10962
+ * `TimelineStepGraphicElement`'s "both indices set" case: a single (series,
10963
+ * category) cell revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect.
10964
+ */
10965
+ interface ChartRevealPoint {
10966
+ seriesIdx: number;
10967
+ categoryIdx: number;
10968
+ }
10969
+ /**
10970
+ * Playback-time chart reveal state derived from AUTHORED `p:graphicEl`
10971
+ * indices (see `chart-reveal-descriptor`'s `resolveChartRevealDescriptor`),
10972
+ * rather than from click-count/time progress. Present on
10973
+ * {@link ElementAnimationState.chartReveal} only when every fired
10974
+ * chart-build step for the element carried index data; a renderer prefers
10975
+ * this over the progress-based `build`/`ElementBuildState` path when present,
10976
+ * since it reflects the real authored reveal set (correct even for a
10977
+ * reversed-order or gapped chart build), and falls back to `build` when
10978
+ * absent.
10979
+ */
10980
+ interface ChartRevealDescriptor {
10981
+ /**
10982
+ * Whether the chart's background/axes/gridlines/legend should currently be
10983
+ * visible: always `true` when the chart's `animateBackground` is `false`
10984
+ * ("shown throughout"), otherwise `true` from the first revealed stage
10985
+ * onward.
10986
+ */
10987
+ background: boolean;
10988
+ /** Whole series revealed by a `bldStep="series"` effect. */
10989
+ series: ReadonlySet<number>;
10990
+ /** Whole categories revealed by a `bldStep="category"` effect. */
10991
+ categories: ReadonlySet<number>;
10992
+ /** Individual cells revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect. */
10993
+ points: readonly ChartRevealPoint[];
10994
+ }
10995
+ /**
10996
+ * Playback-time SmartArt diagram reveal state derived from AUTHORED
10997
+ * `p:graphicEl/p:dgm/@id` indices (see `diagram-reveal-descriptor`'s
10998
+ * `resolveDiagramRevealDescriptor`), rather than from click-count/time
10999
+ * progress. Present on {@link ElementAnimationState.diagramReveal} only when
11000
+ * every fired diagram-build step for the element carried `p:graphicEl` data.
11001
+ * A SmartArt renderer prefers this over the progress-based `build` /
11002
+ * {@link ElementBuildState} path when present, since it reflects the real
11003
+ * authored reveal set (correct even for a reversed-order or by-branch build),
11004
+ * and falls back to `build` when absent.
11005
+ */
11006
+ interface DiagramRevealDescriptor {
11007
+ /**
11008
+ * Whether the diagram's background/connector chrome should currently be
11009
+ * visible: `true` once any node-revealing or background-revealing
11010
+ * (`bldStep="bg"`) step has fired.
11011
+ */
11012
+ background: boolean;
11013
+ /** Data-model point ids (`PptxSmartArtNode.id`) revealed so far. */
11014
+ nodeIds: ReadonlySet<string>;
11015
+ }
10072
11016
  /**
10073
11017
  * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
10074
11018
  * `progress` is the 0..1 fraction of the build revealed at the current playback
@@ -10099,6 +11043,27 @@ interface ElementAnimationState {
10099
11043
  * whole-element entrances, so existing renderers are unaffected.
10100
11044
  */
10101
11045
  build?: ElementBuildState;
11046
+ /**
11047
+ * Authored-index chart reveal state (see {@link ChartRevealDescriptor}),
11048
+ * present only when every fired chart-build step for this element carried
11049
+ * `p:graphicEl` index data. A chart renderer prefers this over `build` when
11050
+ * present; `chart-build`'s `resolveRevealedChartData` picks between the two.
11051
+ */
11052
+ chartReveal?: {
11053
+ mode: ChartBuildMode;
11054
+ descriptor: ChartRevealDescriptor;
11055
+ };
11056
+ /**
11057
+ * Authored-index SmartArt diagram reveal state (see
11058
+ * {@link DiagramRevealDescriptor}), present only when every fired
11059
+ * diagram-build step for this element carried `p:graphicEl` node-id data.
11060
+ * `diagram-build`'s `resolveRevealedSmartArtNodes` prefers this over `build`
11061
+ * when present.
11062
+ */
11063
+ diagramReveal?: {
11064
+ mode: DiagramBuildMode;
11065
+ descriptor: DiagramRevealDescriptor;
11066
+ };
10102
11067
  /**
10103
11068
  * True when an active `p:animClr` color animation targets this shape's fill.
10104
11069
  * A vector renderer should then paint the fill with `fill: inherit` so the
@@ -11336,6 +12301,8 @@ interface ToolbarProps {
11336
12301
  onUpdateElementStyle: (updates: Partial<ShapeStyle>) => void;
11337
12302
  /** How many elements the multi-select currently holds. */
11338
12303
  selectedCount: number;
12304
+ /** Whether every selected element allows `a:spLocks/@noGrp` grouping. */
12305
+ selectionGroupable: boolean;
11339
12306
  /** Open the hyperlink editor for the current selection. */
11340
12307
  onOpenHyperlinkDialog: () => void;
11341
12308
  onDuplicate: () => void;