pptx-react-viewer 3.5.3 → 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 (155) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{AiChatPanel-ZEM3ZVA6.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-L2HGGEND.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-I7LMTNK5.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-EYNCHRB3.mjs → Area3DChartScene-SJC2ZB6R.mjs} +1 -1
  12. package/dist/{Line3DChartScene-QYBKXNOD.mjs.br → Area3DChartScene-SJC2ZB6R.mjs.br} +1 -1
  13. package/dist/Area3DChartScene-SJC2ZB6R.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-VPKQDPIO.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-6HQ6QWNB.mjs → Bar3DChartScene-SPER4LQA.mjs} +1 -1
  18. package/dist/{Bar3DChartScene-6HQ6QWNB.mjs.br → Bar3DChartScene-SPER4LQA.mjs.br} +0 -0
  19. package/dist/Bar3DChartScene-SPER4LQA.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-VV362RMX.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-QYBKXNOD.mjs → Line3DChartScene-FH3YHPXE.mjs} +1 -1
  24. package/dist/{Area3DChartScene-EYNCHRB3.mjs.br → Line3DChartScene-FH3YHPXE.mjs.br} +1 -1
  25. package/dist/Line3DChartScene-FH3YHPXE.mjs.gz +0 -0
  26. package/dist/{Model3DScene-YTLWTG52.mjs → Model3DScene-2BCR2YYD.mjs} +1 -1
  27. package/dist/{Model3DScene-YTLWTG52.mjs.br → Model3DScene-2BCR2YYD.mjs.br} +0 -0
  28. package/dist/Model3DScene-2BCR2YYD.mjs.gz +0 -0
  29. package/dist/{Model3DScene-XA57KXA5.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-INBL4F5Z.mjs → PieChart3DScene-QFQUJFDP.mjs} +1 -1
  33. package/dist/{PieChart3DScene-INBL4F5Z.mjs.br → PieChart3DScene-QFQUJFDP.mjs.br} +0 -0
  34. package/dist/PieChart3DScene-QFQUJFDP.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-IFZMTN5H.js → PieChart3DScene-VQOHZPHI.js} +2 -2
  36. package/dist/PieChart3DScene-VQOHZPHI.js.br +0 -0
  37. package/dist/PieChart3DScene-VQOHZPHI.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-EV6DBPJS.mjs → SurfaceChart3DScene-CGXMRBCL.mjs} +1 -1
  39. package/dist/{SurfaceChart3DScene-EV6DBPJS.mjs.br → SurfaceChart3DScene-CGXMRBCL.mjs.br} +0 -0
  40. package/dist/SurfaceChart3DScene-CGXMRBCL.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-FRSZVIVB.js → SurfaceChart3DScene-FTVXZN6O.js} +2 -2
  42. package/dist/SurfaceChart3DScene-FTVXZN6O.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-FTVXZN6O.js.gz +0 -0
  44. package/dist/{chunk-QA573RUB.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-HHDPQJF3.js → chunk-AL2KLPOJ.js} +32437 -22179
  48. package/dist/chunk-AL2KLPOJ.js.br +0 -0
  49. package/dist/chunk-AL2KLPOJ.js.gz +0 -0
  50. package/dist/{chunk-7AL6KAFX.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-PPL3WBC7.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-MSRRBA7G.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-3WM5TUY7.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-KOLCCOTS.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-SIM2LXO2.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-QPHGHUUJ.mjs → chunk-ZUSYUWOV.mjs} +32414 -22179
  75. package/dist/chunk-ZUSYUWOV.mjs.br +0 -0
  76. package/dist/chunk-ZUSYUWOV.mjs.gz +0 -0
  77. package/dist/{chunk-BBSFZLYI.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-L2HGGEND.mjs.br +0 -0
  112. package/dist/AiChatPanel-L2HGGEND.mjs.gz +0 -0
  113. package/dist/AiChatPanel-ZEM3ZVA6.js.br +0 -0
  114. package/dist/AiChatPanel-ZEM3ZVA6.js.gz +0 -0
  115. package/dist/Area3DChartScene-EYNCHRB3.mjs.gz +0 -0
  116. package/dist/Area3DChartScene-I7LMTNK5.js.br +0 -0
  117. package/dist/Area3DChartScene-I7LMTNK5.js.gz +0 -0
  118. package/dist/Bar3DChartScene-6HQ6QWNB.mjs.gz +0 -0
  119. package/dist/Bar3DChartScene-VPKQDPIO.js.br +0 -0
  120. package/dist/Bar3DChartScene-VPKQDPIO.js.gz +0 -0
  121. package/dist/Line3DChartScene-QYBKXNOD.mjs.gz +0 -0
  122. package/dist/Line3DChartScene-VV362RMX.js.br +0 -0
  123. package/dist/Line3DChartScene-VV362RMX.js.gz +0 -0
  124. package/dist/Model3DScene-XA57KXA5.js.br +0 -0
  125. package/dist/Model3DScene-XA57KXA5.js.gz +0 -0
  126. package/dist/Model3DScene-YTLWTG52.mjs.gz +0 -0
  127. package/dist/PieChart3DScene-IFZMTN5H.js.br +0 -0
  128. package/dist/PieChart3DScene-IFZMTN5H.js.gz +0 -0
  129. package/dist/PieChart3DScene-INBL4F5Z.mjs.gz +0 -0
  130. package/dist/SurfaceChart3DScene-EV6DBPJS.mjs.gz +0 -0
  131. package/dist/SurfaceChart3DScene-FRSZVIVB.js.br +0 -0
  132. package/dist/SurfaceChart3DScene-FRSZVIVB.js.gz +0 -0
  133. package/dist/chunk-3WM5TUY7.mjs.br +0 -0
  134. package/dist/chunk-3WM5TUY7.mjs.gz +0 -0
  135. package/dist/chunk-7AL6KAFX.mjs.br +0 -0
  136. package/dist/chunk-7AL6KAFX.mjs.gz +0 -0
  137. package/dist/chunk-BBSFZLYI.js.br +0 -0
  138. package/dist/chunk-BBSFZLYI.js.gz +0 -0
  139. package/dist/chunk-HHDPQJF3.js.br +0 -0
  140. package/dist/chunk-HHDPQJF3.js.gz +0 -0
  141. package/dist/chunk-JCJ3EPG6.mjs.br +0 -0
  142. package/dist/chunk-KOLCCOTS.mjs.br +0 -0
  143. package/dist/chunk-KOLCCOTS.mjs.gz +0 -0
  144. package/dist/chunk-MSRRBA7G.mjs.br +0 -0
  145. package/dist/chunk-MSRRBA7G.mjs.gz +0 -0
  146. package/dist/chunk-PPL3WBC7.js.br +0 -0
  147. package/dist/chunk-PPL3WBC7.js.gz +0 -0
  148. package/dist/chunk-QA573RUB.js.br +0 -0
  149. package/dist/chunk-QA573RUB.js.gz +0 -0
  150. package/dist/chunk-QPHGHUUJ.mjs.br +0 -0
  151. package/dist/chunk-QPHGHUUJ.mjs.gz +0 -0
  152. package/dist/chunk-SIM2LXO2.js.br +0 -0
  153. package/dist/chunk-SIM2LXO2.js.gz +0 -0
  154. package/dist/chunk-UTIMT5CZ.js.br +0 -0
  155. package/dist/useViewerBuildingBlocks-f6oNGKMX.d.ts.map +0 -1
@@ -45,6 +45,12 @@ interface PptxAction {
45
45
  soundRId?: string;
46
46
  /** Resolved media target path for the optional click sound. */
47
47
  soundPath?: string;
48
+ /**
49
+ * `CT_Hyperlink/@endSnd` (ECMA-376 20.1.2.2.23): PowerPoint's Action
50
+ * Settings "Stop previous sound" checkbox. Round-tripped for now (issue
51
+ * G14); not yet wired into playback.
52
+ */
53
+ endSnd?: boolean;
48
54
  }
49
55
  //#endregion
50
56
  //#region src/core/types/common.d.ts
@@ -67,7 +73,7 @@ interface PptxAction {
67
73
  * // => "wavy" — one of: sng | dbl | heavy | dotted | dash | wavy | none | ...
68
74
  * ```
69
75
  */
70
- type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'none';
76
+ type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'words' | 'none';
71
77
  /**
72
78
  * Connector connection point reference — links a connector endpoint to a
73
79
  * specific shape on the slide.
@@ -402,6 +408,16 @@ interface CustomGeometryRawData {
402
408
  cxnLstXml?: unknown;
403
409
  /** Raw `a:rect` XML content (text rectangle). */
404
410
  rectXml?: unknown;
411
+ /**
412
+ * Raw `a:pathLst` XML content: every `a:path`'s formula-bearing `a:pt`
413
+ * x/y attributes, `a:arcTo` params, `a:close`, and per-path `@w`/`@h`/
414
+ * `@fill`/`@stroke`/`@extrusionOk`, preserved verbatim (not the
415
+ * parse-time-resolved numbers in `customGeometryPaths`). Lets a live
416
+ * `shapeAdjustments` drag re-evaluate the outline against the CURRENT
417
+ * guide values instead of the ones baked in at parse time; see
418
+ * `geometry/custom-geometry-live-eval.ts`.
419
+ */
420
+ pathLstXml?: unknown;
405
421
  }
406
422
  /**
407
423
  * XY-style adjustment handle (`a:ahXY`) on a custom geometry.
@@ -1159,6 +1175,21 @@ interface ShapeStyle {
1159
1175
  dagFillOverlayColor?: string;
1160
1176
  /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1161
1177
  dagFillOverlayOpacity?: number;
1178
+ /** Fill overlay blend mode from a direct `a:effectLst/a:fillOverlay/@blend`. */
1179
+ shapeFillOverlayBlend?: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
1180
+ /**
1181
+ * Fill overlay tint colour (hex `#RRGGBB`) from a direct
1182
+ * `a:effectLst/a:fillOverlay`'s `a:solidFill`/`a:gradFill`.
1183
+ */
1184
+ shapeFillOverlayColor?: string;
1185
+ /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1186
+ shapeFillOverlayOpacity?: number;
1187
+ /** Original source `a:fillOverlay` node, preserved for lossless surgical updates. */
1188
+ fillOverlayXml?: XmlObject;
1189
+ /** Resolved source fill-overlay colour used to detect colour edits. */
1190
+ shapeFillOverlayOriginalColor?: string;
1191
+ /** Source fill-overlay opacity used to detect alpha edits. */
1192
+ shapeFillOverlayOriginalOpacity?: number;
1162
1193
  /** `<a:lnRef @idx>` — 1-based index into the theme's lnStyleLst. */
1163
1194
  lnRefIdx?: number;
1164
1195
  /** Raw XML colour child of `<a:lnRef>` (e.g. `<a:schemeClr>` with transforms). */
@@ -1415,7 +1446,15 @@ interface TextStyle {
1415
1446
  */
1416
1447
  colorXml?: XmlObject;
1417
1448
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1418
- vAlign?: 'top' | 'middle' | 'bottom';
1449
+ /**
1450
+ * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
1451
+ * `distributed`/`justified` (`dist`/`just`) stretch line spacing so the
1452
+ * paragraph block fills the box's full vertical extent, distinct from true
1453
+ * centering (`middle`/`ctr`); both approximate to a middle-anchored render
1454
+ * (see `text-body-layout.ts`) since CSS has no native vertical-justify
1455
+ * primitive, but round-trip losslessly through parse/save.
1456
+ */
1457
+ vAlign?: 'top' | 'middle' | 'bottom' | 'distributed' | 'justified';
1419
1458
  /** Right-to-left paragraph/run direction (`a:pPr/@rtl`, `a:rPr/@rtl`). */
1420
1459
  rtl?: boolean;
1421
1460
  /** Body text direction (`a:bodyPr/@vert`).
@@ -2236,6 +2275,50 @@ interface PptxChartAxisLabelFormatting {
2236
2275
  noMultiLevelLabels?: boolean;
2237
2276
  }
2238
2277
  //#endregion
2278
+ //#region src/core/types/chart-ex.d.ts
2279
+ /**
2280
+ * Chart-formatting types that don't fit an existing, owned type module for
2281
+ * this wave (`types/chart.ts` is owned elsewhere; see its own module doc).
2282
+ * Despite the file name, `PptxChartDataPointPicture` is a CLASSIC (`c:`)
2283
+ * construct, not ChartEx (`cx:`) - it landed here only because it needs a
2284
+ * home outside `chart.ts`.
2285
+ *
2286
+ * @module pptx-types/chart-ex
2287
+ */
2288
+ /** `c:dPt/c:pictureOptions/c:pictureFormat/@val` (ST_PictureFormat). */
2289
+ type PptxChartPictureFormat = 'stretch' | 'stack' | 'stackScale';
2290
+ /**
2291
+ * Per-data-point picture-fill flags (`c:dPt/c:pictureOptions`): PowerPoint's
2292
+ * "Picture or texture fill" with "Stack"/"Stretch" semantics on a bar/column
2293
+ * data point, distinct from the point's plain `c:spPr` solid/gradient fill.
2294
+ *
2295
+ * The flags parse purely (`parseChartDataPointPicture` in
2296
+ * `utils/chart-datapoint-serializer.ts`); {@link imageUrl} is a separate,
2297
+ * later addition populated by the runtime (`PptxHandlerRuntimeChartParsing.ts`)
2298
+ * once the sibling `c:spPr/a:blipFill/a:blip`'s `r:embed`/`r:link` is resolved
2299
+ * against the chart part's relationships, since that resolution needs zip/file
2300
+ * access the pure parser does not have.
2301
+ */
2302
+ interface PptxChartDataPointPicture {
2303
+ /** Apply the picture to the front face of a 3-D bar/column (`c:applyToFront`). */
2304
+ applyToFront?: boolean;
2305
+ /** Apply the picture to the side faces of a 3-D bar/column (`c:applyToSides`). */
2306
+ applyToSides?: boolean;
2307
+ /** Apply the picture to the end face of a 3-D bar/column (`c:applyToEnd`). */
2308
+ applyToEnd?: boolean;
2309
+ /** Stretch, or stack repeated tiles at their natural size (or scaled). */
2310
+ pictureFormat?: PptxChartPictureFormat;
2311
+ /** Height, in points, of one repeated picture tile for "stack"/"stackScale" (`c:pictureStackUnit/@val`). */
2312
+ pictureStackUnit?: number;
2313
+ /**
2314
+ * Resolved picture source (a `data:`/`blob:` URL) for the point's sibling
2315
+ * `c:spPr/a:blipFill/a:blip`. Populated by the runtime after relationship
2316
+ * resolution (C2-G9 render half); absent until then, and absent entirely
2317
+ * when the point has no picture fill or the image could not be resolved.
2318
+ */
2319
+ imageUrl?: string;
2320
+ }
2321
+ //#endregion
2239
2322
  //#region src/core/types/chart-pivot-format.d.ts
2240
2323
  interface PptxChartPivotFormat {
2241
2324
  index: number;
@@ -2299,6 +2382,15 @@ interface PptxChartPageSetup {
2299
2382
  horizontalDpi?: number;
2300
2383
  verticalDpi?: number;
2301
2384
  copies?: number;
2385
+ /**
2386
+ * Custom paper height, used when {@link paperSize} is `0`
2387
+ * (`c:pageSetup/@paperHeight`, ST_PositiveUniversalMeasure, e.g. `"297mm"`).
2388
+ * Kept as the raw measure string rather than converted, matching how the
2389
+ * schema stores it.
2390
+ */
2391
+ paperHeight?: string;
2392
+ /** Custom paper width, used when {@link paperSize} is `0` (`@paperWidth`). */
2393
+ paperWidth?: string;
2302
2394
  /** Original leaf retained for foreign attributes. */
2303
2395
  rawXml?: unknown;
2304
2396
  }
@@ -2330,6 +2422,65 @@ interface PptxChartProtection {
2330
2422
  rawXml?: XmlObject;
2331
2423
  }
2332
2424
  //#endregion
2425
+ //#region src/core/types/chart-style-definition.d.ts
2426
+ /**
2427
+ * Typed subset of an Office 2013+ chart-style part (`ppt/charts/style#.xml`,
2428
+ * root element `cs:chartStyle`, relationship type
2429
+ * `.../2012/relationships/chartStyle`).
2430
+ *
2431
+ * PowerPoint's Design-tab "Chart Styles" gallery (1-48) writes `c:style/@val`
2432
+ * on the chart part itself (already modeled as `PptxChartStyle.styleId`) and,
2433
+ * for most styles, this SEPARATE part spelling out the per-element
2434
+ * `cs:lnRef`/`cs:fillRef`/`cs:effectRef`/`cs:fontRef`/`cs:defRPr` defaults a
2435
+ * chart element falls back to when its own XML leaves it unstyled. Without
2436
+ * parsing this part, styles beyond the one PowerPoint happens to have baked
2437
+ * inline are visually inert.
2438
+ *
2439
+ * @module pptx-types/chart-style-definition
2440
+ */
2441
+ /**
2442
+ * One styled chart-element entry (`cs:title`, `cs:axisTitle`,
2443
+ * `cs:categoryAxis`, ...). Colours are resolved to hex at parse time (scheme
2444
+ * colour references via `cs:fontRef`/`cs:lnRef`/`cs:fillRef` are already
2445
+ * flattened against the theme, matching how classic chart colours resolve
2446
+ * elsewhere in this codebase). Fields are present only when the source XML
2447
+ * carried a value for them.
2448
+ */
2449
+ interface PptxChartStylePartEntry {
2450
+ /** Text size in points, from `cs:defRPr/@sz` (hundredths of a point). */
2451
+ fontSize?: number;
2452
+ bold?: boolean;
2453
+ italic?: boolean;
2454
+ /** Resolved text colour: `cs:defRPr/a:solidFill`, or `cs:fontRef`'s scheme colour. */
2455
+ color?: string;
2456
+ /** Resolved line colour from `cs:lnRef`'s scheme colour reference. */
2457
+ lineColor?: string;
2458
+ /** Line width in points, when directly authored (rare; most styles reference a theme line style by index only). */
2459
+ lineWidth?: number;
2460
+ /** Resolved fill colour from `cs:fillRef`'s scheme colour reference. */
2461
+ fillColor?: string;
2462
+ }
2463
+ /**
2464
+ * Parsed per-element style defaults from a chart-style part. Only the
2465
+ * elements this viewer actually renders distinct defaults for are modeled;
2466
+ * elements PowerPoint's style gallery also styles (data table, trendlines,
2467
+ * up/down bars, ...) are out of scope until a renderer needs them.
2468
+ */
2469
+ interface PptxChartStyleDefinition {
2470
+ title?: PptxChartStylePartEntry;
2471
+ axisTitle?: PptxChartStylePartEntry;
2472
+ categoryAxis?: PptxChartStylePartEntry;
2473
+ valueAxis?: PptxChartStylePartEntry;
2474
+ legend?: PptxChartStylePartEntry;
2475
+ dataLabel?: PptxChartStylePartEntry;
2476
+ dataPoint?: PptxChartStylePartEntry;
2477
+ dataPointLine?: PptxChartStylePartEntry;
2478
+ gridlineMajor?: PptxChartStylePartEntry;
2479
+ gridlineMinor?: PptxChartStylePartEntry;
2480
+ chartArea?: PptxChartStylePartEntry;
2481
+ plotArea?: PptxChartStylePartEntry;
2482
+ }
2483
+ //#endregion
2333
2484
  //#region src/core/types/chart-user-shapes.d.ts
2334
2485
  /**
2335
2486
  * Types for chart drawing-overlay shapes (`c:userShapes`).
@@ -2368,8 +2519,16 @@ interface PptxChartUserShapeParagraph {
2368
2519
  * `absSizeAnchor` the extent is {@link ext} in EMU.
2369
2520
  */
2370
2521
  interface PptxChartUserShape {
2371
- /** Shape kind: text/preset shape, connector, or picture. */
2372
- kind: 'sp' | 'cxnSp' | 'pic';
2522
+ /**
2523
+ * 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).
2530
+ */
2531
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2373
2532
  /** Anchor kind that positioned the shape. */
2374
2533
  anchor: 'rel' | 'abs';
2375
2534
  /** Top-left corner as chart-relative fractions (0-1). */
@@ -2601,6 +2760,8 @@ interface PptxChartDataPoint {
2601
2760
  marker?: PptxChartMarker;
2602
2761
  /** Render a bubble-chart point with a 3-D appearance. */
2603
2762
  bubble3D?: boolean;
2763
+ /** Per-point picture-fill flags (`c:dPt/c:pictureOptions`). */
2764
+ picture?: PptxChartDataPointPicture;
2604
2765
  }
2605
2766
  /** Schema values accepted by `c:dLblPos`. */
2606
2767
  type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
@@ -2619,6 +2780,26 @@ interface PptxChartDataLabel {
2619
2780
  text?: string;
2620
2781
  separator?: string;
2621
2782
  showLeaderLines?: boolean;
2783
+ /**
2784
+ * Per-label number-format override (`c:dLbl/c:numFmt/@formatCode`), taking
2785
+ * precedence over the chart-level {@link PptxChartDataLabelOptions.numberFormat}
2786
+ * and the series' own {@link PptxChartSeries.numberFormat} when set.
2787
+ */
2788
+ numberFormat?: string;
2789
+ /**
2790
+ * Manually dragged label position (`c:dLbl/c:layout/c:manualLayout`), the
2791
+ * same CT_ManualLayout shape used for title/legend/plotArea. `null`
2792
+ * explicitly clears a drag back to the automatic position.
2793
+ */
2794
+ layout?: PptxChartManualLayout | null;
2795
+ /**
2796
+ * This label's own font (`c:dLbl/c:txPr/a:p/a:pPr/a:defRPr`, or ChartEx
2797
+ * `cx:dataLabel/cx:txPr`), taking precedence over the chart/series-level
2798
+ * {@link PptxChartDataLabelOptions.txPr} when set. Reuses the legend
2799
+ * entry's flat text-style shape since both are the same
2800
+ * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2801
+ */
2802
+ txPr?: PptxChartLegendTextStyle;
2622
2803
  }
2623
2804
  /** Axis number format. */
2624
2805
  interface PptxChartAxisNumFmt {
@@ -2633,6 +2814,16 @@ interface PptxChartDisplayUnitsLabel {
2633
2814
  layout?: PptxChartManualLayout | null;
2634
2815
  /** Label shape formatting. `null` removes `c:spPr`. */
2635
2816
  spPr?: PptxChartShapeProps | null;
2817
+ /**
2818
+ * The label's own run font, when it carries a distinct `txPr` from the
2819
+ * axis's own (ChartEx `cx:unitsLabel/cx:txPr`; classic `c:dispUnitsLbl`
2820
+ * has no equivalent child, so this is only ever populated from a ChartEx
2821
+ * axis).
2822
+ */
2823
+ fontFamily?: string;
2824
+ fontSize?: number;
2825
+ fontBold?: boolean;
2826
+ fontColor?: string;
2636
2827
  }
2637
2828
  /** Axis formatting for category, value, or date axes. */
2638
2829
  interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
@@ -2737,8 +2928,27 @@ interface PptxChartWaterfallOptions {
2737
2928
  /** Whether connector lines are visible between adjacent bars. */
2738
2929
  connectorLines?: boolean;
2739
2930
  }
2931
+ /**
2932
+ * A single breakpoint in a ChartEx colour-by-value scale
2933
+ * (`cx:valueColorPositions/cx:colorPosition`). `kind` selects which of
2934
+ * CT_ColorPosition's union members was authored; `value` is absent for
2935
+ * `min`/`max` (they are implicit endpoints) and required otherwise.
2936
+ */
2937
+ interface PptxCxValueColorPosition {
2938
+ kind: 'min' | 'max' | 'number' | 'percent';
2939
+ value?: number;
2940
+ }
2740
2941
  /** Office 2016 ChartEx geographic series dimensions and layout options. */
2741
2942
  interface PptxChartRegionMapOptions {
2943
+ /**
2944
+ * Colour-by-value gradient stops (`cx:valueColors/cx:colors/cx:color`),
2945
+ * resolved to hex, 2 or 3 entries (matching PowerPoint's two- and
2946
+ * three-colour scale UI). Paired index-for-index with
2947
+ * {@link valueColorPositions} when both are present.
2948
+ */
2949
+ valueColors?: string[];
2950
+ /** Gradient breakpoints for {@link valueColors} (`cx:valueColorPositions`). */
2951
+ valueColorPositions?: PptxCxValueColorPosition[];
2742
2952
  /** Optional provider entity identifiers aligned with categories and values. */
2743
2953
  entityIds?: string[];
2744
2954
  /** Original `cx:pt/@idx` values for category points. */
@@ -2903,6 +3113,20 @@ interface PptxChartDataLabelOptions {
2903
3113
  * Omit to let PowerPoint use the type default.
2904
3114
  */
2905
3115
  position?: PptxChartDataLabelPosition;
3116
+ /**
3117
+ * Chart-level number-format override (`c:dLbls/c:numFmt/@formatCode`),
3118
+ * applied to every label of the series/chart-type unless a per-point
3119
+ * {@link PptxChartDataLabel.numberFormat} overrides it.
3120
+ */
3121
+ numberFormat?: string;
3122
+ /**
3123
+ * Default font for every label at this level (`c:dLbls/c:txPr`, or
3124
+ * ChartEx `cx:dataLabels/cx:txPr`), overridden by a per-point
3125
+ * {@link PptxChartDataLabel.txPr} when set. `c:dLbls` at the chart-type
3126
+ * level and the series level cascade the same way the show flags do
3127
+ * (point > series > chart-type).
3128
+ */
3129
+ txPr?: PptxChartLegendTextStyle;
2906
3130
  }
2907
3131
  /** Typed text defaults for a single chart legend entry. */
2908
3132
  interface PptxChartLegendTextStyle {
@@ -2959,6 +3183,17 @@ interface PptxChartStyle {
2959
3183
  hasDataLabels?: boolean;
2960
3184
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
2961
3185
  dataLabels?: PptxChartDataLabelOptions;
3186
+ /**
3187
+ * Font styling for the chart's own title (`c:title/c:txPr`), edited via
3188
+ * `applyChartTitleStyleToXml` (chart-title-style-serializer.ts). Distinct
3189
+ * from an axis title's styling (`PptxChartAxisFormatting.fontFamily` etc.).
3190
+ */
3191
+ titleFontFamily?: string;
3192
+ titleFontSize?: number;
3193
+ titleFontBold?: boolean;
3194
+ titleFontColor?: string;
3195
+ /** Title text-box fill/border (`c:title/c:spPr`). `null` removes it. */
3196
+ titleSpPr?: PptxChartShapeProps | null;
2962
3197
  }
2963
3198
  /**
2964
3199
  * External data source reference for a chart (c:externalData).
@@ -3339,6 +3574,38 @@ interface PptxChartData {
3339
3574
  * `attribute → value` map for round-trip fidelity.
3340
3575
  */
3341
3576
  clrMapOvr?: Record<string, string>;
3577
+ /**
3578
+ * Whether the chart's own cached numeric values use the 1904 date epoch
3579
+ * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
3580
+ * any embedded workbook's `workbookPr/@date1904` (a chart can lack an
3581
+ * embedded workbook entirely, or its cache can legitimately differ from the
3582
+ * workbook's current setting). Absent when the source XML omits the
3583
+ * element, in which case the 1900 system applies (the schema default).
3584
+ */
3585
+ date1904?: boolean;
3586
+ /**
3587
+ * PowerPoint's "Rounded corners" chart-area option
3588
+ * (`c:chartSpace/c:roundedCorners/@val`, default `false`). Absent when the
3589
+ * source XML omits the element.
3590
+ */
3591
+ roundedCorners?: boolean;
3592
+ /**
3593
+ * 3-D chart depth/spacing along the series axis, as a percentage
3594
+ * (`c:gapDepth/@val`, `ST_GapAmount`, 0 through 500). Legal on
3595
+ * `bar3D`/`area3D`/`line3D`/`surface` chart-type containers only. Read-only
3596
+ * for rendering, matching {@link barGapWidth}/{@link barOverlap}: save
3597
+ * round-trips it via the preserved chart XML rather than a typed edit path.
3598
+ */
3599
+ gapDepth?: number;
3600
+ /**
3601
+ * Parsed Office 2013+ chart-style part (`ppt/charts/style#.xml`,
3602
+ * `cs:chartStyle`), providing per-element font/line/fill defaults for
3603
+ * whichever built-in "Chart Styles" gallery entry ({@link PptxChartStyle.styleId})
3604
+ * is active. Absent when the chart has no such part (common for
3605
+ * automation-authored charts, where PowerPoint still implies style 2's
3606
+ * look via its own bundled defaults).
3607
+ */
3608
+ chartStyleDefinition?: PptxChartStyleDefinition;
3342
3609
  }
3343
3610
  //#endregion
3344
3611
  //#region src/core/types/image.d.ts
@@ -3862,6 +4129,52 @@ interface MediaCaptionTrack {
3862
4129
  isDefault?: boolean;
3863
4130
  }
3864
4131
  //#endregion
4132
+ //#region src/core/types/smart-art-chrome.d.ts
4133
+ /**
4134
+ * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4135
+ *
4136
+ * @example
4137
+ * ```ts
4138
+ * const chrome: PptxSmartArtChrome = {
4139
+ * backgroundColor: "#F0F0F0",
4140
+ * outlineColor: "#333333",
4141
+ * outlineWidth: 1,
4142
+ * };
4143
+ * // => satisfies PptxSmartArtChrome
4144
+ * ```
4145
+ */
4146
+ interface PptxSmartArtChrome {
4147
+ /**
4148
+ * Background fill colour (hex). When the real `dgm:bg` fill is a gradient
4149
+ * or pattern (see {@link PptxSmartArtChrome.backgroundFillXml}), this is an
4150
+ * APPROXIMATION (the gradient's first stop, or the pattern's foreground
4151
+ * colour) for a consumer that only wants one display colour, not the full fill.
4152
+ */
4153
+ backgroundColor?: string;
4154
+ /**
4155
+ * Raw `dgm:bg` fill XML, present only when the background is a gradient or
4156
+ * pattern fill (a solid fill is fully captured by {@link PptxSmartArtChrome.backgroundColor}
4157
+ * alone). Round-trip only: `smartart-save-chrome.ts` re-emits this verbatim
4158
+ * instead of flattening the fill to a solid colour on save.
4159
+ */
4160
+ backgroundFillXml?: PptxSmartArtRawBackgroundFill;
4161
+ /** Outline stroke colour (hex). */
4162
+ outlineColor?: string;
4163
+ /** Outline stroke width in points. */
4164
+ outlineWidth?: number;
4165
+ }
4166
+ /**
4167
+ * A `dgm:bg` fill this viewer doesn't fully model as first-class chrome
4168
+ * (gradient or pattern), preserved verbatim for round-trip. See
4169
+ * {@link PptxSmartArtChrome.backgroundFillXml}.
4170
+ */
4171
+ interface PptxSmartArtRawBackgroundFill {
4172
+ /** Local element name of the fill under `dgm:bg` (`gradFill` or `pattFill`). */
4173
+ localName: 'gradFill' | 'pattFill';
4174
+ /** The fill element's own attributes/children, as parsed. */
4175
+ xml: XmlObject;
4176
+ }
4177
+ //#endregion
3865
4178
  //#region src/core/types/smart-art-constraint-rules.d.ts
3866
4179
  type PptxSmartArtConstraintRelationship = 'self' | 'ch' | 'des';
3867
4180
  type PptxSmartArtConstraintOperator = 'none' | 'equ' | 'gte' | 'lte';
@@ -3960,6 +4273,14 @@ interface PptxSmartArtLayoutNodeShape {
3960
4273
  adjustments?: PptxSmartArtShapeAdjustment[];
3961
4274
  /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3962
4275
  hideGeometry?: boolean;
4276
+ /**
4277
+ * `dgm:shape/@lkTxEntry` (CT_Shape, boolean, default false): this node is a
4278
+ * decorative shape that should mirror its paired content node's text
4279
+ * rather than always rendering blank. See `smartart-layout-interpreter-
4280
+ * pyramid.ts`'s `arrangePyramid`, the interpreter's one existing
4281
+ * synthesized-decorative-shape call site.
4282
+ */
4283
+ lkTxEntry?: boolean;
3963
4284
  }
3964
4285
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3965
4286
  interface PptxSmartArtLayoutNode {
@@ -4187,6 +4508,13 @@ interface PptxSmartArtNode {
4187
4508
  * generic cycled palette (see `applySmartArtRoleColors`).
4188
4509
  */
4189
4510
  styleRole?: string;
4511
+ /**
4512
+ * `dgm:prSet/@coherent3DOff` (`CT_ElemPropSet`) resolved from the node's
4513
+ * paired presentation point: when true, this node opts out of the
4514
+ * diagram's overall coherent-3D scene rotation (a `dgm:scene3d`/`dgm:sp3d`
4515
+ * quick-style variation) applied to every other node.
4516
+ */
4517
+ coherent3DOff?: boolean;
4190
4518
  /**
4191
4519
  * Per-run text + run-properties for the node's first paragraph, captured at
4192
4520
  * parse time. When the joined run text still equals {@link text} (the node
@@ -4234,9 +4562,29 @@ interface PptxSmartArtColorListMetadata {
4234
4562
  method?: PptxSmartArtColorApplicationMethod;
4235
4563
  hueDirection?: PptxSmartArtHueDirection;
4236
4564
  }
4565
+ /**
4566
+ * A quick-style label's `a:lnRef`/`a:fillRef`/`a:effectRef`/`a:fontRef`
4567
+ * (`CT_ShapeStyle`, the same complex type an ordinary shape's `p:style`
4568
+ * uses), resolved against the theme's `fmtScheme` at parse time instead of
4569
+ * the coarse subtle/moderate/intense enum ({@link PptxSmartArtQuickStyle.effectIntensity}).
4570
+ * Only populated when a theme format scheme was available when the quick
4571
+ * style was parsed. See G13 in the 2026-09 diagram audit.
4572
+ */
4573
+ interface PptxSmartArtResolvedStyleRef {
4574
+ fillColor?: string;
4575
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'theme';
4576
+ strokeColor?: string;
4577
+ strokeWidth?: number;
4578
+ /** `a:effectRef`'s theme-resolved outer shadow colour, when the style has one. */
4579
+ shadowColor?: string;
4580
+ /** `a:fontRef`'s theme-resolved typeface (`+mn-lt`/`+mj-lt` -> the theme's actual font). */
4581
+ fontTypeface?: string;
4582
+ }
4237
4583
  /** CT_StyleLabel metadata from a quick-style definition. */
4238
4584
  interface PptxSmartArtQuickStyleLabel {
4239
4585
  name: string;
4586
+ /** Theme-resolved `dgm:style` refs for this label's role, when available. */
4587
+ resolvedStyle?: PptxSmartArtResolvedStyleRef;
4240
4588
  }
4241
4589
  /** CT_CTStyleLabel metadata from a color-transform definition. */
4242
4590
  interface PptxSmartArtColorStyleLabel {
@@ -4499,27 +4847,6 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
4499
4847
  textFrameWidth?: number;
4500
4848
  textFrameHeight?: number;
4501
4849
  }
4502
- /**
4503
- * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4504
- *
4505
- * @example
4506
- * ```ts
4507
- * const chrome: PptxSmartArtChrome = {
4508
- * backgroundColor: "#F0F0F0",
4509
- * outlineColor: "#333333",
4510
- * outlineWidth: 1,
4511
- * };
4512
- * // => satisfies PptxSmartArtChrome
4513
- * ```
4514
- */
4515
- interface PptxSmartArtChrome {
4516
- /** Background fill colour (hex). */
4517
- backgroundColor?: string;
4518
- /** Outline stroke colour (hex). */
4519
- outlineColor?: string;
4520
- /** Outline stroke width in points. */
4521
- outlineWidth?: number;
4522
- }
4523
4850
  /**
4524
4851
  * Presentation layout variables from `dgm:prSet/dgm:presLayoutVars` (data model)
4525
4852
  * or `dgm:varLst` (layout definition defaults).
@@ -4976,6 +5303,22 @@ interface PptxTableData {
4976
5303
  bandColCycle?: number;
4977
5304
  /** Right-to-left table layout from `a:tblPr/@rtl`. */
4978
5305
  rtl?: boolean;
5306
+ /**
5307
+ * `a:tblPr`'s OWN fill (`CT_TableProperties` §21.1.3.15's
5308
+ * `EG_FillProperties`), independent of any `a:tblStyleLst`-referenced style
5309
+ * or that style's `a:tblBg`. Applied as the lowest-priority fill layer,
5310
+ * beneath the table style's `wholeTbl` fill. Real PowerPoint decks route
5311
+ * table appearance through `tableStyleId` instead, so this mainly matters
5312
+ * for non-PowerPoint authoring tools (issue G6).
5313
+ */
5314
+ tableFill?: ParsedTableStyleFill;
5315
+ /**
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).
5320
+ */
5321
+ tableEffects?: boolean;
4979
5322
  }
4980
5323
  /**
4981
5324
  * A single fill reference within a table style section.
@@ -5097,7 +5440,7 @@ interface ParsedTableStyleText {
5097
5440
  * A single border side within a table style's `a:tcStyle/a:tcBdr`.
5098
5441
  *
5099
5442
  * Corresponds to one of `a:left`, `a:right`, `a:top`, `a:bottom`,
5100
- * `a:insideH`, `a:insideV`, `a:tl2br`, `a:bl2tr` (each a
5443
+ * `a:insideH`, `a:insideV`, `a:tl2br`, `a:tr2bl` (each a
5101
5444
  * `CT_ThemeableLineStyle` wrapping an `a:ln`).
5102
5445
  *
5103
5446
  * @example
@@ -5137,8 +5480,16 @@ interface ParsedTableStyleBorders {
5137
5480
  insideV?: ParsedTableStyleBorder;
5138
5481
  /** Top-left to bottom-right diagonal. */
5139
5482
  tl2br?: ParsedTableStyleBorder;
5140
- /** Bottom-left to top-right diagonal. */
5141
- bl2tr?: ParsedTableStyleBorder;
5483
+ /**
5484
+ * Top-right to bottom-left diagonal (`a:tr2bl`, ECMA-376's
5485
+ * `CT_TableCellBorderStyle` sequence: left/right/top/bottom/insideH/
5486
+ * insideV/tl2br/tr2bl). The field keeps its historical `bl2tr` spelling
5487
+ * only in the sense that it names the same geometric anti-diagonal line
5488
+ * (top-right-to-bottom-left and bottom-left-to-top-right describe one
5489
+ * undirected diagonal); the parser accepts the real `a:tr2bl` element and,
5490
+ * leniently, a legacy `a:bl2tr` this app previously wrote (issue G4).
5491
+ */
5492
+ tr2bl?: ParsedTableStyleBorder;
5142
5493
  }
5143
5494
  /**
5144
5495
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
@@ -5206,6 +5557,26 @@ interface ParsedTableStyleEntry {
5206
5557
  swCellText?: ParsedTableStyleText;
5207
5558
  neCellText?: ParsedTableStyleText;
5208
5559
  nwCellText?: ParsedTableStyleText;
5560
+ /**
5561
+ * Per-role 3D bevel + lighting from `a:tcStyle/a:cell3D` (CT_Cell3D),
5562
+ * distinct from the per-cell `a:tcPr/a:cell3D` {@link PptxTableCellStyle}
5563
+ * already supports. None of PowerPoint's 74 built-in gallery styles use
5564
+ * this (0 hits in the built-in catalogue), so it only matters for a
5565
+ * hand-authored or third-party table style.
5566
+ */
5567
+ wholeTblCell3D?: PptxTableCell3D;
5568
+ firstRowCell3D?: PptxTableCell3D;
5569
+ lastRowCell3D?: PptxTableCell3D;
5570
+ firstColCell3D?: PptxTableCell3D;
5571
+ lastColCell3D?: PptxTableCell3D;
5572
+ band1HCell3D?: PptxTableCell3D;
5573
+ band2HCell3D?: PptxTableCell3D;
5574
+ band1VCell3D?: PptxTableCell3D;
5575
+ band2VCell3D?: PptxTableCell3D;
5576
+ seCellCell3D?: PptxTableCell3D;
5577
+ swCellCell3D?: PptxTableCell3D;
5578
+ neCellCell3D?: PptxTableCell3D;
5579
+ nwCellCell3D?: PptxTableCell3D;
5209
5580
  }
5210
5581
  /**
5211
5582
  * Map of GUID → table style entry.
@@ -5228,6 +5599,38 @@ interface ParsedTableStyleEntry {
5228
5599
  type ParsedTableStyleMap = Record<string, ParsedTableStyleEntry>;
5229
5600
  //#endregion
5230
5601
  //#region src/core/types/elements.d.ts
5602
+ /**
5603
+ * Accessibility metadata from `p:cNvPr/a:extLst`'s "Mark as decorative"
5604
+ * vendor extension (issue G16). PowerPoint's Alt Text pane writes
5605
+ * `a:ext[@uri='{C183D7F6-B498-43B3-948B-1728B52AA6E4}']/adec:decorative
5606
+ * val="1"` when a shape or image is marked decorative; mixed into the
5607
+ * element variants whose `p:cNvPr` that pane covers.
5608
+ */
5609
+ interface PptxAccessibilityProperties {
5610
+ /**
5611
+ * Whether the element is marked decorative. When true, alt text /
5612
+ * aria-label / Markdown export should skip describing the element even
5613
+ * when {@link PptxImageProperties.altText} (or similar) is present.
5614
+ */
5615
+ isDecorative?: boolean;
5616
+ }
5617
+ /**
5618
+ * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5619
+ * property distinct from `a:picLocks`.
5620
+ */
5621
+ interface PptxPictureNonVisualProperties {
5622
+ /**
5623
+ * `a:cNvPicPr/@preferRelativeResize` (ST_Boolean, defaults to `true` when
5624
+ * absent). Controls whether a picture's crop rectangle is reinterpreted
5625
+ * relative to the picture's ORIGINAL dimensions or its CURRENT
5626
+ * (already-resized) dimensions when it is resized again after being
5627
+ * cropped. Parsed and round-tripped for now; not yet wired into
5628
+ * resize-after-crop arithmetic (this app always uses current-size
5629
+ * semantics, which only diverges from `preferRelativeResize="0"` on a
5630
+ * second resize after a crop).
5631
+ */
5632
+ preferRelativeResize?: boolean;
5633
+ }
5231
5634
  /**
5232
5635
  * A text box — a plain rectangle containing text, typically with no
5233
5636
  * visible fill or stroke.
@@ -5261,7 +5664,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5261
5664
  * // => satisfies ShapePptxElement
5262
5665
  * ```
5263
5666
  */
5264
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties {
5667
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
5265
5668
  type: 'shape';
5266
5669
  }
5267
5670
  /**
@@ -5300,7 +5703,7 @@ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, Pptx
5300
5703
  * // => satisfies ImagePptxElement
5301
5704
  * ```
5302
5705
  */
5303
- interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5706
+ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5304
5707
  type: 'image';
5305
5708
  }
5306
5709
  /**
@@ -5309,7 +5712,7 @@ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCus
5309
5712
  * Functionally identical to {@link ImagePptxElement} but distinguished by
5310
5713
  * the `type` discriminant for semantic clarity.
5311
5714
  */
5312
- interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5715
+ interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5313
5716
  type: 'picture';
5314
5717
  }
5315
5718
  /**
@@ -5459,6 +5862,14 @@ interface OlePptxElement extends PptxElementBase {
5459
5862
  * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5460
5863
  */
5461
5864
  oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
5865
+ /**
5866
+ * `p:link/@updateAutomatic` (`CT_OleObjectLink`, ECMA-376 §19.3.2.4):
5867
+ * whether a LINKED OLE object refreshes automatically from its source
5868
+ * (PowerPoint's Edit Links dialog "Automatic" vs. "Manual" radio buttons).
5869
+ * Only meaningful when {@link isLinked} is `true`. The schema default is
5870
+ * `false`; `undefined` means the source authored no explicit value.
5871
+ */
5872
+ oleUpdateAutomatic?: boolean;
5462
5873
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5463
5874
  extensionXml?: PptxGraphicFrameExtension[];
5464
5875
  }
@@ -6043,12 +6454,50 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
6043
6454
  * is preserved alongside other animations.
6044
6455
  */
6045
6456
  type PptxNativeAnimationKind = 'media';
6457
+ /**
6458
+ * `p:spTgt/p:graphicEl` (CT_TLGraphicalObjectBuildElement, ECMA-376 S19.5.34):
6459
+ * identifies exactly which series/category/element of a chart or diagram
6460
+ * build a per-stage effect reveals, when a deck authors one effect per stage
6461
+ * instead of a single staged `p:bldGraphic` reveal.
6462
+ */
6463
+ interface PptxAnimationGraphicElementTarget {
6464
+ /** Which graphic kind: `p:dgm` (diagram) or `p:chart`. */
6465
+ kind: 'dgm' | 'chart';
6466
+ /** `@_seriesIdx`, 0-based series index, when the target is series-scoped. */
6467
+ seriesIdx?: number;
6468
+ /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6469
+ categoryIdx?: number;
6470
+ /** `@_bldStep` (ST_TLChartBuildStep): `category` / `categoryEl` / `series` / `seriesEl`. */
6471
+ bldStep?: string;
6472
+ }
6473
+ /**
6474
+ * `p:spTgt/p:oleChartEl` (CT_TLOleChartTargetElement, ECMA-376 S19.5.44):
6475
+ * legacy pre-DrawingML OLE Graph chart sub-element targeting.
6476
+ */
6477
+ interface PptxAnimationOleChartElementTarget {
6478
+ /** `@_type` (ST_TLOleChartSubelementType): entireChart / series / category / ... */
6479
+ subelementType: string;
6480
+ /** `@_lvl`, optional sub-element level. */
6481
+ level?: number;
6482
+ }
6046
6483
  /** A target selected by `p:tgtEl` in the PresentationML timing model. */
6047
6484
  type PptxAnimationTarget = {
6048
6485
  type: 'shape';
6049
6486
  shapeId: string;
6050
6487
  /** Whether `p:spTgt/p:bg` limits the effect to the shape background. */
6051
6488
  backgroundOnly?: boolean;
6489
+ /**
6490
+ * `p:spTgt/p:subSp/@_spid`: the id of a shape NESTED inside the group
6491
+ * named by {@link shapeId} (CT_TLSubShapeId, ECMA-376 S19.5.71).
6492
+ * PowerPoint authors this when a user animates one member of a group
6493
+ * without ungrouping it: `shapeId` stays the outer group's id for
6494
+ * round-trip, but this sub-shape is the real playback target.
6495
+ */
6496
+ subShapeId?: string;
6497
+ /** `p:spTgt/p:graphicEl`: chart/diagram series/category/element target. */
6498
+ graphicElement?: PptxAnimationGraphicElementTarget;
6499
+ /** `p:spTgt/p:oleChartEl`: legacy OLE chart sub-element target. */
6500
+ oleChartElement?: PptxAnimationOleChartElementTarget;
6052
6501
  rawXml?: XmlObject;
6053
6502
  } | {
6054
6503
  type: 'slide';
@@ -6428,6 +6877,46 @@ interface PptxNativeAnimation {
6428
6877
  * PowerPoint that only emit the SMIL-style filter string.
6429
6878
  */
6430
6879
  effectFilter?: PptxAnimationEffectFilter;
6880
+ /**
6881
+ * This effect's own `p:cTn/@_id` (a raw OOXML time-node id, not a shape
6882
+ * id). Lets playback resolve a `p:cond/@tn` dependency (see
6883
+ * {@link AnimationCondition.targetTimeNodeId}) against the SPECIFIC node
6884
+ * it names rather than assuming it is always the positionally-previous
6885
+ * effect. Absent when the node carried no `@_id`.
6886
+ */
6887
+ nodeId?: number;
6888
+ /**
6889
+ * Interpolation mode for this effect's PRIMARY `p:anim`-family behaviour
6890
+ * (the same node {@link keyframes}/{@link attrName} were read from), from
6891
+ * `@_calcmode` (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2). See
6892
+ * {@link PptxAttributeAnimation.calcMode} for the per-component version.
6893
+ */
6894
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6895
+ /**
6896
+ * `p:cBhvr/@_additive` (ST_TLBehaviorAdditiveType, ECMA-376 S19.5.4):
6897
+ * controls how this behaviour's value composites with sibling behaviours
6898
+ * driving the same attribute on the same target. `sum` accumulates
6899
+ * (e.g. a combined scale+rotate), `repl`/`base`/`none`/`mult` replace or
6900
+ * otherwise combine. Absent means the OOXML default (`base`).
6901
+ */
6902
+ cBhvrAdditive?: 'base' | 'sum' | 'repl' | 'mult' | 'none';
6903
+ /**
6904
+ * `p:cBhvr/@_accumulate` (ST_TLBehaviorAccumulateType): `always` means
6905
+ * each `p:cTn/@repeatCount` repeat starts from the PREVIOUS repeat's end
6906
+ * value (e.g. a 3x Spin totals 1080deg instead of replaying 0-360 three
6907
+ * times); `none` (the OOXML default) resets every repeat.
6908
+ */
6909
+ cBhvrAccumulate?: 'none' | 'always';
6910
+ /**
6911
+ * `p:cBhvr/@_xfrmType` (only meaningful on `p:animMotion`): `point`
6912
+ * (default) or `img`, a legacy compatibility hint. Round-tripped only.
6913
+ */
6914
+ cBhvrXfrmType?: 'point' | 'img';
6915
+ /**
6916
+ * `p:cBhvr/@_override` (ST_TLBehaviorOverrideType): `normal` (default) or
6917
+ * `childStyle`, a legacy compatibility hint. Round-tripped only.
6918
+ */
6919
+ cBhvrOverride?: 'normal' | 'childStyle';
6431
6920
  }
6432
6921
  /**
6433
6922
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -6494,6 +6983,14 @@ interface PptxAttributeAnimation {
6494
6983
  durationMs?: number;
6495
6984
  /** Start offset from this behaviour's nested `p:stCondLst`. */
6496
6985
  delayMs?: number;
6986
+ /**
6987
+ * Interpolation mode from this behaviour's own `@_calcmode`
6988
+ * (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2): `discrete` snaps to
6989
+ * each `p:tav` stop with no interpolation, `lin` (the OOXML default)
6990
+ * interpolates linearly, `fmla` evaluates `p:tav/@fmla` (not consulted at
6991
+ * playback here; formulas are round-tripped only). Absent means `lin`.
6992
+ */
6993
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6497
6994
  }
6498
6995
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
6499
6996
  interface PptxHslColorDelta {
@@ -6560,7 +7057,7 @@ interface PptxTextAnimationTarget {
6560
7057
  * These map directly to OOXML condition event attribute values
6561
7058
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
6562
7059
  */
6563
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio';
7060
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
6564
7061
  /**
6565
7062
  * Structured representation of a single OOXML animation condition
6566
7063
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -7900,10 +8397,32 @@ interface PptxPresentationProperties {
7900
8397
  printProperties?: PptxPresentationPrintProperties | null;
7901
8398
  /** Most-recently-used colours from the presentation palette. */
7902
8399
  mruColors?: string[];
7903
- /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
8400
+ /**
8401
+ * Pen colour for presentation mode annotations (from `p:showPr/p:penClr`).
8402
+ * `p:penClr` is a full `EG_ColorChoice` (P1-G2): a scheme/preset/system
8403
+ * swatch resolves to a hex string here just like a direct `a:srgbClr`.
8404
+ */
7904
8405
  penColor?: string;
8406
+ /**
8407
+ * The resolved hex value {@link penColor} had at parse time, and the
8408
+ * original `p:penClr` colour-choice XML node, preserved so a save that
8409
+ * never touches the pen colour re-emits the original scheme/preset
8410
+ * reference verbatim instead of flattening it to a baked `a:srgbClr`.
8411
+ * Internal round-trip bookkeeping; not meant to be set by API callers.
8412
+ */
8413
+ penColorOriginal?: string;
8414
+ /** @see penColorOriginal */
8415
+ penColorXml?: XmlObject;
7905
8416
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
7906
8417
  kioskRestartTime?: number;
8418
+ /**
8419
+ * `p:showPr/p:browse/@showScrollbar` (CT_ShowInfoBrowse §19.2.1.10 /
8420
+ * §19.3.1.43), the "Show scrollbar" checkbox in PowerPoint's Set Up Show
8421
+ * dialog. Only meaningful when `showType` is `"browsed"`; the schema
8422
+ * default is `true`. `undefined` means the source authored no explicit
8423
+ * value (or `showType` is not `"browsed"`).
8424
+ */
8425
+ showScrollbar?: boolean;
7907
8426
  }
7908
8427
  /**
7909
8428
  * Slide dimensions from `p:sldSz` (CT_SlideSize, ECMA-376 §19.2.1.39).