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
@@ -43,6 +43,12 @@ interface PptxAction {
43
43
  soundRId?: string;
44
44
  /** Resolved media target path for the optional click sound. */
45
45
  soundPath?: string;
46
+ /**
47
+ * `CT_Hyperlink/@endSnd` (ECMA-376 20.1.2.2.23): PowerPoint's Action
48
+ * Settings "Stop previous sound" checkbox. Round-tripped for now (issue
49
+ * G14); not yet wired into playback.
50
+ */
51
+ endSnd?: boolean;
46
52
  }
47
53
  //#endregion
48
54
  //#region src/core/types/common.d.ts
@@ -65,7 +71,7 @@ interface PptxAction {
65
71
  * // => "wavy" — one of: sng | dbl | heavy | dotted | dash | wavy | none | ...
66
72
  * ```
67
73
  */
68
- type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'none';
74
+ type UnderlineStyle = 'sng' | 'dbl' | 'heavy' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dotDashHeavy' | 'dotDotDash' | 'dotDotDashHeavy' | 'wavy' | 'wavyHeavy' | 'wavyDbl' | 'words' | 'none';
69
75
  /**
70
76
  * Connector connection point reference — links a connector endpoint to a
71
77
  * specific shape on the slide.
@@ -400,6 +406,16 @@ interface CustomGeometryRawData {
400
406
  cxnLstXml?: unknown;
401
407
  /** Raw `a:rect` XML content (text rectangle). */
402
408
  rectXml?: unknown;
409
+ /**
410
+ * Raw `a:pathLst` XML content: every `a:path`'s formula-bearing `a:pt`
411
+ * x/y attributes, `a:arcTo` params, `a:close`, and per-path `@w`/`@h`/
412
+ * `@fill`/`@stroke`/`@extrusionOk`, preserved verbatim (not the
413
+ * parse-time-resolved numbers in `customGeometryPaths`). Lets a live
414
+ * `shapeAdjustments` drag re-evaluate the outline against the CURRENT
415
+ * guide values instead of the ones baked in at parse time; see
416
+ * `geometry/custom-geometry-live-eval.ts`.
417
+ */
418
+ pathLstXml?: unknown;
403
419
  }
404
420
  /**
405
421
  * XY-style adjustment handle (`a:ahXY`) on a custom geometry.
@@ -1157,6 +1173,21 @@ interface ShapeStyle {
1157
1173
  dagFillOverlayColor?: string;
1158
1174
  /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1159
1175
  dagFillOverlayOpacity?: number;
1176
+ /** Fill overlay blend mode from a direct `a:effectLst/a:fillOverlay/@blend`. */
1177
+ shapeFillOverlayBlend?: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
1178
+ /**
1179
+ * Fill overlay tint colour (hex `#RRGGBB`) from a direct
1180
+ * `a:effectLst/a:fillOverlay`'s `a:solidFill`/`a:gradFill`.
1181
+ */
1182
+ shapeFillOverlayColor?: string;
1183
+ /** Fill overlay tint opacity (0-1), from the overlay fill colour's alpha. */
1184
+ shapeFillOverlayOpacity?: number;
1185
+ /** Original source `a:fillOverlay` node, preserved for lossless surgical updates. */
1186
+ fillOverlayXml?: XmlObject;
1187
+ /** Resolved source fill-overlay colour used to detect colour edits. */
1188
+ shapeFillOverlayOriginalColor?: string;
1189
+ /** Source fill-overlay opacity used to detect alpha edits. */
1190
+ shapeFillOverlayOriginalOpacity?: number;
1160
1191
  /** `<a:lnRef @idx>` — 1-based index into the theme's lnStyleLst. */
1161
1192
  lnRefIdx?: number;
1162
1193
  /** Raw XML colour child of `<a:lnRef>` (e.g. `<a:schemeClr>` with transforms). */
@@ -1413,7 +1444,15 @@ interface TextStyle {
1413
1444
  */
1414
1445
  colorXml?: XmlObject;
1415
1446
  align?: 'left' | 'center' | 'right' | 'justify' | 'justLow' | 'dist' | 'thaiDist';
1416
- vAlign?: 'top' | 'middle' | 'bottom';
1447
+ /**
1448
+ * Vertical text-box anchor (`a:bodyPr/@anchor`, `ST_TextAnchoringType`).
1449
+ * `distributed`/`justified` (`dist`/`just`) stretch line spacing so the
1450
+ * paragraph block fills the box's full vertical extent, distinct from true
1451
+ * centering (`middle`/`ctr`); both approximate to a middle-anchored render
1452
+ * (see `text-body-layout.ts`) since CSS has no native vertical-justify
1453
+ * primitive, but round-trip losslessly through parse/save.
1454
+ */
1455
+ vAlign?: 'top' | 'middle' | 'bottom' | 'distributed' | 'justified';
1417
1456
  /** Right-to-left paragraph/run direction (`a:pPr/@rtl`, `a:rPr/@rtl`). */
1418
1457
  rtl?: boolean;
1419
1458
  /** Body text direction (`a:bodyPr/@vert`).
@@ -2234,6 +2273,50 @@ interface PptxChartAxisLabelFormatting {
2234
2273
  noMultiLevelLabels?: boolean;
2235
2274
  }
2236
2275
  //#endregion
2276
+ //#region src/core/types/chart-ex.d.ts
2277
+ /**
2278
+ * Chart-formatting types that don't fit an existing, owned type module for
2279
+ * this wave (`types/chart.ts` is owned elsewhere; see its own module doc).
2280
+ * Despite the file name, `PptxChartDataPointPicture` is a CLASSIC (`c:`)
2281
+ * construct, not ChartEx (`cx:`) - it landed here only because it needs a
2282
+ * home outside `chart.ts`.
2283
+ *
2284
+ * @module pptx-types/chart-ex
2285
+ */
2286
+ /** `c:dPt/c:pictureOptions/c:pictureFormat/@val` (ST_PictureFormat). */
2287
+ type PptxChartPictureFormat = 'stretch' | 'stack' | 'stackScale';
2288
+ /**
2289
+ * Per-data-point picture-fill flags (`c:dPt/c:pictureOptions`): PowerPoint's
2290
+ * "Picture or texture fill" with "Stack"/"Stretch" semantics on a bar/column
2291
+ * data point, distinct from the point's plain `c:spPr` solid/gradient fill.
2292
+ *
2293
+ * The flags parse purely (`parseChartDataPointPicture` in
2294
+ * `utils/chart-datapoint-serializer.ts`); {@link imageUrl} is a separate,
2295
+ * later addition populated by the runtime (`PptxHandlerRuntimeChartParsing.ts`)
2296
+ * once the sibling `c:spPr/a:blipFill/a:blip`'s `r:embed`/`r:link` is resolved
2297
+ * against the chart part's relationships, since that resolution needs zip/file
2298
+ * access the pure parser does not have.
2299
+ */
2300
+ interface PptxChartDataPointPicture {
2301
+ /** Apply the picture to the front face of a 3-D bar/column (`c:applyToFront`). */
2302
+ applyToFront?: boolean;
2303
+ /** Apply the picture to the side faces of a 3-D bar/column (`c:applyToSides`). */
2304
+ applyToSides?: boolean;
2305
+ /** Apply the picture to the end face of a 3-D bar/column (`c:applyToEnd`). */
2306
+ applyToEnd?: boolean;
2307
+ /** Stretch, or stack repeated tiles at their natural size (or scaled). */
2308
+ pictureFormat?: PptxChartPictureFormat;
2309
+ /** Height, in points, of one repeated picture tile for "stack"/"stackScale" (`c:pictureStackUnit/@val`). */
2310
+ pictureStackUnit?: number;
2311
+ /**
2312
+ * Resolved picture source (a `data:`/`blob:` URL) for the point's sibling
2313
+ * `c:spPr/a:blipFill/a:blip`. Populated by the runtime after relationship
2314
+ * resolution (C2-G9 render half); absent until then, and absent entirely
2315
+ * when the point has no picture fill or the image could not be resolved.
2316
+ */
2317
+ imageUrl?: string;
2318
+ }
2319
+ //#endregion
2237
2320
  //#region src/core/types/chart-pivot-format.d.ts
2238
2321
  interface PptxChartPivotFormat {
2239
2322
  index: number;
@@ -2297,6 +2380,15 @@ interface PptxChartPageSetup {
2297
2380
  horizontalDpi?: number;
2298
2381
  verticalDpi?: number;
2299
2382
  copies?: number;
2383
+ /**
2384
+ * Custom paper height, used when {@link paperSize} is `0`
2385
+ * (`c:pageSetup/@paperHeight`, ST_PositiveUniversalMeasure, e.g. `"297mm"`).
2386
+ * Kept as the raw measure string rather than converted, matching how the
2387
+ * schema stores it.
2388
+ */
2389
+ paperHeight?: string;
2390
+ /** Custom paper width, used when {@link paperSize} is `0` (`@paperWidth`). */
2391
+ paperWidth?: string;
2300
2392
  /** Original leaf retained for foreign attributes. */
2301
2393
  rawXml?: unknown;
2302
2394
  }
@@ -2328,6 +2420,65 @@ interface PptxChartProtection {
2328
2420
  rawXml?: XmlObject;
2329
2421
  }
2330
2422
  //#endregion
2423
+ //#region src/core/types/chart-style-definition.d.ts
2424
+ /**
2425
+ * Typed subset of an Office 2013+ chart-style part (`ppt/charts/style#.xml`,
2426
+ * root element `cs:chartStyle`, relationship type
2427
+ * `.../2012/relationships/chartStyle`).
2428
+ *
2429
+ * PowerPoint's Design-tab "Chart Styles" gallery (1-48) writes `c:style/@val`
2430
+ * on the chart part itself (already modeled as `PptxChartStyle.styleId`) and,
2431
+ * for most styles, this SEPARATE part spelling out the per-element
2432
+ * `cs:lnRef`/`cs:fillRef`/`cs:effectRef`/`cs:fontRef`/`cs:defRPr` defaults a
2433
+ * chart element falls back to when its own XML leaves it unstyled. Without
2434
+ * parsing this part, styles beyond the one PowerPoint happens to have baked
2435
+ * inline are visually inert.
2436
+ *
2437
+ * @module pptx-types/chart-style-definition
2438
+ */
2439
+ /**
2440
+ * One styled chart-element entry (`cs:title`, `cs:axisTitle`,
2441
+ * `cs:categoryAxis`, ...). Colours are resolved to hex at parse time (scheme
2442
+ * colour references via `cs:fontRef`/`cs:lnRef`/`cs:fillRef` are already
2443
+ * flattened against the theme, matching how classic chart colours resolve
2444
+ * elsewhere in this codebase). Fields are present only when the source XML
2445
+ * carried a value for them.
2446
+ */
2447
+ interface PptxChartStylePartEntry {
2448
+ /** Text size in points, from `cs:defRPr/@sz` (hundredths of a point). */
2449
+ fontSize?: number;
2450
+ bold?: boolean;
2451
+ italic?: boolean;
2452
+ /** Resolved text colour: `cs:defRPr/a:solidFill`, or `cs:fontRef`'s scheme colour. */
2453
+ color?: string;
2454
+ /** Resolved line colour from `cs:lnRef`'s scheme colour reference. */
2455
+ lineColor?: string;
2456
+ /** Line width in points, when directly authored (rare; most styles reference a theme line style by index only). */
2457
+ lineWidth?: number;
2458
+ /** Resolved fill colour from `cs:fillRef`'s scheme colour reference. */
2459
+ fillColor?: string;
2460
+ }
2461
+ /**
2462
+ * Parsed per-element style defaults from a chart-style part. Only the
2463
+ * elements this viewer actually renders distinct defaults for are modeled;
2464
+ * elements PowerPoint's style gallery also styles (data table, trendlines,
2465
+ * up/down bars, ...) are out of scope until a renderer needs them.
2466
+ */
2467
+ interface PptxChartStyleDefinition {
2468
+ title?: PptxChartStylePartEntry;
2469
+ axisTitle?: PptxChartStylePartEntry;
2470
+ categoryAxis?: PptxChartStylePartEntry;
2471
+ valueAxis?: PptxChartStylePartEntry;
2472
+ legend?: PptxChartStylePartEntry;
2473
+ dataLabel?: PptxChartStylePartEntry;
2474
+ dataPoint?: PptxChartStylePartEntry;
2475
+ dataPointLine?: PptxChartStylePartEntry;
2476
+ gridlineMajor?: PptxChartStylePartEntry;
2477
+ gridlineMinor?: PptxChartStylePartEntry;
2478
+ chartArea?: PptxChartStylePartEntry;
2479
+ plotArea?: PptxChartStylePartEntry;
2480
+ }
2481
+ //#endregion
2331
2482
  //#region src/core/types/chart-user-shapes.d.ts
2332
2483
  /**
2333
2484
  * Types for chart drawing-overlay shapes (`c:userShapes`).
@@ -2366,8 +2517,16 @@ interface PptxChartUserShapeParagraph {
2366
2517
  * `absSizeAnchor` the extent is {@link ext} in EMU.
2367
2518
  */
2368
2519
  interface PptxChartUserShape {
2369
- /** Shape kind: text/preset shape, connector, or picture. */
2370
- kind: 'sp' | 'cxnSp' | 'pic';
2520
+ /**
2521
+ * Shape kind: text/preset shape, connector, picture, a group of the
2522
+ * above (`grpSp`, flattened: each grouped child becomes its own entry
2523
+ * reusing the anchor's own bounding box, an approximation since the
2524
+ * group's internal chOff/chExt transform is not applied), or a bare
2525
+ * placeholder for a `graphicFrame` anchor child (deep content such as a
2526
+ * nested chart or table is out of scope; it only keeps the anchor's
2527
+ * space accounted for instead of the whole overlay disappearing).
2528
+ */
2529
+ kind: 'sp' | 'cxnSp' | 'pic' | 'grpSp' | 'graphicFrame';
2371
2530
  /** Anchor kind that positioned the shape. */
2372
2531
  anchor: 'rel' | 'abs';
2373
2532
  /** Top-left corner as chart-relative fractions (0-1). */
@@ -2599,6 +2758,8 @@ interface PptxChartDataPoint {
2599
2758
  marker?: PptxChartMarker;
2600
2759
  /** Render a bubble-chart point with a 3-D appearance. */
2601
2760
  bubble3D?: boolean;
2761
+ /** Per-point picture-fill flags (`c:dPt/c:pictureOptions`). */
2762
+ picture?: PptxChartDataPointPicture;
2602
2763
  }
2603
2764
  /** Schema values accepted by `c:dLblPos`. */
2604
2765
  type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
@@ -2617,6 +2778,26 @@ interface PptxChartDataLabel {
2617
2778
  text?: string;
2618
2779
  separator?: string;
2619
2780
  showLeaderLines?: boolean;
2781
+ /**
2782
+ * Per-label number-format override (`c:dLbl/c:numFmt/@formatCode`), taking
2783
+ * precedence over the chart-level {@link PptxChartDataLabelOptions.numberFormat}
2784
+ * and the series' own {@link PptxChartSeries.numberFormat} when set.
2785
+ */
2786
+ numberFormat?: string;
2787
+ /**
2788
+ * Manually dragged label position (`c:dLbl/c:layout/c:manualLayout`), the
2789
+ * same CT_ManualLayout shape used for title/legend/plotArea. `null`
2790
+ * explicitly clears a drag back to the automatic position.
2791
+ */
2792
+ layout?: PptxChartManualLayout | null;
2793
+ /**
2794
+ * This label's own font (`c:dLbl/c:txPr/a:p/a:pPr/a:defRPr`, or ChartEx
2795
+ * `cx:dataLabel/cx:txPr`), taking precedence over the chart/series-level
2796
+ * {@link PptxChartDataLabelOptions.txPr} when set. Reuses the legend
2797
+ * entry's flat text-style shape since both are the same
2798
+ * `.../a:p/a:pPr/a:defRPr` default-run-property style.
2799
+ */
2800
+ txPr?: PptxChartLegendTextStyle;
2620
2801
  }
2621
2802
  /** Axis number format. */
2622
2803
  interface PptxChartAxisNumFmt {
@@ -2631,6 +2812,16 @@ interface PptxChartDisplayUnitsLabel {
2631
2812
  layout?: PptxChartManualLayout | null;
2632
2813
  /** Label shape formatting. `null` removes `c:spPr`. */
2633
2814
  spPr?: PptxChartShapeProps | null;
2815
+ /**
2816
+ * The label's own run font, when it carries a distinct `txPr` from the
2817
+ * axis's own (ChartEx `cx:unitsLabel/cx:txPr`; classic `c:dispUnitsLbl`
2818
+ * has no equivalent child, so this is only ever populated from a ChartEx
2819
+ * axis).
2820
+ */
2821
+ fontFamily?: string;
2822
+ fontSize?: number;
2823
+ fontBold?: boolean;
2824
+ fontColor?: string;
2634
2825
  }
2635
2826
  /** Axis formatting for category, value, or date axes. */
2636
2827
  interface PptxChartAxisFormatting extends PptxChartAxisLabelFormatting {
@@ -2735,8 +2926,27 @@ interface PptxChartWaterfallOptions {
2735
2926
  /** Whether connector lines are visible between adjacent bars. */
2736
2927
  connectorLines?: boolean;
2737
2928
  }
2929
+ /**
2930
+ * A single breakpoint in a ChartEx colour-by-value scale
2931
+ * (`cx:valueColorPositions/cx:colorPosition`). `kind` selects which of
2932
+ * CT_ColorPosition's union members was authored; `value` is absent for
2933
+ * `min`/`max` (they are implicit endpoints) and required otherwise.
2934
+ */
2935
+ interface PptxCxValueColorPosition {
2936
+ kind: 'min' | 'max' | 'number' | 'percent';
2937
+ value?: number;
2938
+ }
2738
2939
  /** Office 2016 ChartEx geographic series dimensions and layout options. */
2739
2940
  interface PptxChartRegionMapOptions {
2941
+ /**
2942
+ * Colour-by-value gradient stops (`cx:valueColors/cx:colors/cx:color`),
2943
+ * resolved to hex, 2 or 3 entries (matching PowerPoint's two- and
2944
+ * three-colour scale UI). Paired index-for-index with
2945
+ * {@link valueColorPositions} when both are present.
2946
+ */
2947
+ valueColors?: string[];
2948
+ /** Gradient breakpoints for {@link valueColors} (`cx:valueColorPositions`). */
2949
+ valueColorPositions?: PptxCxValueColorPosition[];
2740
2950
  /** Optional provider entity identifiers aligned with categories and values. */
2741
2951
  entityIds?: string[];
2742
2952
  /** Original `cx:pt/@idx` values for category points. */
@@ -2901,6 +3111,20 @@ interface PptxChartDataLabelOptions {
2901
3111
  * Omit to let PowerPoint use the type default.
2902
3112
  */
2903
3113
  position?: PptxChartDataLabelPosition;
3114
+ /**
3115
+ * Chart-level number-format override (`c:dLbls/c:numFmt/@formatCode`),
3116
+ * applied to every label of the series/chart-type unless a per-point
3117
+ * {@link PptxChartDataLabel.numberFormat} overrides it.
3118
+ */
3119
+ numberFormat?: string;
3120
+ /**
3121
+ * Default font for every label at this level (`c:dLbls/c:txPr`, or
3122
+ * ChartEx `cx:dataLabels/cx:txPr`), overridden by a per-point
3123
+ * {@link PptxChartDataLabel.txPr} when set. `c:dLbls` at the chart-type
3124
+ * level and the series level cascade the same way the show flags do
3125
+ * (point > series > chart-type).
3126
+ */
3127
+ txPr?: PptxChartLegendTextStyle;
2904
3128
  }
2905
3129
  /** Typed text defaults for a single chart legend entry. */
2906
3130
  interface PptxChartLegendTextStyle {
@@ -2957,6 +3181,17 @@ interface PptxChartStyle {
2957
3181
  hasDataLabels?: boolean;
2958
3182
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
2959
3183
  dataLabels?: PptxChartDataLabelOptions;
3184
+ /**
3185
+ * Font styling for the chart's own title (`c:title/c:txPr`), edited via
3186
+ * `applyChartTitleStyleToXml` (chart-title-style-serializer.ts). Distinct
3187
+ * from an axis title's styling (`PptxChartAxisFormatting.fontFamily` etc.).
3188
+ */
3189
+ titleFontFamily?: string;
3190
+ titleFontSize?: number;
3191
+ titleFontBold?: boolean;
3192
+ titleFontColor?: string;
3193
+ /** Title text-box fill/border (`c:title/c:spPr`). `null` removes it. */
3194
+ titleSpPr?: PptxChartShapeProps | null;
2960
3195
  }
2961
3196
  /**
2962
3197
  * External data source reference for a chart (c:externalData).
@@ -3337,6 +3572,38 @@ interface PptxChartData {
3337
3572
  * `attribute → value` map for round-trip fidelity.
3338
3573
  */
3339
3574
  clrMapOvr?: Record<string, string>;
3575
+ /**
3576
+ * Whether the chart's own cached numeric values use the 1904 date epoch
3577
+ * (`c:chartSpace/c:date1904/@val`). Independent of, and authoritative over,
3578
+ * any embedded workbook's `workbookPr/@date1904` (a chart can lack an
3579
+ * embedded workbook entirely, or its cache can legitimately differ from the
3580
+ * workbook's current setting). Absent when the source XML omits the
3581
+ * element, in which case the 1900 system applies (the schema default).
3582
+ */
3583
+ date1904?: boolean;
3584
+ /**
3585
+ * PowerPoint's "Rounded corners" chart-area option
3586
+ * (`c:chartSpace/c:roundedCorners/@val`, default `false`). Absent when the
3587
+ * source XML omits the element.
3588
+ */
3589
+ roundedCorners?: boolean;
3590
+ /**
3591
+ * 3-D chart depth/spacing along the series axis, as a percentage
3592
+ * (`c:gapDepth/@val`, `ST_GapAmount`, 0 through 500). Legal on
3593
+ * `bar3D`/`area3D`/`line3D`/`surface` chart-type containers only. Read-only
3594
+ * for rendering, matching {@link barGapWidth}/{@link barOverlap}: save
3595
+ * round-trips it via the preserved chart XML rather than a typed edit path.
3596
+ */
3597
+ gapDepth?: number;
3598
+ /**
3599
+ * Parsed Office 2013+ chart-style part (`ppt/charts/style#.xml`,
3600
+ * `cs:chartStyle`), providing per-element font/line/fill defaults for
3601
+ * whichever built-in "Chart Styles" gallery entry ({@link PptxChartStyle.styleId})
3602
+ * is active. Absent when the chart has no such part (common for
3603
+ * automation-authored charts, where PowerPoint still implies style 2's
3604
+ * look via its own bundled defaults).
3605
+ */
3606
+ chartStyleDefinition?: PptxChartStyleDefinition;
3340
3607
  }
3341
3608
  //#endregion
3342
3609
  //#region src/core/types/image.d.ts
@@ -3860,6 +4127,52 @@ interface MediaCaptionTrack {
3860
4127
  isDefault?: boolean;
3861
4128
  }
3862
4129
  //#endregion
4130
+ //#region src/core/types/smart-art-chrome.d.ts
4131
+ /**
4132
+ * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4133
+ *
4134
+ * @example
4135
+ * ```ts
4136
+ * const chrome: PptxSmartArtChrome = {
4137
+ * backgroundColor: "#F0F0F0",
4138
+ * outlineColor: "#333333",
4139
+ * outlineWidth: 1,
4140
+ * };
4141
+ * // => satisfies PptxSmartArtChrome
4142
+ * ```
4143
+ */
4144
+ interface PptxSmartArtChrome {
4145
+ /**
4146
+ * Background fill colour (hex). When the real `dgm:bg` fill is a gradient
4147
+ * or pattern (see {@link PptxSmartArtChrome.backgroundFillXml}), this is an
4148
+ * APPROXIMATION (the gradient's first stop, or the pattern's foreground
4149
+ * colour) for a consumer that only wants one display colour, not the full fill.
4150
+ */
4151
+ backgroundColor?: string;
4152
+ /**
4153
+ * Raw `dgm:bg` fill XML, present only when the background is a gradient or
4154
+ * pattern fill (a solid fill is fully captured by {@link PptxSmartArtChrome.backgroundColor}
4155
+ * alone). Round-trip only: `smartart-save-chrome.ts` re-emits this verbatim
4156
+ * instead of flattening the fill to a solid colour on save.
4157
+ */
4158
+ backgroundFillXml?: PptxSmartArtRawBackgroundFill;
4159
+ /** Outline stroke colour (hex). */
4160
+ outlineColor?: string;
4161
+ /** Outline stroke width in points. */
4162
+ outlineWidth?: number;
4163
+ }
4164
+ /**
4165
+ * A `dgm:bg` fill this viewer doesn't fully model as first-class chrome
4166
+ * (gradient or pattern), preserved verbatim for round-trip. See
4167
+ * {@link PptxSmartArtChrome.backgroundFillXml}.
4168
+ */
4169
+ interface PptxSmartArtRawBackgroundFill {
4170
+ /** Local element name of the fill under `dgm:bg` (`gradFill` or `pattFill`). */
4171
+ localName: 'gradFill' | 'pattFill';
4172
+ /** The fill element's own attributes/children, as parsed. */
4173
+ xml: XmlObject;
4174
+ }
4175
+ //#endregion
3863
4176
  //#region src/core/types/smart-art-constraint-rules.d.ts
3864
4177
  type PptxSmartArtConstraintRelationship = 'self' | 'ch' | 'des';
3865
4178
  type PptxSmartArtConstraintOperator = 'none' | 'equ' | 'gte' | 'lte';
@@ -3958,6 +4271,14 @@ interface PptxSmartArtLayoutNodeShape {
3958
4271
  adjustments?: PptxSmartArtShapeAdjustment[];
3959
4272
  /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3960
4273
  hideGeometry?: boolean;
4274
+ /**
4275
+ * `dgm:shape/@lkTxEntry` (CT_Shape, boolean, default false): this node is a
4276
+ * decorative shape that should mirror its paired content node's text
4277
+ * rather than always rendering blank. See `smartart-layout-interpreter-
4278
+ * pyramid.ts`'s `arrangePyramid`, the interpreter's one existing
4279
+ * synthesized-decorative-shape call site.
4280
+ */
4281
+ lkTxEntry?: boolean;
3961
4282
  }
3962
4283
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3963
4284
  interface PptxSmartArtLayoutNode {
@@ -4185,6 +4506,13 @@ interface PptxSmartArtNode {
4185
4506
  * generic cycled palette (see `applySmartArtRoleColors`).
4186
4507
  */
4187
4508
  styleRole?: string;
4509
+ /**
4510
+ * `dgm:prSet/@coherent3DOff` (`CT_ElemPropSet`) resolved from the node's
4511
+ * paired presentation point: when true, this node opts out of the
4512
+ * diagram's overall coherent-3D scene rotation (a `dgm:scene3d`/`dgm:sp3d`
4513
+ * quick-style variation) applied to every other node.
4514
+ */
4515
+ coherent3DOff?: boolean;
4188
4516
  /**
4189
4517
  * Per-run text + run-properties for the node's first paragraph, captured at
4190
4518
  * parse time. When the joined run text still equals {@link text} (the node
@@ -4232,9 +4560,29 @@ interface PptxSmartArtColorListMetadata {
4232
4560
  method?: PptxSmartArtColorApplicationMethod;
4233
4561
  hueDirection?: PptxSmartArtHueDirection;
4234
4562
  }
4563
+ /**
4564
+ * A quick-style label's `a:lnRef`/`a:fillRef`/`a:effectRef`/`a:fontRef`
4565
+ * (`CT_ShapeStyle`, the same complex type an ordinary shape's `p:style`
4566
+ * uses), resolved against the theme's `fmtScheme` at parse time instead of
4567
+ * the coarse subtle/moderate/intense enum ({@link PptxSmartArtQuickStyle.effectIntensity}).
4568
+ * Only populated when a theme format scheme was available when the quick
4569
+ * style was parsed. See G13 in the 2026-09 diagram audit.
4570
+ */
4571
+ interface PptxSmartArtResolvedStyleRef {
4572
+ fillColor?: string;
4573
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'none' | 'theme';
4574
+ strokeColor?: string;
4575
+ strokeWidth?: number;
4576
+ /** `a:effectRef`'s theme-resolved outer shadow colour, when the style has one. */
4577
+ shadowColor?: string;
4578
+ /** `a:fontRef`'s theme-resolved typeface (`+mn-lt`/`+mj-lt` -> the theme's actual font). */
4579
+ fontTypeface?: string;
4580
+ }
4235
4581
  /** CT_StyleLabel metadata from a quick-style definition. */
4236
4582
  interface PptxSmartArtQuickStyleLabel {
4237
4583
  name: string;
4584
+ /** Theme-resolved `dgm:style` refs for this label's role, when available. */
4585
+ resolvedStyle?: PptxSmartArtResolvedStyleRef;
4238
4586
  }
4239
4587
  /** CT_CTStyleLabel metadata from a color-transform definition. */
4240
4588
  interface PptxSmartArtColorStyleLabel {
@@ -4497,27 +4845,6 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
4497
4845
  textFrameWidth?: number;
4498
4846
  textFrameHeight?: number;
4499
4847
  }
4500
- /**
4501
- * Background / outline extracted from `dgm:bg` and `dgm:whole`.
4502
- *
4503
- * @example
4504
- * ```ts
4505
- * const chrome: PptxSmartArtChrome = {
4506
- * backgroundColor: "#F0F0F0",
4507
- * outlineColor: "#333333",
4508
- * outlineWidth: 1,
4509
- * };
4510
- * // => satisfies PptxSmartArtChrome
4511
- * ```
4512
- */
4513
- interface PptxSmartArtChrome {
4514
- /** Background fill colour (hex). */
4515
- backgroundColor?: string;
4516
- /** Outline stroke colour (hex). */
4517
- outlineColor?: string;
4518
- /** Outline stroke width in points. */
4519
- outlineWidth?: number;
4520
- }
4521
4848
  /**
4522
4849
  * Presentation layout variables from `dgm:prSet/dgm:presLayoutVars` (data model)
4523
4850
  * or `dgm:varLst` (layout definition defaults).
@@ -4974,6 +5301,22 @@ interface PptxTableData {
4974
5301
  bandColCycle?: number;
4975
5302
  /** Right-to-left table layout from `a:tblPr/@rtl`. */
4976
5303
  rtl?: boolean;
5304
+ /**
5305
+ * `a:tblPr`'s OWN fill (`CT_TableProperties` §21.1.3.15's
5306
+ * `EG_FillProperties`), independent of any `a:tblStyleLst`-referenced style
5307
+ * or that style's `a:tblBg`. Applied as the lowest-priority fill layer,
5308
+ * beneath the table style's `wholeTbl` fill. Real PowerPoint decks route
5309
+ * table appearance through `tableStyleId` instead, so this mainly matters
5310
+ * for non-PowerPoint authoring tools (issue G6).
5311
+ */
5312
+ tableFill?: ParsedTableStyleFill;
5313
+ /**
5314
+ * Whether `a:tblPr` carries its own `a:effectLst`/`a:effectDag`,
5315
+ * independent of the referenced table style. Presence-only: the concrete
5316
+ * effect is not yet rendered, and the raw XML round-trips separately via
5317
+ * whatever preserves `a:tblPr`'s unrecognised children (issue G6).
5318
+ */
5319
+ tableEffects?: boolean;
4977
5320
  }
4978
5321
  /**
4979
5322
  * A single fill reference within a table style section.
@@ -5095,7 +5438,7 @@ interface ParsedTableStyleText {
5095
5438
  * A single border side within a table style's `a:tcStyle/a:tcBdr`.
5096
5439
  *
5097
5440
  * Corresponds to one of `a:left`, `a:right`, `a:top`, `a:bottom`,
5098
- * `a:insideH`, `a:insideV`, `a:tl2br`, `a:bl2tr` (each a
5441
+ * `a:insideH`, `a:insideV`, `a:tl2br`, `a:tr2bl` (each a
5099
5442
  * `CT_ThemeableLineStyle` wrapping an `a:ln`).
5100
5443
  *
5101
5444
  * @example
@@ -5135,8 +5478,16 @@ interface ParsedTableStyleBorders {
5135
5478
  insideV?: ParsedTableStyleBorder;
5136
5479
  /** Top-left to bottom-right diagonal. */
5137
5480
  tl2br?: ParsedTableStyleBorder;
5138
- /** Bottom-left to top-right diagonal. */
5139
- bl2tr?: ParsedTableStyleBorder;
5481
+ /**
5482
+ * Top-right to bottom-left diagonal (`a:tr2bl`, ECMA-376's
5483
+ * `CT_TableCellBorderStyle` sequence: left/right/top/bottom/insideH/
5484
+ * insideV/tl2br/tr2bl). The field keeps its historical `bl2tr` spelling
5485
+ * only in the sense that it names the same geometric anti-diagonal line
5486
+ * (top-right-to-bottom-left and bottom-left-to-top-right describe one
5487
+ * undirected diagonal); the parser accepts the real `a:tr2bl` element and,
5488
+ * leniently, a legacy `a:bl2tr` this app previously wrote (issue G4).
5489
+ */
5490
+ tr2bl?: ParsedTableStyleBorder;
5140
5491
  }
5141
5492
  /**
5142
5493
  * Table background style (CT_TableBackgroundStyle, ECMA-376 §21.1.3.7).
@@ -5204,6 +5555,26 @@ interface ParsedTableStyleEntry {
5204
5555
  swCellText?: ParsedTableStyleText;
5205
5556
  neCellText?: ParsedTableStyleText;
5206
5557
  nwCellText?: ParsedTableStyleText;
5558
+ /**
5559
+ * Per-role 3D bevel + lighting from `a:tcStyle/a:cell3D` (CT_Cell3D),
5560
+ * distinct from the per-cell `a:tcPr/a:cell3D` {@link PptxTableCellStyle}
5561
+ * already supports. None of PowerPoint's 74 built-in gallery styles use
5562
+ * this (0 hits in the built-in catalogue), so it only matters for a
5563
+ * hand-authored or third-party table style.
5564
+ */
5565
+ wholeTblCell3D?: PptxTableCell3D;
5566
+ firstRowCell3D?: PptxTableCell3D;
5567
+ lastRowCell3D?: PptxTableCell3D;
5568
+ firstColCell3D?: PptxTableCell3D;
5569
+ lastColCell3D?: PptxTableCell3D;
5570
+ band1HCell3D?: PptxTableCell3D;
5571
+ band2HCell3D?: PptxTableCell3D;
5572
+ band1VCell3D?: PptxTableCell3D;
5573
+ band2VCell3D?: PptxTableCell3D;
5574
+ seCellCell3D?: PptxTableCell3D;
5575
+ swCellCell3D?: PptxTableCell3D;
5576
+ neCellCell3D?: PptxTableCell3D;
5577
+ nwCellCell3D?: PptxTableCell3D;
5207
5578
  }
5208
5579
  /**
5209
5580
  * Map of GUID → table style entry.
@@ -5226,6 +5597,38 @@ interface ParsedTableStyleEntry {
5226
5597
  type ParsedTableStyleMap = Record<string, ParsedTableStyleEntry>;
5227
5598
  //#endregion
5228
5599
  //#region src/core/types/elements.d.ts
5600
+ /**
5601
+ * Accessibility metadata from `p:cNvPr/a:extLst`'s "Mark as decorative"
5602
+ * vendor extension (issue G16). PowerPoint's Alt Text pane writes
5603
+ * `a:ext[@uri='{C183D7F6-B498-43B3-948B-1728B52AA6E4}']/adec:decorative
5604
+ * val="1"` when a shape or image is marked decorative; mixed into the
5605
+ * element variants whose `p:cNvPr` that pane covers.
5606
+ */
5607
+ interface PptxAccessibilityProperties {
5608
+ /**
5609
+ * Whether the element is marked decorative. When true, alt text /
5610
+ * aria-label / Markdown export should skip describing the element even
5611
+ * when {@link PptxImageProperties.altText} (or similar) is present.
5612
+ */
5613
+ isDecorative?: boolean;
5614
+ }
5615
+ /**
5616
+ * `a:cNvPicPr/@preferRelativeResize` (issue G13), a picture-only non-visual
5617
+ * property distinct from `a:picLocks`.
5618
+ */
5619
+ interface PptxPictureNonVisualProperties {
5620
+ /**
5621
+ * `a:cNvPicPr/@preferRelativeResize` (ST_Boolean, defaults to `true` when
5622
+ * absent). Controls whether a picture's crop rectangle is reinterpreted
5623
+ * relative to the picture's ORIGINAL dimensions or its CURRENT
5624
+ * (already-resized) dimensions when it is resized again after being
5625
+ * cropped. Parsed and round-tripped for now; not yet wired into
5626
+ * resize-after-crop arithmetic (this app always uses current-size
5627
+ * semantics, which only diverges from `preferRelativeResize="0"` on a
5628
+ * second resize after a crop).
5629
+ */
5630
+ preferRelativeResize?: boolean;
5631
+ }
5229
5632
  /**
5230
5633
  * A text box — a plain rectangle containing text, typically with no
5231
5634
  * visible fill or stroke.
@@ -5259,7 +5662,7 @@ interface TextPptxElement extends PptxElementBase, PptxTextProperties, PptxShape
5259
5662
  * // => satisfies ShapePptxElement
5260
5663
  * ```
5261
5664
  */
5262
- interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties {
5665
+ interface ShapePptxElement extends PptxElementBase, PptxTextProperties, PptxShapeProperties, PptxCustomPathProperties, PptxAccessibilityProperties {
5263
5666
  type: 'shape';
5264
5667
  }
5265
5668
  /**
@@ -5298,7 +5701,7 @@ interface ConnectorPptxElement extends PptxElementBase, PptxTextProperties, Pptx
5298
5701
  * // => satisfies ImagePptxElement
5299
5702
  * ```
5300
5703
  */
5301
- interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5704
+ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5302
5705
  type: 'image';
5303
5706
  }
5304
5707
  /**
@@ -5307,7 +5710,7 @@ interface ImagePptxElement extends PptxElementBase, PptxShapeProperties, PptxCus
5307
5710
  * Functionally identical to {@link ImagePptxElement} but distinguished by
5308
5711
  * the `type` discriminant for semantic clarity.
5309
5712
  */
5310
- interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties {
5713
+ interface PicturePptxElement extends PptxElementBase, PptxShapeProperties, PptxCustomPathProperties, PptxImageProperties, PptxAccessibilityProperties, PptxPictureNonVisualProperties {
5311
5714
  type: 'picture';
5312
5715
  }
5313
5716
  /**
@@ -5457,6 +5860,14 @@ interface OlePptxElement extends PptxElementBase {
5457
5860
  * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5458
5861
  */
5459
5862
  oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
5863
+ /**
5864
+ * `p:link/@updateAutomatic` (`CT_OleObjectLink`, ECMA-376 §19.3.2.4):
5865
+ * whether a LINKED OLE object refreshes automatically from its source
5866
+ * (PowerPoint's Edit Links dialog "Automatic" vs. "Manual" radio buttons).
5867
+ * Only meaningful when {@link isLinked} is `true`. The schema default is
5868
+ * `false`; `undefined` means the source authored no explicit value.
5869
+ */
5870
+ oleUpdateAutomatic?: boolean;
5460
5871
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
5461
5872
  extensionXml?: PptxGraphicFrameExtension[];
5462
5873
  }
@@ -6051,12 +6462,50 @@ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevi
6051
6462
  * is preserved alongside other animations.
6052
6463
  */
6053
6464
  type PptxNativeAnimationKind = 'media';
6465
+ /**
6466
+ * `p:spTgt/p:graphicEl` (CT_TLGraphicalObjectBuildElement, ECMA-376 S19.5.34):
6467
+ * identifies exactly which series/category/element of a chart or diagram
6468
+ * build a per-stage effect reveals, when a deck authors one effect per stage
6469
+ * instead of a single staged `p:bldGraphic` reveal.
6470
+ */
6471
+ interface PptxAnimationGraphicElementTarget {
6472
+ /** Which graphic kind: `p:dgm` (diagram) or `p:chart`. */
6473
+ kind: 'dgm' | 'chart';
6474
+ /** `@_seriesIdx`, 0-based series index, when the target is series-scoped. */
6475
+ seriesIdx?: number;
6476
+ /** `@_categoryIdx`, 0-based category index, when the target is category-scoped. */
6477
+ categoryIdx?: number;
6478
+ /** `@_bldStep` (ST_TLChartBuildStep): `category` / `categoryEl` / `series` / `seriesEl`. */
6479
+ bldStep?: string;
6480
+ }
6481
+ /**
6482
+ * `p:spTgt/p:oleChartEl` (CT_TLOleChartTargetElement, ECMA-376 S19.5.44):
6483
+ * legacy pre-DrawingML OLE Graph chart sub-element targeting.
6484
+ */
6485
+ interface PptxAnimationOleChartElementTarget {
6486
+ /** `@_type` (ST_TLOleChartSubelementType): entireChart / series / category / ... */
6487
+ subelementType: string;
6488
+ /** `@_lvl`, optional sub-element level. */
6489
+ level?: number;
6490
+ }
6054
6491
  /** A target selected by `p:tgtEl` in the PresentationML timing model. */
6055
6492
  type PptxAnimationTarget = {
6056
6493
  type: 'shape';
6057
6494
  shapeId: string;
6058
6495
  /** Whether `p:spTgt/p:bg` limits the effect to the shape background. */
6059
6496
  backgroundOnly?: boolean;
6497
+ /**
6498
+ * `p:spTgt/p:subSp/@_spid`: the id of a shape NESTED inside the group
6499
+ * named by {@link shapeId} (CT_TLSubShapeId, ECMA-376 S19.5.71).
6500
+ * PowerPoint authors this when a user animates one member of a group
6501
+ * without ungrouping it: `shapeId` stays the outer group's id for
6502
+ * round-trip, but this sub-shape is the real playback target.
6503
+ */
6504
+ subShapeId?: string;
6505
+ /** `p:spTgt/p:graphicEl`: chart/diagram series/category/element target. */
6506
+ graphicElement?: PptxAnimationGraphicElementTarget;
6507
+ /** `p:spTgt/p:oleChartEl`: legacy OLE chart sub-element target. */
6508
+ oleChartElement?: PptxAnimationOleChartElementTarget;
6060
6509
  rawXml?: XmlObject;
6061
6510
  } | {
6062
6511
  type: 'slide';
@@ -6436,6 +6885,46 @@ interface PptxNativeAnimation {
6436
6885
  * PowerPoint that only emit the SMIL-style filter string.
6437
6886
  */
6438
6887
  effectFilter?: PptxAnimationEffectFilter;
6888
+ /**
6889
+ * This effect's own `p:cTn/@_id` (a raw OOXML time-node id, not a shape
6890
+ * id). Lets playback resolve a `p:cond/@tn` dependency (see
6891
+ * {@link AnimationCondition.targetTimeNodeId}) against the SPECIFIC node
6892
+ * it names rather than assuming it is always the positionally-previous
6893
+ * effect. Absent when the node carried no `@_id`.
6894
+ */
6895
+ nodeId?: number;
6896
+ /**
6897
+ * Interpolation mode for this effect's PRIMARY `p:anim`-family behaviour
6898
+ * (the same node {@link keyframes}/{@link attrName} were read from), from
6899
+ * `@_calcmode` (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2). See
6900
+ * {@link PptxAttributeAnimation.calcMode} for the per-component version.
6901
+ */
6902
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6903
+ /**
6904
+ * `p:cBhvr/@_additive` (ST_TLBehaviorAdditiveType, ECMA-376 S19.5.4):
6905
+ * controls how this behaviour's value composites with sibling behaviours
6906
+ * driving the same attribute on the same target. `sum` accumulates
6907
+ * (e.g. a combined scale+rotate), `repl`/`base`/`none`/`mult` replace or
6908
+ * otherwise combine. Absent means the OOXML default (`base`).
6909
+ */
6910
+ cBhvrAdditive?: 'base' | 'sum' | 'repl' | 'mult' | 'none';
6911
+ /**
6912
+ * `p:cBhvr/@_accumulate` (ST_TLBehaviorAccumulateType): `always` means
6913
+ * each `p:cTn/@repeatCount` repeat starts from the PREVIOUS repeat's end
6914
+ * value (e.g. a 3x Spin totals 1080deg instead of replaying 0-360 three
6915
+ * times); `none` (the OOXML default) resets every repeat.
6916
+ */
6917
+ cBhvrAccumulate?: 'none' | 'always';
6918
+ /**
6919
+ * `p:cBhvr/@_xfrmType` (only meaningful on `p:animMotion`): `point`
6920
+ * (default) or `img`, a legacy compatibility hint. Round-tripped only.
6921
+ */
6922
+ cBhvrXfrmType?: 'point' | 'img';
6923
+ /**
6924
+ * `p:cBhvr/@_override` (ST_TLBehaviorOverrideType): `normal` (default) or
6925
+ * `childStyle`, a legacy compatibility hint. Round-tripped only.
6926
+ */
6927
+ cBhvrOverride?: 'normal' | 'childStyle';
6439
6928
  }
6440
6929
  /**
6441
6930
  * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
@@ -6502,6 +6991,14 @@ interface PptxAttributeAnimation {
6502
6991
  durationMs?: number;
6503
6992
  /** Start offset from this behaviour's nested `p:stCondLst`. */
6504
6993
  delayMs?: number;
6994
+ /**
6995
+ * Interpolation mode from this behaviour's own `@_calcmode`
6996
+ * (ST_TLAnimateBehaviorCalcMode, ECMA-376 S19.5.2): `discrete` snaps to
6997
+ * each `p:tav` stop with no interpolation, `lin` (the OOXML default)
6998
+ * interpolates linearly, `fmla` evaluates `p:tav/@fmla` (not consulted at
6999
+ * playback here; formulas are round-tripped only). Absent means `lin`.
7000
+ */
7001
+ calcMode?: 'discrete' | 'lin' | 'fmla';
6505
7002
  }
6506
7003
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
6507
7004
  interface PptxHslColorDelta {
@@ -6568,7 +7065,7 @@ interface PptxTextAnimationTarget {
6568
7065
  * These map directly to OOXML condition event attribute values
6569
7066
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
6570
7067
  */
6571
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio';
7068
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
6572
7069
  /**
6573
7070
  * Structured representation of a single OOXML animation condition
6574
7071
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -7908,10 +8405,32 @@ interface PptxPresentationProperties {
7908
8405
  printProperties?: PptxPresentationPrintProperties | null;
7909
8406
  /** Most-recently-used colours from the presentation palette. */
7910
8407
  mruColors?: string[];
7911
- /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
8408
+ /**
8409
+ * Pen colour for presentation mode annotations (from `p:showPr/p:penClr`).
8410
+ * `p:penClr` is a full `EG_ColorChoice` (P1-G2): a scheme/preset/system
8411
+ * swatch resolves to a hex string here just like a direct `a:srgbClr`.
8412
+ */
7912
8413
  penColor?: string;
8414
+ /**
8415
+ * The resolved hex value {@link penColor} had at parse time, and the
8416
+ * original `p:penClr` colour-choice XML node, preserved so a save that
8417
+ * never touches the pen colour re-emits the original scheme/preset
8418
+ * reference verbatim instead of flattening it to a baked `a:srgbClr`.
8419
+ * Internal round-trip bookkeeping; not meant to be set by API callers.
8420
+ */
8421
+ penColorOriginal?: string;
8422
+ /** @see penColorOriginal */
8423
+ penColorXml?: XmlObject;
7913
8424
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
7914
8425
  kioskRestartTime?: number;
8426
+ /**
8427
+ * `p:showPr/p:browse/@showScrollbar` (CT_ShowInfoBrowse §19.2.1.10 /
8428
+ * §19.3.1.43), the "Show scrollbar" checkbox in PowerPoint's Set Up Show
8429
+ * dialog. Only meaningful when `showType` is `"browsed"`; the schema
8430
+ * default is `true`. `undefined` means the source authored no explicit
8431
+ * value (or `showType` is not `"browsed"`).
8432
+ */
8433
+ showScrollbar?: boolean;
7915
8434
  }
7916
8435
  /**
7917
8436
  * Slide dimensions from `p:sldSz` (CT_SlideSize, ECMA-376 §19.2.1.39).
@@ -9913,6 +10432,41 @@ type ChartBuildMode = 'asOne' | 'bySeries' | 'byCategory' | 'byElement';
9913
10432
  * - `byLvlAtOnce` a whole level is revealed per stage (`lvlAtOnce`).
9914
10433
  */
9915
10434
  type DiagramBuildMode = 'asOne' | 'byOne' | 'byLvl' | 'byLvlAtOnce';
10435
+ /**
10436
+ * One authored `p:graphicEl` reveal unit resolved onto a chart, per
10437
+ * `TimelineStepGraphicElement`'s "both indices set" case: a single (series,
10438
+ * category) cell revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect.
10439
+ */
10440
+ interface ChartRevealPoint {
10441
+ seriesIdx: number;
10442
+ categoryIdx: number;
10443
+ }
10444
+ /**
10445
+ * Playback-time chart reveal state derived from AUTHORED `p:graphicEl`
10446
+ * indices (see `chart-reveal-descriptor`'s `resolveChartRevealDescriptor`),
10447
+ * rather than from click-count/time progress. Present on
10448
+ * {@link ElementAnimationState.chartReveal} only when every fired
10449
+ * chart-build step for the element carried index data; a renderer prefers
10450
+ * this over the progress-based `build`/`ElementBuildState` path when present,
10451
+ * since it reflects the real authored reveal set (correct even for a
10452
+ * reversed-order or gapped chart build), and falls back to `build` when
10453
+ * absent.
10454
+ */
10455
+ interface ChartRevealDescriptor {
10456
+ /**
10457
+ * Whether the chart's background/axes/gridlines/legend should currently be
10458
+ * visible: always `true` when the chart's `animateBackground` is `false`
10459
+ * ("shown throughout"), otherwise `true` from the first revealed stage
10460
+ * onward.
10461
+ */
10462
+ background: boolean;
10463
+ /** Whole series revealed by a `bldStep="series"` effect. */
10464
+ series: ReadonlySet<number>;
10465
+ /** Whole categories revealed by a `bldStep="category"` effect. */
10466
+ categories: ReadonlySet<number>;
10467
+ /** Individual cells revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect. */
10468
+ points: readonly ChartRevealPoint[];
10469
+ }
9916
10470
  /**
9917
10471
  * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
9918
10472
  * `progress` is the 0..1 fraction of the build revealed at the current playback
@@ -9943,6 +10497,16 @@ interface ElementAnimationState {
9943
10497
  * whole-element entrances, so existing renderers are unaffected.
9944
10498
  */
9945
10499
  build?: ElementBuildState;
10500
+ /**
10501
+ * Authored-index chart reveal state (see {@link ChartRevealDescriptor}),
10502
+ * present only when every fired chart-build step for this element carried
10503
+ * `p:graphicEl` index data. A chart renderer prefers this over `build` when
10504
+ * present; `chart-build`'s `resolveRevealedChartData` picks between the two.
10505
+ */
10506
+ chartReveal?: {
10507
+ mode: ChartBuildMode;
10508
+ descriptor: ChartRevealDescriptor;
10509
+ };
9946
10510
  /**
9947
10511
  * True when an active `p:animClr` color animation targets this shape's fill.
9948
10512
  * A vector renderer should then paint the fill with `fill: inherit` so the
@@ -11208,6 +11772,8 @@ interface ToolbarProps {
11208
11772
  onUpdateElementStyle: (updates: Partial<ShapeStyle>) => void;
11209
11773
  /** How many elements the multi-select currently holds. */
11210
11774
  selectedCount: number;
11775
+ /** Whether every selected element allows `a:spLocks/@noGrp` grouping. */
11776
+ selectionGroupable: boolean;
11211
11777
  /** Open the hyperlink editor for the current selection. */
11212
11778
  onOpenHyperlinkDialog: () => void;
11213
11779
  onDuplicate: () => void;
@@ -12154,6 +12720,11 @@ interface UsePresentationModeInput {
12154
12720
  onPlayActionSound?: (soundPath: string, options?: {
12155
12721
  loop?: boolean;
12156
12722
  }) => void;
12723
+ /**
12724
+ * Stop the currently-playing action/transition sound (`p:sndAc/p:endSnd`,
12725
+ * PowerPoint's transition "Stop Previous Sound").
12726
+ */
12727
+ onStopActionSound?: () => void;
12157
12728
  /** Select a pointer tool (Ctrl+L laser, Ctrl+P pen, Ctrl+A arrow, Ctrl+E eraser). */
12158
12729
  onSetPointerTool?: (tool: PresentationPointerTool | 'arrow') => void;
12159
12730
  /** Erase the current slide's ink annotations (E). */
@@ -13248,6 +13819,8 @@ interface ElementManipulationHandlers {
13248
13819
  handleAlignElements: (align: string) => void;
13249
13820
  handleDistributeElements: (axis: string) => void;
13250
13821
  canDistribute: boolean;
13822
+ /** Whether every currently selected element allows `a:spLocks/@noGrp` grouping. */
13823
+ selectionGroupable: boolean;
13251
13824
  handleMoveLayer: (direction: string) => void;
13252
13825
  handleMoveLayerToEdge: (direction: string) => void;
13253
13826
  handleMergeShapes: (operation: MergeShapeOperation) => void;
@@ -13268,6 +13841,8 @@ interface GroupAlignLayerHandlers {
13268
13841
  handleAlignElements: (align: string) => void;
13269
13842
  handleDistributeElements: (axis: string) => void;
13270
13843
  canDistribute: boolean;
13844
+ /** Whether every currently selected element allows `a:spLocks/@noGrp` grouping. */
13845
+ selectionGroupable: boolean;
13271
13846
  handleMoveLayer: (direction: string) => void;
13272
13847
  handleMoveLayerToEdge: (direction: string) => void;
13273
13848
  handleMergeShapes: (operation: MergeShapeOperation) => void;
@@ -14773,6 +15348,8 @@ interface UseSlideNavigationInput {
14773
15348
  onSetMode: (mode: ViewerMode) => void;
14774
15349
  onSetActiveSlideIndex: (index: number) => void;
14775
15350
  onPlayActionSound?: (soundPath: string) => void;
15351
+ /** Stop the current transition sound (`p:sndAc/p:endSnd`). See `slide-transition.ts`. */
15352
+ onStopActionSound?: () => void;
14776
15353
  loopContinuously?: boolean;
14777
15354
  /** Whether to use rehearsed auto-advance timings. When false, slides advance only on click. */
14778
15355
  useTimings?: boolean;