pptx-react-viewer 4.6.0 → 4.8.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 (135) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/{AiChatPanel-3C7GM6ZF.js → AiChatPanel-4LMJIJUU.js} +28 -28
  3. package/dist/AiChatPanel-4LMJIJUU.js.br +0 -0
  4. package/dist/AiChatPanel-4LMJIJUU.js.gz +0 -0
  5. package/dist/{AiChatPanel-L7DBCWE3.mjs → AiChatPanel-XWYLYN26.mjs} +4 -4
  6. package/dist/AiChatPanel-XWYLYN26.mjs.br +0 -0
  7. package/dist/AiChatPanel-XWYLYN26.mjs.gz +0 -0
  8. package/dist/{Model3DScene-IJ7YYTYU.mjs → Model3DScene-N6IZ7Q57.mjs} +1 -1
  9. package/dist/Model3DScene-N6IZ7Q57.mjs.br +0 -0
  10. package/dist/Model3DScene-N6IZ7Q57.mjs.gz +0 -0
  11. package/dist/{Model3DScene-USKNPWWH.js → Model3DScene-YAPQ5BCI.js} +2 -2
  12. package/dist/{Model3DScene-USKNPWWH.js.br → Model3DScene-YAPQ5BCI.js.br} +0 -0
  13. package/dist/Model3DScene-YAPQ5BCI.js.gz +0 -0
  14. package/dist/{chunk-ZAQFTO4P.mjs → chunk-KHEJXP4I.mjs} +1175 -149
  15. package/dist/chunk-KHEJXP4I.mjs.br +0 -0
  16. package/dist/chunk-KHEJXP4I.mjs.gz +0 -0
  17. package/dist/{chunk-3JUZOKFI.js → chunk-LTBTG2QB.js} +108 -96
  18. package/dist/chunk-LTBTG2QB.js.br +0 -0
  19. package/dist/chunk-LTBTG2QB.js.gz +0 -0
  20. package/dist/{chunk-ICEZL4TM.mjs → chunk-NPZOVIHG.mjs} +40855 -16211
  21. package/dist/chunk-NPZOVIHG.mjs.br +0 -0
  22. package/dist/chunk-NPZOVIHG.mjs.gz +0 -0
  23. package/dist/{chunk-DFSWCVRW.js → chunk-NV2H57Q4.js} +3083 -2057
  24. package/dist/chunk-NV2H57Q4.js.br +0 -0
  25. package/dist/chunk-NV2H57Q4.js.gz +0 -0
  26. package/dist/{chunk-VCAQSSGD.mjs → chunk-Q4XJSJYI.mjs} +1 -1
  27. package/dist/chunk-Q4XJSJYI.mjs.br +0 -0
  28. package/dist/chunk-Q4XJSJYI.mjs.gz +0 -0
  29. package/dist/{chunk-IBHIXBC5.js → chunk-Q7NWWIPQ.js} +890 -1091
  30. package/dist/chunk-Q7NWWIPQ.js.br +0 -0
  31. package/dist/chunk-Q7NWWIPQ.js.gz +0 -0
  32. package/dist/{chunk-Y4QUVWZC.js → chunk-SAYZSUNQ.js} +315 -274
  33. package/dist/chunk-SAYZSUNQ.js.br +0 -0
  34. package/dist/chunk-SAYZSUNQ.js.gz +0 -0
  35. package/dist/{chunk-INX3E37P.mjs → chunk-SOMUGI3Y.mjs} +84 -286
  36. package/dist/chunk-SOMUGI3Y.mjs.br +0 -0
  37. package/dist/chunk-SOMUGI3Y.mjs.gz +0 -0
  38. package/dist/{chunk-K6QHGABT.mjs → chunk-SSXGPYBF.mjs} +109 -68
  39. package/dist/chunk-SSXGPYBF.mjs.br +0 -0
  40. package/dist/chunk-SSXGPYBF.mjs.gz +0 -0
  41. package/dist/{chunk-5V5SMT5A.js → chunk-UTP22QYH.js} +5 -5
  42. package/dist/chunk-UTP22QYH.js.br +0 -0
  43. package/dist/chunk-UTP22QYH.js.gz +0 -0
  44. package/dist/{chunk-FZSYLXJT.js → chunk-YF2BQIW3.js} +40903 -16217
  45. package/dist/chunk-YF2BQIW3.js.br +0 -0
  46. package/dist/chunk-YF2BQIW3.js.gz +0 -0
  47. package/dist/{chunk-OOO4JL2N.mjs → chunk-YPDPSXPK.mjs} +108 -96
  48. package/dist/chunk-YPDPSXPK.mjs.br +0 -0
  49. package/dist/chunk-YPDPSXPK.mjs.gz +0 -0
  50. package/dist/i18n/de.cjs +134 -117
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +134 -117
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +134 -117
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +134 -117
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +134 -117
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +134 -117
  66. package/dist/i18n/fr.mjs.br +0 -0
  67. package/dist/i18n/fr.mjs.gz +0 -0
  68. package/dist/i18n/zh-CN.cjs +111 -99
  69. package/dist/i18n/zh-CN.cjs.br +0 -0
  70. package/dist/i18n/zh-CN.cjs.gz +0 -0
  71. package/dist/i18n/zh-CN.mjs +111 -99
  72. package/dist/i18n/zh-CN.mjs.br +0 -0
  73. package/dist/i18n/zh-CN.mjs.gz +0 -0
  74. package/dist/i18n.js +4 -4
  75. package/dist/i18n.js.br +0 -0
  76. package/dist/i18n.js.gz +0 -0
  77. package/dist/i18n.mjs +1 -1
  78. package/dist/i18n.mjs.br +0 -0
  79. package/dist/i18n.mjs.gz +0 -0
  80. package/dist/index.d.ts +276 -18
  81. package/dist/index.js +63 -63
  82. package/dist/index.js.br +0 -0
  83. package/dist/index.js.gz +0 -0
  84. package/dist/index.mjs +6 -6
  85. package/dist/index.mjs.br +0 -0
  86. package/dist/index.mjs.gz +0 -0
  87. package/dist/internals.d.ts +329 -18
  88. package/dist/internals.js +105 -105
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +4 -4
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/viewer/index.d.ts +231 -16
  98. package/dist/viewer/index.js +27 -27
  99. package/dist/viewer/index.js.br +0 -0
  100. package/dist/viewer/index.js.gz +0 -0
  101. package/dist/viewer/index.mjs +6 -6
  102. package/dist/viewer/index.mjs.br +2 -3
  103. package/dist/viewer/index.mjs.gz +0 -0
  104. package/package.json +1 -1
  105. package/dist/AiChatPanel-3C7GM6ZF.js.br +0 -0
  106. package/dist/AiChatPanel-3C7GM6ZF.js.gz +0 -0
  107. package/dist/AiChatPanel-L7DBCWE3.mjs.br +0 -0
  108. package/dist/AiChatPanel-L7DBCWE3.mjs.gz +0 -0
  109. package/dist/Model3DScene-IJ7YYTYU.mjs.br +0 -0
  110. package/dist/Model3DScene-IJ7YYTYU.mjs.gz +0 -0
  111. package/dist/Model3DScene-USKNPWWH.js.gz +0 -0
  112. package/dist/chunk-3JUZOKFI.js.br +0 -0
  113. package/dist/chunk-3JUZOKFI.js.gz +0 -0
  114. package/dist/chunk-5V5SMT5A.js.br +0 -0
  115. package/dist/chunk-5V5SMT5A.js.gz +0 -0
  116. package/dist/chunk-DFSWCVRW.js.br +0 -0
  117. package/dist/chunk-DFSWCVRW.js.gz +0 -0
  118. package/dist/chunk-FZSYLXJT.js.br +0 -0
  119. package/dist/chunk-FZSYLXJT.js.gz +0 -0
  120. package/dist/chunk-IBHIXBC5.js.br +0 -0
  121. package/dist/chunk-IBHIXBC5.js.gz +0 -0
  122. package/dist/chunk-ICEZL4TM.mjs.br +0 -0
  123. package/dist/chunk-ICEZL4TM.mjs.gz +0 -0
  124. package/dist/chunk-INX3E37P.mjs.br +0 -0
  125. package/dist/chunk-INX3E37P.mjs.gz +0 -0
  126. package/dist/chunk-K6QHGABT.mjs.br +0 -0
  127. package/dist/chunk-K6QHGABT.mjs.gz +0 -0
  128. package/dist/chunk-OOO4JL2N.mjs.br +0 -0
  129. package/dist/chunk-OOO4JL2N.mjs.gz +0 -0
  130. package/dist/chunk-VCAQSSGD.mjs.br +0 -0
  131. package/dist/chunk-VCAQSSGD.mjs.gz +0 -0
  132. package/dist/chunk-Y4QUVWZC.js.br +0 -0
  133. package/dist/chunk-Y4QUVWZC.js.gz +0 -0
  134. package/dist/chunk-ZAQFTO4P.mjs.br +0 -0
  135. package/dist/chunk-ZAQFTO4P.mjs.gz +0 -0
