pptx-react-viewer 3.6.0 → 3.8.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 (164) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/{AiChatPanel-WRQGJJVD.mjs → AiChatPanel-A5DCEHTO.mjs} +4 -4
  3. package/dist/AiChatPanel-A5DCEHTO.mjs.br +0 -0
  4. package/dist/AiChatPanel-A5DCEHTO.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-LEOEDIW2.js → AiChatPanel-XLQM4BQJ.js} +25 -25
  6. package/dist/AiChatPanel-XLQM4BQJ.js.br +0 -0
  7. package/dist/AiChatPanel-XLQM4BQJ.js.gz +0 -0
  8. package/dist/{Area3DChartScene-SJC2ZB6R.mjs → Area3DChartScene-5CMEMIBI.mjs} +1 -1
  9. package/dist/Area3DChartScene-5CMEMIBI.mjs.br +0 -0
  10. package/dist/Area3DChartScene-5CMEMIBI.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-3TJ2GTGI.js → Area3DChartScene-RZ3V3WOR.js} +2 -2
  12. package/dist/Area3DChartScene-RZ3V3WOR.js.br +0 -0
  13. package/dist/Area3DChartScene-RZ3V3WOR.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-SPER4LQA.mjs → Bar3DChartScene-H3MYUJKV.mjs} +1 -1
  15. package/dist/Bar3DChartScene-H3MYUJKV.mjs.br +0 -0
  16. package/dist/Bar3DChartScene-H3MYUJKV.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-2ZGOMOZO.js → Bar3DChartScene-KHCQ6TEC.js} +2 -2
  18. package/dist/Bar3DChartScene-KHCQ6TEC.js.br +0 -0
  19. package/dist/Bar3DChartScene-KHCQ6TEC.js.gz +0 -0
  20. package/dist/{Line3DChartScene-42FYFGLU.js → Line3DChartScene-QEACF3U3.js} +2 -2
  21. package/dist/Line3DChartScene-QEACF3U3.js.br +0 -0
  22. package/dist/Line3DChartScene-QEACF3U3.js.gz +0 -0
  23. package/dist/{Line3DChartScene-FH3YHPXE.mjs → Line3DChartScene-YFRPJHDX.mjs} +1 -1
  24. package/dist/Line3DChartScene-YFRPJHDX.mjs.br +0 -0
  25. package/dist/Line3DChartScene-YFRPJHDX.mjs.gz +0 -0
  26. package/dist/{Model3DScene-2BCR2YYD.mjs → Model3DScene-O24KP723.mjs} +1 -1
  27. package/dist/Model3DScene-O24KP723.mjs.br +0 -0
  28. package/dist/Model3DScene-O24KP723.mjs.gz +0 -0
  29. package/dist/{Model3DScene-EIU2GVUZ.js → Model3DScene-QQWKGJ3T.js} +2 -2
  30. package/dist/Model3DScene-QQWKGJ3T.js.br +0 -0
  31. package/dist/Model3DScene-QQWKGJ3T.js.gz +0 -0
  32. package/dist/{PieChart3DScene-QFQUJFDP.mjs → PieChart3DScene-CI6CW22C.mjs} +1 -1
  33. package/dist/PieChart3DScene-CI6CW22C.mjs.br +0 -0
  34. package/dist/PieChart3DScene-CI6CW22C.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-VQOHZPHI.js → PieChart3DScene-L3MHKQHW.js} +2 -2
  36. package/dist/PieChart3DScene-L3MHKQHW.js.br +0 -0
  37. package/dist/PieChart3DScene-L3MHKQHW.js.gz +0 -0
  38. package/dist/PowerPointViewer-Cl6jBPNw.d.ts.map +1 -1
  39. package/dist/{SurfaceChart3DScene-FTVXZN6O.js → SurfaceChart3DScene-5IER6VFW.js} +2 -2
  40. package/dist/SurfaceChart3DScene-5IER6VFW.js.br +0 -0
  41. package/dist/SurfaceChart3DScene-5IER6VFW.js.gz +0 -0
  42. package/dist/{SurfaceChart3DScene-CGXMRBCL.mjs → SurfaceChart3DScene-JUXRC3K2.mjs} +1 -1
  43. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.br +0 -0
  44. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.gz +0 -0
  45. package/dist/{audience-content-store-bR7Gs_1S.d.ts → audience-content-store-CB2WVM1K.d.ts} +12 -3
  46. package/dist/{audience-content-store-bR7Gs_1S.d.ts.map → audience-content-store-CB2WVM1K.d.ts.map} +1 -1
  47. package/dist/{chunk-NFOOONND.js → chunk-4222CHFH.js} +1944 -1299
  48. package/dist/chunk-4222CHFH.js.br +0 -0
  49. package/dist/chunk-4222CHFH.js.gz +0 -0
  50. package/dist/{chunk-ZUSYUWOV.mjs → chunk-6IMB5DNJ.mjs} +8927 -4870
  51. package/dist/chunk-6IMB5DNJ.mjs.br +0 -0
  52. package/dist/chunk-6IMB5DNJ.mjs.gz +0 -0
  53. package/dist/{chunk-ZHSBMG37.js → chunk-DE3S3UHX.js} +557 -682
  54. package/dist/chunk-DE3S3UHX.js.br +0 -0
  55. package/dist/chunk-DE3S3UHX.js.gz +0 -0
  56. package/dist/{chunk-ZWPHUPL4.js → chunk-F5NPGNMA.js} +9 -5
  57. package/dist/chunk-F5NPGNMA.js.br +0 -0
  58. package/dist/chunk-F5NPGNMA.js.gz +0 -0
  59. package/dist/{chunk-TGCSZXOG.mjs → chunk-FRZIBZTE.mjs} +57 -27
  60. package/dist/chunk-FRZIBZTE.mjs.br +0 -0
  61. package/dist/chunk-FRZIBZTE.mjs.gz +0 -0
  62. package/dist/{chunk-MZI4DG3S.js → chunk-L3ZIBQEB.js} +57 -27
  63. package/dist/chunk-L3ZIBQEB.js.br +0 -0
  64. package/dist/chunk-L3ZIBQEB.js.gz +0 -0
  65. package/dist/{chunk-FG5VQFWP.mjs → chunk-PFPKBNNZ.mjs} +761 -116
  66. package/dist/chunk-PFPKBNNZ.mjs.br +0 -0
  67. package/dist/chunk-PFPKBNNZ.mjs.gz +0 -0
  68. package/dist/{chunk-7VPDHSWF.js → chunk-QWA5YEIZ.js} +234 -241
  69. package/dist/chunk-QWA5YEIZ.js.br +0 -0
  70. package/dist/chunk-QWA5YEIZ.js.gz +0 -0
  71. package/dist/{chunk-WX7AFFBZ.mjs → chunk-RHWQKZLB.mjs} +63 -69
  72. package/dist/chunk-RHWQKZLB.mjs.br +0 -0
  73. package/dist/chunk-RHWQKZLB.mjs.gz +0 -0
  74. package/dist/{chunk-T3V5FBXJ.mjs → chunk-RNP5HP4L.mjs} +5 -2
  75. package/dist/chunk-RNP5HP4L.mjs.br +0 -0
  76. package/dist/chunk-RNP5HP4L.mjs.gz +0 -0
  77. package/dist/{chunk-AL2KLPOJ.js → chunk-SN5EUDIT.js} +8959 -4873
  78. package/dist/chunk-SN5EUDIT.js.br +0 -0
  79. package/dist/chunk-SN5EUDIT.js.gz +0 -0
  80. package/dist/{chunk-VYNICQ4O.mjs → chunk-UPJW34YG.mjs} +133 -258
  81. package/dist/chunk-UPJW34YG.mjs.br +0 -0
  82. package/dist/chunk-UPJW34YG.mjs.gz +0 -0
  83. package/dist/i18n.js +4 -4
  84. package/dist/i18n.js.br +0 -0
  85. package/dist/i18n.js.gz +0 -0
  86. package/dist/i18n.mjs +1 -1
  87. package/dist/i18n.mjs.br +0 -0
  88. package/dist/i18n.mjs.gz +0 -0
  89. package/dist/index.d.ts +595 -38
  90. package/dist/index.js +47 -47
  91. package/dist/index.js.br +0 -0
  92. package/dist/index.js.gz +0 -0
  93. package/dist/index.mjs +6 -6
  94. package/dist/index.mjs.br +0 -0
  95. package/dist/index.mjs.gz +0 -0
  96. package/dist/internals.d.ts +768 -186
  97. package/dist/internals.d.ts.map +1 -1
  98. package/dist/internals.js +79 -79
  99. package/dist/internals.js.br +0 -0
  100. package/dist/internals.js.gz +0 -0
  101. package/dist/internals.mjs +4 -4
  102. package/dist/internals.mjs.br +0 -0
  103. package/dist/internals.mjs.gz +0 -0
  104. package/dist/types-Bzdkiakq.d.ts.map +1 -1
  105. package/dist/viewer/index.d.ts +534 -38
  106. package/dist/viewer/index.js +27 -27
  107. package/dist/viewer/index.js.br +0 -0
  108. package/dist/viewer/index.js.gz +0 -0
  109. package/dist/viewer/index.mjs +6 -6
  110. package/dist/viewer/index.mjs.br +0 -0
  111. package/dist/viewer/index.mjs.gz +0 -0
  112. package/package.json +2 -2
  113. package/dist/AiChatPanel-LEOEDIW2.js.br +0 -0
  114. package/dist/AiChatPanel-LEOEDIW2.js.gz +0 -0
  115. package/dist/AiChatPanel-WRQGJJVD.mjs.br +0 -0
  116. package/dist/AiChatPanel-WRQGJJVD.mjs.gz +0 -0
  117. package/dist/Area3DChartScene-3TJ2GTGI.js.br +0 -0
  118. package/dist/Area3DChartScene-3TJ2GTGI.js.gz +0 -0
  119. package/dist/Area3DChartScene-SJC2ZB6R.mjs.br +0 -2
  120. package/dist/Area3DChartScene-SJC2ZB6R.mjs.gz +0 -0
  121. package/dist/Bar3DChartScene-2ZGOMOZO.js.br +0 -0
  122. package/dist/Bar3DChartScene-2ZGOMOZO.js.gz +0 -0
  123. package/dist/Bar3DChartScene-SPER4LQA.mjs.br +0 -0
  124. package/dist/Bar3DChartScene-SPER4LQA.mjs.gz +0 -0
  125. package/dist/Line3DChartScene-42FYFGLU.js.br +0 -0
  126. package/dist/Line3DChartScene-42FYFGLU.js.gz +0 -0
  127. package/dist/Line3DChartScene-FH3YHPXE.mjs.br +0 -2
  128. package/dist/Line3DChartScene-FH3YHPXE.mjs.gz +0 -0
  129. package/dist/Model3DScene-2BCR2YYD.mjs.br +0 -0
  130. package/dist/Model3DScene-2BCR2YYD.mjs.gz +0 -0
  131. package/dist/Model3DScene-EIU2GVUZ.js.br +0 -0
  132. package/dist/Model3DScene-EIU2GVUZ.js.gz +0 -0
  133. package/dist/PieChart3DScene-QFQUJFDP.mjs.br +0 -0
  134. package/dist/PieChart3DScene-QFQUJFDP.mjs.gz +0 -0
  135. package/dist/PieChart3DScene-VQOHZPHI.js.br +0 -0
  136. package/dist/PieChart3DScene-VQOHZPHI.js.gz +0 -0
  137. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.br +0 -0
  138. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.gz +0 -0
  139. package/dist/SurfaceChart3DScene-FTVXZN6O.js.br +0 -0
  140. package/dist/SurfaceChart3DScene-FTVXZN6O.js.gz +0 -0
  141. package/dist/chunk-7VPDHSWF.js.br +0 -0
  142. package/dist/chunk-7VPDHSWF.js.gz +0 -0
  143. package/dist/chunk-AL2KLPOJ.js.br +0 -0
  144. package/dist/chunk-AL2KLPOJ.js.gz +0 -0
  145. package/dist/chunk-FG5VQFWP.mjs.br +0 -0
  146. package/dist/chunk-FG5VQFWP.mjs.gz +0 -0
  147. package/dist/chunk-MZI4DG3S.js.br +0 -0
  148. package/dist/chunk-MZI4DG3S.js.gz +0 -0
  149. package/dist/chunk-NFOOONND.js.br +0 -0
  150. package/dist/chunk-NFOOONND.js.gz +0 -0
  151. package/dist/chunk-T3V5FBXJ.mjs.br +0 -0
  152. package/dist/chunk-T3V5FBXJ.mjs.gz +0 -0
  153. package/dist/chunk-TGCSZXOG.mjs.br +0 -0
  154. package/dist/chunk-TGCSZXOG.mjs.gz +0 -0
  155. package/dist/chunk-VYNICQ4O.mjs.br +0 -0
  156. package/dist/chunk-VYNICQ4O.mjs.gz +0 -0
  157. package/dist/chunk-WX7AFFBZ.mjs.br +0 -0
  158. package/dist/chunk-WX7AFFBZ.mjs.gz +0 -0
  159. package/dist/chunk-ZHSBMG37.js.br +0 -0
  160. package/dist/chunk-ZHSBMG37.js.gz +0 -0
  161. package/dist/chunk-ZUSYUWOV.mjs.br +0 -0
  162. package/dist/chunk-ZUSYUWOV.mjs.gz +0 -0
  163. package/dist/chunk-ZWPHUPL4.js.br +0 -0
  164. package/dist/chunk-ZWPHUPL4.js.gz +0 -0
