pptx-react-viewer 4.6.0 → 4.7.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 +18 -0
  2. package/dist/{AiChatPanel-3C7GM6ZF.js → AiChatPanel-3YILWCBX.js} +28 -28
  3. package/dist/AiChatPanel-3YILWCBX.js.br +0 -0
  4. package/dist/AiChatPanel-3YILWCBX.js.gz +0 -0
  5. package/dist/{AiChatPanel-L7DBCWE3.mjs → AiChatPanel-X2MVL5UP.mjs} +4 -4
  6. package/dist/AiChatPanel-X2MVL5UP.mjs.br +0 -0
  7. package/dist/AiChatPanel-X2MVL5UP.mjs.gz +0 -0
  8. package/dist/{Model3DScene-USKNPWWH.js → Model3DScene-G7P6ZAIO.js} +2 -2
  9. package/dist/{Model3DScene-USKNPWWH.js.br → Model3DScene-G7P6ZAIO.js.br} +0 -0
  10. package/dist/Model3DScene-G7P6ZAIO.js.gz +0 -0
  11. package/dist/{Model3DScene-IJ7YYTYU.mjs → Model3DScene-QFWI5CEE.mjs} +1 -1
  12. package/dist/Model3DScene-QFWI5CEE.mjs.br +0 -0
  13. package/dist/Model3DScene-QFWI5CEE.mjs.gz +0 -0
  14. package/dist/{chunk-5V5SMT5A.js → chunk-2BM4GBFZ.js} +5 -5
  15. package/dist/chunk-2BM4GBFZ.js.br +0 -0
  16. package/dist/chunk-2BM4GBFZ.js.gz +0 -0
  17. package/dist/{chunk-K6QHGABT.mjs → chunk-5J6NW3YS.mjs} +55 -28
  18. package/dist/chunk-5J6NW3YS.mjs.br +0 -0
  19. package/dist/chunk-5J6NW3YS.mjs.gz +0 -0
  20. package/dist/{chunk-FZSYLXJT.js → chunk-AQIXKTAT.js} +13118 -8704
  21. package/dist/chunk-AQIXKTAT.js.br +0 -0
  22. package/dist/chunk-AQIXKTAT.js.gz +0 -0
  23. package/dist/{chunk-VCAQSSGD.mjs → chunk-E5OIDWHO.mjs} +1 -1
  24. package/dist/chunk-E5OIDWHO.mjs.br +0 -0
  25. package/dist/chunk-E5OIDWHO.mjs.gz +0 -0
  26. package/dist/{chunk-Y4QUVWZC.js → chunk-FYAOOACZ.js} +241 -214
  27. package/dist/chunk-FYAOOACZ.js.br +0 -0
  28. package/dist/chunk-FYAOOACZ.js.gz +0 -0
  29. package/dist/{chunk-INX3E37P.mjs → chunk-OECUSL2B.mjs} +80 -283
  30. package/dist/chunk-OECUSL2B.mjs.br +0 -0
  31. package/dist/chunk-OECUSL2B.mjs.gz +0 -0
  32. package/dist/{chunk-ICEZL4TM.mjs → chunk-QLDHUKH2.mjs} +13074 -8701
  33. package/dist/chunk-QLDHUKH2.mjs.br +0 -0
  34. package/dist/chunk-QLDHUKH2.mjs.gz +0 -0
  35. package/dist/{chunk-IBHIXBC5.js → chunk-SR7ETIBF.js} +889 -1091
  36. package/dist/chunk-SR7ETIBF.js.br +0 -0
  37. package/dist/chunk-SR7ETIBF.js.gz +0 -0
  38. package/dist/{chunk-ZAQFTO4P.mjs → chunk-UBYFLXAU.mjs} +1174 -148
  39. package/dist/chunk-UBYFLXAU.mjs.br +0 -0
  40. package/dist/chunk-UBYFLXAU.mjs.gz +0 -0
  41. package/dist/{chunk-3JUZOKFI.js → chunk-UIAU3NR2.js} +44 -0
  42. package/dist/chunk-UIAU3NR2.js.br +0 -0
  43. package/dist/chunk-UIAU3NR2.js.gz +0 -0
  44. package/dist/{chunk-DFSWCVRW.js → chunk-VF4RA27Q.js} +3082 -2056
  45. package/dist/chunk-VF4RA27Q.js.br +0 -0
  46. package/dist/chunk-VF4RA27Q.js.gz +0 -0
  47. package/dist/{chunk-OOO4JL2N.mjs → chunk-WIEBQGQI.mjs} +44 -0
  48. package/dist/chunk-WIEBQGQI.mjs.br +0 -0
  49. package/dist/chunk-WIEBQGQI.mjs.gz +0 -0
  50. package/dist/i18n/de.cjs +70 -21
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +70 -21
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +70 -21
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +70 -21
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +70 -21
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +70 -21
  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 +48 -4
  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 +48 -4
  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 +177 -15
  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 +230 -15
  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 +149 -13
  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 +3 -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/index.d.ts CHANGED
