pptx-react-viewer 2.22.0 → 3.0.1

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 (107) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/{AiChatPanel-KDHDYBMP.mjs → AiChatPanel-DMBQPAGB.mjs} +3 -3
  3. package/dist/AiChatPanel-DMBQPAGB.mjs.br +0 -0
  4. package/dist/AiChatPanel-DMBQPAGB.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-WVRT4OLF.js → AiChatPanel-NLIUZ5RI.js} +23 -23
  6. package/dist/AiChatPanel-NLIUZ5RI.js.br +0 -0
  7. package/dist/AiChatPanel-NLIUZ5RI.js.gz +0 -0
  8. package/dist/{Model3DScene-COI2CG35.js → Model3DScene-JNZN42TU.js} +2 -2
  9. package/dist/Model3DScene-JNZN42TU.js.br +0 -0
  10. package/dist/Model3DScene-JNZN42TU.js.gz +0 -0
  11. package/dist/{Model3DScene-I5SQKIZC.mjs → Model3DScene-ZO6U7YVU.mjs} +1 -1
  12. package/dist/Model3DScene-ZO6U7YVU.mjs.br +0 -0
  13. package/dist/Model3DScene-ZO6U7YVU.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-6LTF5QPW.mjs → SurfaceChart3DScene-P6CVRWDQ.mjs} +1 -1
  15. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.br +0 -0
  16. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-2N4TPYPU.js → SurfaceChart3DScene-PGD4ZCLI.js} +2 -2
  18. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.gz +0 -0
  20. package/dist/{chunk-YNHWNFE3.js → chunk-3MW6F3K7.js} +451 -399
  21. package/dist/chunk-3MW6F3K7.js.br +0 -0
  22. package/dist/chunk-3MW6F3K7.js.gz +0 -0
  23. package/dist/{chunk-KK6DOUES.js → chunk-54SDLPJY.js} +1275 -1248
  24. package/dist/chunk-54SDLPJY.js.br +0 -0
  25. package/dist/chunk-54SDLPJY.js.gz +0 -0
  26. package/dist/{chunk-TWU72BY4.mjs → chunk-BGAJLL4N.mjs} +70 -18
  27. package/dist/chunk-BGAJLL4N.mjs.br +0 -0
  28. package/dist/chunk-BGAJLL4N.mjs.gz +0 -0
  29. package/dist/{chunk-RJFKXPMU.mjs → chunk-OB4PKKIN.mjs} +1 -1
  30. package/dist/chunk-OB4PKKIN.mjs.br +0 -0
  31. package/dist/chunk-OB4PKKIN.mjs.gz +0 -0
  32. package/dist/{chunk-57TM4MV4.mjs → chunk-OXPD2UYI.mjs} +13085 -6709
  33. package/dist/chunk-OXPD2UYI.mjs.br +0 -0
  34. package/dist/chunk-OXPD2UYI.mjs.gz +0 -0
  35. package/dist/{chunk-7BZYDUNM.mjs → chunk-S6PFSR7I.mjs} +108 -255
  36. package/dist/chunk-S6PFSR7I.mjs.br +0 -0
  37. package/dist/chunk-S6PFSR7I.mjs.gz +0 -0
  38. package/dist/{chunk-34UAGEJM.js → chunk-SDOQKSKI.js} +13103 -6715
  39. package/dist/chunk-SDOQKSKI.js.br +0 -0
  40. package/dist/chunk-SDOQKSKI.js.gz +0 -0
  41. package/dist/{chunk-XIBTR7KJ.mjs → chunk-VGHEHM66.mjs} +254 -227
  42. package/dist/chunk-VGHEHM66.mjs.br +0 -0
  43. package/dist/chunk-VGHEHM66.mjs.gz +0 -0
  44. package/dist/{chunk-POP5IWYB.js → chunk-WFMSDYVQ.js} +3 -3
  45. package/dist/chunk-WFMSDYVQ.js.br +0 -0
  46. package/dist/chunk-WFMSDYVQ.js.gz +0 -0
  47. package/dist/{chunk-K7TFZ5MW.js → chunk-XMLPTDPM.js} +248 -396
  48. package/dist/chunk-XMLPTDPM.js.br +0 -0
  49. package/dist/chunk-XMLPTDPM.js.gz +0 -0
  50. package/dist/index.d.ts +475 -19
  51. package/dist/index.js +45 -45
  52. package/dist/index.js.br +0 -0
  53. package/dist/index.js.gz +0 -0
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.mjs.br +0 -0
  56. package/dist/index.mjs.gz +0 -0
  57. package/dist/internals.d.ts +492 -21
  58. package/dist/internals.d.ts.map +1 -1
  59. package/dist/internals.js +78 -78
  60. package/dist/internals.js.br +0 -0
  61. package/dist/internals.js.gz +0 -0
  62. package/dist/internals.mjs +3 -3
  63. package/dist/internals.mjs.br +0 -0
  64. package/dist/internals.mjs.gz +0 -0
  65. package/dist/pptx-viewer.css +1 -1
  66. package/dist/pptx-viewer.css.br +0 -0
  67. package/dist/pptx-viewer.css.gz +0 -0
  68. package/dist/viewer/index.d.ts +472 -17
  69. package/dist/viewer/index.js +26 -26
  70. package/dist/viewer/index.js.br +0 -0
  71. package/dist/viewer/index.js.gz +0 -0
  72. package/dist/viewer/index.mjs +5 -5
  73. package/dist/viewer/index.mjs.br +0 -0
  74. package/dist/viewer/index.mjs.gz +0 -0
  75. package/package.json +2 -2
  76. package/dist/AiChatPanel-KDHDYBMP.mjs.br +0 -0
  77. package/dist/AiChatPanel-KDHDYBMP.mjs.gz +0 -0
  78. package/dist/AiChatPanel-WVRT4OLF.js.br +0 -0
  79. package/dist/AiChatPanel-WVRT4OLF.js.gz +0 -0
  80. package/dist/Model3DScene-COI2CG35.js.br +0 -0
  81. package/dist/Model3DScene-COI2CG35.js.gz +0 -0
  82. package/dist/Model3DScene-I5SQKIZC.mjs.br +0 -0
  83. package/dist/Model3DScene-I5SQKIZC.mjs.gz +0 -0
  84. package/dist/SurfaceChart3DScene-2N4TPYPU.js.br +0 -0
  85. package/dist/SurfaceChart3DScene-2N4TPYPU.js.gz +0 -0
  86. package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.br +0 -0
  87. package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.gz +0 -0
  88. package/dist/chunk-34UAGEJM.js.br +0 -0
  89. package/dist/chunk-34UAGEJM.js.gz +0 -0
  90. package/dist/chunk-57TM4MV4.mjs.br +0 -0
  91. package/dist/chunk-57TM4MV4.mjs.gz +0 -0
  92. package/dist/chunk-7BZYDUNM.mjs.br +0 -0
  93. package/dist/chunk-7BZYDUNM.mjs.gz +0 -0
  94. package/dist/chunk-K7TFZ5MW.js.br +0 -0
  95. package/dist/chunk-K7TFZ5MW.js.gz +0 -0
  96. package/dist/chunk-KK6DOUES.js.br +0 -0
  97. package/dist/chunk-KK6DOUES.js.gz +0 -0
  98. package/dist/chunk-POP5IWYB.js.br +0 -0
  99. package/dist/chunk-POP5IWYB.js.gz +0 -0
  100. package/dist/chunk-RJFKXPMU.mjs.br +0 -0
  101. package/dist/chunk-RJFKXPMU.mjs.gz +0 -0
  102. package/dist/chunk-TWU72BY4.mjs.br +0 -0
  103. package/dist/chunk-TWU72BY4.mjs.gz +0 -0
  104. package/dist/chunk-XIBTR7KJ.mjs.br +0 -0
  105. package/dist/chunk-XIBTR7KJ.mjs.gz +0 -0
  106. package/dist/chunk-YNHWNFE3.js.br +0 -0
  107. package/dist/chunk-YNHWNFE3.js.gz +0 -0