package/dist/index.d.ts CHANGED
@@ -591,6 +591,44 @@ interface PptxCustomPathProperties {
591
591
  customGeometryTextRect?: CustomGeometryTextRect;
592
592
  }
593
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
594
632
  //#region src/core/types/effect-dag.d.ts
595
633
  type EffectDagBlendMode = 'darken' | 'lighten' | 'mult' | 'over' | 'screen';
596
634
  type EffectDagContainerType = 'sib' | 'tree';
@@ -880,6 +918,15 @@ interface ShapeStyle {
880
918
  * back to canonical `<a:srgbClr>`.
881
919
  */
882
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;
883
930
  fillGradient?: string;
884
931
  /** Original `gradFill` XML retained for unknown-child and extension round-tripping. */
885
932
  fillGradientXml?: XmlObject;
@@ -914,6 +961,12 @@ interface ShapeStyle {
914
961
  opacity?: number;
915
962
  /** Raw XML colour node preserved for round-trip (e.g. a:schemeClr with transforms). */
916
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;
917
970
  }>;
918
971
  fillGradientAngle?: number;
919
972
  fillGradientType?: 'linear' | 'radial';
@@ -960,6 +1013,12 @@ interface ShapeStyle {
960
1013
  * round-trip serialisation. See {@link fillColorXml} for the rationale.
961
1014
  */
962
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;
963
1022
  /**
964
1023
  * Kind of fill painted on the outline (`a:ln` child). Distinguishes a solid
965
1024
  * outline from a gradient/pattern/none outline so save can emit the correct
@@ -1463,6 +1522,15 @@ interface TextStyle {
1463
1522
  * verbatim when the resolved {@link color} still matches this node.
1464
1523
  */
1465
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;
1466
1534
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1467
1535
  /**
1468
1536
  * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
@@ -1888,6 +1956,12 @@ interface BulletInfo {
1888
1956
  * identity rather than being flattened to `<a:srgbClr/>` on save.
1889
1957
  */
1890
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;
1891
1965
  /** True when `a:buNone` explicitly suppresses bullets. */
1892
1966
  none?: boolean;
1893
1967
  /** Picture bullet: relationship ID from `a:buBlip` → `a:blip[@r:embed]`. */
@@ -2340,7 +2414,38 @@ interface PptxChartDataPointPicture {
2340
2414
  //#region src/core/types/chart-pivot-format.d.ts
2341
2415
  interface PptxChartPivotFormat {
2342
2416
  index: number;
2417
+ /**
2418
+ * Typed projection of `spPr` (fill/stroke colour, stroke width, dash
2419
+ * style). When the parser is given a colour resolver (the normal case: the
2420
+ * runtime always supplies one), both a literal `a:srgbClr` and an
2421
+ * `a:schemeClr` theme reference (with its `lumMod`/`lumOff`/`tint`/`shade`
2422
+ * modifiers) resolve to a hex colour here, the same theme +
2423
+ * `c:clrMapOvr` chain the rest of chart parsing uses. Without a resolver
2424
+ * (e.g. a hand-built `PptxChartPivotFormat` with no theme to resolve
2425
+ * against), only the literal case resolves. Either way the authored node
2426
+ * is byte-preserved through {@link shapePropertiesXml} until this field is
2427
+ * set to something that no longer matches what re-parses off the current
2428
+ * XML; setting it then re-derives `shapePropertiesXml` on save (merged
2429
+ * onto whatever was already authored, keeping an unrelated schemeClr
2430
+ * reference alive when the colour itself is unchanged) unless
2431
+ * `shapePropertiesXml` is set explicitly, which wins.
2432
+ */
2433
+ shapeProperties?: PptxChartShapeProps;
2434
+ /**
2435
+ * Typed projection of `txPr`'s `a:p/a:pPr/a:defRPr` (size/bold/italic/
2436
+ * colour/family), the same shape a legend entry or data-table's text
2437
+ * override models. Colour resolution mirrors {@link shapeProperties}
2438
+ * (theme-resolved `schemeClr` when a colour resolver is supplied, literal
2439
+ * `srgbClr` otherwise). See {@link txPrXml} for the raw fallback.
2440
+ */
2441
+ textStyle?: PptxChartLegendTextStyle;
2442
+ /**
2443
+ * Typed projection of `marker` (symbol/size/spPr). See {@link markerXml}
2444
+ * for the raw fallback.
2445
+ */
2446
+ marker?: PptxChartMarker;
2343
2447
  shapePropertiesXml?: XmlObject | null;
2448
+ txPrXml?: XmlObject | null;
2344
2449
  markerXml?: XmlObject | null;
2345
2450
  dataLabelXml?: XmlObject | null;
2346
2451
  extensionListXml?: XmlObject | null;
@@ -2499,21 +2604,40 @@ interface PptxChartStyleDefinition {
2499
2604
  plotArea?: PptxChartStylePartEntry;
2500
2605
  }
2501
2606
  //#endregion
2502
- //#region src/core/types/chart-user-shapes.d.ts
2607
+ //#region src/core/types/chart-title.d.ts
2503
2608
  /**
2504
- * Types for chart drawing-overlay shapes (`c:userShapes`).
2609
+ * Chart title rich-text run type, split out of `types/chart.ts` (already at
2610
+ * the repo's file-size limit) to keep that module from growing further.
2505
2611
  *
2506
- * A chart's `c:userShapes` element carries an `r:id` that references a
2507
- * separate drawing part (`ppt/drawings/drawingN.xml`) whose root is a
2508
- * `c:userShapes` element populated with `cdr:relSizeAnchor` /
2509
- * `cdr:absSizeAnchor` wrappers around `sp` / `pic` / `cxnSp` shapes drawn on
2510
- * top of the chart plot. These interfaces describe the parsed, renderable
2511
- * overlay model. The raw reference is preserved separately on
2512
- * {@link PptxChartData.userShapesXml} for verbatim round-trip save; this model
2513
- * is render-only.
2612
+ * @module pptx-types/chart-title
2613
+ */
2614
+ /**
2615
+ * One run of a chart title's rich text (`c:title/c:tx/c:rich/a:p/a:r`).
2514
2616
  *
2515
- * @module pptx-types/chart-user-shapes
2617
+ * The flat `PptxChartData.title` field only ever captured the FIRST run's
2618
+ * text with no per-run formatting; `titleRuns` (when present) is the
2619
+ * lossless, multi-run replacement parsed from the same `c:rich` body. Absent
2620
+ * when the title has no rich text at all (an empty/auto title, or one
2621
+ * authored as a linked-cell reference).
2516
2622
  */
2623
+ interface PptxChartTitleRun {
2624
+ /** This run's text (`a:t`). */
2625
+ text: string;
2626
+ /** `a:rPr/@_b`. */
2627
+ bold?: boolean;
2628
+ /** `a:rPr/@_i`. */
2629
+ italic?: boolean;
2630
+ /**
2631
+ * Font size in POINTS (`a:rPr/@_sz`, hundredths of a point / 100), matching
2632
+ * `PptxChartLegendTextStyle.fontSize`'s convention rather than the pixel
2633
+ * convention `TextStyle.fontSize` uses for slide text.
2634
+ */
2635
+ fontSize?: number;
2636
+ /** Resolved hex colour (e.g. `"#FF0000"`) from `a:rPr/a:solidFill`. */
2637
+ color?: string;
2638
+ }
2639
+ //#endregion
2640
+ //#region src/core/types/chart-user-shapes.d.ts
2517
2641
  /** A single paragraph of overlay-shape text with light formatting. */
2518
2642
  interface PptxChartUserShapeParagraph {
2519
2643
  /** Joined run text of the paragraph. */
@@ -2529,6 +2653,80 @@ interface PptxChartUserShapeParagraph {
2529
2653
  /** Paragraph alignment (`a:pPr/@algn`): left / centre / right. */
2530
2654
  align?: 'l' | 'ctr' | 'r';
2531
2655
  }
2656
+ /**
2657
+ * The DrawingML 2D group transform (`a:xfrm` inside `cdr:grpSpPr`) that
2658
+ * anchors a `grpSp`'s own box ({@link off}/{@link ext}) and establishes the
2659
+ * coordinate space its children are expressed in ({@link chOff}/{@link
2660
+ * chExt}), all in EMU. A child's position within the group is mapped into
2661
+ * the group's own box via
2662
+ * `frac = (child.off - chOff) / chExt`, then applied to the enclosing
2663
+ * anchor's box; see `flattenChartUserShapes` in
2664
+ * `chart-user-shapes-parser.ts`.
2665
+ */
2666
+ interface PptxChartUserShapeGroupTransform {
2667
+ /** The group's own position in its parent's coordinate space, in EMU. */
2668
+ off: {
2669
+ x: number;
2670
+ y: number;
2671
+ };
2672
+ /** The group's own size in its parent's coordinate space, in EMU. */
2673
+ ext: {
2674
+ cx: number;
2675
+ cy: number;
2676
+ };
2677
+ /** Origin of the child coordinate space (`a:chOff`), in EMU. */
2678
+ chOff: {
2679
+ x: number;
2680
+ y: number;
2681
+ };
2682
+ /** Size of the child coordinate space (`a:chExt`), in EMU. */
2683
+ chExt: {
2684
+ cx: number;
2685
+ cy: number;
2686
+ };
2687
+ }
2688
+ /**
2689
+ * One shape grouped inside a `cdr:grpSp` (or a nested `cdr:grpSp` itself).
2690
+ * Unlike a top-level {@link PptxChartUserShape}, a group child has no
2691
+ * drawing anchor of its own: its position is expressed in its parent
2692
+ * group's child coordinate space via {@link off}/{@link ext} (EMU, read
2693
+ * from the child's own `a:xfrm`), not as a chart-relative fraction.
2694
+ */
2695
+ interface PptxChartUserShapeGroupChild {
2696
+ /** Shape kind, same vocabulary as {@link PptxChartUserShape.kind}. */
2697
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2698
+ /** Position within the parent group's child coordinate space, in EMU. */
2699
+ off: {
2700
+ x: number;
2701
+ y: number;
2702
+ };
2703
+ /** Size within the parent group's child coordinate space, in EMU. */
2704
+ ext: {
2705
+ cx: number;
2706
+ cy: number;
2707
+ };
2708
+ /** Preset geometry name (`a:prstGeom/@prst`), defaulting to `"rect"`. */
2709
+ prst?: string;
2710
+ /** Resolved solid-fill hex colour, when present. */
2711
+ fill?: string;
2712
+ /** Resolved line/stroke hex colour, when present. */
2713
+ stroke?: string;
2714
+ /** Line width in points (`a:ln/@w` divided by 12700), when present. */
2715
+ strokeWidth?: number;
2716
+ /** Text paragraphs of the shape's `txBody`, when present. */
2717
+ paragraphs?: PptxChartUserShapeParagraph[];
2718
+ /**
2719
+ * Verbatim source XML of a `pic`/`graphicFrame` child, or of this node
2720
+ * itself when `kind === 'grpSp'` and the nested group is untouched since
2721
+ * parse. See {@link PptxChartUserShape.rawXml}'s doc for the same
2722
+ * contract one level up.
2723
+ */
2724
+ rawXml?: XmlObject;
2725
+ /** Present when `kind === 'grpSp'`: this nested group's own transform. */
2726
+ transform?: PptxChartUserShapeGroupTransform;
2727
+ /** Present when `kind === 'grpSp'`: this nested group's own children. */
2728
+ children?: PptxChartUserShapeGroupChild[];
2729
+ }
2532
2730
  /**
2533
2731
  * A parsed chart-overlay shape positioned by a drawing anchor.
2534
2732
  *
@@ -2539,12 +2737,13 @@ interface PptxChartUserShapeParagraph {
2539
2737
  interface PptxChartUserShape {
2540
2738
  /**
2541
2739
  * Shape kind: text/preset shape, connector, picture, a group of the
2542
- * above (`grpSp`, flattened: each grouped child becomes its own entry
2543
- * reusing the anchor's own bounding box, an approximation since the
2544
- * group's internal chOff/chExt transform is not applied), or a bare
2545
- * placeholder for a `graphicFrame` anchor child (deep content such as a
2546
- * nested chart or table is out of scope; it only keeps the anchor's
2547
- * space accounted for instead of the whole overlay disappearing).
2740
+ * above (`grpSp`, with its own {@link transform} and {@link children},
2741
+ * nested arbitrarily; use `flattenChartUserShapes` from
2742
+ * `chart-user-shapes-parser.ts` to get a flat, render-ready leaf list
2743
+ * with the group transform already applied), or a bare placeholder for
2744
+ * a `graphicFrame` anchor child (deep content such as a nested chart or
2745
+ * table is out of scope; it only keeps the anchor's space accounted for
2746
+ * instead of the whole overlay disappearing).
2548
2747
  */
2549
2748
  kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2550
2749
  /** Anchor kind that positioned the shape. */
@@ -2574,6 +2773,26 @@ interface PptxChartUserShape {
2574
2773
  strokeWidth?: number;
2575
2774
  /** Text paragraphs of the shape's `txBody`, when present. */
2576
2775
  paragraphs?: PptxChartUserShapeParagraph[];
2776
+ /**
2777
+ * Verbatim source XML of a `pic` or `graphicFrame` anchor child (the
2778
+ * `cdr:pic` / `cdr:graphicFrame` node itself, not the enclosing anchor),
2779
+ * or of the `cdr:grpSp` node itself when `kind === 'grpSp'` and the
2780
+ * group is untouched since parse (byte-identical passthrough). None of
2781
+ * these three kinds have a reconstructable typed representation that is
2782
+ * guaranteed lossless (a picture's blip reference, a nested chart/table's
2783
+ * graphic content, or a group's exact child ordering/ids), so the
2784
+ * serializer re-emits this verbatim when present instead of a lossy
2785
+ * rebuild. Editing a shape inside a group (via the SDK's path-based
2786
+ * overlay operations) clears the group's `rawXml` so the serializer
2787
+ * regenerates it from {@link transform}/{@link children} instead. Absent
2788
+ * for `sp`/`cxnSp`, which round-trip losslessly through their typed
2789
+ * fields above.
2790
+ */
2791
+ rawXml?: XmlObject;
2792
+ /** Present when `kind === 'grpSp'`: the group's own transform. */
2793
+ transform?: PptxChartUserShapeGroupTransform;
2794
+ /** Present when `kind === 'grpSp'`: the grouped children, nested arbitrarily. */
2795
+ children?: PptxChartUserShapeGroupChild[];
2577
2796
  }
2578
2797
  //#endregion
2579
2798
  //#region src/core/types/chart.d.ts
@@ -2647,6 +2866,10 @@ interface PptxChartTrendline {
2647
2866
  displayRSq?: boolean;
2648
2867
  displayEq?: boolean;
2649
2868
  color?: string;
2869
+ /** Trendline width in points (`c:trendline/c:spPr/a:ln/@w`, EMU / 12700). */
2870
+ lineWidth?: number;
2871
+ /** Trendline dash style (`c:trendline/c:spPr/a:ln/a:prstDash/@val`). */
2872
+ lineDashStyle?: string;
2650
2873
  label?: PptxChartTrendlineLabel | null;
2651
2874
  }
2652
2875
  /** Typed, commonly edited properties of `c:trendlineLbl`. */
@@ -2692,6 +2915,10 @@ interface PptxChartErrBars {
2692
2915
  customMinus?: number[];
2693
2916
  noEndCap?: boolean;
2694
2917
  color?: string;
2918
+ /** Error-bar line width in points (`c:errBars/c:spPr/a:ln/@w`, EMU / 12700). */
2919
+ width?: number;
2920
+ /** Error-bar line dash style (`c:errBars/c:spPr/a:ln/a:prstDash/@val`). */
2921
+ dashStyle?: string;
2695
2922
  }
2696
2923
  /**
2697
2924
  * Visibility flags for the chart data table (axes + legend keys).
@@ -2818,6 +3045,12 @@ interface PptxChartDataLabel {
2818
3045
  * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2819
3046
  */
2820
3047
  txPr?: PptxChartLegendTextStyle;
3048
+ /**
3049
+ * This label's own shape formatting (`c:dLbl/c:spPr`): fill/line colour,
3050
+ * width, and dash style for the label's callout box, taking precedence
3051
+ * over any chart/series-level default when set.
3052
+ */
3053
+ spPr?: PptxChartShapeProps;
2821
3054
  }
2822
3055
  /** Axis number format. */
2823
3056
  interface PptxChartAxisNumFmt {
@@ -3381,6 +3614,16 @@ interface PptxChartDateCategories {
3381
3614
  */
3382
3615
  interface PptxChartData {
3383
3616
  title?: string;
3617
+ /**
3618
+ * Rich-text runs of the title, parsed from `c:title/c:tx/c:rich` (issue:
3619
+ * chart title rich text). Lossless multi-run alternative to the flat
3620
+ * {@link title}: when present, the writer serialises every run's own
3621
+ * bold/italic/size/color; when absent, save falls back to the flat
3622
+ * `title` path as before. Only populated for a classic (`c:`) chart's
3623
+ * rich (typed) title, not a ChartEx (`cx:`) title or one authored as a
3624
+ * linked-cell reference.
3625
+ */
3626
+ titleRuns?: PptxChartTitleRun[];
3384
3627
  chartType: PptxChartType;
3385
3628
  categories: string[];
3386
3629
  /**
@@ -3472,8 +3715,10 @@ interface PptxChartData {
3472
3715
  chartRelationshipId?: string;
3473
3716
  /** `null` explicitly removes an existing ChartML data table. */
3474
3717
  dataTable?: PptxChartDataTable | null;
3475
- dropLines?: PptxChartLineStyle;
3476
- hiLowLines?: PptxChartLineStyle;
3718
+ /** `null` explicitly removes an existing `c:dropLines` element. */
3719
+ dropLines?: PptxChartLineStyle | null;
3720
+ /** `null` explicitly removes an existing `c:hiLowLines` element. */
3721
+ hiLowLines?: PptxChartLineStyle | null;
3477
3722
  /** `null` explicitly removes an existing up/down-bars container. */
3478
3723
  upDownBars?: PptxChartUpDownBars | null;
3479
3724
  axes?: PptxChartAxisFormatting[];
@@ -3588,10 +3833,13 @@ interface PptxChartData {
3588
3833
  pivotFormats?: PptxChartPivotFormats | null;
3589
3834
  /**
3590
3835
  * Color-map override (`c:clrMapOvr`) carrying 12 attributes that
3591
- * remap theme colour roles for this chart only. Preserved as a flat
3592
- * `attribute value` map for round-trip fidelity.
3836
+ * remap theme colour roles for this chart only. Modeled as a flat
3837
+ * `attribute -> value` map (e.g. `{ bg1: 'lt1', accent1: 'accent2' }`)
3838
+ * so unknown/future attributes round-trip without code changes.
3839
+ * `null` explicitly removes an existing `c:clrMapOvr`; an empty object
3840
+ * is treated the same as `null` on save.
3593
3841
  */
3594
- clrMapOvr?: Record<string, string>;
3842
+ clrMapOvr?: Record<string, string> | null;
3595
3843
  /**
3596
3844
  * Whether the chart's own cached numeric values use the 1904 date epoch
3597
3845
  * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
@@ -4968,13 +5216,55 @@ interface PptxSmartArtData {
4968
5216
  drawingDirty?: boolean;
4969
5217
  }
4970
5218
  //#endregion
4971
- //#region src/core/types/table.d.ts
5219
+ //#region src/core/types/table-style-edit.d.ts
4972
5220
  /**
4973
- * Table types: cell styling, cell data, rows, table data, and the parsed
4974
- * table style map from `ppt/tableStyles.xml`.
5221
+ * A `a:fillRef`/`a:lnRef`/`a:effectRef`-style style-matrix reference: an
5222
+ * index into the theme's format scheme (`a:fmtScheme/a:fillStyleLst`, 1-based
5223
+ * per ECMA-376 §20.1.4.1.12) plus an optional colour transform child.
5224
+ *
5225
+ * Distinct from an already-resolved {@link ParsedTableStyleFill}: a fill ref
5226
+ * points AT a theme style-matrix entry rather than carrying a colour choice
5227
+ * directly, though the two commonly appear together (`<a:fillRef idx="2">
5228
+ * <a:schemeClr val="accent1"/></a:fillRef>`).
4975
5229
  *
4976
- * @module pptx-types/table
5230
+ * @example
5231
+ * ```ts
5232
+ * const ref: ParsedTableFillRef = { idx: 2, color: { schemeColor: 'accent1' } };
5233
+ * // => satisfies ParsedTableFillRef
5234
+ * ```
4977
5235
  */
5236
+ interface ParsedTableFillRef {
5237
+ /** 1-based index into the theme format scheme's fill style list. */
5238
+ idx: number;
5239
+ /** Colour transform child (`a:schemeClr`/`a:srgbClr`) applied to the referenced style. */
5240
+ color?: ParsedTableStyleFill;
5241
+ }
5242
+ /**
5243
+ * One leaf (or `effectDag`-wrapped) node of an `a:effectLst`/`a:effectDag`
5244
+ * effect chain, kept mostly opaque: {@link kind} names the OOXML element so a
5245
+ * consumer can recognise common effects (`outerShdw`, `glow`, `softEdge`,
5246
+ * `reflection`, `blur`, `innerShdw`, `prstShdw`, `fillOverlay`, `alphaModFix`,
5247
+ * `alphaInv`, `grayscl`, `biLevel`, `duotone`, `hsl`, `lum`, `tint`) without
5248
+ * this module re-deriving the full shape-effect taxonomy already modelled on
5249
+ * `ShapeStyle`; {@link xml} preserves the node verbatim for lossless re-emit.
5250
+ *
5251
+ * @example
5252
+ * ```ts
5253
+ * const effect: ParsedTableStyleEffect = {
5254
+ * kind: 'outerShdw',
5255
+ * xml: { '@_blurRad': '40000', '@_dist': '20000', '@_dir': '5400000' },
5256
+ * };
5257
+ * // => satisfies ParsedTableStyleEffect
5258
+ * ```
5259
+ */
5260
+ interface ParsedTableStyleEffect {
5261
+ /** The OOXML element's local name, e.g. `outerShdw`, `glow`, `softEdge`. */
5262
+ kind: string;
5263
+ /** Verbatim XML node (attributes + children) for lossless round-trip. */
5264
+ xml: XmlObject;
5265
+ }
5266
+ //#endregion
5267
+ //#region src/core/types/table.d.ts
4978
5268
  /**
4979
5269
  * Per-cell visual style for a table cell.
4980
5270
  *
@@ -5011,6 +5301,14 @@ interface PptxTableCellStyle {
5011
5301
  * future expansion alongside the run-properties round-trip path.
5012
5302
  */
5013
5303
  colorXml?: XmlObject;
5304
+ /**
5305
+ * Typed theme colour reference for the cell text colour, set when
5306
+ * {@link colorXml} is a plain `a:schemeClr`. Wins on save, mirroring
5307
+ * `TextStyle.colorRef`. Distinct from {@link ParsedTableStyleFill.schemeColor},
5308
+ * which describes a `ppt/tableStyles.xml` section fill rather than an
5309
+ * individual cell override.
5310
+ */
5311
+ colorRef?: PptxThemeColorRef;
5014
5312
  backgroundColor?: string;
5015
5313
  /**
5016
5314
  * Raw XML colour-choice node preserved from cell `a:tcPr/a:solidFill` for
@@ -5018,6 +5316,12 @@ interface PptxTableCellStyle {
5018
5316
  * {@link backgroundColor} still matches the original colour.
5019
5317
  */
5020
5318
  backgroundColorXml?: XmlObject;
5319
+ /**
5320
+ * Typed theme colour reference for the cell fill, set when
5321
+ * {@link backgroundColorXml} is a plain `a:schemeClr`. Wins on save,
5322
+ * mirroring `ShapeStyle.fillColorRef`.
5323
+ */
5324
+ backgroundColorRef?: PptxThemeColorRef;
5021
5325
  borderColor?: string;
5022
5326
  /** Top border width in px. */
5023
5327
  borderTopWidth?: number;
@@ -5331,12 +5635,14 @@ interface PptxTableData {
5331
5635
  */
5332
5636
  tableFill?: ParsedTableStyleFill;
5333
5637
  /**
5334
- * Whether `a:tblPr` carries its own `a:effectLst`/`a:effectDag`,
5335
- * independent of the referenced table style. Presence-only: the concrete
5336
- * effect is not yet rendered, and the raw XML round-trips separately via
5337
- * whatever preserves `a:tblPr`'s unrecognised children (issue G6).
5638
+ * `a:tblPr`'s own `a:effectLst` (or `a:effectDag`) effect chain,
5639
+ * independent of the referenced table style, decomposed into a typed
5640
+ * sequence of {@link ParsedTableStyleEffect} nodes (issue G6). Each node
5641
+ * keeps its own XML verbatim for lossless round-trip; empty array is
5642
+ * normalised to `undefined` by the parser so `tableEffects` is only ever
5643
+ * present when there is at least one effect.
5338
5644
  */
5339
- tableEffects?: boolean;
5645
+ tableEffects?: ParsedTableStyleEffect[];
5340
5646
  }
5341
5647
  /**
5342
5648
  * A single fill reference within a table style section.
@@ -5512,13 +5818,20 @@ interface ParsedTableStyleBorders {
5512
5818
  /**
5513
5819
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
5514
5820
  *
5515
- * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Currently
5516
- * captures only the resolved scheme-fill colour (verbatim XML for fill
5517
- * / effect references is preserved separately by the save path).
5821
+ * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Captures the
5822
+ * resolved scheme-fill colour, an unresolved style-matrix `a:fillRef`, and a
5823
+ * presence flag for effects (verbatim XML for the effect list is preserved
5824
+ * separately by the save path).
5518
5825
  */
5519
5826
  interface ParsedTableBackground {
5520
5827
  /** Solid fill (resolved from `a:fill > a:solidFill > a:schemeClr`). */
5521
5828
  fill?: ParsedTableStyleFill;
5829
+ /**
5830
+ * Style-matrix fill reference (`<a:fillRef idx="N">...</a:fillRef>`),
5831
+ * mutually exclusive with {@link fill} (`a:fill` is the choice sibling of
5832
+ * `a:fillRef` in `CT_TableBackgroundStyle`).
5833
+ */
5834
+ fillRef?: ParsedTableFillRef;
5522
5835
  /** Has an `a:effectLst` child that should be round-tripped. */
5523
5836
  hasEffectLst?: boolean;
5524
5837
  }
@@ -5632,6 +5945,21 @@ interface PptxAccessibilityProperties {
5632
5945
  */
5633
5946
  isDecorative?: boolean;
5634
5947
  }
5948
+ /**
5949
+ * Accessibility description/title from `p:cNvPr/@descr` / `@title` on a
5950
+ * plain shape, text box or connector (`p:sp` / `p:cxnSp`). The same pair of
5951
+ * attributes already round-trips for a graphic frame (see
5952
+ * {@link TablePptxElement.altText}) and, `descr` only, for a picture
5953
+ * ({@link PptxImageProperties.altText}); this mixin extends it to the three
5954
+ * element kinds whose PowerPoint Alt Text pane data was previously dropped
5955
+ * on load because neither field existed on the model.
5956
+ */
5957
+ interface PptxNonVisualDescription {
5958
+ /** `p:cNvPr/@descr`. */
5959
+ altText?: string;
5960
+ /** `p:cNvPr/@title`. */
5961
+ title?: string;
5962
+ }
5635
5963
  /**
5636
5964
  * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5637
5965
  * property distinct from `a:picLocks`.
@@ -5664,7 +5992,7 @@ interface PptxPictureNonVisualProperties {
5664
5992
  * // => satisfies TextPptxElement
5665
5993
  * ```
5666
5994
  */
5667
- interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties {
5995
+ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxNonVisualDescription {
5668
5996
  type: 'text';
5669
5997
  }
5670
5998
  /**
@@ -5682,7 +6010,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5682
6010
  * // => satisfies ShapePptxElement
5683
6011
  * ```
5684
6012
  */
5685
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
6013
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties, PptxNonVisualDescription {
5686
6014
  type: 'shape';
5687
6015
  }
5688
6016
  /**
@@ -5704,7 +6032,7 @@ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShap
5704
6032
  * // => satisfies ConnectorPptxElement
5705
6033
  * ```
5706
6034
  */
5707
- interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties {
6035
+ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxNonVisualDescription {
5708
6036
  type: 'connector';
5709
6037
  }
5710
6038
  /**
@@ -5770,6 +6098,13 @@ interface TablePptxElement extends PptxElementBase {
5770
6098
  type: 'table';
5771
6099
  /** Parsed table cell data for editing. */
5772
6100
  tableData?: PptxTableData;
6101
+ /**
6102
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`, the
6103
+ * same non-visual-properties attribute a picture's alt text comes from.
6104
+ */
6105
+ altText?: string;
6106
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6107
+ title?: string;
5773
6108
  /**
5774
6109
  * Unrecognised extensions captured from `a:graphicData/a:extLst` so they
5775
6110
  * round-trip losslessly. See {@link PptxGraphicFrameExtension}.
@@ -5785,6 +6120,10 @@ interface TablePptxElement extends PptxElementBase {
5785
6120
  interface ChartPptxElement extends PptxElementBase {
5786
6121
  type: 'chart';
5787
6122
  chartData?: PptxChartData;
6123
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6124
+ altText?: string;
6125
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6126
+ title?: string;
5788
6127
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5789
6128
  extensionXml?: PptxGraphicFrameExtension[];
5790
6129
  }
@@ -5802,6 +6141,10 @@ interface ChartPptxElement extends PptxElementBase {
5802
6141
  interface SmartArtPptxElement extends PptxElementBase {
5803
6142
  type: 'smartArt';
5804
6143
  smartArtData?: PptxSmartArtData;
6144
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6145
+ altText?: string;
6146
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6147
+ title?: string;
5805
6148
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5806
6149
  extensionXml?: PptxGraphicFrameExtension[];
5807
6150
  }
@@ -5888,6 +6231,10 @@ interface OlePptxElement extends PptxElementBase {
5888
6231
  * `false`; `undefined` means the source authored no explicit value.
5889
6232
  */
5890
6233
  oleUpdateAutomatic?: boolean;
6234
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6235
+ altText?: string;
6236
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6237
+ title?: string;
5891
6238
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5892
6239
  extensionXml?: PptxGraphicFrameExtension[];
5893
6240
  }
@@ -5979,6 +6326,15 @@ interface MediaPptxElement extends PptxElementBase {
5979
6326
  * (`r:embed`). Defaults to embedded when undefined.
5980
6327
  */
5981
6328
  isLinked?: boolean;
6329
+ /**
6330
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`.
6331
+ * Only populated for the `p:graphicFrame`-shaped (SDK-created) media
6332
+ * form; a `p:pic`-shaped media element's alt text is not currently
6333
+ * parsed (see `PptxHandlerRuntimePictureParsing.ts`).
6334
+ */
6335
+ altText?: string;
6336
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. Same scope note as {@link altText}. */
6337
+ title?: string;
5982
6338
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5983
6339
  extensionXml?: PptxGraphicFrameExtension[];
5984
6340
  }
@@ -6485,7 +6841,20 @@ interface PptxAnimationGraphicElementTarget {
6485
6841
  seriesIdx?: number;
6486
6842
  /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6487
6843
  categoryIdx?: number;
6488
- /** `@_bldStep` (ST_TLChartBuildStep): `category` / `categoryEl` / `series` / `seriesEl`. */
6844
+ /**
6845
+ * `p:dgm/@_id` (CT_TLBuildDiagram, ECMA-376 S19.5.10): the diagram DATA MODEL
6846
+ * point id (`dgm:pt/@modelId`) this per-stage effect reveals, when a
6847
+ * `p:bldDgm` build authors one effect per node instead of a single staged
6848
+ * reveal. `dgm`-kind targets only; a `chart`-kind target never carries this.
6849
+ * Matches `PptxSmartArtNode.id` (parsed from the same `@modelId`), so a
6850
+ * diagram renderer can reveal the exact authored node.
6851
+ */
6852
+ id?: string;
6853
+ /**
6854
+ * `@_bldStep`: `ST_TLChartBuildStep` (`category` / `categoryEl` / `series` /
6855
+ * `seriesEl`) for a `chart`-kind target, or `ST_TLDiagramBuildStep`
6856
+ * (`sp` / `bg`) for a `dgm`-kind target.
6857
+ */
6489
6858
  bldStep?: string;
6490
6859
  }
6491
6860
  /**
@@ -6935,6 +7304,34 @@ interface PptxNativeAnimation {
6935
7304
  * `childStyle`, a legacy compatibility hint. Round-tripped only.
6936
7305
  */
6937
7306
  cBhvrOverride?: 'normal' | 'childStyle';
7307
+ /**
7308
+ * `p:set` discrete attribute assignments composed alongside this effect
7309
+ * (ECMA-376 S19.5.79 CT_TLSetBehavior): an instantaneous (non-interpolated)
7310
+ * value change, as opposed to {@link attributeAnimations}'s `p:anim`
7311
+ * keyframe ramps. PowerPoint authors several font-style emphasis effects
7312
+ * this way (Bold Reveal, Underline, Bold Flash, Change Font Size), since
7313
+ * "on/off" or "size N" has nothing to interpolate. Not yet consulted by
7314
+ * shared playback (round-trip/typed-model only so far).
7315
+ */
7316
+ setAnimations?: PptxSetAnimation[];
7317
+ }
7318
+ /**
7319
+ * One `p:set` discrete (non-interpolated) attribute assignment composed
7320
+ * alongside an authored effect. See {@link PptxNativeAnimation.setAnimations}.
7321
+ *
7322
+ * @see ECMA-376 S19.5.79 CT_TLSetBehavior
7323
+ */
7324
+ interface PptxSetAnimation {
7325
+ /** Lowercased target attribute from `p:cBhvr/p:attrNameLst/p:attrName`. */
7326
+ attrName: string;
7327
+ /** Decoded value from `p:to` (same variant shape as a `p:tav/p:val`). */
7328
+ value: string | boolean | number;
7329
+ /** Discriminant indicating which `p:to` child carried the value. */
7330
+ valueType: 'str' | 'bool' | 'int' | 'flt' | 'clr';
7331
+ /** Duration from this behaviour's nested `p:cTn/@dur`. */
7332
+ durationMs?: number;
7333
+ /** Start offset from this behaviour's nested `p:stCondLst`. */
7334
+ delayMs?: number;
6938
7335
  }
6939
7336
  /**
6940
7337
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -7202,6 +7599,16 @@ interface PptxElementAnimation {
7202
7599
  * OOXML equivalent and is not required for playback.
7203
7600
  */
7204
7601
  soundFileName?: string;
7602
+ /**
7603
+ * Per-build-level timing template(s) from the {@link sequence}'s own
7604
+ * `p:bldP/p:tmplLst` (ECMA-376 §19.5.84), carried over from the loaded
7605
+ * `PptxNativeAnimation.buildTemplates` this element animation was derived
7606
+ * from so a full timing-tree rebuild (`PptxAnimationWriteService`'s
7607
+ * `buildTimingXml`, when the slide had no prior `p:timing`) can re-emit
7608
+ * them instead of silently dropping the deck's authored per-level
7609
+ * defaults. Absent when {@link sequence} carries no such template.
7610
+ */
7611
+ buildTemplates?: PptxTimingTemplate[];
7205
7612
  }
7206
7613
  /**
7207
7614
  * A read-only anchor representing one of the deck's own effect groups: a
@@ -8118,6 +8525,22 @@ interface PptxActiveXControl {
8118
8525
  name?: string;
8119
8526
  /** Shape ID this control is linked to (from @spid). */
8120
8527
  shapeId?: string;
8528
+ /**
8529
+ * `p:control/@showAsIcon` (CT_Control, ECMA-376 S19.3.1.2): whether the
8530
+ * control renders as its static icon rather than its live appearance.
8531
+ * `undefined` when the source authored no explicit value (schema default
8532
+ * `false`).
8533
+ */
8534
+ showAsIcon?: boolean;
8535
+ /**
8536
+ * `p:control/@imgW` in EMU (ST_PositiveCoordinate32): the width the host
8537
+ * reserves for the control's icon/preview image. Distinct from
8538
+ * {@link width}, which is the fallback `p:pic`'s own `a:ext/@cx` in px;
8539
+ * `imgW`/`imgH` are direct attributes on `p:control` itself.
8540
+ */
8541
+ imgWidthEmu?: number;
8542
+ /** `p:control/@imgH` in EMU (ST_PositiveCoordinate32). @see imgWidthEmu */
8543
+ imgHeightEmu?: number;
8121
8544
  /** X position (px) of the control's fallback picture, if present. */
8122
8545
  x?: number;
8123
8546
  /** Y position (px) of the control's fallback picture, if present. */
@@ -8574,6 +8997,34 @@ interface PptxPhotoAlbum {
8574
8997
  layout?: string;
8575
8998
  /** Frame style applied to each photo (e.g. "frameStyle1"). */
8576
8999
  frame?: string;
9000
+ /**
9001
+ * `p:photoAlbum/@isPhoto` (ECMA-376 S19.2.1.27, CT_PhotoAlbum): whether
9002
+ * the pictures placed by the album wizard are real photographs, as
9003
+ * opposed to clip art or other embedded images. `undefined` when the
9004
+ * source authored no explicit value (schema default `false`); this is a
9005
+ * purely declarative wizard-provenance flag, not something this library
9006
+ * gates any layout/frame behaviour on.
9007
+ */
9008
+ isPhoto?: boolean;
9009
+ }
9010
+ /**
9011
+ * A recognizer-owned `p:smartTags` reference from `presentation.xml`
9012
+ * (CT_SmartTags, ECMA-376 S19.2.1.42): a bare relationship id pointing at a
9013
+ * legacy Office "Smart Tags" recognizer part, distinct from the
9014
+ * user-authored `p:tags` construct (see {@link PptxTagCollection}).
9015
+ *
9016
+ * This library has no data model for recognizer part CONTENT (there is no
9017
+ * way to create, inspect, or edit one through the public API), so this type
9018
+ * only captures enough to preserve an authored reference losslessly: the
9019
+ * relationship id and, when resolvable, the target part path.
9020
+ */
9021
+ interface PptxSmartTagsReference {
9022
+ /** Relationship id from `p:smartTags/@r:id`. */
9023
+ relId: string;
9024
+ /** Resolved ZIP path of the referenced recognizer part, when resolvable. */
9025
+ targetPath?: string;
9026
+ /** Raw `p:smartTags` XML retained for lossless round-trip. */
9027
+ rawXml?: XmlObject;
8577
9028
  }
8578
9029
  /**
8579
9030
  * East Asian line-break (kinsoku) settings from `p:kinsoku` in `presentation.xml`.
@@ -8638,6 +9089,13 @@ interface PptxData {
8638
9089
  themeOptions?: PptxThemeOption[];
8639
9090
  /** Parsed table style definitions from `ppt/tableStyles.xml`. */
8640
9091
  tableStyleMap?: ParsedTableStyleMap;
9092
+ /**
9093
+ * The current default table style GUID (`ppt/tableStyles.xml`'s
9094
+ * `a:tblStyleLst/@def`): the style PowerPoint applies to a newly inserted
9095
+ * table. Matches `PptxSaveOptions.tableStylesDefaultId` so a save call
9096
+ * that omits it can fall back to what was loaded.
9097
+ */
9098
+ tableStylesDefaultId?: string;
8641
9099
  /** Whether the presentation is password-protected. */
8642
9100
  isPasswordProtected?: boolean;
8643
9101
  /** Embedded font data (name + binary data URL) extracted from the presentation. */
@@ -8697,6 +9155,14 @@ interface PptxData {
8697
9155
  modifyVerifier?: PptxModifyVerifier;
8698
9156
  /** Photo album metadata from `p:photoAlbum` in `presentation.xml`. */
8699
9157
  photoAlbum?: PptxPhotoAlbum;
9158
+ /**
9159
+ * Legacy Smart Tags recognizer reference from `p:smartTags` in
9160
+ * `presentation.xml`. Read-only: there is no data model for the
9161
+ * recognizer part's own content, so this exists to make the reference
9162
+ * inspectable and to prove it survives a save (the owning part and its
9163
+ * relationship are preserved passively, like any other unmodelled part).
9164
+ */
9165
+ smartTags?: PptxSmartTagsReference;
8700
9166
  /** East Asian line-break settings from `p:kinsoku` in `presentation.xml`. */
8701
9167
  kinsoku?: PptxKinsoku;
8702
9168
  /** Custom XML data parts from `customXml/` in the OPC package. */
@@ -8861,6 +9327,14 @@ type FillInput = {
8861
9327
  type: 'solid';
8862
9328
  color: string;
8863
9329
  opacity?: number;
9330
+ /**
9331
+ * A theme colour to use instead of a plain hex. When set, the shape
9332
+ * saves as `<a:schemeClr>` (e.g. `{ scheme: 'accent1', lumMod: 0.8 }`
9333
+ * for "Accent 1, Lighter 80%") so it keeps following the theme after a
9334
+ * later theme change; `color` still supplies the immediate resolved
9335
+ * hex for renderers that read it directly.
9336
+ */
9337
+ themeColorRef?: PptxThemeColorRef;
8864
9338
  } | {
8865
9339
  type: 'gradient';
8866
9340
  /**
@@ -8896,6 +9370,8 @@ interface StrokeInput {
8896
9370
  opacity?: number;
8897
9371
  join?: 'round' | 'bevel' | 'miter';
8898
9372
  cap?: 'flat' | 'rnd' | 'sq';
9373
+ /** A theme colour for the outline; see {@link FillInput}'s `themeColorRef`. */
9374
+ themeColorRef?: PptxThemeColorRef;
8899
9375
  }
8900
9376
  interface ShadowInput {
8901
9377
  color?: string;
@@ -8912,6 +9388,8 @@ interface TextStyleInput {
8912
9388
  underline?: boolean;
8913
9389
  strikethrough?: boolean;
8914
9390
  color?: string;
9391
+ /** A theme colour for the run; see {@link FillInput}'s `themeColorRef`. */
9392
+ themeColorRef?: PptxThemeColorRef;
8915
9393
  alignment?: 'left' | 'center' | 'right' | 'justify';
8916
9394
  verticalAlignment?: 'top' | 'middle' | 'bottom';
8917
9395
  lineSpacing?: number;
@@ -9539,6 +10017,24 @@ interface PptxHandlerSaveOptions {
9539
10017
  * part untouched.
9540
10018
  */
9541
10019
  tableStyles?: ParsedTableStyleMap;
10020
+ /**
10021
+ * Set `ppt/tableStyles.xml`'s `<a:tblStyleLst @def>` to this style GUID
10022
+ * (normalised to uppercase-with-braces). `undefined` preserves the
10023
+ * existing default; there is no removal form (`@def` is required by the
10024
+ * schema and PowerPoint always points it at a real style). No-op when the
10025
+ * archive has no `ppt/tableStyles.xml`, same as {@link tableStyles}.
10026
+ */
10027
+ tableStylesDefaultId?: string;
10028
+ /**
10029
+ * Style GUIDs to remove from `ppt/tableStyles.xml` entirely, kept as a
10030
+ * separate opt-in list rather than inferred from omission on
10031
+ * {@link tableStyles}: that map is documented as safe to pass a PARTIAL
10032
+ * edit (only the entries a caller actually touched), so treating every
10033
+ * GUID missing from it as "delete this" would silently destroy untouched
10034
+ * styles on an ordinary targeted edit. A GUID here that is also the
10035
+ * current (or newly requested) default is left in place and skipped.
10036
+ */
10037
+ tableStylesToDelete?: string[];
9542
10038
  /**
9543
10039
  * Target output format.
9544
10040
  * - `'pptx'` (default): Standard presentation.
@@ -10568,6 +11064,23 @@ interface CollaborationConfig {
10568
11064
  */
10569
11065
  writeBackDebounceMs?: number;
10570
11066
  }
11067
+ //#endregion
11068
+ //#region src/render/animation-text-style-resolve.d.ts
11069
+ /**
11070
+ * Framework-neutral text-style override a font-style emphasis effect applies
11071
+ * on top of its target's own authored per-run bold/italic/underline/size/
11072
+ * colour. Every binding maps this onto its own text container so it OVERRIDES
11073
+ * the runs' inline styles (the runs carry explicit inline styles of their
11074
+ * own, so plain CSS inheritance cannot reach them).
11075
+ */
11076
+ interface TextStyleAnimationDescriptor {
11077
+ bold?: boolean;
11078
+ italic?: boolean;
11079
+ underline?: boolean;
11080
+ /** Relative multiplier against each run's own authored font size. */
11081
+ fontScale?: number;
11082
+ color?: string;
11083
+ }
10571
11084
  /**
10572
11085
  * Normalized staged-reveal mode for a chart graphic frame, derived from the
10573
11086
  * OOXML `a:bldChart/@bld` (or `p:bldOleChart/@bld`) token:
@@ -10623,6 +11136,27 @@ interface ChartRevealDescriptor {
10623
11136
  /** Individual cells revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect. */
10624
11137
  points: readonly ChartRevealPoint[];
10625
11138
  }
11139
+ /**
11140
+ * Playback-time SmartArt diagram reveal state derived from AUTHORED
11141
+ * `p:graphicEl/p:dgm/@id` indices (see `diagram-reveal-descriptor`'s
11142
+ * `resolveDiagramRevealDescriptor`), rather than from click-count/time
11143
+ * progress. Present on {@link ElementAnimationState.diagramReveal} only when
11144
+ * every fired diagram-build step for the element carried `p:graphicEl` data.
11145
+ * A SmartArt renderer prefers this over the progress-based `build` /
11146
+ * {@link ElementBuildState} path when present, since it reflects the real
11147
+ * authored reveal set (correct even for a reversed-order or by-branch build),
11148
+ * and falls back to `build` when absent.
11149
+ */
11150
+ interface DiagramRevealDescriptor {
11151
+ /**
11152
+ * Whether the diagram's background/connector chrome should currently be
11153
+ * visible: `true` once any node-revealing or background-revealing
11154
+ * (`bldStep="bg"`) step has fired.
11155
+ */
11156
+ background: boolean;
11157
+ /** Data-model point ids (`PptxSmartArtNode.id`) revealed so far. */
11158
+ nodeIds: ReadonlySet<string>;
11159
+ }
10626
11160
  /**
10627
11161
  * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
10628
11162
  * `progress` is the 0..1 fraction of the build revealed at the current playback
@@ -10663,6 +11197,17 @@ interface ElementAnimationState {
10663
11197
  mode: ChartBuildMode;
10664
11198
  descriptor: ChartRevealDescriptor;
10665
11199
  };
11200
+ /**
11201
+ * Authored-index SmartArt diagram reveal state (see
11202
+ * {@link DiagramRevealDescriptor}), present only when every fired
11203
+ * diagram-build step for this element carried `p:graphicEl` node-id data.
11204
+ * `diagram-build`'s `resolveRevealedSmartArtNodes` prefers this over `build`
11205
+ * when present.
11206
+ */
11207
+ diagramReveal?: {
11208
+ mode: DiagramBuildMode;
11209
+ descriptor: DiagramRevealDescriptor;
11210
+ };
10666
11211
  /**
10667
11212
  * True when an active `p:animClr` color animation targets this shape's fill.
10668
11213
  * A vector renderer should then paint the fill with `fill: inherit` so the
@@ -10676,6 +11221,18 @@ interface ElementAnimationState {
10676
11221
  * `stroke: inherit`. Absent/false means no active stroke-colour animation.
10677
11222
  */
10678
11223
  animatesStroke?: boolean;
11224
+ /**
11225
+ * Active discrete font-style / colour / size override (see
11226
+ * {@link TimelineStep.textStyle}) a font-style emphasis effect currently
11227
+ * applies to this element's text, OVERRIDING the runs' own inline
11228
+ * bold/italic/underline/size/colour. `animation-playback-engine.ts` writes
11229
+ * this on step start and again on cleanup (held in full when the effect's
11230
+ * `p:cTn/@fill` holds its end state, otherwise reverted); a text renderer
11231
+ * maps it onto its run markup via `buildTextStyleOverrideCss`
11232
+ * (`animation-text-style-css.ts`). Absent means no font-style emphasis
11233
+ * effect is currently active on this element.
11234
+ */
11235
+ textStyle?: TextStyleAnimationDescriptor;
10679
11236
  }
10680
11237
  //#endregion
10681
11238
  //#region src/render/motion-path-authoring.d.ts