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
@@ -573,6 +573,44 @@ interface PptxCustomPathProperties {
573
573
  customGeometryTextRect?: CustomGeometryTextRect;
574
574
  }
575
575
  //#endregion
576
+ //#region src/core/types/color-ref.d.ts
577
+ /**
578
+ * Theme colour references: the typed counterpart of `<a:schemeClr>`.
579
+ *
580
+ * A colour picked from the theme palette is remembered as a scheme slot plus
581
+ * PowerPoint's luminance variants rather than as the sRGB it currently
582
+ * resolves to, so a later theme change re-colours the shape (and a saved file
583
+ * keeps `<a:schemeClr>` instead of a canonical `<a:srgbClr>`).
584
+ *
585
+ * @module types/color-ref
586
+ */
587
+ /**
588
+ * The scheme slot names `a:schemeClr/@val` accepts (ECMA-376 `ST_SchemeColorIndex`).
589
+ * `bg1`/`tx1`/`bg2`/`tx2` are the colour-map aliases a slide resolves through
590
+ * `p:clrMap`; `phClr` is the placeholder colour used inside a theme's style
591
+ * matrix and is never chosen from a picker.
592
+ */
593
+ type PptxThemeColorSchemeName = 'dk1' | 'lt1' | 'dk2' | 'lt2' | 'accent1' | 'accent2' | 'accent3' | 'accent4' | 'accent5' | 'accent6' | 'hlink' | 'folHlink' | 'bg1' | 'tx1' | 'bg2' | 'tx2' | 'phClr';
594
+ /**
595
+ * A theme colour choice. Every transform is a 0..1 fraction of the OOXML
596
+ * percentage (`lumMod val="20000"` is `lumMod: 0.2`), matching how the parser
597
+ * reads them, and is applied in the order `a:schemeClr` children are written:
598
+ * `tint`, `shade`, `lumMod`, `lumOff`, `alpha`.
599
+ */
600
+ interface PptxThemeColorRef {
601
+ scheme: PptxThemeColorSchemeName;
602
+ /** `a:lumMod`: multiply HSL luminance (PowerPoint's "Lighter/Darker" rows). */
603
+ lumMod?: number;
604
+ /** `a:lumOff`: add to HSL luminance after `lumMod` ("Lighter N%" rows). */
605
+ lumOff?: number;
606
+ /** `a:tint`: blend towards white. */
607
+ tint?: number;
608
+ /** `a:shade`: blend towards black. */
609
+ shade?: number;
610
+ /** `a:alpha`: opacity fraction (1 = opaque). */
611
+ alpha?: number;
612
+ }
613
+ //#endregion
576
614
  //#region src/core/types/effect-dag.d.ts
577
615
  type EffectDagBlendMode = 'darken' | 'lighten' | 'mult' | 'over' | 'screen';
578
616
  type EffectDagContainerType = 'sib' | 'tree';