package/dist/index.d.ts CHANGED
@@ -761,6 +761,13 @@ interface Pptx3DScene {
761
761
  * ```
762
762
  */
763
763
  interface Pptx3DShape {
764
+ /**
765
+ * Position of the shape along the Z axis, in EMU (`a:sp3d/@z`, default 0).
766
+ * Independent of {@link extrusionHeight}: it moves the whole shape forward
767
+ * or back in 3D space rather than adding depth to it, most commonly used to
768
+ * stack several shapes at different depths under one `a:scene3d` camera.
769
+ */
770
+ positionZ?: number;
764
771
  /** Extrusion height in EMU. */
765
772
  extrusionHeight?: number;
766
773
  /** Extrusion colour. */
@@ -1301,12 +1308,12 @@ interface TextStyle {
1301
1308
  resolvedParagraphGeometry?: TextStyle;
1302
1309
  fontFamily?: string;
1303
1310
  fontSize?: number;
1304
- /** When true, renderer should shrink text to fit the shape bounds. */
1311
+ /** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
1305
1312
  autoFit?: boolean;
1306
1313
  /** Explicit autofit mode from OOXML body properties.
1307
- * - 'shrink': `a:spAutoFit` shrink text on overflow
1308
- * - 'normal': `a:normAutofit` normal auto-fit (with optional fontScale)
1309
- * - 'none': `a:noAutofit` explicitly no auto-fit (text overflows)
1314
+ * - 'shrink': `a:spAutoFit` - resize the SHAPE to fit the text (never the font)
1315
+ * - 'normal': `a:normAutofit` - shrink the TEXT to fit the shape (via `fontScale`/`lnSpcReduction`)
1316
+ * - 'none': `a:noAutofit` - explicitly no auto-fit (text overflows)
1310
1317
  * - undefined: no autofit element present (inherit from layout/master)
1311
1318
  */
1312
1319
  autoFitMode?: 'shrink' | 'normal' | 'none';
@@ -1697,6 +1704,18 @@ interface TextStyle {
1697
1704
  textBodyScene3d?: Pptx3DScene;
1698
1705
  /** Raw `a:scene3d` subtree used to preserve extensions and unmodelled children. */
1699
1706
  textBodyScene3dXml?: XmlObject;
1707
+ /**
1708
+ * `a:bodyPr/a:flatTx` - an explicit "render this text flat" marker. `sp3d`
1709
+ * and `flatTx` are a mutually exclusive OOXML choice (`EG_Text3D`), so a
1710
+ * shape/run that overrides an inherited 3D text body with `<a:flatTx/>`
1711
+ * carries no `text3d` of its own; without this explicit flag a later
1712
+ * inheritance merge has no signal to stop `text3d`/`textBodyScene3d` from
1713
+ * an ancestor (layout/master) leaking back in, the way `noFill` stops an
1714
+ * inherited fill. A renderer must short-circuit 3D-text application
1715
+ * whenever this is `true`, regardless of what `text3d`/`textBodyScene3d`
1716
+ * otherwise hold.
1717
+ */
1718
+ flatText?: boolean;
1700
1719
  /**
1701
1720
  * Raw `<a:extLst>` subtree captured from `<a:bodyPr>`. Preserved verbatim so
1702
1721
  * authored extensions (e.g. content placeholders, custom application data)
@@ -1972,6 +1991,24 @@ interface PptxElementBase {
1972
1991
  * SDK-created elements.
1973
1992
  */
1974
1993
  placeholderType?: string;
1994
+ /**
1995
+ * `p:nvSpPr/p:nvPr/p:ph/@sz` (lower-cased): `"full"`, `"half"`, or
1996
+ * `"quarter"`. Captured on load for round-trip completeness. Per
1997
+ * ECMA-376 §19.3.1.36 (CT_Placeholder) this size hint is only meaningful
1998
+ * when NO `a:xfrm` exists anywhere in the placeholder's inheritance
1999
+ * chain (slide -> layout -> master); every real-world corpus placeholder
2000
+ * that carries `@sz` already has an explicit `a:xfrm` at the master
2001
+ * level, so no renderer currently derives a size from this field.
2002
+ */
2003
+ placeholderSz?: string;
2004
+ /**
2005
+ * `p:nvSpPr/p:nvPr/p:ph/@orient` (only `"vert"` is meaningful per
2006
+ * `ST_Direction`). Captured on load for round-trip completeness. In
2007
+ * practice every placeholder observed with `orient="vert"` also carries
2008
+ * an explicit `a:bodyPr/@vert`, which already drives vertical-text
2009
+ * rendering, so this field is not currently read by any renderer.
2010
+ */
2011
+ placeholderOrient?: 'vert';
1975
2012
  x: number;
1976
2013
  y: number;
1977
2014
  width: number;
@@ -2434,6 +2471,14 @@ interface PptxChartDataTable {
2434
2471
  showVertBorder?: boolean;
2435
2472
  showOutline?: boolean;
2436
2473
  showKeys?: boolean;
2474
+ /** Table border/fill formatting (`c:dTable/c:spPr`). */
2475
+ spPr?: PptxChartShapeProps;
2476
+ /**
2477
+ * Cell text defaults (`c:dTable/c:txPr/a:p/a:pPr/a:defRPr`). Reuses the same
2478
+ * shape as a legend entry's text override since both are a flat paragraph
2479
+ * default-run-property style (size/bold/italic/font/colour).
2480
+ */
2481
+ txPr?: PptxChartLegendTextStyle;
2437
2482
  }
2438
2483
  /**
2439
2484
  * Line appearance for chart helper lines (drop lines, hi-low lines).
@@ -2592,6 +2637,15 @@ interface PptxChart3DSurface {
2592
2637
  thickness?: number;
2593
2638
  spPr?: PptxChartShapeProps;
2594
2639
  }
2640
+ /**
2641
+ * One colour band for a surface chart (`c:bandFmts/c:bandFmt`,
2642
+ * ECMA-376 §21.2.2.19 / CT_BandFmt). `index` is the band's position
2643
+ * (`c:idx/@val`) among the value axis's major-unit bands, in authored order.
2644
+ */
2645
+ interface PptxChartBandFmt {
2646
+ index: number;
2647
+ spPr?: PptxChartShapeProps;
2648
+ }
2595
2649
  /** Office 2016 ChartEx box-and-whisker series layout options. */
2596
2650
  interface PptxChartBoxWhiskerOptions {
2597
2651
  quartileMethod?: 'inclusive' | 'exclusive';
@@ -3007,9 +3061,14 @@ interface PptxChartData {
3007
3061
  chartType: PptxChartType;
3008
3062
  categories: string[];
3009
3063
  /**
3010
- * Hierarchical category levels in source XML order for ChartEx hierarchy charts.
3011
- * Level 0 contains the leaf labels and remains mirrored by {@link categories}
3012
- * for consumers that only understand a flat category axis.
3064
+ * Hierarchical category levels in source XML order, for both ChartEx
3065
+ * hierarchy charts (`cx:multiLvlStrRef`) and classic multi-level category
3066
+ * axes (`c:cat/c:multiLvlStrRef`, e.g. a PowerPoint Quarter > Month
3067
+ * grouping). Level 0 contains the leaf labels and remains mirrored by
3068
+ * {@link categories} for consumers that only understand a flat category
3069
+ * axis. Parent (grouping) levels are forward-filled: a blank cache slot
3070
+ * continues the previous group's label, matching how the source stores a
3071
+ * merged category header sparsely.
3013
3072
  */
3014
3073
  categoryLevels?: string[][];
3015
3074
  dateCategories?: PptxChartDateCategories;
@@ -3076,6 +3135,8 @@ interface PptxChartData {
3076
3135
  floor?: PptxChart3DSurface;
3077
3136
  sideWall?: PptxChart3DSurface;
3078
3137
  backWall?: PptxChart3DSurface;
3138
+ /** Per-band surface-chart colour overrides (`c:surfaceChart/c:bandFmts`). */
3139
+ bandFmts?: PptxChartBandFmt[];
3079
3140
  /** External data source reference (c:externalData) linking to an external workbook. */
3080
3141
  externalData?: PptxExternalData;
3081
3142
  /**
@@ -3353,6 +3414,16 @@ interface PptxImageEffects {
3353
3414
  contRawXml?: Record<string, unknown>;
3354
3415
  /** Original effect XML, including foreign attributes. */
3355
3416
  rawXml?: XmlObject;
3417
+ /**
3418
+ * Multiplicative alpha percentage (0..100+), read from a nested
3419
+ * `<a:alphaModFix>` inside `contRawXml` when present - the common
3420
+ * real-world shape of `a:alphaMod` (`<a:cont><a:alphaModFix amt="…"/>
3421
+ * </a:cont>`). Derived/read-only: a renderer multiplies the source alpha
3422
+ * by this, distinct from the top-level {@link alphaModFix} sibling
3423
+ * effect. Not written back independently on save; `contRawXml` is what
3424
+ * round-trips.
3425
+ */
3426
+ amt?: number;
3356
3427
  };
3357
3428
  /** Alpha replace (`a:alphaRepl`) — replaces alpha with the given fixed-percent value (0..100). */
3358
3429
  alphaRepl?: number;
@@ -3397,6 +3468,40 @@ interface PptxImageEffects {
3397
3468
  blend: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
3398
3469
  /** Raw opaque fill XML preserved for round-trip. */
3399
3470
  fillRawXml?: Record<string, unknown>;
3471
+ /**
3472
+ * Resolved hex colour, when the overlay fill is a plain `a:solidFill`
3473
+ * (the common case for a picture-style colour overlay). `undefined` for
3474
+ * a gradient/pattern/picture overlay fill - see {@link resolvedGradient} /
3475
+ * {@link resolvedPattern} instead. `fillRawXml` still round-trips
3476
+ * losslessly regardless of which of the three resolved.
3477
+ */
3478
+ resolvedColor?: string;
3479
+ /** Resolved opacity (0-1) of the `a:solidFill` overlay colour, when resolved. */
3480
+ resolvedOpacity?: number;
3481
+ /**
3482
+ * Resolved gradient, when the overlay fill is `a:gradFill`. A renderer
3483
+ * composites this as an SVG paint server (`<linearGradient>` /
3484
+ * `<radialGradient>`) rather than a flat flood colour.
3485
+ */
3486
+ resolvedGradient?: {
3487
+ type: 'linear' | 'radial';
3488
+ /** Gradient angle in degrees (`a:lin/@ang`), for a linear gradient. */
3489
+ angle?: number;
3490
+ stops: Array<{
3491
+ color: string;
3492
+ position: number;
3493
+ opacity?: number;
3494
+ }>;
3495
+ };
3496
+ /**
3497
+ * Resolved preset pattern, when the overlay fill is `a:pattFill`. A
3498
+ * renderer composites this as a tiled SVG paint server.
3499
+ */
3500
+ resolvedPattern?: {
3501
+ preset: string;
3502
+ foreground?: string;
3503
+ background?: string;
3504
+ };
3400
3505
  };
3401
3506
  /** Blur (`a:blur`) — radius in EMU and grow flag. */
3402
3507
  blur?: {
@@ -3476,6 +3581,13 @@ interface PptxImageProperties {
3476
3581
  tileFlip?: 'none' | 'x' | 'y' | 'xy';
3477
3582
  /** Image tiling alignment. */
3478
3583
  tileAlignment?: string;
3584
+ /**
3585
+ * Print-resolution hint in DPI (`a:blipFill/@dpi`). PowerPoint records this
3586
+ * when it downsamples an embedded image for a target print quality; it has
3587
+ * no on-screen rendering effect (a `0`/absent value means "use the source
3588
+ * image's native resolution"). Parsed for round-trip / API fidelity only.
3589
+ */
3590
+ dpi?: number;
3479
3591
  /** Image recolour/artistic effect properties. */
3480
3592
  imageEffects?: PptxImageEffects;
3481
3593
  /** Crop-to-shape — CSS clip-path shape name. */
@@ -3656,6 +3768,25 @@ interface PptxSmartArtChoose {
3656
3768
  } | null;
3657
3769
  rawXml?: XmlObject;
3658
3770
  }
3771
+ /** A single `dgm:adj/@val` adjustment, keyed by its `@idx` (1-based, like `a:gd`). */
3772
+ interface PptxSmartArtShapeAdjustment {
3773
+ index: number;
3774
+ value: number;
3775
+ }
3776
+ /**
3777
+ * Typed DiagramML CT_Shape data (`dgm:shape`) attached to a layout node: the
3778
+ * per-node preset geometry override real (and third-party/custom) layout
3779
+ * definitions use so a layoutNode can be e.g. an ellipse or a chevron instead
3780
+ * of the arranger family's hardcoded default shape.
3781
+ */
3782
+ interface PptxSmartArtLayoutNodeShape {
3783
+ /** `dgm:shape/@type`: a preset geometry name (`roundRect`, `ellipse`, `chevron`, `conn`, ...). */
3784
+ presetGeometry?: string;
3785
+ /** `dgm:adjLst/dgm:adj` entries (adjustment index -> value, as authored). */
3786
+ adjustments?: PptxSmartArtShapeAdjustment[];
3787
+ /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3788
+ hideGeometry?: boolean;
3789
+ }
3659
3790
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3660
3791
  interface PptxSmartArtLayoutNode {
3661
3792
  name?: string;
@@ -3667,6 +3798,8 @@ interface PptxSmartArtLayoutNode {
3667
3798
  choose?: PptxSmartArtChoose[];
3668
3799
  constraints?: PptxSmartArtConstraint[];
3669
3800
  rules?: PptxSmartArtNumericRule[];
3801
+ /** `dgm:shape`: this node's own preset geometry override, when present. */
3802
+ shape?: PptxSmartArtLayoutNodeShape;
3670
3803
  children?: PptxSmartArtLayoutNode[];
3671
3804
  }
3672
3805
  /** Metadata and root node from DiagramML CT_DiagramDefinition. */
@@ -3790,6 +3923,61 @@ interface PptxSmartArtNodeStyle {
3790
3923
  /** Italic emphasis override for the node's runs. */
3791
3924
  italic?: boolean;
3792
3925
  }
3926
+ /**
3927
+ * Manual layout override for a `type="pres"` presentation point, read from its
3928
+ * `dgm:prSet` attributes. PowerPoint writes these when the user drags, resizes,
3929
+ * rotates, or flips a SmartArt node by hand in its own diagram editor; without
3930
+ * them the node silently reverts to its algorithmic position whenever there is
3931
+ * no cached `dsp:` drawing part to fall back on.
3932
+ *
3933
+ * Every field is optional: only the attributes actually present on `prSet` are
3934
+ * populated. Angle and scale/factor units are already normalised to degrees and
3935
+ * plain ratios (a `custScaleX="150000"` becomes `scaleX: 1.5`), so a consumer
3936
+ * never has to know the raw `60000ths-of-a-degree` / `100000ths-of-a-percent`
3937
+ * XML encodings.
3938
+ *
3939
+ * @example
3940
+ * ```ts
3941
+ * const custom: SmartArtNodeCustomLayout = { angle: 15, scaleX: 1.2 };
3942
+ * // => a node manually rotated 15 degrees and widened 20% in PowerPoint
3943
+ * ```
3944
+ */
3945
+ interface SmartArtNodeCustomLayout {
3946
+ /** `custAng`: additional rotation in degrees. */
3947
+ angle?: number;
3948
+ /** `custScaleX`: horizontal scale ratio (1 = no change). */
3949
+ scaleX?: number;
3950
+ /** `custScaleY`: vertical scale ratio (1 = no change). */
3951
+ scaleY?: number;
3952
+ /** `custSzX`: horizontal size ratio, layered on top of {@link scaleX}. */
3953
+ sizeX?: number;
3954
+ /** `custSzY`: vertical size ratio, layered on top of {@link scaleY}. */
3955
+ sizeY?: number;
3956
+ /** `custFlipHor`: the node was manually mirrored horizontally. */
3957
+ flipHorizontal?: boolean;
3958
+ /** `custFlipVert`: the node was manually mirrored vertically. */
3959
+ flipVertical?: boolean;
3960
+ /** `custLinFactX`: manual position nudge along X, as a fraction of the container width. */
3961
+ linearFactorX?: number;
3962
+ /** `custLinFactY`: manual position nudge along Y, as a fraction of the container height. */
3963
+ linearFactorY?: number;
3964
+ /**
3965
+ * `custLinFactNeighborX`: spacing compensation applied to a NEIGHBOURING
3966
+ * node when this one is resized. Parsed for round-trip completeness; not
3967
+ * applied by the per-node final transform (it has no effect on this node's
3968
+ * own geometry; folding it into a neighbour's geometry would require
3969
+ * whole-layout awareness the final transform pass does not have).
3970
+ */
3971
+ linearFactorNeighborX?: number;
3972
+ /** `custLinFactNeighborY`: see {@link linearFactorNeighborX} (Y axis). */
3973
+ linearFactorNeighborY?: number;
3974
+ /** `custRadScaleRad`: manual radius scale ratio for a radial/cycle node. */
3975
+ radialScaleRadius?: number;
3976
+ /** `custRadScaleInc`: manual angular-position nudge for a radial/cycle node. */
3977
+ radialScaleIncrement?: number;
3978
+ /** `custT`: whether `prSet` declares a custom transform is present at all. */
3979
+ hasCustomTransform?: boolean;
3980
+ }
3793
3981
  /**
3794
3982
  * A single node in the SmartArt data model.
3795
3983
  *
@@ -3815,6 +4003,16 @@ interface PptxSmartArtNode {
3815
4003
  children?: PptxSmartArtNode[];
3816
4004
  /** Node type from `@_type` attribute (e.g. "doc", "node", "asst", "pres"). */
3817
4005
  nodeType?: string;
4006
+ /**
4007
+ * The node's own quick-style role (`dgm:prSet/@presStyleLbl` from its
4008
+ * paired `type="pres"` presentation point, resolved via a `presOf`
4009
+ * connection back to this content point). Structural names like `node1`,
4010
+ * `asst2`, `bgShp`, `revTx`; distinct from {@link nodeType}, which is the
4011
+ * data-model `@_type` ("node"/"asst"/...). Used to pick this node's own
4012
+ * colour list from a colour transform's per-role palettes instead of the
4013
+ * generic cycled palette (see `applySmartArtRoleColors`).
4014
+ */
4015
+ styleRole?: string;
3818
4016
  /**
3819
4017
  * Per-run text + run-properties for the node's first paragraph, captured at
3820
4018
  * parse time. When the joined run text still equals {@link text} (the node
@@ -3835,6 +4033,14 @@ interface PptxSmartArtNode {
3835
4033
  * it round-trips.
3836
4034
  */
3837
4035
  style?: PptxSmartArtNodeStyle;
4036
+ /**
4037
+ * Manual layout override read from the node's `dgm:prSet` `cust*`
4038
+ * attributes (drag/resize/rotate/flip performed in PowerPoint's own diagram
4039
+ * editor). Applied as a final transform after algorithmic layout by
4040
+ * {@link module:smartart-layout-interpreter-custom} so it survives even
4041
+ * when there is no cached `dsp:` drawing to fall back on.
4042
+ */
4043
+ customLayout?: SmartArtNodeCustomLayout;
3838
4044
  }
3839
4045
  //#endregion
3840
4046
  //#region src/core/types/smart-art-style-definition.d.ts
@@ -3897,6 +4103,18 @@ interface PptxSmartArtColorTransform extends PptxSmartArtDefinitionMetadata {
3897
4103
  lineInterpolation?: PptxSmartArtColorListMetadata;
3898
4104
  /** Ordered CT_CTStyleLabel metadata. */
3899
4105
  labels?: PptxSmartArtColorStyleLabel[];
4106
+ /**
4107
+ * Every `styleLbl`'s own resolved fill/line colour list, keyed by name
4108
+ * (e.g. `node1`, `asst0`, `bgShp`, `revTx`). Unlike {@link fillColors} /
4109
+ * {@link lineColors} (which collapse to ONE "primary" node-role list),
4110
+ * this keeps every role so a node can be coloured from its OWN role's
4111
+ * palette (see `PptxSmartArtNode.styleRole` and `applySmartArtRoleColors`)
4112
+ * instead of a generic cycled colour.
4113
+ */
4114
+ roleColors?: Record<string, {
4115
+ fill: string[];
4116
+ line: string[];
4117
+ }>;
3900
4118
  }
3901
4119
  /** Typed CT_StyleDefinition metadata and legacy rendering hint. */
3902
4120
  interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
@@ -3981,6 +4199,14 @@ interface PptxSmartArtConnection {
3981
4199
  siblingTransitionId?: string | null;
3982
4200
  /** Layout presentation identifier used by presentation connections. */
3983
4201
  presentationId?: string | null;
4202
+ /**
4203
+ * Connector text, read from the linked `parTrans`/`sibTrans` transition
4204
+ * point's `dgm:t` (via {@link parentTransitionId} / {@link siblingTransitionId}).
4205
+ * PowerPoint's own diagram editor lets a user type text directly onto an
4206
+ * org-chart relationship connector; `undefined` when the transition point
4207
+ * carries no text. Written back to that point on save.
4208
+ */
4209
+ label?: string;
3984
4210
  }
3985
4211
  /**
3986
4212
  * A pre-computed shape from `ppt/diagrams/drawing*.xml`.
@@ -4301,8 +4527,8 @@ interface PptxTableCellStyle {
4301
4527
  textGlowRadius?: number;
4302
4528
  /** Cell text glow opacity (0-1). */
4303
4529
  textGlowOpacity?: number;
4304
- /** Cell fill mode: solid, gradient, pattern, or none. */
4305
- fillMode?: 'solid' | 'gradient' | 'pattern' | 'none';
4530
+ /** Cell fill mode: solid, gradient, pattern, image, or none. */
4531
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'image' | 'none';
4306
4532
  /** Gradient fill stops (colours with positions). */
4307
4533
  gradientFillStops?: Array<{
4308
4534
  color: string;
@@ -4335,6 +4561,23 @@ interface PptxTableCellStyle {
4335
4561
  patternFillForeground?: string;
4336
4562
  /** Pattern fill background colour. */
4337
4563
  patternFillBackground?: string;
4564
+ /**
4565
+ * Image fill (`a:tcPr/a:blipFill`, CT_TableCellProperties). Resolved
4566
+ * archive-relative path (or external `http(s):`/`data:` URL) for the
4567
+ * cell's background image, from `a:blipFill/a:blip/@r:embed` (or
4568
+ * `@r:link`). Present when `fillMode` is `'image'`.
4569
+ *
4570
+ * The parser resolves this synchronously (path only, no binary read);
4571
+ * a viewer's load pipeline resolves it further to a displayable
4572
+ * `data:`/`blob:` URL, written back to {@link backgroundImageFillData}.
4573
+ */
4574
+ backgroundImageFillPath?: string;
4575
+ /**
4576
+ * Displayable image data (`data:` or `blob:` URL) for an image cell
4577
+ * fill, once resolved by the load pipeline. Renderers should prefer
4578
+ * this over {@link backgroundImageFillPath} when both are present.
4579
+ */
4580
+ backgroundImageFillData?: string;
4338
4581
  /**
4339
4582
  * Cell 3D bevel + lighting from `a:tcPr/a:cell3D` (CT_Cell3D,
4340
4583
  * ECMA-376 §21.1.3.1). Rendered as a CSS bevel treatment.
@@ -4560,6 +4803,24 @@ interface ParsedTableStyleFill {
4560
4803
  gradient?: ParsedTableStyleGradient;
4561
4804
  /** Preset pattern fill parsed from `a:pattFill`. */
4562
4805
  pattern?: ParsedTableStylePattern;
4806
+ /** Image texture fill parsed from `a:blipFill`. */
4807
+ image?: ParsedTableStyleImage;
4808
+ }
4809
+ /**
4810
+ * An image texture fill parsed from a table style section's `a:blipFill`.
4811
+ *
4812
+ * `ppt/tableStyles.xml` is a presentation-level part parsed once (not
4813
+ * per-slide), so this mirrors the per-CELL `a:tcPr/a:blipFill` two-field lazy
4814
+ * pattern (`PptxTableCellStyle.backgroundImageFillPath` /
4815
+ * `backgroundImageFillData`): `path` starts out as a raw archive-relative
4816
+ * path (or an already-external `http(s):`/`data:` URL), and a load pipeline
4817
+ * patches it to a displayable URL in `data` once resolved.
4818
+ */
4819
+ interface ParsedTableStyleImage {
4820
+ /** Archive-relative path, or an already-displayable external/data URL. */
4821
+ path?: string;
4822
+ /** Displayable URL once a load pipeline has resolved `path`. */
4823
+ data?: string;
4563
4824
  }
4564
4825
  /** A single colour stop within a {@link ParsedTableStyleGradient}. */
4565
4826
  interface ParsedTableStyleGradientStop {
@@ -4986,6 +5247,12 @@ interface OlePptxElement extends PptxElementBase {
4986
5247
  oleEmbeddedMimeType?: string;
4987
5248
  /** Size of the embedded payload in bytes. */
4988
5249
  oleEmbeddedByteSize?: number;
5250
+ /**
5251
+ * `p:link/@followColorScheme` (`ST_OleObjectFollowColorScheme`): whether a
5252
+ * LINKED OLE object's icon recolours to match the presentation theme.
5253
+ * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5254
+ */
5255
+ oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
4989
5256
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
4990
5257
  extensionXml?: PptxGraphicFrameExtension[];
4991
5258
  }
@@ -5287,6 +5554,16 @@ interface PptxNotesMaster {
5287
5554
  headerFooter?: PptxHeaderFooterFlags;
5288
5555
  /** Colour map from `<p:clrMap>` (12 alias attributes). Applied at save time. */
5289
5556
  clrMap?: Record<string, string>;
5557
+ /**
5558
+ * Notes text defaults from `<p:notesStyle>` (`CT_TextListStyle`, ECMA-376
5559
+ * §19.3.1.34): the same `a:defPPr` + `a:lvl1pPr`..`a:lvl9pPr` shape as
5560
+ * {@link PptxMasterTextStyles}'s per-category styles, keyed 0-8 with the
5561
+ * default at `-1`. Governs the notes body placeholder's font size, indent
5562
+ * levels, and bullet style wherever a notes slide does not override them.
5563
+ * Parsed read-only for the render cascade; the save side preserves the
5564
+ * original `<p:notesStyle>` XML verbatim rather than re-serialising this.
5565
+ */
5566
+ notesStyle?: PptxTextStyleLevels;
5290
5567
  }
5291
5568
  /**
5292
5569
  * Parsed handout master from `ppt/handoutMasters/handoutMaster1.xml`.
@@ -5360,6 +5637,14 @@ interface PptxSlideMaster {
5360
5637
  * accent1-6, hlink, folHlink). Applied at save time when present.
5361
5638
  */
5362
5639
  clrMap?: Record<string, string>;
5640
+ /**
5641
+ * Whether the master is marked as preserved (prevent auto-deletion,
5642
+ * `@preserve`). Mirrors {@link PptxSlideLayout.preserve}: PowerPoint
5643
+ * silently drops an unused master unless this is set.
5644
+ *
5645
+ * ECMA-376 §19.3.1.38 (CT_SlideMaster).
5646
+ */
5647
+ preserve?: boolean;
5363
5648
  }
5364
5649
  /**
5365
5650
  * Per-level paragraph properties for a text style category.
@@ -5549,6 +5834,35 @@ type PptxGraphicBuild = {
5549
5834
  animateBackground: boolean;
5550
5835
  rawXml?: XmlObject;
5551
5836
  };
5837
+ /**
5838
+ * A single `p:tmpl` timing template parsed from a TEXT `p:bldP/p:tmplLst`
5839
+ * (CT_TLTemplate, ECMA-376 §19.5.85; the list itself is CT_TLTemplateList,
5840
+ * §19.5.84).
5841
+ *
5842
+ * PowerPoint writes these as the timing PowerPoint would apply to a build
5843
+ * level that does not yet have an instantiated effect, so that promoting or
5844
+ * demoting an outline paragraph, or adding a new bullet at a level with no
5845
+ * prior animation, has a default to clone. They are not consulted at
5846
+ * playback: the animation actually shown for every paragraph level already
5847
+ * visible on the slide is the real, instantiated `p:tnLst` under
5848
+ * `p:timing/p:tnLst`, which the rest of this parser already models in full.
5849
+ *
5850
+ * The nested time-node tree under each template's own `p:tnLst` is kept as
5851
+ * a preserved `XmlObject` rather than deep-parsed into
5852
+ * {@link PptxNativeAnimation} records: it is schema-identical to the
5853
+ * top-level timing tree but scoped to a template that is never itself
5854
+ * executed, so structurally modelling it would stand up a second, unused
5855
+ * parallel animation model. Parsing stops at typed round-trip; see
5856
+ * `docs/guide/limitations.md`.
5857
+ */
5858
+ interface PptxTimingTemplate {
5859
+ /** Build level this template targets, from `p:tmpl/@lvl` (ST_TLLevel, default 0). */
5860
+ level: number;
5861
+ /** Preserved `p:tnLst` (CT_TimeNodeList) subtree, verbatim. */
5862
+ timeNodeList: XmlObject;
5863
+ /** Preserved `p:tmpl` XML node (its attributes plus any unmodelled children). */
5864
+ rawXml?: XmlObject;
5865
+ }
5552
5866
  /**
5553
5867
  * Parsed native animation record from `p:timing / p:tnLst`.
5554
5868
  *
@@ -5659,6 +5973,58 @@ interface PptxNativeAnimation {
5659
5973
  soundPath?: string;
5660
5974
  /** Whether to stop any currently playing sound (`p:endSnd`). */
5661
5975
  stopSound?: boolean;
5976
+ /**
5977
+ * End-state behaviour from `p:cTn/@fill` (ST_TLTimeNodeFillType, ECMA-376
5978
+ * §19.5.27). `hold`/`freeze` mean the effect's final frame persists after
5979
+ * it finishes; `remove` (the default when absent) means the target reverts
5980
+ * to its pre-effect appearance. `transition` behaves like `hold` until the
5981
+ * next time node starts. Absent means the OOXML default (`remove`).
5982
+ */
5983
+ fill?: 'remove' | 'freeze' | 'hold' | 'transition';
5984
+ /**
5985
+ * Restart behaviour from `p:cTn/@restart` (ST_TLTimeNodeRestartType).
5986
+ * Absent means the OOXML default (`always`).
5987
+ */
5988
+ restart?: 'always' | 'whenNotActive' | 'never';
5989
+ /**
5990
+ * Repeat duration in milliseconds from `p:cTn/@repeatDur`. `Infinity`
5991
+ * represents the literal `"indefinite"` token.
5992
+ */
5993
+ repeatDurMs?: number;
5994
+ /**
5995
+ * Playback speed multiplier from `p:cTn/@spd` (ST_Percentage, normalized
5996
+ * from OOXML's 1000ths-of-a-percent storage to a plain percentage, e.g.
5997
+ * `150` for 150% / double speed). Absent means normal (100%) speed.
5998
+ */
5999
+ speedPct?: number;
6000
+ /**
6001
+ * Reverse the paragraph build order from `p:bldP/@rev` (TEXT build only).
6002
+ * Not to be confused with {@link PptxGraphicBuild}'s `reverse` field, which
6003
+ * carries the unrelated `p:bldDgm`/`@rev` DIAGRAM-build reverse flag.
6004
+ */
6005
+ buildReverse?: boolean;
6006
+ /**
6007
+ * Auto-advance time in milliseconds from `p:bldP/@advAuto`. `Infinity`
6008
+ * represents the literal `"indefinite"` token. Absent means the build
6009
+ * step waits for a click.
6010
+ */
6011
+ buildAdvAutoMs?: number;
6012
+ /**
6013
+ * Per-build-level timing templates from a TEXT `p:bldP/p:tmplLst`
6014
+ * (ECMA-376 §19.5.84 CT_TLTemplateList). Parsed for round-trip only; see
6015
+ * {@link PptxTimingTemplate} for why they are not consulted at playback.
6016
+ */
6017
+ buildTemplates?: PptxTimingTemplate[];
6018
+ /**
6019
+ * Whether the enclosing `p:seq` allows concurrent play with its siblings,
6020
+ * from `p:seq/@concurrent`. Parsed for round-trip; not yet honoured by
6021
+ * playback (see `docs/guide/limitations.md`).
6022
+ */
6023
+ seqConcurrent?: boolean;
6024
+ /** Next-action behaviour from `p:seq/@nextAc` (ST_TLNextActionType). */
6025
+ seqNextAction?: 'none' | 'seek';
6026
+ /** Previous-action behaviour from `p:seq/@prevAc` (ST_TLPreviousActionType). */
6027
+ seqPrevAction?: 'none' | 'skipTimeNode';
5662
6028
  /**
5663
6029
  * Whether the enclosing click-level group (a direct `p:par` child of the
5664
6030
  * `mainSeq`) begins automatically when the slide appears, rather than waiting
@@ -5749,6 +6115,55 @@ interface PptxNativeAnimation {
5749
6115
  * subsequent peer nodes are sequenced when serialised back to OOXML.
5750
6116
  */
5751
6117
  afterEffect?: boolean;
6118
+ /**
6119
+ * "After animation" end-state behaviour carried over from the matching
6120
+ * {@link PptxElementAnimation.afterAnimation} entry for this effect's
6121
+ * element. Not populated by the native-timing parser itself (there is no
6122
+ * single `p:cTn` attribute for it): `applyAfterAnimationFromEditorList` in
6123
+ * `pptx-viewer-shared` merges it in from the editor's per-element
6124
+ * animation list before playback, since that is the model the animation
6125
+ * panel writes `afterAnimation` into.
6126
+ */
6127
+ afterAnimationAction?: PptxAfterAnimationAction;
6128
+ /** Dim-to color hex, present when {@link afterAnimationAction} is `dimToColor`. */
6129
+ afterAnimationColor?: string;
6130
+ /**
6131
+ * Parsed `p:animEffect` filter descriptor. `presetId`/`presetClass` remain
6132
+ * the primary effect selector (see `resolveEffect` in `pptx-viewer-shared`);
6133
+ * this is the fallback used when a preset table lookup misses (unmapped or
6134
+ * absent `presetId`), which happens for decks authored by tools other than
6135
+ * PowerPoint that only emit the SMIL-style filter string.
6136
+ */
6137
+ effectFilter?: PptxAnimationEffectFilter;
6138
+ }
6139
+ /**
6140
+ * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
6141
+ * describes `@filter` as a free-form string of the form `family(subtype)`,
6142
+ * optionally followed by `;`-separated fallback candidates (only the first
6143
+ * is honoured, per ECMA-376 S19.5.3's "first supported filter wins" rule).
6144
+ *
6145
+ * @example
6146
+ * ```ts
6147
+ * const f: PptxAnimationEffectFilter = { family: 'wipe', subtype: 'up', transition: 'in', raw: 'wipe(up)' };
6148
+ * ```
6149
+ */
6150
+ interface PptxAnimationEffectFilter {
6151
+ /** Filter family name (e.g. `"wipe"`, `"barn"`, `"checkerboard"`), lowercased. */
6152
+ family: string;
6153
+ /**
6154
+ * Parenthesised subtype/direction token verbatim (e.g. `"up"`,
6155
+ * `"inVertical"`, `"across"`, `"4"`). Absent when the filter has no
6156
+ * subtype (e.g. bare `"dissolve"`).
6157
+ */
6158
+ subtype?: string;
6159
+ /**
6160
+ * `p:animEffect/@transition`: `"in"` reveals the target (the OOXML
6161
+ * default when the attribute is omitted), `"out"` conceals it, `"none"`
6162
+ * applies the filter without a visibility change (a static filter pass).
6163
+ */
6164
+ transition?: 'in' | 'out' | 'none';
6165
+ /** Raw filter string exactly as authored, for round-trip/debugging. */
6166
+ raw: string;
5752
6167
  }
5753
6168
  /**
5754
6169
  * Single keyframe parsed from a `p:tav` element (CT_TLTimeAnimateValue).
@@ -6903,10 +7318,12 @@ interface PptxSlide {
6903
7318
  */
6904
7319
  backgroundPattern?: PptxSlideBackgroundPattern;
6905
7320
  /**
6906
- * `<p:bgPr/@shadeToTitle>` boolean flag instructing the renderer to
7321
+ * `<p:bgPr/@shadeToTitle>`: boolean flag instructing the renderer to
6907
7322
  * shade the background toward the title placeholder colour. Captured
6908
- * for lossless round-trip; the React renderer currently treats it as
6909
- * a passthrough hint.
7323
+ * for lossless round-trip only; no renderer applies the visual effect.
7324
+ * Documented as a known no-op in `docs/guide/limitations.md` (legacy
7325
+ * PowerPoint 97-2003 hint, not observed in any real-world corpus file
7326
+ * and not settable from any modern PowerPoint UI).
6910
7327
  *
6911
7328
  * ECMA-376 §19.3.1.2 (CT_BackgroundProperties).
6912
7329
  */
@@ -6945,6 +7362,13 @@ interface PptxSlide {
6945
7362
  backgroundShowAnimation?: boolean;
6946
7363
  /** Whether master slide shapes should be shown on this slide (`p:sld/@showMasterSp`). */
6947
7364
  showMasterShapes?: boolean;
7365
+ /**
7366
+ * Whether inherited master placeholder animations should replay on this
7367
+ * slide (`p:sld/@showMasterPhAnim`). Distinct from {@link showMasterShapes}:
7368
+ * this governs animation timing, not shape visibility. Mirrors
7369
+ * `p:sldLayout/@showMasterPhAnim`, ECMA-376 §19.3.1.38.
7370
+ */
7371
+ showMasterPhAnim?: boolean;
6948
7372
  /** Drawing guides parsed from slide extension list. */
6949
7373
  guides?: PptxDrawingGuide[];
6950
7374
  /** When explicitly `false`, the slide is unmodified and save can skip re-serialization. */
@@ -7070,11 +7494,6 @@ interface PptxPresentationProperties {
7070
7494
  printProperties?: PptxPresentationPrintProperties | null;
7071
7495
  /** Most-recently-used colours from the presentation palette. */
7072
7496
  mruColors?: string[];
7073
- /** Grid spacing in EMUs (cx, cy). Default is 914400 / 8 = 114300. */
7074
- gridSpacing?: {
7075
- cx: number;
7076
- cy: number;
7077
- };
7078
7497
  /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
7079
7498
  penColor?: string;
7080
7499
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
@@ -7282,6 +7701,29 @@ interface PptxData {
7282
7701
  embeddedFonts?: PptxEmbeddedFont[];
7283
7702
  /** Typed `p:embeddedFontLst` package metadata, including unresolved variants. */
7284
7703
  embeddedFontList?: PptxEmbeddedFontList;
7704
+ /**
7705
+ * `p:presentation/@embedTrueTypeFonts` (ECMA-376 §19.2.1.26): the author's
7706
+ * saved preference that TrueType fonts referenced by the deck be embedded.
7707
+ * `undefined` when the attribute is absent (spec default `false`).
7708
+ *
7709
+ * This is purely declarative in this library: fonts are only ever embedded
7710
+ * when the caller explicitly supplies `embeddedFontList`/`embeddedFonts`
7711
+ * (there is no automatic embed-on-save), so toggling this flag does not
7712
+ * gate any embedding behaviour of its own here - it only round-trips the
7713
+ * author's stated preference, the same way real PowerPoint reads it back
7714
+ * as a checkbox state rather than a trigger. See `@saveSubsetFonts`,
7715
+ * which is a separate, deliberately unimplemented flag (no glyph
7716
+ * subsetting) that does not interact with this one.
7717
+ */
7718
+ embedTrueTypeFonts?: boolean;
7719
+ /**
7720
+ * Presentation-level default text style (`p:defaultTextStyle`): the
7721
+ * last-resort paragraph/run-property fallback for every shape (placeholder
7722
+ * or not) whose local and inherited cascade leaves a field undefined.
7723
+ * Keyed the same way as {@link PptxMasterTextStyles} categories: `-1` is
7724
+ * `a:defPPr`, `0`-`8` are `a:lvl1pPr`-`a:lvl9pPr`.
7725
+ */
7726
+ defaultTextStyle?: PptxTextStyleLevels;
7285
7727
  /** Most-recently-used colour list from presentation properties. */
7286
7728
  mruColors?: string[];
7287
7729
  /** Parsed notes master data if present in the PPTX. */
@@ -8131,6 +8573,19 @@ interface PptxHandlerSaveOptions {
8131
8573
  kinsoku?: PptxKinsoku | null;
8132
8574
  /** Write-protection verifier. Set to `null` to remove, `undefined` to preserve existing. */
8133
8575
  modifyVerifier?: PptxModifyVerifier | null;
8576
+ /**
8577
+ * `p:presentation/@embedTrueTypeFonts` to write. `undefined` preserves
8578
+ * whatever was loaded (or omits the attribute for a brand-new deck);
8579
+ * purely declarative here, see {@link PptxData.embedTrueTypeFonts}.
8580
+ */
8581
+ embedTrueTypeFonts?: boolean;
8582
+ /**
8583
+ * Presentation-level default text style edits to save back to
8584
+ * `p:defaultTextStyle`. Only the levels present in the map are touched;
8585
+ * omitted levels and any unmodelled XML on an edited level survive
8586
+ * untouched. See {@link PptxData.defaultTextStyle}.
8587
+ */
8588
+ defaultTextStyle?: PptxTextStyleLevels;
8134
8589
  /** View properties to save back to ppt/viewProps.xml. */
8135
8590
  viewProperties?: PptxViewProperties;
8136
8591
  /**
@@ -9479,9 +9934,10 @@ declare function savedPresentationFileName(sourceName: string | null | undefined
9479
9934
  /**
9480
9935
  * Dropdown ids for the insert-chart menu. Distinct from `PptxChartType`
9481
9936
  * because PowerPoint offers Column (vertical) and Bar (horizontal) as two
9482
- * entries over the same underlying `'bar'` chart type.
9937
+ * entries over the same underlying `'bar'` chart type. The six ChartEx ids
9938
+ * (`histogram` through `regionMap`) map one-to-one onto their chart type.
9483
9939
  */
9484
- type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter';
9940
+ type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'histogram' | 'funnel' | 'treemap' | 'sunburst' | 'boxWhisker' | 'regionMap';
9485
9941
  /** In-memory clipboard payload stored when an element is copied or cut. */
9486
9942
  interface ElementClipboardPayload {
9487
9943
  element: PptxElement;