@@ -1504,8 +1504,16 @@ interface TextStyle {
1504
1504
  textOutlineWidth?: number;
1505
1505
  /** Text outline colour as hex string (`a:rPr > a:ln > a:solidFill`). */
1506
1506
  textOutlineColor?: string;
1507
+ /** Text outline dash preset (`a:rPr > a:ln > a:prstDash/@val`), e.g. `dash`; absent for solid. */
1508
+ textOutlineDash?: string;
1507
1509
  /** When true, the text body has no fill (`a:rPr > a:noFill`), producing hollow/outline-only text. */
1508
1510
  textFillNone?: boolean;
1511
+ /**
1512
+ * When true, the run authored an EMPTY `<a:effectLst/>`: an explicit "no
1513
+ * effects" override that blocks an inherited shadow or glow. Kept so a
1514
+ * rewrite re-emits it instead of letting the inherited effect return.
1515
+ */
1516
+ textEffectsExplicitNone?: boolean;
1509
1517
  /** Superscript/subscript baseline shift as percentage (`a:rPr/@baseline`). Positive = super, negative = sub. */
1510
1518
  baseline?: number;
1511
1519
  /** Character spacing in hundredths of a point (`a:rPr/@spc`). */
@@ -1539,6 +1547,25 @@ interface TextStyle {
1539
1547
  textFillPatternForeground?: string;
1540
1548
  /** Text-level pattern background colour. */
1541
1549
  textFillPatternBackground?: string;
1550
+ /**
1551
+ * Raw `a:rPr > a:blipFill` XML, preserved verbatim for round-trip
1552
+ * serialization AND as the input to the image resolution pass that fills
1553
+ * in {@link textFillBlipUrl} (parsing a run's fill happens synchronously,
1554
+ * with no zip/relationship access at that point; resolving the blip to a
1555
+ * displayable URL needs both, so it happens in a later async pass over
1556
+ * the slide's parsed elements, mirroring how a shape's OWN image fill is
1557
+ * resolved). A picture-filled text run (`a:rPr > a:blipFill`) was
1558
+ * documented as handled ("Handles gradient fills, pattern fills, and
1559
+ * image fills on text runs") but never actually parsed, so it silently
1560
+ * fell through to the run's plain `color` and rendered solid black
1561
+ * (COM-verified: `audit-text` slide 13's "PICTURE FILL" run shows the
1562
+ * fill image through the glyphs in PowerPoint).
1563
+ */
1564
+ textFillBlipXml?: XmlObject;
1565
+ /** Resolved displayable URL for {@link textFillBlipXml}, or the archive-relative path when unresolved (lazy decode). */
1566
+ textFillBlipUrl?: string;
1567
+ /** Tiling mode for {@link textFillBlipUrl} (`a:blipFill/a:tile` present -> 'tile', else 'stretch'). */
1568
+ textFillBlipMode?: 'stretch' | 'tile';
1542
1569
  hyperlink?: string;
1543
1570
  /** Relationship ID for the hyperlink (`a:hlinkClick/@r:id`) — preserved for round-trip serialization. */
1544
1571
  hyperlinkRId?: string;
@@ -1624,6 +1651,13 @@ interface TextStyle {
1624
1651
  position: number;
1625
1652
  align: 'l' | 'ctr' | 'r' | 'dec';
1626
1653
  leader?: 'none' | 'dot' | 'hyphen' | 'underscore';
1654
+ /**
1655
+ * True when the source spelled out the schema-default `@algn="l"`, so the
1656
+ * writer re-emits it instead of treating it as an omitted default.
1657
+ */
1658
+ alignAuthored?: boolean;
1659
+ /** True when the source spelled out the schema-default `@leader="none"`. */
1660
+ leaderAuthored?: boolean;
1627
1661
  }>;
1628
1662
  /**
1629
1663
  * True when the paragraph's own `a:pPr` authored an EMPTY `<a:tabLst/>`
@@ -1987,6 +2021,19 @@ interface TextStyle {
1987
2021
  * convention used for {@link bulletInfo} / {@link endParaRunProperties}).
1988
2022
  */
1989
2023
  paragraphDefaultRunPropertiesXml?: XmlObject;
2024
+ /**
2025
+ * The bullet colour / size / typeface children (`a:buClrTx`, `a:buClr`,
2026
+ * `a:buSzTx`, `a:buSzPct`, `a:buSzPts`, `a:buFontTx`, `a:buFont`) a
2027
+ * paragraph authored in its own `<a:pPr>` WITHOUT a bullet type
2028
+ * (`a:buNone` / `a:buChar` / `a:buAutoNum` / `a:buBlip`), captured
2029
+ * verbatim in source order. Such a paragraph restyles an inherited bullet
2030
+ * rather than declaring one, so its {@link BulletInfo} resolves from the
2031
+ * cascade and is (correctly) not written back; without this capture the
2032
+ * paragraph's own override vanished on every rewrite.
2033
+ *
2034
+ * Only meaningful on a paragraph's own authored properties.
2035
+ */
2036
+ paragraphBulletPropertiesXml?: XmlObject;
1990
2037
  }
1991
2038
  /**
1992
2039
  * Structured bullet metadata attached to the first {@link TextSegment}
@@ -3255,6 +3302,26 @@ type PptxChartMarkerSymbol = 'circle' | 'dash' | 'diamond' | 'dot' | 'none' | 'p
3255
3302
  */
3256
3303
  type PptxChartScatterStyle = 'none' | 'line' | 'lineMarker' | 'marker' | 'smooth' | 'smoothMarker';
3257
3304
  /** Shape properties extracted from c:spPr for chart formatting. */
3305
+ /**
3306
+ * A render-ready gradient fill from a chart `c:spPr/a:gradFill` (chart area,
3307
+ * plot area or series). Positions are 0..100; a linear gradient's `angle` is
3308
+ * in degrees clockwise from left-to-right (`a:lin/@ang`); a radial (`a:path`)
3309
+ * gradient centres on `focalPoint` (0..1 fractions of the box), the middle
3310
+ * when absent.
3311
+ */
3312
+ interface PptxChartGradientFill {
3313
+ type: 'linear' | 'radial';
3314
+ stops: Array<{
3315
+ color: string;
3316
+ position: number;
3317
+ opacity?: number;
3318
+ }>;
3319
+ angle?: number;
3320
+ focalPoint?: {
3321
+ x: number;
3322
+ y: number;
3323
+ };
3324
+ }
3258
3325
  interface PptxChartShapeProps {
3259
3326
  fillColor?: string;
3260
3327
  strokeColor?: string;
@@ -3580,6 +3647,12 @@ interface PptxChartSeries {
3580
3647
  */
3581
3648
  idx?: number;
3582
3649
  values: number[];
3650
+ /**
3651
+ * Series gradient fill (`c:ser/c:spPr/a:gradFill`), painted on every mark
3652
+ * of the series that has no per-point override. Render-only: the series'
3653
+ * own `c:spPr` round-trips untouched.
3654
+ */
3655
+ gradientFill?: PptxChartGradientFill;
3583
3656
  /**
3584
3657
  * Per-series x values from `c:ser/c:xVal` (scatter and bubble series only).
3585
3658
  *
@@ -3754,6 +3827,12 @@ interface PptxChartFilteredSeries {
3754
3827
  * and `c:dLblPos`.
3755
3828
  */
3756
3829
  interface PptxChartDataLabelOptions {
3830
+ /** Label box fill/outline (`c:dLbls/c:spPr`), see `chart-data-label-box.ts`. */
3831
+ labelShape?: PptxChartShapeProps;
3832
+ /** Callout geometry of the label box (`c15:spPr/a:prstGeom/@prst`, e.g. `wedgeRectCallout`). */
3833
+ calloutShape?: string;
3834
+ /** The chart15 extension's `c15:showLeaderLines`, which wins for a moved label's leader line. */
3835
+ extLeaderLines?: boolean;
3757
3836
  /** Show the numeric value (`c:showVal`). */
3758
3837
  showValue?: boolean;
3759
3838
  /** Show the category name (`c:showCatName`). */
@@ -3879,6 +3958,10 @@ interface PptxChartStyle {
3879
3958
  chartAreaFill?: string;
3880
3959
  /** Plot-area fill from `c:plotArea/c:spPr`. See {@link chartAreaFill}. */
3881
3960
  plotAreaFill?: string;
3961
+ /** Chart-area gradient (`c:chartSpace/c:spPr/a:gradFill`); wins over {@link chartAreaFill}. */
3962
+ chartAreaGradient?: PptxChartGradientFill;
3963
+ /** Plot-area gradient (`c:plotArea/c:spPr/a:gradFill`); wins over {@link plotAreaFill}. */
3964
+ plotAreaGradient?: PptxChartGradientFill;
3882
3965
  /** Whether data labels are shown. */
3883
3966
  hasDataLabels?: boolean;
3884
3967
  /** Chart-level data-label content/position options (when `hasDataLabels`). */
@@ -7747,7 +7830,15 @@ type PptxAnimationTimingCurve = 'ease' | 'ease-in' | 'ease-out' | 'linear';
7747
7830
  /** Repeat mode for animations. */
7748
7831
  type PptxAnimationRepeatMode = 'untilNextClick' | 'untilEndOfSlide';
7749
7832
  /** Animation trigger type from OOXML `p:cTn`. */
7750
- type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevious' | 'withPrevious' | 'afterDelay';
7833
+ type PptxAnimationTrigger = 'onClick' | 'onShapeClick' | 'onHover' | 'afterPrevious' | 'withPrevious' | 'afterDelay' |
7834
+ /**
7835
+ * Starts when a media element's playback reaches a named bookmark
7836
+ * (PowerPoint's "Trigger > On Bookmark"). The media element is
7837
+ * {@link PptxElementAnimation.triggerShapeId} and the bookmark
7838
+ * {@link PptxElementAnimation.triggerBookmark}; saved as an interactive
7839
+ * sequence gated on `p:cond evt="onMediaBookmark"` with a `p14:bmkTgt`.
7840
+ */
7841
+ 'onMediaBookmark';
7751
7842
  /**
7752
7843
  * Native animation kind. The historic shape-targeted preset animations are
7753
7844
  * implicitly the default kind (`undefined`). Media animations (`p:audio`,
@@ -7900,8 +7991,13 @@ interface PptxNativeAnimation {
7900
7991
  target?: PptxAnimationTarget;
7901
7992
  /** Trigger type. */
7902
7993
  trigger?: PptxAnimationTrigger;
7903
- /** Shape ID that triggers this animation when clicked (interactive sequence). */
7994
+ /**
7995
+ * Shape ID that triggers this animation: the clicked shape of an
7996
+ * interactive sequence, or the media element of an `onMediaBookmark` one.
7997
+ */
7904
7998
  triggerShapeId?: string;
7999
+ /** Bookmark name an `onMediaBookmark` interactive sequence waits for. */
8000
+ triggerBookmark?: string;
7905
8001
  /** Whether this effect belongs to an OOXML `interactiveSeq`. */
7906
8002
  interactiveSequence?: boolean;
7907
8003
  /** Whether `p:endSync/p:rtn[@val="all"]` makes that sequence replayable. */
@@ -8400,12 +8496,15 @@ interface PptxAttributeAnimation {
8400
8496
  /**
8401
8497
  * `p:anim/@_p14:bounceEnd` (Office 2010 `p14` extension attribute,
8402
8498
  * 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).
8499
+ * duration. PowerPoint's "Bounce End" effect option (COM:
8500
+ * `Effect.Timing.BounceEnd` + `BounceEndIntensity`) writes this on the
8501
+ * position-ramp `p:anim` node(s): the share of the duration spent
8502
+ * BOUNCING at the end. Measured from PowerPoint's own CreateVideo frames,
8503
+ * the travel completes at `1 - bounceEnd` and the rest is a damped
8504
+ * oscillation about the final value (see shared's `animation-bounce-end`).
8505
+ * Mirrored verbatim by PowerPoint onto the enclosing
8506
+ * `p:cTn/@_p14:presetBounceEnd`. Absent for every animation that doesn't
8507
+ * use this effect option (the overwhelming majority).
8409
8508
  */
8410
8509
  bounceEnd?: number;
8411
8510
  }
@@ -8583,9 +8682,24 @@ interface PptxElementAnimation {
8583
8682
  durationMs?: number;
8584
8683
  delayMs?: number;
8585
8684
  order?: number;
8685
+ /**
8686
+ * The {@link order} the loader derived from the slide's `p:timing` tree for
8687
+ * an entry whose `pptx:editorMeta` record authored no `@order`. The tree
8688
+ * already expresses that position (and every load re-derives it), so the
8689
+ * writer omits `@order` while `order` still equals this value; a reorder
8690
+ * changes `order` and the attribute is written again. Load-time bookkeeping
8691
+ * only; never set it by hand.
8692
+ */
8693
+ orderFromTimeline?: number;
8586
8694
  trigger?: PptxAnimationTrigger;
8587
- /** Shape ID that triggers this animation when clicked (interactive sequence). */
8695
+ /**
8696
+ * Shape ID that triggers this animation: the shape clicked for
8697
+ * `onShapeClick`, or the media element whose bookmark fires it for
8698
+ * `onMediaBookmark`.
8699
+ */
8588
8700
  triggerShapeId?: string;
8701
+ /** Bookmark name (`p14:bmk/@name`) an `onMediaBookmark` trigger waits for. */
8702
+ triggerBookmark?: string;
8589
8703
  timingCurve?: PptxAnimationTimingCurve;
8590
8704
  repeatCount?: number;
8591
8705
  repeatMode?: PptxAnimationRepeatMode;
@@ -13195,8 +13309,12 @@ declare function presentationBaseName(sourceName: string | null | undefined, fal
13195
13309
  declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
13196
13310
  /** A logical editor command produced by one key press. */
13197
13311
  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';
13312
+ //#endregion
13313
+ //#region src/render/merge-shapes/merge-shapes-menu.d.ts
13314
+ /** The right-click command id for each operation. */
13315
+ type MergeShapesCommandId = 'merge-union' | 'merge-combine' | 'merge-fragment' | 'merge-intersect' | 'merge-subtract';
13198
13316
  /** 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';
13317
+ 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
13318
  //#endregion
13201
13319
  //#region src/render/canvas-context-menu-commands.d.ts
13202
13320
  /**
@@ -13362,7 +13480,7 @@ declare function saveViewerProfile(profile: ViewerProfile): void;
13362
13480
  * whole control cluster (zoom in/out/fit, prev/next) rather than each button
13363
13481
  * in it, matching how hosts actually want to hide/keep them as a unit.
13364
13482
  */
13365
- type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation';
13483
+ type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation' | 'mergeShapes' | 'crop';
13366
13484
  /** 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
13485
  type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transitions' | 'animations' | 'slideShow' | 'record' | 'review' | 'view' | 'help';
13368
13486
  type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
@@ -13555,6 +13673,12 @@ declare function readStoredViewerPrefs(): StoredViewerPrefs;
13555
13673
  declare function writeStoredViewerPrefs(patch: Partial<StoredViewerPrefs>): void;
13556
13674
  /** Remove all persisted viewer preferences. Silently no-ops when storage is unavailable. */
13557
13675
  declare function clearStoredViewerPrefs(): void;
13676
+ /** Every command the Edit Points right-click menu can offer. */
13677
+ type EditPointsCommandId = 'add-point' | 'delete-point' | 'delete-segment' | 'open-path' | 'close-path' | 'smooth-point' | 'straight-point' | 'corner-point' | 'straight-segment' | 'curved-segment' | 'exit';
13678
+ //#endregion
13679
+ //#region src/render/edit-points/freeform-tool-geometry.d.ts
13680
+ /** The two click-to-place drawing tools. */
13681
+ type FreeformToolKind = 'freeformShape' | 'curve';
13558
13682
  //#endregion
13559
13683
  //#region src/render/options/viewer-options-controls.d.ts
13560
13684
  /**
@@ -13625,6 +13749,11 @@ interface ContextMenuCustomization {
13625
13749
  hiddenElementCommands?: readonly ContextMenuCommandId[];
13626
13750
  /** Entries to remove from the empty-canvas menu. */
13627
13751
  hiddenCanvasCommands?: readonly CanvasContextMenuCommandId[];
13752
+ /**
13753
+ * Entries to remove from the Edit Points menu (right-click a vertex or a
13754
+ * segment while editing a shape's points).
13755
+ */
13756
+ hiddenEditPointsCommands?: readonly EditPointsCommandId[];
13628
13757
  /** Remove the element context menu entirely. */
13629
13758
  disableElementMenu?: boolean;
13630
13759
  /** Remove the empty-canvas context menu entirely. */
@@ -13654,7 +13783,12 @@ interface KeyboardCustomization {
13654
13783
  */
13655
13784
  type ViewerPanelId = 'statusBar' | 'slidesPane' | 'inspector' | 'notes' | 'quickAccessToolbar' | 'titleBar';
13656
13785
  /** Feature areas that can be switched off as a whole. */
13657
- type ViewerFeatureId = 'ai' | 'collaboration' | 'comments' | 'presentMode';
13786
+ type ViewerFeatureId = 'ai' | 'collaboration' | 'comments' | 'presentMode' | 'editPoints';
13787
+ /**
13788
+ * The click-to-place drawing tools of Insert > Shapes > Lines: Freeform:
13789
+ * Shape and Curve.
13790
+ */
13791
+ type ViewerDrawingToolId = FreeformToolKind;
13658
13792
  /** Dialogs (and the entry points that open them) a host can remove. */
13659
13793
  type ViewerDialogId = 'options' | 'share' | 'broadcast' | 'print' | 'export';
13660
13794
  /** Export formats offered by the File > Export page. */
@@ -13677,21 +13811,23 @@ interface ViewerCustomization {
13677
13811
  hiddenDialogs?: readonly ViewerDialogId[];
13678
13812
  /** Export formats to remove from File > Export. */
13679
13813
  hiddenExportFormats?: readonly ViewerExportFormatId[];
13814
+ /** Drawing tools to remove from the Insert > Shapes gallery. */
13815
+ hiddenDrawingTools?: readonly ViewerDrawingToolId[];
13680
13816
  }
13681
13817
  //#endregion
13682
13818
  //#region src/render/customization/customization-catalog.d.ts
13683
13819
  declare const RIBBON_TAB_IDS: readonly ToolbarTabId[];
13684
- declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation"];
13820
+ declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation", "mergeShapes", "crop"];
13685
13821
  declare const OPTIONS_PAGE_IDS: readonly OptionsPageId[];
13686
13822
  declare const OPTIONS_SECTION_IDS: readonly OptionsSectionId[];
13687
13823
  declare const OPTIONS_SETTING_IDS: readonly OptionsSettingId[];
13688
13824
  declare const BACKSTAGE_PAGE_IDS: readonly BackstagePage[];
13689
13825
  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"];
13826
+ 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
13827
  declare const CANVAS_CONTEXT_MENU_COMMAND_IDS: readonly ["paste", "layout", "reset-slide", "format-background", "grid-and-guides", "ruler"];
13692
13828
  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
13829
  declare const VIEWER_PANEL_IDS: readonly ["statusBar", "slidesPane", "inspector", "notes", "quickAccessToolbar", "titleBar"];
13694
- declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode"];
13830
+ declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode", "editPoints"];
13695
13831
  declare const VIEWER_DIALOG_IDS: readonly ["options", "share", "broadcast", "print", "export"];
13696
13832
  declare const VIEWER_EXPORT_FORMAT_IDS: readonly ["pdf", "png", "video", "gif", "json", "copyImage"];
13697
13833
  //#endregion
@@ -13725,6 +13861,8 @@ interface ResolvedCustomization {
13725
13861
  hiddenBackstageCards: ReadonlySet<BackstageCardId>;
13726
13862
  hiddenElementCommands: ReadonlySet<ContextMenuCommandId>;
13727
13863
  hiddenCanvasCommands: ReadonlySet<CanvasContextMenuCommandId>;
13864
+ hiddenEditPointsCommands: ReadonlySet<EditPointsCommandId>;
13865
+ hiddenDrawingTools: ReadonlySet<ViewerDrawingToolId>;
13728
13866
  elementMenuEnabled: boolean;
13729
13867
  canvasMenuEnabled: boolean;
13730
13868
  hiddenPanels: ReadonlySet<ViewerPanelId>;
@@ -13789,6 +13927,8 @@ interface ViewportFitOptions {
13789
13927
  /** Positive fit-factor ceiling; null allows enlargement without a ceiling. */
13790
13928
  maxFitScale?: number | null;
13791
13929
  }
13930
+ /** The element fields an Edit Points commit writes. */
13931
+ type EditPointsElementPatch = Pick<ShapePptxElement, 'x' | 'y' | 'width' | 'height' | 'shapeType' | 'shapeAdjustments' | 'pathData' | 'pathWidth' | 'pathHeight' | 'customGeometryPaths' | 'customGeometryRawData' | 'customGeometryAdjustHandlesXY' | 'customGeometryAdjustHandlesPolar' | 'customGeometryConnectionSites' | 'customGeometryTextRect'>;
13792
13932
  //#endregion
13793
13933
  //#region src/web-components/select-value.d.ts
13794
13934
  /** Public DOM shape used by all bindings; the element is not a native select. */
@@ -14486,6 +14626,8 @@ interface ToolbarProps {
14486
14626
  tableEditorState?: TableCellEditorState | null;
14487
14627
  editTemplateMode: boolean;
14488
14628
  newShapeType: SupportedShapeType;
14629
+ /** The armed Freeform: Shape / Curve tool, or null. */
14630
+ activeFreeformTool?: FreeformToolKind | null;
14489
14631
  activeTool: DrawingTool;
14490
14632
  drawingColor: string;
14491
14633
  drawingWidth: number;
@@ -14519,6 +14661,8 @@ interface ToolbarProps {
14519
14661
  onRedo: () => void;
14520
14662
  onToggleFindReplace: () => void;
14521
14663
  onSetNewShapeType: (type: SupportedShapeType) => void;
14664
+ /** Arm (or, with null, disarm) a Freeform: Shape / Curve tool. */
14665
+ onArmFreeformTool?: (tool: FreeformToolKind | null) => void;
14522
14666
  onAddTextBox: () => void;
14523
14667
  onAddShape: () => void;
14524
14668
  onAddTable: () => void;
@@ -14732,6 +14876,23 @@ interface TableStyleContext {
14732
14876
  theme?: PptxTheme;
14733
14877
  }
14734
14878
  //#endregion
14879
+ //#region src/viewer/components/canvas/OutlineAuthoringLayer.d.ts
14880
+ /** Wiring for Edit Points and the Freeform: Shape / Curve tools. */
14881
+ interface OutlineAuthoringProps {
14882
+ /** The shape in Edit Points mode, or null. */
14883
+ editPointsElementId: string | null;
14884
+ /** Edit Points menu commands the host hid. */
14885
+ hiddenEditPointsCommands?: ReadonlySet<EditPointsCommandId>;
14886
+ /** Apply one Edit Points edit (one undo step). */
14887
+ onCommitEditPoints: (elementId: string, patch: EditPointsElementPatch) => void;
14888
+ onExitEditPoints: () => void;
14889
+ /** The armed drawing tool, or null. */
14890
+ freeformTool: FreeformToolKind | null;
14891
+ /** Insert a drawn freeform (the tool then disarms). */
14892
+ onFreeformCommit: (element: ShapePptxElement) => void;
14893
+ onFreeformCancel: () => void;
14894
+ }
14895
+ //#endregion
14735
14896
  //#region src/viewer/components/canvas/canvas-types.d.ts
14736
14897
  interface ZoomViewport {
14737
14898
  canvasViewportRef: React$1__default.RefObject<HTMLDivElement | null>;
@@ -14879,6 +15040,7 @@ interface SlideCanvasProps {
14879
15040
  * changes tween while the AI assistant is working (see AiFocusHighlightOverlay).
14880
15041
  */
14881
15042
  aiActive?: boolean;
15043
+ outlineAuthoring?: OutlineAuthoringProps;
14882
15044
  }
14883
15045
  //#endregion
14884
15046
  //#region src/viewer/hooks/useAutosave.d.ts