@@ -862,6 +900,15 @@ interface ShapeStyle {
862
900
  * back to canonical `<a:srgbClr>`.
863
901
  */
864
902
  fillColorXml?: XmlObject;
903
+ /**
904
+ * Typed theme colour reference for the fill, set when {@link fillColorXml}
905
+ * is a plain `a:schemeClr` (see `themeColorRefFromColorChoice`). When
906
+ * present it WINS on save: the writer emits `<a:schemeClr>` from this ref
907
+ * instead of the resolved {@link fillColor}, so the fill keeps following
908
+ * the theme palette after a later theme change. `undefined` means the fill
909
+ * is a plain hex (or a colour kind a ref cannot express).
910
+ */
911
+ fillColorRef?: PptxThemeColorRef;
865
912
  fillGradient?: string;
866
913
  /** Original `gradFill` XML retained for unknown-child and extension round-tripping. */
867
914
  fillGradientXml?: XmlObject;
@@ -896,6 +943,12 @@ interface ShapeStyle {
896
943
  opacity?: number;
897
944
  /** Raw XML colour node preserved for round-trip (e.g. a:schemeClr with transforms). */
898
945
  originalColorXml?: XmlObject;
946
+ /**
947
+ * Typed theme colour reference for this stop, set when
948
+ * {@link originalColorXml} is a plain `a:schemeClr`. Wins on save, same
949
+ * as {@link ShapeStyle.fillColorRef}.
950
+ */
951
+ colorRef?: PptxThemeColorRef;
899
952
  }>;
900
953
  fillGradientAngle?: number;
901
954
  fillGradientType?: 'linear' | 'radial';
@@ -942,6 +995,12 @@ interface ShapeStyle {
942
995
  * round-trip serialisation. See {@link fillColorXml} for the rationale.
943
996
  */
944
997
  strokeColorXml?: XmlObject;
998
+ /**
999
+ * Typed theme colour reference for the outline, mirroring
1000
+ * {@link fillColorRef}: set when {@link strokeColorXml} is a plain
1001
+ * `a:schemeClr`, and wins on save.
1002
+ */
1003
+ strokeColorRef?: PptxThemeColorRef;
945
1004
  /**
946
1005
  * Kind of fill painted on the outline (`a:ln` child). Distinguishes a solid
947
1006
  * outline from a gradient/pattern/none outline so save can emit the correct
@@ -1445,6 +1504,15 @@ interface TextStyle {
1445
1504
  * verbatim when the resolved {@link color} still matches this node.
1446
1505
  */
1447
1506
  colorXml?: XmlObject;
1507
+ /**
1508
+ * Typed theme colour reference for the run's text colour, set when
1509
+ * {@link colorXml} is a plain `a:schemeClr` (see
1510
+ * `themeColorRefFromColorChoice`). When present it WINS on save: the
1511
+ * writer emits `<a:schemeClr>` from this ref instead of the resolved
1512
+ * {@link color}, so the text keeps following the theme palette after a
1513
+ * later theme change.
1514
+ */
1515
+ colorRef?: PptxThemeColorRef;
1448
1516
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1449
1517
  /**
1450
1518
  * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
@@ -1870,6 +1938,12 @@ interface BulletInfo {
1870
1938
  * identity rather than being flattened to `<a:srgbClr/>` on save.
1871
1939
  */
1872
1940
  colorXml?: XmlObject;
1941
+ /**
1942
+ * Typed theme colour reference for the bullet colour, set when
1943
+ * {@link colorXml} is a plain `a:schemeClr`. Wins on save, same as
1944
+ * {@link TextStyle.colorRef}.
1945
+ */
1946
+ colorRef?: PptxThemeColorRef;
1873
1947
  /** True when `a:buNone` explicitly suppresses bullets. */
1874
1948
  none?: boolean;
1875
1949
  /** Picture bullet: relationship ID from `a:buBlip` → `a:blip[@r:embed]`. */
@@ -2322,7 +2396,38 @@ interface PptxChartDataPointPicture {
2322
2396
  //#region src/core/types/chart-pivot-format.d.ts
2323
2397
  interface PptxChartPivotFormat {
2324
2398
  index: number;
2399
+ /**
2400
+ * Typed projection of `spPr` (fill/stroke colour, stroke width, dash
2401
+ * style). When the parser is given a colour resolver (the normal case: the
2402
+ * runtime always supplies one), both a literal `a:srgbClr` and an
2403
+ * `a:schemeClr` theme reference (with its `lumMod`/`lumOff`/`tint`/`shade`
2404
+ * modifiers) resolve to a hex colour here, the same theme +
2405
+ * `c:clrMapOvr` chain the rest of chart parsing uses. Without a resolver
2406
+ * (e.g. a hand-built `PptxChartPivotFormat` with no theme to resolve
2407
+ * against), only the literal case resolves. Either way the authored node
2408
+ * is byte-preserved through {@link shapePropertiesXml} until this field is
2409
+ * set to something that no longer matches what re-parses off the current
2410
+ * XML; setting it then re-derives `shapePropertiesXml` on save (merged
2411
+ * onto whatever was already authored, keeping an unrelated schemeClr
2412
+ * reference alive when the colour itself is unchanged) unless
2413
+ * `shapePropertiesXml` is set explicitly, which wins.
2414
+ */
2415
+ shapeProperties?: PptxChartShapeProps;
2416
+ /**
2417
+ * Typed projection of `txPr`'s `a:p/a:pPr/a:defRPr` (size/bold/italic/
2418
+ * colour/family), the same shape a legend entry or data-table's text
2419
+ * override models. Colour resolution mirrors {@link shapeProperties}
2420
+ * (theme-resolved `schemeClr` when a colour resolver is supplied, literal
2421
+ * `srgbClr` otherwise). See {@link txPrXml} for the raw fallback.
2422
+ */
2423
+ textStyle?: PptxChartLegendTextStyle;
2424
+ /**
2425
+ * Typed projection of `marker` (symbol/size/spPr). See {@link markerXml}
2426
+ * for the raw fallback.
2427
+ */
2428
+ marker?: PptxChartMarker;
2325
2429
  shapePropertiesXml?: XmlObject | null;
2430
+ txPrXml?: XmlObject | null;
2326
2431
  markerXml?: XmlObject | null;
2327
2432
  dataLabelXml?: XmlObject | null;
2328
2433
  extensionListXml?: XmlObject | null;
@@ -2481,21 +2586,40 @@ interface PptxChartStyleDefinition {
2481
2586
  plotArea?: PptxChartStylePartEntry;
2482
2587
  }
2483
2588
  //#endregion
2484
- //#region src/core/types/chart-user-shapes.d.ts
2589
+ //#region src/core/types/chart-title.d.ts
2485
2590
  /**
2486
- * Types for chart drawing-overlay shapes (`c:userShapes`).
2591
+ * Chart title rich-text run type, split out of `types/chart.ts` (already at
2592
+ * the repo's file-size limit) to keep that module from growing further.
2487
2593
  *
2488
- * A chart's `c:userShapes` element carries an `r:id` that references a
2489
- * separate drawing part (`ppt/drawings/drawingN.xml`) whose root is a
2490
- * `c:userShapes` element populated with `cdr:relSizeAnchor` /
2491
- * `cdr:absSizeAnchor` wrappers around `sp` / `pic` / `cxnSp` shapes drawn on
2492
- * top of the chart plot. These interfaces describe the parsed, renderable
2493
- * overlay model. The raw reference is preserved separately on
2494
- * {@link PptxChartData.userShapesXml} for verbatim round-trip save; this model
2495
- * is render-only.
2594
+ * @module pptx-types/chart-title
2595
+ */
2596
+ /**
2597
+ * One run of a chart title's rich text (`c:title/c:tx/c:rich/a:p/a:r`).
2496
2598
  *
2497
- * @module pptx-types/chart-user-shapes
2599
+ * The flat `PptxChartData.title` field only ever captured the FIRST run's
2600
+ * text with no per-run formatting; `titleRuns` (when present) is the
2601
+ * lossless, multi-run replacement parsed from the same `c:rich` body. Absent
2602
+ * when the title has no rich text at all (an empty/auto title, or one
2603
+ * authored as a linked-cell reference).
2498
2604
  */
2605
+ interface PptxChartTitleRun {
2606
+ /** This run's text (`a:t`). */
2607
+ text: string;
2608
+ /** `a:rPr/@_b`. */
2609
+ bold?: boolean;
2610
+ /** `a:rPr/@_i`. */
2611
+ italic?: boolean;
2612
+ /**
2613
+ * Font size in POINTS (`a:rPr/@_sz`, hundredths of a point / 100), matching
2614
+ * `PptxChartLegendTextStyle.fontSize`'s convention rather than the pixel
2615
+ * convention `TextStyle.fontSize` uses for slide text.
2616
+ */
2617
+ fontSize?: number;
2618
+ /** Resolved hex colour (e.g. `"#FF0000"`) from `a:rPr/a:solidFill`. */
2619
+ color?: string;
2620
+ }
2621
+ //#endregion
2622
+ //#region src/core/types/chart-user-shapes.d.ts
2499
2623
  /** A single paragraph of overlay-shape text with light formatting. */
2500
2624
  interface PptxChartUserShapeParagraph {
2501
2625
  /** Joined run text of the paragraph. */
@@ -2511,6 +2635,80 @@ interface PptxChartUserShapeParagraph {
2511
2635
  /** Paragraph alignment (`a:pPr/@algn`): left / centre / right. */
2512
2636
  align?: 'l' | 'ctr' | 'r';
2513
2637
  }
2638
+ /**
2639
+ * The DrawingML 2D group transform (`a:xfrm` inside `cdr:grpSpPr`) that
2640
+ * anchors a `grpSp`'s own box ({@link off}/{@link ext}) and establishes the
2641
+ * coordinate space its children are expressed in ({@link chOff}/{@link
2642
+ * chExt}), all in EMU. A child's position within the group is mapped into
2643
+ * the group's own box via
2644
+ * `frac = (child.off - chOff) / chExt`, then applied to the enclosing
2645
+ * anchor's box; see `flattenChartUserShapes` in
2646
+ * `chart-user-shapes-parser.ts`.
2647
+ */
2648
+ interface PptxChartUserShapeGroupTransform {
2649
+ /** The group's own position in its parent's coordinate space, in EMU. */
2650
+ off: {
2651
+ x: number;
2652
+ y: number;
2653
+ };
2654
+ /** The group's own size in its parent's coordinate space, in EMU. */
2655
+ ext: {
2656
+ cx: number;
2657
+ cy: number;
2658
+ };
2659
+ /** Origin of the child coordinate space (`a:chOff`), in EMU. */
2660
+ chOff: {
2661
+ x: number;
2662
+ y: number;
2663
+ };
2664
+ /** Size of the child coordinate space (`a:chExt`), in EMU. */
2665
+ chExt: {
2666
+ cx: number;
2667
+ cy: number;
2668
+ };
2669
+ }
2670
+ /**
2671
+ * One shape grouped inside a `cdr:grpSp` (or a nested `cdr:grpSp` itself).
2672
+ * Unlike a top-level {@link PptxChartUserShape}, a group child has no
2673
+ * drawing anchor of its own: its position is expressed in its parent
2674
+ * group's child coordinate space via {@link off}/{@link ext} (EMU, read
2675
+ * from the child's own `a:xfrm`), not as a chart-relative fraction.
2676
+ */
2677
+ interface PptxChartUserShapeGroupChild {
2678
+ /** Shape kind, same vocabulary as {@link PptxChartUserShape.kind}. */
2679
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2680
+ /** Position within the parent group's child coordinate space, in EMU. */
2681
+ off: {
2682
+ x: number;
2683
+ y: number;
2684
+ };
2685
+ /** Size within the parent group's child coordinate space, in EMU. */
2686
+ ext: {
2687
+ cx: number;
2688
+ cy: number;
2689
+ };
2690
+ /** Preset geometry name (`a:prstGeom/@prst`), defaulting to `"rect"`. */
2691
+ prst?: string;
2692
+ /** Resolved solid-fill hex colour, when present. */
2693
+ fill?: string;
2694
+ /** Resolved line/stroke hex colour, when present. */
2695
+ stroke?: string;
2696
+ /** Line width in points (`a:ln/@w` divided by 12700), when present. */
2697
+ strokeWidth?: number;
2698
+ /** Text paragraphs of the shape's `txBody`, when present. */
2699
+ paragraphs?: PptxChartUserShapeParagraph[];
2700
+ /**
2701
+ * Verbatim source XML of a `pic`/`graphicFrame` child, or of this node
2702
+ * itself when `kind === 'grpSp'` and the nested group is untouched since
2703
+ * parse. See {@link PptxChartUserShape.rawXml}'s doc for the same
2704
+ * contract one level up.
2705
+ */
2706
+ rawXml?: XmlObject;
2707
+ /** Present when `kind === 'grpSp'`: this nested group's own transform. */
2708
+ transform?: PptxChartUserShapeGroupTransform;
2709
+ /** Present when `kind === 'grpSp'`: this nested group's own children. */
2710
+ children?: PptxChartUserShapeGroupChild[];
2711
+ }
2514
2712
  /**
2515
2713
  * A parsed chart-overlay shape positioned by a drawing anchor.
2516
2714
  *
@@ -2521,12 +2719,13 @@ interface PptxChartUserShapeParagraph {
2521
2719
  interface PptxChartUserShape {
2522
2720
  /**
2523
2721
  * Shape kind: text/preset shape, connector, picture, a group of the
2524
- * above (`grpSp`, flattened: each grouped child becomes its own entry
2525
- * reusing the anchor's own bounding box, an approximation since the
2526
- * group's internal chOff/chExt transform is not applied), or a bare
2527
- * placeholder for a `graphicFrame` anchor child (deep content such as a
2528
- * nested chart or table is out of scope; it only keeps the anchor's
2529
- * space accounted for instead of the whole overlay disappearing).
2722
+ * above (`grpSp`, with its own {@link transform} and {@link children},
2723
+ * nested arbitrarily; use `flattenChartUserShapes` from
2724
+ * `chart-user-shapes-parser.ts` to get a flat, render-ready leaf list
2725
+ * with the group transform already applied), or a bare placeholder for
2726
+ * a `graphicFrame` anchor child (deep content such as a nested chart or
2727
+ * table is out of scope; it only keeps the anchor's space accounted for
2728
+ * instead of the whole overlay disappearing).
2530
2729
  */
2531
2730
  kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2532
2731
  /** Anchor kind that positioned the shape. */
@@ -2556,6 +2755,26 @@ interface PptxChartUserShape {
2556
2755
  strokeWidth?: number;
2557
2756
  /** Text paragraphs of the shape's `txBody`, when present. */
2558
2757
  paragraphs?: PptxChartUserShapeParagraph[];
2758
+ /**
2759
+ * Verbatim source XML of a `pic` or `graphicFrame` anchor child (the
2760
+ * `cdr:pic` / `cdr:graphicFrame` node itself, not the enclosing anchor),
2761
+ * or of the `cdr:grpSp` node itself when `kind === 'grpSp'` and the
2762
+ * group is untouched since parse (byte-identical passthrough). None of
2763
+ * these three kinds have a reconstructable typed representation that is
2764
+ * guaranteed lossless (a picture's blip reference, a nested chart/table's
2765
+ * graphic content, or a group's exact child ordering/ids), so the
2766
+ * serializer re-emits this verbatim when present instead of a lossy
2767
+ * rebuild. Editing a shape inside a group (via the SDK's path-based
2768
+ * overlay operations) clears the group's `rawXml` so the serializer
2769
+ * regenerates it from {@link transform}/{@link children} instead. Absent
2770
+ * for `sp`/`cxnSp`, which round-trip losslessly through their typed
2771
+ * fields above.
2772
+ */
2773
+ rawXml?: XmlObject;
2774
+ /** Present when `kind === 'grpSp'`: the group's own transform. */
2775
+ transform?: PptxChartUserShapeGroupTransform;
2776
+ /** Present when `kind === 'grpSp'`: the grouped children, nested arbitrarily. */
2777
+ children?: PptxChartUserShapeGroupChild[];
2559
2778
  }
2560
2779
  //#endregion
2561
2780
  //#region src/core/types/chart.d.ts
@@ -2629,6 +2848,10 @@ interface PptxChartTrendline {
2629
2848
  displayRSq?: boolean;
2630
2849
  displayEq?: boolean;
2631
2850
  color?: string;
2851
+ /** Trendline width in points (`c:trendline/c:spPr/a:ln/@w`, EMU / 12700). */
2852
+ lineWidth?: number;
2853
+ /** Trendline dash style (`c:trendline/c:spPr/a:ln/a:prstDash/@val`). */
2854
+ lineDashStyle?: string;
2632
2855
  label?: PptxChartTrendlineLabel | null;
2633
2856
  }
2634
2857
  /** Typed, commonly edited properties of `c:trendlineLbl`. */
@@ -2674,6 +2897,10 @@ interface PptxChartErrBars {
2674
2897
  customMinus?: number[];
2675
2898
  noEndCap?: boolean;
2676
2899
  color?: string;
2900
+ /** Error-bar line width in points (`c:errBars/c:spPr/a:ln/@w`, EMU / 12700). */
2901
+ width?: number;
2902
+ /** Error-bar line dash style (`c:errBars/c:spPr/a:ln/a:prstDash/@val`). */
2903
+ dashStyle?: string;
2677
2904
  }
2678
2905
  /**
2679
2906
  * Visibility flags for the chart data table (axes + legend keys).
@@ -2800,6 +3027,12 @@ interface PptxChartDataLabel {
2800
3027
  * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2801
3028
  */
2802
3029
  txPr?: PptxChartLegendTextStyle;
3030
+ /**
3031
+ * This label's own shape formatting (`c:dLbl/c:spPr`): fill/line colour,
3032
+ * width, and dash style for the label's callout box, taking precedence
3033
+ * over any chart/series-level default when set.
3034
+ */
3035
+ spPr?: PptxChartShapeProps;
2803
3036
  }
2804
3037
  /** Axis number format. */
2805
3038
  interface PptxChartAxisNumFmt {
@@ -3363,6 +3596,16 @@ interface PptxChartDateCategories {
3363
3596
  */
3364
3597
  interface PptxChartData {
3365
3598
  title?: string;
3599
+ /**
3600
+ * Rich-text runs of the title, parsed from `c:title/c:tx/c:rich` (issue:
3601
+ * chart title rich text). Lossless multi-run alternative to the flat
3602
+ * {@link title}: when present, the writer serialises every run's own
3603
+ * bold/italic/size/color; when absent, save falls back to the flat
3604
+ * `title` path as before. Only populated for a classic (`c:`) chart's
3605
+ * rich (typed) title, not a ChartEx (`cx:`) title or one authored as a
3606
+ * linked-cell reference.
3607
+ */
3608
+ titleRuns?: PptxChartTitleRun[];
3366
3609
  chartType: PptxChartType;
3367
3610
  categories: string[];
3368
3611
  /**
@@ -3454,8 +3697,10 @@ interface PptxChartData {
3454
3697
  chartRelationshipId?: string;
3455
3698
  /** `null` explicitly removes an existing ChartML data table. */
3456
3699
  dataTable?: PptxChartDataTable | null;
3457
- dropLines?: PptxChartLineStyle;
3458
- hiLowLines?: PptxChartLineStyle;
3700
+ /** `null` explicitly removes an existing `c:dropLines` element. */
3701
+ dropLines?: PptxChartLineStyle | null;
3702
+ /** `null` explicitly removes an existing `c:hiLowLines` element. */
3703
+ hiLowLines?: PptxChartLineStyle | null;
3459
3704
  /** `null` explicitly removes an existing up/down-bars container. */
3460
3705
  upDownBars?: PptxChartUpDownBars | null;
3461
3706
  axes?: PptxChartAxisFormatting[];
@@ -3570,10 +3815,13 @@ interface PptxChartData {
3570
3815
  pivotFormats?: PptxChartPivotFormats | null;
3571
3816
  /**
3572
3817
  * Color-map override (`c:clrMapOvr`) carrying 12 attributes that
3573
- * remap theme colour roles for this chart only. Preserved as a flat
3574
- * `attribute value` map for round-trip fidelity.
3818
+ * remap theme colour roles for this chart only. Modeled as a flat
3819
+ * `attribute -> value` map (e.g. `{ bg1: 'lt1', accent1: 'accent2' }`)
3820
+ * so unknown/future attributes round-trip without code changes.
3821
+ * `null` explicitly removes an existing `c:clrMapOvr`; an empty object
3822
+ * is treated the same as `null` on save.
3575
3823
  */
3576
- clrMapOvr?: Record<string, string>;
3824
+ clrMapOvr?: Record<string, string> | null;
3577
3825
  /**
3578
3826
  * Whether the chart's own cached numeric values use the 1904 date epoch
3579
3827
  * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
@@ -4950,13 +5198,55 @@ interface PptxSmartArtData {
4950
5198
  drawingDirty?: boolean;
4951
5199
  }
4952
5200
  //#endregion
4953
- //#region src/core/types/table.d.ts
5201
+ //#region src/core/types/table-style-edit.d.ts
5202
+ /**
5203
+ * A `a:fillRef`/`a:lnRef`/`a:effectRef`-style style-matrix reference: an
5204
+ * index into the theme's format scheme (`a:fmtScheme/a:fillStyleLst`, 1-based
5205
+ * per ECMA-376 §20.1.4.1.12) plus an optional colour transform child.
5206
+ *
5207
+ * Distinct from an already-resolved {@link ParsedTableStyleFill}: a fill ref
5208
+ * points AT a theme style-matrix entry rather than carrying a colour choice
5209
+ * directly, though the two commonly appear together (`<a:fillRef idx="2">
5210
+ * <a:schemeClr val="accent1"/></a:fillRef>`).
5211
+ *
5212
+ * @example
5213
+ * ```ts
5214
+ * const ref: ParsedTableFillRef = { idx: 2, color: { schemeColor: 'accent1' } };
5215
+ * // => satisfies ParsedTableFillRef
5216
+ * ```
5217
+ */
5218
+ interface ParsedTableFillRef {
5219
+ /** 1-based index into the theme format scheme's fill style list. */
5220
+ idx: number;
5221
+ /** Colour transform child (`a:schemeClr`/`a:srgbClr`) applied to the referenced style. */
5222
+ color?: ParsedTableStyleFill;
5223
+ }
4954
5224
  /**
4955
- * Table types: cell styling, cell data, rows, table data, and the parsed
4956
- * table style map from `ppt/tableStyles.xml`.
5225
+ * One leaf (or `effectDag`-wrapped) node of an `a:effectLst`/`a:effectDag`
5226
+ * effect chain, kept mostly opaque: {@link kind} names the OOXML element so a
5227
+ * consumer can recognise common effects (`outerShdw`, `glow`, `softEdge`,
5228
+ * `reflection`, `blur`, `innerShdw`, `prstShdw`, `fillOverlay`, `alphaModFix`,
5229
+ * `alphaInv`, `grayscl`, `biLevel`, `duotone`, `hsl`, `lum`, `tint`) without
5230
+ * this module re-deriving the full shape-effect taxonomy already modelled on
5231
+ * `ShapeStyle`; {@link xml} preserves the node verbatim for lossless re-emit.
4957
5232
  *
4958
- * @module pptx-types/table
5233
+ * @example
5234
+ * ```ts
5235
+ * const effect: ParsedTableStyleEffect = {
5236
+ * kind: 'outerShdw',
5237
+ * xml: { '@_blurRad': '40000', '@_dist': '20000', '@_dir': '5400000' },
5238
+ * };
5239
+ * // => satisfies ParsedTableStyleEffect
5240
+ * ```
4959
5241
  */
5242
+ interface ParsedTableStyleEffect {
5243
+ /** The OOXML element's local name, e.g. `outerShdw`, `glow`, `softEdge`. */
5244
+ kind: string;
5245
+ /** Verbatim XML node (attributes + children) for lossless round-trip. */
5246
+ xml: XmlObject;
5247
+ }
5248
+ //#endregion
5249
+ //#region src/core/types/table.d.ts
4960
5250
  /**
4961
5251
  * Per-cell visual style for a table cell.
4962
5252
  *
@@ -4993,6 +5283,14 @@ interface PptxTableCellStyle {
4993
5283
  * future expansion alongside the run-properties round-trip path.
4994
5284
  */
4995
5285
  colorXml?: XmlObject;
5286
+ /**
5287
+ * Typed theme colour reference for the cell text colour, set when
5288
+ * {@link colorXml} is a plain `a:schemeClr`. Wins on save, mirroring
5289
+ * `TextStyle.colorRef`. Distinct from {@link ParsedTableStyleFill.schemeColor},
5290
+ * which describes a `ppt/tableStyles.xml` section fill rather than an
5291
+ * individual cell override.
5292
+ */
5293
+ colorRef?: PptxThemeColorRef;
4996
5294
  backgroundColor?: string;
4997
5295
  /**
4998
5296
  * Raw XML colour-choice node preserved from cell `a:tcPr/a:solidFill` for
@@ -5000,6 +5298,12 @@ interface PptxTableCellStyle {
5000
5298
  * {@link backgroundColor} still matches the original colour.
5001
5299
  */
5002
5300
  backgroundColorXml?: XmlObject;
5301
+ /**
5302
+ * Typed theme colour reference for the cell fill, set when
5303
+ * {@link backgroundColorXml} is a plain `a:schemeClr`. Wins on save,
5304
+ * mirroring `ShapeStyle.fillColorRef`.
5305
+ */
5306
+ backgroundColorRef?: PptxThemeColorRef;
5003
5307
  borderColor?: string;
5004
5308
  /** Top border width in px. */
5005
5309
  borderTopWidth?: number;
@@ -5313,12 +5617,14 @@ interface PptxTableData {
5313
5617
  */
5314
5618
  tableFill?: ParsedTableStyleFill;
5315
5619
  /**
5316
- * Whether `a:tblPr` carries its own `a:effectLst`/`a:effectDag`,
5317
- * independent of the referenced table style. Presence-only: the concrete
5318
- * effect is not yet rendered, and the raw XML round-trips separately via
5319
- * whatever preserves `a:tblPr`'s unrecognised children (issue G6).
5620
+ * `a:tblPr`'s own `a:effectLst` (or `a:effectDag`) effect chain,
5621
+ * independent of the referenced table style, decomposed into a typed
5622
+ * sequence of {@link ParsedTableStyleEffect} nodes (issue G6). Each node
5623
+ * keeps its own XML verbatim for lossless round-trip; empty array is
5624
+ * normalised to `undefined` by the parser so `tableEffects` is only ever
5625
+ * present when there is at least one effect.
5320
5626
  */
5321
- tableEffects?: boolean;
5627
+ tableEffects?: ParsedTableStyleEffect[];
5322
5628
  }
5323
5629
  /**
5324
5630
  * A single fill reference within a table style section.
@@ -5494,13 +5800,20 @@ interface ParsedTableStyleBorders {
5494
5800
  /**
5495
5801
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
5496
5802
  *
5497
- * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Currently
5498
- * captures only the resolved scheme-fill colour (verbatim XML for fill
5499
- * / effect references is preserved separately by the save path).
5803
+ * Corresponds to the `<a:tblBg>` child of `<a:tblStyle>`. Captures the
5804
+ * resolved scheme-fill colour, an unresolved style-matrix `a:fillRef`, and a
5805
+ * presence flag for effects (verbatim XML for the effect list is preserved
5806
+ * separately by the save path).
5500
5807
  */
5501
5808
  interface ParsedTableBackground {
5502
5809
  /** Solid fill (resolved from `a:fill > a:solidFill > a:schemeClr`). */
5503
5810
  fill?: ParsedTableStyleFill;
5811
+ /**
5812
+ * Style-matrix fill reference (`<a:fillRef idx="N">...</a:fillRef>`),
5813
+ * mutually exclusive with {@link fill} (`a:fill` is the choice sibling of
5814
+ * `a:fillRef` in `CT_TableBackgroundStyle`).
5815
+ */
5816
+ fillRef?: ParsedTableFillRef;
5504
5817
  /** Has an `a:effectLst` child that should be round-tripped. */
5505
5818
  hasEffectLst?: boolean;
5506
5819
  }
@@ -5614,6 +5927,21 @@ interface PptxAccessibilityProperties {
5614
5927
  */
5615
5928
  isDecorative?: boolean;
5616
5929
  }
5930
+ /**
5931
+ * Accessibility description/title from `p:cNvPr/@descr` / `@title` on a
5932
+ * plain shape, text box or connector (`p:sp` / `p:cxnSp`). The same pair of
5933
+ * attributes already round-trips for a graphic frame (see
5934
+ * {@link TablePptxElement.altText}) and, `descr` only, for a picture
5935
+ * ({@link PptxImageProperties.altText}); this mixin extends it to the three
5936
+ * element kinds whose PowerPoint Alt Text pane data was previously dropped
5937
+ * on load because neither field existed on the model.
5938
+ */
5939
+ interface PptxNonVisualDescription {
5940
+ /** `p:cNvPr/@descr`. */
5941
+ altText?: string;
5942
+ /** `p:cNvPr/@title`. */
5943
+ title?: string;
5944
+ }
5617
5945
  /**
5618
5946
  * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5619
5947
  * property distinct from `a:picLocks`.
@@ -5646,7 +5974,7 @@ interface PptxPictureNonVisualProperties {
5646
5974
  * // => satisfies TextPptxElement
5647
5975
  * ```
5648
5976
  */
5649
- interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties {
5977
+ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxNonVisualDescription {
5650
5978
  type: 'text';
5651
5979
  }
5652
5980
  /**
@@ -5664,7 +5992,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5664
5992
  * // => satisfies ShapePptxElement
5665
5993
  * ```
5666
5994
  */
5667
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
5995
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties, PptxNonVisualDescription {
5668
5996
  type: 'shape';
5669
5997
  }
5670
5998
  /**
@@ -5686,7 +6014,7 @@ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShap
5686
6014
  * // => satisfies ConnectorPptxElement
5687
6015
  * ```
5688
6016
  */
5689
- interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties {
6017
+ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxNonVisualDescription {
5690
6018
  type: 'connector';
5691
6019
  }
5692
6020
  /**
@@ -5752,6 +6080,13 @@ interface TablePptxElement extends PptxElementBase {
5752
6080
  type: 'table';
5753
6081
  /** Parsed table cell data for editing. */
5754
6082
  tableData?: PptxTableData;
6083
+ /**
6084
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`, the
6085
+ * same non-visual-properties attribute a picture's alt text comes from.
6086
+ */
6087
+ altText?: string;
6088
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6089
+ title?: string;
5755
6090
  /**
5756
6091
  * Unrecognised extensions captured from `a:graphicData/a:extLst` so they
5757
6092
  * round-trip losslessly. See {@link PptxGraphicFrameExtension}.
@@ -5767,6 +6102,10 @@ interface TablePptxElement extends PptxElementBase {
5767
6102
  interface ChartPptxElement extends PptxElementBase {
5768
6103
  type: 'chart';
5769
6104
  chartData?: PptxChartData;
6105
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6106
+ altText?: string;
6107
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6108
+ title?: string;
5770
6109
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5771
6110
  extensionXml?: PptxGraphicFrameExtension[];
5772
6111
  }
@@ -5784,6 +6123,10 @@ interface ChartPptxElement extends PptxElementBase {
5784
6123
  interface SmartArtPptxElement extends PptxElementBase {
5785
6124
  type: 'smartArt';
5786
6125
  smartArtData?: PptxSmartArtData;
6126
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6127
+ altText?: string;
6128
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6129
+ title?: string;
5787
6130
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5788
6131
  extensionXml?: PptxGraphicFrameExtension[];
5789
6132
  }
@@ -5870,6 +6213,10 @@ interface OlePptxElement extends PptxElementBase {
5870
6213
  * `false`; `undefined` means the source authored no explicit value.
5871
6214
  */
5872
6215
  oleUpdateAutomatic?: boolean;
6216
+ /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6217
+ altText?: string;
6218
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
6219
+ title?: string;
5873
6220
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5874
6221
  extensionXml?: PptxGraphicFrameExtension[];
5875
6222
  }
@@ -5961,6 +6308,15 @@ interface MediaPptxElement extends PptxElementBase {
5961
6308
  * (`r:embed`). Defaults to embedded when undefined.
5962
6309
  */
5963
6310
  isLinked?: boolean;
6311
+ /**
6312
+ * Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`.
6313
+ * Only populated for the `p:graphicFrame`-shaped (SDK-created) media
6314
+ * form; a `p:pic`-shaped media element's alt text is not currently
6315
+ * parsed (see `PptxHandlerRuntimePictureParsing.ts`).
6316
+ */
6317
+ altText?: string;
6318
+ /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. Same scope note as {@link altText}. */
6319
+ title?: string;
5964
6320
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5965
6321
  extensionXml?: PptxGraphicFrameExtension[];
5966
6322
  }
@@ -6467,7 +6823,20 @@ interface PptxAnimationGraphicElementTarget {
6467
6823
  seriesIdx?: number;
6468
6824
  /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6469
6825
  categoryIdx?: number;
6470
- /** `@_bldStep` (ST_TLChartBuildStep): `category` / `categoryEl` / `series` / `seriesEl`. */
6826
+ /**
6827
+ * `p:dgm/@_id` (CT_TLBuildDiagram, ECMA-376 S19.5.10): the diagram DATA MODEL
6828
+ * point id (`dgm:pt/@modelId`) this per-stage effect reveals, when a
6829
+ * `p:bldDgm` build authors one effect per node instead of a single staged
6830
+ * reveal. `dgm`-kind targets only; a `chart`-kind target never carries this.
6831
+ * Matches `PptxSmartArtNode.id` (parsed from the same `@modelId`), so a
6832
+ * diagram renderer can reveal the exact authored node.
6833
+ */
6834
+ id?: string;
6835
+ /**
6836
+ * `@_bldStep`: `ST_TLChartBuildStep` (`category` / `categoryEl` / `series` /
6837
+ * `seriesEl`) for a `chart`-kind target, or `ST_TLDiagramBuildStep`
6838
+ * (`sp` / `bg`) for a `dgm`-kind target.
6839
+ */
6471
6840
  bldStep?: string;
6472
6841
  }
6473
6842
  /**
@@ -6917,6 +7286,34 @@ interface PptxNativeAnimation {
6917
7286
  * `childStyle`, a legacy compatibility hint. Round-tripped only.
6918
7287
  */
6919
7288
  cBhvrOverride?: 'normal' | 'childStyle';
7289
+ /**
7290
+ * `p:set` discrete attribute assignments composed alongside this effect
7291
+ * (ECMA-376 S19.5.79 CT_TLSetBehavior): an instantaneous (non-interpolated)
7292
+ * value change, as opposed to {@link attributeAnimations}'s `p:anim`
7293
+ * keyframe ramps. PowerPoint authors several font-style emphasis effects
7294
+ * this way (Bold Reveal, Underline, Bold Flash, Change Font Size), since
7295
+ * "on/off" or "size N" has nothing to interpolate. Not yet consulted by
7296
+ * shared playback (round-trip/typed-model only so far).
7297
+ */
7298
+ setAnimations?: PptxSetAnimation[];
7299
+ }
7300
+ /**
7301
+ * One `p:set` discrete (non-interpolated) attribute assignment composed
7302
+ * alongside an authored effect. See {@link PptxNativeAnimation.setAnimations}.
7303
+ *
7304
+ * @see ECMA-376 S19.5.79 CT_TLSetBehavior
7305
+ */
7306
+ interface PptxSetAnimation {
7307
+ /** Lowercased target attribute from `p:cBhvr/p:attrNameLst/p:attrName`. */
7308
+ attrName: string;
7309
+ /** Decoded value from `p:to` (same variant shape as a `p:tav/p:val`). */
7310
+ value: string | boolean | number;
7311
+ /** Discriminant indicating which `p:to` child carried the value. */
7312
+ valueType: 'str' | 'bool' | 'int' | 'flt' | 'clr';
7313
+ /** Duration from this behaviour's nested `p:cTn/@dur`. */
7314
+ durationMs?: number;
7315
+ /** Start offset from this behaviour's nested `p:stCondLst`. */
7316
+ delayMs?: number;
6920
7317
  }
6921
7318
  /**
6922
7319
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -7184,6 +7581,16 @@ interface PptxElementAnimation {
7184
7581
  * OOXML equivalent and is not required for playback.
7185
7582
  */
7186
7583
  soundFileName?: string;
7584
+ /**
7585
+ * Per-build-level timing template(s) from the {@link sequence}'s own
7586
+ * `p:bldP/p:tmplLst` (ECMA-376 §19.5.84), carried over from the loaded
7587
+ * `PptxNativeAnimation.buildTemplates` this element animation was derived
7588
+ * from so a full timing-tree rebuild (`PptxAnimationWriteService`'s
7589
+ * `buildTimingXml`, when the slide had no prior `p:timing`) can re-emit
7590
+ * them instead of silently dropping the deck's authored per-level
7591
+ * defaults. Absent when {@link sequence} carries no such template.
7592
+ */
7593
+ buildTemplates?: PptxTimingTemplate[];
7187
7594
  }
7188
7595
  /**
7189
7596
  * A read-only anchor representing one of the deck's own effect groups: a
@@ -8100,6 +8507,22 @@ interface PptxActiveXControl {
8100
8507
  name?: string;
8101
8508
  /** Shape ID this control is linked to (from @spid). */
8102
8509
  shapeId?: string;
8510
+ /**
8511
+ * `p:control/@showAsIcon` (CT_Control, ECMA-376 S19.3.1.2): whether the
8512
+ * control renders as its static icon rather than its live appearance.
8513
+ * `undefined` when the source authored no explicit value (schema default
8514
+ * `false`).
8515
+ */
8516
+ showAsIcon?: boolean;
8517
+ /**
8518
+ * `p:control/@imgW` in EMU (ST_PositiveCoordinate32): the width the host
8519
+ * reserves for the control's icon/preview image. Distinct from
8520
+ * {@link width}, which is the fallback `p:pic`'s own `a:ext/@cx` in px;
8521
+ * `imgW`/`imgH` are direct attributes on `p:control` itself.
8522
+ */
8523
+ imgWidthEmu?: number;
8524
+ /** `p:control/@imgH` in EMU (ST_PositiveCoordinate32). @see imgWidthEmu */
8525
+ imgHeightEmu?: number;
8103
8526
  /** X position (px) of the control's fallback picture, if present. */
8104
8527
  x?: number;
8105
8528
  /** Y position (px) of the control's fallback picture, if present. */
@@ -8556,6 +8979,34 @@ interface PptxPhotoAlbum {
8556
8979
  layout?: string;
8557
8980
  /** Frame style applied to each photo (e.g. "frameStyle1"). */
8558
8981
  frame?: string;
8982
+ /**
8983
+ * `p:photoAlbum/@isPhoto` (ECMA-376 S19.2.1.27, CT_PhotoAlbum): whether
8984
+ * the pictures placed by the album wizard are real photographs, as
8985
+ * opposed to clip art or other embedded images. `undefined` when the
8986
+ * source authored no explicit value (schema default `false`); this is a
8987
+ * purely declarative wizard-provenance flag, not something this library
8988
+ * gates any layout/frame behaviour on.
8989
+ */
8990
+ isPhoto?: boolean;
8991
+ }
8992
+ /**
8993
+ * A recognizer-owned `p:smartTags` reference from `presentation.xml`
8994
+ * (CT_SmartTags, ECMA-376 S19.2.1.42): a bare relationship id pointing at a
8995
+ * legacy Office "Smart Tags" recognizer part, distinct from the
8996
+ * user-authored `p:tags` construct (see {@link PptxTagCollection}).
8997
+ *
8998
+ * This library has no data model for recognizer part CONTENT (there is no
8999
+ * way to create, inspect, or edit one through the public API), so this type
9000
+ * only captures enough to preserve an authored reference losslessly: the
9001
+ * relationship id and, when resolvable, the target part path.
9002
+ */
9003
+ interface PptxSmartTagsReference {
9004
+ /** Relationship id from `p:smartTags/@r:id`. */
9005
+ relId: string;
9006
+ /** Resolved ZIP path of the referenced recognizer part, when resolvable. */
9007
+ targetPath?: string;
9008
+ /** Raw `p:smartTags` XML retained for lossless round-trip. */
9009
+ rawXml?: XmlObject;
8559
9010
  }
8560
9011
  /**
8561
9012
  * East Asian line-break (kinsoku) settings from `p:kinsoku` in `presentation.xml`.
@@ -8620,6 +9071,13 @@ interface PptxData {
8620
9071
  themeOptions?: PptxThemeOption[];
8621
9072
  /** Parsed table style definitions from `ppt/tableStyles.xml`. */
8622
9073
  tableStyleMap?: ParsedTableStyleMap;
9074
+ /**
9075
+ * The current default table style GUID (`ppt/tableStyles.xml`'s
9076
+ * `a:tblStyleLst/@def`): the style PowerPoint applies to a newly inserted
9077
+ * table. Matches `PptxSaveOptions.tableStylesDefaultId` so a save call
9078
+ * that omits it can fall back to what was loaded.
9079
+ */
9080
+ tableStylesDefaultId?: string;
8623
9081
  /** Whether the presentation is password-protected. */
8624
9082
  isPasswordProtected?: boolean;
8625
9083
  /** Embedded font data (name + binary data URL) extracted from the presentation. */
@@ -8679,6 +9137,14 @@ interface PptxData {
8679
9137
  modifyVerifier?: PptxModifyVerifier;
8680
9138
  /** Photo album metadata from `p:photoAlbum` in `presentation.xml`. */
8681
9139
  photoAlbum?: PptxPhotoAlbum;
9140
+ /**
9141
+ * Legacy Smart Tags recognizer reference from `p:smartTags` in
9142
+ * `presentation.xml`. Read-only: there is no data model for the
9143
+ * recognizer part's own content, so this exists to make the reference
9144
+ * inspectable and to prove it survives a save (the owning part and its
9145
+ * relationship are preserved passively, like any other unmodelled part).
9146
+ */
9147
+ smartTags?: PptxSmartTagsReference;
8682
9148
  /** East Asian line-break settings from `p:kinsoku` in `presentation.xml`. */
8683
9149
  kinsoku?: PptxKinsoku;
8684
9150
  /** Custom XML data parts from `customXml/` in the OPC package. */
@@ -8843,6 +9309,14 @@ type FillInput = {
8843
9309
  type: 'solid';
8844
9310
  color: string;
8845
9311
  opacity?: number;
9312
+ /**
9313
+ * A theme colour to use instead of a plain hex. When set, the shape
9314
+ * saves as `<a:schemeClr>` (e.g. `{ scheme: 'accent1', lumMod: 0.8 }`
9315
+ * for "Accent 1, Lighter 80%") so it keeps following the theme after a
9316
+ * later theme change; `color` still supplies the immediate resolved
9317
+ * hex for renderers that read it directly.
9318
+ */
9319
+ themeColorRef?: PptxThemeColorRef;
8846
9320
  } | {
8847
9321
  type: 'gradient';
8848
9322
  /**
@@ -8878,6 +9352,8 @@ interface StrokeInput {
8878
9352
  opacity?: number;
8879
9353
  join?: 'round' | 'bevel' | 'miter';
8880
9354
  cap?: 'flat' | 'rnd' | 'sq';
9355
+ /** A theme colour for the outline; see {@link FillInput}'s `themeColorRef`. */
9356
+ themeColorRef?: PptxThemeColorRef;
8881
9357
  }
8882
9358
  interface ShadowInput {
8883
9359
  color?: string;
@@ -8894,6 +9370,8 @@ interface TextStyleInput {
8894
9370
  underline?: boolean;
8895
9371
  strikethrough?: boolean;
8896
9372
  color?: string;
9373
+ /** A theme colour for the run; see {@link FillInput}'s `themeColorRef`. */
9374
+ themeColorRef?: PptxThemeColorRef;
8897
9375
  alignment?: 'left' | 'center' | 'right' | 'justify';
8898
9376
  verticalAlignment?: 'top' | 'middle' | 'bottom';
8899
9377
  lineSpacing?: number;
@@ -9521,6 +9999,24 @@ interface PptxHandlerSaveOptions {
9521
9999
  * part untouched.
9522
10000
  */
9523
10001
  tableStyles?: ParsedTableStyleMap;
10002
+ /**
10003
+ * Set `ppt/tableStyles.xml`'s `<a:tblStyleLst @def>` to this style GUID
10004
+ * (normalised to uppercase-with-braces). `undefined` preserves the
10005
+ * existing default; there is no removal form (`@def` is required by the
10006
+ * schema and PowerPoint always points it at a real style). No-op when the
10007
+ * archive has no `ppt/tableStyles.xml`, same as {@link tableStyles}.
10008
+ */
10009
+ tableStylesDefaultId?: string;
10010
+ /**
10011
+ * Style GUIDs to remove from `ppt/tableStyles.xml` entirely, kept as a
10012
+ * separate opt-in list rather than inferred from omission on
10013
+ * {@link tableStyles}: that map is documented as safe to pass a PARTIAL
10014
+ * edit (only the entries a caller actually touched), so treating every
10015
+ * GUID missing from it as "delete this" would silently destroy untouched
10016
+ * styles on an ordinary targeted edit. A GUID here that is also the
10017
+ * current (or newly requested) default is left in place and skipped.
10018
+ */
10019
+ tableStylesToDelete?: string[];
9524
10020
  /**
9525
10021
  * Target output format.
9526
10022
  * - `'pptx'` (default): Standard presentation.