pptx-react-viewer 3.5.4 → 3.6.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 (159) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiChatPanel-LPZWDNVU.js → AiChatPanel-LEOEDIW2.js} +25 -25
  3. package/dist/AiChatPanel-LEOEDIW2.js.br +0 -0
  4. package/dist/AiChatPanel-LEOEDIW2.js.gz +0 -0
  5. package/dist/{AiChatPanel-CCJNQGER.mjs → AiChatPanel-WRQGJJVD.mjs} +4 -4
  6. package/dist/AiChatPanel-WRQGJJVD.mjs.br +0 -0
  7. package/dist/AiChatPanel-WRQGJJVD.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-LJCWBNQ3.js → Area3DChartScene-3TJ2GTGI.js} +2 -2
  9. package/dist/Area3DChartScene-3TJ2GTGI.js.br +0 -0
  10. package/dist/Area3DChartScene-3TJ2GTGI.js.gz +0 -0
  11. package/dist/{Area3DChartScene-P6YM6ZL7.mjs → Area3DChartScene-SJC2ZB6R.mjs} +1 -1
  12. package/dist/Area3DChartScene-SJC2ZB6R.mjs.br +2 -0
  13. package/dist/Area3DChartScene-SJC2ZB6R.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-7DNQ4X5T.js → Bar3DChartScene-2ZGOMOZO.js} +2 -2
  15. package/dist/Bar3DChartScene-2ZGOMOZO.js.br +0 -0
  16. package/dist/Bar3DChartScene-2ZGOMOZO.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-DIVOJURZ.mjs → Bar3DChartScene-SPER4LQA.mjs} +1 -1
  18. package/dist/Bar3DChartScene-SPER4LQA.mjs.br +0 -0
  19. package/dist/Bar3DChartScene-SPER4LQA.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-UF6DHP36.js → Line3DChartScene-42FYFGLU.js} +2 -2
  21. package/dist/Line3DChartScene-42FYFGLU.js.br +0 -0
  22. package/dist/Line3DChartScene-42FYFGLU.js.gz +0 -0
  23. package/dist/{Line3DChartScene-ZZVNUKIJ.mjs → Line3DChartScene-FH3YHPXE.mjs} +1 -1
  24. package/dist/Line3DChartScene-FH3YHPXE.mjs.br +2 -0
  25. package/dist/Line3DChartScene-FH3YHPXE.mjs.gz +0 -0
  26. package/dist/{Model3DScene-XXMAAKBR.mjs → Model3DScene-2BCR2YYD.mjs} +1 -1
  27. package/dist/Model3DScene-2BCR2YYD.mjs.br +0 -0
  28. package/dist/Model3DScene-2BCR2YYD.mjs.gz +0 -0
  29. package/dist/{Model3DScene-C7MZ22DH.js → Model3DScene-EIU2GVUZ.js} +2 -2
  30. package/dist/Model3DScene-EIU2GVUZ.js.br +0 -0
  31. package/dist/Model3DScene-EIU2GVUZ.js.gz +0 -0
  32. package/dist/{PieChart3DScene-7LX3IL2Q.mjs → PieChart3DScene-QFQUJFDP.mjs} +1 -1
  33. package/dist/PieChart3DScene-QFQUJFDP.mjs.br +0 -0
  34. package/dist/PieChart3DScene-QFQUJFDP.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-N2Y25VG5.js → PieChart3DScene-VQOHZPHI.js} +2 -2
  36. package/dist/{PieChart3DScene-N2Y25VG5.js.br → PieChart3DScene-VQOHZPHI.js.br} +0 -0
  37. package/dist/PieChart3DScene-VQOHZPHI.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-ADA7NUIW.mjs → SurfaceChart3DScene-CGXMRBCL.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-WXJHYOGJ.js → SurfaceChart3DScene-FTVXZN6O.js} +2 -2
  42. package/dist/{SurfaceChart3DScene-WXJHYOGJ.js.br → SurfaceChart3DScene-FTVXZN6O.js.br} +0 -0
  43. package/dist/SurfaceChart3DScene-FTVXZN6O.js.gz +0 -0
  44. package/dist/{chunk-UTMTXJGM.js → chunk-7VPDHSWF.js} +330 -349
  45. package/dist/chunk-7VPDHSWF.js.br +0 -0
  46. package/dist/chunk-7VPDHSWF.js.gz +0 -0
  47. package/dist/{chunk-YQOK4E2A.js → chunk-AL2KLPOJ.js} +32381 -22178
  48. package/dist/chunk-AL2KLPOJ.js.br +0 -0
  49. package/dist/chunk-AL2KLPOJ.js.gz +0 -0
  50. package/dist/{chunk-IWQSAKPM.mjs → chunk-FG5VQFWP.mjs} +193 -71
  51. package/dist/chunk-FG5VQFWP.mjs.br +0 -0
  52. package/dist/chunk-FG5VQFWP.mjs.gz +0 -0
  53. package/dist/{chunk-UTIMT5CZ.js → chunk-MZI4DG3S.js} +12 -0
  54. package/dist/chunk-MZI4DG3S.js.br +0 -0
  55. package/dist/{chunk-UTIMT5CZ.js.gz → chunk-MZI4DG3S.js.gz} +0 -0
  56. package/dist/{chunk-HHJZK26I.js → chunk-NFOOONND.js} +1359 -1237
  57. package/dist/chunk-NFOOONND.js.br +0 -0
  58. package/dist/chunk-NFOOONND.js.gz +0 -0
  59. package/dist/{chunk-IVPT3U5C.mjs → chunk-T3V5FBXJ.mjs} +29 -1
  60. package/dist/chunk-T3V5FBXJ.mjs.br +0 -0
  61. package/dist/chunk-T3V5FBXJ.mjs.gz +0 -0
  62. package/dist/{chunk-JCJ3EPG6.mjs → chunk-TGCSZXOG.mjs} +12 -0
  63. package/dist/chunk-TGCSZXOG.mjs.br +0 -0
  64. package/dist/{chunk-JCJ3EPG6.mjs.gz → chunk-TGCSZXOG.mjs.gz} +0 -0
  65. package/dist/{chunk-EVVWCF2M.mjs → chunk-VYNICQ4O.mjs} +58 -37
  66. package/dist/chunk-VYNICQ4O.mjs.br +0 -0
  67. package/dist/chunk-VYNICQ4O.mjs.gz +0 -0
  68. package/dist/{chunk-U52MKWVA.mjs → chunk-WX7AFFBZ.mjs} +142 -161
  69. package/dist/chunk-WX7AFFBZ.mjs.br +0 -0
  70. package/dist/chunk-WX7AFFBZ.mjs.gz +0 -0
  71. package/dist/{chunk-2FMQ7M3L.js → chunk-ZHSBMG37.js} +490 -469
  72. package/dist/chunk-ZHSBMG37.js.br +0 -0
  73. package/dist/chunk-ZHSBMG37.js.gz +0 -0
  74. package/dist/{chunk-NM652EZS.mjs → chunk-ZUSYUWOV.mjs} +32358 -22178
  75. package/dist/chunk-ZUSYUWOV.mjs.br +0 -0
  76. package/dist/chunk-ZUSYUWOV.mjs.gz +0 -0
  77. package/dist/{chunk-UOMFINNJ.js → chunk-ZWPHUPL4.js} +33 -5
  78. package/dist/chunk-ZWPHUPL4.js.br +0 -0
  79. package/dist/chunk-ZWPHUPL4.js.gz +0 -0
  80. package/dist/i18n.js +4 -4
  81. package/dist/i18n.js.br +0 -0
  82. package/dist/i18n.js.gz +0 -0
  83. package/dist/i18n.mjs +1 -1
  84. package/dist/i18n.mjs.br +0 -0
  85. package/dist/i18n.mjs.gz +0 -0
  86. package/dist/index.d.ts +599 -33
  87. package/dist/index.js +47 -47
  88. package/dist/index.js.br +0 -0
  89. package/dist/index.js.gz +0 -0
  90. package/dist/index.mjs +6 -6
  91. package/dist/index.mjs.br +0 -0
  92. package/dist/index.mjs.gz +0 -0
  93. package/dist/internals.d.ts +610 -33
  94. package/dist/internals.d.ts.map +1 -1
  95. package/dist/internals.js +79 -79
  96. package/dist/internals.js.br +0 -0
  97. package/dist/internals.js.gz +0 -0
  98. package/dist/internals.mjs +4 -4
  99. package/dist/internals.mjs.br +0 -0
  100. package/dist/internals.mjs.gz +0 -0
  101. package/dist/{useViewerBuildingBlocks-f6oNGKMX.d.ts → useViewerBuildingBlocks-C8F_4Pzb.d.ts} +3 -1
  102. package/dist/useViewerBuildingBlocks-C8F_4Pzb.d.ts.map +1 -0
  103. package/dist/viewer/index.d.ts +552 -33
  104. package/dist/viewer/index.js +27 -27
  105. package/dist/viewer/index.js.br +0 -0
  106. package/dist/viewer/index.js.gz +0 -0
  107. package/dist/viewer/index.mjs +6 -6
  108. package/dist/viewer/index.mjs.br +0 -0
  109. package/dist/viewer/index.mjs.gz +0 -0
  110. package/package.json +1 -1
  111. package/dist/AiChatPanel-CCJNQGER.mjs.br +0 -0
  112. package/dist/AiChatPanel-CCJNQGER.mjs.gz +0 -0
  113. package/dist/AiChatPanel-LPZWDNVU.js.br +0 -0
  114. package/dist/AiChatPanel-LPZWDNVU.js.gz +0 -0
  115. package/dist/Area3DChartScene-LJCWBNQ3.js.br +0 -0
  116. package/dist/Area3DChartScene-LJCWBNQ3.js.gz +0 -0
  117. package/dist/Area3DChartScene-P6YM6ZL7.mjs.br +0 -0
  118. package/dist/Area3DChartScene-P6YM6ZL7.mjs.gz +0 -0
  119. package/dist/Bar3DChartScene-7DNQ4X5T.js.br +0 -1
  120. package/dist/Bar3DChartScene-7DNQ4X5T.js.gz +0 -0
  121. package/dist/Bar3DChartScene-DIVOJURZ.mjs.br +0 -0
  122. package/dist/Bar3DChartScene-DIVOJURZ.mjs.gz +0 -0
  123. package/dist/Line3DChartScene-UF6DHP36.js.br +0 -0
  124. package/dist/Line3DChartScene-UF6DHP36.js.gz +0 -0
  125. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.br +0 -0
  126. package/dist/Line3DChartScene-ZZVNUKIJ.mjs.gz +0 -0
  127. package/dist/Model3DScene-C7MZ22DH.js.br +0 -0
  128. package/dist/Model3DScene-C7MZ22DH.js.gz +0 -0
  129. package/dist/Model3DScene-XXMAAKBR.mjs.br +0 -0
  130. package/dist/Model3DScene-XXMAAKBR.mjs.gz +0 -0
  131. package/dist/PieChart3DScene-7LX3IL2Q.mjs.br +0 -0
  132. package/dist/PieChart3DScene-7LX3IL2Q.mjs.gz +0 -0
  133. package/dist/PieChart3DScene-N2Y25VG5.js.gz +0 -0
  134. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.br +0 -0
  135. package/dist/SurfaceChart3DScene-ADA7NUIW.mjs.gz +0 -0
  136. package/dist/SurfaceChart3DScene-WXJHYOGJ.js.gz +0 -0
  137. package/dist/chunk-2FMQ7M3L.js.br +0 -0
  138. package/dist/chunk-2FMQ7M3L.js.gz +0 -0
  139. package/dist/chunk-EVVWCF2M.mjs.br +0 -0
  140. package/dist/chunk-EVVWCF2M.mjs.gz +0 -0
  141. package/dist/chunk-HHJZK26I.js.br +0 -0
  142. package/dist/chunk-HHJZK26I.js.gz +0 -0
  143. package/dist/chunk-IVPT3U5C.mjs.br +0 -0
  144. package/dist/chunk-IVPT3U5C.mjs.gz +0 -0
  145. package/dist/chunk-IWQSAKPM.mjs.br +0 -0
  146. package/dist/chunk-IWQSAKPM.mjs.gz +0 -0
  147. package/dist/chunk-JCJ3EPG6.mjs.br +0 -0
  148. package/dist/chunk-NM652EZS.mjs.br +0 -0
  149. package/dist/chunk-NM652EZS.mjs.gz +0 -0
  150. package/dist/chunk-U52MKWVA.mjs.br +0 -0
  151. package/dist/chunk-U52MKWVA.mjs.gz +0 -0
  152. package/dist/chunk-UOMFINNJ.js.br +0 -0
  153. package/dist/chunk-UOMFINNJ.js.gz +0 -0
  154. package/dist/chunk-UTIMT5CZ.js.br +0 -0
  155. package/dist/chunk-UTMTXJGM.js.br +0 -0
  156. package/dist/chunk-UTMTXJGM.js.gz +0 -0
  157. package/dist/chunk-YQOK4E2A.js.br +0 -0
  158. package/dist/chunk-YQOK4E2A.js.gz +0 -0
  159. package/dist/useViewerBuildingBlocks-f6oNGKMX.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -63,6 +63,12 @@ interface PptxAction {
63
63
  soundRId?: string;
64
64
  /** Resolved media target path for the optional click sound. */
65
65
  soundPath?: string;
66
+ /**
67
+ * `CT_Hyperlink/@endSnd` (ECMA-376 20.1.2.2.23): PowerPoint's Action
68
+ * Settings "Stop previous sound" checkbox. Round-tripped for now (issue
69
+ * G14); not yet wired into playback.
70
+ */
71
+ endSnd?: boolean;
66
72
  }
