pptx-react-viewer 2.21.1 → 3.0.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 (112) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{AiChatPanel-E4NQEMEI.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-VKR2IFFC.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-JZKLB5YT.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-65J6IE5Q.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/{PowerPointViewer-DVFkeluD.d.ts → PowerPointViewer-SkkxAGKa.d.ts} +2 -2
  15. package/dist/PowerPointViewer-SkkxAGKa.d.ts.map +1 -0
  16. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs +47 -0
  17. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.br +0 -0
  18. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.gz +0 -0
  19. package/dist/SurfaceChart3DScene-PGD4ZCLI.js +49 -0
  20. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.br +0 -0
  21. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.gz +0 -0
  22. package/dist/{audience-content-store-C4BFFhV5.d.ts → audience-content-store-Bx4Yj2pN.d.ts} +2 -2
  23. package/dist/{audience-content-store-C4BFFhV5.d.ts.map → audience-content-store-Bx4Yj2pN.d.ts.map} +1 -1
  24. package/dist/{chunk-GJHO6HPF.js → chunk-3MW6F3K7.js} +451 -399
  25. package/dist/chunk-3MW6F3K7.js.br +0 -0
  26. package/dist/chunk-3MW6F3K7.js.gz +0 -0
  27. package/dist/{chunk-2SNHVHHB.mjs → chunk-BGAJLL4N.mjs} +70 -18
  28. package/dist/chunk-BGAJLL4N.mjs.br +0 -0
  29. package/dist/chunk-BGAJLL4N.mjs.gz +0 -0
  30. package/dist/{chunk-CBGTLSY7.mjs → chunk-H2ONCGFZ.mjs} +218 -156
  31. package/dist/chunk-H2ONCGFZ.mjs.br +0 -0
  32. package/dist/chunk-H2ONCGFZ.mjs.gz +0 -0
  33. package/dist/{chunk-WRJ76D5S.mjs → chunk-OB4PKKIN.mjs} +1 -1
  34. package/dist/chunk-OB4PKKIN.mjs.br +0 -0
  35. package/dist/chunk-OB4PKKIN.mjs.gz +0 -0
  36. package/dist/{chunk-VWCUKKR3.mjs → chunk-OXPD2UYI.mjs} +14031 -7120
  37. package/dist/chunk-OXPD2UYI.mjs.br +0 -0
  38. package/dist/chunk-OXPD2UYI.mjs.gz +0 -0
  39. package/dist/{chunk-OSPNGQF3.js → chunk-RSEZYBKT.js} +2005 -1943
  40. package/dist/chunk-RSEZYBKT.js.br +0 -0
  41. package/dist/chunk-RSEZYBKT.js.gz +0 -0
  42. package/dist/{chunk-WX3HQHR5.mjs → chunk-S6PFSR7I.mjs} +108 -255
  43. package/dist/chunk-S6PFSR7I.mjs.br +0 -0
  44. package/dist/chunk-S6PFSR7I.mjs.gz +0 -0
  45. package/dist/{chunk-HYUJVSQJ.js → chunk-SDOQKSKI.js} +14051 -7126
  46. package/dist/chunk-SDOQKSKI.js.br +0 -0
  47. package/dist/chunk-SDOQKSKI.js.gz +0 -0
  48. package/dist/{chunk-C3JR7RMW.js → chunk-WFMSDYVQ.js} +3 -3
  49. package/dist/chunk-WFMSDYVQ.js.br +0 -0
  50. package/dist/chunk-WFMSDYVQ.js.gz +0 -0
  51. package/dist/{chunk-DA6DF3EU.js → chunk-XMLPTDPM.js} +248 -396
  52. package/dist/chunk-XMLPTDPM.js.br +0 -0
  53. package/dist/chunk-XMLPTDPM.js.gz +0 -0
  54. package/dist/index.d.ts +491 -20
  55. package/dist/index.js +45 -45
  56. package/dist/index.js.br +0 -0
  57. package/dist/index.js.gz +0 -0
  58. package/dist/index.mjs +5 -5
  59. package/dist/index.mjs.br +0 -0
  60. package/dist/index.mjs.gz +0 -0
  61. package/dist/internals.d.ts +498 -22
  62. package/dist/internals.d.ts.map +1 -1
  63. package/dist/internals.js +78 -78
  64. package/dist/internals.js.br +0 -0
  65. package/dist/internals.js.gz +0 -0
  66. package/dist/internals.mjs +3 -3
  67. package/dist/internals.mjs.br +0 -0
  68. package/dist/internals.mjs.gz +0 -0
  69. package/dist/pptx-viewer.css +1 -1
  70. package/dist/pptx-viewer.css.br +0 -0
  71. package/dist/pptx-viewer.css.gz +0 -0
  72. package/dist/{types-TCH6icpi.d.ts → types-kLpvSPxq.d.ts} +11 -1
  73. package/dist/{types-TCH6icpi.d.ts.map → types-kLpvSPxq.d.ts.map} +1 -1
  74. package/dist/{useViewerBuildingBlocks-BKb0qs1j.d.ts → useViewerBuildingBlocks-fh7rq4jc.d.ts} +2 -2
  75. package/dist/{useViewerBuildingBlocks-BKb0qs1j.d.ts.map → useViewerBuildingBlocks-fh7rq4jc.d.ts.map} +1 -1
  76. package/dist/viewer/index.d.ts +488 -18
  77. package/dist/viewer/index.js +26 -26
  78. package/dist/viewer/index.js.br +0 -0
  79. package/dist/viewer/index.js.gz +0 -0
  80. package/dist/viewer/index.mjs +5 -5
  81. package/dist/viewer/index.mjs.br +0 -0
  82. package/dist/viewer/index.mjs.gz +0 -0
  83. package/package.json +2 -2
  84. package/dist/AiChatPanel-E4NQEMEI.mjs.br +0 -0
  85. package/dist/AiChatPanel-E4NQEMEI.mjs.gz +0 -0
  86. package/dist/AiChatPanel-VKR2IFFC.js.br +0 -0
  87. package/dist/AiChatPanel-VKR2IFFC.js.gz +0 -0
  88. package/dist/Model3DScene-65J6IE5Q.mjs.br +0 -0
  89. package/dist/Model3DScene-65J6IE5Q.mjs.gz +0 -0
  90. package/dist/Model3DScene-JZKLB5YT.js.br +0 -0
  91. package/dist/Model3DScene-JZKLB5YT.js.gz +0 -0
  92. package/dist/PowerPointViewer-DVFkeluD.d.ts.map +0 -1
  93. package/dist/chunk-2SNHVHHB.mjs.br +0 -0
  94. package/dist/chunk-2SNHVHHB.mjs.gz +0 -0
  95. package/dist/chunk-C3JR7RMW.js.br +0 -0
  96. package/dist/chunk-C3JR7RMW.js.gz +0 -0
  97. package/dist/chunk-CBGTLSY7.mjs.br +0 -0
  98. package/dist/chunk-CBGTLSY7.mjs.gz +0 -0
  99. package/dist/chunk-DA6DF3EU.js.br +0 -0
  100. package/dist/chunk-DA6DF3EU.js.gz +0 -0
  101. package/dist/chunk-GJHO6HPF.js.br +0 -0
  102. package/dist/chunk-GJHO6HPF.js.gz +0 -0
  103. package/dist/chunk-HYUJVSQJ.js.br +0 -0
  104. package/dist/chunk-HYUJVSQJ.js.gz +0 -0
  105. package/dist/chunk-OSPNGQF3.js.br +0 -0
  106. package/dist/chunk-OSPNGQF3.js.gz +0 -0
  107. package/dist/chunk-VWCUKKR3.mjs.br +0 -0
  108. package/dist/chunk-VWCUKKR3.mjs.gz +0 -0
  109. package/dist/chunk-WRJ76D5S.mjs.br +0 -0
  110. package/dist/chunk-WRJ76D5S.mjs.gz +0 -0
  111. package/dist/chunk-WX3HQHR5.mjs.br +0 -0
  112. package/dist/chunk-WX3HQHR5.mjs.gz +0 -0
@@ -741,6 +741,13 @@ interface Pptx3DScene {
741
741
  * ```
742
742
  */
743
743
  interface Pptx3DShape {
744
+ /**
745
+ * Position of the shape along the Z axis, in EMU (`a:sp3d/@z`, default 0).
746
+ * Independent of {@link extrusionHeight}: it moves the whole shape forward
747
+ * or back in 3D space rather than adding depth to it, most commonly used to
748
+ * stack several shapes at different depths under one `a:scene3d` camera.
749
+ */
750
+ positionZ?: number;
744
751
  /** Extrusion height in EMU. */
745
752
  extrusionHeight?: number;
746
753
  /** Extrusion colour. */
@@ -1281,12 +1288,12 @@ interface TextStyle {
1281
1288
  resolvedParagraphGeometry?: TextStyle;
1282
1289
  fontFamily?: string;
1283
1290
  fontSize?: number;
1284
- /** When true, renderer should shrink text to fit the shape bounds. */
1291
+ /** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
1285
1292
  autoFit?: boolean;
1286
1293
  /** Explicit autofit mode from OOXML body properties.
1287
- * - 'shrink': `a:spAutoFit` shrink text on overflow
1288
- * - 'normal': `a:normAutofit` normal auto-fit (with optional fontScale)
1289
- * - 'none': `a:noAutofit` explicitly no auto-fit (text overflows)
1294
+ * - 'shrink': `a:spAutoFit` - resize the SHAPE to fit the text (never the font)
1295
+ * - 'normal': `a:normAutofit` - shrink the TEXT to fit the shape (via `fontScale`/`lnSpcReduction`)
1296
+ * - 'none': `a:noAutofit` - explicitly no auto-fit (text overflows)
1290
1297
  * - undefined: no autofit element present (inherit from layout/master)
1291
1298
  */
1292
1299
  autoFitMode?: 'shrink' | 'normal' | 'none';
@@ -1677,6 +1684,18 @@ interface TextStyle {
1677
1684
  textBodyScene3d?: Pptx3DScene;
1678
1685
  /** Raw `a:scene3d` subtree used to preserve extensions and unmodelled children. */
1679
1686
  textBodyScene3dXml?: XmlObject;
1687
+ /**
1688
+ * `a:bodyPr/a:flatTx` - an explicit "render this text flat" marker. `sp3d`
1689
+ * and `flatTx` are a mutually exclusive OOXML choice (`EG_Text3D`), so a
1690
+ * shape/run that overrides an inherited 3D text body with `<a:flatTx/>`
1691
+ * carries no `text3d` of its own; without this explicit flag a later
1692
+ * inheritance merge has no signal to stop `text3d`/`textBodyScene3d` from
1693
+ * an ancestor (layout/master) leaking back in, the way `noFill` stops an
1694
+ * inherited fill. A renderer must short-circuit 3D-text application
1695
+ * whenever this is `true`, regardless of what `text3d`/`textBodyScene3d`
1696
+ * otherwise hold.
1697
+ */
1698
+ flatText?: boolean;
1680
1699
  /**
1681
1700
  * Raw `<a:extLst>` subtree captured from `<a:bodyPr>`. Preserved verbatim so
1682
1701
  * authored extensions (e.g. content placeholders, custom application data)
@@ -1952,6 +1971,24 @@ interface PptxElementBase {
1952
1971
  * SDK-created elements.
1953
1972
  */
1954
1973
  placeholderType?: string;
1974
+ /**
1975
+ * `p:nvSpPr/p:nvPr/p:ph/@sz` (lower-cased): `"full"`, `"half"`, or
1976
+ * `"quarter"`. Captured on load for round-trip completeness. Per
1977
+ * ECMA-376 §19.3.1.36 (CT_Placeholder) this size hint is only meaningful
1978
+ * when NO `a:xfrm` exists anywhere in the placeholder's inheritance
1979
+ * chain (slide -> layout -> master); every real-world corpus placeholder
1980
+ * that carries `@sz` already has an explicit `a:xfrm` at the master
1981
+ * level, so no renderer currently derives a size from this field.
1982
+ */
1983
+ placeholderSz?: string;
1984
+ /**
1985
+ * `p:nvSpPr/p:nvPr/p:ph/@orient` (only `"vert"` is meaningful per
1986
+ * `ST_Direction`). Captured on load for round-trip completeness. In
1987
+ * practice every placeholder observed with `orient="vert"` also carries
1988
+ * an explicit `a:bodyPr/@vert`, which already drives vertical-text
1989
+ * rendering, so this field is not currently read by any renderer.
1990
+ */
1991
+ placeholderOrient?: 'vert';
1955
1992
  x: number;
1956
1993
  y: number;
1957
1994
  width: number;
@@ -2414,6 +2451,14 @@ interface PptxChartDataTable {
2414
2451
  showVertBorder?: boolean;
2415
2452
  showOutline?: boolean;
2416
2453
  showKeys?: boolean;
2454
+ /** Table border/fill formatting (`c:dTable/c:spPr`). */
2455
+ spPr?: PptxChartShapeProps;
2456
+ /**
2457
+ * Cell text defaults (`c:dTable/c:txPr/a:p/a:pPr/a:defRPr`). Reuses the same
2458
+ * shape as a legend entry's text override since both are a flat paragraph
2459
+ * default-run-property style (size/bold/italic/font/colour).
2460
+ */
2461
+ txPr?: PptxChartLegendTextStyle;
2417
2462
  }
2418
2463
  /**
2419
2464
  * Line appearance for chart helper lines (drop lines, hi-low lines).
@@ -2572,6 +2617,15 @@ interface PptxChart3DSurface {
2572
2617
  thickness?: number;
2573
2618
  spPr?: PptxChartShapeProps;
2574
2619
  }
2620
+ /**
2621
+ * One colour band for a surface chart (`c:bandFmts/c:bandFmt`,
2622
+ * ECMA-376 §21.2.2.19 / CT_BandFmt). `index` is the band's position
2623
+ * (`c:idx/@val`) among the value axis's major-unit bands, in authored order.
2624
+ */
2625
+ interface PptxChartBandFmt {
2626
+ index: number;
2627
+ spPr?: PptxChartShapeProps;
2628
+ }
2575
2629
  /** Office 2016 ChartEx box-and-whisker series layout options. */
2576
2630
  interface PptxChartBoxWhiskerOptions {
2577
2631
  quartileMethod?: 'inclusive' | 'exclusive';
@@ -2987,9 +3041,14 @@ interface PptxChartData {
2987
3041
  chartType: PptxChartType;
2988
3042
  categories: string[];
2989
3043
  /**
2990
- * Hierarchical category levels in source XML order for ChartEx hierarchy charts.
2991
- * Level 0 contains the leaf labels and remains mirrored by {@link categories}
2992
- * for consumers that only understand a flat category axis.
3044
+ * Hierarchical category levels in source XML order, for both ChartEx
3045
+ * hierarchy charts (`cx:multiLvlStrRef`) and classic multi-level category
3046
+ * axes (`c:cat/c:multiLvlStrRef`, e.g. a PowerPoint Quarter > Month
3047
+ * grouping). Level 0 contains the leaf labels and remains mirrored by
3048
+ * {@link categories} for consumers that only understand a flat category
3049
+ * axis. Parent (grouping) levels are forward-filled: a blank cache slot
3050
+ * continues the previous group's label, matching how the source stores a
3051
+ * merged category header sparsely.
2993
3052
  */
2994
3053
  categoryLevels?: string[][];
2995
3054
  dateCategories?: PptxChartDateCategories;
@@ -3056,6 +3115,8 @@ interface PptxChartData {
3056
3115
  floor?: PptxChart3DSurface;
3057
3116
  sideWall?: PptxChart3DSurface;
3058
3117
  backWall?: PptxChart3DSurface;
3118
+ /** Per-band surface-chart colour overrides (`c:surfaceChart/c:bandFmts`). */
3119
+ bandFmts?: PptxChartBandFmt[];
3059
3120
  /** External data source reference (c:externalData) linking to an external workbook. */
3060
3121
  externalData?: PptxExternalData;
3061
3122
  /**
@@ -3333,6 +3394,16 @@ interface PptxImageEffects {
3333
3394
  contRawXml?: Record<string, unknown>;
3334
3395
  /** Original effect XML, including foreign attributes. */
3335
3396
  rawXml?: XmlObject;
3397
+ /**
3398
+ * Multiplicative alpha percentage (0..100+), read from a nested
3399
+ * `<a:alphaModFix>` inside `contRawXml` when present - the common
3400
+ * real-world shape of `a:alphaMod` (`<a:cont><a:alphaModFix amt="…"/>
3401
+ * </a:cont>`). Derived/read-only: a renderer multiplies the source alpha
3402
+ * by this, distinct from the top-level {@link alphaModFix} sibling
3403
+ * effect. Not written back independently on save; `contRawXml` is what
3404
+ * round-trips.
3405
+ */
3406
+ amt?: number;
3336
3407
  };
3337
3408
  /** Alpha replace (`a:alphaRepl`) — replaces alpha with the given fixed-percent value (0..100). */
3338
3409
  alphaRepl?: number;
@@ -3377,6 +3448,40 @@ interface PptxImageEffects {
3377
3448
  blend: 'over' | 'mult' | 'screen' | 'darken' | 'lighten';
3378
3449
  /** Raw opaque fill XML preserved for round-trip. */
3379
3450
  fillRawXml?: Record<string, unknown>;
3451
+ /**
3452
+ * Resolved hex colour, when the overlay fill is a plain `a:solidFill`
3453
+ * (the common case for a picture-style colour overlay). `undefined` for
3454
+ * a gradient/pattern/picture overlay fill - see {@link resolvedGradient} /
3455
+ * {@link resolvedPattern} instead. `fillRawXml` still round-trips
3456
+ * losslessly regardless of which of the three resolved.
3457
+ */
3458
+ resolvedColor?: string;
3459
+ /** Resolved opacity (0-1) of the `a:solidFill` overlay colour, when resolved. */
3460
+ resolvedOpacity?: number;
3461
+ /**
3462
+ * Resolved gradient, when the overlay fill is `a:gradFill`. A renderer
3463
+ * composites this as an SVG paint server (`<linearGradient>` /
3464
+ * `<radialGradient>`) rather than a flat flood colour.
3465
+ */
3466
+ resolvedGradient?: {
3467
+ type: 'linear' | 'radial';
3468
+ /** Gradient angle in degrees (`a:lin/@ang`), for a linear gradient. */
3469
+ angle?: number;
3470
+ stops: Array<{
3471
+ color: string;
3472
+ position: number;
3473
+ opacity?: number;
3474
+ }>;
3475
+ };
3476
+ /**
3477
+ * Resolved preset pattern, when the overlay fill is `a:pattFill`. A
3478
+ * renderer composites this as a tiled SVG paint server.
3479
+ */
3480
+ resolvedPattern?: {
3481
+ preset: string;
3482
+ foreground?: string;
3483
+ background?: string;
3484
+ };
3380
3485
  };
3381
3486
  /** Blur (`a:blur`) — radius in EMU and grow flag. */
3382
3487
  blur?: {
@@ -3456,6 +3561,13 @@ interface PptxImageProperties {
3456
3561
  tileFlip?: 'none' | 'x' | 'y' | 'xy';
3457
3562
  /** Image tiling alignment. */
3458
3563
  tileAlignment?: string;
3564
+ /**
3565
+ * Print-resolution hint in DPI (`a:blipFill/@dpi`). PowerPoint records this
3566
+ * when it downsamples an embedded image for a target print quality; it has
3567
+ * no on-screen rendering effect (a `0`/absent value means "use the source
3568
+ * image's native resolution"). Parsed for round-trip / API fidelity only.
3569
+ */
3570
+ dpi?: number;
3459
3571
  /** Image recolour/artistic effect properties. */
3460
3572
  imageEffects?: PptxImageEffects;
3461
3573
  /** Crop-to-shape — CSS clip-path shape name. */
@@ -3636,6 +3748,25 @@ interface PptxSmartArtChoose {
3636
3748
  } | null;
3637
3749
  rawXml?: XmlObject;
3638
3750
  }
3751
+ /** A single `dgm:adj/@val` adjustment, keyed by its `@idx` (1-based, like `a:gd`). */
3752
+ interface PptxSmartArtShapeAdjustment {
3753
+ index: number;
3754
+ value: number;
3755
+ }
3756
+ /**
3757
+ * Typed DiagramML CT_Shape data (`dgm:shape`) attached to a layout node: the
3758
+ * per-node preset geometry override real (and third-party/custom) layout
3759
+ * definitions use so a layoutNode can be e.g. an ellipse or a chevron instead
3760
+ * of the arranger family's hardcoded default shape.
3761
+ */
3762
+ interface PptxSmartArtLayoutNodeShape {
3763
+ /** `dgm:shape/@type`: a preset geometry name (`roundRect`, `ellipse`, `chevron`, `conn`, ...). */
3764
+ presetGeometry?: string;
3765
+ /** `dgm:adjLst/dgm:adj` entries (adjustment index -> value, as authored). */
3766
+ adjustments?: PptxSmartArtShapeAdjustment[];
3767
+ /** `dgm:shape/@hideGeom`: the shape is present only to size text, never painted. */
3768
+ hideGeometry?: boolean;
3769
+ }
3639
3770
  /** Identity and ordering metadata from DiagramML CT_LayoutNode. */
3640
3771
  interface PptxSmartArtLayoutNode {
3641
3772
  name?: string;
@@ -3647,6 +3778,8 @@ interface PptxSmartArtLayoutNode {
3647
3778
  choose?: PptxSmartArtChoose[];
3648
3779
  constraints?: PptxSmartArtConstraint[];
3649
3780
  rules?: PptxSmartArtNumericRule[];
3781
+ /** `dgm:shape`: this node's own preset geometry override, when present. */
3782
+ shape?: PptxSmartArtLayoutNodeShape;
3650
3783
  children?: PptxSmartArtLayoutNode[];
3651
3784
  }
3652
3785
  /** Metadata and root node from DiagramML CT_DiagramDefinition. */
@@ -3770,6 +3903,61 @@ interface PptxSmartArtNodeStyle {
3770
3903
  /** Italic emphasis override for the node's runs. */
3771
3904
  italic?: boolean;
3772
3905
  }
3906
+ /**
3907
+ * Manual layout override for a `type="pres"` presentation point, read from its
3908
+ * `dgm:prSet` attributes. PowerPoint writes these when the user drags, resizes,
3909
+ * rotates, or flips a SmartArt node by hand in its own diagram editor; without
3910
+ * them the node silently reverts to its algorithmic position whenever there is
3911
+ * no cached `dsp:` drawing part to fall back on.
3912
+ *
3913
+ * Every field is optional: only the attributes actually present on `prSet` are
3914
+ * populated. Angle and scale/factor units are already normalised to degrees and
3915
+ * plain ratios (a `custScaleX="150000"` becomes `scaleX: 1.5`), so a consumer
3916
+ * never has to know the raw `60000ths-of-a-degree` / `100000ths-of-a-percent`
3917
+ * XML encodings.
3918
+ *
3919
+ * @example
3920
+ * ```ts
3921
+ * const custom: SmartArtNodeCustomLayout = { angle: 15, scaleX: 1.2 };
3922
+ * // => a node manually rotated 15 degrees and widened 20% in PowerPoint
3923
+ * ```
3924
+ */
3925
+ interface SmartArtNodeCustomLayout {
3926
+ /** `custAng`: additional rotation in degrees. */
3927
+ angle?: number;
3928
+ /** `custScaleX`: horizontal scale ratio (1 = no change). */
3929
+ scaleX?: number;
3930
+ /** `custScaleY`: vertical scale ratio (1 = no change). */
3931
+ scaleY?: number;
3932
+ /** `custSzX`: horizontal size ratio, layered on top of {@link scaleX}. */
3933
+ sizeX?: number;
3934
+ /** `custSzY`: vertical size ratio, layered on top of {@link scaleY}. */
3935
+ sizeY?: number;
3936
+ /** `custFlipHor`: the node was manually mirrored horizontally. */
3937
+ flipHorizontal?: boolean;
3938
+ /** `custFlipVert`: the node was manually mirrored vertically. */
3939
+ flipVertical?: boolean;
3940
+ /** `custLinFactX`: manual position nudge along X, as a fraction of the container width. */
3941
+ linearFactorX?: number;
3942
+ /** `custLinFactY`: manual position nudge along Y, as a fraction of the container height. */
3943
+ linearFactorY?: number;
3944
+ /**
3945
+ * `custLinFactNeighborX`: spacing compensation applied to a NEIGHBOURING
3946
+ * node when this one is resized. Parsed for round-trip completeness; not
3947
+ * applied by the per-node final transform (it has no effect on this node's
3948
+ * own geometry; folding it into a neighbour's geometry would require
3949
+ * whole-layout awareness the final transform pass does not have).
3950
+ */
3951
+ linearFactorNeighborX?: number;
3952
+ /** `custLinFactNeighborY`: see {@link linearFactorNeighborX} (Y axis). */
3953
+ linearFactorNeighborY?: number;
3954
+ /** `custRadScaleRad`: manual radius scale ratio for a radial/cycle node. */
3955
+ radialScaleRadius?: number;
3956
+ /** `custRadScaleInc`: manual angular-position nudge for a radial/cycle node. */
3957
+ radialScaleIncrement?: number;
3958
+ /** `custT`: whether `prSet` declares a custom transform is present at all. */
3959
+ hasCustomTransform?: boolean;
3960
+ }
3773
3961
  /**
3774
3962
  * A single node in the SmartArt data model.
3775
3963
  *
@@ -3795,6 +3983,16 @@ interface PptxSmartArtNode {
3795
3983
  children?: PptxSmartArtNode[];
3796
3984
  /** Node type from `@_type` attribute (e.g. "doc", "node", "asst", "pres"). */
3797
3985
  nodeType?: string;
3986
+ /**
3987
+ * The node's own quick-style role (`dgm:prSet/@presStyleLbl` from its
3988
+ * paired `type="pres"` presentation point, resolved via a `presOf`
3989
+ * connection back to this content point). Structural names like `node1`,
3990
+ * `asst2`, `bgShp`, `revTx`; distinct from {@link nodeType}, which is the
3991
+ * data-model `@_type` ("node"/"asst"/...). Used to pick this node's own
3992
+ * colour list from a colour transform's per-role palettes instead of the
3993
+ * generic cycled palette (see `applySmartArtRoleColors`).
3994
+ */
3995
+ styleRole?: string;
3798
3996
  /**
3799
3997
  * Per-run text + run-properties for the node's first paragraph, captured at
3800
3998
  * parse time. When the joined run text still equals {@link text} (the node
@@ -3815,6 +4013,14 @@ interface PptxSmartArtNode {
3815
4013
  * it round-trips.
3816
4014
  */
3817
4015
  style?: PptxSmartArtNodeStyle;
4016
+ /**
4017
+ * Manual layout override read from the node's `dgm:prSet` `cust*`
4018
+ * attributes (drag/resize/rotate/flip performed in PowerPoint's own diagram
4019
+ * editor). Applied as a final transform after algorithmic layout by
4020
+ * {@link module:smartart-layout-interpreter-custom} so it survives even
4021
+ * when there is no cached `dsp:` drawing to fall back on.
4022
+ */
4023
+ customLayout?: SmartArtNodeCustomLayout;
3818
4024
  }
3819
4025
  //#endregion
3820
4026
  //#region src/core/types/smart-art-style-definition.d.ts
@@ -3877,6 +4083,18 @@ interface PptxSmartArtColorTransform extends PptxSmartArtDefinitionMetadata {
3877
4083
  lineInterpolation?: PptxSmartArtColorListMetadata;
3878
4084
  /** Ordered CT_CTStyleLabel metadata. */
3879
4085
  labels?: PptxSmartArtColorStyleLabel[];
4086
+ /**
4087
+ * Every `styleLbl`'s own resolved fill/line colour list, keyed by name
4088
+ * (e.g. `node1`, `asst0`, `bgShp`, `revTx`). Unlike {@link fillColors} /
4089
+ * {@link lineColors} (which collapse to ONE "primary" node-role list),
4090
+ * this keeps every role so a node can be coloured from its OWN role's
4091
+ * palette (see `PptxSmartArtNode.styleRole` and `applySmartArtRoleColors`)
4092
+ * instead of a generic cycled colour.
4093
+ */
4094
+ roleColors?: Record<string, {
4095
+ fill: string[];
4096
+ line: string[];
4097
+ }>;
3880
4098
  }
3881
4099
  /** Typed CT_StyleDefinition metadata and legacy rendering hint. */
3882
4100
  interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
@@ -3961,6 +4179,14 @@ interface PptxSmartArtConnection {
3961
4179
  siblingTransitionId?: string | null;
3962
4180
  /** Layout presentation identifier used by presentation connections. */
3963
4181
  presentationId?: string | null;
4182
+ /**
4183
+ * Connector text, read from the linked `parTrans`/`sibTrans` transition
4184
+ * point's `dgm:t` (via {@link parentTransitionId} / {@link siblingTransitionId}).
4185
+ * PowerPoint's own diagram editor lets a user type text directly onto an
4186
+ * org-chart relationship connector; `undefined` when the transition point
4187
+ * carries no text. Written back to that point on save.
4188
+ */
4189
+ label?: string;
3964
4190
  }
3965
4191
  /**
3966
4192
  * A pre-computed shape from `ppt/diagrams/drawing*.xml`.
@@ -4281,8 +4507,8 @@ interface PptxTableCellStyle {
4281
4507
  textGlowRadius?: number;
4282
4508
  /** Cell text glow opacity (0-1). */
4283
4509
  textGlowOpacity?: number;
4284
- /** Cell fill mode: solid, gradient, pattern, or none. */
4285
- fillMode?: 'solid' | 'gradient' | 'pattern' | 'none';
4510
+ /** Cell fill mode: solid, gradient, pattern, image, or none. */
4511
+ fillMode?: 'solid' | 'gradient' | 'pattern' | 'image' | 'none';
4286
4512
  /** Gradient fill stops (colours with positions). */
4287
4513
  gradientFillStops?: Array<{
4288
4514
  color: string;
@@ -4315,6 +4541,23 @@ interface PptxTableCellStyle {
4315
4541
  patternFillForeground?: string;
4316
4542
  /** Pattern fill background colour. */
4317
4543
  patternFillBackground?: string;
4544
+ /**
4545
+ * Image fill (`a:tcPr/a:blipFill`, CT_TableCellProperties). Resolved
4546
+ * archive-relative path (or external `http(s):`/`data:` URL) for the
4547
+ * cell's background image, from `a:blipFill/a:blip/@r:embed` (or
4548
+ * `@r:link`). Present when `fillMode` is `'image'`.
4549
+ *
4550
+ * The parser resolves this synchronously (path only, no binary read);
4551
+ * a viewer's load pipeline resolves it further to a displayable
4552
+ * `data:`/`blob:` URL, written back to {@link backgroundImageFillData}.
4553
+ */
4554
+ backgroundImageFillPath?: string;
4555
+ /**
4556
+ * Displayable image data (`data:` or `blob:` URL) for an image cell
4557
+ * fill, once resolved by the load pipeline. Renderers should prefer
4558
+ * this over {@link backgroundImageFillPath} when both are present.
4559
+ */
4560
+ backgroundImageFillData?: string;
4318
4561
  /**
4319
4562
  * Cell 3D bevel + lighting from `a:tcPr/a:cell3D` (CT_Cell3D,
4320
4563
  * ECMA-376 §21.1.3.1). Rendered as a CSS bevel treatment.
@@ -4540,6 +4783,24 @@ interface ParsedTableStyleFill {
4540
4783
  gradient?: ParsedTableStyleGradient;
4541
4784
  /** Preset pattern fill parsed from `a:pattFill`. */
4542
4785
  pattern?: ParsedTableStylePattern;
4786
+ /** Image texture fill parsed from `a:blipFill`. */
4787
+ image?: ParsedTableStyleImage;
4788
+ }
4789
+ /**
4790
+ * An image texture fill parsed from a table style section's `a:blipFill`.
4791
+ *
4792
+ * `ppt/tableStyles.xml` is a presentation-level part parsed once (not
4793
+ * per-slide), so this mirrors the per-CELL `a:tcPr/a:blipFill` two-field lazy
4794
+ * pattern (`PptxTableCellStyle.backgroundImageFillPath` /
4795
+ * `backgroundImageFillData`): `path` starts out as a raw archive-relative
4796
+ * path (or an already-external `http(s):`/`data:` URL), and a load pipeline
4797
+ * patches it to a displayable URL in `data` once resolved.
4798
+ */
4799
+ interface ParsedTableStyleImage {
4800
+ /** Archive-relative path, or an already-displayable external/data URL. */
4801
+ path?: string;
4802
+ /** Displayable URL once a load pipeline has resolved `path`. */
4803
+ data?: string;
4543
4804
  }
4544
4805
  /** A single colour stop within a {@link ParsedTableStyleGradient}. */
4545
4806
  interface ParsedTableStyleGradientStop {
@@ -4884,7 +5145,12 @@ interface ChartPptxElement extends PptxElementBase {
4884
5145
  * A SmartArt diagram embedded via a `<p:graphicFrame>`.
4885
5146
  *
4886
5147
  * SmartArt data is extracted from `dgm:dataModel` parts. The editor
4887
- * renders a simplified view; full editing is not supported.
5148
+ * supports real structural editing (adding, removing and reordering nodes,
5149
+ * editing node text, and switching layout presets) with a lossless
5150
+ * `ptLst` round-trip. When the file carries PowerPoint's own pre-computed
5151
+ * drawing part, that exact layout is used; otherwise an algorithmic layout
5152
+ * engine approximates it, so complex custom layouts may not match
5153
+ * PowerPoint pixel-for-pixel.
4888
5154
  */
4889
5155
  interface SmartArtPptxElement extends PptxElementBase {
4890
5156
  type: 'smartArt';
@@ -4961,6 +5227,12 @@ interface OlePptxElement extends PptxElementBase {
4961
5227
  oleEmbeddedMimeType?: string;
4962
5228
  /** Size of the embedded payload in bytes. */
4963
5229
  oleEmbeddedByteSize?: number;
5230
+ /**
5231
+ * `p:link/@followColorScheme` (`ST_OleObjectFollowColorScheme`): whether a
5232
+ * LINKED OLE object's icon recolours to match the presentation theme.
5233
+ * Only meaningful when {@link isLinked} is `true`. ECMA-376 §19.3.1.28.
5234
+ */
5235
+ oleFollowColorScheme?: 'none' | 'full' | 'textAndBackground';
4964
5236
  /** Unrecognised graphicFrame extLst extensions, captured verbatim for round-trip. */
4965
5237
  extensionXml?: PptxGraphicFrameExtension[];
4966
5238
  }
@@ -5262,6 +5534,16 @@ interface PptxNotesMaster {
5262
5534
  headerFooter?: PptxHeaderFooterFlags;
5263
5535
  /** Colour map from `<p:clrMap>` (12 alias attributes). Applied at save time. */
5264
5536
  clrMap?: Record<string, string>;
5537
+ /**
5538
+ * Notes text defaults from `<p:notesStyle>` (`CT_TextListStyle`, ECMA-376
5539
+ * §19.3.1.34): the same `a:defPPr` + `a:lvl1pPr`..`a:lvl9pPr` shape as
5540
+ * {@link PptxMasterTextStyles}'s per-category styles, keyed 0-8 with the
5541
+ * default at `-1`. Governs the notes body placeholder's font size, indent
5542
+ * levels, and bullet style wherever a notes slide does not override them.
5543
+ * Parsed read-only for the render cascade; the save side preserves the
5544
+ * original `<p:notesStyle>` XML verbatim rather than re-serialising this.
5545
+ */
5546
+ notesStyle?: PptxTextStyleLevels;
5265
5547
  }
5266
5548
  /**
5267
5549
  * Parsed handout master from `ppt/handoutMasters/handoutMaster1.xml`.
@@ -5345,6 +5627,14 @@ interface PptxSlideMaster {
5345
5627
  * accent1-6, hlink, folHlink). Applied at save time when present.
5346
5628
  */
5347
5629
  clrMap?: Record<string, string>;
5630
+ /**
5631
+ * Whether the master is marked as preserved (prevent auto-deletion,
5632
+ * `@preserve`). Mirrors {@link PptxSlideLayout.preserve}: PowerPoint
5633
+ * silently drops an unused master unless this is set.
5634
+ *
5635
+ * ECMA-376 §19.3.1.38 (CT_SlideMaster).
5636
+ */
5637
+ preserve?: boolean;
5348
5638
  }
5349
5639
  /**
5350
5640
  * Per-level paragraph properties for a text style category.
@@ -5534,6 +5824,35 @@ type PptxGraphicBuild = {
5534
5824
  animateBackground: boolean;
5535
5825
  rawXml?: XmlObject;
5536
5826
  };
5827
+ /**
5828
+ * A single `p:tmpl` timing template parsed from a TEXT `p:bldP/p:tmplLst`
5829
+ * (CT_TLTemplate, ECMA-376 §19.5.85; the list itself is CT_TLTemplateList,
5830
+ * §19.5.84).
5831
+ *
5832
+ * PowerPoint writes these as the timing PowerPoint would apply to a build
5833
+ * level that does not yet have an instantiated effect, so that promoting or
5834
+ * demoting an outline paragraph, or adding a new bullet at a level with no
5835
+ * prior animation, has a default to clone. They are not consulted at
5836
+ * playback: the animation actually shown for every paragraph level already
5837
+ * visible on the slide is the real, instantiated `p:tnLst` under
5838
+ * `p:timing/p:tnLst`, which the rest of this parser already models in full.
5839
+ *
5840
+ * The nested time-node tree under each template's own `p:tnLst` is kept as
5841
+ * a preserved `XmlObject` rather than deep-parsed into
5842
+ * {@link PptxNativeAnimation} records: it is schema-identical to the
5843
+ * top-level timing tree but scoped to a template that is never itself
5844
+ * executed, so structurally modelling it would stand up a second, unused
5845
+ * parallel animation model. Parsing stops at typed round-trip; see
5846
+ * `docs/guide/limitations.md`.
5847
+ */
5848
+ interface PptxTimingTemplate {
5849
+ /** Build level this template targets, from `p:tmpl/@lvl` (ST_TLLevel, default 0). */
5850
+ level: number;
5851
+ /** Preserved `p:tnLst` (CT_TimeNodeList) subtree, verbatim. */
5852
+ timeNodeList: XmlObject;
5853
+ /** Preserved `p:tmpl` XML node (its attributes plus any unmodelled children). */
5854
+ rawXml?: XmlObject;
5855
+ }
5537
5856
  /**
5538
5857
  * Parsed native animation record from `p:timing / p:tnLst`.
5539
5858
  *
@@ -5644,6 +5963,58 @@ interface PptxNativeAnimation {
5644
5963
  soundPath?: string;
5645
5964
  /** Whether to stop any currently playing sound (`p:endSnd`). */
5646
5965
  stopSound?: boolean;
5966
+ /**
5967
+ * End-state behaviour from `p:cTn/@fill` (ST_TLTimeNodeFillType, ECMA-376
5968
+ * §19.5.27). `hold`/`freeze` mean the effect's final frame persists after
5969
+ * it finishes; `remove` (the default when absent) means the target reverts
5970
+ * to its pre-effect appearance. `transition` behaves like `hold` until the
5971
+ * next time node starts. Absent means the OOXML default (`remove`).
5972
+ */
5973
+ fill?: 'remove' | 'freeze' | 'hold' | 'transition';
5974
+ /**
5975
+ * Restart behaviour from `p:cTn/@restart` (ST_TLTimeNodeRestartType).
5976
+ * Absent means the OOXML default (`always`).
5977
+ */
5978
+ restart?: 'always' | 'whenNotActive' | 'never';
5979
+ /**
5980
+ * Repeat duration in milliseconds from `p:cTn/@repeatDur`. `Infinity`
5981
+ * represents the literal `"indefinite"` token.
5982
+ */
5983
+ repeatDurMs?: number;
5984
+ /**
5985
+ * Playback speed multiplier from `p:cTn/@spd` (ST_Percentage, normalized
5986
+ * from OOXML's 1000ths-of-a-percent storage to a plain percentage, e.g.
5987
+ * `150` for 150% / double speed). Absent means normal (100%) speed.
5988
+ */
5989
+ speedPct?: number;
5990
+ /**
5991
+ * Reverse the paragraph build order from `p:bldP/@rev` (TEXT build only).
5992
+ * Not to be confused with {@link PptxGraphicBuild}'s `reverse` field, which
5993
+ * carries the unrelated `p:bldDgm`/`@rev` DIAGRAM-build reverse flag.
5994
+ */
5995
+ buildReverse?: boolean;
5996
+ /**
5997
+ * Auto-advance time in milliseconds from `p:bldP/@advAuto`. `Infinity`
5998
+ * represents the literal `"indefinite"` token. Absent means the build
5999
+ * step waits for a click.
6000
+ */
6001
+ buildAdvAutoMs?: number;
6002
+ /**
6003
+ * Per-build-level timing templates from a TEXT `p:bldP/p:tmplLst`
6004
+ * (ECMA-376 §19.5.84 CT_TLTemplateList). Parsed for round-trip only; see
6005
+ * {@link PptxTimingTemplate} for why they are not consulted at playback.
6006
+ */
6007
+ buildTemplates?: PptxTimingTemplate[];
6008
+ /**
6009
+ * Whether the enclosing `p:seq` allows concurrent play with its siblings,
6010
+ * from `p:seq/@concurrent`. Parsed for round-trip; not yet honoured by
6011
+ * playback (see `docs/guide/limitations.md`).
6012
+ */
6013
+ seqConcurrent?: boolean;
6014
+ /** Next-action behaviour from `p:seq/@nextAc` (ST_TLNextActionType). */
6015
+ seqNextAction?: 'none' | 'seek';
6016
+ /** Previous-action behaviour from `p:seq/@prevAc` (ST_TLPreviousActionType). */
6017
+ seqPrevAction?: 'none' | 'skipTimeNode';
5647
6018
  /**
5648
6019
  * Whether the enclosing click-level group (a direct `p:par` child of the
5649
6020
  * `mainSeq`) begins automatically when the slide appears, rather than waiting
@@ -5734,6 +6105,55 @@ interface PptxNativeAnimation {
5734
6105
  * subsequent peer nodes are sequenced when serialised back to OOXML.
5735
6106
  */
5736
6107
  afterEffect?: boolean;
6108
+ /**
6109
+ * "After animation" end-state behaviour carried over from the matching
6110
+ * {@link PptxElementAnimation.afterAnimation} entry for this effect's
6111
+ * element. Not populated by the native-timing parser itself (there is no
6112
+ * single `p:cTn` attribute for it): `applyAfterAnimationFromEditorList` in
6113
+ * `pptx-viewer-shared` merges it in from the editor's per-element
6114
+ * animation list before playback, since that is the model the animation
6115
+ * panel writes `afterAnimation` into.
6116
+ */
6117
+ afterAnimationAction?: PptxAfterAnimationAction;
6118
+ /** Dim-to color hex, present when {@link afterAnimationAction} is `dimToColor`. */
6119
+ afterAnimationColor?: string;
6120
+ /**
6121
+ * Parsed `p:animEffect` filter descriptor. `presetId`/`presetClass` remain
6122
+ * the primary effect selector (see `resolveEffect` in `pptx-viewer-shared`);
6123
+ * this is the fallback used when a preset table lookup misses (unmapped or
6124
+ * absent `presetId`), which happens for decks authored by tools other than
6125
+ * PowerPoint that only emit the SMIL-style filter string.
6126
+ */
6127
+ effectFilter?: PptxAnimationEffectFilter;
6128
+ }
6129
+ /**
6130
+ * Parsed `p:animEffect/@filter` (+ `@transition`) descriptor. ECMA-376
6131
+ * describes `@filter` as a free-form string of the form `family(subtype)`,
6132
+ * optionally followed by `;`-separated fallback candidates (only the first
6133
+ * is honoured, per ECMA-376 S19.5.3's "first supported filter wins" rule).
6134
+ *
6135
+ * @example
6136
+ * ```ts
6137
+ * const f: PptxAnimationEffectFilter = { family: 'wipe', subtype: 'up', transition: 'in', raw: 'wipe(up)' };
6138
+ * ```
6139
+ */
6140
+ interface PptxAnimationEffectFilter {
6141
+ /** Filter family name (e.g. `"wipe"`, `"barn"`, `"checkerboard"`), lowercased. */
6142
+ family: string;
6143
+ /**
6144
+ * Parenthesised subtype/direction token verbatim (e.g. `"up"`,
6145
+ * `"inVertical"`, `"across"`, `"4"`). Absent when the filter has no
6146
+ * subtype (e.g. bare `"dissolve"`).
6147
+ */
6148
+ subtype?: string;
6149
+ /**
6150
+ * `p:animEffect/@transition`: `"in"` reveals the target (the OOXML
6151
+ * default when the attribute is omitted), `"out"` conceals it, `"none"`
6152
+ * applies the filter without a visibility change (a static filter pass).
6153
+ */
6154
+ transition?: 'in' | 'out' | 'none';
6155
+ /** Raw filter string exactly as authored, for round-trip/debugging. */
6156
+ raw: string;
5737
6157
  }
5738
6158
  /**
5739
6159
  * Single keyframe parsed from a `p:tav` element (CT_TLTimeAnimateValue).
@@ -6888,10 +7308,12 @@ interface PptxSlide {
6888
7308
  */
6889
7309
  backgroundPattern?: PptxSlideBackgroundPattern;
6890
7310
  /**
6891
- * `<p:bgPr/@shadeToTitle>` boolean flag instructing the renderer to
7311
+ * `<p:bgPr/@shadeToTitle>`: boolean flag instructing the renderer to
6892
7312
  * shade the background toward the title placeholder colour. Captured
6893
- * for lossless round-trip; the React renderer currently treats it as
6894
- * a passthrough hint.
7313
+ * for lossless round-trip only; no renderer applies the visual effect.
7314
+ * Documented as a known no-op in `docs/guide/limitations.md` (legacy
7315
+ * PowerPoint 97-2003 hint, not observed in any real-world corpus file
7316
+ * and not settable from any modern PowerPoint UI).
6895
7317
  *
6896
7318
  * ECMA-376 §19.3.1.2 (CT_BackgroundProperties).
6897
7319
  */
@@ -6930,6 +7352,13 @@ interface PptxSlide {
6930
7352
  backgroundShowAnimation?: boolean;
6931
7353
  /** Whether master slide shapes should be shown on this slide (`p:sld/@showMasterSp`). */
6932
7354
  showMasterShapes?: boolean;
7355
+ /**
7356
+ * Whether inherited master placeholder animations should replay on this
7357
+ * slide (`p:sld/@showMasterPhAnim`). Distinct from {@link showMasterShapes}:
7358
+ * this governs animation timing, not shape visibility. Mirrors
7359
+ * `p:sldLayout/@showMasterPhAnim`, ECMA-376 §19.3.1.38.
7360
+ */
7361
+ showMasterPhAnim?: boolean;
6933
7362
  /** Drawing guides parsed from slide extension list. */
6934
7363
  guides?: PptxDrawingGuide[];
6935
7364
  /** When explicitly `false`, the slide is unmodified and save can skip re-serialization. */
@@ -7055,11 +7484,6 @@ interface PptxPresentationProperties {
7055
7484
  printProperties?: PptxPresentationPrintProperties | null;
7056
7485
  /** Most-recently-used colours from the presentation palette. */
7057
7486
  mruColors?: string[];
7058
- /** Grid spacing in EMUs (cx, cy). Default is 914400 / 8 = 114300. */
7059
- gridSpacing?: {
7060
- cx: number;
7061
- cy: number;
7062
- };
7063
7487
  /** Pen colour for presentation mode annotations (from `p:showPr/p:penClr`). */
7064
7488
  penColor?: string;
7065
7489
  /** Kiosk auto-restart interval in milliseconds (from `p:kiosk/@restart`). Only meaningful when showType is "kiosk". */
@@ -7267,6 +7691,29 @@ interface PptxData {
7267
7691
  embeddedFonts?: PptxEmbeddedFont[];
7268
7692
  /** Typed `p:embeddedFontLst` package metadata, including unresolved variants. */
7269
7693
  embeddedFontList?: PptxEmbeddedFontList;
7694
+ /**
7695
+ * `p:presentation/@embedTrueTypeFonts` (ECMA-376 §19.2.1.26): the author's
7696
+ * saved preference that TrueType fonts referenced by the deck be embedded.
7697
+ * `undefined` when the attribute is absent (spec default `false`).
7698
+ *
7699
+ * This is purely declarative in this library: fonts are only ever embedded
7700
+ * when the caller explicitly supplies `embeddedFontList`/`embeddedFonts`
7701
+ * (there is no automatic embed-on-save), so toggling this flag does not
7702
+ * gate any embedding behaviour of its own here - it only round-trips the
7703
+ * author's stated preference, the same way real PowerPoint reads it back
7704
+ * as a checkbox state rather than a trigger. See `@saveSubsetFonts`,
7705
+ * which is a separate, deliberately unimplemented flag (no glyph
7706
+ * subsetting) that does not interact with this one.
7707
+ */
7708
+ embedTrueTypeFonts?: boolean;
7709
+ /**
7710
+ * Presentation-level default text style (`p:defaultTextStyle`): the
7711
+ * last-resort paragraph/run-property fallback for every shape (placeholder
7712
+ * or not) whose local and inherited cascade leaves a field undefined.
7713
+ * Keyed the same way as {@link PptxMasterTextStyles} categories: `-1` is
7714
+ * `a:defPPr`, `0`-`8` are `a:lvl1pPr`-`a:lvl9pPr`.
7715
+ */
7716
+ defaultTextStyle?: PptxTextStyleLevels;
7270
7717
  /** Most-recently-used colour list from presentation properties. */
7271
7718
  mruColors?: string[];
7272
7719
  /** Parsed notes master data if present in the PPTX. */
@@ -8116,6 +8563,19 @@ interface PptxHandlerSaveOptions {
8116
8563
  kinsoku?: PptxKinsoku | null;
8117
8564
  /** Write-protection verifier. Set to `null` to remove, `undefined` to preserve existing. */
8118
8565
  modifyVerifier?: PptxModifyVerifier | null;
8566
+ /**
8567
+ * `p:presentation/@embedTrueTypeFonts` to write. `undefined` preserves
8568
+ * whatever was loaded (or omits the attribute for a brand-new deck);
8569
+ * purely declarative here, see {@link PptxData.embedTrueTypeFonts}.
8570
+ */
8571
+ embedTrueTypeFonts?: boolean;
8572
+ /**
8573
+ * Presentation-level default text style edits to save back to
8574
+ * `p:defaultTextStyle`. Only the levels present in the map are touched;
8575
+ * omitted levels and any unmodelled XML on an edited level survive
8576
+ * untouched. See {@link PptxData.defaultTextStyle}.
8577
+ */
8578
+ defaultTextStyle?: PptxTextStyleLevels;
8119
8579
  /** View properties to save back to ppt/viewProps.xml. */
8120
8580
  viewProperties?: PptxViewProperties;
8121
8581
  /**
@@ -9573,9 +10033,10 @@ interface TouchGestureCallbacks {
9573
10033
  /**
9574
10034
  * Dropdown ids for the insert-chart menu. Distinct from `PptxChartType`
9575
10035
  * because PowerPoint offers Column (vertical) and Bar (horizontal) as two
9576
- * entries over the same underlying `'bar'` chart type.
10036
+ * entries over the same underlying `'bar'` chart type. The six ChartEx ids
10037
+ * (`histogram` through `regionMap`) map one-to-one onto their chart type.
9577
10038
  */
9578
- type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter';
10039
+ type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'histogram' | 'funnel' | 'treemap' | 'sunburst' | 'boxWhisker' | 'regionMap';
9579
10040
  /** In-memory clipboard payload stored when an element is copied or cut. */
9580
10041
  interface ElementClipboardPayload {
9581
10042
  element: PptxElement;
@@ -11617,6 +12078,14 @@ interface ViewerCoreState {
11617
12078
  /** Presentation-level properties (loop, show type, subtitles, etc.). */
11618
12079
  presentationProperties: PptxPresentationProperties;
11619
12080
  setPresentationProperties: React$1.Dispatch<React$1.SetStateAction<PptxPresentationProperties>>;
12081
+ /**
12082
+ * View properties parsed from `ppt/viewProps.xml` (`p:viewPr`): grid
12083
+ * spacing, snap/guide toggles, last view, splitter state, etc. This is the
12084
+ * ONLY correct source for `gridSpacing` -- `p:gridSpacing` lives under
12085
+ * `p:viewPr`, never under `p:presentationPr`.
12086
+ */
12087
+ viewProperties: PptxViewProperties | undefined;
12088
+ setViewProperties: React$1.Dispatch<React$1.SetStateAction<PptxViewProperties | undefined>>;
11620
12089
  /** Notes master slide definition (background, elements, styles). */
11621
12090
  notesMaster: PptxNotesMaster | undefined;
11622
12091
  setNotesMaster: React$1.Dispatch<React$1.SetStateAction<PptxNotesMaster | undefined>>;
@@ -11850,6 +12319,7 @@ interface UseLoadContentInput {
11850
12319
  setActiveCustomShowId: React.Dispatch<React.SetStateAction<string | null>>;
11851
12320
  setSections: React.Dispatch<React.SetStateAction<PptxSection[]>>;
11852
12321
  setPresentationProperties: React.Dispatch<React.SetStateAction<PptxPresentationProperties>>;
12322
+ setViewProperties: React.Dispatch<React.SetStateAction<PptxViewProperties | undefined>>;
11853
12323
  setNotesMaster: React.Dispatch<React.SetStateAction<PptxNotesMaster | undefined>>;
11854
12324
  setHandoutMaster: React.Dispatch<React.SetStateAction<PptxHandoutMaster | undefined>>;
11855
12325
  setNotesCanvasSize: React.Dispatch<React.SetStateAction<CanvasSize | undefined>>;
@@ -11881,7 +12351,7 @@ interface UseLoadContentInput {
11881
12351
  interface UseLoadContentResult {
11882
12352
  handlerRef: React.MutableRefObject<PptxHandler | null>;
11883
12353
  }
11884
- declare function useLoadContent({ content, clearSelection, history, setSlides, setTemplateElementsBySlideId, mediaDataUrls, setCanvasSize, setSlideSizeEmu, setHeaderFooter, setLayoutOptions, setSlideMasters, setTheme, setTableStyleMap, setThemeOptions, setCustomShows, setActiveCustomShowId, setSections, setPresentationProperties, setNotesMaster, setHandoutMaster, setNotesCanvasSize, setCustomProperties, setTagCollections, setCoreProperties, setAppProperties, setEmbeddedFonts, setActiveSlideIndex, setHasMacros, setHasDigitalSignatures, setDigitalSignatureCount, setGuides, setLoading, setError, setIsDirty, setIsEncrypted, onContentApplied }: UseLoadContentInput): UseLoadContentResult;
12354
+ declare function useLoadContent({ content, clearSelection, history, setSlides, setTemplateElementsBySlideId, mediaDataUrls, setCanvasSize, setSlideSizeEmu, setHeaderFooter, setLayoutOptions, setSlideMasters, setTheme, setTableStyleMap, setThemeOptions, setCustomShows, setActiveCustomShowId, setSections, setPresentationProperties, setViewProperties, setNotesMaster, setHandoutMaster, setNotesCanvasSize, setCustomProperties, setTagCollections, setCoreProperties, setAppProperties, setEmbeddedFonts, setActiveSlideIndex, setHasMacros, setHasDigitalSignatures, setDigitalSignatureCount, setGuides, setLoading, setError, setIsDirty, setIsEncrypted, onContentApplied }: UseLoadContentInput): UseLoadContentResult;
11885
12355
  //#endregion
11886
12356
  //#region src/viewer/hooks/useElementOperations.d.ts
11887
12357
  /**
@@ -12654,7 +13124,13 @@ interface UseDerivedSlideStateInput {
12654
13124
  mode: ViewerMode;
12655
13125
  activeLayout: PptxSlideLayout | undefined;
12656
13126
  activeMaster: PptxSlideMaster | undefined;
12657
- presentationGridSpacing: {
13127
+ /**
13128
+ * `PptxData.viewProperties.gridSpacing` (from `ppt/viewProps.xml`), NOT
13129
+ * `presentationProperties.gridSpacing`: `p:gridSpacing` lives under
13130
+ * `p:viewPr`, and a real PowerPoint file never populates it under
13131
+ * `p:presentationPr`, so reading the latter always yields the fallback.
13132
+ */
13133
+ documentGridSpacing: {
12658
13134
  cx: number;
12659
13135
  } | undefined;
12660
13136
  }