package/dist/i18n.js CHANGED
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var chunk3JUZOKFI_js = require('./chunk-3JUZOKFI.js');
3
+ var chunkLTBTG2QB_js = require('./chunk-LTBTG2QB.js');
4
4
  require('./chunk-4VNS5WPM.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "LOCALE_CATALOG", {
9
9
  enumerable: true,
10
- get: function () { return chunk3JUZOKFI_js.LOCALE_CATALOG; }
10
+ get: function () { return chunkLTBTG2QB_js.LOCALE_CATALOG; }
11
11
  });
12
12
  Object.defineProperty(exports, "keyToLabel", {
13
13
  enumerable: true,
14
- get: function () { return chunk3JUZOKFI_js.keyToLabel; }
14
+ get: function () { return chunkLTBTG2QB_js.keyToLabel; }
15
15
  });
16
16
  Object.defineProperty(exports, "translationsEn", {
17
17
  enumerable: true,
18
- get: function () { return chunk3JUZOKFI_js.translationsEn; }
18
+ get: function () { return chunkLTBTG2QB_js.translationsEn; }
19
19
  });
package/dist/i18n.js.br CHANGED
Binary file
package/dist/i18n.js.gz CHANGED
Binary file
package/dist/i18n.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export { LOCALE_CATALOG, keyToLabel, translationsEn } from './chunk-OOO4JL2N.mjs';
1
+ export { LOCALE_CATALOG, keyToLabel, translationsEn } from './chunk-YPDPSXPK.mjs';
2
2
  import './chunk-XGB3TDIC.mjs';
package/dist/i18n.mjs.br CHANGED
Binary file
package/dist/i18n.mjs.gz CHANGED
Binary file
package/dist/index.d.ts CHANGED
@@ -1316,6 +1316,27 @@ interface ShapeStyle {
1316
1316
  * `authored-shape-style.ts`'s `effectIsPurelyStyleMatrix`.
1317
1317
  */
1318
1318
  inheritedEffectStyle?: ShapeStyle;
1319
+ /**
1320
+ * Set by a style-matrix pick (the Shape Styles gallery): the shape's own
1321
+ * `spPr` fill, outline and effects were replaced by `<p:style>`, so the
1322
+ * writer clears whatever the retained `spPr` still authored before it
1323
+ * writes the (now reference-owned) style. Never parsed; editor state only.
1324
+ */
1325
+ styleMatrixReset?: boolean;
1326
+ }
1327
+ /**
1328
+ * The result of resolving a `<p:style>` block against the loaded theme.
1329
+ *
1330
+ * `shapeStyle` is exactly what the load pipeline would have produced for a
1331
+ * shape whose `spPr` authors nothing and whose `<p:style>` is `styleXml`:
1332
+ * the flat fill/outline/effect values a renderer needs, the reference indices
1333
+ * and colours the writer re-emits, and the inheritance baselines that tell the
1334
+ * writer to leave `spPr` empty while the flat values still agree with them.
1335
+ */
1336
+ interface ResolvedStyleMatrix {
1337
+ shapeStyle: ShapeStyle;
1338
+ /** The text colour `<a:fontRef>` names, resolved to hex. */
1339
+ fontColor?: string;
1319
1340
  }
1320
1341
  //#endregion
1321
1342
  //#region src/core/types/text.d.ts