67
73
  //#endregion
68
74
  //#region src/core/types/common.d.ts
@@ -85,7 +91,7 @@ interface PptxAction {
85
91
  * // => "wavy" — one of: sng | dbl | heavy | dotted | dash | wavy | none | ...
86
92
  * ```
87
93
  */
88
- type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'none';
94
+ type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'words' | 'none';
89
95
  /**
90
96
  * Connector connection point reference — links a connector endpoint to a
91
97
  * specific shape on the slide.
@@ -420,6 +426,16 @@ interface CustomGeometryRawData {
420
426
  cxnLstXml?: unknown;
421
427
  /** Raw `a:rect` XML content (text rectangle). */
422
428
  rectXml?: unknown;
429
+ /**
430
+ * Raw `a:pathLst` XML content: every `a:path`'s formula-bearing `a:pt`
431
+ * x/y attributes, `a:arcTo` params, `a:close`, and per-path `@w`/`@h`/
432
+ * `@fill`/`@stroke`/`@extrusionOk`, preserved verbatim (not the
433
+ * parse-time-resolved numbers in `customGeometryPaths`). Lets a live
434
+ * `shapeAdjustments` drag re-evaluate the outline against the CURRENT
435
+ * guide values instead of the ones baked in at parse time; see
436
+ * `geometry/custom-geometry-live-eval.ts`.
437
+ */
438
+ pathLstXml?: unknown;
423
439
  }
424
440
  /**
425
441
  * XY-style adjustment handle (`a:ahXY`) on a custom geometry.
@@ -1177,6 +1193,21 @@ interface ShapeStyle {
1177
1193
  dagFillOverlayColor?: string;
1178
1194
  /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1179
1195
  dagFillOverlayOpacity?: number;
1196
+ /** Fill overlay blend mode from a direct `a:effectLst/a:fillOverlay/@blend`. */
1197
+ shapeFillOverlayBlend?: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
1198
+ /**
1199
+ * Fill overlay tint colour (hex `#RRGGBB`) from a direct
1200
+ * `a:effectLst/a:fillOverlay`'s `a:solidFill`/`a:gradFill`.
1201
+ */
1202
+ shapeFillOverlayColor?: string;
1203
+ /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1204
+ shapeFillOverlayOpacity?: number;
1205
+ /** Original source `a:fillOverlay` node, preserved for lossless surgical updates. */
1206
+ fillOverlayXml?: XmlObject;
1207
+ /** Resolved source fill-overlay colour used to detect colour edits. */
1208
+ shapeFillOverlayOriginalColor?: string;
1209
+ /** Source fill-overlay opacity used to detect alpha edits. */
1210
+ shapeFillOverlayOriginalOpacity?: number;
1180
1211
  /** `<a:lnRef @idx>` — 1-based index into the theme's lnStyleLst. */
1181
1212
  lnRefIdx?: number;
1182
1213
  /** Raw XML colour child of `<a:lnRef>` (e.g. `<a:schemeClr>` with transforms). */
@@ -1433,7 +1464,15 @@ interface TextStyle {
1433
1464
  */
1434
1465
  colorXml?: XmlObject;
1435
1466
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1436
- vAlign?: 'top' | 'middle' | 'bottom';
1467
+ /**
1468
+ * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
1469
+ * `distributed`/`justified` (`dist`/`just`) stretch line spacing so the
1470
+ * paragraph block fills the box's full vertical extent, distinct from true
1471
+ * centering (`middle`/`ctr`); both approximate to a middle-anchored render
1472
+ * (see `text-body-layout.ts`) since CSS has no native vertical-justify
1473
+ * primitive, but round-trip losslessly through parse/save.
1474
+ */
1475
+ vAlign?: 'top' | 'middle' | 'bottom' | 'distributed' | 'justified';
1437
1476
  /** Right-to-left paragraph/run direction (`a:pPr/@rtl`, `a:rPr/@rtl`). */
1438
1477
  rtl?: boolean;
1439
1478
  /** Body text direction (`a:bodyPr/@vert`).
@@ -2254,6 +2293,50 @@ interface PptxChartAxisLabelFormatting {
2254
2293
  noMultiLevelLabels?: boolean;
2255
2294
  }
2256
2295
  //#endregion
2296
+ //#region src/core/types/chart-ex.d.ts
2297
+ /**
2298
+ * Chart-formatting types that don't fit an existing, owned type module for
2299
+ * this wave (`types/chart.ts` is owned elsewhere; see its own module doc).
2300
+ * Despite the file name, `PptxChartDataPointPicture` is a CLASSIC (`c:`)
2301
+ * construct, not ChartEx (`cx:`) - it landed here only because it needs a
2302
+ * home outside `chart.ts`.
2303
+ *
2304
+ * @module pptx-types/chart-ex
2305
+ */
2306
+ /** `c:dPt/c:pictureOptions/c:pictureFormat/@val` (ST_PictureFormat). */
2307
+ type PptxChartPictureFormat = 'stretch' | 'stack' | 'stackScale';
2308
+ /**
2309
+ * Per-data-point picture-fill flags (`c:dPt/c:pictureOptions`): PowerPoint's
2310
+ * "Picture or texture fill" with "Stack"/"Stretch" semantics on a bar/column
2311
+ * data point, distinct from the point's plain `c:spPr` solid/gradient fill.
2312
+ *
2313
+ * The flags parse purely (`parseChartDataPointPicture` in
2314
+ * `utils/chart-datapoint-serializer.ts`); {@link imageUrl} is a separate,
2315
+ * later addition populated by the runtime (`PptxHandlerRuntimeChartParsing.ts`)
2316
+ * once the sibling `c:spPr/a:blipFill/a:blip`'s `r:embed`/`r:link` is resolved
2317
+ * against the chart part's relationships, since that resolution needs zip/file
2318
+ * access the pure parser does not have.
2319
+ */
2320
+ interface PptxChartDataPointPicture {
2321
+ /** Apply the picture to the front face of a 3-D bar/column (`c:applyToFront`). */
2322
+ applyToFront?: boolean;
2323
+ /** Apply the picture to the side faces of a 3-D bar/column (`c:applyToSides`). */
2324
+ applyToSides?: boolean;
2325
+ /** Apply the picture to the end face of a 3-D bar/column (`c:applyToEnd`). */
2326
+ applyToEnd?: boolean;
2327
+ /** Stretch, or stack repeated tiles at their natural size (or scaled). */
2328
+ pictureFormat?: PptxChartPictureFormat;
2329
+ /** Height, in points, of one repeated picture tile for "stack"/"stackScale" (`c:pictureStackUnit/@val`). */
2330
+ pictureStackUnit?: number;
2331
+ /**
2332
+ * Resolved picture source (a `data:`/`blob:` URL) for the point's sibling
2333
+ * `c:spPr/a:blipFill/a:blip`. Populated by the runtime after relationship
2334
+ * resolution (C2-G9 render half); absent until then, and absent entirely
2335
+ * when the point has no picture fill or the image could not be resolved.
2336
+ */
2337
+ imageUrl?: string;
2338
+ }
2339
+ //#endregion
2257
2340
  //#region src/core/types/chart-pivot-format.d.ts
2258
2341
  interface PptxChartPivotFormat {
2259
2342
  index: number;
@@ -2317,6 +2400,15 @@ interface PptxChartPageSetup {
2317
2400
  horizontalDpi?: number;
2318
2401
  verticalDpi?: number;
2319
2402
  copies?: number;
2403
+ /**
2404
+ * Custom paper height, used when {@link paperSize} is `0`
2405
+ * (`c:pageSetup/@paperHeight`, ST_PositiveUniversalMeasure, e.g. `"297mm"`).
2406
+ * Kept as the raw measure string rather than converted, matching how the
2407
+ * schema stores it.
2408
+ */
2409
+ paperHeight?: string;
2410
+ /** Custom paper width, used when {@link paperSize} is `0` (`@paperWidth`). */
2411
+ paperWidth?: string;
2320
2412
  /** Original leaf retained for foreign attributes. */
2321
2413
  rawXml?: unknown;
2322
2414
  }
@@ -2348,6 +2440,65 @@ interface PptxChartProtection {
2348
2440
  rawXml?: XmlObject;
2349
2441
  }
2350
2442
  //#endregion
2443
+ //#region src/core/types/chart-style-definition.d.ts
2444
+ /**
2445
+ * Typed subset of an Office 2013+ chart-style part (`ppt/charts/style#.xml`,
2446
+ * root element `cs:chartStyle`, relationship type
2447
+ * `.../2012/relationships/chartStyle`).
2448
+ *
2449
+ * PowerPoint's Design-tab "Chart Styles" gallery (1-48) writes `c:style/@val`
2450
+ * on the chart part itself (already modeled as `PptxChartStyle.styleId`) and,
2451
+ * for most styles, this SEPARATE part spelling out the per-element
2452
+ * `cs:lnRef`/`cs:fillRef`/`cs:effectRef`/`cs:fontRef`/`cs:defRPr` defaults a
2453
+ * chart element falls back to when its own XML leaves it unstyled. Without
2454
+ * parsing this part, styles beyond the one PowerPoint happens to have baked
2455
+ * inline are visually inert.
2456
+ *
2457
+ * @module pptx-types/chart-style-definition
2458
+ */
2459
+ /**
2460
+ * One styled chart-element entry (`cs:title`, `cs:axisTitle`,
2461
+ * `cs:categoryAxis`, ...). Colours are resolved to hex at parse time (scheme
2462
+ * colour references via `cs:fontRef`/`cs:lnRef`/`cs:fillRef` are already
2463
+ * flattened against the theme, matching how classic chart colours resolve
2464
+ * elsewhere in this codebase). Fields are present only when the source XML
2465
+ * carried a value for them.
2466
+ */
2467
+ interface PptxChartStylePartEntry {
2468
+ /** Text size in points, from `cs:defRPr/@sz` (hundredths of a point). */
2469
+ fontSize?: number;
2470
+ bold?: boolean;
2471
+ italic?: boolean;
2472
+ /** Resolved text colour: `cs:defRPr/a:solidFill`, or `cs:fontRef`'s scheme colour. */
2473
+ color?: string;
2474
+ /** Resolved line colour from `cs:lnRef`'s scheme colour reference. */
2475
+ lineColor?: string;
2476
+ /** Line width in points, when directly authored (rare; most styles reference a theme line style by index only). */
2477
+ lineWidth?: number;
2478
+ /** Resolved fill colour from `cs:fillRef`'s scheme colour reference. */
2479
+ fillColor?: string;
2480
+ }
2481
+ /**
2482
+ * Parsed per-element style defaults from a chart-style part. Only the
2483
+ * elements this viewer actually renders distinct defaults for are modeled;
2484
+ * elements PowerPoint's style gallery also styles (data table, trendlines,
2485
+ * up/down bars, ...) are out of scope until a renderer needs them.
2486
+ */
2487
+ interface PptxChartStyleDefinition {
2488
+ title?: PptxChartStylePartEntry;
2489
+ axisTitle?: PptxChartStylePartEntry;
2490
+ categoryAxis?: PptxChartStylePartEntry;
2491
+ valueAxis?: PptxChartStylePartEntry;
2492
+ legend?: PptxChartStylePartEntry;
2493
+ dataLabel?: PptxChartStylePartEntry;
2494
+ dataPoint?: PptxChartStylePartEntry;
2495
+ dataPointLine?: PptxChartStylePartEntry;
2496
+ gridlineMajor?: PptxChartStylePartEntry;
2497
+ gridlineMinor?: PptxChartStylePartEntry;
2498
+ chartArea?: PptxChartStylePartEntry;
2499
+ plotArea?: PptxChartStylePartEntry;
2500
+ }
2501
+ //#endregion
2351
2502
  //#region src/core/types/chart-user-shapes.d.ts
2352
2503
  /**
2353
2504
  * Types for chart drawing-overlay shapes (`c:userShapes`).
@@ -2386,8 +2537,16 @@ interface PptxChartUserShapeParagraph {
2386
2537
  * `absSizeAnchor` the extent is {@link ext} in EMU.
2387
2538
  */
2388
2539
  interface PptxChartUserShape {
2389
- /** Shape kind: text/preset shape, connector, or picture. */
2390
- kind: 'sp' | 'cxnSp' | 'pic';
2540
+ /**
2541
+ * 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).
2548
+ */
2549
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2391
2550
  /** Anchor kind that positioned the shape. */
2392
2551
  anchor: 'rel' | 'abs';
2393
2552
  /** Top-left corner as chart-relative fractions (0-1). */
@@ -2619,6 +2778,8 @@ interface PptxChartDataPoint {
2619
2778
  marker?: PptxChartMarker;
2620
2779
  /** Render a bubble-chart point with a 3-D appearance. */
2621
2780
  bubble3D?: boolean;
2781
+ /** Per-point picture-fill flags (`c:dPt/c:pictureOptions`). */
2782
+ picture?: PptxChartDataPointPicture;
2622
2783
  }
2623
2784
  /** Schema values accepted by `c:dLblPos`. */
2624
2785
  type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
@@ -2637,6 +2798,26 @@ interface PptxChartDataLabel {
2637
2798
  text?: string;
2638
2799
  separator?: string;
2639
2800
  showLeaderLines?: boolean;
2801
+ /**
2802
+ * Per-label number-format override (`c:dLbl/c:numFmt/@formatCode`), taking
2803
+ * precedence over the chart-level {@link PptxChartDataLabelOptions.numberFormat}
2804
+ * and the series' own {@link PptxChartSeries.numberFormat} when set.
2805
+ */
2806
+ numberFormat?: string;
2807
+ /**
2808
+ * Manually dragged label position (`c:dLbl/c:layout/c:manualLayout`), the
2809
+ * same CT_ManualLayout shape used for title/legend/plotArea. `null`
2810
+ * explicitly clears a drag back to the automatic position.
2811
+ */
2812
+ layout?: PptxChartManualLayout | null;
2813
+ /**
2814
+ * This label's own font (`c:dLbl/c:txPr/a:p/a:pPr/a:defRPr`, or ChartEx
2815
+ * `cx:dataLabel/cx:txPr`), taking precedence over the chart/series-level
2816
+ * {@link PptxChartDataLabelOptions.txPr} when set. Reuses the legend
2817
+ * entry's flat text-style shape since both are the same
2818
+ * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2819
+ */
2820
+ txPr?: PptxChartLegendTextStyle;
2640
2821
  }
2641
2822
  /** Axis number format. */
2642
2823
  interface PptxChartAxisNumFmt {
@@ -2651,6 +2832,16 @@ interface PptxChartDisplayUnitsLabel {
2651
2832
  layout?: PptxChartManualLayout | null;
2652
2833
  /** Label shape formatting. `null` removes `c:spPr`. */
2653
2834
  spPr?: PptxChartShapeProps | null;
2835
+ /**
2836
+ * The label's own run font, when it carries a distinct `txPr` from the
2837
+ * axis's own (ChartEx `cx:unitsLabel/cx:txPr`; classic `c:dispUnitsLbl`
2838
+ * has no equivalent child, so this is only ever populated from a ChartEx
2839
+ * axis).
2840
+ */
2841
+ fontFamily?: string;
2842
+ fontSize?: number;
2843
+ fontBold?: boolean;
2844
+ fontColor?: string;
2654
2845
  }
2655
2846
  /** Axis formatting for category, value, or date axes. */
2656
2847
  interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
@@ -2755,8 +2946,27 @@ interface PptxChartWaterfallOptions {
2755
2946
  /** Whether connector lines are visible between adjacent bars. */
2756
2947
  connectorLines?: boolean;
2757
2948
  }
2949
+ /**
2950
+ * A single breakpoint in a ChartEx colour-by-value scale
2951
+ * (`cx:valueColorPositions/cx:colorPosition`). `kind` selects which of
2952
+ * CT_ColorPosition's union members was authored; `value` is absent for
2953
+ * `min`/`max` (they are implicit endpoints) and required otherwise.
2954
+ */
2955
+ interface PptxCxValueColorPosition {
2956
+ kind: 'min' | 'max' | 'number' | 'percent';
2957
+ value?: number;
2958
+ }
2758
2959
  /** Office 2016 ChartEx geographic series dimensions and layout options. */
2759
2960
  interface PptxChartRegionMapOptions {
2961
+ /**
2962
+ * Colour-by-value gradient stops (`cx:valueColors/cx:colors/cx:color`),
2963
+ * resolved to hex, 2 or 3 entries (matching PowerPoint's two- and
2964
+ * three-colour scale UI). Paired index-for-index with
2965
+ * {@link valueColorPositions} when both are present.
2966
+ */
2967
+ valueColors?: string[];
2968
+ /** Gradient breakpoints for {@link valueColors} (`cx:valueColorPositions`). */
2969
+ valueColorPositions?: PptxCxValueColorPosition[];
2760
2970
  /** Optional provider entity identifiers aligned with categories and values. */
2761
2971
  entityIds?: string[];
2762
2972
  /** Original `cx:pt/@idx` values for category points. */
@@ -2921,6 +3131,20 @@ interface PptxChartDataLabelOptions {
2921
3131
  * Omit to let PowerPoint use the type default.
2922
3132
  */
2923
3133
  position?: PptxChartDataLabelPosition;
3134
+ /**
3135
+ * Chart-level number-format override (`c:dLbls/c:numFmt/@formatCode`),
3136
+ * applied to every label of the series/chart-type unless a per-point
3137
+ * {@link PptxChartDataLabel.numberFormat} overrides it.
3138
+ */
3139
+ numberFormat?: string;
3140
+ /**
3141
+ * Default font for every label at this level (`c:dLbls/c:txPr`, or
3142
+ * ChartEx `cx:dataLabels/cx:txPr`), overridden by a per-point
3143
+ * {@link PptxChartDataLabel.txPr} when set. `c:dLbls` at the chart-type
3144
+ * level and the series level cascade the same way the show flags do
3145
+ * (point > series > chart-type).
3146
+ */
3147
+ txPr?: PptxChartLegendTextStyle;
2924
3148
  }
2925
3149
  /** Typed text defaults for a single chart legend entry. */
2926
3150
  interface PptxChartLegendTextStyle {
@@ -2977,6 +3201,17 @@ interface PptxChartStyle {
2977
3201
  hasDataLabels?: boolean;
2978
3202
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
2979
3203
  dataLabels?: PptxChartDataLabelOptions;
3204
+ /**
3205
+ * Font styling for the chart's own title (`c:title/c:txPr`), edited via
3206
+ * `applyChartTitleStyleToXml` (chart-title-style-serializer.ts). Distinct
3207
+ * from an axis title's styling (`PptxChartAxisFormatting.fontFamily` etc.).
3208
+ */
3209
+ titleFontFamily?: string;
3210
+ titleFontSize?: number;
3211
+ titleFontBold?: boolean;
3212
+ titleFontColor?: string;
3213
+ /** Title text-box fill/border (`c:title/c:spPr`). `null` removes it. */
3214
+ titleSpPr?: PptxChartShapeProps | null;
2980
3215
  }
2981
3216
  /**
2982
3217
  * External data source reference for a chart (c:externalData).
@@ -3357,6 +3592,38 @@ interface PptxChartData {
3357
3592
  * `attribute → value` map for round-trip fidelity.
3358
3593
  */
3359
3594
  clrMapOvr?: Record<string, string>;
3595
+ /**
3596
+ * Whether the chart's own cached numeric values use the 1904 date epoch
3597
+ * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
3598
+ * any embedded workbook's `workbookPr/@date1904` (a chart can lack an
3599
+ * embedded workbook entirely, or its cache can legitimately differ from the
3600
+ * workbook's current setting). Absent when the source XML omits the
3601
+ * element, in which case the 1900 system applies (the schema default).
3602
+ */
3603
+ date1904?: boolean;
3604
+ /**
3605
+ * PowerPoint's "Rounded corners" chart-area option
3606
+ * (`c:chartSpace/c:roundedCorners/@val`, default `false`). Absent when the
3607
+ * source XML omits the element.
3608
+ */
3609
+ roundedCorners?: boolean;
3610
+ /**
3611
+ * 3-D chart depth/spacing along the series axis, as a percentage
3612
+ * (`c:gapDepth/@val`, `ST_GapAmount`, 0 through 500). Legal on
3613
+ * `bar3D`/`area3D`/`line3D`/`surface` chart-type containers only. Read-only
3614
+ * for rendering, matching {@link barGapWidth}/{@link barOverlap}: save
3615
+ * round-trips it via the preserved chart XML rather than a typed edit path.
3616
+ */
3617
+ gapDepth?: number;
3618
+ /**
3619
+ * Parsed Office 2013+ chart-style part (`ppt/charts/style#.xml`,
3620
+ * `cs:chartStyle`), providing per-element font/line/fill defaults for
3621
+ * whichever built-in "Chart Styles" gallery entry ({@link PptxChartStyle.styleId})
3622
+ * is active. Absent when the chart has no such part (common for
3623
+ * automation-authored charts, where PowerPoint still implies style 2's
3624
+ * look via its own bundled defaults).
3625
+ */
3626
+ chartStyleDefinition?: PptxChartStyleDefinition;
3360
3627
  }
3361
3628
  //#endregion
3362
3629
  //#region src/core/types/image.d.ts
@@ -3880,6 +4147,52 @@ interface MediaCaptionTrack {
3880
4147
  isDefault?: boolean;
3881
4148
  }
3882
4149
  //#endregion
4150
+ //#region src/core/types/smart-art-chrome.d.ts
4151
+ /**
4152
+ * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4153
+ *
4154
+ * @example
4155
+ * ```ts
4156
+ * const chrome: PptxSmartArtChrome = {
4157
+ * backgroundColor: "#F0F0F0",
4158
+ * outlineColor: "#333333",
4159
+ * outlineWidth: 1,
4160
+ * };
4161
+ * // => satisfies PptxSmartArtChrome
4162
+ * ```
4163
+ */
4164
+ interface PptxSmartArtChrome {
4165
+ /**
4166
+ * Background fill colour (hex). When the real `dgm:bg` fill is a gradient
4167
+ * or pattern (see {@link PptxSmartArtChrome.backgroundFillXml}), this is an
4168
+ * APPROXIMATION (the gradient's first stop, or the pattern's foreground
4169
+ * colour) for a consumer that only wants one display colour, not the full fill.
4170
+ */
4171
+ backgroundColor?: string;
4172
+ /**
4173
+ * Raw `dgm:bg` fill XML, present only when the background is a gradient or
4174
+ * pattern fill (a solid fill is fully captured by {@link PptxSmartArtChrome.backgroundColor}
4175
+ * alone). Round-trip only: `smartart-save-chrome.ts` re-emits this verbatim
4176
+ * instead of flattening the fill to a solid colour on save.
4177
+ */
4178
+ backgroundFillXml?: PptxSmartArtRawBackgroundFill;
4179
+ /** Outline stroke colour (hex). */
4180
+ outlineColor?: string;
4181
+ /** Outline stroke width in points. */
4182
+ outlineWidth?: number;
4183
+ }
4184
+ /**
4185
+ * A `dgm:bg` fill this viewer doesn't fully model as first-class chrome
4186
+ * (gradient or pattern), preserved verbatim for round-trip. See
4187
+ * {@link PptxSmartArtChrome.backgroundFillXml}.
4188
+ */
4189
+ interface PptxSmartArtRawBackgroundFill {
4190
+ /** Local element name of the fill under `dgm:bg` (`gradFill` or `pattFill`). */
4191
+ localName: 'gradFill' | 'pattFill';
4192
+ /** The fill element's own attributes/children, as parsed. */
4193
+ xml: XmlObject;
4194
+ }
4195
+ //#endregion
3883
4196
  //#region src/core/types/smart-art-constraint-rules.d.ts
3884
4197
  type PptxSmartArtConstraintRelationship = 'self' | 'ch' | 'des';
3885
4198
  type PptxSmartArtConstraintOperator = 'none' | 'equ' | 'gte' | 'lte';
@@ -3978,6 +4291,14 @@ interface PptxSmartArtLayoutNodeShape {
3978
4291
  adjustments?: PptxSmartArtShapeAdjustment[];
3979
4292
  /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3980
4293
  hideGeometry?: boolean;
4294
+ /**
4295
+ * `dgm:shape/@lkTxEntry` (CT_Shape, boolean, default false): this node is a
4296
+ * decorative shape that should mirror its paired content node's text
4297
+ * rather than always rendering blank. See `smartart-layout-interpreter-
4298
+ * pyramid.ts`'s `arrangePyramid`, the interpreter's one existing
4299
+ * synthesized-decorative-shape call site.
4300
+ */
4301
+ lkTxEntry?: boolean;
3981
4302
  }
3982
4303
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3983
4304
  interface PptxSmartArtLayoutNode {
@@ -4205,6 +4526,13 @@ interface PptxSmartArtNode {
4205
4526
  * generic cycled palette (see `applySmartArtRoleColors`).
4206
4527
  */
4207
4528
  styleRole?: string;
4529
+ /**
4530
+ * `dgm:prSet/@coherent3DOff` (`CT_ElemPropSet`) resolved from the node's
4531
+ * paired presentation point: when true, this node opts out of the
4532
+ * diagram's overall coherent-3D scene rotation (a `dgm:scene3d`/`dgm:sp3d`
4533
+ * quick-style variation) applied to every other node.
4534
+ */
4535
+ coherent3DOff?: boolean;
4208
4536
  /**
4209
4537
  * Per-run text + run-properties for the node's first paragraph, captured at
4210
4538
  * parse time. When the joined run text still equals {@link text} (the node
@@ -4252,9 +4580,29 @@ interface PptxSmartArtColorListMetadata {
4252
4580
  method?: PptxSmartArtColorApplicationMethod;
4253
4581
  hueDirection?: PptxSmartArtHueDirection;
4254
4582
  }
4583
+ /**
4584
+ * A quick-style label's `a:lnRef`/`a:fillRef`/`a:effectRef`/`a:fontRef`
4585
+ * (`CT_ShapeStyle`, the same complex type an ordinary shape's `p:style`
4586
+ * uses), resolved against the theme's `fmtScheme` at parse time instead of
4587
+ * the coarse subtle/moderate/intense enum ({@link PptxSmartArtQuickStyle.effectIntensity}).
4588
+ * Only populated when a theme format scheme was available when the quick
4589
+ * style was parsed. See G13 in the 2026-09 diagram audit.
4590
+ */
4591
+ interface PptxSmartArtResolvedStyleRef {
4592
+ fillColor?: string;
4593
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'theme';
4594
+ strokeColor?: string;
4595
+ strokeWidth?: number;
4596
+ /** `a:effectRef`'s theme-resolved outer shadow colour, when the style has one. */
4597
+ shadowColor?: string;
4598
+ /** `a:fontRef`'s theme-resolved typeface (`+mn-lt`/`+mj-lt` -> the theme's actual font). */
4599
+ fontTypeface?: string;
4600
+ }
4255
4601
  /** CT_StyleLabel metadata from a quick-style definition. */
4256
4602
  interface PptxSmartArtQuickStyleLabel {
4257
4603
  name: string;
4604
+ /** Theme-resolved `dgm:style` refs for this label's role, when available. */
4605
+ resolvedStyle?: PptxSmartArtResolvedStyleRef;
4258
4606
  }
4259
4607
  /** CT_CTStyleLabel metadata from a color-transform definition. */
4260
4608
  interface PptxSmartArtColorStyleLabel {
@@ -4517,27 +4865,6 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
4517
4865
  textFrameWidth?: number;
4518
4866
  textFrameHeight?: number;
4519
4867
  }
4520
- /**
4521
- * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4522
- *
4523
- * @example
4524
- * ```ts
4525
- * const chrome: PptxSmartArtChrome = {
4526
- * backgroundColor: "#F0F0F0",
4527
- * outlineColor: "#333333",
4528
- * outlineWidth: 1,
4529
- * };
4530
- * // => satisfies PptxSmartArtChrome
4531
- * ```
4532
- */
4533
- interface PptxSmartArtChrome {
4534
- /** Background fill colour (hex). */
4535
- backgroundColor?: string;
4536
- /** Outline stroke colour (hex). */
4537
- outlineColor?: string;
4538
- /** Outline stroke width in points. */
4539
- outlineWidth?: number;
4540
- }
4541
4868
  /**
4542
4869
  * Presentation layout variables from `dgm:prSet/dgm:presLayoutVars` (data model)
4543
4870
  * or `dgm:varLst` (layout definition defaults).
@@ -4994,6 +5321,22 @@ interface PptxTableData {
4994
5321
  bandColCycle?: number;
4995
5322
  /** Right-to-left table layout from `a:tblPr/@rtl`. */
4996
5323
  rtl?: boolean;
5324
+ /**
5325
+ * `a:tblPr`'s OWN fill (`CT_TableProperties` §21.1.3.15's
5326
+ * `EG_FillProperties`), independent of any `a:tblStyleLst`-referenced style
5327
+ * or that style's `a:tblBg`. Applied as the lowest-priority fill layer,
5328
+ * beneath the table style's `wholeTbl` fill. Real PowerPoint decks route
5329
+ * table appearance through `tableStyleId` instead, so this mainly matters
5330
+ * for non-PowerPoint authoring tools (issue G6).
5331
+ */
5332
+ tableFill?: ParsedTableStyleFill;
5333
+ /**
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).
5338
+ */
5339
+ tableEffects?: boolean;
4997
5340
  }
4998
5341
  /**
4999
5342
  * A single fill reference within a table style section.
@@ -5115,7 +5458,7 @@ interface ParsedTableStyleText {
5115
5458
  * A single border side within a table style's `a:tcStyle/a:tcBdr`.
5116
5459
  *
5117
5460
  * Corresponds to one of `a:left`, `a:right`, `a:top`, `a:bottom`,
5118
- * `a:insideH`, `a:insideV`, `a:tl2br`, `a:bl2tr` (each a
5461
+ * `a:insideH`, `a:insideV`, `a:tl2br`, `a:tr2bl` (each a
5119
5462
  * `CT_ThemeableLineStyle` wrapping an `a:ln`).
5120
5463
  *
5121
5464
  * @example
@@ -5155,8 +5498,16 @@ interface ParsedTableStyleBorders {
5155
5498
  insideV?: ParsedTableStyleBorder;
5156
5499
  /** Top-left to bottom-right diagonal. */
5157
5500
  tl2br?: ParsedTableStyleBorder;
5158
- /** Bottom-left to top-right diagonal. */
5159
- bl2tr?: ParsedTableStyleBorder;
5501
+ /**
5502
+ * Top-right to bottom-left diagonal (`a:tr2bl`, ECMA-376's
5503
+ * `CT_TableCellBorderStyle` sequence: left/right/top/bottom/insideH/
5504
+ * insideV/tl2br/tr2bl). The field keeps its historical `bl2tr` spelling
5505
+ * only in the sense that it names the same geometric anti-diagonal line
5506
+ * (top-right-to-bottom-left and bottom-left-to-top-right describe one
5507
+ * undirected diagonal); the parser accepts the real `a:tr2bl` element and,
5508
+ * leniently, a legacy `a:bl2tr` this app previously wrote (issue G4).
5509
+ */
5510
+ tr2bl?: ParsedTableStyleBorder;
5160
5511
  }
5161
5512
  /**
5162
5513
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
@@ -5224,6 +5575,26 @@ interface ParsedTableStyleEntry {
5224
5575
  swCellText?: ParsedTableStyleText;
5225
5576
  neCellText?: ParsedTableStyleText;
5226
5577
  nwCellText?: ParsedTableStyleText;
5578
+ /**
5579
+ * Per-role 3D bevel + lighting from `a:tcStyle/a:cell3D` (CT_Cell3D),
5580
+ * distinct from the per-cell `a:tcPr/a:cell3D` {@link PptxTableCellStyle}
5581
+ * already supports. None of PowerPoint's 74 built-in gallery styles use
5582
+ * this (0 hits in the built-in catalogue), so it only matters for a
5583
+ * hand-authored or third-party table style.
5584
+ */
5585
+ wholeTblCell3D?: PptxTableCell3D;
5586
+ firstRowCell3D?: PptxTableCell3D;
5587
+ lastRowCell3D?: PptxTableCell3D;
5588
+ firstColCell3D?: PptxTableCell3D;
5589
+ lastColCell3D?: PptxTableCell3D;
5590
+ band1HCell3D?: PptxTableCell3D;
5591
+ band2HCell3D?: PptxTableCell3D;
5592
+ band1VCell3D?: PptxTableCell3D;
5593
+ band2VCell3D?: PptxTableCell3D;
5594
+ seCellCell3D?: PptxTableCell3D;
5595
+ swCellCell3D?: PptxTableCell3D;
5596
+ neCellCell3D?: PptxTableCell3D;
5597
+ nwCellCell3D?: PptxTableCell3D;
5227
5598
  }
5228
5599
  /**
5229
5600
  * Map of GUID → table style entry.
@@ -5246,6 +5617,38 @@ interface ParsedTableStyleEntry {
5246
5617
  type ParsedTableStyleMap = Record<string, ParsedTableStyleEntry>;
5247
5618
  //#endregion
5248
5619
  //#region src/core/types/elements.d.ts
5620
+ /**
5621
+ * Accessibility metadata from `p:cNvPr/a:extLst`'s "Mark as decorative"
5622
+ * vendor extension (issue G16). PowerPoint's Alt Text pane writes
5623
+ * `a:ext[@uri='{C183D7F6-B498-43B3-948B-1728B52AA6E4}']/adec:decorative
5624
+ * val="1"` when a shape or image is marked decorative; mixed into the
5625
+ * element variants whose `p:cNvPr` that pane covers.
5626
+ */
5627
+ interface PptxAccessibilityProperties {
5628
+ /**
5629
+ * Whether the element is marked decorative. When true, alt text /
5630
+ * aria-label / Markdown export should skip describing the element even
5631
+ * when {@link PptxImageProperties.altText} (or similar) is present.
5632
+ */
5633
+ isDecorative?: boolean;
5634
+ }
5635
+ /**
5636
+ * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5637
+ * property distinct from `a:picLocks`.
5638
+ */
5639
+ interface PptxPictureNonVisualProperties {
5640
+ /**
5641
+ * `a:cNvPicPr/@preferRelativeResize` (ST_Boolean, defaults to `true` when
5642
+ * absent). Controls whether a picture's crop rectangle is reinterpreted
5643
+ * relative to the picture's ORIGINAL dimensions or its CURRENT
5644
+ * (already-resized) dimensions when it is resized again after being
5645
+ * cropped. Parsed and round-tripped for now; not yet wired into
5646
+ * resize-after-crop arithmetic (this app always uses current-size
5647
+ * semantics, which only diverges from `preferRelativeResize="0"` on a
5648
+ * second resize after a crop).
5649
+ */
5650
+ preferRelativeResize?: boolean;
5651
+ }
5249
5652
  /**
5250
5653
  * A text box — a plain rectangle containing text, typically with no
5251
5654
  * visible fill or stroke.
@@ -5279,7 +5682,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5279
5682
  * // => satisfies ShapePptxElement
5280
5683
  * ```
5281
5684
  */
5282
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties {
5685
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
5283
5686
  type: 'shape';
5284
5687
  }
5285
5688
  /**
@@ -5318,7 +5721,7 @@ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, Pptx
5318
5721
  * // => satisfies ImagePptxElement
5319
5722
  * ```
5320
5723
  */
5321
- interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5724
+ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5322
5725
  type: 'image';
5323
5726
  }
5324
5727
  /**
@@ -5327,7 +5730,7 @@ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCus
5327
5730
  * Functionally identical to {@link ImagePptxElement} but distinguished by
5328
5731
  * the `type` discriminant for semantic clarity.
5329
5732
  */
5330
- interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5733
+ interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5331
5734
  type: 'picture';
5332
5735
  }
5333
5736
  /**
@@ -5477,6 +5880,14 @@ interface OlePptxElement extends PptxElementBase {
5477
5880
  * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5478
5881
  */
5479
5882
  oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
5883
+ /**
5884
+ * `p:link/@updateAutomatic` (`CT_OleObjectLink`, ECMA-376 §19.3.2.4):
5885
+ * whether a LINKED OLE object refreshes automatically from its source
5886
+ * (PowerPoint's Edit Links dialog "Automatic" vs. "Manual" radio buttons).
5887
+ * Only meaningful when {@link isLinked} is `true`. The schema default is
5888
+ * `false`; `undefined` means the source authored no explicit value.
5889
+ */
5890
+ oleUpdateAutomatic?: boolean;
5480
5891
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5481
5892
  extensionXml?: PptxGraphicFrameExtension[];
5482
5893
  }
@@ -6061,12 +6472,50 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
6061
6472
  * is preserved alongside other animations.
6062
6473
  */
6063
6474
  type PptxNativeAnimationKind = 'media';
6475
+ /**
6476
+ * `p:spTgt/p:graphicEl` (CT_TLGraphicalObjectBuildElement, ECMA-376 S19.5.34):
6477
+ * identifies exactly which series/category/element of a chart or diagram
6478
+ * build a per-stage effect reveals, when a deck authors one effect per stage
6479
+ * instead of a single staged `p:bldGraphic` reveal.
6480
+ */
6481
+ interface PptxAnimationGraphicElementTarget {
6482
+ /** Which graphic kind: `p:dgm` (diagram) or `p:chart`. */
6483
+ kind: 'dgm' | 'chart';
6484
+ /** `@_seriesIdx`, 0-based series index, when the target is series-scoped. */
6485
+ seriesIdx?: number;
6486
+ /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6487
+ categoryIdx?: number;
6488
+ /** `@_bldStep` (ST_TLChartBuildStep): `category` / `categoryEl` / `series` / `seriesEl`. */
6489
+ bldStep?: string;
6490
+ }
6491
+ /**
6492
+ * `p:spTgt/p:oleChartEl` (CT_TLOleChartTargetElement, ECMA-376 S19.5.44):
6493
+ * legacy pre-DrawingML OLE Graph chart sub-element targeting.
6494
+ */
6495
+ interface PptxAnimationOleChartElementTarget {
6496
+ /** `@_type` (ST_TLOleChartSubelementType): entireChart / series / category / ... */
6497
+ subelementType: string;
6498
+ /** `@_lvl`, optional sub-element level. */
6499
+ level?: number;
6500
+ }
6064
6501
  /** A target selected by `p:tgtEl` in the PresentationML timing model. */
6065
6502
  type PptxAnimationTarget = {
6066
6503
  type: 'shape';
6067
6504
  shapeId: string;
6068
6505
  /** Whether `p:spTgt/p:bg` limits the effect to the shape background. */
6069
6506
  backgroundOnly?: boolean;
6507
+ /**
6508
+ * `p:spTgt/p:subSp/@_spid`: the id of a shape NESTED inside the group
6509
+ * named by {@link shapeId} (CT_TLSubShapeId, ECMA-376 S19.5.71).
6510
+ * PowerPoint authors this when a user animates one member of a group
6511
+ * without ungrouping it: `shapeId` stays the outer group's id for
6512
+ * round-trip, but this sub-shape is the real playback target.
6513
+ */
6514
+ subShapeId?: string;
6515
+ /** `p:spTgt/p:graphicEl`: chart/diagram series/category/element target. */
6516
+ graphicElement?: PptxAnimationGraphicElementTarget;
6517
+ /** `p:spTgt/p:oleChartEl`: legacy OLE chart sub-element target. */
6518
+ oleChartElement?: PptxAnimationOleChartElementTarget;
6070
6519
  rawXml?: XmlObject;
6071
6520
  } | {
6072
6521
  type: 'slide';
@@ -6446,6 +6895,46 @@ interface PptxNativeAnimation {
6446
6895
  * PowerPoint that only emit the SMIL-style filter string.
6447
6896
  */
6448
6897
  effectFilter?: PptxAnimationEffectFilter;
6898
+ /**
6899
+ * This effect's own `p:cTn/@_id` (a raw OOXML time-node id, not a shape
6900
+ * id). Lets playback resolve a `p:cond/@tn` dependency (see
6901
+ * {@link AnimationCondition.targetTimeNodeId}) against the SPECIFIC node
6902
+ * it names rather than assuming it is always the positionally-previous
6903
+ * effect. Absent when the node carried no `@_id`.
6904
+ */
6905
+ nodeId?: number;
6906
+ /**
6907
+ * Interpolation mode for this effect's PRIMARY `p:anim`-family behaviour
6908
+ * (the same node {@link keyframes}/{@link attrName} were read from), from
6909
+ * `@_calcmode` (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2). See
6910
+ * {@link PptxAttributeAnimation.calcMode} for the per-component version.
6911
+ */
6912
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6913
+ /**
6914
+ * `p:cBhvr/@_additive` (ST_TLBehaviorAdditiveType, ECMA-376 S19.5.4):
6915
+ * controls how this behaviour's value composites with sibling behaviours
6916
+ * driving the same attribute on the same target. `sum` accumulates
6917
+ * (e.g. a combined scale+rotate), `repl`/`base`/`none`/`mult` replace or
6918
+ * otherwise combine. Absent means the OOXML default (`base`).
6919
+ */
6920
+ cBhvrAdditive?: 'base' | 'sum' | 'repl' | 'mult' | 'none';
6921
+ /**
6922
+ * `p:cBhvr/@_accumulate` (ST_TLBehaviorAccumulateType): `always` means
6923
+ * each `p:cTn/@repeatCount` repeat starts from the PREVIOUS repeat's end
6924
+ * value (e.g. a 3x Spin totals 1080deg instead of replaying 0-360 three
6925
+ * times); `none` (the OOXML default) resets every repeat.
6926
+ */
6927
+ cBhvrAccumulate?: 'none' | 'always';
6928
+ /**
6929
+ * `p:cBhvr/@_xfrmType` (only meaningful on `p:animMotion`): `point`
6930
+ * (default) or `img`, a legacy compatibility hint. Round-tripped only.
6931
+ */
6932
+ cBhvrXfrmType?: 'point' | 'img';
6933
+ /**
6934
+ * `p:cBhvr/@_override` (ST_TLBehaviorOverrideType): `normal` (default) or
6935
+ * `childStyle`, a legacy compatibility hint. Round-tripped only.
6936
+ */
6937
+ cBhvrOverride?: 'normal' | 'childStyle';
6449
6938
  }
6450
6939
  /**
6451
6940
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -6512,6 +7001,14 @@ interface PptxAttributeAnimation {
6512
7001
  durationMs?: number;
6513
7002
  /** Start offset from this behaviour's nested `p:stCondLst`. */
6514
7003
  delayMs?: number;
7004
+ /**
7005
+ * Interpolation mode from this behaviour's own `@_calcmode`
7006
+ * (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2): `discrete` snaps to
7007
+ * each `p:tav` stop with no interpolation, `lin` (the OOXML default)
7008
+ * interpolates linearly, `fmla` evaluates `p:tav/@fmla` (not consulted at
7009
+ * playback here; formulas are round-tripped only). Absent means `lin`.
7010
+ */
7011
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6515
7012
  }
6516
7013
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
6517
7014
  interface PptxHslColorDelta {
@@ -6578,7 +7075,7 @@ interface PptxTextAnimationTarget {
6578
7075
  * These map directly to OOXML condition event attribute values
6579
7076
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
6580
7077
  */
6581
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio';
7078
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
6582
7079
  /**
6583
7080
  * Structured representation of a single OOXML animation condition
6584
7081
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -7918,10 +8415,32 @@ interface PptxPresentationProperties {
7918
8415
  printProperties?: PptxPresentationPrintProperties | null;
7919
8416
  /** Most-recently-used colours from the presentation palette. */
7920
8417
  mruColors?: string[];
7921
- /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
8418
+ /**
8419
+ * Pen colour for presentation mode annotations (from `p:showPr/p:penClr`).
8420
+ * `p:penClr` is a full `EG_ColorChoice` (P1-G2): a scheme/preset/system
8421
+ * swatch resolves to a hex string here just like a direct `a:srgbClr`.
8422
+ */
7922
8423
  penColor?: string;
8424
+ /**
8425
+ * The resolved hex value {@link penColor} had at parse time, and the
8426
+ * original `p:penClr` colour-choice XML node, preserved so a save that
8427
+ * never touches the pen colour re-emits the original scheme/preset
8428
+ * reference verbatim instead of flattening it to a baked `a:srgbClr`.
8429
+ * Internal round-trip bookkeeping; not meant to be set by API callers.
8430
+ */
8431
+ penColorOriginal?: string;
8432
+ /** @see penColorOriginal */
8433
+ penColorXml?: XmlObject;
7923
8434
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
7924
8435
  kioskRestartTime?: number;
8436
+ /**
8437
+ * `p:showPr/p:browse/@showScrollbar` (CT_ShowInfoBrowse §19.2.1.10 /
8438
+ * §19.3.1.43), the "Show scrollbar" checkbox in PowerPoint's Set Up Show
8439
+ * dialog. Only meaningful when `showType` is `"browsed"`; the schema
8440
+ * default is `true`. `undefined` means the source authored no explicit
8441
+ * value (or `showType` is not `"browsed"`).
8442
+ */
8443
+ showScrollbar?: boolean;
7925
8444
  }
7926
8445
  /**
7927
8446
  * Slide dimensions from `p:sldSz` (CT_SlideSize, ECMA-376 §19.2.1.39).
@@ -10069,6 +10588,41 @@ type ChartBuildMode = 'asOne' | 'bySeries' | 'byCategory' | 'byElement';
10069
10588
  * - `byLvlAtOnce` a whole level is revealed per stage (`lvlAtOnce`).
10070
10589
  */
10071
10590
  type DiagramBuildMode = 'asOne' | 'byOne' | 'byLvl' | 'byLvlAtOnce';
10591
+ /**
10592
+ * One authored `p:graphicEl` reveal unit resolved onto a chart, per
10593
+ * `TimelineStepGraphicElement`'s "both indices set" case: a single (series,
10594
+ * category) cell revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect.
10595
+ */
10596
+ interface ChartRevealPoint {
10597
+ seriesIdx: number;
10598
+ categoryIdx: number;
10599
+ }
10600
+ /**
10601
+ * Playback-time chart reveal state derived from AUTHORED `p:graphicEl`
10602
+ * indices (see `chart-reveal-descriptor`'s `resolveChartRevealDescriptor`),
10603
+ * rather than from click-count/time progress. Present on
10604
+ * {@link ElementAnimationState.chartReveal} only when every fired
10605
+ * chart-build step for the element carried index data; a renderer prefers
10606
+ * this over the progress-based `build`/`ElementBuildState` path when present,
10607
+ * since it reflects the real authored reveal set (correct even for a
10608
+ * reversed-order or gapped chart build), and falls back to `build` when
10609
+ * absent.
10610
+ */
10611
+ interface ChartRevealDescriptor {
10612
+ /**
10613
+ * Whether the chart's background/axes/gridlines/legend should currently be
10614
+ * visible: always `true` when the chart's `animateBackground` is `false`
10615
+ * ("shown throughout"), otherwise `true` from the first revealed stage
10616
+ * onward.
10617
+ */
10618
+ background: boolean;
10619
+ /** Whole series revealed by a `bldStep="series"` effect. */
10620
+ series: ReadonlySet<number>;
10621
+ /** Whole categories revealed by a `bldStep="category"` effect. */
10622
+ categories: ReadonlySet<number>;
10623
+ /** Individual cells revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect. */
10624
+ points: readonly ChartRevealPoint[];
10625
+ }
10072
10626
  /**
10073
10627
  * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
10074
10628
  * `progress` is the 0..1 fraction of the build revealed at the current playback
@@ -10099,6 +10653,16 @@ interface ElementAnimationState {
10099
10653
  * whole-element entrances, so existing renderers are unaffected.
10100
10654
  */
10101
10655
  build?: ElementBuildState;
10656
+ /**
10657
+ * Authored-index chart reveal state (see {@link ChartRevealDescriptor}),
10658
+ * present only when every fired chart-build step for this element carried
10659
+ * `p:graphicEl` index data. A chart renderer prefers this over `build` when
10660
+ * present; `chart-build`'s `resolveRevealedChartData` picks between the two.
10661
+ */
10662
+ chartReveal?: {
10663
+ mode: ChartBuildMode;
10664
+ descriptor: ChartRevealDescriptor;
10665
+ };
10102
10666
  /**
10103
10667
  * True when an active `p:animClr` color animation targets this shape's fill.
10104
10668
  * A vector renderer should then paint the fill with `fill: inherit` so the
@@ -11336,6 +11900,8 @@ interface ToolbarProps {
11336
11900
  onUpdateElementStyle: (updates: Partial<ShapeStyle>) => void;
11337
11901
  /** How many elements the multi-select currently holds. */
11338
11902
  selectedCount: number;
11903
+ /** Whether every selected element allows `a:spLocks/@noGrp` grouping. */
11904
+ selectionGroupable: boolean;
11339
11905
  /** Open the hyperlink editor for the current selection. */
11340
11906
  onOpenHyperlinkDialog: () => void;
11341
11907
  onDuplicate: () => void;