ooxml-ui 1.9.0 → 1.10.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 (118) hide show
  1. package/dist/{chunk-SNV6YKPC.js → chunk-HZSYGNNB.js} +2 -1
  2. package/dist/{chunk-SKYBYVYH.js → chunk-IXLJNVUD.js} +1 -1
  3. package/dist/{chunk-PH7IBZOZ.js → chunk-WMGMZIMM.js} +1 -1
  4. package/dist/docx/print-border-width.d.ts +2 -0
  5. package/dist/docx/print-table.d.ts +1 -1
  6. package/dist/docx.js +93 -8
  7. package/dist/index.js +3 -3
  8. package/dist/pptx/ai/index.cjs +2 -2
  9. package/dist/pptx/ai/index.mjs +1 -1
  10. package/dist/pptx/{chunk-F7BBPOVJ.mjs → chunk-5AD3V3PA.mjs} +1 -0
  11. package/dist/pptx/{chunk-BPAA5FSB.mjs → chunk-6B3UUVRS.mjs} +1 -1
  12. package/dist/pptx/{chunk-KBCKCW5M.mjs → chunk-6NFW2AQA.mjs} +682 -481
  13. package/dist/pptx/chunk-EYPNQ3FG.cjs +59 -0
  14. package/dist/pptx/chunk-FFIYFHBO.mjs +55 -0
  15. package/dist/pptx/{chunk-HWW2UVUP.cjs → chunk-JRCK6CFI.cjs} +19 -9
  16. package/dist/pptx/{chunk-MKVKISFW.mjs → chunk-OBRLAW6C.mjs} +1 -1
  17. package/dist/pptx/{chunk-BFZDO2DY.cjs → chunk-OCNECNJS.cjs} +785 -550
  18. package/dist/pptx/{chunk-Y4LTLCQP.cjs → chunk-OJFD3SHS.cjs} +26 -47
  19. package/dist/pptx/{chunk-7KPDES3X.mjs → chunk-PMURSMHH.mjs} +6 -35
  20. package/dist/pptx/{chunk-PKDISDDZ.cjs → chunk-TSSWTBJQ.cjs} +2 -2
  21. package/dist/pptx/{chunk-SABFKDRM.mjs → chunk-WFEN6SHA.mjs} +19 -10
  22. package/dist/pptx/{chunk-UEF4BFW4.cjs → chunk-XFQ2RD4I.cjs} +7 -7
  23. package/dist/pptx/{chunk-QVYJB7G2.cjs → chunk-Y7CDPPMZ.cjs} +1 -0
  24. package/dist/pptx/dom/elements/text-shape.d.ts.map +1 -1
  25. package/dist/pptx/dom/index.cjs +228 -218
  26. package/dist/pptx/dom/index.mjs +29 -19
  27. package/dist/pptx/dom/load-presentation.d.ts +1 -0
  28. package/dist/pptx/dom/load-presentation.d.ts.map +1 -1
  29. package/dist/pptx/i18n/index.cjs +6 -6
  30. package/dist/pptx/i18n/index.mjs +1 -1
  31. package/dist/pptx/i18n/translations-en-galleries.d.ts.map +1 -1
  32. package/dist/pptx/index.cjs +2889 -2825
  33. package/dist/pptx/index.mjs +7 -7
  34. package/dist/pptx/render/animation-after-effect-authoring.d.ts +1 -38
  35. package/dist/pptx/render/animation-after-effect-authoring.d.ts.map +1 -1
  36. package/dist/pptx/render/animation-after-effect.d.ts +2 -2
  37. package/dist/pptx/render/animation-after-effect.d.ts.map +1 -1
  38. package/dist/pptx/render/animation-authoring.cjs +39 -39
  39. package/dist/pptx/render/animation-authoring.d.ts +2 -11
  40. package/dist/pptx/render/animation-authoring.d.ts.map +1 -1
  41. package/dist/pptx/render/animation-authoring.mjs +1 -1
  42. package/dist/pptx/render/animation-opacity-playback.d.ts +9 -0
  43. package/dist/pptx/render/animation-opacity-playback.d.ts.map +1 -0
  44. package/dist/pptx/render/animation-opacity-style.d.ts +6 -0
  45. package/dist/pptx/render/animation-opacity-style.d.ts.map +1 -0
  46. package/dist/pptx/render/animation-playback-engine.d.ts +1 -1
  47. package/dist/pptx/render/animation-playback-engine.d.ts.map +1 -1
  48. package/dist/pptx/render/animation-playback-seek.d.ts.map +1 -1
  49. package/dist/pptx/render/animation-playback-steps.d.ts.map +1 -1
  50. package/dist/pptx/render/animation-timeline-engine.d.ts +4 -0
  51. package/dist/pptx/render/animation-timeline-engine.d.ts.map +1 -1
  52. package/dist/pptx/render/animation-timeline-group.d.ts +2 -0
  53. package/dist/pptx/render/animation-timeline-group.d.ts.map +1 -1
  54. package/dist/pptx/render/animation-timeline-regular-step.d.ts.map +1 -1
  55. package/dist/pptx/render/animation-timeline-rows.d.ts.map +1 -1
  56. package/dist/pptx/render/animation-timeline-sequence-builder.d.ts.map +1 -1
  57. package/dist/pptx/render/animation-timeline-step-effect.d.ts +2 -1
  58. package/dist/pptx/render/animation-timeline-step-effect.d.ts.map +1 -1
  59. package/dist/pptx/render/animation-timeline-step.d.ts +3 -1
  60. package/dist/pptx/render/animation-timeline-step.d.ts.map +1 -1
  61. package/dist/pptx/render/background-animation-layers.d.ts +12 -0
  62. package/dist/pptx/render/background-animation-layers.d.ts.map +1 -0
  63. package/dist/pptx/render/customization/customization-resolve-ribbon.d.ts.map +1 -1
  64. package/dist/pptx/render/customization/ribbon-control-catalog-tail.d.ts +6 -0
  65. package/dist/pptx/render/customization/ribbon-control-catalog-tail.d.ts.map +1 -1
  66. package/dist/pptx/render/customization/ribbon-control-catalog.d.ts +6 -0
  67. package/dist/pptx/render/customization/ribbon-control-catalog.d.ts.map +1 -1
  68. package/dist/pptx/render/field-context.d.ts +2 -0
  69. package/dist/pptx/render/field-context.d.ts.map +1 -1
  70. package/dist/pptx/render/font-family-update.d.ts +45 -0
  71. package/dist/pptx/render/font-family-update.d.ts.map +1 -0
  72. package/dist/pptx/render/format-painter.cjs +6 -6
  73. package/dist/pptx/render/format-painter.mjs +3 -3
  74. package/dist/pptx/render/index.d.ts +3 -0
  75. package/dist/pptx/render/index.d.ts.map +1 -1
  76. package/dist/pptx/render/inline-selection-utils.d.ts +2 -1
  77. package/dist/pptx/render/inline-selection-utils.d.ts.map +1 -1
  78. package/dist/pptx/render/inspector-helpers.cjs +17 -13
  79. package/dist/pptx/render/inspector-helpers.d.ts +8 -0
  80. package/dist/pptx/render/inspector-helpers.d.ts.map +1 -1
  81. package/dist/pptx/render/inspector-helpers.mjs +2 -2
  82. package/dist/pptx/render/picture-frame.d.ts +20 -0
  83. package/dist/pptx/render/picture-frame.d.ts.map +1 -1
  84. package/dist/pptx/render/ribbon-animations-state.cjs +6 -6
  85. package/dist/pptx/render/ribbon-animations-state.mjs +2 -2
  86. package/dist/pptx/render/ribbon-galleries/gallery-placements.d.ts +3 -3
  87. package/dist/pptx/render/ribbon-galleries/gallery-placements.d.ts.map +1 -1
  88. package/dist/pptx/render/ribbon-galleries/table-style-tile-svg.d.ts +21 -6
  89. package/dist/pptx/render/ribbon-galleries/table-style-tile-svg.d.ts.map +1 -1
  90. package/dist/pptx/render/ribbon-galleries/table-styles-gallery.d.ts +3 -1
  91. package/dist/pptx/render/ribbon-galleries/table-styles-gallery.d.ts.map +1 -1
  92. package/dist/pptx/render/ribbon-home-crop.d.ts +37 -0
  93. package/dist/pptx/render/ribbon-home-crop.d.ts.map +1 -0
  94. package/dist/pptx/render/ribbon-home-families-objects.d.ts +5 -2
  95. package/dist/pptx/render/ribbon-home-families-objects.d.ts.map +1 -1
  96. package/dist/pptx/render/ribbon-home-spec.d.ts +1 -1
  97. package/dist/pptx/render/ribbon-home-spec.d.ts.map +1 -1
  98. package/dist/pptx/render/ribbon-home-state-extras.d.ts.map +1 -1
  99. package/dist/pptx/render/ribbon-home-state.d.ts +1 -0
  100. package/dist/pptx/render/ribbon-home-state.d.ts.map +1 -1
  101. package/dist/pptx/render/text-block-style.d.ts.map +1 -1
  102. package/dist/pptx/render/text-field-substitution.d.ts +12 -0
  103. package/dist/pptx/render/text-field-substitution.d.ts.map +1 -1
  104. package/dist/pptx/render/text-style-update.d.ts.map +1 -1
  105. package/dist/pptx/render/update-text-segment-style.d.ts +7 -1
  106. package/dist/pptx/render/update-text-segment-style.d.ts.map +1 -1
  107. package/dist/pptx/web-components/index.d.ts.map +1 -1
  108. package/dist/pptx/web-components/ribbon-home-styles.d.ts +1 -1
  109. package/dist/pptx/web-components/ribbon-home-styles.d.ts.map +1 -1
  110. package/dist/pptx/web-components/ribbon-home.d.ts +2 -0
  111. package/dist/pptx/web-components/ribbon-home.d.ts.map +1 -1
  112. package/dist/{presentation-preview-HF3GZ2VD.js → presentation-preview-VIIU7E2S.js} +1 -1
  113. package/dist/teams.js +2 -2
  114. package/dist/xlsx/dialogs/pivot-values.d.ts +10 -0
  115. package/dist/xlsx.js +147 -12
  116. package/package.json +2 -2
  117. package/dist/pptx/chunk-CENGE3TZ.mjs +0 -10
  118. package/dist/pptx/chunk-OGJRSAGH.cjs +0 -12
@@ -2,14 +2,14 @@
2
2
 
3
3
  var chunkWSTWYZFM_cjs = require('./chunk-WSTWYZFM.cjs');
4
4
  var chunkX7FS7XHU_cjs = require('./chunk-X7FS7XHU.cjs');
5
- var chunkUEF4BFW4_cjs = require('./chunk-UEF4BFW4.cjs');
5
+ var chunkXFQ2RD4I_cjs = require('./chunk-XFQ2RD4I.cjs');
6
6
  var chunk52LKIMK3_cjs = require('./chunk-52LKIMK3.cjs');
7
7
  var chunkK3S2A64B_cjs = require('./chunk-K3S2A64B.cjs');
8
8
  var chunkXOAXPD2W_cjs = require('./chunk-XOAXPD2W.cjs');
9
9
  var chunkBSGCZ4JZ_cjs = require('./chunk-BSGCZ4JZ.cjs');
10
10
  var chunkIOOI63TH_cjs = require('./chunk-IOOI63TH.cjs');
11
11
  var chunkZJFN5POF_cjs = require('./chunk-ZJFN5POF.cjs');
12
- var chunkHWW2UVUP_cjs = require('./chunk-HWW2UVUP.cjs');
12
+ var chunkJRCK6CFI_cjs = require('./chunk-JRCK6CFI.cjs');
13
13
  var chunkWB25PCHQ_cjs = require('./chunk-WB25PCHQ.cjs');
14
14
  var chunkW3X2UVYQ_cjs = require('./chunk-W3X2UVYQ.cjs');
15
15
  var chunkVFPVEVF4_cjs = require('./chunk-VFPVEVF4.cjs');
@@ -18,11 +18,11 @@ var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
18
  var chunk526IHNIH_cjs = require('./chunk-526IHNIH.cjs');
19
19
  var chunkX4FNVH7J_cjs = require('./chunk-X4FNVH7J.cjs');
20
20
  var chunkUPN5FFKP_cjs = require('./chunk-UPN5FFKP.cjs');
21
- var chunkY4LTLCQP_cjs = require('./chunk-Y4LTLCQP.cjs');
21
+ var chunkOJFD3SHS_cjs = require('./chunk-OJFD3SHS.cjs');
22
22
  var chunkUSBRSEJK_cjs = require('./chunk-USBRSEJK.cjs');
23
23
  var chunkU47LRWDT_cjs = require('./chunk-U47LRWDT.cjs');
24
- var chunkQVYJB7G2_cjs = require('./chunk-QVYJB7G2.cjs');
25
- var chunkOGJRSAGH_cjs = require('./chunk-OGJRSAGH.cjs');
24
+ var chunkY7CDPPMZ_cjs = require('./chunk-Y7CDPPMZ.cjs');
25
+ var chunkEYPNQ3FG_cjs = require('./chunk-EYPNQ3FG.cjs');
26
26
  var chunkEW5DW5KR_cjs = require('./chunk-EW5DW5KR.cjs');
27
27
  var pptx = require('ooxml-core/pptx');
28
28
  var color = require('ooxml-core/color');
@@ -1564,33 +1564,257 @@ function resolveShapeGeometry(element) {
1564
1564
  }
1565
1565
  return { kind: "none" };
1566
1566
  }