@@ -1504,8 +1525,16 @@ interface TextStyle {
1504
1525
  textOutlineWidth?: number;
1505
1526
  /** Text outline colour as hex string (`a:rPr > a:ln > a:solidFill`). */
1506
1527
  textOutlineColor?: string;
1528
+ /** Text outline dash preset (`a:rPr > a:ln > a:prstDash/@val`), e.g. `dash`; absent for solid. */
1529
+ textOutlineDash?: string;
1507
1530
  /** When true, the text body has no fill (`a:rPr > a:noFill`), producing hollow/outline-only text. */
1508
1531
  textFillNone?: boolean;
1532
+ /**
1533
+ * When true, the run authored an EMPTY `<a:effectLst/>`: an explicit "no
1534
+ * effects" override that blocks an inherited shadow or glow. Kept so a
1535
+ * rewrite re-emits it instead of letting the inherited effect return.
1536
+ */
1537
+ textEffectsExplicitNone?: boolean;
1509
1538
  /** Superscript/subscript baseline shift as percentage (`a:rPr/@baseline`). Positive = super, negative = sub. */
1510
1539
  baseline?: number;
1511
1540
  /** Character spacing in hundredths of a point (`a:rPr/@spc`). */
@@ -1539,6 +1568,25 @@ interface TextStyle {
1539
1568
  textFillPatternForeground?: string;
1540
1569
  /** Text-level pattern background colour. */
1541
1570
  textFillPatternBackground?: string;
1571
+ /**
1572
+ * Raw `a:rPr > a:blipFill` XML, preserved verbatim for round-trip
1573
+ * serialization AND as the input to the image resolution pass that fills
1574
+ * in {@link textFillBlipUrl} (parsing a run's fill happens synchronously,
1575
+ * with no zip/relationship access at that point; resolving the blip to a
1576
+ * displayable URL needs both, so it happens in a later async pass over
1577
+ * the slide's parsed elements, mirroring how a shape's OWN image fill is
1578
+ * resolved). A picture-filled text run (`a:rPr > a:blipFill`) was
1579
+ * documented as handled ("Handles gradient fills, pattern fills, and
1580
+ * image fills on text runs") but never actually parsed, so it silently
1581
+ * fell through to the run's plain `color` and rendered solid black
1582
+ * (COM-verified: `audit-text` slide 13's "PICTURE FILL" run shows the
1583
+ * fill image through the glyphs in PowerPoint).
1584
+ */
1585
+ textFillBlipXml?: XmlObject;
1586
+ /** Resolved displayable URL for {@link textFillBlipXml}, or the archive-relative path when unresolved (lazy decode). */
1587
+ textFillBlipUrl?: string;
1588
+ /** Tiling mode for {@link textFillBlipUrl} (`a:blipFill/a:tile` present -> 'tile', else 'stretch'). */
1589
+ textFillBlipMode?: 'stretch' | 'tile';
1542
1590
  hyperlink?: string;
1543
1591
  /** Relationship ID for the hyperlink (`a:hlinkClick/@r:id`) — preserved for round-trip serialization. */
1544
1592
  hyperlinkRId?: string;
@@ -1624,6 +1672,13 @@ interface TextStyle {
1624
1672
  position: number;
1625
1673
  align: 'l' | 'ctr' | 'r' | 'dec';
1626
1674
  leader?: 'none' | 'dot' | 'hyphen' | 'underscore';
1675
+ /**
1676
+ * True when the source spelled out the schema-default `@algn="l"`, so the
1677
+ * writer re-emits it instead of treating it as an omitted default.
1678
+ */
1679
+ alignAuthored?: boolean;
1680
+ /** True when the source spelled out the schema-default `@leader="none"`. */
1681
+ leaderAuthored?: boolean;
1627
1682
  }>;
1628
1683
  /**
1629
1684
  * True when the paragraph's own `a:pPr` authored an EMPTY `<a:tabLst/>`
@@ -1987,6 +2042,19 @@ interface TextStyle {
1987
2042
  * convention used for {@link bulletInfo} / {@link endParaRunProperties}).
1988
2043
  */
1989
2044
  paragraphDefaultRunPropertiesXml?: XmlObject;
2045
+ /**
2046
+ * The bullet colour / size / typeface children (`a:buClrTx`, `a:buClr`,
2047
+ * `a:buSzTx`, `a:buSzPct`, `a:buSzPts`, `a:buFontTx`, `a:buFont`) a
2048
+ * paragraph authored in its own `<a:pPr>` WITHOUT a bullet type
2049
+ * (`a:buNone` / `a:buChar` / `a:buAutoNum` / `a:buBlip`), captured
2050
+ * verbatim in source order. Such a paragraph restyles an inherited bullet
2051
+ * rather than declaring one, so its {@link BulletInfo} resolves from the
2052
+ * cascade and is (correctly) not written back; without this capture the
2053
+ * paragraph's own override vanished on every rewrite.
2054
+ *
2055
+ * Only meaningful on a paragraph's own authored properties.
2056
+ */
2057
+ paragraphBulletPropertiesXml?: XmlObject;
1990
2058
  }
1991
2059
  /**
1992
2060
  * Structured bullet metadata attached to the first {@link TextSegment}
@@ -2243,6 +2311,22 @@ interface TextSegment {
2243
2311
  * Used by the renderer to apply font family, colour, etc. to the `<rt>` element.
2244
2312
  */
2245
2313
  rubyStyle?: TextStyle;
2314
+ /**
2315
+ * The parsed `a:rubyPr` node, kept verbatim so its attributes (`hps`,
2316
+ * `hpsRaise`, `hpsBaseText`, `lid`, ...) round-trip exactly; only an
2317
+ * edited {@link rubyAlignment} is written over it on save.
2318
+ */
2319
+ rubyPropertiesXml?: XmlObject;
2320
+ /**
2321
+ * What each of a ruby run's two base-side `a:rPr`s authored on its own:
2322
+ * `outer` is the containing `a:r`'s, `base` the `a:rubyBase` run's. The
2323
+ * flat {@link style} merges both for rendering; these let the writer give
2324
+ * each `a:rPr` back only its own properties (plus any later edit).
2325
+ */
2326
+ rubyRunAuthoredStyles?: {
2327
+ outer?: TextStyle;
2328
+ base?: TextStyle;
2329
+ };
2246
2330
  }
2247
2331
  //#endregion
2248
2332
  //#region src/core/types/element-base.d.ts
@@ -3255,6 +3339,26 @@ type PptxChartMarkerSymbol = 'circle' | 'dash' | 'diamond' | 'dot' | 'none' | 'p
3255
3339
  */
3256
3340
  type PptxChartScatterStyle = 'none' | 'line' | 'lineMarker' | 'marker' | 'smooth' | 'smoothMarker';
3257
3341
  /** Shape properties extracted from c:spPr for chart formatting. */
