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
@@ -743,6 +743,13 @@ interface Pptx3DScene {
743
743
  * ```
744
744
  */
745
745
  interface Pptx3DShape {
746
+ /**
747
+ * Position of the shape along the Z axis, in EMU (`a:sp3d/@z`, default 0).
748
+ * Independent of {@link extrusionHeight}: it moves the whole shape forward
749
+ * or back in 3D space rather than adding depth to it, most commonly used to
750
+ * stack several shapes at different depths under one `a:scene3d` camera.
751
+ */
752
+ positionZ?: number;
746
753
  /** Extrusion height in EMU. */
747
754
  extrusionHeight?: number;
748
755
  /** Extrusion colour. */
@@ -1283,12 +1290,12 @@ interface TextStyle {
1283
1290
  resolvedParagraphGeometry?: TextStyle;
1284
1291
  fontFamily?: string;
1285
1292
  fontSize?: number;
1286
- /** When true, renderer should shrink text to fit the shape bounds. */
1293
+ /** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
1287
1294
  autoFit?: boolean;
1288
1295
  /** Explicit autofit mode from OOXML body properties.
1289
- * - 'shrink': `a:spAutoFit` shrink text on overflow
1290
- * - 'normal': `a:normAutofit` normal auto-fit (with optional fontScale)
1291
- * - 'none': `a:noAutofit` explicitly no auto-fit (text overflows)
1296
+ * - 'shrink': `a:spAutoFit` - resize the SHAPE to fit the text (never the font)
1297
+ * - 'normal': `a:normAutofit` - shrink the TEXT to fit the shape (via `fontScale`/`lnSpcReduction`)
1298
+ * - 'none': `a:noAutofit` - explicitly no auto-fit (text overflows)
1292
1299
  * - undefined: no autofit element present (inherit from layout/master)
1293
1300
  */
1294
1301
  autoFitMode?: 'shrink' | 'normal' | 'none';
@@ -1679,6 +1686,18 @@ interface TextStyle {
1679
1686
  textBodyScene3d?: Pptx3DScene;
1680
1687
  /** Raw `a:scene3d` subtree used to preserve extensions and unmodelled children. */
1681
1688
  textBodyScene3dXml?: XmlObject;
1689
+ /**
1690
+ * `a:bodyPr/a:flatTx` - an explicit "render this text flat" marker. `sp3d`
1691
+ * and `flatTx` are a mutually exclusive OOXML choice (`EG_Text3D`), so a
1692
+ * shape/run that overrides an inherited 3D text body with `<a:flatTx/>`
1693
+ * carries no `text3d` of its own; without this explicit flag a later
1694
+ * inheritance merge has no signal to stop `text3d`/`textBodyScene3d` from
1695
+ * an ancestor (layout/master) leaking back in, the way `noFill` stops an
1696
+ * inherited fill. A renderer must short-circuit 3D-text application
1697
+ * whenever this is `true`, regardless of what `text3d`/`textBodyScene3d`
1698
+ * otherwise hold.
1699
+ */
1700
+ flatText?: boolean;
1682
1701
  /**
1683
1702
  * Raw `<a:extLst>` subtree captured from `<a:bodyPr>`. Preserved verbatim so
1684
1703
  * authored extensions (e.g. content placeholders, custom application data)
@@ -1954,6 +1973,24 @@ interface PptxElementBase {
1954
1973
  * SDK-created elements.
1955
1974
  */
1956
1975
  placeholderType?: string;
1976
+ /**
1977
+ * `p:nvSpPr/p:nvPr/p:ph/@sz` (lower-cased): `"full"`, `"half"`, or
1978
+ * `"quarter"`. Captured on load for round-trip completeness. Per
1979
+ * ECMA-376 §19.3.1.36 (CT_Placeholder) this size hint is only meaningful
1980
+ * when NO `a:xfrm` exists anywhere in the placeholder's inheritance
1981
+ * chain (slide -> layout -> master); every real-world corpus placeholder
1982
+ * that carries `@sz` already has an explicit `a:xfrm` at the master
1983
+ * level, so no renderer currently derives a size from this field.
1984
+ */
1985
+ placeholderSz?: string;
1986
+ /**
1987
+ * `p:nvSpPr/p:nvPr/p:ph/@orient` (only `"vert"` is meaningful per
1988
+ * `ST_Direction`). Captured on load for round-trip completeness. In
1989
+ * practice every placeholder observed with `orient="vert"` also carries
1990
+ * an explicit `a:bodyPr/@vert`, which already drives vertical-text
1991
+ * rendering, so this field is not currently read by any renderer.
1992
+ */
1993
+ placeholderOrient?: 'vert';
1957
1994
  x: number;
1958
1995
  y: number;
1959
1996
  width: number;
@@ -2416,6 +2453,14 @@ interface PptxChartDataTable {
2416
2453
  showVertBorder?: boolean;
2417
2454
  showOutline?: boolean;
2418
2455
  showKeys?: boolean;
2456
+ /** Table border/fill formatting (`c:dTable/c:spPr`). */
2457
+ spPr?: PptxChartShapeProps;
2458
+ /**
2459
+ * Cell text defaults (`c:dTable/c:txPr/a:p/a:pPr/a:defRPr`). Reuses the same
2460
+ * shape as a legend entry's text override since both are a flat paragraph
2461
+ * default-run-property style (size/bold/italic/font/colour).
2462
+ */
2463
+ txPr?: PptxChartLegendTextStyle;
2419
2464
  }
2420
2465
  /**
2421
2466
  * Line appearance for chart helper lines (drop lines, hi-low lines).
@@ -2574,6 +2619,15 @@ interface PptxChart3DSurface {
2574
2619
  thickness?: number;
2575
2620
  spPr?: PptxChartShapeProps;
2576
2621
  }
2622
+ /**
2623
+ * One colour band for a surface chart (`c:bandFmts/c:bandFmt`,
2624
+ * ECMA-376 §21.2.2.19 / CT_BandFmt). `index` is the band's position
2625
+ * (`c:idx/@val`) among the value axis's major-unit bands, in authored order.
2626
+ */
2627
+ interface PptxChartBandFmt {
2628
+ index: number;
2629
+ spPr?: PptxChartShapeProps;
2630
+ }
2577
2631
  /** Office 2016 ChartEx box-and-whisker series layout options. */
2578
2632
  interface PptxChartBoxWhiskerOptions {
2579
2633
  quartileMethod?: 'inclusive' | 'exclusive';
@@ -2989,9 +3043,14 @@ interface PptxChartData {
2989
3043
  chartType: PptxChartType;
2990
3044
  categories: string[];
2991
3045
  /**
2992
- * Hierarchical category levels in source XML order for ChartEx hierarchy charts.
2993
- * Level 0 contains the leaf labels and remains mirrored by {@link categories}
2994
- * for consumers that only understand a flat category axis.
3046
+ * Hierarchical category levels in source XML order, for both ChartEx
3047
+ * hierarchy charts (`cx:multiLvlStrRef`) and classic multi-level category
3048
+ * axes (`c:cat/c:multiLvlStrRef`, e.g. a PowerPoint Quarter > Month
3049
+ * grouping). Level 0 contains the leaf labels and remains mirrored by
3050
+ * {@link categories} for consumers that only understand a flat category
3051
+ * axis. Parent (grouping) levels are forward-filled: a blank cache slot
3052
+ * continues the previous group's label, matching how the source stores a
3053
+ * merged category header sparsely.
2995
3054
  */
2996
3055
  categoryLevels?: string[][];
2997
3056
  dateCategories?: PptxChartDateCategories;
@@ -3058,6 +3117,8 @@ interface PptxChartData {
3058
3117
  floor?: PptxChart3DSurface;
3059
3118
  sideWall?: PptxChart3DSurface;
3060
3119
  backWall?: PptxChart3DSurface;
3120
+ /** Per-band surface-chart colour overrides (`c:surfaceChart/c:bandFmts`). */
3121
+ bandFmts?: PptxChartBandFmt[];
3061
3122
  /** External data source reference (c:externalData) linking to an external workbook. */
3062
3123
  externalData?: PptxExternalData;
3063
3124
  /**
@@ -3335,6 +3396,16 @@ interface PptxImageEffects {
3335
3396
  contRawXml?: Record<string, unknown>;
3336
3397
  /** Original effect XML, including foreign attributes. */
3337
3398
  rawXml?: XmlObject;
3399
+ /**
3400
+ * Multiplicative alpha percentage (0..100+), read from a nested
3401
+ * `<a:alphaModFix>` inside `contRawXml` when present - the common
3402
+ * real-world shape of `a:alphaMod` (`<a:cont><a:alphaModFix amt="…"/>
3403
+ * </a:cont>`). Derived/read-only: a renderer multiplies the source alpha
3404
+ * by this, distinct from the top-level {@link alphaModFix} sibling
3405
+ * effect. Not written back independently on save; `contRawXml` is what
3406
+ * round-trips.
3407
+ */
3408
+ amt?: number;
3338
3409
  };
3339
3410
  /** Alpha replace (`a:alphaRepl`) — replaces alpha with the given fixed-percent value (0..100). */
3340
3411
  alphaRepl?: number;
@@ -3379,6 +3450,40 @@ interface PptxImageEffects {
3379
3450
  blend: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
3380
3451
  /** Raw opaque fill XML preserved for round-trip. */
3381
3452
  fillRawXml?: Record<string, unknown>;
3453
+ /**
3454
+ * Resolved hex colour, when the overlay fill is a plain `a:solidFill`
3455
+ * (the common case for a picture-style colour overlay). `undefined` for
3456
+ * a gradient/pattern/picture overlay fill - see {@link resolvedGradient} /
3457
+ * {@link resolvedPattern} instead. `fillRawXml` still round-trips
3458
+ * losslessly regardless of which of the three resolved.
3459
+ */
3460
+ resolvedColor?: string;
3461
+ /** Resolved opacity (0-1) of the `a:solidFill` overlay colour, when resolved. */
3462
+ resolvedOpacity?: number;
3463
+ /**
3464
+ * Resolved gradient, when the overlay fill is `a:gradFill`. A renderer
3465
+ * composites this as an SVG paint server (`<linearGradient>` /
3466
+ * `<radialGradient>`) rather than a flat flood colour.
3467
+ */
3468
+ resolvedGradient?: {
3469
+ type: 'linear' | 'radial';
3470
+ /** Gradient angle in degrees (`a:lin/@ang`), for a linear gradient. */
3471
+ angle?: number;
3472
+ stops: Array<{
3473
+ color: string;
3474
+ position: number;
3475
+ opacity?: number;
3476
+ }>;
3477
+ };
3478
+ /**
3479
+ * Resolved preset pattern, when the overlay fill is `a:pattFill`. A
3480
+ * renderer composites this as a tiled SVG paint server.
3481
+ */
3482
+ resolvedPattern?: {
3483
+ preset: string;
3484
+ foreground?: string;
3485
+ background?: string;
3486
+ };
3382
3487
  };
3383
3488
  /** Blur (`a:blur`) — radius in EMU and grow flag. */
3384
3489
  blur?: {
@@ -3458,6 +3563,13 @@ interface PptxImageProperties {
3458
3563
  tileFlip?: 'none' | 'x' | 'y' | 'xy';
3459
3564
  /** Image tiling alignment. */
3460
3565
  tileAlignment?: string;
3566
+ /**
3567
+ * Print-resolution hint in DPI (`a:blipFill/@dpi`). PowerPoint records this
3568
+ * when it downsamples an embedded image for a target print quality; it has
3569
+ * no on-screen rendering effect (a `0`/absent value means "use the source
3570
+ * image's native resolution"). Parsed for round-trip / API fidelity only.
3571
+ */
3572
+ dpi?: number;
3461
3573
  /** Image recolour/artistic effect properties. */
3462
3574
  imageEffects?: PptxImageEffects;
3463
3575
  /** Crop-to-shape — CSS clip-path shape name. */
@@ -3638,6 +3750,25 @@ interface PptxSmartArtChoose {
3638
3750
  } | null;
3639
3751
  rawXml?: XmlObject;
3640
3752
  }
3753
+ /** A single `dgm:adj/@val` adjustment, keyed by its `@idx` (1-based, like `a:gd`). */
3754
+ interface PptxSmartArtShapeAdjustment {
3755
+ index: number;
3756
+ value: number;
3757
+ }
3758
+ /**
3759
+ * Typed DiagramML CT_Shape data (`dgm:shape`) attached to a layout node: the
3760
+ * per-node preset geometry override real (and third-party/custom) layout
3761
+ * definitions use so a layoutNode can be e.g. an ellipse or a chevron instead
3762
+ * of the arranger family's hardcoded default shape.
3763
+ */
3764
+ interface PptxSmartArtLayoutNodeShape {
3765
+ /** `dgm:shape/@type`: a preset geometry name (`roundRect`, `ellipse`, `chevron`, `conn`, ...). */
3766
+ presetGeometry?: string;
3767
+ /** `dgm:adjLst/dgm:adj` entries (adjustment index -> value, as authored). */
3768
+ adjustments?: PptxSmartArtShapeAdjustment[];
3769
+ /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3770
+ hideGeometry?: boolean;
3771
+ }
3641
3772
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3642
3773
  interface PptxSmartArtLayoutNode {
3643
3774
  name?: string;
@@ -3649,6 +3780,8 @@ interface PptxSmartArtLayoutNode {
3649
3780
  choose?: PptxSmartArtChoose[];
3650
3781
  constraints?: PptxSmartArtConstraint[];
3651
3782
  rules?: PptxSmartArtNumericRule[];
3783
+ /** `dgm:shape`: this node's own preset geometry override, when present. */
3784
+ shape?: PptxSmartArtLayoutNodeShape;
3652
3785
  children?: PptxSmartArtLayoutNode[];
3653
3786
  }
3654
3787
  /** Metadata and root node from DiagramML CT_DiagramDefinition. */
@@ -3772,6 +3905,61 @@ interface PptxSmartArtNodeStyle {
3772
3905
  /** Italic emphasis override for the node's runs. */
3773
3906
  italic?: boolean;
3774
3907
  }
3908
+ /**
3909
+ * Manual layout override for a `type="pres"` presentation point, read from its
3910
+ * `dgm:prSet` attributes. PowerPoint writes these when the user drags, resizes,
3911
+ * rotates, or flips a SmartArt node by hand in its own diagram editor; without
3912
+ * them the node silently reverts to its algorithmic position whenever there is
3913
+ * no cached `dsp:` drawing part to fall back on.
3914
+ *
3915
+ * Every field is optional: only the attributes actually present on `prSet` are
3916
+ * populated. Angle and scale/factor units are already normalised to degrees and
3917
+ * plain ratios (a `custScaleX="150000"` becomes `scaleX: 1.5`), so a consumer
3918
+ * never has to know the raw `60000ths-of-a-degree` / `100000ths-of-a-percent`
3919
+ * XML encodings.
3920
+ *
3921
+ * @example
3922
+ * ```ts
3923
+ * const custom: SmartArtNodeCustomLayout = { angle: 15, scaleX: 1.2 };
3924
+ * // => a node manually rotated 15 degrees and widened 20% in PowerPoint
3925
+ * ```
3926
+ */
3927
+ interface SmartArtNodeCustomLayout {
3928
+ /** `custAng`: additional rotation in degrees. */
3929
+ angle?: number;
3930
+ /** `custScaleX`: horizontal scale ratio (1 = no change). */
3931
+ scaleX?: number;
3932
+ /** `custScaleY`: vertical scale ratio (1 = no change). */
3933
+ scaleY?: number;
3934
+ /** `custSzX`: horizontal size ratio, layered on top of {@link scaleX}. */
3935
+ sizeX?: number;
3936
+ /** `custSzY`: vertical size ratio, layered on top of {@link scaleY}. */
3937
+ sizeY?: number;
3938
+ /** `custFlipHor`: the node was manually mirrored horizontally. */
3939
+ flipHorizontal?: boolean;
3940
+ /** `custFlipVert`: the node was manually mirrored vertically. */
3941
+ flipVertical?: boolean;
3942
+ /** `custLinFactX`: manual position nudge along X, as a fraction of the container width. */
3943
+ linearFactorX?: number;
3944
+ /** `custLinFactY`: manual position nudge along Y, as a fraction of the container height. */
3945
+ linearFactorY?: number;
3946
+ /**
3947
+ * `custLinFactNeighborX`: spacing compensation applied to a NEIGHBOURING
3948
+ * node when this one is resized. Parsed for round-trip completeness; not
3949
+ * applied by the per-node final transform (it has no effect on this node's
3950
+ * own geometry; folding it into a neighbour's geometry would require
3951
+ * whole-layout awareness the final transform pass does not have).
3952
+ */
3953
+ linearFactorNeighborX?: number;
3954
+ /** `custLinFactNeighborY`: see {@link linearFactorNeighborX} (Y axis). */
3955
+ linearFactorNeighborY?: number;
3956
+ /** `custRadScaleRad`: manual radius scale ratio for a radial/cycle node. */
3957
+ radialScaleRadius?: number;
3958
+ /** `custRadScaleInc`: manual angular-position nudge for a radial/cycle node. */
3959
+ radialScaleIncrement?: number;
3960
+ /** `custT`: whether `prSet` declares a custom transform is present at all. */
3961
+ hasCustomTransform?: boolean;
3962
+ }
3775
3963
  /**
3776
3964
  * A single node in the SmartArt data model.
3777
3965
  *
@@ -3797,6 +3985,16 @@ interface PptxSmartArtNode {
3797
3985
  children?: PptxSmartArtNode[];
3798
3986
  /** Node type from `@_type` attribute (e.g. "doc", "node", "asst", "pres"). */
3799
3987
  nodeType?: string;
3988
+ /**
3989
+ * The node's own quick-style role (`dgm:prSet/@presStyleLbl` from its
3990
+ * paired `type="pres"` presentation point, resolved via a `presOf`
3991
+ * connection back to this content point). Structural names like `node1`,
3992
+ * `asst2`, `bgShp`, `revTx`; distinct from {@link nodeType}, which is the
3993
+ * data-model `@_type` ("node"/"asst"/...). Used to pick this node's own
3994
+ * colour list from a colour transform's per-role palettes instead of the
3995
+ * generic cycled palette (see `applySmartArtRoleColors`).
3996
+ */
3997
+ styleRole?: string;
3800
3998
  /**
3801
3999
  * Per-run text + run-properties for the node's first paragraph, captured at
3802
4000
  * parse time. When the joined run text still equals {@link text} (the node
@@ -3817,6 +4015,14 @@ interface PptxSmartArtNode {
3817
4015
  * it round-trips.
3818
4016
  */
3819
4017
  style?: PptxSmartArtNodeStyle;
4018
+ /**
4019
+ * Manual layout override read from the node's `dgm:prSet` `cust*`
4020
+ * attributes (drag/resize/rotate/flip performed in PowerPoint's own diagram
4021
+ * editor). Applied as a final transform after algorithmic layout by
4022
+ * {@link module:smartart-layout-interpreter-custom} so it survives even
4023
+ * when there is no cached `dsp:` drawing to fall back on.
4024
+ */
4025
+ customLayout?: SmartArtNodeCustomLayout;
3820
4026
  }
3821
4027
  //#endregion
3822
4028
  //#region src/core/types/smart-art-style-definition.d.ts
@@ -3879,6 +4085,18 @@ interface PptxSmartArtColorTransform extends PptxSmartArtDefinitionMetadata {
3879
4085
  lineInterpolation?: PptxSmartArtColorListMetadata;
3880
4086
  /** Ordered CT_CTStyleLabel metadata. */
3881
4087
  labels?: PptxSmartArtColorStyleLabel[];
4088
+ /**
4089
+ * Every `styleLbl`'s own resolved fill/line colour list, keyed by name
4090
+ * (e.g. `node1`, `asst0`, `bgShp`, `revTx`). Unlike {@link fillColors} /
4091
+ * {@link lineColors} (which collapse to ONE "primary" node-role list),
4092
+ * this keeps every role so a node can be coloured from its OWN role's
4093
+ * palette (see `PptxSmartArtNode.styleRole` and `applySmartArtRoleColors`)
4094
+ * instead of a generic cycled colour.
4095
+ */
4096
+ roleColors?: Record<string, {
4097
+ fill: string[];
4098
+ line: string[];
4099
+ }>;
3882
4100
  }
3883
4101
  /** Typed CT_StyleDefinition metadata and legacy rendering hint. */
3884
4102
  interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
@@ -3963,6 +4181,14 @@ interface PptxSmartArtConnection {
3963
4181
  siblingTransitionId?: string | null;
3964
4182
  /** Layout presentation identifier used by presentation connections. */
3965
4183
  presentationId?: string | null;
4184
+ /**
4185
+ * Connector text, read from the linked `parTrans`/`sibTrans` transition
4186
+ * point's `dgm:t` (via {@link parentTransitionId} / {@link siblingTransitionId}).
4187
+ * PowerPoint's own diagram editor lets a user type text directly onto an
4188
+ * org-chart relationship connector; `undefined` when the transition point
4189
+ * carries no text. Written back to that point on save.
4190
+ */
4191
+ label?: string;
3966
4192
  }
3967
4193
  /**
3968
4194
  * A pre-computed shape from `ppt/diagrams/drawing*.xml`.
@@ -4283,8 +4509,8 @@ interface PptxTableCellStyle {
4283
4509
  textGlowRadius?: number;
4284
4510
  /** Cell text glow opacity (0-1). */
4285
4511
  textGlowOpacity?: number;
4286
- /** Cell fill mode: solid, gradient, pattern, or none. */
4287
- fillMode?: 'solid' | 'gradient' | 'pattern' | 'none';
4512
+ /** Cell fill mode: solid, gradient, pattern, image, or none. */
4513
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'image' | 'none';
4288
4514
  /** Gradient fill stops (colours with positions). */
4289
4515
  gradientFillStops?: Array<{
4290
4516
  color: string;
@@ -4317,6 +4543,23 @@ interface PptxTableCellStyle {
4317
4543
  patternFillForeground?: string;
4318
4544
  /** Pattern fill background colour. */
4319
4545
  patternFillBackground?: string;
4546
+ /**
4547
+ * Image fill (`a:tcPr/a:blipFill`, CT_TableCellProperties). Resolved
4548
+ * archive-relative path (or external `http(s):`/`data:` URL) for the
4549
+ * cell's background image, from `a:blipFill/a:blip/@r:embed` (or
4550
+ * `@r:link`). Present when `fillMode` is `'image'`.
4551
+ *
4552
+ * The parser resolves this synchronously (path only, no binary read);
4553
+ * a viewer's load pipeline resolves it further to a displayable
4554
+ * `data:`/`blob:` URL, written back to {@link backgroundImageFillData}.
4555
+ */
4556
+ backgroundImageFillPath?: string;
4557
+ /**
4558
+ * Displayable image data (`data:` or `blob:` URL) for an image cell
4559
+ * fill, once resolved by the load pipeline. Renderers should prefer
4560
+ * this over {@link backgroundImageFillPath} when both are present.
4561
+ */
4562
+ backgroundImageFillData?: string;
4320
4563
  /**
4321
4564
  * Cell 3D bevel + lighting from `a:tcPr/a:cell3D` (CT_Cell3D,
4322
4565
  * ECMA-376 §21.1.3.1). Rendered as a CSS bevel treatment.
@@ -4542,6 +4785,24 @@ interface ParsedTableStyleFill {
4542
4785
  gradient?: ParsedTableStyleGradient;
4543
4786
  /** Preset pattern fill parsed from `a:pattFill`. */
4544
4787
  pattern?: ParsedTableStylePattern;
4788
+ /** Image texture fill parsed from `a:blipFill`. */
4789
+ image?: ParsedTableStyleImage;
4790
+ }
4791
+ /**
4792
+ * An image texture fill parsed from a table style section's `a:blipFill`.
4793
+ *
4794
+ * `ppt/tableStyles.xml` is a presentation-level part parsed once (not
4795
+ * per-slide), so this mirrors the per-CELL `a:tcPr/a:blipFill` two-field lazy
4796
+ * pattern (`PptxTableCellStyle.backgroundImageFillPath` /
4797
+ * `backgroundImageFillData`): `path` starts out as a raw archive-relative
4798
+ * path (or an already-external `http(s):`/`data:` URL), and a load pipeline
4799
+ * patches it to a displayable URL in `data` once resolved.
4800
+ */
4801
+ interface ParsedTableStyleImage {
4802
+ /** Archive-relative path, or an already-displayable external/data URL. */
4803
+ path?: string;
4804
+ /** Displayable URL once a load pipeline has resolved `path`. */
4805
+ data?: string;
4545
4806
  }
4546
4807
  /** A single colour stop within a {@link ParsedTableStyleGradient}. */
4547
4808
  interface ParsedTableStyleGradientStop {
@@ -4968,6 +5229,12 @@ interface OlePptxElement extends PptxElementBase {
4968
5229
  oleEmbeddedMimeType?: string;
4969
5230
  /** Size of the embedded payload in bytes. */
4970
5231
  oleEmbeddedByteSize?: number;
5232
+ /**
5233
+ * `p:link/@followColorScheme` (`ST_OleObjectFollowColorScheme`): whether a
5234
+ * LINKED OLE object's icon recolours to match the presentation theme.
5235
+ * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5236
+ */
5237
+ oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
4971
5238
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
4972
5239
  extensionXml?: PptxGraphicFrameExtension[];
4973
5240
  }
@@ -5269,6 +5536,16 @@ interface PptxNotesMaster {
5269
5536
  headerFooter?: PptxHeaderFooterFlags;
5270
5537
  /** Colour map from `<p:clrMap>` (12 alias attributes). Applied at save time. */
5271
5538
  clrMap?: Record<string, string>;
5539
+ /**
5540
+ * Notes text defaults from `<p:notesStyle>` (`CT_TextListStyle`, ECMA-376
5541
+ * §19.3.1.34): the same `a:defPPr` + `a:lvl1pPr`..`a:lvl9pPr` shape as
5542
+ * {@link PptxMasterTextStyles}'s per-category styles, keyed 0-8 with the
5543
+ * default at `-1`. Governs the notes body placeholder's font size, indent
5544
+ * levels, and bullet style wherever a notes slide does not override them.
5545
+ * Parsed read-only for the render cascade; the save side preserves the
5546
+ * original `<p:notesStyle>` XML verbatim rather than re-serialising this.
5547
+ */
5548
+ notesStyle?: PptxTextStyleLevels;
5272
5549
  }
5273
5550
  /**
5274
5551
  * Parsed handout master from `ppt/handoutMasters/handoutMaster1.xml`.
@@ -5342,6 +5619,14 @@ interface PptxSlideMaster {
5342
5619
  * accent1-6, hlink, folHlink). Applied at save time when present.
5343
5620
  */
5344
5621
  clrMap?: Record<string, string>;
5622
+ /**
5623
+ * Whether the master is marked as preserved (prevent auto-deletion,
5624
+ * `@preserve`). Mirrors {@link PptxSlideLayout.preserve}: PowerPoint
5625
+ * silently drops an unused master unless this is set.
5626
+ *
5627
+ * ECMA-376 §19.3.1.38 (CT_SlideMaster).
5628
+ */
5629
+ preserve?: boolean;
5345
5630
  }
5346
5631
  /**
5347
5632
  * Per-level paragraph properties for a text style category.
@@ -5531,6 +5816,35 @@ type PptxGraphicBuild = {
5531
5816
  animateBackground: boolean;
5532
5817
  rawXml?: XmlObject;
5533
5818
  };
5819
+ /**
5820
+ * A single `p:tmpl` timing template parsed from a TEXT `p:bldP/p:tmplLst`
5821
+ * (CT_TLTemplate, ECMA-376 §19.5.85; the list itself is CT_TLTemplateList,
5822
+ * §19.5.84).
5823
+ *
5824
+ * PowerPoint writes these as the timing PowerPoint would apply to a build
5825
+ * level that does not yet have an instantiated effect, so that promoting or
5826
+ * demoting an outline paragraph, or adding a new bullet at a level with no
5827
+ * prior animation, has a default to clone. They are not consulted at
5828
+ * playback: the animation actually shown for every paragraph level already
5829
+ * visible on the slide is the real, instantiated `p:tnLst` under
5830
+ * `p:timing/p:tnLst`, which the rest of this parser already models in full.
5831
+ *
5832
+ * The nested time-node tree under each template's own `p:tnLst` is kept as
5833
+ * a preserved `XmlObject` rather than deep-parsed into
5834
+ * {@link PptxNativeAnimation} records: it is schema-identical to the
5835
+ * top-level timing tree but scoped to a template that is never itself
5836
+ * executed, so structurally modelling it would stand up a second, unused
5837
+ * parallel animation model. Parsing stops at typed round-trip; see
5838
+ * `docs/guide/limitations.md`.
5839
+ */
5840
+ interface PptxTimingTemplate {
5841
+ /** Build level this template targets, from `p:tmpl/@lvl` (ST_TLLevel, default 0). */
5842
+ level: number;
5843
+ /** Preserved `p:tnLst` (CT_TimeNodeList) subtree, verbatim. */
5844
+ timeNodeList: XmlObject;
5845
+ /** Preserved `p:tmpl` XML node (its attributes plus any unmodelled children). */
5846
+ rawXml?: XmlObject;
5847
+ }
5534
5848
  /**
5535
5849
  * Parsed native animation record from `p:timing / p:tnLst`.
5536
5850
  *
@@ -5641,6 +5955,58 @@ interface PptxNativeAnimation {
5641
5955
  soundPath?: string;
5642
5956
  /** Whether to stop any currently playing sound (`p:endSnd`). */
5643
5957
  stopSound?: boolean;
5958
+ /**
5959
+ * End-state behaviour from `p:cTn/@fill` (ST_TLTimeNodeFillType, ECMA-376
5960
+ * §19.5.27). `hold`/`freeze` mean the effect's final frame persists after
5961
+ * it finishes; `remove` (the default when absent) means the target reverts
5962
+ * to its pre-effect appearance. `transition` behaves like `hold` until the
5963
+ * next time node starts. Absent means the OOXML default (`remove`).
5964
+ */
5965
+ fill?: 'remove' | 'freeze' | 'hold' | 'transition';
5966
+ /**
5967
+ * Restart behaviour from `p:cTn/@restart` (ST_TLTimeNodeRestartType).
5968
+ * Absent means the OOXML default (`always`).
5969
+ */
5970
+ restart?: 'always' | 'whenNotActive' | 'never';
5971
+ /**
5972
+ * Repeat duration in milliseconds from `p:cTn/@repeatDur`. `Infinity`
5973
+ * represents the literal `"indefinite"` token.
5974
+ */
5975
+ repeatDurMs?: number;
5976
+ /**
5977
+ * Playback speed multiplier from `p:cTn/@spd` (ST_Percentage, normalized
5978
+ * from OOXML's 1000ths-of-a-percent storage to a plain percentage, e.g.
5979
+ * `150` for 150% / double speed). Absent means normal (100%) speed.
5980
+ */
5981
+ speedPct?: number;
5982
+ /**
5983
+ * Reverse the paragraph build order from `p:bldP/@rev` (TEXT build only).
5984
+ * Not to be confused with {@link PptxGraphicBuild}'s `reverse` field, which
5985
+ * carries the unrelated `p:bldDgm`/`@rev` DIAGRAM-build reverse flag.
5986
+ */
5987
+ buildReverse?: boolean;
5988
+ /**
5989
+ * Auto-advance time in milliseconds from `p:bldP/@advAuto`. `Infinity`
5990
+ * represents the literal `"indefinite"` token. Absent means the build
5991
+ * step waits for a click.
5992
+ */
5993
+ buildAdvAutoMs?: number;
5994
+ /**
5995
+ * Per-build-level timing templates from a TEXT `p:bldP/p:tmplLst`
5996
+ * (ECMA-376 §19.5.84 CT_TLTemplateList). Parsed for round-trip only; see
5997
+ * {@link PptxTimingTemplate} for why they are not consulted at playback.
5998
+ */
5999
+ buildTemplates?: PptxTimingTemplate[];
6000
+ /**
6001
+ * Whether the enclosing `p:seq` allows concurrent play with its siblings,
6002
+ * from `p:seq/@concurrent`. Parsed for round-trip; not yet honoured by
6003
+ * playback (see `docs/guide/limitations.md`).
6004
+ */
6005
+ seqConcurrent?: boolean;
6006
+ /** Next-action behaviour from `p:seq/@nextAc` (ST_TLNextActionType). */
6007
+ seqNextAction?: 'none' | 'seek';
6008
+ /** Previous-action behaviour from `p:seq/@prevAc` (ST_TLPreviousActionType). */
6009
+ seqPrevAction?: 'none' | 'skipTimeNode';
5644
6010
  /**
5645
6011
  * Whether the enclosing click-level group (a direct `p:par` child of the
5646
6012
  * `mainSeq`) begins automatically when the slide appears, rather than waiting
@@ -5731,6 +6097,55 @@ interface PptxNativeAnimation {
5731
6097
  * subsequent peer nodes are sequenced when serialised back to OOXML.
5732
6098
  */
5733
6099
  afterEffect?: boolean;
6100
+ /**
6101
+ * "After animation" end-state behaviour carried over from the matching
6102
+ * {@link PptxElementAnimation.afterAnimation} entry for this effect's
6103
+ * element. Not populated by the native-timing parser itself (there is no
6104
+ * single `p:cTn` attribute for it): `applyAfterAnimationFromEditorList` in
6105
+ * `pptx-viewer-shared` merges it in from the editor's per-element
6106
+ * animation list before playback, since that is the model the animation
6107
+ * panel writes `afterAnimation` into.
6108
+ */
6109
+ afterAnimationAction?: PptxAfterAnimationAction;
6110
+ /** Dim-to color hex, present when {@link afterAnimationAction} is `dimToColor`. */
6111
+ afterAnimationColor?: string;
6112
+ /**
6113
+ * Parsed `p:animEffect` filter descriptor. `presetId`/`presetClass` remain
6114
+ * the primary effect selector (see `resolveEffect` in `pptx-viewer-shared`);
6115
+ * this is the fallback used when a preset table lookup misses (unmapped or
6116
+ * absent `presetId`), which happens for decks authored by tools other than
6117
+ * PowerPoint that only emit the SMIL-style filter string.
6118
+ */
6119
+ effectFilter?: PptxAnimationEffectFilter;
6120
+ }
6121
+ /**
6122
+ * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
6123
+ * describes `@filter` as a free-form string of the form `family(subtype)`,
6124
+ * optionally followed by `;`-separated fallback candidates (only the first
6125
+ * is honoured, per ECMA-376 S19.5.3's "first supported filter wins" rule).
6126
+ *
6127
+ * @example
6128
+ * ```ts
6129
+ * const f: PptxAnimationEffectFilter = { family: 'wipe', subtype: 'up', transition: 'in', raw: 'wipe(up)' };
6130
+ * ```
6131
+ */
6132
+ interface PptxAnimationEffectFilter {
6133
+ /** Filter family name (e.g. `"wipe"`, `"barn"`, `"checkerboard"`), lowercased. */
6134
+ family: string;
6135
+ /**
6136
+ * Parenthesised subtype/direction token verbatim (e.g. `"up"`,
6137
+ * `"inVertical"`, `"across"`, `"4"`). Absent when the filter has no
6138
+ * subtype (e.g. bare `"dissolve"`).
6139
+ */
6140
+ subtype?: string;
6141
+ /**
6142
+ * `p:animEffect/@transition`: `"in"` reveals the target (the OOXML
6143
+ * default when the attribute is omitted), `"out"` conceals it, `"none"`
6144
+ * applies the filter without a visibility change (a static filter pass).
6145
+ */
6146
+ transition?: 'in' | 'out' | 'none';
6147
+ /** Raw filter string exactly as authored, for round-trip/debugging. */
6148
+ raw: string;
5734
6149
  }
5735
6150
  /**
5736
6151
  * Single keyframe parsed from a `p:tav` element (CT_TLTimeAnimateValue).
@@ -6885,10 +7300,12 @@ interface PptxSlide {
6885
7300
  */
6886
7301
  backgroundPattern?: PptxSlideBackgroundPattern;
6887
7302
  /**
6888
- * `<p:bgPr/@shadeToTitle>` boolean flag instructing the renderer to
7303
+ * `<p:bgPr/@shadeToTitle>`: boolean flag instructing the renderer to
6889
7304
  * shade the background toward the title placeholder colour. Captured
6890
- * for lossless round-trip; the React renderer currently treats it as
6891
- * a passthrough hint.
7305
+ * for lossless round-trip only; no renderer applies the visual effect.
7306
+ * Documented as a known no-op in `docs/guide/limitations.md` (legacy
7307
+ * PowerPoint 97-2003 hint, not observed in any real-world corpus file
7308
+ * and not settable from any modern PowerPoint UI).
6892
7309
  *
6893
7310
  * ECMA-376 §19.3.1.2 (CT_BackgroundProperties).
6894
7311
  */
@@ -6927,6 +7344,13 @@ interface PptxSlide {
6927
7344
  backgroundShowAnimation?: boolean;
6928
7345
  /** Whether master slide shapes should be shown on this slide (`p:sld/@showMasterSp`). */
6929
7346
  showMasterShapes?: boolean;
7347
+ /**
7348
+ * Whether inherited master placeholder animations should replay on this
7349
+ * slide (`p:sld/@showMasterPhAnim`). Distinct from {@link showMasterShapes}:
7350
+ * this governs animation timing, not shape visibility. Mirrors
7351
+ * `p:sldLayout/@showMasterPhAnim`, ECMA-376 §19.3.1.38.
7352
+ */
7353
+ showMasterPhAnim?: boolean;
6930
7354
  /** Drawing guides parsed from slide extension list. */
6931
7355
  guides?: PptxDrawingGuide[];
6932
7356
  /** When explicitly `false`, the slide is unmodified and save can skip re-serialization. */
@@ -7052,11 +7476,6 @@ interface PptxPresentationProperties {
7052
7476
  printProperties?: PptxPresentationPrintProperties | null;
7053
7477
  /** Most-recently-used colours from the presentation palette. */
7054
7478
  mruColors?: string[];
7055
- /** Grid spacing in EMUs (cx, cy). Default is 914400 / 8 = 114300. */
7056
- gridSpacing?: {
7057
- cx: number;
7058
- cy: number;
7059
- };
7060
7479
  /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
7061
7480
  penColor?: string;
7062
7481
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
@@ -7264,6 +7683,29 @@ interface PptxData {
7264
7683
  embeddedFonts?: PptxEmbeddedFont[];
7265
7684
  /** Typed `p:embeddedFontLst` package metadata, including unresolved variants. */
7266
7685
  embeddedFontList?: PptxEmbeddedFontList;
7686
+ /**
7687
+ * `p:presentation/@embedTrueTypeFonts` (ECMA-376 §19.2.1.26): the author's
7688
+ * saved preference that TrueType fonts referenced by the deck be embedded.
7689
+ * `undefined` when the attribute is absent (spec default `false`).
7690
+ *
7691
+ * This is purely declarative in this library: fonts are only ever embedded
7692
+ * when the caller explicitly supplies `embeddedFontList`/`embeddedFonts`
7693
+ * (there is no automatic embed-on-save), so toggling this flag does not
7694
+ * gate any embedding behaviour of its own here - it only round-trips the
7695
+ * author's stated preference, the same way real PowerPoint reads it back
7696
+ * as a checkbox state rather than a trigger. See `@saveSubsetFonts`,
7697
+ * which is a separate, deliberately unimplemented flag (no glyph
7698
+ * subsetting) that does not interact with this one.
7699
+ */
7700
+ embedTrueTypeFonts?: boolean;
7701
+ /**
7702
+ * Presentation-level default text style (`p:defaultTextStyle`): the
7703
+ * last-resort paragraph/run-property fallback for every shape (placeholder
7704
+ * or not) whose local and inherited cascade leaves a field undefined.
7705
+ * Keyed the same way as {@link PptxMasterTextStyles} categories: `-1` is
7706
+ * `a:defPPr`, `0`-`8` are `a:lvl1pPr`-`a:lvl9pPr`.
7707
+ */
7708
+ defaultTextStyle?: PptxTextStyleLevels;
7267
7709
  /** Most-recently-used colour list from presentation properties. */
7268
7710
  mruColors?: string[];
7269
7711
  /** Parsed notes master data if present in the PPTX. */
@@ -8113,6 +8555,19 @@ interface PptxHandlerSaveOptions {
8113
8555
  kinsoku?: PptxKinsoku | null;
8114
8556
  /** Write-protection verifier. Set to `null` to remove, `undefined` to preserve existing. */
8115
8557
  modifyVerifier?: PptxModifyVerifier | null;
8558
+ /**
8559
+ * `p:presentation/@embedTrueTypeFonts` to write. `undefined` preserves
8560
+ * whatever was loaded (or omits the attribute for a brand-new deck);
8561
+ * purely declarative here, see {@link PptxData.embedTrueTypeFonts}.
8562
+ */
8563
+ embedTrueTypeFonts?: boolean;
8564
+ /**
8565
+ * Presentation-level default text style edits to save back to
8566
+ * `p:defaultTextStyle`. Only the levels present in the map are touched;
8567
+ * omitted levels and any unmodelled XML on an edited level survive
8568
+ * untouched. See {@link PptxData.defaultTextStyle}.
8569
+ */
8570
+ defaultTextStyle?: PptxTextStyleLevels;
8116
8571
  /** View properties to save back to ppt/viewProps.xml. */
8117
8572
  viewProperties?: PptxViewProperties;
8118
8573
  /**