1567
- function getPictureShadowFilter(element) {
1568
- if (!pptx.isImageLikeElement(element) || !pptx.hasShapeProperties(element)) {
1569
- return void 0;
1570
- }
1571
- return getCompositeOuterShadowFilterCss(element.shapeStyle, { rotation: element.rotation });
1567
+ var HEX_COLOR = /^#?[0-9a-f]{6}$/iu;
1568
+ function hexToRgb(hex2) {
1569
+ const cleaned = hex2.replace(/^#/u, "");
1570
+ const val = parseInt(cleaned, 16);
1571
+ return {
1572
+ r: val >> 16 & 255,
1573
+ g: val >> 8 & 255,
1574
+ b: val & 255
1575
+ };
1572
1576
  }
1573
- function hasPictureFrame(element) {
1574
- if (!pptx.isImageLikeElement(element)) {
1575
- return false;
1577
+ function rgbToHex(r, g, b) {
1578
+ const clamp10 = (v) => Math.max(0, Math.min(255, Math.round(v)));
1579
+ return `#${clamp10(r).toString(16).padStart(2, "0")}${clamp10(g).toString(16).padStart(2, "0")}${clamp10(b).toString(16).padStart(2, "0")}`;
1580
+ }
1581
+ function rgbToHsl(r, g, b) {
1582
+ const rn = r / 255;
1583
+ const gn = g / 255;
1584
+ const bn = b / 255;
1585
+ const max = Math.max(rn, gn, bn);
1586
+ const min = Math.min(rn, gn, bn);
1587
+ const l = (max + min) / 2;
1588
+ if (max === min) {
1589
+ return { h: 0, s: 0, l: l * 100 };
1576
1590
  }
1577
- return buildStrokeOutline(element) !== void 0 || getPictureShadowFilter(element) !== void 0;
1591
+ const d = max - min;
1592
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1593
+ let h;
1594
+ if (max === rn) {
1595
+ h = ((gn - bn) / d + (gn < bn ? 6 : 0)) * 60;
1596
+ } else if (max === gn) {
1597
+ h = ((bn - rn) / d + 2) * 60;
1598
+ } else {
1599
+ h = ((rn - gn) / d + 4) * 60;
1600
+ }
1601
+ return { h, s: s * 100, l: l * 100 };
1578
1602
  }
1579
- function getPictureFrameLayers(element, clip) {
1580
- const clipStyle = {
1581
- overflow: clip.overflow,
1582
- ...clip.borderRadius ? { borderRadius: clip.borderRadius } : {},
1583
- ...clip.clipPath ? { clipPath: clip.clipPath } : {}
1584
- };
1585
- if (!hasPictureFrame(element)) {
1586
- return { box: clipStyle, surface: void 0 };
1603
+ function hslToRgb(h, s, l) {
1604
+ const sn = s / 100;
1605
+ const ln = l / 100;
1606
+ if (sn === 0) {
1607
+ const v = Math.round(ln * 255);
1608
+ return { r: v, g: v, b: v };
1587
1609
  }
1588
- const shadow = getPictureShadowFilter(element);
1610
+ const hueToRgb = (p2, q2, t) => {
1611
+ let tn = t;
1612
+ if (tn < 0) {
1613
+ tn += 1;
1614
+ }
1615
+ if (tn > 1) {
1616
+ tn -= 1;
1617
+ }
1618
+ if (tn < 1 / 6) {
1619
+ return p2 + (q2 - p2) * 6 * tn;
1620
+ }
1621
+ if (tn < 1 / 2) {
1622
+ return q2;
1623
+ }
1624
+ if (tn < 2 / 3) {
1625
+ return p2 + (q2 - p2) * (2 / 3 - tn) * 6;
1626
+ }
1627
+ return p2;
1628
+ };
1629
+ const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;
1630
+ const p = 2 * ln - q;
1631
+ const hn = h / 360;
1589
1632
  return {
1590
- box: { overflow: "visible", ...shadow ? { filter: shadow } : {} },
1591
- surface: { position: "absolute", inset: "0", ...clipStyle }
1633
+ r: Math.round(hueToRgb(p, q, hn + 1 / 3) * 255),
1634
+ g: Math.round(hueToRgb(p, q, hn) * 255),
1635
+ b: Math.round(hueToRgb(p, q, hn - 1 / 3) * 255)
1592
1636
  };
1593
1637
  }
1638
+ function interpolateColor(from, to, t, colorSpace, direction) {
1639
+ const fromRgb = hexToRgb(from);
1640
+ const toRgb = hexToRgb(to);
1641
+ if (colorSpace === "rgb") {
1642
+ return rgbToHex(
1643
+ fromRgb.r + (toRgb.r - fromRgb.r) * t,
1644
+ fromRgb.g + (toRgb.g - fromRgb.g) * t,
1645
+ fromRgb.b + (toRgb.b - fromRgb.b) * t
1646
+ );
1647
+ }
1648
+ const fromHsl = rgbToHsl(fromRgb.r, fromRgb.g, fromRgb.b);
1649
+ const toHsl = rgbToHsl(toRgb.r, toRgb.g, toRgb.b);
1650
+ let hDelta = toHsl.h - fromHsl.h;
1651
+ const dir = direction ?? "cw";
1652
+ if (dir === "cw") {
1653
+ if (hDelta < 0) {
1654
+ hDelta += 360;
1655
+ }
1656
+ } else if (hDelta > 0) {
1657
+ hDelta -= 360;
1658
+ }
1659
+ const h = ((fromHsl.h + hDelta * t) % 360 + 360) % 360;
1660
+ const s = fromHsl.s + (toHsl.s - fromHsl.s) * t;
1661
+ const l = fromHsl.l + (toHsl.l - fromHsl.l) * t;
1662
+ const rgb = hslToRgb(h, s, l);
1663
+ return rgbToHex(rgb.r, rgb.g, rgb.b);
1664
+ }
1665
+ var ATTR_NAME_TO_CSS_PROPERTIES = {
1666
+ fillcolor: ["fill", "background-color", "backgroundColor"],
1667
+ "fill.color": ["fill", "background-color", "backgroundColor"],
1668
+ "style.color": ["color"],
1669
+ "stroke.color": ["stroke", "border-color", "borderColor"],
1670
+ "stroke.dashstyle": ["stroke", "border-color", "borderColor"],
1671
+ "style.visibility": ["color"],
1672
+ ppt_c: ["color"],
1673
+ ppt_x: ["color"],
1674
+ ppt_y: ["color"]
1675
+ };
1676
+ function resolveCssProperties(attrName) {
1677
+ if (!attrName) {
1678
+ return ["color"];
1679
+ }
1680
+ return ATTR_NAME_TO_CSS_PROPERTIES[attrName] ?? ["color"];
1681
+ }
1682
+ function resolveColorAnimationTargets(animationOrAttribute) {
1683
+ const attributes = typeof animationOrAttribute === "string" || animationOrAttribute === void 0 ? [animationOrAttribute] : colorAnimationComponents(animationOrAttribute).map(
1684
+ (component2) => component2.targetAttribute
1685
+ );
1686
+ const targets = [];
1687
+ for (const attribute of attributes) {
1688
+ const cssProperties = resolveCssProperties(attribute);
1689
+ if (cssProperties.includes("fill") && !targets.includes("fill")) {
1690
+ targets.push("fill");
1691
+ }
1692
+ if (cssProperties.includes("stroke") && !targets.includes("stroke")) {
1693
+ targets.push("stroke");
1694
+ }
1695
+ }
1696
+ return targets;
1697
+ }
1698
+ var ANIMATION_COLOR_BASE_PROPERTIES = {
1699
+ color: "--pptx-animation-color-base",
1700
+ fill: "--pptx-animation-fill-base",
1701
+ stroke: "--pptx-animation-stroke-base"
1702
+ };
1703
+ function colorAnimationComponents(colorAnim) {
1704
+ return colorAnim.components && colorAnim.components.length > 0 ? colorAnim.components : [colorAnim];
1705
+ }
1706
+ function clampPercent(value) {
1707
+ return Math.max(0, Math.min(100, value));
1708
+ }
1709
+ function applyHslDelta(fromColor, delta, progress) {
1710
+ const fromRgb = hexToRgb(fromColor);
1711
+ const fromHsl = rgbToHsl(fromRgb.r, fromRgb.g, fromRgb.b);
1712
+ const hue = ((fromHsl.h + delta.hue * progress) % 360 + 360) % 360;
1713
+ const saturation = clampPercent(fromHsl.s + delta.saturation * progress);
1714
+ const lightness = clampPercent(fromHsl.l + delta.lightness * progress);
1715
+ const rgb = hslToRgb(hue, saturation, lightness);
1716
+ return rgbToHex(rgb.r, rgb.g, rgb.b);
1717
+ }
1718
+ function cssNumber(value) {
1719
+ const rounded = Math.round(value * 1e6) / 1e6;
1720
+ return String(Object.is(rounded, -0) ? 0 : rounded);
1721
+ }
1722
+ function baseColorForProperty(property) {
1723
+ if (property === "fill" || property === "background-color" || property === "backgroundColor") {
1724
+ return `var(${ANIMATION_COLOR_BASE_PROPERTIES.fill}, currentColor)`;
1725
+ }
1726
+ if (property === "stroke" || property === "border-color" || property === "borderColor") {
1727
+ return `var(${ANIMATION_COLOR_BASE_PROPERTIES.stroke}, currentColor)`;
1728
+ }
1729
+ return `var(${ANIMATION_COLOR_BASE_PROPERTIES.color}, currentColor)`;
1730
+ }
1731
+ function relativeHslColor(property, delta, progress) {
1732
+ const hue = cssNumber(delta.hue * progress);
1733
+ const saturation = cssNumber(delta.saturation * progress);
1734
+ const lightness = cssNumber(delta.lightness * progress);
1735
+ return `hsl(from ${baseColorForProperty(property)} calc(h + ${hue}) calc(s + ${saturation}) calc(l + ${lightness}) / alpha)`;
1736
+ }
1737
+ function resolveComponentColorHex(raw, ref, themeColorMap) {
1738
+ if (!raw) {
1739
+ return void 0;
1740
+ }
1741
+ if (HEX_COLOR.test(raw)) {
1742
+ return raw;
1743
+ }
1744
+ return ref ? pptx.resolveThemeColorRef(ref, themeColorMap) : void 0;
1745
+ }
1746
+ function absoluteComponentColor(component2, progress, themeColorMap) {
1747
+ const { colorSpace, direction } = component2;
1748
+ const fromColor = resolveComponentColorHex(
1749
+ component2.fromColor,
1750
+ component2.fromColorRef,
1751
+ themeColorMap
1752
+ );
1753
+ const toColor = resolveComponentColorHex(component2.toColor, component2.toColorRef, themeColorMap);
1754
+ const byColor = resolveComponentColorHex(component2.byColor, component2.byColorRef, themeColorMap);
1755
+ let effectiveFrom;
1756
+ let effectiveTo;
1757
+ if (fromColor && toColor) {
1758
+ effectiveFrom = fromColor;
1759
+ effectiveTo = toColor;
1760
+ } else if (fromColor && byColor) {
1761
+ const fromRgb = hexToRgb(fromColor);
1762
+ const byRgb = hexToRgb(byColor);
1763
+ effectiveFrom = fromColor;
1764
+ effectiveTo = rgbToHex(fromRgb.r + byRgb.r, fromRgb.g + byRgb.g, fromRgb.b + byRgb.b);
1765
+ } else if (toColor) {
1766
+ effectiveFrom = "#000000";
1767
+ effectiveTo = toColor;
1768
+ } else {
1769
+ return void 0;
1770
+ }
1771
+ return interpolateColor(effectiveFrom, effectiveTo, progress, colorSpace, direction);
1772
+ }
1773
+ function buildColorAnimationKeyframes(colorAnim, keyframeName2, steps = 10, themeColorMap) {
1774
+ const components = colorAnimationComponents(colorAnim);
1775
+ if (!components.some(
1776
+ (component2) => component2.hslDelta !== void 0 || component2.toColor !== void 0 || component2.fromColor !== void 0 && component2.byColor !== void 0
1777
+ )) {
1778
+ return void 0;
1779
+ }
1780
+ const lines = [];
1781
+ let hasDeclarations = false;
1782
+ const actualSteps = Math.max(2, steps);
1783
+ for (let i = 0; i <= actualSteps; i++) {
1784
+ const t = i / actualSteps;
1785
+ const pct3 = Math.round(t * 100);
1786
+ const declarations3 = [];
1787
+ for (const component2 of components) {
1788
+ const cssProperties = resolveCssProperties(component2.targetAttribute);
1789
+ if (component2.hslDelta) {
1790
+ const hslFromColor = resolveComponentColorHex(
1791
+ component2.fromColor,
1792
+ component2.fromColorRef,
1793
+ themeColorMap
1794
+ );
1795
+ if (component2.fromColor && !hslFromColor) {
1796
+ continue;
1797
+ }
1798
+ for (const property of cssProperties) {
1799
+ const color2 = hslFromColor ? applyHslDelta(hslFromColor, component2.hslDelta, t) : relativeHslColor(property, component2.hslDelta, t);
1800
+ declarations3.push(`${property}: ${color2};`);
1801
+ hasDeclarations = true;
1802
+ }
1803
+ continue;
1804
+ }
1805
+ const color = absoluteComponentColor(component2, t, themeColorMap);
1806
+ if (color) {
1807
+ declarations3.push(...cssProperties.map((property) => `${property}: ${color};`));
1808
+ hasDeclarations = true;
1809
+ }
1810
+ }
1811
+ const decls = declarations3.join(" ");
1812
+ lines.push(` ${pct3}% { ${decls} }`);
1813
+ }
1814
+ return hasDeclarations ? `@keyframes ${keyframeName2} {
1815
+ ${lines.join("\n")}
1816
+ }` : void 0;
1817
+ }
1594
1818
  var NO_STROKE = {
1595
1819
  borderWidth: 0,
1596
1820
  cssBorderWidth: "0px",
@@ -1664,6 +1888,119 @@ function getComputedStrokeStyle(element) {
1664
1888
  ...joins
1665
1889
  };
1666
1890
  }
1891
+
1892
+ // src/pptx/render/animation-color-base-style.ts
1893
+ function getAnimationColorBaseStyle(element, options = {}) {
1894
+ if (!pptx.hasShapeProperties(element) || !options.animatesFill && !options.animatesStroke) {
1895
+ return {};
1896
+ }
1897
+ const style = {};
1898
+ if (options.animatesFill) {
1899
+ const fill = chunkVFPVEVF4_cjs.getComputedFillStyle(element, options.parentGroupFill);
1900
+ style[ANIMATION_COLOR_BASE_PROPERTIES.fill] = fill?.backgroundColor ?? element.shapeStyle?.fillColor ?? "currentColor";
1901
+ }
1902
+ if (options.animatesStroke) {
1903
+ const stroke = getComputedStrokeStyle(element);
1904
+ style[ANIMATION_COLOR_BASE_PROPERTIES.stroke] = stroke.borderColor ?? element.shapeStyle?.strokeColor ?? "currentColor";
1905
+ }
1906
+ style[ANIMATION_COLOR_BASE_PROPERTIES.color] = (pptx.hasTextProperties(element) ? element.textStyle?.color : void 0) ?? "currentColor";
1907
+ return style;
1908
+ }
1909
+
1910
+ // src/pptx/render/animation-target-id.ts
1911
+ var BACKGROUND_ANIMATION_ID_SUFFIX = "::pptx-bg";
1912
+ function resolveAnimationTargetId(animation) {
1913
+ const targetId = (animation.target?.type === "shape" ? animation.target.subShapeId : void 0) ?? animation.targetId ?? "";
1914
+ if (targetId && animation.target?.type === "shape" && animation.target.backgroundOnly === true) {
1915
+ return `${targetId}${BACKGROUND_ANIMATION_ID_SUFFIX}`;
1916
+ }
1917
+ return targetId;
1918
+ }
1919
+
1920
+ // src/pptx/render/animation-opacity-style.ts
1921
+ function getAnimationOpacity(state, authored) {
1922
+ return state?.opacity ?? authored;
1923
+ }
1924
+ var authoredOpacity = /* @__PURE__ */ new WeakMap();
1925
+ function applyAnimationOpacity(element, state) {
1926
+ if (state?.opacity !== void 0) {
1927
+ if (!authoredOpacity.has(element)) {
1928
+ authoredOpacity.set(
1929
+ element,
1930
+ element.dataset.animId?.endsWith(BACKGROUND_ANIMATION_ID_SUFFIX) ? "" : element.style.opacity
1931
+ );
1932
+ }
1933
+ element.style.opacity = String(getAnimationOpacity(state, void 0));
1934
+ } else if (authoredOpacity.has(element)) {
1935
+ element.style.opacity = authoredOpacity.get(element);
1936
+ authoredOpacity.delete(element);
1937
+ }
1938
+ }
1939
+ function getShapeEffectLayerPlacement(element) {
1940
+ const afterBody = pptx.isImageLikeElement(element);
1941
+ return { beforeBody: !afterBody, afterBody };
1942
+ }
1943
+ function getShapeEffectAnimationLayerStyle(element, visualStyle, state) {
1944
+ return {
1945
+ ...getAnimationColorBaseStyle(element, state),
1946
+ ...visualStyle,
1947
+ ...state.opacity !== void 0 ? { opacity: getAnimationOpacity(state, void 0) } : {},
1948
+ ...pptx.isImageLikeElement(element) ? { clipPath: "none", overflow: "visible" } : {},
1949
+ position: "absolute",
1950
+ inset: "0",
1951
+ transformOrigin: "center",
1952
+ visibility: state.visible === false ? "hidden" : "visible",
1953
+ ...state.cssAnimation ? { animation: state.cssAnimation } : {},
1954
+ pointerEvents: "none"
1955
+ };
1956
+ }
1957
+ function getPictureShadowFilter(element) {
1958
+ if (!pptx.isImageLikeElement(element) || !pptx.hasShapeProperties(element)) {
1959
+ return void 0;
1960
+ }
1961
+ return getCompositeOuterShadowFilterCss(element.shapeStyle, { rotation: element.rotation });
1962
+ }
1963
+ function hasPictureFrame(element) {
1964
+ if (!pptx.isImageLikeElement(element)) {
1965
+ return false;
1966
+ }
1967
+ return buildStrokeOutline(element) !== void 0 || getPictureShadowFilter(element) !== void 0;
1968
+ }
1969
+ function getPictureFrameLayers(element, clip) {
1970
+ const clipStyle = {
1971
+ overflow: clip.overflow,
1972
+ ...clip.borderRadius ? { borderRadius: clip.borderRadius } : {},
1973
+ ...clip.clipPath ? { clipPath: clip.clipPath } : {}
1974
+ };
1975
+ if (!hasPictureFrame(element)) {
1976
+ return { box: clipStyle, surface: void 0 };
1977
+ }
1978
+ const shadow = getPictureShadowFilter(element);
1979
+ return {
1980
+ box: { overflow: "visible", ...shadow ? { filter: shadow } : {} },
1981
+ surface: { position: "absolute", inset: "0", ...clipStyle }
1982
+ };
1983
+ }
1984
+
1985
+ // src/pptx/render/background-animation-layers.ts
1986
+ function getBackgroundAnimationState(element, states) {
1987
+ return element.type === "text" || element.type === "shape" || element.type === "picture" || element.type === "image" ? states?.get(`${element.id}${BACKGROUND_ANIMATION_ID_SUFFIX}`) : void 0;
1988
+ }
1989
+ var PAINT = /^(?:background|border|stroke|fill)|^(?:filter|boxShadow|mixBlendMode|clipPath)$/;
1990
+ function getBackgroundAnimationLayers(element, style, state) {
1991
+ if (!state) return { box: style, paint: void 0, targetId: void 0 };
1992
+ const box = {}, paint = {};
1993
+ for (const [key, value] of Object.entries(style)) {
1994
+ if (PAINT.test(key) && (typeof value === "string" || typeof value === "number"))
1995
+ paint[key] = value;
1996
+ else Object.assign(box, { [key]: value });
1997
+ }
1998
+ return {
1999
+ box,
2000
+ paint: getShapeEffectAnimationLayerStyle(element, paint, state),
2001
+ targetId: `${element.id}${BACKGROUND_ANIMATION_ID_SUFFIX}`
2002
+ };
2003
+ }
1667
2004
  function isImageTiled(element) {
1668
2005
  if (!pptx.isImageLikeElement(element)) {
1669
2006
  return false;
@@ -9451,15 +9788,13 @@ function bookmarkTriggerPatch(optionValue) {
9451
9788
  };
9452
9789
  }
9453
9790
  function setTriggerBookmark(anims, elementId, optionValue) {
9454
- return chunkY4LTLCQP_cjs.upsert(anims, elementId, (cur) => ({ ...cur, ...bookmarkTriggerPatch(optionValue) }));
9791
+ return chunkOJFD3SHS_cjs.upsert(anims, elementId, (cur) => ({ ...cur, ...bookmarkTriggerPatch(optionValue) }));
9455
9792
  }
9456
-
9457
- // src/pptx/render/animation-timeline-rows.ts
9458
9793
  function nativeRowKey(anchor) {
9459
9794
  return `native:${anchor.order}`;
9460
9795
  }
9461
9796
  function buildAnimationTimelineRows(animations, anchors = []) {
9462
- const editorRows = animations.map((anim) => ({
9797
+ const editorRows = animations.filter((anim) => !pptx.isNativeAfterAnimationOnly(anim)).map((anim) => ({
9463
9798
  kind: "editor",
9464
9799
  key: `editor:${anim.elementId}`,
9465
9800
  order: anim.order ?? 0,
@@ -9794,7 +10129,7 @@ function getEffectSoundAsset(id) {
9794
10129
 
9795
10130
  // src/pptx/render/animation-sound-authoring.ts
9796
10131
  function getEffectSoundState(slideAnimations, elementId) {
9797
- const entry5 = chunkY4LTLCQP_cjs.animationFor(slideAnimations, elementId);
10132
+ const entry5 = chunkOJFD3SHS_cjs.animationFor(slideAnimations, elementId);
9798
10133
  if (!entry5) {
9799
10134
  return { hasSound: false };
9800
10135
  }
@@ -9825,7 +10160,7 @@ function lastPathSegment(path) {
9825
10160
  return segments[segments.length - 1] || void 0;
9826
10161
  }
9827
10162
  function setEffectSound(anims, elementId, pick) {
9828
- return chunkY4LTLCQP_cjs.upsert(anims, elementId, (cur) => ({
10163
+ return chunkOJFD3SHS_cjs.upsert(anims, elementId, (cur) => ({
9829
10164
  ...cur,
9830
10165
  soundData: pick?.dataUrl,
9831
10166
  soundFileName: pick?.fileName,
@@ -9835,35 +10170,6 @@ function setEffectSound(anims, elementId, pick) {
9835
10170
  }));
9836
10171
  }
9837
10172
 
9838
- // src/pptx/render/animation-after-effect-authoring.ts
9839
- var AFTER_ANIMATION_VALUES = [
9840
- "none",
9841
- "dimToColor",
9842
- "hideAfterAnimation",
9843
- "hideOnNextClick"
9844
- ];
9845
- var DEFAULT_AFTER_ANIMATION_DIM_COLOR = "#808080";
9846
- function setAfterAnimation(anims, elementId, action) {
9847
- return chunkY4LTLCQP_cjs.upsert(anims, elementId, (cur) => {
9848
- const value = action === "none" ? void 0 : action;
9849
- return {
9850
- ...cur,
9851
- afterAnimation: value,
9852
- afterAnimationColor: value === "dimToColor" ? cur.afterAnimationColor ?? DEFAULT_AFTER_ANIMATION_DIM_COLOR : void 0
9853
- };
9854
- });
9855
- }
9856
- function setAfterAnimationColor(anims, elementId, color) {
9857
- const entry5 = chunkY4LTLCQP_cjs.animationFor(anims, elementId);
9858
- if (!entry5 || entry5.afterAnimation !== "dimToColor") {
9859
- return [...anims];
9860
- }
9861
- return chunkY4LTLCQP_cjs.upsert(anims, elementId, (cur) => ({ ...cur, afterAnimationColor: color }));
9862
- }
9863
- function getAfterAnimation(slideAnimations, elementId) {
9864
- return chunkY4LTLCQP_cjs.animationFor(slideAnimations, elementId)?.afterAnimation ?? "none";
9865
- }
9866
-
9867
10173
  // src/pptx/render/animation-playback.ts
9868
10174
  function startsNewGroup(trigger) {
9869
10175
  return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover" || trigger === "onMediaBookmark";
@@ -9934,8 +10240,8 @@ function revealedElementStyles(groups, step) {
9934
10240
  function pendingElementStyles(groups, step) {
9935
10241
  const result = /* @__PURE__ */ new Map();
9936
10242
  const clamped = clampStep(step, groups.length);
9937
- const pending = groups.slice(clamped);
9938
- for (const group of pending) {
10243
+ const pending2 = groups.slice(clamped);
10244
+ for (const group of pending2) {
9939
10245
  for (const animation of group.animations) {
9940
10246
  const hidden = initialHiddenStyle(animation);
9941
10247
  if (Object.keys(hidden).length > 0 && !result.has(animation.elementId)) {
@@ -11766,273 +12072,6 @@ var KEYFRAME_DEFINITIONS = {
11766
12072
  function getEffectKeyframes(effect) {
11767
12073
  return KEYFRAME_DEFINITIONS[effect] ?? "";
11768
12074
  }
11769
- var HEX_COLOR = /^#?[0-9a-f]{6}$/iu;
11770
- function hexToRgb(hex2) {
11771
- const cleaned = hex2.replace(/^#/u, "");
11772
- const val = parseInt(cleaned, 16);
11773
- return {
11774
- r: val >> 16 & 255,
11775
- g: val >> 8 & 255,
11776
- b: val & 255
11777
- };
11778
- }
11779
- function rgbToHex(r, g, b) {
11780
- const clamp10 = (v) => Math.max(0, Math.min(255, Math.round(v)));
11781
- return `#${clamp10(r).toString(16).padStart(2, "0")}${clamp10(g).toString(16).padStart(2, "0")}${clamp10(b).toString(16).padStart(2, "0")}`;
11782
- }
11783
- function rgbToHsl(r, g, b) {
11784
- const rn = r / 255;
11785
- const gn = g / 255;
11786
- const bn = b / 255;
11787
- const max = Math.max(rn, gn, bn);
11788
- const min = Math.min(rn, gn, bn);
11789
- const l = (max + min) / 2;
11790
- if (max === min) {
11791
- return { h: 0, s: 0, l: l * 100 };
11792
- }
11793
- const d = max - min;
11794
- const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
11795
- let h;
11796
- if (max === rn) {
11797
- h = ((gn - bn) / d + (gn < bn ? 6 : 0)) * 60;
11798
- } else if (max === gn) {
11799
- h = ((bn - rn) / d + 2) * 60;
11800
- } else {
11801
- h = ((rn - gn) / d + 4) * 60;
11802
- }
11803
- return { h, s: s * 100, l: l * 100 };
11804
- }
11805
- function hslToRgb2(h, s, l) {
11806
- const sn = s / 100;
11807
- const ln = l / 100;
11808
- if (sn === 0) {
11809
- const v = Math.round(ln * 255);
11810
- return { r: v, g: v, b: v };
11811
- }
11812
- const hueToRgb = (p2, q2, t) => {
11813
- let tn = t;
11814
- if (tn < 0) {
11815
- tn += 1;
11816
- }
11817
- if (tn > 1) {
11818
- tn -= 1;
11819
- }
11820
- if (tn < 1 / 6) {
11821
- return p2 + (q2 - p2) * 6 * tn;
11822
- }
11823
- if (tn < 1 / 2) {
11824
- return q2;
11825
- }
11826
- if (tn < 2 / 3) {
11827
- return p2 + (q2 - p2) * (2 / 3 - tn) * 6;
11828
- }
11829
- return p2;
11830
- };
11831
- const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;
11832
- const p = 2 * ln - q;
11833
- const hn = h / 360;
11834
- return {
11835
- r: Math.round(hueToRgb(p, q, hn + 1 / 3) * 255),
11836
- g: Math.round(hueToRgb(p, q, hn) * 255),
11837
- b: Math.round(hueToRgb(p, q, hn - 1 / 3) * 255)
11838
- };
11839
- }
11840
- function interpolateColor(from, to, t, colorSpace, direction) {
11841
- const fromRgb = hexToRgb(from);
11842
- const toRgb = hexToRgb(to);
11843
- if (colorSpace === "rgb") {
11844
- return rgbToHex(
11845
- fromRgb.r + (toRgb.r - fromRgb.r) * t,
11846
- fromRgb.g + (toRgb.g - fromRgb.g) * t,
11847
- fromRgb.b + (toRgb.b - fromRgb.b) * t
11848
- );
11849
- }
11850
- const fromHsl = rgbToHsl(fromRgb.r, fromRgb.g, fromRgb.b);
11851
- const toHsl = rgbToHsl(toRgb.r, toRgb.g, toRgb.b);
11852
- let hDelta = toHsl.h - fromHsl.h;
11853
- const dir = direction ?? "cw";
11854
- if (dir === "cw") {
11855
- if (hDelta < 0) {
11856
- hDelta += 360;
11857
- }
11858
- } else if (hDelta > 0) {
11859
- hDelta -= 360;
11860
- }
11861
- const h = ((fromHsl.h + hDelta * t) % 360 + 360) % 360;
11862
- const s = fromHsl.s + (toHsl.s - fromHsl.s) * t;
11863
- const l = fromHsl.l + (toHsl.l - fromHsl.l) * t;
11864
- const rgb = hslToRgb2(h, s, l);
11865
- return rgbToHex(rgb.r, rgb.g, rgb.b);
11866
- }
11867
- var ATTR_NAME_TO_CSS_PROPERTIES = {
11868
- fillcolor: ["fill", "background-color", "backgroundColor"],
11869
- "fill.color": ["fill", "background-color", "backgroundColor"],
11870
- "style.color": ["color"],
11871
- "stroke.color": ["stroke", "border-color", "borderColor"],
11872
- "stroke.dashstyle": ["stroke", "border-color", "borderColor"],
11873
- "style.visibility": ["color"],
11874
- ppt_c: ["color"],
11875
- ppt_x: ["color"],
11876
- ppt_y: ["color"]
11877
- };
11878
- function resolveCssProperties(attrName) {
11879
- if (!attrName) {
11880
- return ["color"];
11881
- }
11882
- return ATTR_NAME_TO_CSS_PROPERTIES[attrName] ?? ["color"];
11883
- }
11884
- function resolveColorAnimationTargets(animationOrAttribute) {
11885
- const attributes = typeof animationOrAttribute === "string" || animationOrAttribute === void 0 ? [animationOrAttribute] : colorAnimationComponents(animationOrAttribute).map(
11886
- (component2) => component2.targetAttribute
11887
- );
11888
- const targets = [];
11889
- for (const attribute of attributes) {
11890
- const cssProperties = resolveCssProperties(attribute);
11891
- if (cssProperties.includes("fill") && !targets.includes("fill")) {
11892
- targets.push("fill");
11893
- }
11894
- if (cssProperties.includes("stroke") && !targets.includes("stroke")) {
11895
- targets.push("stroke");
11896
- }
11897
- }
11898
- return targets;
11899
- }
11900
- var ANIMATION_COLOR_BASE_PROPERTIES = {
11901
- color: "--pptx-animation-color-base",
11902
- fill: "--pptx-animation-fill-base",
11903
- stroke: "--pptx-animation-stroke-base"
11904
- };
11905
- function colorAnimationComponents(colorAnim) {
11906
- return colorAnim.components && colorAnim.components.length > 0 ? colorAnim.components : [colorAnim];
11907
- }
11908
- function clampPercent(value) {
11909
- return Math.max(0, Math.min(100, value));
11910
- }
11911
- function applyHslDelta(fromColor, delta, progress) {
11912
- const fromRgb = hexToRgb(fromColor);
11913
- const fromHsl = rgbToHsl(fromRgb.r, fromRgb.g, fromRgb.b);
11914
- const hue = ((fromHsl.h + delta.hue * progress) % 360 + 360) % 360;
11915
- const saturation = clampPercent(fromHsl.s + delta.saturation * progress);
11916
- const lightness = clampPercent(fromHsl.l + delta.lightness * progress);
11917
- const rgb = hslToRgb2(hue, saturation, lightness);
11918
- return rgbToHex(rgb.r, rgb.g, rgb.b);
11919
- }
11920
- function cssNumber(value) {
11921
- const rounded = Math.round(value * 1e6) / 1e6;
11922
- return String(Object.is(rounded, -0) ? 0 : rounded);
11923
- }
11924
- function baseColorForProperty(property) {
11925
- if (property === "fill" || property === "background-color" || property === "backgroundColor") {
11926
- return `var(${ANIMATION_COLOR_BASE_PROPERTIES.fill}, currentColor)`;
11927
- }
11928
- if (property === "stroke" || property === "border-color" || property === "borderColor") {
11929
- return `var(${ANIMATION_COLOR_BASE_PROPERTIES.stroke}, currentColor)`;
11930
- }
11931
- return `var(${ANIMATION_COLOR_BASE_PROPERTIES.color}, currentColor)`;
11932
- }
11933
- function relativeHslColor(property, delta, progress) {
11934
- const hue = cssNumber(delta.hue * progress);
11935
- const saturation = cssNumber(delta.saturation * progress);
11936
- const lightness = cssNumber(delta.lightness * progress);
11937
- return `hsl(from ${baseColorForProperty(property)} calc(h + ${hue}) calc(s + ${saturation}) calc(l + ${lightness}) / alpha)`;
11938
- }
11939
- function resolveComponentColorHex(raw, ref, themeColorMap) {
11940
- if (!raw) {
11941
- return void 0;
11942
- }
11943
- if (HEX_COLOR.test(raw)) {
11944
- return raw;
11945
- }
11946
- return ref ? pptx.resolveThemeColorRef(ref, themeColorMap) : void 0;
11947
- }
11948
- function absoluteComponentColor(component2, progress, themeColorMap) {
11949
- const { colorSpace, direction } = component2;
11950
- const fromColor = resolveComponentColorHex(
11951
- component2.fromColor,
11952
- component2.fromColorRef,
11953
- themeColorMap
11954
- );
11955
- const toColor = resolveComponentColorHex(component2.toColor, component2.toColorRef, themeColorMap);
11956
- const byColor = resolveComponentColorHex(component2.byColor, component2.byColorRef, themeColorMap);
11957
- let effectiveFrom;
11958
- let effectiveTo;
11959
- if (fromColor && toColor) {
11960
- effectiveFrom = fromColor;
11961
- effectiveTo = toColor;
11962
- } else if (fromColor && byColor) {
11963
- const fromRgb = hexToRgb(fromColor);
11964
- const byRgb = hexToRgb(byColor);
11965
- effectiveFrom = fromColor;
11966
- effectiveTo = rgbToHex(fromRgb.r + byRgb.r, fromRgb.g + byRgb.g, fromRgb.b + byRgb.b);
11967
- } else if (toColor) {
11968
- effectiveFrom = "#000000";
11969
- effectiveTo = toColor;
11970
- } else {
11971
- return void 0;
11972
- }
11973
- return interpolateColor(effectiveFrom, effectiveTo, progress, colorSpace, direction);
11974
- }
11975
- function buildColorAnimationKeyframes(colorAnim, keyframeName2, steps = 10, themeColorMap) {
11976
- const components = colorAnimationComponents(colorAnim);
11977
- if (!components.some(
11978
- (component2) => component2.hslDelta !== void 0 || component2.toColor !== void 0 || component2.fromColor !== void 0 && component2.byColor !== void 0
11979
- )) {
11980
- return void 0;
11981
- }
11982
- const lines = [];
11983
- let hasDeclarations = false;
11984
- const actualSteps = Math.max(2, steps);
11985
- for (let i = 0; i <= actualSteps; i++) {
11986
- const t = i / actualSteps;
11987
- const pct3 = Math.round(t * 100);
11988
- const declarations3 = [];
11989
- for (const component2 of components) {
11990
- const cssProperties = resolveCssProperties(component2.targetAttribute);
11991
- if (component2.hslDelta) {
11992
- const hslFromColor = resolveComponentColorHex(
11993
- component2.fromColor,
11994
- component2.fromColorRef,
11995
- themeColorMap
11996
- );
11997
- if (component2.fromColor && !hslFromColor) {
11998
- continue;
11999
- }
12000
- for (const property of cssProperties) {
12001
- const color2 = hslFromColor ? applyHslDelta(hslFromColor, component2.hslDelta, t) : relativeHslColor(property, component2.hslDelta, t);
12002
- declarations3.push(`${property}: ${color2};`);
12003
- hasDeclarations = true;
12004
- }
12005
- continue;
12006
- }
12007
- const color = absoluteComponentColor(component2, t, themeColorMap);
12008
- if (color) {
12009
- declarations3.push(...cssProperties.map((property) => `${property}: ${color};`));
12010
- hasDeclarations = true;
12011
- }
12012
- }
12013
- const decls = declarations3.join(" ");
12014
- lines.push(` ${pct3}% { ${decls} }`);
12015
- }
12016
- return hasDeclarations ? `@keyframes ${keyframeName2} {
12017
- ${lines.join("\n")}
12018
- }` : void 0;
12019
- }
12020
- function getAnimationColorBaseStyle(element, options = {}) {
12021
- if (!pptx.hasShapeProperties(element) || !options.animatesFill && !options.animatesStroke) {
12022
- return {};
12023
- }
12024
- const style = {};
12025
- if (options.animatesFill) {
12026
- const fill = chunkVFPVEVF4_cjs.getComputedFillStyle(element, options.parentGroupFill);
12027
- style[ANIMATION_COLOR_BASE_PROPERTIES.fill] = fill?.backgroundColor ?? element.shapeStyle?.fillColor ?? "currentColor";
12028
- }
12029
- if (options.animatesStroke) {
12030
- const stroke = getComputedStrokeStyle(element);
12031
- style[ANIMATION_COLOR_BASE_PROPERTIES.stroke] = stroke.borderColor ?? element.shapeStyle?.strokeColor ?? "currentColor";
12032
- }
12033
- style[ANIMATION_COLOR_BASE_PROPERTIES.color] = (pptx.hasTextProperties(element) ? element.textStyle?.color : void 0) ?? "currentColor";
12034
- return style;
12035
- }
12036
12075
 
12037
12076
  // src/pptx/render/animation-build.ts
12038
12077
  function resolveChartBuildMode(token) {
@@ -12834,16 +12873,6 @@ function parseMotionPathPoints(motionPath) {
12834
12873
  return points;
12835
12874
  }
12836
12875
 
12837
- // src/pptx/render/animation-target-id.ts
12838
- var BACKGROUND_ANIMATION_ID_SUFFIX = "::pptx-bg";
12839
- function resolveAnimationTargetId(animation) {
12840
- const targetId = (animation.target?.type === "shape" ? animation.target.subShapeId : void 0) ?? animation.targetId ?? "";
12841
- if (targetId && animation.target?.type === "shape" && animation.target.backgroundOnly === true) {
12842
- return `${targetId}${BACKGROUND_ANIMATION_ID_SUFFIX}`;
12843
- }
12844
- return targetId;
12845
- }
12846
-
12847
12876
  // src/pptx/render/animation-motion-path-paced.ts
12848
12877
  var DEFAULT_SLIDE_ASPECT = 16 / 9;
12849
12878
  function pacedFractions(points, aspect = DEFAULT_SLIDE_ASPECT) {
@@ -15197,38 +15226,6 @@ var AnimationSequencer = class {
15197
15226
  return blocks.join("\n\n");
15198
15227
  }
15199
15228
  };
15200
- function applyAfterAnimationFromEditorList(nativeAnimations, editorAnimations) {
15201
- if (!editorAnimations || editorAnimations.length === 0) {
15202
- return [...nativeAnimations];
15203
- }
15204
- const byElement = /* @__PURE__ */ new Map();
15205
- for (const ea of editorAnimations) {
15206
- if (ea.afterAnimation && ea.afterAnimation !== "none") {
15207
- byElement.set(ea.elementId, ea);
15208
- }
15209
- }
15210
- if (byElement.size === 0) {
15211
- return [...nativeAnimations];
15212
- }
15213
- return nativeAnimations.map((anim) => {
15214
- if (!anim.targetId || anim.presetClass === void 0 || anim.presetClass === "exit") {
15215
- return anim;
15216
- }
15217
- const ea = byElement.get(anim.targetId);
15218
- if (!ea) {
15219
- return anim;
15220
- }
15221
- return {
15222
- ...anim,
15223
- afterAnimationAction: ea.afterAnimation,
15224
- afterAnimationColor: ea.afterAnimationColor,
15225
- // The editor's own model has no theme-colour-ref concept (it always
15226
- // writes a concrete hex); clear a native scheme ref so a stale one
15227
- // never survives an edit that overrides the colour.
15228
- afterAnimationColorRef: void 0
15229
- };
15230
- });
15231
- }
15232
15229
  function buildAfterAnimationDimKeyframes(color, keyframeName2) {
15233
15230
  return `@keyframes ${keyframeName2} {
15234
15231
  100% { color: ${color}; }
@@ -15924,6 +15921,36 @@ function buildDirectionalKeyframe(effect, subtype, uid2) {
15924
15921
  // src/pptx/render/animation-timeline-step-effect.ts
15925
15922
  function resolveStepEffect(singleAnim, renderContext, dynamicUidStart, includeDirectional = true, pixelateMosaic) {
15926
15923
  let dynamicUid = dynamicUidStart;
15924
+ const opacitySet = pptx.resolveOpacitySet(singleAnim);
15925
+ if (opacitySet) {
15926
+ return {
15927
+ opacitySet,
15928
+ effect: void 0,
15929
+ keyframe: "",
15930
+ isCommand: false,
15931
+ tavColorApplied: false,
15932
+ dynamicCss: void 0,
15933
+ nextDynamicUid: dynamicUid,
15934
+ skip: false
15935
+ };
15936
+ }
15937
+ if (singleAnim.behaviors?.some(
15938
+ (behavior) => behavior.kind === "set" && behavior.attrNames.includes("style.opacity")
15939
+ )) {
15940
+ console.warn(
15941
+ "Unsupported native opacity set target, value or timing profile",
15942
+ singleAnim.targetId
15943
+ );
15944
+ return {
15945
+ effect: void 0,
15946
+ keyframe: "",
15947
+ isCommand: false,
15948
+ tavColorApplied: false,
15949
+ dynamicCss: void 0,
15950
+ nextDynamicUid: dynamicUid,
15951
+ skip: true
15952
+ };
15953
+ }
15927
15954
  const box = boxForAnimation(singleAnim, renderContext);
15928
15955
  const played = buildBehaviorKeyframes(singleAnim, dynamicUid, box);
15929
15956
  if (played) {
@@ -16138,7 +16165,7 @@ function processRegularAnimation(state, anim, renderContext, pixelateMosaic) {
16138
16165
  );
16139
16166
  const iterStr = iterCount === Infinity ? "infinite" : String(iterCount);
16140
16167
  const easing = resolved.easing ?? cssEasingForAnimation(singleAnim);
16141
- const baseCssAnimation = isCommand ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
16168
+ const baseCssAnimation = isCommand || resolved.opacitySet ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
16142
16169
  const afterFields = isCommand ? { cssAnimation: baseCssAnimation, holdEndState: timing.holdEndState } : resolveAfterAnimationStepFields(
16143
16170
  singleAnim,
16144
16171
  baseCssAnimation,
@@ -16151,6 +16178,7 @@ function processRegularAnimation(state, anim, renderContext, pixelateMosaic) {
16151
16178
  state.dynamicBlocks.push(afterFields.dimKeyframeBlock);
16152
16179
  }
16153
16180
  const step = {
16181
+ opacitySet: resolved.opacitySet,
16154
16182
  elementId,
16155
16183
  cssAnimation: afterFields.cssAnimation,
16156
16184
  keyframeName: keyframe,
@@ -16288,7 +16316,7 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
16288
16316
  }
16289
16317
  const iterStr = iterCount === Infinity ? "infinite" : String(iterCount);
16290
16318
  const easing = resolved.easing ?? cssEasingForAnimation(anim);
16291
- const baseCssAnimation = isCommand ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
16319
+ const baseCssAnimation = isCommand || resolved.opacitySet ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
16292
16320
  const afterFields = isCommand ? { cssAnimation: baseCssAnimation, holdEndState: timing.holdEndState } : resolveAfterAnimationStepFields(
16293
16321
  anim,
16294
16322
  baseCssAnimation,
@@ -16301,6 +16329,7 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
16301
16329
  dynamicBlocks.push(afterFields.dimKeyframeBlock);
16302
16330
  }
16303
16331
  const step = {
16332
+ opacitySet: resolved.opacitySet,
16304
16333
  elementId,
16305
16334
  cssAnimation: afterFields.cssAnimation,
16306
16335
  keyframeName: keyframe,
@@ -16563,6 +16592,10 @@ var TimelineEngine = class _TimelineEngine {
16563
16592
  * `animatesStroke` on {@link ElementAnimationState}.
16564
16593
  */
16565
16594
  activeSteps;
16595
+ /** End-state projection for backward navigation, independent of active paint metadata. */
16596
+ committedOpacity = /* @__PURE__ */ new Map();
16597
+ activeOpacity = /* @__PURE__ */ new Map();
16598
+ opacityClockBase = 0;
16566
16599
  /**
16567
16600
  * Cumulative (oldest-first) history of fired chart-build steps per element,
16568
16601
  * keyed by elementId. See {@link StepApplicationState.chartRevealHistory}
@@ -16830,6 +16863,13 @@ var TimelineEngine = class _TimelineEngine {
16830
16863
  cssAnimation: this.activeAnimations.get(id)
16831
16864
  };
16832
16865
  applyStepBuildMetadata(state, this.activeSteps.get(id), options);
16866
+ const opacity = this.committedOpacity.get(id);
16867
+ if (opacity !== void 0) state.opacity = opacity;
16868
+ const nowMs = options?.elapsedMs === void 0 ? Date.now() : this.opacityClockBase + options.elapsedMs;
16869
+ for (const entry5 of this.activeOpacity.get(id) ?? []) {
16870
+ if (nowMs >= entry5.startMs && (entry5.set.holdEndState || nowMs < entry5.startMs + entry5.set.durationMs))
16871
+ state.opacity = entry5.set.value;
16872
+ }
16833
16873
  const chartInfo = this.chartBuildInfo.get(id);
16834
16874
  if (chartInfo) {
16835
16875
  const descriptor = resolveChartRevealDescriptor(
@@ -16964,6 +17004,8 @@ var TimelineEngine = class _TimelineEngine {
16964
17004
  this.reset();
16965
17005
  for (const group of this.timeline.clickGroups) {
16966
17006
  for (const step of group.steps) {
17007
+ if (step.opacitySet?.holdEndState)
17008
+ this.committedOpacity.set(step.elementId, step.opacitySet.value);
16967
17009
  if (step.build || step.colorTargets) {
16968
17010
  this.activeSteps.set(step.elementId, step);
16969
17011
  }
@@ -16994,6 +17036,8 @@ var TimelineEngine = class _TimelineEngine {
16994
17036
  this.currentGroupIndex = -1;
16995
17037
  this.activeAnimations.clear();
16996
17038
  this.activeSteps.clear();
17039
+ this.committedOpacity.clear();
17040
+ this.activeOpacity.clear();
16997
17041
  this.chartRevealHistory.clear();
16998
17042
  this.diagramRevealHistory.clear();
16999
17043
  this.revealedElements.clear();
@@ -17023,6 +17067,7 @@ var TimelineEngine = class _TimelineEngine {
17023
17067
  * unchanged.
17024
17068
  */
17025
17069
  applyGroupSteps(group, nowMs) {
17070
+ this.opacityClockBase = nowMs;
17026
17071
  let appliedSteps;
17027
17072
  for (let i = 0; i < group.steps.length; i++) {
17028
17073
  const step = group.steps[i];
@@ -17040,6 +17085,14 @@ var TimelineEngine = class _TimelineEngine {
17040
17085
  appliedSteps ??= group.steps.slice(0, i);
17041
17086
  continue;
17042
17087
  }
17088
+ if (step.opacitySet) {
17089
+ const history = this.activeOpacity.get(step.elementId) ?? [];
17090
+ history.push({
17091
+ set: step.opacitySet,
17092
+ startMs: nowMs + step.delayMs + step.opacitySet.delayMs
17093
+ });
17094
+ this.activeOpacity.set(step.elementId, history);
17095
+ }
17043
17096
  if (step.exclGroupId !== void 0) {
17044
17097
  const holder = this.exclusiveHolders.get(step.exclGroupId);
17045
17098
  if (holder !== void 0 && holder !== step.elementId) {
@@ -17411,7 +17464,7 @@ function setMotionPath(animations, elementId, path) {
17411
17464
  ];
17412
17465
  }
17413
17466
  function applyMotionPathPreset(animations, elementId, presetId) {
17414
- const preset2 = chunkUEF4BFW4_cjs.motionPathPresetById(presetId);
17467
+ const preset2 = chunkXFQ2RD4I_cjs.motionPathPresetById(presetId);
17415
17468
  if (!preset2) {
17416
17469
  return [...animations];
17417
17470
  }
@@ -17514,7 +17567,7 @@ var PresentationAnimationController = class _PresentationAnimationController {
17514
17567
  ...slide.nativeAnimations ?? [],
17515
17568
  ...motionPathNativeAnimations(slide)
17516
17569
  ];
17517
- const nativeAnims = applyAfterAnimationFromEditorList(rawNativeAnims, slide.animations);
17570
+ const nativeAnims = pptx.applyAfterAnimationFromEditorList(rawNativeAnims, slide.animations);
17518
17571
  const segmentCounts = buildSegmentCounts(slide, nativeAnims);
17519
17572
  const rangedAnims = segmentCounts.size > 0 ? expandTextRangeAnimations(nativeAnims, segmentCounts) : nativeAnims;
17520
17573
  const expandedAnims = segmentCounts.size > 0 ? expandTextBuildAnimations(rangedAnims, segmentCounts) : rangedAnims;
@@ -19662,8 +19715,8 @@ function getComputed3dStyle(el) {
19662
19715
  }
19663
19716
 
19664
19717
  // src/pptx/render/table-cell-padding.ts
19665
- function inset(margin, border2) {
19666
- return `${Math.max(0, margin - (border2 ?? 0) / 2)}px`;
19718
+ function inset(margin, border) {
19719
+ return `${Math.max(0, margin - (border ?? 0) / 2)}px`;
19667
19720
  }
19668
19721
  function cellPaddingCss(style) {
19669
19722
  const css = {};
@@ -19694,16 +19747,16 @@ function edgesFromSection(borders, regionTop, regionBottom, regionLeft, regionRi
19694
19747
  right: regionRight ? borders.right ?? borders.insideV : borders.insideV
19695
19748
  };
19696
19749
  }
19697
- function borderToCss(border2, resolve) {
19698
- if (!border2) {
19750
+ function borderToCss(border, resolve) {
19751
+ if (!border) {
19699
19752
  return void 0;
19700
19753
  }
19701
- if (border2.noFill) {
19754
+ if (border.noFill) {
19702
19755
  return "none";
19703
19756
  }
19704
- const width = border2.width ?? 1;
19705
- const dash = ooxmlDashToCssBorderStyle(border2.dash);
19706
- const color = border2.color ?? resolve(border2.fill) ?? "#000000";
19757
+ const width = border.width ?? 1;
19758
+ const dash = ooxmlDashToCssBorderStyle(border.dash);
19759
+ const color = border.color ?? resolve(border.fill) ?? "#000000";
19707
19760
  return chunk526IHNIH_cjs.screenBorder(width, dash, color);
19708
19761
  }
19709
19762
  function collectSections(entry5, tableData, pos) {
@@ -22787,6 +22840,9 @@ function formatLocalizedDateTimeField(type, date, locale) {
22787
22840
  }
22788
22841
 
22789
22842
  // src/pptx/render/text-field-substitution.ts
22843
+ function resolveDisplaySlideNumber(slideNumber, firstSlideNumber = 1) {
22844
+ return slideNumber < 1 ? slideNumber : firstSlideNumber + slideNumber - 1;
22845
+ }
22790
22846
  var DATETIME_TYPE_FORMATS = {
22791
22847
  datetime1: "M/d/yyyy",
22792
22848
  datetime2: "EEEE, MMMM d, yyyy",
@@ -22861,7 +22917,7 @@ function substituteFieldText(segmentText, fieldType, ctx, runLocale) {
22861
22917
  const fl = fieldType.toLowerCase();
22862
22918
  const locale = runLocale ?? ctx.locale;
22863
22919
  if (fl === "slidenum" && ctx.slideNumber !== void 0) {
22864
- return String(ctx.slideNumber);
22920
+ return String(resolveDisplaySlideNumber(ctx.slideNumber, ctx.firstSlideNumber));
22865
22921
  }
22866
22922
  if (fl.startsWith("datetime")) {
22867
22923
  return resolveFieldDateText(fl, ctx.dateFormat, locale);
@@ -23123,7 +23179,7 @@ function createTemplateContext(options = {}) {
23123
23179
  const scheme = { ...pptx.DEFAULT_SCHEME_COLOR_MAP, ...options.scheme ?? {} };
23124
23180
  let counter = 0;
23125
23181
  const idFor = options.idFor ?? ((index) => `template-el-${Date.now()}-${index}`);
23126
- const dictionary = chunkQVYJB7G2_cjs.translationsEn;
23182
+ const dictionary = chunkY7CDPPMZ_cjs.translationsEn;
23127
23183
  const translate = options.translate ?? ((key) => dictionary[key] ?? key);
23128
23184
  return {
23129
23185
  scheme,
@@ -24266,7 +24322,7 @@ function resolveFollowingSegmentTexts(paraSegments, markerSegment, fieldContext)
24266
24322
  function resolveParagraphStrutFontSize(segments, bodyFontSize, fontScale = 1) {
24267
24323
  let smallest;
24268
24324
  for (const segment of segments) {
24269
- if (chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment)) {
24325
+ if (chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment)) {
24270
24326
  continue;
24271
24327
  }
24272
24328
  const size = segment.style?.fontSize;
@@ -24954,10 +25010,10 @@ function createInlineListSeed(element, options) {
24954
25010
  const virtualIndices = /* @__PURE__ */ new Map();
24955
25011
  for (const [index, paragraph2] of paragraphs2.entries()) {
24956
25012
  if (paragraph2.segments.every(
24957
- (segment, runIndex) => runIndex === 0 && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment) || segment.text === "" && !segment.isLineBreak && !segment.fieldType && !segment.fieldGuid && !segment.equationXml && !segment.rubyText
25013
+ (segment, runIndex) => runIndex === 0 && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment) || segment.text === "" && !segment.isLineBreak && !segment.fieldType && !segment.fieldGuid && !segment.equationXml && !segment.rubyText
24958
25014
  )) {
24959
25015
  const carrier = paragraph2.segments[0] ?? paragraph2.terminator;
24960
- const body = paragraph2.segments.find((segment) => !chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment));
25016
+ const body = paragraph2.segments.find((segment) => !chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment));
24961
25017
  virtualIndices.set(index, segments.length);
24962
25018
  segments.push({
24963
25019
  text: "",
@@ -24977,7 +25033,7 @@ function createInlineListSeed(element, options) {
24977
25033
  presentation: presentation[sourceIndex],
24978
25034
  runs: Object.freeze(
24979
25035
  (virtualIndices.has(sourceIndex) ? [segments[virtualIndices.get(sourceIndex)]] : paragraph2.segments).flatMap((segment, index) => {
24980
- if (index === 0 && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment)) {
25036
+ if (index === 0 && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment)) {
24981
25037
  return [];
24982
25038
  }
24983
25039
  const segmentIndex = virtualIndices.get(sourceIndex) ?? indices[sourceIndex][index];
@@ -25178,11 +25234,11 @@ function recordInlineListProvenance(seed, root, snapshot, blocks, origins, uncha
25178
25234
  if (!block) return;
25179
25235
  paragraphs2.set(block, start < end ? start : terminator ?? null);
25180
25236
  const body = segments.slice(start, end);
25181
- const content = body.filter((segment, index) => index !== 0 || !chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment));
25237
+ const content = body.filter((segment, index) => index !== 0 || !chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment));
25182
25238
  const onlyEmptyCarrier = content.length === 1 && content[0].text === "" && !content[0].isLineBreak;
25183
25239
  for (let index = start; index < end; index++) {
25184
25240
  const segment = segments[index];
25185
- const marker = index === start && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment);
25241
+ const marker = index === start && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment);
25186
25242
  if (!marker && (segment.text !== "" || segment.isLineBreak)) continue;
25187
25243
  const node = marker || onlyEmptyCarrier ? block : unchanged2 ? inlineListDescendants(block).find((child) => session.runNodes.get(child) === index) : origins[index];
25188
25244
  hidden.push({ node, kind: marker ? "marker" : "empty", index });
@@ -25491,11 +25547,11 @@ function readInlineListSnapshot(seed, root) {
25491
25547
  } else {
25492
25548
  pptx.breakAutoNumberRun(sequence, first.paragraphLevel ?? 0);
25493
25549
  }
25494
- if (chunkHWW2UVUP_cjs.isBulletMarkerSegment(first)) {
25550
+ if (chunkJRCK6CFI_cjs.isBulletMarkerSegment(first)) {
25495
25551
  const marker = {
25496
25552
  text: first.text,
25497
25553
  style: structuredClone(
25498
- carrier && chunkHWW2UVUP_cjs.isBulletMarkerSegment(carrier) ? carrier.style : first.style
25554
+ carrier && chunkJRCK6CFI_cjs.isBulletMarkerSegment(carrier) ? carrier.style : first.style
25499
25555
  ),
25500
25556
  ...inlineListParagraphMetadata(first)
25501
25557
  };
@@ -25545,7 +25601,7 @@ function paragraphBodies(segments) {
25545
25601
  paragraphs2.push("");
25546
25602
  first = true;
25547
25603
  } else {
25548
- if (!first || !chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment)) {
25604
+ if (!first || !chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment)) {
25549
25605
  paragraphs2[paragraphs2.length - 1] += segment.isLineBreak ? "\n" : segment.text;
25550
25606
  }
25551
25607
  first = false;
@@ -25558,7 +25614,7 @@ function modelPoint(segments, offset, end) {
25558
25614
  let first = true;
25559
25615
  let last = { index: 0, offset: 0 };
25560
25616
  for (const [index, segment] of segments.entries()) {
25561
- const marker = first && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment);
25617
+ const marker = first && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment);
25562
25618
  first = textSegmentParagraphBreak.isParagraphSeparatorSegment(segment);
25563
25619
  if (marker) {
25564
25620
  if (offset === position && segment.paragraphInsertionStyle && (!segments[index + 1] || textSegmentParagraphBreak.isParagraphSeparatorSegment(segments[index + 1]))) {
@@ -25719,7 +25775,7 @@ function paragraphs(segments) {
25719
25775
  const paragraph2 = result.at(-1);
25720
25776
  const first = !paragraph2.first;
25721
25777
  paragraph2.first ??= segment;
25722
- if (first && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment)) {
25778
+ if (first && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment)) {
25723
25779
  continue;
25724
25780
  }
25725
25781
  const start = paragraph2.text.length;
@@ -26154,7 +26210,7 @@ function readInlineEditorSelection(segments, preserveCaret = false) {
26154
26210
  function isEditableSpan(span, segments) {
26155
26211
  const segment = segments[getSegmentIndex(span)];
26156
26212
  return Boolean(
26157
- segment && !segment.isParagraphBreak && segment.text !== "\n" && !chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment) && (span.textContent?.length ?? 0) > 0
26213
+ segment && !segment.isParagraphBreak && segment.text !== "\n" && !chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment) && (span.textContent?.length ?? 0) > 0
26158
26214
  );
26159
26215
  }
26160
26216
  function getSegmentIndex(span) {
@@ -26212,15 +26268,16 @@ function getPendingSelectionRestore() {
26212
26268
  pendingRestore = null;
26213
26269
  return sel;
26214
26270
  }
26215
- function applyStyleToSelectedSegments(segments, selection, updates) {
26271
+ function applyStyleToSelectedSegments(segments, selection, updates, inherited) {
26216
26272
  const { startSegIdx, startOffset, endSegIdx, endOffset } = selection;
26273
+ const restyle = (style) => chunkEYPNQ3FG_cjs.mergeTextStyleUpdate(style, updates, inherited);
26217
26274
  const result = [];
26218
26275
  let newStartSegIdx = -1;
26219
26276
  let newStartOffset = 0;
26220
26277
  let newEndSegIdx = -1;
26221
26278
  let newEndOffset = 0;
26222
26279
  for (let i = 0; i < segments.length; i++) {
26223
- const seg = i >= startSegIdx && i <= endSegIdx ? chunkOGJRSAGH_cjs.updateTextSegmentStyle(segments[i], updates, { updateBodyStyle: false }) : segments[i];
26280
+ const seg = i >= startSegIdx && i <= endSegIdx ? chunkEYPNQ3FG_cjs.updateTextSegmentStyle(segments[i], updates, { updateBodyStyle: false, inherited }) : segments[i];
26224
26281
  if (seg.isParagraphBreak || seg.text === "\n") {
26225
26282
  result.push({ ...seg, style: { ...seg.style } });
26226
26283
  continue;
@@ -26233,14 +26290,14 @@ function applyStyleToSelectedSegments(segments, selection, updates) {
26233
26290
  result.push({ ...seg, style: { ...seg.style } });
26234
26291
  continue;
26235
26292
  }
26236
- if (seg.paragraphInsertionStyle && (seg.text === "" || chunkHWW2UVUP_cjs.isBulletMarkerSegment(seg))) {
26293
+ if (seg.paragraphInsertionStyle && (seg.text === "" || chunkJRCK6CFI_cjs.isBulletMarkerSegment(seg))) {
26237
26294
  newStartSegIdx = newStartSegIdx < 0 ? result.length : newStartSegIdx;
26238
26295
  newEndSegIdx = result.length;
26239
26296
  result.push(seg);
26240
26297
  continue;
26241
26298
  }
26242
26299
  if (i === startSegIdx && i === endSegIdx) {
26243
- splitSingle(seg, startOffset, endOffset, updates, result);
26300
+ splitSingle(seg, startOffset, endOffset, restyle, result);
26244
26301
  const partsAdded = (startOffset > 0 ? 1 : 0) + 1 + (endOffset < seg.text.length ? 1 : 0);
26245
26302
  const selectedPartIdx = result.length - partsAdded + (startOffset > 0 ? 1 : 0);
26246
26303
  newStartSegIdx = selectedPartIdx;
@@ -26253,7 +26310,7 @@ function applyStyleToSelectedSegments(segments, selection, updates) {
26253
26310
  if (startOffset === 0) {
26254
26311
  newStartSegIdx = result.length;
26255
26312
  newStartOffset = 0;
26256
- result.push({ ...seg, style: { ...seg.style, ...updates } });
26313
+ result.push({ ...seg, style: restyle(seg.style) });
26257
26314
  } else {
26258
26315
  const beforeSeg = {
26259
26316
  text: seg.text.slice(0, startOffset),
@@ -26267,20 +26324,20 @@ function applyStyleToSelectedSegments(segments, selection, updates) {
26267
26324
  newStartOffset = 0;
26268
26325
  result.push({
26269
26326
  text: seg.text.slice(startOffset),
26270
- style: { ...seg.style, ...updates }
26327
+ style: restyle(seg.style)
26271
26328
  });
26272
26329
  }
26273
26330
  continue;
26274
26331
  }
26275
26332
  if (i === endSegIdx) {
26276
26333
  if (endOffset >= seg.text.length) {
26277
- result.push({ ...seg, style: { ...seg.style, ...updates } });
26334
+ result.push({ ...seg, style: restyle(seg.style) });
26278
26335
  newEndSegIdx = result.length - 1;
26279
26336
  newEndOffset = seg.text.length;
26280
26337
  } else {
26281
26338
  result.push({
26282
26339
  text: seg.text.slice(0, endOffset),
26283
- style: { ...seg.style, ...updates }
26340
+ style: restyle(seg.style)
26284
26341
  });
26285
26342
  newEndSegIdx = result.length - 1;
26286
26343
  newEndOffset = endOffset;
@@ -26291,7 +26348,7 @@ function applyStyleToSelectedSegments(segments, selection, updates) {
26291
26348
  }
26292
26349
  continue;
26293
26350
  }
26294
- result.push({ ...seg, style: { ...seg.style, ...updates } });
26351
+ result.push({ ...seg, style: restyle(seg.style) });
26295
26352
  }
26296
26353
  return {
26297
26354
  newSegments: result,
@@ -26303,9 +26360,9 @@ function applyStyleToSelectedSegments(segments, selection, updates) {
26303
26360
  }
26304
26361
  };
26305
26362
  }
26306
- function splitSingle(seg, startOffset, endOffset, updates, result) {
26363
+ function splitSingle(seg, startOffset, endOffset, restyle, result) {
26307
26364
  if (startOffset === 0 && endOffset >= seg.text.length) {
26308
- result.push({ ...seg, style: { ...seg.style, ...updates } });
26365
+ result.push({ ...seg, style: restyle(seg.style) });
26309
26366
  return;
26310
26367
  }
26311
26368
  if (startOffset > 0) {
@@ -26320,7 +26377,7 @@ function splitSingle(seg, startOffset, endOffset, updates, result) {
26320
26377
  }
26321
26378
  result.push({
26322
26379
  text: seg.text.slice(startOffset, endOffset),
26323
- style: { ...seg.style, ...updates }
26380
+ style: restyle(seg.style)
26324
26381
  });
26325
26382
  if (endOffset < seg.text.length) {
26326
26383
  result.push({
@@ -26373,7 +26430,7 @@ function positions(segments) {
26373
26430
  let paragraph2 = 0;
26374
26431
  let first = true;
26375
26432
  return segments.map((segment, index) => {
26376
- const marker = first && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment);
26433
+ const marker = first && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment);
26377
26434
  const emptyCarrier = marker && segment.paragraphInsertionStyle && (!segments[index + 1] || textSegmentParagraphBreak.isParagraphSeparatorSegment(segments[index + 1]));
26378
26435
  const start = offset;
26379
26436
  if (!marker) {
@@ -26431,14 +26488,14 @@ function restoreParagraphMetadata(original, updated) {
26431
26488
  }
26432
26489
  function selectedParagraphBulletKind(element, selection) {
26433
26490
  if (!selection || !pptx.hasTextProperties(element) || !element.textSegments) {
26434
- const kind = chunkHWW2UVUP_cjs.elementBulletKind(element);
26491
+ const kind = chunkJRCK6CFI_cjs.elementBulletKind(element);
26435
26492
  return kind === "mixed" ? "none" : kind;
26436
26493
  }
26437
26494
  let first = selection.startSegIdx;
26438
26495
  while (first > 0 && !textSegmentParagraphBreak.isParagraphSeparatorSegment(element.textSegments[first - 1])) {
26439
26496
  first -= 1;
26440
26497
  }
26441
- return chunkHWW2UVUP_cjs.paragraphBulletKind(element.textSegments.slice(first));
26498
+ return chunkJRCK6CFI_cjs.paragraphBulletKind(element.textSegments.slice(first));
26442
26499
  }
26443
26500
  function applyListStyleUpdate(element, updates, selection) {
26444
26501
  if (!pptx.hasTextProperties(element) || !updates.listType) {
@@ -26453,7 +26510,7 @@ function applyListStyleUpdate(element, updates, selection) {
26453
26510
  segments = restoreParagraphMetadata(segments, styled.newSegments);
26454
26511
  workingSelection = styled.newSelection;
26455
26512
  } else {
26456
- segments = segments.map((segment) => chunkOGJRSAGH_cjs.updateTextSegmentStyle(segment, characterStyle));
26513
+ segments = segments.map((segment) => chunkEYPNQ3FG_cjs.updateTextSegmentStyle(segment, characterStyle));
26457
26514
  }
26458
26515
  }
26459
26516
  const working = {
@@ -26462,7 +26519,7 @@ function applyListStyleUpdate(element, updates, selection) {
26462
26519
  textStyle: selection ? element.textStyle : { ...element.textStyle, ...characterStyle }
26463
26520
  };
26464
26521
  if (!workingSelection || !segments) {
26465
- return { patch: chunkHWW2UVUP_cjs.setElementBullets(working, listType), selection: null };
26522
+ return { patch: chunkJRCK6CFI_cjs.setElementBullets(working, listType), selection: null };
26466
26523
  }
26467
26524
  const entries2 = positions(segments);
26468
26525
  const startEntry = entries2[workingSelection.startSegIdx];
@@ -26473,7 +26530,7 @@ function applyListStyleUpdate(element, updates, selection) {
26473
26530
  const startOffset = startEntry.start + workingSelection.startOffset;
26474
26531
  const endOffset = endEntry.start + workingSelection.endOffset;
26475
26532
  const lastSelected = [...entries2].reverse().find((entry5) => entry5.start < endOffset);
26476
- const patch = chunkHWW2UVUP_cjs.setElementBullets(working, listType, {
26533
+ const patch = chunkJRCK6CFI_cjs.setElementBullets(working, listType, {
26477
26534
  startParagraph: startEntry.paragraph,
26478
26535
  endParagraph: Math.max(startEntry.paragraph, lastSelected?.paragraph ?? endEntry.paragraph)
26479
26536
  });
@@ -26505,14 +26562,14 @@ function inScope(paragraph2, selection) {
26505
26562
  );
26506
26563
  }
26507
26564
  function selectionBulletKind(element, selection, segments) {
26508
- const paragraphs2 = chunkHWW2UVUP_cjs.splitBulletParagraphs(chunkHWW2UVUP_cjs.resolveBulletSegments(element, segments));
26509
- return chunkHWW2UVUP_cjs.paragraphsBulletKind(paragraphs2.filter((paragraph2) => inScope(paragraph2, selection)));
26565
+ const paragraphs2 = chunkJRCK6CFI_cjs.splitBulletParagraphs(chunkJRCK6CFI_cjs.resolveBulletSegments(element, segments));
26566
+ return chunkJRCK6CFI_cjs.paragraphsBulletKind(paragraphs2.filter((paragraph2) => inScope(paragraph2, selection)));
26510
26567
  }
26511
26568
  function setSelectionBullets(element, kind, selection, segments) {
26512
26569
  if (!pptx.hasTextProperties(element)) {
26513
26570
  return { patch: {}, newSelection: selection };
26514
26571
  }
26515
- const source = chunkHWW2UVUP_cjs.resolveBulletSegments(element, segments);
26572
+ const source = chunkJRCK6CFI_cjs.resolveBulletSegments(element, segments);
26516
26573
  const result = applyListStyleUpdate(
26517
26574
  { ...element, textSegments: source },
26518
26575
  { listType: kind },
@@ -26529,20 +26586,20 @@ function applyTextStyleUpdate(element, updates, selection, segments) {
26529
26586
  return { patch: {}, newSelection: null };
26530
26587
  }
26531
26588
  const current = segments ?? element.textSegments;
26532
- const exclusive = chunkHWW2UVUP_cjs.withExclusiveLineSpacing(updates);
26589
+ const exclusive = chunkJRCK6CFI_cjs.withExclusiveLineSpacing(updates);
26533
26590
  if (selection && current && current.length > 0) {
26534
- const { body, run } = chunkHWW2UVUP_cjs.splitTextStyleUpdate(exclusive);
26535
- let textStyle2 = { ...element.textStyle, ...body };
26536
- let textSegments2 = chunkHWW2UVUP_cjs.overrideParagraphProperties(current, exclusive);
26591
+ const { body, run } = chunkJRCK6CFI_cjs.splitTextStyleUpdate(exclusive);
26592
+ let textStyle2 = chunkEYPNQ3FG_cjs.mergeTextStyleUpdate(element.textStyle, body);
26593
+ let textSegments2 = chunkJRCK6CFI_cjs.overrideParagraphProperties(current, exclusive);
26537
26594
  let newSelection = selection;
26538
26595
  if (Object.keys(run).length > 0) {
26539
- const scoped = applyStyleToSelectedSegments(textSegments2, selection, run);
26596
+ const scoped = applyStyleToSelectedSegments(textSegments2, selection, run, element.textStyle);
26540
26597
  textSegments2 = scoped.newSegments;
26541
26598
  newSelection = scoped.newSelection;
26542
26599
  }
26543
- const touched = chunkHWW2UVUP_cjs.TEXT_DECORATION_FLAGS.filter((flag2) => flag2 in run);
26600
+ const touched = chunkJRCK6CFI_cjs.TEXT_DECORATION_FLAGS.filter((flag2) => flag2 in run);
26544
26601
  if (touched.length > 0) {
26545
- const reconciled = chunkHWW2UVUP_cjs.reconcileDecorationFlags(textSegments2, textStyle2, touched);
26602
+ const reconciled = chunkJRCK6CFI_cjs.reconcileDecorationFlags(textSegments2, textStyle2, touched);
26546
26603
  textStyle2 = reconciled.textStyle;
26547
26604
  textSegments2 = reconciled.textSegments;
26548
26605
  }
@@ -26550,20 +26607,20 @@ function applyTextStyleUpdate(element, updates, selection, segments) {
26550
26607
  patch: {
26551
26608
  textStyle: textStyle2,
26552
26609
  textSegments: textSegments2,
26553
- ...chunkHWW2UVUP_cjs.overrideParagraphIndents(element, exclusive)
26610
+ ...chunkJRCK6CFI_cjs.overrideParagraphIndents(element, exclusive)
26554
26611
  },
26555
26612
  newSelection
26556
26613
  };
26557
26614
  }
26558
- const textStyle = { ...element.textStyle, ...exclusive };
26559
- const textSegments = current && chunkHWW2UVUP_cjs.overrideParagraphProperties(current, exclusive).map(
26560
- (segment) => chunkOGJRSAGH_cjs.updateTextSegmentStyle(segment, exclusive)
26615
+ const textStyle = chunkEYPNQ3FG_cjs.mergeTextStyleUpdate(element.textStyle, exclusive);
26616
+ const textSegments = current && chunkJRCK6CFI_cjs.overrideParagraphProperties(current, exclusive).map(
26617
+ (segment) => chunkEYPNQ3FG_cjs.updateTextSegmentStyle(segment, exclusive, { inherited: element.textStyle })
26561
26618
  );
26562
26619
  return {
26563
26620
  patch: {
26564
26621
  textStyle,
26565
26622
  ...textSegments ? { textSegments } : {},
26566
- ...chunkHWW2UVUP_cjs.overrideParagraphIndents(element, exclusive)
26623
+ ...chunkJRCK6CFI_cjs.overrideParagraphIndents(element, exclusive)
26567
26624
  },
26568
26625
  newSelection: null
26569
26626
  };
@@ -27742,7 +27799,7 @@ function buildTextBlockStyle(element, options = {}) {
27742
27799
  style.textOrientation = textOrientation;
27743
27800
  }
27744
27801
  if (ts?.textWrap === "none") {
27745
- style.whiteSpace = "nowrap";
27802
+ style.whiteSpace = "pre";
27746
27803
  style.overflow = "visible";
27747
27804
  }
27748
27805
  if (isLinkedTextBox(element)) {
@@ -27794,7 +27851,8 @@ function buildFieldSubstitutionContext(sources) {
27794
27851
  name: p.name,
27795
27852
  value: String(p.value)
27796
27853
  })),
27797
- ...sources.locale === void 0 ? {} : { locale: sources.locale }
27854
+ ...sources.locale === void 0 ? {} : { locale: sources.locale },
27855
+ ...sources.firstSlideNumber === void 0 ? {} : { firstSlideNumber: sources.firstSlideNumber }
27798
27856
  };
27799
27857
  }
27800
27858
  function deriveSlideFieldContext(base2, slide) {
@@ -30288,9 +30346,9 @@ function textAdvancedStateFromStyle(ts) {
30288
30346
  }
30289
30347
  function textAdvancedPatch(el, changes) {
30290
30348
  const base2 = pptx.hasTextProperties(el) ? el.textStyle ?? {} : {};
30291
- const exclusive = chunkHWW2UVUP_cjs.withExclusiveLineSpacing(changes);
30349
+ const exclusive = chunkJRCK6CFI_cjs.withExclusiveLineSpacing(changes);
30292
30350
  return {
30293
- ...chunkHWW2UVUP_cjs.paragraphOverridePatch(el, exclusive),
30351
+ ...chunkJRCK6CFI_cjs.paragraphOverridePatch(el, exclusive),
30294
30352
  textStyle: {
30295
30353
  ...base2,
30296
30354
  ...exclusive
@@ -32065,7 +32123,7 @@ function observeExternalCollaborationReadiness(session, options) {
32065
32123
  function createPresencePublisher(awareness, identity8) {
32066
32124
  const local = { activeSlideIndex: 0, cursorX: 0, cursorY: 0 };
32067
32125
  let lastBroadcast = 0;
32068
- let pending = null;
32126
+ let pending2 = null;
32069
32127
  function publish() {
32070
32128
  awareness.setLocalStateField("presence", {
32071
32129
  userName: identity8.userName,
@@ -32091,32 +32149,32 @@ function createPresencePublisher(awareness, identity8) {
32091
32149
  Object.assign(local, patch);
32092
32150
  const elapsed = Date.now() - lastBroadcast;
32093
32151
  if (elapsed >= BROADCAST_THROTTLE_MS) {
32094
- if (pending !== null) {
32095
- clearTimeout(pending);
32096
- pending = null;
32152
+ if (pending2 !== null) {
32153
+ clearTimeout(pending2);
32154
+ pending2 = null;
32097
32155
  }
32098
32156
  lastBroadcast = Date.now();
32099
32157
  publish();
32100
- } else if (pending === null) {
32101
- pending = setTimeout(() => {
32102
- pending = null;
32158
+ } else if (pending2 === null) {
32159
+ pending2 = setTimeout(() => {
32160
+ pending2 = null;
32103
32161
  lastBroadcast = Date.now();
32104
32162
  publish();
32105
32163
  }, BROADCAST_THROTTLE_MS - elapsed);
32106
32164
  }
32107
32165
  }
32108
32166
  function flush() {
32109
- if (pending !== null) {
32110
- clearTimeout(pending);
32111
- pending = null;
32167
+ if (pending2 !== null) {
32168
+ clearTimeout(pending2);
32169
+ pending2 = null;
32112
32170
  }
32113
32171
  lastBroadcast = Date.now();
32114
32172
  publish();
32115
32173
  }
32116
32174
  function dispose() {
32117
- if (pending !== null) {
32118
- clearTimeout(pending);
32119
- pending = null;
32175
+ if (pending2 !== null) {
32176
+ clearTimeout(pending2);
32177
+ pending2 = null;
32120
32178
  }
32121
32179
  }
32122
32180
  publish();
@@ -32362,7 +32420,7 @@ function createCollaborationTextTarget({
32362
32420
  var LIVE_PATCH_THROTTLE_MS = 50;
32363
32421
  function createCollaborationLivePatcher(options = {}) {
32364
32422
  const throttleMs = options.throttleMs ?? LIVE_PATCH_THROTTLE_MS;
32365
- const pending = /* @__PURE__ */ new Map();
32423
+ const pending2 = /* @__PURE__ */ new Map();
32366
32424
  let doc = null;
32367
32425
  let factories = null;
32368
32426
  let timer = null;
@@ -32388,12 +32446,12 @@ function createCollaborationLivePatcher(options = {}) {
32388
32446
  const writePending = () => {
32389
32447
  const activeDoc = doc;
32390
32448
  const activeFactories = factories;
32391
- if (!activeDoc || !activeFactories || pending.size === 0) {
32392
- pending.clear();
32449
+ if (!activeDoc || !activeFactories || pending2.size === 0) {
32450
+ pending2.clear();
32393
32451
  return;
32394
32452
  }
32395
- const patches = [...pending.values()];
32396
- pending.clear();
32453
+ const patches = [...pending2.values()];
32454
+ pending2.clear();
32397
32455
  lastWriteAt = Date.now();
32398
32456
  try {
32399
32457
  activeDoc.transact(() => {
@@ -32427,10 +32485,10 @@ function createCollaborationLivePatcher(options = {}) {
32427
32485
  return null;
32428
32486
  }
32429
32487
  const key = keyFor(slideId, elementId);
32430
- let entry5 = pending.get(key);
32488
+ let entry5 = pending2.get(key);
32431
32489
  if (!entry5) {
32432
32490
  entry5 = { slideId, elementId };
32433
- pending.set(key, entry5);
32491
+ pending2.set(key, entry5);
32434
32492
  }
32435
32493
  return entry5;
32436
32494
  };
@@ -32449,7 +32507,7 @@ function createCollaborationLivePatcher(options = {}) {
32449
32507
  if (!isWritable()) {
32450
32508
  return void 0;
32451
32509
  }
32452
- const queued = pending.get(key);
32510
+ const queued = pending2.get(key);
32453
32511
  if (queued) {
32454
32512
  delete queued.text;
32455
32513
  }
@@ -32487,7 +32545,7 @@ function createCollaborationLivePatcher(options = {}) {
32487
32545
  return;
32488
32546
  }
32489
32547
  cancelTimer();
32490
- pending.clear();
32548
+ pending2.clear();
32491
32549
  doc = nextDoc;
32492
32550
  factories = nextFactories;
32493
32551
  immediate = nextImmediate;
@@ -32522,7 +32580,7 @@ function createCollaborationLivePatcher(options = {}) {
32522
32580
  },
32523
32581
  dispose() {
32524
32582
  cancelTimer();
32525
- pending.clear();
32583
+ pending2.clear();
32526
32584
  doc = null;
32527
32585
  factories = null;
32528
32586
  retireTextSessions();
@@ -32688,7 +32746,7 @@ function resolveCollaborationNativeRange(range, previous, current) {
32688
32746
  function observeCollaborationInlineInput(root, getSeed, apply6, settled) {
32689
32747
  let disposed = false;
32690
32748
  let composing = false;
32691
- let pending = false;
32749
+ let pending2 = false;
32692
32750
  let range;
32693
32751
  const capture = (event) => {
32694
32752
  const target = event?.getTargetRanges?.()[0];
@@ -32706,10 +32764,10 @@ function observeCollaborationInlineInput(root, getSeed, apply6, settled) {
32706
32764
  if (!composing) {
32707
32765
  capture(event);
32708
32766
  }
32709
- pending = true;
32767
+ pending2 = true;
32710
32768
  queueMicrotask(() => {
32711
- if (!disposed && !composing && pending) {
32712
- pending = false;
32769
+ if (!disposed && !composing && pending2) {
32770
+ pending2 = false;
32713
32771
  settled();
32714
32772
  }
32715
32773
  });
@@ -32718,7 +32776,7 @@ function observeCollaborationInlineInput(root, getSeed, apply6, settled) {
32718
32776
  if (composing || disposed) {
32719
32777
  return;
32720
32778
  }
32721
- pending = false;
32779
+ pending2 = false;
32722
32780
  const replacement = range;
32723
32781
  range = void 0;
32724
32782
  apply6(replacement);
@@ -32744,8 +32802,8 @@ function observeCollaborationInlineInput(root, getSeed, apply6, settled) {
32744
32802
  root.addEventListener("compositionstart", start, true);
32745
32803
  root.addEventListener("compositionend", end, true);
32746
32804
  return {
32747
- blocked: () => composing || pending,
32748
- reason: () => composing ? "composition-active" : pending ? "input-active" : void 0,
32805
+ blocked: () => composing || pending2,
32806
+ reason: () => composing ? "composition-active" : pending2 ? "input-active" : void 0,
32749
32807
  dispose() {
32750
32808
  disposed = true;
32751
32809
  root.removeEventListener("beforeinput", before, true);
@@ -42254,7 +42312,7 @@ function isBulletMarker(segment) {
42254
42312
  return false;
42255
42313
  }
42256
42314
  if (bullet.autoNumType) {
42257
- return bullet.paragraphIndex !== void 0 && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment);
42315
+ return bullet.paragraphIndex !== void 0 && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment);
42258
42316
  }
42259
42317
  const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : "\u2022 ";
42260
42318
  return segment.text === marker;
@@ -47607,13 +47665,13 @@ function attachEditorImagePaste(root, options) {
47607
47665
  if (previousTabIndex === null) {
47608
47666
  root.tabIndex = 0;
47609
47667
  }
47610
- const pending = /* @__PURE__ */ new Set();
47668
+ const pending2 = /* @__PURE__ */ new Set();
47611
47669
  let disposed = false;
47612
47670
  const cancelPending = () => {
47613
- for (const abort of pending) {
47671
+ for (const abort of pending2) {
47614
47672
  abort.abort();
47615
47673
  }
47616
- pending.clear();
47674
+ pending2.clear();
47617
47675
  };
47618
47676
  const onFocusIn = (event) => {
47619
47677
  const canvas = options.getCanvas();
@@ -47643,9 +47701,9 @@ function attachEditorImagePaste(root, options) {
47643
47701
  }
47644
47702
  event.preventDefault();
47645
47703
  const abort = new AbortController();
47646
- pending.add(abort);
47704
+ pending2.add(abort);
47647
47705
  void chunkZJFN5POF_cjs.createImageElementFromFile(file, target.canvasSize, abort.signal).then((element) => {
47648
- pending.delete(abort);
47706
+ pending2.delete(abort);
47649
47707
  if (!element || disposed || abort.signal.aborted || !root.isConnected) {
47650
47708
  return;
47651
47709
  }
@@ -51754,7 +51812,8 @@ var RIBBON_CATALOG_TAIL_TABS = {
51754
51812
  pictureStyles: {
51755
51813
  label: "Picture Styles",
51756
51814
  controls: { gallery: "Picture Styles gallery", pictureEffects: "Picture Effects gallery" }
51757
- }
51815
+ },
51816
+ size: { label: "Size", controls: { crop: "Crop" } }
51758
51817
  },
51759
51818
  tableDesign: {
51760
51819
  tableStyles: { label: "Table Styles", controls: { gallery: "Table Styles gallery" } }
@@ -51881,7 +51940,7 @@ function ribbonCustomizationCss(resolved, scope) {
51881
51940
  // src/pptx/render/customization/customization-resolve-ribbon.ts
51882
51941
  var BUTTON_CONTROL_ALIASES = [
51883
51942
  ["mergeShapes", "home.arrange.mergeShapes"],
51884
- ["crop", "home.arrange.crop"]
51943
+ ["crop", "home.arrange.crop", "pictureFormat.size.crop"]
51885
51944
  ];
51886
51945
  var CONTEXTUAL_TAB_IDS = new Set(RIBBON_CONTEXTUAL_TABS.map((t) => t.id));
51887
51946
  function resolveRibbonCustomization(ribbon) {
@@ -51908,9 +51967,12 @@ function resolveRibbonCustomization(ribbon) {
51908
51967
  actions.add(button);
51909
51968
  }
51910
51969
  }
51911
- for (const [action, control2] of BUTTON_CONTROL_ALIASES) {
51970
+ for (const [action, control2, ...also] of BUTTON_CONTROL_ALIASES) {
51912
51971
  if (actions.has(action)) {
51913
51972
  controls2.add(control2);
51973
+ for (const extra of also) {
51974
+ controls2.add(extra);
51975
+ }
51914
51976
  } else if (controls2.has(control2)) {
51915
51977
  actions.add(action);
51916
51978
  }
@@ -52245,7 +52307,7 @@ var TOOLBAR_BUTTON_DESCRIPTIONS = {
52245
52307
  zoom: "The zoom cluster (zoom in, zoom out, fit).",
52246
52308
  navigation: "The previous / next slide cluster.",
52247
52309
  mergeShapes: "The Merge Shapes dropdown (Union, Combine, Fragment, Intersect, Subtract) in the Home tab Arrange group.",
52248
- crop: "The picture Crop control (crop mode, Crop to Aspect Ratio, Fill, Fit) in the Home tab Arrange group."
52310
+ crop: "Both picture Crop buttons (crop mode, aspect ratio, Fill, Fit): Home > Arrange, Picture Format > Size."
52249
52311
  };
52250
52312
  var VIEWER_PANEL_DESCRIPTIONS = {
52251
52313
  statusBar: "The status bar under the canvas (slide counter, zoom, view buttons).",
@@ -52349,7 +52411,7 @@ function remark(patch, edit) {
52349
52411
  return patch;
52350
52412
  }
52351
52413
  const textSegments = patch.textSegments.map((segment) => {
52352
- if (!segment.bulletInfo || !chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment)) {
52414
+ if (!segment.bulletInfo || !chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment)) {
52353
52415
  return segment;
52354
52416
  }
52355
52417
  const info = edit(segment.bulletInfo);
@@ -52359,9 +52421,9 @@ function remark(patch, edit) {
52359
52421
  }
52360
52422
  function applyBulletLibrary(element, spec5) {
52361
52423
  if (!spec5) {
52362
- return chunkHWW2UVUP_cjs.setElementBullets(element, "none");
52424
+ return chunkJRCK6CFI_cjs.setElementBullets(element, "none");
52363
52425
  }
52364
- return remark(chunkHWW2UVUP_cjs.setElementBullets(element, "bullet"), (info) => ({
52426
+ return remark(chunkJRCK6CFI_cjs.setElementBullets(element, "bullet"), (info) => ({
52365
52427
  ...baseInfo(info),
52366
52428
  char: spec5.char,
52367
52429
  fontFamily: spec5.font.typeface,
@@ -52372,9 +52434,9 @@ function applyBulletLibrary(element, spec5) {
52372
52434
  }
52373
52435
  function applyNumberingLibrary(element, scheme) {
52374
52436
  if (!scheme) {
52375
- return chunkHWW2UVUP_cjs.setElementBullets(element, "none");
52437
+ return chunkJRCK6CFI_cjs.setElementBullets(element, "none");
52376
52438
  }
52377
- return remark(chunkHWW2UVUP_cjs.setElementBullets(element, "numbered"), (info) => ({
52439
+ return remark(chunkJRCK6CFI_cjs.setElementBullets(element, "numbered"), (info) => ({
52378
52440
  ...baseInfo(info),
52379
52441
  autoNumType: scheme,
52380
52442
  autoNumStartAt: info.autoNumStartAt ?? 1,
@@ -52382,13 +52444,13 @@ function applyNumberingLibrary(element, scheme) {
52382
52444
  }));
52383
52445
  }
52384
52446
  function paragraphInfos(element) {
52385
- return chunkHWW2UVUP_cjs.splitBulletParagraphs(chunkHWW2UVUP_cjs.resolveBulletSegments(element)).filter((paragraph2) => paragraph2.segments.length > 0).map((paragraph2) => paragraph2.segments[0].bulletInfo);
52447
+ return chunkJRCK6CFI_cjs.splitBulletParagraphs(chunkJRCK6CFI_cjs.resolveBulletSegments(element)).filter((paragraph2) => paragraph2.segments.length > 0).map((paragraph2) => paragraph2.segments[0].bulletInfo);
52386
52448
  }
52387
52449
  function hasBulletLibrary(element, spec5) {
52388
52450
  if (!pptx.hasTextProperties(element)) {
52389
52451
  return false;
52390
52452
  }
52391
- const kind = chunkHWW2UVUP_cjs.elementBulletKind(element);
52453
+ const kind = chunkJRCK6CFI_cjs.elementBulletKind(element);
52392
52454
  if (!spec5) {
52393
52455
  return kind === "none";
52394
52456
  }
@@ -52400,7 +52462,7 @@ function hasNumberingLibrary(element, scheme) {
52400
52462
  if (!pptx.hasTextProperties(element)) {
52401
52463
  return false;
52402
52464
  }
52403
- const kind = chunkHWW2UVUP_cjs.elementBulletKind(element);
52465
+ const kind = chunkJRCK6CFI_cjs.elementBulletKind(element);
52404
52466
  if (!scheme) {
52405
52467
  return kind === "none";
52406
52468
  }
@@ -56045,7 +56107,7 @@ var SMARTART_LAYOUTS_GALLERY = {
56045
56107
  const data = element?.type === "smartArt" ? element.smartArtData : void 0;
56046
56108
  const current = data?.resolvedLayoutType ?? "list";
56047
56109
  const accent1 = galleryColorScheme(ctx).accent1;
56048
- const pending = smartArtBuiltinLayouts() === void 0;
56110
+ const pending2 = smartArtBuiltinLayouts() === void 0;
56049
56111
  return {
56050
56112
  id: "smartArtLayouts",
56051
56113
  labelKey: "pptx.gallery.smartArtLayouts.title",
@@ -56067,7 +56129,7 @@ var SMARTART_LAYOUTS_GALLERY = {
56067
56129
  },
56068
56130
  ...namedLayoutSections(accent1, data?.layoutDefinition?.uniqueId)
56069
56131
  ],
56070
- ...pending && {
56132
+ ...pending2 && {
56071
56133
  ready: preloadSmartArtBuiltinLayouts().then(
56072
56134
  (library) => library ? SMARTART_LAYOUTS_GALLERY.build(ctx) : void 0
56073
56135
  )
@@ -56195,6 +56257,17 @@ function normaliseTableStyleId(id) {
56195
56257
  // src/pptx/render/ribbon-galleries/table-style-tile-svg.ts
56196
56258
  var ROWS = 5;
56197
56259
  var COLS = 5;
56260
+ var DEFAULT_OPTIONS = { firstRowHeader: true, bandedRows: true };
56261
+ function tableStyleTileOptions(tableData) {
56262
+ return {
56263
+ firstRowHeader: Boolean(tableData.firstRowHeader),
56264
+ lastRow: Boolean(tableData.lastRow),
56265
+ firstCol: Boolean(tableData.firstCol),
56266
+ lastCol: Boolean(tableData.lastCol),
56267
+ bandedRows: Boolean(tableData.bandedRows),
56268
+ bandedColumns: Boolean(tableData.bandedColumns)
56269
+ };
56270
+ }
56198
56271
  function num7(value) {
56199
56272
  return String(Math.round(value * 100) / 100);
56200
56273
  }
@@ -56210,21 +56283,20 @@ function cellFill(css) {
56210
56283
  }
56211
56284
  return "none";
56212
56285
  }
56213
- function border(value) {
56286
+ function tileBorderStroke(value) {
56214
56287
  if (typeof value !== "string" || value === "none") {
56215
56288
  return null;
56216
56289
  }
56217
- const match = /^([\d.]+)px\s+\w+\s+(.+)$/u.exec(value.trim());
56290
+ const match = /^(?:max\()?([\d.]+)px(?:,\s*var\([^)]*\)\))?\s+\w+\s+(.+)$/u.exec(value.trim());
56218
56291
  if (!match) {
56219
56292
  return null;
56220
56293
  }
56221
56294
  const color = safeColor(match[2], "none");
56222
- return color === "none" ? null : { width: Math.min(Math.max(Number(match[1]) / 2, 0.5), 2), color };
56295
+ return color === "none" || Number(match[1]) <= 0 ? null : { width: Math.min(Math.max(Number(match[1]) / 2, 0.5), 2), color };
56223
56296
  }
56224
- function tableStyleTileSvg(styleId, colorScheme, size) {
56297
+ function tableStyleTileSvg(styleId, colorScheme, size, options = DEFAULT_OPTIONS) {
56225
56298
  const tableData = {
56226
- firstRowHeader: true,
56227
- bandedRows: true,
56299
+ ...options,
56228
56300
  tableStyleId: styleId
56229
56301
  };
56230
56302
  const inset3 = 2;
@@ -56233,7 +56305,7 @@ function tableStyleTileSvg(styleId, colorScheme, size) {
56233
56305
  const fills = [];
56234
56306
  const lines = [];
56235
56307
  const edge = (x1, y1, x2, y2, value) => {
56236
- const stroke = border(value);
56308
+ const stroke = tileBorderStroke(value);
56237
56309
  if (stroke) {
56238
56310
  lines.push(
56239
56311
  `<line x1="${num7(x1)}" y1="${num7(y1)}" x2="${num7(x2)}" y2="${num7(y2)}" stroke="${stroke.color}" stroke-width="${num7(stroke.width)}"/>`
@@ -56252,8 +56324,9 @@ function tableStyleTileSvg(styleId, colorScheme, size) {
56252
56324
  );
56253
56325
  }
56254
56326
  const text3 = safeColor(typeof css.color === "string" ? css.color : void 0, "#000000");
56327
+ const bold = css.fontWeight === 700;
56255
56328
  fills.push(
56256
- `<rect x="${num7(x + cw * 0.25)}" y="${num7(y + rh * 0.42)}" width="${num7(cw * 0.5)}" height="${num7(Math.max(rh * 0.16, 0.8))}" fill="${text3}" opacity="${r === 0 ? "0.9" : "0.55"}"/>`
56329
+ `<rect x="${num7(x + cw * 0.25)}" y="${num7(y + rh * 0.42)}" width="${num7(cw * 0.5)}" height="${num7(Math.max(rh * 0.16, 0.8))}" fill="${text3}" opacity="${bold ? "0.9" : "0.55"}"/>`
56257
56330
  );
56258
56331
  edge(x, y, x + cw, y, css.borderTop);
56259
56332
  edge(x, y + rh, x + cw, y + rh, css.borderBottom);
@@ -56321,6 +56394,7 @@ function applyTableStyleToData(tableData, styleId) {
56321
56394
  return {
56322
56395
  ...tableData,
56323
56396
  tableStyleId: styleId,
56397
+ clearDirectCellFormatting: true,
56324
56398
  rows: tableData.rows.map((row) => ({
56325
56399
  ...row,
56326
56400
  cells: row.cells.map((cell) => {
@@ -56335,6 +56409,7 @@ function build5(ctx) {
56335
56409
  const tableData = tableDataOf(ctx.element);
56336
56410
  const current = normaliseTableStyleId(tableData?.tableStyleId);
56337
56411
  const colorScheme = galleryColorScheme(ctx);
56412
+ const options = tableData ? tableStyleTileOptions(tableData) : void 0;
56338
56413
  return {
56339
56414
  id: "tableStyles",
56340
56415
  labelKey: "pptx.gallery.tableStyles.title",
@@ -56352,7 +56427,7 @@ function build5(ctx) {
56352
56427
  labelKey: entry5.labelKey,
56353
56428
  ...entry5.labelParams && { labelParams: entry5.labelParams },
56354
56429
  label: entry5.name,
56355
- previewSvg: tableStyleTileSvg(entry5.id, colorScheme, TILE8),
56430
+ previewSvg: tableStyleTileSvg(entry5.id, colorScheme, TILE8, options),
56356
56431
  applied: current === entry5.id
56357
56432
  }))
56358
56433
  }))
@@ -57462,6 +57537,13 @@ var CONTEXTUAL_TAB_GROUPS = {
57462
57537
  mode: "dropdown"
57463
57538
  }
57464
57539
  ]
57540
+ },
57541
+ {
57542
+ group: "pictureFormat.size",
57543
+ labelKey: "pptx.ribbon.groupSize",
57544
+ label: "Size",
57545
+ galleries: [],
57546
+ strip: "picture-size"
57465
57547
  }
57466
57548
  ],
57467
57549
  tableDesign: [
@@ -57887,6 +57969,73 @@ function cursorForTool(tool) {
57887
57969
  }
57888
57970
  }
57889
57971
 
57972
+ // src/pptx/render/animation-opacity-playback.ts
57973
+ var stacks = /* @__PURE__ */ new WeakMap();
57974
+ var pending = /* @__PURE__ */ new WeakMap();
57975
+ function resetOpacitySetPlayback(timers) {
57976
+ stacks.delete(timers);
57977
+ pending.delete(timers);
57978
+ }
57979
+ function finishOpacitySetSteps(group, ctx) {
57980
+ for (const step of group.steps) pending.get(ctx.timers)?.get(step)?.();
57981
+ }
57982
+ function applyOpacitySetSteps(group, ctx) {
57983
+ const targets = stacks.get(ctx.timers) ?? /* @__PURE__ */ new Map();
57984
+ stacks.set(ctx.timers, targets);
57985
+ const completions = pending.get(ctx.timers) ?? /* @__PURE__ */ new Map();
57986
+ pending.set(ctx.timers, completions);
57987
+ for (const step of group.steps) {
57988
+ const set = step.opacitySet;
57989
+ if (!set || !step.elementId) continue;
57990
+ const entry5 = { value: set.value };
57991
+ const startMs = step.delayMs + set.delayMs;
57992
+ let started = false;
57993
+ const start = () => {
57994
+ if (started) return;
57995
+ started = true;
57996
+ ctx.setStates((previous) => {
57997
+ const current = previous.get(step.elementId);
57998
+ const stack = targets.get(step.elementId) ?? { baseline: current?.opacity, entries: [] };
57999
+ stack.entries.push(entry5);
58000
+ targets.set(step.elementId, stack);
58001
+ const next = new Map(previous);
58002
+ next.set(step.elementId, {
58003
+ ...current,
58004
+ visible: current?.visible ?? true,
58005
+ cssAnimation: current?.cssAnimation,
58006
+ opacity: set.value
58007
+ });
58008
+ return next;
58009
+ });
58010
+ };
58011
+ if (startMs > 0) ctx.timers.push(window.setTimeout(start, startMs));
58012
+ else start();
58013
+ const finish = () => {
58014
+ start();
58015
+ if (set.holdEndState) return;
58016
+ const stack = targets.get(step.elementId);
58017
+ if (!stack) return;
58018
+ const index = stack.entries.indexOf(entry5);
58019
+ if (index < 0) return;
58020
+ stack.entries.splice(index, 1);
58021
+ const opacity = stack.entries.at(-1)?.value ?? stack.baseline;
58022
+ if (!stack.entries.length) targets.delete(step.elementId);
58023
+ ctx.setStates((previous) => {
58024
+ const current = previous.get(step.elementId);
58025
+ if (!current) return previous;
58026
+ const next = new Map(previous);
58027
+ const restored = { ...current };
58028
+ if (opacity === void 0) delete restored.opacity;
58029
+ else restored.opacity = opacity;
58030
+ next.set(step.elementId, restored);
58031
+ return next;
58032
+ });
58033
+ };
58034
+ completions.set(step, finish);
58035
+ if (!set.holdEndState) ctx.timers.push(window.setTimeout(finish, startMs + set.durationMs));
58036
+ }
58037
+ }
58038
+
57890
58039
  // src/pptx/render/animation-playback-steps.ts
57891
58040
  var playbackOwners = /* @__PURE__ */ new WeakMap();
57892
58041
  function applyAnimationGroupSteps(group, ctx) {
@@ -57897,7 +58046,7 @@ function applyAnimationGroupSteps(group, ctx) {
57897
58046
  const owners = playbackOwners.get(ctx.setStates) ?? /* @__PURE__ */ new Map();
57898
58047
  playbackOwners.set(ctx.setStates, owners);
57899
58048
  for (const step of group.steps) {
57900
- if (step.elementId && !step.command) {
58049
+ if (step.elementId && !step.command && !step.opacitySet) {
57901
58050
  owners.set(step.elementId, owner);
57902
58051
  }
57903
58052
  }
@@ -57938,7 +58087,7 @@ function applyAnimationGroupSteps(group, ctx) {
57938
58087
  const next = new Map(previous);
57939
58088
  const componentsByElement = /* @__PURE__ */ new Map();
57940
58089
  for (const step of group.steps) {
57941
- if (step.command || !step.elementId) {
58090
+ if (step.command || !step.elementId || step.opacitySet) {
57942
58091
  continue;
57943
58092
  }
57944
58093
  const current = next.get(step.elementId);
@@ -57987,8 +58136,9 @@ function applyAnimationGroupSteps(group, ctx) {
57987
58136
  }
57988
58137
  return next;
57989
58138
  });
58139
+ applyOpacitySetSteps(group, ctx);
57990
58140
  for (const step of group.steps) {
57991
- if (step.command || !step.elementId) {
58141
+ if (step.command || !step.elementId || step.opacitySet) {
57992
58142
  continue;
57993
58143
  }
57994
58144
  const timer = window.setTimeout(
@@ -58031,6 +58181,7 @@ function carryBuildState(state) {
58031
58181
  return {};
58032
58182
  }
58033
58183
  const carried = {};
58184
+ if (state.opacity !== void 0) carried.opacity = state.opacity;
58034
58185
  if (state.build) {
58035
58186
  carried.build = state.build;
58036
58187
  }
@@ -58073,15 +58224,15 @@ function driveBuildReveal(controller, group, ctx) {
58073
58224
  }
58074
58225
  return next;
58075
58226
  });
58076
- let pending = false;
58227
+ let pending2 = false;
58077
58228
  for (const id of buildIds) {
58078
58229
  const build7 = states.get(id)?.build;
58079
58230
  if (build7 && build7.progress < 1) {
58080
- pending = true;
58231
+ pending2 = true;
58081
58232
  break;
58082
58233
  }
58083
58234
  }
58084
- ctx.buildHandle.current = pending ? requestAnimationFrame(tick) : null;
58235
+ ctx.buildHandle.current = pending2 ? requestAnimationFrame(tick) : null;
58085
58236
  };
58086
58237
  tick();
58087
58238
  }
@@ -58198,6 +58349,7 @@ function finishAnimationGroupSteps(group, setStates, completedStates) {
58198
58349
  });
58199
58350
  }
58200
58351
  function clearPlaybackTimers(ctx, active2) {
58352
+ resetOpacitySetPlayback(ctx.timers);
58201
58353
  for (const timer of ctx.timers) {
58202
58354
  window.clearTimeout(timer);
58203
58355
  }
@@ -58216,6 +58368,7 @@ function advanceMainSequence(controller, ctx, active2, nowMs = performance.now()
58216
58368
  finishDomAnimationsForGroup(group2, ctx.frameRoot?.() ?? document);
58217
58369
  const buildIds = PresentationAnimationController.collectBuildStepIds(group2);
58218
58370
  const completedStates = controller.computeStatesFor(buildIds);
58371
+ finishOpacitySetSteps(group2, ctx);
58219
58372
  clearPlaybackTimers(ctx, active2);
58220
58373
  finishAnimationGroupSteps(group2, ctx.setStates, completedStates);
58221
58374
  scheduleAutoAdvanceChain(controller, ctx);
@@ -58516,8 +58669,8 @@ function buildInlineListStylePatch(element, updates, selection) {
58516
58669
  }
58517
58670
  return {
58518
58671
  textSegments: element.textSegments.map(
58519
- (segment) => chunkOGJRSAGH_cjs.updateTextSegmentStyle(segment, updates, {
58520
- updateBodyStyle: !(segment.paragraphInsertionStyle && chunkHWW2UVUP_cjs.isBulletMarkerSegment(segment))
58672
+ (segment) => chunkEYPNQ3FG_cjs.updateTextSegmentStyle(segment, updates, {
58673
+ updateBodyStyle: !(segment.paragraphInsertionStyle && chunkJRCK6CFI_cjs.isBulletMarkerSegment(segment))
58521
58674
  })
58522
58675
  ),
58523
58676
  textStyle: { ...element.textStyle, ...updates }
@@ -59269,7 +59422,7 @@ function transformInlineListCase(snapshot, selection, mode) {
59269
59422
  let first = true;
59270
59423
  const textSegments = chunk52LKIMK3_cjs.applyCaseTransformToSegments(source, selection, mode).map(
59271
59424
  (segment, index) => {
59272
- const marker = first && chunkHWW2UVUP_cjs.isBulletMarkerSegment(source[index]);
59425
+ const marker = first && chunkJRCK6CFI_cjs.isBulletMarkerSegment(source[index]);
59273
59426
  first = textSegmentParagraphBreak.isParagraphSeparatorSegment(source[index]);
59274
59427
  return marker ? source[index] : segment;
59275
59428
  }
@@ -63521,6 +63674,60 @@ var HOME_HIGHLIGHT_PRESETS = [
63521
63674
  "#800080"
63522
63675
  ];
63523
63676
 
63677
+ // src/pptx/render/ribbon-home-crop.ts
63678
+ var CROP_HOOK = { "data-pptx-ribbon-control": "crop" };
63679
+ var CROP_MENU_HOOK = { "data-pptx-ribbon-control": "crop-menu" };
63680
+ function cropControlSpec(id, large = false) {
63681
+ const caret = { labelKey: "pptx.image.cropToAspectRatio", fallback: "Crop to Aspect Ratio" };
63682
+ if (large) {
63683
+ return control(id, "pptx.image.crop", "Crop", void 0, {
63684
+ kind: "menu",
63685
+ items: HOME_CROP_ITEMS,
63686
+ hintKey: "pptx.image.cropHint",
63687
+ icon: "home.arrange.crop",
63688
+ text: text2("pptx.image.crop", "Crop"),
63689
+ large: true,
63690
+ attrs: CROP_HOOK,
63691
+ caret: { ...caret, attrs: CROP_MENU_HOOK }
63692
+ });
63693
+ }
63694
+ return control(id, "pptx.image.crop", "Crop", void 0, {
63695
+ kind: "menu",
63696
+ popup: true,
63697
+ items: HOME_CROP_ITEMS,
63698
+ hintKey: "pptx.image.cropHint",
63699
+ attrs: { ...CROP_HOOK, "data-pptx-chrome": "crop-main" },
63700
+ caret: { ...caret, attrs: { ...CROP_MENU_HOOK, "data-pptx-chrome": "crop-caret" } }
63701
+ });
63702
+ }
63703
+ function cropHomeControls(id, input) {
63704
+ const crop = {
63705
+ disabled: !input.editable || !(input.canCrop || input.cropActive),
63706
+ hidden: input.hideCrop
63707
+ };
63708
+ return {
63709
+ [id]: { ...crop, pressed: input.cropActive },
63710
+ [`${id}#caret`]: crop
63711
+ };
63712
+ }
63713
+ function pictureSizeHomeControls(input) {
63714
+ return cropHomeControls("pictureFormat.size.crop", input);
63715
+ }
63716
+ function dispatchCropRequest(value, handlers) {
63717
+ if (value === void 0) {
63718
+ handlers.toggle();
63719
+ return;
63720
+ }
63721
+ const action = parseCropValue(value);
63722
+ if (action?.kind === "aspect") {
63723
+ handlers.aspect(action.width, action.height);
63724
+ } else if (action?.kind === "fill") {
63725
+ handlers.fill();
63726
+ } else if (action?.kind === "fit") {
63727
+ handlers.fit();
63728
+ }
63729
+ }
63730
+
63524
63731
  // src/pptx/render/ribbon-home-families-objects.ts
63525
63732
  var ALIGN_PARTS = [
63526
63733
  ["left", "pptx.ribbon.alignLeft", "Align Left"],
@@ -63760,24 +63967,17 @@ var RIBBON_HOME_OBJECT_FAMILIES = {
63760
63967
  hintKey: MERGE_SHAPES_HINT_KEY,
63761
63968
  attrs: { "data-pptx-ribbon-control": "merge-shapes" }
63762
63969
  }),
63763
- control("home.arrange.crop", "pptx.image.crop", "Crop", void 0, {
63764
- kind: "menu",
63765
- popup: true,
63766
- items: HOME_CROP_ITEMS,
63767
- hintKey: "pptx.image.cropHint",
63768
- attrs: { "data-pptx-ribbon-control": "crop", "data-pptx-chrome": "crop-main" },
63769
- caret: {
63770
- labelKey: "pptx.image.cropToAspectRatio",
63771
- fallback: "Crop to Aspect Ratio",
63772
- attrs: { "data-pptx-ribbon-control": "crop-menu", "data-pptx-chrome": "crop-caret" }
63773
- }
63774
- }),
63970
+ cropControlSpec("home.arrange.crop"),
63775
63971
  control("home.arrange.outlineWidth", "pptx.ribbon.strokeWidth", "Stroke width", void 0, {
63776
63972
  kind: "number",
63777
63973
  number: { min: 0, max: 120, step: 0.5 }
63778
63974
  })
63779
63975
  )
63780
63976
  ]
63977
+ },
63978
+ // Picture Format > Size: the binding draws the group around it, as for the galleries.
63979
+ "picture-size": {
63980
+ clusters: [pills(void 0, cropControlSpec("pictureFormat.size.crop", true))]
63781
63981
  }
63782
63982
  };
63783
63983
 
@@ -64116,7 +64316,6 @@ function fontPickerHomeControls(input, t) {
64116
64316
  };
64117
64317
  }
64118
64318
  function arrangeShapeHomeControls(input) {
64119
- const crop = { disabled: !input.editable || !input.canCrop, hidden: input.hideCrop };
64120
64319
  return {
64121
64320
  "home.arrange.group": { disabled: !input.canGroup },
64122
64321
  "home.arrange.ungroup": { disabled: !input.canUngroup },
@@ -64124,8 +64323,7 @@ function arrangeShapeHomeControls(input) {
64124
64323
  disabled: !input.editable || !input.canMerge,
64125
64324
  hidden: input.hideMerge
64126
64325
  },
64127
- "home.arrange.crop": { ...crop, pressed: input.cropActive },
64128
- "home.arrange.crop#caret": crop,
64326
+ ...cropHomeControls("home.arrange.crop", input),
64129
64327
  "home.arrange.outlineWidth": { disabled: !input.canStrokeWidth, value: input.strokeWidth }
64130
64328
  };
64131
64329
  }
@@ -64715,12 +64913,12 @@ function attachViewerHyperlinks(root, navigation) {
64715
64913
  };
64716
64914
  }
64717
64915
  function createSlidePackageClipboard(initialHost) {
64718
- let host2 = initialHost, disposed = false, pending = false;
64916
+ let host2 = initialHost, disposed = false, pending2 = false;
64719
64917
  const retiredHandlers = /* @__PURE__ */ new Set();
64720
64918
  const mediaUrls = /* @__PURE__ */ new Set();
64721
64919
  const snapshot = () => {
64722
64920
  if (disposed) throw new Error("Presentation is closed");
64723
- if (pending) throw new Error("Another clipboard operation is in progress");
64921
+ if (pending2) throw new Error("Another clipboard operation is in progress");
64724
64922
  const value = host2.getSnapshot();
64725
64923
  if (!value) throw new Error("Open a presentation first");
64726
64924
  return value;
@@ -64737,7 +64935,7 @@ function createSlidePackageClipboard(initialHost) {
64737
64935
  const slides = templateEditing.buildSaveSlides(before.slides, before.templateElementsBySlideId).map(
64738
64936
  clone.cloneSlide
64739
64937
  );
64740
- pending = true;
64938
+ pending2 = true;
64741
64939
  try {
64742
64940
  const text3 = before.handler.save(slides).then((bytes) => pptx.createSlideClipboardPackage(bytes, indexes)).then(pptx.serializeSlidePackageClipboard);
64743
64941
  if (typeof ClipboardItem === "undefined" || !ClipboardItem.supports?.(pptx.SLIDE_PACKAGE_CLIPBOARD_MIME) || !clipboard.write) {
@@ -64759,7 +64957,7 @@ function createSlidePackageClipboard(initialHost) {
64759
64957
  const settled = await Promise.allSettled([write, text3]);
64760
64958
  for (const result of settled) if (result.status === "rejected") throw result.reason;
64761
64959
  } finally {
64762
- pending = false;
64960
+ pending2 = false;
64763
64961
  }
64764
64962
  },
64765
64963
  async paste(insertAt) {
@@ -64767,7 +64965,7 @@ function createSlidePackageClipboard(initialHost) {
64767
64965
  if (before.editable === false) throw new Error("Presentation is read-only");
64768
64966
  const clipboard = globalThis.navigator?.clipboard;
64769
64967
  if (!clipboard?.readText) throw new Error("System clipboard is unavailable in this browser");
64770
- pending = true;
64968
+ pending2 = true;
64771
64969
  let handler, committed = false;
64772
64970
  const urls = [];
64773
64971
  try {
@@ -64824,7 +65022,7 @@ function createSlidePackageClipboard(initialHost) {
64824
65022
  for (const url of urls) mediaUrls.add(url);
64825
65023
  committed = true;
64826
65024
  } finally {
64827
- pending = false;
65025
+ pending2 = false;
64828
65026
  if (!committed) {
64829
65027
  handler?.dispose();
64830
65028
  for (const url of urls) URL.revokeObjectURL(url);
@@ -70228,19 +70426,19 @@ function createAnimationsGalleryView(doc, controlId, aria, columns, pick) {
70228
70426
  });
70229
70427
  root.append(strip2, more);
70230
70428
  const sync = (state) => {
70231
- root.setAttribute("aria-label", chunkUEF4BFW4_cjs.animationsLabel(state, aria[0], aria[1]));
70232
- const moreLabel = chunkUEF4BFW4_cjs.animationsLabel(state, "pptx.animations.moreEffects", "More Effects");
70429
+ root.setAttribute("aria-label", chunkXFQ2RD4I_cjs.animationsLabel(state, aria[0], aria[1]));
70430
+ const moreLabel = chunkXFQ2RD4I_cjs.animationsLabel(state, "pptx.animations.moreEffects", "More Effects");
70233
70431
  more.setAttribute("aria-label", moreLabel);
70234
70432
  more.title = moreLabel;
70235
70433
  columns.forEach((column2, index) => {
70236
70434
  columnEls[index].setAttribute(
70237
70435
  "aria-label",
70238
- chunkUEF4BFW4_cjs.animationsLabel(state, column2.labelKey, column2.fallback)
70436
+ chunkXFQ2RD4I_cjs.animationsLabel(state, column2.labelKey, column2.fallback)
70239
70437
  );
70240
70438
  });
70241
- const gated = chunkUEF4BFW4_cjs.animationsGated(state);
70439
+ const gated = chunkXFQ2RD4I_cjs.animationsGated(state);
70242
70440
  for (const { el, item: item4 } of buttons) {
70243
- const label = chunkUEF4BFW4_cjs.animationsLabel(state, item4.labelKey, item4.fallback);
70441
+ const label = chunkXFQ2RD4I_cjs.animationsLabel(state, item4.labelKey, item4.fallback);
70244
70442
  el.querySelector(".name").textContent = label;
70245
70443
  el.title = label;
70246
70444
  el.disabled = gated;
@@ -70286,11 +70484,11 @@ function createAnimationsTimingView(doc) {
70286
70484
  duration.dataset.ribbonControl = "animations.timing.duration";
70287
70485
  el.append(label, start, caption2, duration);
70288
70486
  const sync = (state) => {
70289
- label.textContent = chunkUEF4BFW4_cjs.animationsLabel(state, "pptx.animations.start", "Start");
70487
+ label.textContent = chunkXFQ2RD4I_cjs.animationsLabel(state, "pptx.animations.start", "Start");
70290
70488
  START_MODES.forEach(([key, fallback], index) => {
70291
- modes[index].textContent = chunkUEF4BFW4_cjs.animationsLabel(state, key, fallback);
70489
+ modes[index].textContent = chunkXFQ2RD4I_cjs.animationsLabel(state, key, fallback);
70292
70490
  });
70293
- text3.textContent = chunkUEF4BFW4_cjs.animationsLabel(state, "pptx.animations.duration", "Duration");
70491
+ text3.textContent = chunkXFQ2RD4I_cjs.animationsLabel(state, "pptx.animations.duration", "Duration");
70294
70492
  duration.setAttribute("aria-label", text3.textContent);
70295
70493
  };
70296
70494
  return { el, sync };
@@ -70316,7 +70514,7 @@ var EXIT = spec3({
70316
70514
  var PATH = spec3({
70317
70515
  icon: "moveRight",
70318
70516
  // One-click default path (Lines: Right), not an entrance preset.
70319
- add: { group: "motionPath", preset: chunkUEF4BFW4_cjs.DEFAULT_MOTION_PATH_PRESET_ID },
70517
+ add: { group: "motionPath", preset: chunkXFQ2RD4I_cjs.DEFAULT_MOTION_PATH_PRESET_ID },
70320
70518
  label: ["pptx.animations.pathAnimation", "Path Animation"]
70321
70519
  });
70322
70520
  var OPTIONS2 = spec3({
@@ -70357,7 +70555,7 @@ var REMOVE = spec3({
70357
70555
  label: ["pptx.animations.remove", "Remove"],
70358
70556
  title: ["pptx.animations.removeTooltip", "Remove animation from selected element"]
70359
70557
  });
70360
- var PRESET_COLUMNS = chunkUEF4BFW4_cjs.ANIMATION_RIBBON_CATEGORIES.map((category) => ({
70558
+ var PRESET_COLUMNS = chunkXFQ2RD4I_cjs.ANIMATION_RIBBON_CATEGORIES.map((category) => ({
70361
70559
  key: category.group,
70362
70560
  labelKey: category.labelKey,
70363
70561
  fallback: category.fallback,
@@ -70368,14 +70566,14 @@ var PRESET_COLUMNS = chunkUEF4BFW4_cjs.ANIMATION_RIBBON_CATEGORIES.map((category
70368
70566
  fallback: humanize2(preset2)
70369
70567
  }))
70370
70568
  }));
70371
- var PATH_COLUMNS = chunkUEF4BFW4_cjs.MOTION_PATH_FAMILIES.map((family2) => ({
70569
+ var PATH_COLUMNS = chunkXFQ2RD4I_cjs.MOTION_PATH_FAMILIES.map((family2) => ({
70372
70570
  key: family2,
70373
- labelKey: chunkUEF4BFW4_cjs.motionPathFamilyLabelKey(family2),
70571
+ labelKey: chunkXFQ2RD4I_cjs.motionPathFamilyLabelKey(family2),
70374
70572
  fallback: humanize2(family2),
70375
70573
  tone: "path",
70376
- items: chunkUEF4BFW4_cjs.motionPathPresetsByFamily(family2).map((preset2) => ({
70574
+ items: chunkXFQ2RD4I_cjs.motionPathPresetsByFamily(family2).map((preset2) => ({
70377
70575
  value: preset2.id,
70378
- labelKey: chunkUEF4BFW4_cjs.motionPathPresetLabelKey(preset2.id),
70576
+ labelKey: chunkXFQ2RD4I_cjs.motionPathPresetLabelKey(preset2.id),
70379
70577
  fallback: humanize2(preset2.id)
70380
70578
  }))
70381
70579
  }));
@@ -70461,11 +70659,11 @@ function createRibbonAnimationsView(doc, request) {
70461
70659
  group("animations.timing", timing.el)
70462
70660
  ];
70463
70661
  const sync = (state) => {
70464
- const text3 = (label) => chunkUEF4BFW4_cjs.animationsLabel(state, label[0], label[1]);
70662
+ const text3 = (label) => chunkXFQ2RD4I_cjs.animationsLabel(state, label[0], label[1]);
70465
70663
  for (const [id, el] of groups) {
70466
70664
  el.setAttribute("label", text3(CAPTIONS[id]));
70467
70665
  }
70468
- const gated = chunkUEF4BFW4_cjs.animationsGated(state);
70666
+ const gated = chunkXFQ2RD4I_cjs.animationsGated(state);
70469
70667
  for (const { el, spec: item4 } of commands) {
70470
70668
  el.setAttribute("label", text3(item4.label));
70471
70669
  el.setAttribute("title", text3(item4.title ?? item4.label));
@@ -70491,7 +70689,7 @@ function definePptxRibbonAnimations(registry2) {
70491
70689
  class RibbonAnimations extends HTMLElement {
70492
70690
  model = { editable: false, hasSelection: false };
70493
70691
  view = createRibbonAnimationsView(this.ownerDocument, (intent) => {
70494
- if (chunkUEF4BFW4_cjs.canRequestAnimations(this.model, intent)) {
70692
+ if (chunkXFQ2RD4I_cjs.canRequestAnimations(this.model, intent)) {
70495
70693
  this.dispatchEvent(
70496
70694
  new CustomEvent("animations-request", { detail: intent, bubbles: true, composed: true })
70497
70695
  );
@@ -70969,7 +71167,8 @@ var RIBBON_HOME_TAGS = [
70969
71167
  "pptx-ui-ribbon-home-arrange-edit",
70970
71168
  "pptx-ui-ribbon-home-font-picker",
70971
71169
  "pptx-ui-ribbon-home-arrange-painter",
70972
- "pptx-ui-ribbon-home-arrange-shape"
71170
+ "pptx-ui-ribbon-home-arrange-shape",
71171
+ "pptx-ui-ribbon-home-picture-size"
70973
71172
  ];
70974
71173
  var RIBBON_HOME_STYLES = `
70975
71174
  :host { display:contents; }
@@ -72017,6 +72216,7 @@ var definePptxRibbonHomeArrangeEdit = (registry2) => definePptxRibbonHome(regist
72017
72216
  var definePptxRibbonHomeFontPicker = (registry2) => definePptxRibbonHome(registry2, "font-picker");
72018
72217
  var definePptxRibbonHomeArrangePainter = (registry2) => definePptxRibbonHome(registry2, "arrange-painter");
72019
72218
  var definePptxRibbonHomeArrangeShape = (registry2) => definePptxRibbonHome(registry2, "arrange-shape");
72219
+ var definePptxRibbonHomePictureSize = (registry2) => definePptxRibbonHome(registry2, "picture-size");
72020
72220
 
72021
72221
  // src/pptx/web-components/ribbon-insert-styles.ts
72022
72222
  var RIBBON_INSERT_STYLES = `
@@ -74057,9 +74257,9 @@ function officeTitleBarState(state, placement) {
74057
74257
  const available = state.autosave.toggleAvailable !== false;
74058
74258
  const items = resolveTitleBarStrip(state, placement).map((item4) => {
74059
74259
  const label = t(item4.id === "save" ? "pptx.titleBar.save" : item4.labelKey);
74060
- const pending = item4.id === "undo" ? state.history.undoLabel : item4.id === "redo" ? state.history.redoLabel : null;
74061
- const tooltip = pending ? t(item4.id === "undo" ? "pptx.toolbar.undoAction" : "pptx.toolbar.redoAction", {
74062
- action: pending
74260
+ const pending2 = item4.id === "undo" ? state.history.undoLabel : item4.id === "redo" ? state.history.redoLabel : null;
74261
+ const tooltip = pending2 ? t(item4.id === "undo" ? "pptx.toolbar.undoAction" : "pptx.toolbar.redoAction", {
74262
+ action: pending2
74063
74263
  }) : label;
74064
74264
  return {
74065
74265
  id: item4.id,
@@ -74522,6 +74722,7 @@ var controls = [
74522
74722
  ["pptx-ui-ribbon-home-font-picker", definePptxRibbonHomeFontPicker],
74523
74723
  ["pptx-ui-ribbon-home-arrange-painter", definePptxRibbonHomeArrangePainter],
74524
74724
  ["pptx-ui-ribbon-home-arrange-shape", definePptxRibbonHomeArrangeShape],
74725
+ ["pptx-ui-ribbon-home-picture-size", definePptxRibbonHomePictureSize],
74525
74726
  ["pptx-ui-ribbon-view", definePptxRibbonView],
74526
74727
  ["pptx-ui-ribbon-transitions", definePptxRibbonTransitions],
74527
74728
  ["pptx-ui-ribbon-group", definePptxRibbonGroup],
@@ -76407,6 +76608,14 @@ async function rasterizeElementToDataUrl(node, naturalWidth, naturalHeight, doc,
76407
76608
  // src/pptx/index.ts
76408
76609
  registerPptxWebControls();
76409
76610
 
76611
+ Object.defineProperty(exports, "AFTER_ANIMATION_VALUES", {
76612
+ enumerable: true,
76613
+ get: function () { return pptx.AFTER_ANIMATION_VALUES; }
76614
+ });
76615
+ Object.defineProperty(exports, "DEFAULT_AFTER_ANIMATION_DIM_COLOR", {
76616
+ enumerable: true,
76617
+ get: function () { return pptx.DEFAULT_AFTER_ANIMATION_DIM_COLOR; }
76618
+ });
76410
76619
  Object.defineProperty(exports, "algorithmParam", {
76411
76620
  enumerable: true,
76412
76621
  get: function () { return pptx.algorithmParam; }
@@ -76467,10 +76676,22 @@ Object.defineProperty(exports, "gearPoints", {
76467
76676
  enumerable: true,
76468
76677
  get: function () { return pptx.gearPoints; }
76469
76678
  });
76679
+ Object.defineProperty(exports, "getAfterAnimation", {
76680
+ enumerable: true,
76681
+ get: function () { return pptx.getAfterAnimation; }
76682
+ });
76683
+ Object.defineProperty(exports, "getAfterAnimationState", {
76684
+ enumerable: true,
76685
+ get: function () { return pptx.getAfterAnimationState; }
76686
+ });
76470
76687
  Object.defineProperty(exports, "interpretSmartArtLayout", {
76471
76688
  enumerable: true,
76472
76689
  get: function () { return pptx.interpretSmartArtLayout; }
76473
76690
  });
76691
+ Object.defineProperty(exports, "isNativeAfterAnimationOnly", {
76692
+ enumerable: true,
76693
+ get: function () { return pptx.isNativeAfterAnimationOnly; }
76694
+ });
76474
76695
  Object.defineProperty(exports, "itemNode", {
76475
76696
  enumerable: true,
76476
76697
  get: function () { return pptx.itemNode; }
@@ -76507,6 +76728,14 @@ Object.defineProperty(exports, "resolveFlowDirection", {
76507
76728
  enumerable: true,
76508
76729
  get: function () { return pptx.resolveFlowDirection; }
76509
76730
  });
76731
+ Object.defineProperty(exports, "setAfterAnimation", {
76732
+ enumerable: true,
76733
+ get: function () { return pptx.setAfterAnimation; }
76734
+ });
76735
+ Object.defineProperty(exports, "setAfterAnimationColor", {
76736
+ enumerable: true,
76737
+ get: function () { return pptx.setAfterAnimationColor; }
76738
+ });
76510
76739
  Object.defineProperty(exports, "strokeFor", {
76511
76740
  enumerable: true,
76512
76741
  get: function () { return pptx.strokeFor; }
@@ -77687,7 +77916,6 @@ exports.ACTION_INDICATOR_CLASS = ACTION_INDICATOR_CLASS;
77687
77916
  exports.ACTION_INDICATOR_ICON_PATH = ACTION_INDICATOR_ICON_PATH;
77688
77917
  exports.ADD_INS_TAB = ADD_INS_TAB;
77689
77918
  exports.ADVANCED_TAB = ADVANCED_TAB;
77690
- exports.AFTER_ANIMATION_VALUES = AFTER_ANIMATION_VALUES;
77691
77919
  exports.ALIGN_OPTIONS = ALIGN_OPTIONS;
77692
77920
  exports.ALL_CLASSIFIED_PRESETS = ALL_CLASSIFIED_PRESETS;
77693
77921
  exports.ANGLE_UNITS_PER_RADIAN = ANGLE_UNITS_PER_RADIAN;
@@ -77778,7 +78006,6 @@ exports.CURSOR_PALETTE = CURSOR_PALETTE;
77778
78006
  exports.DATA_LABEL_CONTENT_OPTIONS = DATA_LABEL_CONTENT_OPTIONS;
77779
78007
  exports.DATA_LABEL_POSITION_OPTIONS = DATA_LABEL_POSITION_OPTIONS;
77780
78008
  exports.DEBOUNCE_MS = DEBOUNCE_MS;
77781
- exports.DEFAULT_AFTER_ANIMATION_DIM_COLOR = DEFAULT_AFTER_ANIMATION_DIM_COLOR;
77782
78009
  exports.DEFAULT_ANIMATION_TIMING_CURVE = DEFAULT_ANIMATION_TIMING_CURVE;
77783
78010
  exports.DEFAULT_BOUNDS = DEFAULT_BOUNDS;
77784
78011
  exports.DEFAULT_BROADCAST_SERVER_URL = DEFAULT_BROADCAST_SERVER_URL;
@@ -78271,6 +78498,7 @@ exports.applyAcceptAllSlides = applyAcceptAllSlides;
78271
78498
  exports.applyAcceptSlide = applyAcceptSlide;
78272
78499
  exports.applyActiveInlineListFormatting = applyActiveInlineListFormatting;
78273
78500
  exports.applyAnimationGroupSteps = applyAnimationGroupSteps;
78501
+ exports.applyAnimationOpacity = applyAnimationOpacity;
78274
78502
  exports.applyAnimationTimelineOrder = applyAnimationTimelineOrder;
78275
78503
  exports.applyAutoCorrect = applyAutoCorrect;
78276
78504
  exports.applyChart3DDrag = applyChart3DDrag;
@@ -78741,9 +78969,11 @@ exports.createViewerStore = createViewerStore;
78741
78969
  exports.createViewerZoomStore = createViewerZoomStore;
78742
78970
  exports.createWheelStepBuffer = createWheelStepBuffer;
78743
78971
  exports.createWriteBackScheduler = createWriteBackScheduler;
78972
+ exports.cropControlSpec = cropControlSpec;
78744
78973
  exports.cropFill = cropFill;
78745
78974
  exports.cropFit = cropFit;
78746
78975
  exports.cropFrameOf = cropFrameOf;
78976
+ exports.cropHomeControls = cropHomeControls;
78747
78977
  exports.cropModeKeyAction = cropModeKeyAction;
78748
78978
  exports.cropResetPatch = cropResetPatch;
78749
78979
  exports.cropResetState = cropResetState;
@@ -78798,6 +79028,7 @@ exports.disableOuterShadowPatch = disableOuterShadowPatch;
78798
79028
  exports.disableReflectionPatch = disableReflectionPatch;
78799
79029
  exports.disableSoftEdgePatch = disableSoftEdgePatch;
78800
79030
  exports.discardAutosaveRecovery = discardAutosaveRecovery;
79031
+ exports.dispatchCropRequest = dispatchCropRequest;
78801
79032
  exports.dominantDisplacement = dominantDisplacement;
78802
79033
  exports.downloadBlob = downloadBlob;
78803
79034
  exports.downloadDataUrl = downloadDataUrl;
@@ -78964,15 +79195,17 @@ exports.get3dTransformCss = get3dTransformCss;
78964
79195
  exports.getAcknowledgedAutosaveRecoveryTimestamp = getAcknowledgedAutosaveRecoveryTimestamp;
78965
79196
  exports.getActiveInlineListSelection = getActiveInlineListSelection;
78966
79197
  exports.getActiveXControlOverlayView = getActiveXControlOverlayView;
78967
- exports.getAfterAnimation = getAfterAnimation;
78968
79198
  exports.getAnimationColorBaseStyle = getAnimationColorBaseStyle;
78969
79199
  exports.getAnimationInitialStyle = getAnimationInitialStyle;
79200
+ exports.getAnimationOpacity = getAnimationOpacity;
78970
79201
  exports.getAriaLabel = getAriaLabel;
78971
79202
  exports.getAriaRole = getAriaRole;
78972
79203
  exports.getAriaRoleDescription = getAriaRoleDescription;
78973
79204
  exports.getArtisticFilterId = getArtisticFilterId;
78974
79205
  exports.getArtisticImageFilter = getArtisticImageFilter;
78975
79206
  exports.getAutosaveSnapshot = getAutosaveSnapshot;
79207
+ exports.getBackgroundAnimationLayers = getBackgroundAnimationLayers;
79208
+ exports.getBackgroundAnimationState = getBackgroundAnimationState;
78976
79209
  exports.getBevelLightingFilterId = getBevelLightingFilterId;
78977
79210
  exports.getBevelLightingFilterMarkup = getBevelLightingFilterMarkup;
78978
79211
  exports.getBevelLightingSvgFilter = getBevelLightingSvgFilter;
@@ -79099,6 +79332,8 @@ exports.getSessionTabId = getSessionTabId;
79099
79332
  exports.getShapeAdjustmentHandleDescriptor = getShapeAdjustmentHandleDescriptor;
79100
79333
  exports.getShapeAdjustmentHandleDescriptors = getShapeAdjustmentHandleDescriptors;
79101
79334
  exports.getShapeConnectionSites = getShapeConnectionSites;
79335
+ exports.getShapeEffectAnimationLayerStyle = getShapeEffectAnimationLayerStyle;
79336
+ exports.getShapeEffectLayerPlacement = getShapeEffectLayerPlacement;
79102
79337
  exports.getShapeFillOverlay = getShapeFillOverlay;
79103
79338
  exports.getSimpleCssTransform = getSimpleCssTransform;
79104
79339
  exports.getSlideBackgroundStyle = getSlideBackgroundStyle;
@@ -79166,7 +79401,7 @@ exports.homeLabel = homeLabel;
79166
79401
  exports.homeLaunchers = homeLaunchers;
79167
79402
  exports.homeSnapshotTranslator = homeSnapshotTranslator;
79168
79403
  exports.hostMenuLabel = hostMenuLabel;
79169
- exports.hslToRgb = hslToRgb2;
79404
+ exports.hslToRgb = hslToRgb;
79170
79405
  exports.imageAdjustmentsPatch = imageAdjustmentsPatch;
79171
79406
  exports.imageAdjustmentsStateOf = imageAdjustmentsStateOf;
79172
79407
  exports.imageCropPatch = imageCropPatch;
@@ -79485,6 +79720,7 @@ exports.pictureArtisticSections = pictureArtisticSections;
79485
79720
  exports.pictureColorSections = pictureColorSections;
79486
79721
  exports.pictureCorrectionsSections = pictureCorrectionsSections;
79487
79722
  exports.pictureEffects = pictureEffects;
79723
+ exports.pictureSizeHomeControls = pictureSizeHomeControls;
79488
79724
  exports.pieceLetterSpacing = pieceLetterSpacing;
79489
79725
  exports.placeAudienceWindow = placeAudienceWindow;
79490
79726
  exports.placeCaretAt = placeCaretAt;
@@ -79646,6 +79882,7 @@ exports.resolveDiagramBuildMode = resolveDiagramBuildMode;
79646
79882
  exports.resolveDiagramRevealDescriptor = resolveDiagramRevealDescriptor;
79647
79883
  exports.resolveDirection = resolveDirection;
79648
79884
  exports.resolveDirection8 = resolveDirection8;
79885
+ exports.resolveDisplaySlideNumber = resolveDisplaySlideNumber;
79649
79886
  exports.resolveDrawingShapeNodeId = resolveDrawingShapeNodeId;
79650
79887
  exports.resolveEastAsianBreakOptions = resolveEastAsianBreakOptions;
79651
79888
  exports.resolveEditPointsAvailability = resolveEditPointsAvailability;
@@ -79854,8 +80091,6 @@ exports.serializeShapeAdjustments = serializeShapeAdjustments;
79854
80091
  exports.serializeSvgPath = serializeSvgPath;
79855
80092
  exports.seriesColorClearState = seriesColorClearState;
79856
80093
  exports.seriesSecondaryAxisPatch = seriesSecondaryAxisPatch;
79857
- exports.setAfterAnimation = setAfterAnimation;
79858
- exports.setAfterAnimationColor = setAfterAnimationColor;
79859
80094
  exports.setCachedResult = setCachedResult;
79860
80095
  exports.setDataLabelsRangeCache = setDataLabelsRangeCache;
79861
80096
  exports.setDuotoneCachedResult = setDuotoneCachedResult;