3342
+ /**
3343
+ * A render-ready gradient fill from a chart `c:spPr/a:gradFill` (chart area,
3344
+ * plot area or series). Positions are 0..100; a linear gradient's `angle` is
3345
+ * in degrees clockwise from left-to-right (`a:lin/@ang`); a radial (`a:path`)
3346
+ * gradient centres on `focalPoint` (0..1 fractions of the box), the middle
3347
+ * when absent.
3348
+ */
3349
+ interface PptxChartGradientFill {
3350
+ type: 'linear' | 'radial';
3351
+ stops: Array<{
3352
+ color: string;
3353
+ position: number;
3354
+ opacity?: number;
3355
+ }>;
3356
+ angle?: number;
3357
+ focalPoint?: {
3358
+ x: number;
3359
+ y: number;
3360
+ };
3361
+ }
3258
3362
  interface PptxChartShapeProps {
3259
3363
  fillColor?: string;
3260
3364
  strokeColor?: string;
@@ -3580,6 +3684,12 @@ interface PptxChartSeries {
3580
3684
  */
3581
3685
  idx?: number;
3582
3686
  values: number[];
3687
+ /**
3688
+ * Series gradient fill (`c:ser/c:spPr/a:gradFill`), painted on every mark
3689
+ * of the series that has no per-point override. Render-only: the series'
3690
+ * own `c:spPr` round-trips untouched.
3691
+ */
3692
+ gradientFill?: PptxChartGradientFill;
3583
3693
  /**
3584
3694
  * Per-series x values from `c:ser/c:xVal` (scatter and bubble series only).
3585
3695
  *
@@ -3754,6 +3864,12 @@ interface PptxChartFilteredSeries {
3754
3864
  * and `c:dLblPos`.
3755
3865
  */
3756
3866
  interface PptxChartDataLabelOptions {
3867
+ /** Label box fill/outline (`c:dLbls/c:spPr`), see `chart-data-label-box.ts`. */
3868
+ labelShape?: PptxChartShapeProps;
3869
+ /** Callout geometry of the label box (`c15:spPr/a:prstGeom/@prst`, e.g. `wedgeRectCallout`). */
3870
+ calloutShape?: string;
3871
+ /** The chart15 extension's `c15:showLeaderLines`, which wins for a moved label's leader line. */
3872
+ extLeaderLines?: boolean;
3757
3873
  /** Show the numeric value (`c:showVal`). */
3758
3874
  showValue?: boolean;
3759
3875
  /** Show the category name (`c:showCatName`). */
@@ -3879,6 +3995,10 @@ interface PptxChartStyle {
3879
3995
  chartAreaFill?: string;
3880
3996
  /** Plot-area fill from `c:plotArea/c:spPr`. See {@link chartAreaFill}. */
3881
3997
  plotAreaFill?: string;
3998
+ /** Chart-area gradient (`c:chartSpace/c:spPr/a:gradFill`); wins over {@link chartAreaFill}. */
3999
+ chartAreaGradient?: PptxChartGradientFill;
4000
+ /** Plot-area gradient (`c:plotArea/c:spPr/a:gradFill`); wins over {@link plotAreaFill}. */
4001
+ plotAreaGradient?: PptxChartGradientFill;
3882
4002
  /** Whether data labels are shown. */
3883
4003
  hasDataLabels?: boolean;
3884
4004
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
@@ -4118,6 +4238,14 @@ interface PptxChartData {
4118
4238
  style?: PptxChartStyle;
4119
4239
  /** Grouping mode for bar/area/line charts: 'clustered' | 'stacked' | 'percentStacked' */
4120
4240
  grouping?: 'clustered' | 'stacked' | 'percentStacked';
4241
+ /**
4242
+ * The source `c:grouping` was `standard`, which {@link grouping} folds into
4243
+ * `'clustered'` (a 2D bar chart draws the two the same). A 3D chart draws
4244
+ * `standard` differently: each series on its own depth row. The writer
4245
+ * emits `standard` again while `grouping` is still `'clustered'`, so the
4246
+ * chart round-trips unchanged.
4247
+ */
4248
+ groupingStandard?: boolean;
4121
4249
  /**
4122
4250
  * Whether the first (or only) series varies its point colours
4123
4251
  * (`c:varyColors/@val`). Pie/doughnut default this on; single-series
@@ -5515,6 +5643,14 @@ interface PptxSmartArtNode {
5515
5643
  * quick-style variation) applied to every other node.
5516
5644
  */
5517
5645
  coherent3DOff?: boolean;
5646
+ /**
5647
+ * The layout variables PowerPoint recorded for each presentation node
5648
+ * this point drives (`dgm:prSet/@presName` -> `dgm:presLayoutVars`
5649
+ * variable -> `@val`), e.g. `{ hierRoot1: { hierBranch: 'l' } }` for an
5650
+ * org-chart manager set to "Left Hanging". Read-only: the presentation
5651
+ * points themselves round-trip verbatim.
5652
+ */
5653
+ presLayoutVarsByName?: Record<string, Record<string, string>>;
5518
5654
  /**
5519
5655
  * Per-run text + run-properties for the node's first paragraph, captured at
5520
5656
  * parse time. When the joined run text still equals {@link text} (the node
@@ -5584,6 +5720,16 @@ interface PptxSmartArtQuickStyleLabel {
5584
5720
  name: string;
5585
5721
  /** Theme-resolved `dgm:style` refs for this label's role, when available. */
5586
5722
  resolvedStyle?: PptxSmartArtResolvedStyleRef;
5723
+ /**
5724
+ * The label's own `dgm:scene3d` (per-shape camera + light rig). PowerPoint
5725
+ * copies it onto a shape's cached `a:scene3d` unless it is the default
5726
+ * front camera with a `threePt` light (see `applySmartArtQuickStyle3d`).
5727
+ */
5728
+ scene3d?: Pptx3DScene;
5729
+ /** The label's own `dgm:sp3d` (bevel / extrusion / contour / material); absent when empty. */
5730
+ shape3d?: Pptx3DShape;
5731
+ /** The label's `dgm:txPr/a:sp3d` label-text extrusion (Bird's Eye Scene). */
5732
+ text3d?: Text3DStyle;
5587
5733
  }
5588
5734
  /** CT_CTStyleLabel metadata from a color-transform definition. */
5589
5735
  interface PptxSmartArtColorStyleLabel {
@@ -5651,9 +5797,10 @@ interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
5651
5797
  * for the "Scene" quick styles (Brick, Flat, Metallic, Sunset, Bird's Eye
5652
5798
  * Scene). One camera renders the whole diagram; per-shape `a:scene3d` is
5653
5799
  * absent for those styles (see `PptxSmartArtDrawingShape.scene3d`). Each
5654
- * `dgm:styleLbl` also carries its own per-label `dgm:scene3d`/`dgm:sp3d`,
5655
- * but PowerPoint bakes those fully resolved onto each cached shape's own
5656
- * `dsp:spPr/a:sp3d`, so only the diagram-level scene is exposed here.
5800
+ * `dgm:styleLbl` also carries its own per-label `dgm:scene3d`/`dgm:sp3d`
5801
+ * ({@link PptxSmartArtQuickStyleLabel.scene3d} / `shape3d` / `text3d`),
5802
+ * which PowerPoint bakes onto each cached shape; they are re-applied when a
5803
+ * structural edit regenerates the shapes.
5657
5804
  */
5658
5805
  scene3d?: Pptx3DScene;
5659
5806
  }
@@ -5784,6 +5931,11 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
5784
5931
  fillNone?: boolean;
5785
5932
  /** Solid fill colour (hex). */
5786
5933
  fillColor?: string;
5934
+ /**
5935
+ * Opacity (0..1) of the solid fill, from the colour's `a:alpha` (Basic Venn
5936
+ * paints its circles at 50% so overlaps blend). Absent when opaque.
5937
+ */
5938
+ fillOpacity?: number;
5787
5939
  /**
5788
5940
  * Gradient fill stops when the cached shape uses `a:gradFill`. Positions are
5789
5941
  * 0..100 (percent). Renderers emit an SVG/CSS gradient instead of a flat box.
@@ -7747,7 +7899,15 @@ type PptxAnimationTimingCurve = 'ease' | 'ease-in' | 'ease-out' | 'linear';
7747
7899
  /** Repeat mode for animations. */
7748
7900
  type PptxAnimationRepeatMode = 'untilNextClick' | 'untilEndOfSlide';
7749
7901
  /** Animation trigger type from OOXML `p:cTn`. */
7750
- type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevious' | 'withPrevious' | 'afterDelay';
7902
+ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevious' | 'withPrevious' | 'afterDelay' |
7903
+ /**
7904
+ * Starts when a media element's playback reaches a named bookmark
7905
+ * (PowerPoint's "Trigger > On Bookmark"). The media element is
7906
+ * {@link PptxElementAnimation.triggerShapeId} and the bookmark
7907
+ * {@link PptxElementAnimation.triggerBookmark}; saved as an interactive
7908
+ * sequence gated on `p:cond evt="onMediaBookmark"` with a `p14:bmkTgt`.
7909
+ */
7910
+ 'onMediaBookmark';
7751
7911
  /**
7752
7912
  * Native animation kind. The historic shape-targeted preset animations are
7753
7913
  * implicitly the default kind (`undefined`). Media animations (`p:audio`,
@@ -7900,8 +8060,13 @@ interface PptxNativeAnimation {
7900
8060
  target?: PptxAnimationTarget;
7901
8061
  /** Trigger type. */
7902
8062
  trigger?: PptxAnimationTrigger;
7903
- /** Shape ID that triggers this animation when clicked (interactive sequence). */
8063
+ /**
8064
+ * Shape ID that triggers this animation: the clicked shape of an
8065
+ * interactive sequence, or the media element of an `onMediaBookmark` one.
8066
+ */
7904
8067
  triggerShapeId?: string;
8068
+ /** Bookmark name an `onMediaBookmark` interactive sequence waits for. */
8069
+ triggerBookmark?: string;
7905
8070
  /** Whether this effect belongs to an OOXML `interactiveSeq`. */
7906
8071
  interactiveSequence?: boolean;
7907
8072
  /** Whether `p:endSync/p:rtn[@val="all"]` makes that sequence replayable. */
@@ -8400,12 +8565,15 @@ interface PptxAttributeAnimation {
8400
8565
  /**
8401
8566
  * `p:anim/@_p14:bounceEnd` (Office 2010 `p14` extension attribute,
8402
8567
  * MS-OI29500), normalized to a 0-1 fraction of this behaviour's own
8403
- * duration. PowerPoint's Fly In "Bounce End" effect option writes this on
8404
- * the position-ramp `p:anim` node(s): the fraction of the duration at
8405
- * which the primary travel completes, with the remainder spent bouncing
8406
- * and settling at the final value. Mirrored verbatim by PowerPoint onto
8407
- * the enclosing `p:cTn/@_p14:presetBounceEnd`. Absent for every animation
8408
- * that doesn't use this effect option (the overwhelming majority).
8568
+ * duration. PowerPoint's "Bounce End" effect option (COM:
8569
+ * `Effect.Timing.BounceEnd` + `BounceEndIntensity`) writes this on the
8570
+ * position-ramp `p:anim` node(s): the share of the duration spent
8571
+ * BOUNCING at the end. Measured from PowerPoint's own CreateVideo frames,
8572
+ * the travel completes at `1 - bounceEnd` and the rest is a damped
8573
+ * oscillation about the final value (see shared's `animation-bounce-end`).
8574
+ * Mirrored verbatim by PowerPoint onto the enclosing
8575
+ * `p:cTn/@_p14:presetBounceEnd`. Absent for every animation that doesn't
8576
+ * use this effect option (the overwhelming majority).
8409
8577
  */
8410
8578
  bounceEnd?: number;
8411
8579
  }
@@ -8583,9 +8751,24 @@ interface PptxElementAnimation {
8583
8751
  durationMs?: number;
8584
8752
  delayMs?: number;
8585
8753
  order?: number;
8754
+ /**
8755
+ * The {@link order} the loader derived from the slide's `p:timing` tree for
8756
+ * an entry whose `pptx:editorMeta` record authored no `@order`. The tree
8757
+ * already expresses that position (and every load re-derives it), so the
8758
+ * writer omits `@order` while `order` still equals this value; a reorder
8759
+ * changes `order` and the attribute is written again. Load-time bookkeeping
8760
+ * only; never set it by hand.
8761
+ */
8762
+ orderFromTimeline?: number;
8586
8763
  trigger?: PptxAnimationTrigger;
8587
- /** Shape ID that triggers this animation when clicked (interactive sequence). */
8764
+ /**
8765
+ * Shape ID that triggers this animation: the shape clicked for
8766
+ * `onShapeClick`, or the media element whose bookmark fires it for
8767
+ * `onMediaBookmark`.
8768
+ */
8588
8769
  triggerShapeId?: string;
8770
+ /** Bookmark name (`p14:bmk/@name`) an `onMediaBookmark` trigger waits for. */
8771
+ triggerBookmark?: string;
8589
8772
  timingCurve?: PptxAnimationTimingCurve;
8590
8773
  repeatCount?: number;
8591
8774
  repeatMode?: PptxAnimationRepeatMode;
@@ -11161,6 +11344,8 @@ interface IPptxHandlerRuntime {
11161
11344
  updateThemeColorScheme(colorScheme: PptxThemeColorScheme): Promise<void>;
11162
11345
  updateThemeFontScheme(fontScheme: PptxThemeFontScheme): Promise<void>;
11163
11346
  updateThemeName(name: string): Promise<void>;
11347
+ /** Resolve a `<p:style>` node against the loaded theme (see PptxHandlerRuntimeStyleMatrixResolve). */
11348
+ resolveStyleMatrixReferences(styleXml: XmlObject): ResolvedStyleMatrix;
11164
11349
  applyTheme(colorScheme: PptxThemeColorScheme, fontScheme: PptxThemeFontScheme, themeName?: string): Promise<void>;
11165
11350
  load(data: ArrayBuffer, options?: PptxHandlerLoadOptions): Promise<PptxData>;
11166
11351
  getChartDataForGraphicFrame(slidePath: string, graphicFrame: XmlObject | undefined): Promise<PptxChartData | undefined>;
@@ -11456,6 +11641,14 @@ declare class PptxHandlerCore {
11456
11641
  * @param name - New display name for the theme.
11457
11642
  */
11458
11643
  updateThemeName(name: string): Promise<void>;
11644
+ /**
11645
+ * Resolve a `<p:style>` block (`a:lnRef` / `a:fillRef` / `a:effectRef` /
11646
+ * `a:fontRef`) against the loaded theme, exactly as the load path would for
11647
+ * a shape whose `spPr` authors nothing. Apply the returned `shapeStyle` to a
11648
+ * shape and it renders like PowerPoint's Shape Styles entry and saves as a
11649
+ * bare `<p:style>` with an empty `spPr`, which is what PowerPoint writes.
11650
+ */
11651
+ resolveStyleMatrixReferences(styleXml: XmlObject): ResolvedStyleMatrix;
11459
11652
  /**
11460
11653
  * Apply a complete theme in one call (colour scheme + font scheme + optional name).
11461
11654
  *
@@ -12546,6 +12739,15 @@ interface PictureBulletMarker {
12546
12739
  imageRelId?: string;
12547
12740
  }
12548
12741
  //#endregion
12742
+ //#region src/render/text-east-asian-breaks.d.ts
12743
+ /** Which of the two behaviours a paragraph asks for. */
12744
+ interface EastAsianBreakOptions {
12745
+ /** `a:pPr/@hangingPunct="1"`. */
12746
+ hangingPunctuation: boolean;
12747
+ /** `a:pPr/@eaLnBrk="0"`: break between any two East Asian characters. */
12748
+ breakAnywhere: boolean;
12749
+ }
12750
+ //#endregion
12549
12751
  //#region src/render/text-run-meta.d.ts
12550
12752
  /** A run's resolved hyperlink target. */
12551
12753
  interface RunHyperlink {
@@ -12719,6 +12921,8 @@ interface ParagraphRun {
12719
12921
  * `paragraph-run-build.ts`).
12720
12922
  */
12721
12923
  underlineWordPieces?: ScriptFontPiece[];
12924
+ /** The advance-carrying space after a hanging `、`/`。` (`text-east-asian-breaks`). */
12925
+ hangingSpace?: true;
12722
12926
  /**
12723
12927
  * `a:reflection` mirrored-sibling wrapper style for this run (the text-run
12724
12928
  * counterpart of a shape/picture's `ComputedEffectStyle.reflection`), or
@@ -12802,6 +13006,12 @@ interface RenderParagraph {
12802
13006
  * break rules, rendered differently in the other four bindings.
12803
13007
  */
12804
13008
  paragraphStyle?: RunStyle;
13009
+ /**
13010
+ * `@hangingPunct` / `@eaLnBrk="0"` as resolved for this paragraph. The runs
13011
+ * above already carry their pieces; React, which rebuilds each segment's
13012
+ * pieces inside one span, re-applies `splitEastAsianBreaks` from this.
13013
+ */
13014
+ eastAsianBreaks?: EastAsianBreakOptions;
12805
13015
  }
12806
13016
  //#endregion
12807
13017
  //#region src/render/inline-list-types.d.ts
@@ -13195,8 +13405,12 @@ declare function presentationBaseName(sourceName: string | null | undefined, fal
13195
13405
  declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
13196
13406
  /** A logical editor command produced by one key press. */
13197
13407
  type EditorKeyActionName = 'undo' | 'redo' | 'copy' | 'cut' | 'paste' | 'duplicate' | 'delete' | 'selectAll' | 'group' | 'ungroup' | 'nudge' | 'prevSlide' | 'nextSlide' | 'escape' | 'find' | 'findReplace' | 'toggleShortcuts' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'increaseFontSize' | 'decreaseFontSize' | 'copyFormat' | 'pasteFormat' | 'newSlide' | 'hyperlink' | 'clearFormatting' | 'cycleSelectionNext' | 'cycleSelectionPrev' | 'pasteSpecial';
13408
+ //#endregion
13409
+ //#region src/render/merge-shapes/merge-shapes-menu.d.ts
13410
+ /** The right-click command id for each operation. */
13411
+ type MergeShapesCommandId = 'merge-union' | 'merge-combine' | 'merge-fragment' | 'merge-intersect' | 'merge-subtract';
13198
13412
  /** Every command a canvas context menu can offer, in no particular order. */
13199
- type ContextMenuCommandId = 'copy' | 'cut' | 'paste' | 'duplicate' | 'edit-text' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'ai-ask' | 'ai-fix' | 'comment' | 'hyperlink' | 'table-insert-row-above' | 'table-insert-row-below' | 'table-delete-row' | 'table-insert-col-left' | 'table-insert-col-right' | 'table-delete-col' | 'table-merge-selected' | 'table-merge-right' | 'table-merge-down' | 'table-split' | 'group' | 'ungroup' | 'save-as-picture' | 'edit-alt-text' | 'size-and-position' | 'format-shape' | 'delete';
13413
+ type ContextMenuCommandId = 'copy' | 'cut' | 'paste' | 'duplicate' | 'edit-text' | 'edit-points' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'ai-ask' | 'ai-fix' | 'comment' | 'hyperlink' | 'table-insert-row-above' | 'table-insert-row-below' | 'table-delete-row' | 'table-insert-col-left' | 'table-insert-col-right' | 'table-delete-col' | 'table-merge-selected' | 'table-merge-right' | 'table-merge-down' | 'table-split' | 'group' | 'ungroup' | 'crop' | MergeShapesCommandId | 'save-as-picture' | 'edit-alt-text' | 'size-and-position' | 'format-shape' | 'delete';
13200
13414
  //#endregion
13201
13415
  //#region src/render/canvas-context-menu-commands.d.ts
13202
13416
  /**
@@ -13362,7 +13576,7 @@ declare function saveViewerProfile(profile: ViewerProfile): void;
13362
13576
  * whole control cluster (zoom in/out/fit, prev/next) rather than each button
13363
13577
  * in it, matching how hosts actually want to hide/keep them as a unit.
13364
13578
  */
13365
- type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation';
13579
+ type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation' | 'mergeShapes' | 'crop';
13366
13580
  /** A top-level ribbon tab. `record` intentionally shares its id with the quick-access Record button above: both surface the same recording feature, so hiding one hides the other. */
13367
13581
  type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transitions' | 'animations' | 'slideShow' | 'record' | 'review' | 'view' | 'help';
13368
13582
  type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
@@ -13555,6 +13769,12 @@ declare function readStoredViewerPrefs(): StoredViewerPrefs;
13555
13769
  declare function writeStoredViewerPrefs(patch: Partial<StoredViewerPrefs>): void;
13556
13770
  /** Remove all persisted viewer preferences. Silently no-ops when storage is unavailable. */
13557
13771
  declare function clearStoredViewerPrefs(): void;
13772
+ /** Every command the Edit Points right-click menu can offer. */
13773
+ type EditPointsCommandId = 'add-point' | 'delete-point' | 'delete-segment' | 'open-path' | 'close-path' | 'smooth-point' | 'straight-point' | 'corner-point' | 'straight-segment' | 'curved-segment' | 'exit';
13774
+ //#endregion
13775
+ //#region src/render/edit-points/freeform-tool-geometry.d.ts
13776
+ /** The two click-to-place drawing tools. */
13777
+ type FreeformToolKind = 'freeformShape' | 'curve';
13558
13778
  //#endregion
13559
13779
  //#region src/render/options/viewer-options-controls.d.ts
13560
13780
  /**
@@ -13625,6 +13845,11 @@ interface ContextMenuCustomization {
13625
13845
  hiddenElementCommands?: readonly ContextMenuCommandId[];
13626
13846
  /** Entries to remove from the empty-canvas menu. */
13627
13847
  hiddenCanvasCommands?: readonly CanvasContextMenuCommandId[];
13848
+ /**
13849
+ * Entries to remove from the Edit Points menu (right-click a vertex or a
13850
+ * segment while editing a shape's points).
13851
+ */
13852
+ hiddenEditPointsCommands?: readonly EditPointsCommandId[];
13628
13853
  /** Remove the element context menu entirely. */
13629
13854
  disableElementMenu?: boolean;
13630
13855
  /** Remove the empty-canvas context menu entirely. */
@@ -13654,7 +13879,12 @@ interface KeyboardCustomization {
13654
13879
  */
13655
13880
  type ViewerPanelId = 'statusBar' | 'slidesPane' | 'inspector' | 'notes' | 'quickAccessToolbar' | 'titleBar';
13656
13881
  /** Feature areas that can be switched off as a whole. */
13657
- type ViewerFeatureId = 'ai' | 'collaboration' | 'comments' | 'presentMode';
13882
+ type ViewerFeatureId = 'ai' | 'collaboration' | 'comments' | 'presentMode' | 'editPoints';
13883
+ /**
13884
+ * The click-to-place drawing tools of Insert > Shapes > Lines: Freeform:
13885
+ * Shape and Curve.
13886
+ */
13887
+ type ViewerDrawingToolId = FreeformToolKind;
13658
13888
  /** Dialogs (and the entry points that open them) a host can remove. */
13659
13889
  type ViewerDialogId = 'options' | 'share' | 'broadcast' | 'print' | 'export';
13660
13890
  /** Export formats offered by the File > Export page. */
@@ -13677,21 +13907,23 @@ interface ViewerCustomization {
13677
13907
  hiddenDialogs?: readonly ViewerDialogId[];
13678
13908
  /** Export formats to remove from File > Export. */
13679
13909
  hiddenExportFormats?: readonly ViewerExportFormatId[];
13910
+ /** Drawing tools to remove from the Insert > Shapes gallery. */
13911
+ hiddenDrawingTools?: readonly ViewerDrawingToolId[];
13680
13912
  }
13681
13913
  //#endregion
13682
13914
  //#region src/render/customization/customization-catalog.d.ts
13683
13915
  declare const RIBBON_TAB_IDS: readonly ToolbarTabId[];
13684
- declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation"];
13916
+ declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation", "mergeShapes", "crop"];
13685
13917
  declare const OPTIONS_PAGE_IDS: readonly OptionsPageId[];
13686
13918
  declare const OPTIONS_SECTION_IDS: readonly OptionsSectionId[];
13687
13919
  declare const OPTIONS_SETTING_IDS: readonly OptionsSettingId[];
13688
13920
  declare const BACKSTAGE_PAGE_IDS: readonly BackstagePage[];
13689
13921
  declare const BACKSTAGE_CARD_IDS: readonly BackstageCardId[];
13690
- declare const ELEMENT_CONTEXT_MENU_COMMAND_IDS: readonly ["copy", "cut", "paste", "duplicate", "edit-text", "bring-forward", "send-backward", "bring-front", "send-back", "ai-ask", "ai-fix", "comment", "hyperlink", "table-insert-row-above", "table-insert-row-below", "table-delete-row", "table-insert-col-left", "table-insert-col-right", "table-delete-col", "table-merge-selected", "table-merge-right", "table-merge-down", "table-split", "group", "ungroup", "save-as-picture", "edit-alt-text", "size-and-position", "format-shape", "delete"];
13922
+ declare const ELEMENT_CONTEXT_MENU_COMMAND_IDS: readonly ["copy", "cut", "paste", "duplicate", "edit-text", "edit-points", "bring-forward", "send-backward", "bring-front", "send-back", "ai-ask", "ai-fix", "comment", "hyperlink", "table-insert-row-above", "table-insert-row-below", "table-delete-row", "table-insert-col-left", "table-insert-col-right", "table-delete-col", "table-merge-selected", "table-merge-right", "table-merge-down", "table-split", "group", "ungroup", "crop", "merge-union", "merge-combine", "merge-fragment", "merge-intersect", "merge-subtract", "save-as-picture", "edit-alt-text", "size-and-position", "format-shape", "delete"];
13691
13923
  declare const CANVAS_CONTEXT_MENU_COMMAND_IDS: readonly ["paste", "layout", "reset-slide", "format-background", "grid-and-guides", "ruler"];
13692
13924
  declare const EDITOR_SHORTCUT_ACTION_IDS: readonly ["undo", "redo", "copy", "cut", "paste", "duplicate", "delete", "selectAll", "group", "ungroup", "nudge", "prevSlide", "nextSlide", "escape", "find", "findReplace", "toggleShortcuts", "alignLeft", "alignCenter", "alignRight", "alignJustify", "increaseFontSize", "decreaseFontSize", "copyFormat", "pasteFormat", "newSlide", "hyperlink", "clearFormatting", "cycleSelectionNext", "cycleSelectionPrev", "pasteSpecial"];
13693
13925
  declare const VIEWER_PANEL_IDS: readonly ["statusBar", "slidesPane", "inspector", "notes", "quickAccessToolbar", "titleBar"];
13694
- declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode"];
13926
+ declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode", "editPoints"];
13695
13927
  declare const VIEWER_DIALOG_IDS: readonly ["options", "share", "broadcast", "print", "export"];
13696
13928
  declare const VIEWER_EXPORT_FORMAT_IDS: readonly ["pdf", "png", "video", "gif", "json", "copyImage"];
13697
13929
  //#endregion
@@ -13725,6 +13957,8 @@ interface ResolvedCustomization {
13725
13957
  hiddenBackstageCards: ReadonlySet<BackstageCardId>;
13726
13958
  hiddenElementCommands: ReadonlySet<ContextMenuCommandId>;
13727
13959
  hiddenCanvasCommands: ReadonlySet<CanvasContextMenuCommandId>;
13960
+ hiddenEditPointsCommands: ReadonlySet<EditPointsCommandId>;
13961
+ hiddenDrawingTools: ReadonlySet<ViewerDrawingToolId>;
13728
13962
  elementMenuEnabled: boolean;
13729
13963
  canvasMenuEnabled: boolean;
13730
13964
  hiddenPanels: ReadonlySet<ViewerPanelId>;
@@ -13789,6 +14023,8 @@ interface ViewportFitOptions {
13789
14023
  /** Positive fit-factor ceiling; null allows enlargement without a ceiling. */
13790
14024
  maxFitScale?: number | null;
13791
14025
  }
14026
+ /** The element fields an Edit Points commit writes. */
14027
+ type EditPointsElementPatch = Pick<ShapePptxElement, 'x' | 'y' | 'width' | 'height' | 'shapeType' | 'shapeAdjustments' | 'pathData' | 'pathWidth' | 'pathHeight' | 'customGeometryPaths' | 'customGeometryRawData' | 'customGeometryAdjustHandlesXY' | 'customGeometryAdjustHandlesPolar' | 'customGeometryConnectionSites' | 'customGeometryTextRect'>;
13792
14028
  //#endregion
13793
14029
  //#region src/web-components/select-value.d.ts
13794
14030
  /** Public DOM shape used by all bindings; the element is not a native select. */
@@ -14486,6 +14722,8 @@ interface ToolbarProps {
14486
14722
  tableEditorState?: TableCellEditorState | null;
14487
14723
  editTemplateMode: boolean;
14488
14724
  newShapeType: SupportedShapeType;
14725
+ /** The armed Freeform: Shape / Curve tool, or null. */
14726
+ activeFreeformTool?: FreeformToolKind | null;
14489
14727
  activeTool: DrawingTool;
14490
14728
  drawingColor: string;
14491
14729
  drawingWidth: number;
@@ -14519,6 +14757,8 @@ interface ToolbarProps {
14519
14757
  onRedo: () => void;
14520
14758
  onToggleFindReplace: () => void;
14521
14759
  onSetNewShapeType: (type: SupportedShapeType) => void;
14760
+ /** Arm (or, with null, disarm) a Freeform: Shape / Curve tool. */
14761
+ onArmFreeformTool?: (tool: FreeformToolKind | null) => void;
14522
14762
  onAddTextBox: () => void;
14523
14763
  onAddShape: () => void;
14524
14764
  onAddTable: () => void;
@@ -14732,6 +14972,23 @@ interface TableStyleContext {
14732
14972
  theme?: PptxTheme;
14733
14973
  }
14734
14974
  //#endregion
14975
+ //#region src/viewer/components/canvas/OutlineAuthoringLayer.d.ts
14976
+ /** Wiring for Edit Points and the Freeform: Shape / Curve tools. */
14977
+ interface OutlineAuthoringProps {
14978
+ /** The shape in Edit Points mode, or null. */
14979
+ editPointsElementId: string | null;
14980
+ /** Edit Points menu commands the host hid. */
14981
+ hiddenEditPointsCommands?: ReadonlySet<EditPointsCommandId>;
14982
+ /** Apply one Edit Points edit (one undo step). */
14983
+ onCommitEditPoints: (elementId: string, patch: EditPointsElementPatch) => void;
14984
+ onExitEditPoints: () => void;
14985
+ /** The armed drawing tool, or null. */
14986
+ freeformTool: FreeformToolKind | null;
14987
+ /** Insert a drawn freeform (the tool then disarms). */
14988
+ onFreeformCommit: (element: ShapePptxElement) => void;
14989
+ onFreeformCancel: () => void;
14990
+ }
14991
+ //#endregion
14735
14992
  //#region src/viewer/components/canvas/canvas-types.d.ts
14736
14993
  interface ZoomViewport {
14737
14994
  canvasViewportRef: React$1__default.RefObject<HTMLDivElement | null>;
@@ -14879,6 +15136,7 @@ interface SlideCanvasProps {
14879
15136
  * changes tween while the AI assistant is working (see AiFocusHighlightOverlay).
14880
15137
  */
14881
15138
  aiActive?: boolean;
15139
+ outlineAuthoring?: OutlineAuthoringProps;
14882
15140
  }
14883
15141
  //#endregion
14884
15142
  //#region src/viewer/hooks/useAutosave.d.ts