ooxml-ui 1.23.1 → 1.25.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 (73) hide show
  1. package/README.md +4 -3
  2. package/custom-elements.json +35 -1
  3. package/dist/{chunk-6RCASLEC.js → chunk-5ZFOSFCK.js} +3 -2
  4. package/dist/{chunk-HTIJ2EAA.js → chunk-S736N64L.js} +1 -1
  5. package/dist/{chunk-TJ245GDD.js → chunk-SC44SOIS.js} +123 -3
  6. package/dist/{chunk-FX6CF43K.js → chunk-X5XR45BK.js} +1 -1
  7. package/dist/controls.d.ts +4 -2
  8. package/dist/controls.d.ts.map +1 -1
  9. package/dist/controls.js +1 -1
  10. package/dist/dialog/progress-dialog.d.ts +42 -0
  11. package/dist/dialog/progress-dialog.d.ts.map +1 -0
  12. package/dist/docx.js +13 -7
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +4 -4
  15. package/dist/pptx/{chunk-6DQCBVYA.cjs → chunk-4TFSELNQ.cjs} +842 -161
  16. package/dist/pptx/{chunk-ZO43VVWQ.cjs → chunk-J642EKDV.cjs} +48 -0
  17. package/dist/pptx/{chunk-M43GZY6N.mjs → chunk-QTLP3MX7.mjs} +816 -154
  18. package/dist/pptx/{chunk-B5FR65LB.mjs → chunk-SCURBCNQ.mjs} +47 -1
  19. package/dist/pptx/dom/elements/smartart-3d.d.ts.map +1 -1
  20. package/dist/pptx/dom/elements/smartart-editable.d.ts.map +1 -1
  21. package/dist/pptx/dom/index.cjs +226 -219
  22. package/dist/pptx/dom/index.mjs +11 -4
  23. package/dist/pptx/export/html2canvas-clone.cjs +10 -2
  24. package/dist/pptx/export/html2canvas-clone.d.ts +24 -0
  25. package/dist/pptx/export/html2canvas-clone.d.ts.map +1 -1
  26. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  27. package/dist/pptx/index.cjs +3024 -2940
  28. package/dist/pptx/index.mjs +2 -2
  29. package/dist/pptx/render/export-progress.d.ts +12 -0
  30. package/dist/pptx/render/export-progress.d.ts.map +1 -1
  31. package/dist/pptx/render/index.d.ts +2 -0
  32. package/dist/pptx/render/index.d.ts.map +1 -1
  33. package/dist/pptx/render/morph-animation.d.ts +1 -1
  34. package/dist/pptx/render/morph-animation.d.ts.map +1 -1
  35. package/dist/pptx/render/morph-overlay-layers.d.ts +108 -0
  36. package/dist/pptx/render/morph-overlay-layers.d.ts.map +1 -0
  37. package/dist/pptx/render/morph-plan.d.ts +16 -0
  38. package/dist/pptx/render/morph-plan.d.ts.map +1 -1
  39. package/dist/pptx/render/read-only-session.d.ts +120 -0
  40. package/dist/pptx/render/read-only-session.d.ts.map +1 -0
  41. package/dist/pptx/render/ribbon-galleries/gallery-placements.d.ts.map +1 -1
  42. package/dist/pptx/render/ribbon-galleries/gallery-registry.d.ts.map +1 -1
  43. package/dist/pptx/render/ribbon-galleries/gallery-types.d.ts +3 -1
  44. package/dist/pptx/render/ribbon-galleries/gallery-types.d.ts.map +1 -1
  45. package/dist/pptx/render/ribbon-galleries/index.d.ts +1 -0
  46. package/dist/pptx/render/ribbon-galleries/index.d.ts.map +1 -1
  47. package/dist/pptx/render/ribbon-galleries/quick-styles-gallery.d.ts +18 -0
  48. package/dist/pptx/render/ribbon-galleries/quick-styles-gallery.d.ts.map +1 -0
  49. package/dist/pptx/render/shape-geometry-cascade.d.ts.map +1 -1
  50. package/dist/pptx/render/shape-quick-styles.d.ts +0 -5
  51. package/dist/pptx/render/shape-quick-styles.d.ts.map +1 -1
  52. package/dist/pptx/render/smartart-3d-edit-layer.d.ts +10 -0
  53. package/dist/pptx/render/smartart-3d-edit-layer.d.ts.map +1 -1
  54. package/dist/pptx/render/status-bar-state.d.ts +31 -7
  55. package/dist/pptx/render/status-bar-state.d.ts.map +1 -1
  56. package/dist/pptx/render/stroke-clip-outset.d.ts +12 -0
  57. package/dist/pptx/render/stroke-clip-outset.d.ts.map +1 -0
  58. package/dist/pptx/render/stroke-outline.d.ts +7 -0
  59. package/dist/pptx/render/stroke-outline.d.ts.map +1 -1
  60. package/dist/pptx/web-components/index.d.ts +1 -0
  61. package/dist/pptx/web-components/index.d.ts.map +1 -1
  62. package/dist/pptx/web-components/office-alias-types.d.ts +6 -1
  63. package/dist/pptx/web-components/office-alias-types.d.ts.map +1 -1
  64. package/dist/pptx/web-components/office-aliases.d.ts +5 -0
  65. package/dist/pptx/web-components/office-aliases.d.ts.map +1 -1
  66. package/dist/pptx/web-components/office-token-bridge.d.ts +1 -1
  67. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  68. package/dist/ribbon/gallery.d.ts +5 -4
  69. package/dist/ribbon/gallery.d.ts.map +1 -1
  70. package/dist/teams.js +2 -2
  71. package/dist/visio.js +3 -3
  72. package/dist/xlsx.js +6 -6
  73. package/package.json +2 -2
@@ -15,7 +15,7 @@ var chunkW3X2UVYQ_cjs = require('./chunk-W3X2UVYQ.cjs');
15
15
  var chunkG3UVZ5FO_cjs = require('./chunk-G3UVZ5FO.cjs');
16
16
  var chunkFOE75Z6N_cjs = require('./chunk-FOE75Z6N.cjs');
17
17
  var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
- var chunkZO43VVWQ_cjs = require('./chunk-ZO43VVWQ.cjs');
18
+ var chunkJ642EKDV_cjs = require('./chunk-J642EKDV.cjs');
19
19
  var chunkX4FNVH7J_cjs = require('./chunk-X4FNVH7J.cjs');
20
20
  var chunkUPN5FFKP_cjs = require('./chunk-UPN5FFKP.cjs');
21
21
  var chunkOJFD3SHS_cjs = require('./chunk-OJFD3SHS.cjs');
@@ -1499,12 +1499,12 @@ function getPresetShapeVectorGeometry(shapeType, width, height, adjustments) {
1499
1499
  function outlineStrands(compoundLine, strokeWidth) {
1500
1500
  const offsets2 = getCompoundLineOffsets(compoundLine, strokeWidth);
1501
1501
  if (offsets2.length <= 1) {
1502
- return [{ strokeWidth, cssStrokeWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1502
+ return [{ strokeWidth, cssStrokeWidth: chunkJ642EKDV_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1503
1503
  }
1504
1504
  const widths = getCompoundLineWidths(compoundLine, strokeWidth);
1505
1505
  return offsets2.map((offset, idx) => {
1506
1506
  const width = widths[idx] ?? strokeWidth;
1507
- return { strokeWidth: width, cssStrokeWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(width), offset };
1507
+ return { strokeWidth: width, cssStrokeWidth: chunkJ642EKDV_cjs.screenStrokeWidth(width), offset };
1508
1508
  });
1509
1509
  }
1510
1510
  function needsCenteredStrokeOverlay(element, style, declaredWidth) {
@@ -1517,6 +1517,18 @@ function needsCenteredStrokeOverlay(element, style, declaredWidth) {
1517
1517
  }
1518
1518
  return style.lineAlignment !== "in";
1519
1519
  }
1520
+ function straddlingStrokeWidth(element) {
1521
+ if (!pptx.hasShapeProperties(element)) {
1522
+ return 0;
1523
+ }
1524
+ const style = element.shapeStyle;
1525
+ const width = Math.max(0, style?.strokeWidth ?? 0);
1526
+ if (!needsCenteredStrokeOverlay(element, style, width)) {
1527
+ return 0;
1528
+ }
1529
+ const dash = chunkG3UVZ5FO_cjs.normalizeStrokeDashType(style?.strokeDash);
1530
+ return !dash || dash === "solid" ? width : 0;
1531
+ }
1520
1532
  function buildStrokeOutline(element) {
1521
1533
  if (!pptx.hasShapeProperties(element)) {
1522
1534
  return void 0;
@@ -1638,6 +1650,208 @@ function mapEditingWheel(input, buffer, canScrollFurther) {
1638
1650
  function mapPresentationWheel(input, buffer) {
1639
1651
  return accumulate(buffer, normalizeWheelDelta(input));
1640
1652
  }
1653
+
1654
+ // src/pptx/render/stroke-clip-outset.ts
1655
+ var CURVE_STEPS = 16;
1656
+ function flattenArc(from, rx, ry, rotationDeg, largeArc, sweep, to) {
1657
+ if (rx === 0 || ry === 0 || from[0] === to[0] && from[1] === to[1]) {
1658
+ return [to];
1659
+ }
1660
+ const phi = rotationDeg * Math.PI / 180;
1661
+ const cosPhi = Math.cos(phi);
1662
+ const sinPhi = Math.sin(phi);
1663
+ const dx = (from[0] - to[0]) / 2;
1664
+ const dy = (from[1] - to[1]) / 2;
1665
+ const x1 = cosPhi * dx + sinPhi * dy;
1666
+ const y1 = -sinPhi * dx + cosPhi * dy;
1667
+ let radiusX = Math.abs(rx);
1668
+ let radiusY = Math.abs(ry);
1669
+ const lambda = x1 * x1 / (radiusX * radiusX) + y1 * y1 / (radiusY * radiusY);
1670
+ if (lambda > 1) {
1671
+ const scale2 = Math.sqrt(lambda);
1672
+ radiusX *= scale2;
1673
+ radiusY *= scale2;
1674
+ }
1675
+ const numerator = radiusX * radiusX * radiusY * radiusY - radiusX * radiusX * y1 * y1 - radiusY * radiusY * x1 * x1;
1676
+ const denominator = radiusX * radiusX * y1 * y1 + radiusY * radiusY * x1 * x1;
1677
+ const coefficient = (largeArc === sweep ? -1 : 1) * Math.sqrt(Math.max(0, numerator / denominator));
1678
+ const cxp = coefficient * radiusX * y1 / radiusY;
1679
+ const cyp = -coefficient * radiusY * x1 / radiusX;
1680
+ const cx = cosPhi * cxp - sinPhi * cyp + (from[0] + to[0]) / 2;
1681
+ const cy = sinPhi * cxp + cosPhi * cyp + (from[1] + to[1]) / 2;
1682
+ const angle = (ux, uy, vx, vy) => {
1683
+ const sign = ux * vy - uy * vx < 0 ? -1 : 1;
1684
+ const dot = (ux * vx + uy * vy) / (Math.hypot(ux, uy) * Math.hypot(vx, vy));
1685
+ return sign * Math.acos(Math.max(-1, Math.min(1, dot)));
1686
+ };
1687
+ const theta1 = angle(1, 0, (x1 - cxp) / radiusX, (y1 - cyp) / radiusY);
1688
+ let delta = angle(
1689
+ (x1 - cxp) / radiusX,
1690
+ (y1 - cyp) / radiusY,
1691
+ (-x1 - cxp) / radiusX,
1692
+ (-y1 - cyp) / radiusY
1693
+ );
1694
+ if (!sweep && delta > 0) {
1695
+ delta -= 2 * Math.PI;
1696
+ } else if (sweep && delta < 0) {
1697
+ delta += 2 * Math.PI;
1698
+ }
1699
+ const out = [];
1700
+ for (let step = 1; step <= CURVE_STEPS; step++) {
1701
+ const t2 = theta1 + delta * step / CURVE_STEPS;
1702
+ const px3 = radiusX * Math.cos(t2);
1703
+ const py = radiusY * Math.sin(t2);
1704
+ out.push([cosPhi * px3 - sinPhi * py + cx, sinPhi * px3 + cosPhi * py + cy]);
1705
+ }
1706
+ return out;
1707
+ }
1708
+ function flattenPath(d) {
1709
+ const tokens = d.match(/[A-Za-z]|-?\d*\.?\d+(?:e[-+]?\d+)?/giu);
1710
+ if (!tokens) {
1711
+ return void 0;
1712
+ }
1713
+ const subpaths = [];
1714
+ let current = [];
1715
+ let pos = [0, 0];
1716
+ let start = [0, 0];
1717
+ let i = 0;
1718
+ let command2 = "";
1719
+ const num14 = () => Number.parseFloat(tokens[i++] ?? "NaN");
1720
+ while (i < tokens.length) {
1721
+ const token = tokens[i];
1722
+ if (/^[A-Za-z]$/u.test(token)) {
1723
+ command2 = token;
1724
+ i++;
1725
+ if (command2 === "Z" || command2 === "z") {
1726
+ if (current.length > 1) {
1727
+ subpaths.push(current);
1728
+ }
1729
+ current = [];
1730
+ pos = start;
1731
+ continue;
1732
+ }
1733
+ } else if (command2 === "M") {
1734
+ command2 = "L";
1735
+ }
1736
+ switch (command2) {
1737
+ case "M":
1738
+ if (current.length > 1) {
1739
+ subpaths.push(current);
1740
+ }
1741
+ pos = [num14(), num14()];
1742
+ start = pos;
1743
+ current = [pos];
1744
+ break;
1745
+ case "L":
1746
+ pos = [num14(), num14()];
1747
+ current.push(pos);
1748
+ break;
1749
+ case "H":
1750
+ pos = [num14(), pos[1]];
1751
+ current.push(pos);
1752
+ break;
1753
+ case "V":
1754
+ pos = [pos[0], num14()];
1755
+ current.push(pos);
1756
+ break;
1757
+ case "C": {
1758
+ const p1 = [num14(), num14()];
1759
+ const p2 = [num14(), num14()];
1760
+ const p3 = [num14(), num14()];
1761
+ for (let step = 1; step <= CURVE_STEPS; step++) {
1762
+ const t2 = step / CURVE_STEPS;
1763
+ const u = 1 - t2;
1764
+ current.push([
1765
+ u * u * u * pos[0] + 3 * u * u * t2 * p1[0] + 3 * u * t2 * t2 * p2[0] + t2 * t2 * t2 * p3[0],
1766
+ u * u * u * pos[1] + 3 * u * u * t2 * p1[1] + 3 * u * t2 * t2 * p2[1] + t2 * t2 * t2 * p3[1]
1767
+ ]);
1768
+ }
1769
+ pos = p3;
1770
+ break;
1771
+ }
1772
+ case "Q": {
1773
+ const p1 = [num14(), num14()];
1774
+ const p2 = [num14(), num14()];
1775
+ for (let step = 1; step <= CURVE_STEPS; step++) {
1776
+ const t2 = step / CURVE_STEPS;
1777
+ const u = 1 - t2;
1778
+ current.push([
1779
+ u * u * pos[0] + 2 * u * t2 * p1[0] + t2 * t2 * p2[0],
1780
+ u * u * pos[1] + 2 * u * t2 * p1[1] + t2 * t2 * p2[1]
1781
+ ]);
1782
+ }
1783
+ pos = p2;
1784
+ break;
1785
+ }
1786
+ case "A": {
1787
+ const rx = num14();
1788
+ const ry = num14();
1789
+ const rotation = num14();
1790
+ const largeArc = num14() !== 0;
1791
+ const sweep = num14() !== 0;
1792
+ const to = [num14(), num14()];
1793
+ current.push(...flattenArc(pos, rx, ry, rotation, largeArc, sweep, to));
1794
+ pos = to;
1795
+ break;
1796
+ }
1797
+ default:
1798
+ return void 0;
1799
+ }
1800
+ }
1801
+ if (current.length > 1) {
1802
+ subpaths.push(current);
1803
+ }
1804
+ return subpaths.every((sub) => sub.every(([x, y]) => Number.isFinite(x) && Number.isFinite(y))) ? subpaths : void 0;
1805
+ }
1806
+ var fmt = (n) => String(Math.round(n * 1e3) / 1e3);
1807
+ function outsetClipPathForStroke(clipPath, strokeWidth, width, height) {
1808
+ if (!(strokeWidth > 0)) {
1809
+ return clipPath;
1810
+ }
1811
+ const d = outlinePathData(clipPath, width, height);
1812
+ const subpaths = d ? flattenPath(d) : void 0;
1813
+ if (!d || !subpaths || subpaths.length === 0) {
1814
+ return clipPath;
1815
+ }
1816
+ const half = strokeWidth / 2;
1817
+ const signedArea3 = (pts) => {
1818
+ let area = 0;
1819
+ for (let k = 0; k < pts.length; k++) {
1820
+ const a = pts[k];
1821
+ const b = pts[(k + 1) % pts.length];
1822
+ area += a[0] * b[1] - b[0] * a[1];
1823
+ }
1824
+ return area;
1825
+ };
1826
+ const reference = Math.sign(signedArea3(subpaths[0])) || 1;
1827
+ const quads = [];
1828
+ for (const sub of subpaths) {
1829
+ const closed = [...sub, sub[0]];
1830
+ for (let k = 0; k < closed.length - 1; k++) {
1831
+ const a = closed[k];
1832
+ const b = closed[k + 1];
1833
+ const len = Math.hypot(b[0] - a[0], b[1] - a[1]);
1834
+ if (len < 1e-6) {
1835
+ continue;
1836
+ }
1837
+ const nx = -(b[1] - a[1]) / len * half;
1838
+ const ny = (b[0] - a[0]) / len * half;
1839
+ let quad2 = [
1840
+ [a[0] + nx, a[1] + ny],
1841
+ [b[0] + nx, b[1] + ny],
1842
+ [b[0] - nx, b[1] - ny],
1843
+ [a[0] - nx, a[1] - ny]
1844
+ ];
1845
+ if (Math.sign(signedArea3(quad2)) !== reference) {
1846
+ quad2 = quad2.reverse();
1847
+ }
1848
+ quads.push(`M ${quad2.map(([x, y]) => `${fmt(x)} ${fmt(y)}`).join(" L ")} Z`);
1849
+ }
1850
+ }
1851
+ return `path('${d} ${quads.join(" ")}')`;
1852
+ }
1853
+
1854
+ // src/pptx/render/shape-geometry-cascade.ts
1641
1855
  var CYLINDER_RADIUS = "48% / 12%";
1642
1856
  var MIN_ROUND_RECT_RADIUS_PX = 0.01;
1643
1857
  function resolveShapeGeometry(element) {
@@ -1657,7 +1871,11 @@ function resolveShapeGeometry(element) {
1657
1871
  }
1658
1872
  const clipPath = isIdentityRectClip(element) ? void 0 : getResolvedShapeClipPath(element);
1659
1873
  if (clipPath) {
1660
- return { kind: "clipPath", clipPath };
1874
+ const stroke = straddlingStrokeWidth(element);
1875
+ return {
1876
+ kind: "clipPath",
1877
+ clipPath: stroke > 0 ? outsetClipPathForStroke(clipPath, stroke, element.width, element.height) : clipPath
1878
+ };
1661
1879
  }
1662
1880
  if (shapeType === "line") {
1663
1881
  const authored = element.shapeStyle?.strokeWidth;
@@ -1985,10 +2203,10 @@ function getComputedStrokeStyle(element) {
1985
2203
  const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkG3UVZ5FO_cjs.colorWithOpacity(chunkG3UVZ5FO_cjs.normalizeHexColor(rawColor, chunkG3UVZ5FO_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
1986
2204
  return {
1987
2205
  borderWidth,
1988
- cssBorderWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(borderWidth),
2206
+ cssBorderWidth: chunkJ642EKDV_cjs.screenStrokeWidth(borderWidth),
1989
2207
  borderStyle,
1990
2208
  borderColor,
1991
- border: chunkZO43VVWQ_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
2209
+ border: chunkJ642EKDV_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
1992
2210
  ...joins
1993
2211
  };
1994
2212
  }
@@ -2135,14 +2353,14 @@ function tileAlignmentPercentages(alignment) {
2135
2353
  return { x: 0, y: 0 };
2136
2354
  }
2137
2355
  }
2138
- function tileAxisPosition(percent3, offsetPx) {
2356
+ function tileAxisPosition(percent4, offsetPx) {
2139
2357
  if (offsetPx === 0) {
2140
- return `${percent3}%`;
2358
+ return `${percent4}%`;
2141
2359
  }
2142
- if (percent3 === 0) {
2360
+ if (percent4 === 0) {
2143
2361
  return `${offsetPx}px`;
2144
2362
  }
2145
- return `calc(${percent3}% + ${offsetPx}px)`;
2363
+ return `calc(${percent4}% + ${offsetPx}px)`;
2146
2364
  }
2147
2365
  function buildMirrorTiledBackground(src, flip, scaleX, scaleY, nativeSize) {
2148
2366
  if (!src.startsWith("data:")) {
@@ -6337,7 +6555,7 @@ function resetGlyphEnvelopeMeasureCache() {
6337
6555
  }
6338
6556
 
6339
6557
  // src/pptx/render/text-warp-glyph-outline.ts
6340
- var CURVE_STEPS = 8;
6558
+ var CURVE_STEPS2 = 8;
6341
6559
  function flattenOutline(commands, maxSegment) {
6342
6560
  const contours = [];
6343
6561
  let current = [];
@@ -6371,8 +6589,8 @@ function flattenOutline(commands, maxSegment) {
6371
6589
  break;
6372
6590
  case "Q": {
6373
6591
  const p0 = pen;
6374
- for (let i = 1; i <= CURVE_STEPS; i++) {
6375
- const t2 = i / CURVE_STEPS;
6592
+ for (let i = 1; i <= CURVE_STEPS2; i++) {
6593
+ const t2 = i / CURVE_STEPS2;
6376
6594
  const mt = 1 - t2;
6377
6595
  lineTo({
6378
6596
  x: mt * mt * p0.x + 2 * mt * t2 * cmd.x1 + t2 * t2 * cmd.x,
@@ -6383,8 +6601,8 @@ function flattenOutline(commands, maxSegment) {
6383
6601
  }
6384
6602
  case "C": {
6385
6603
  const p0 = pen;
6386
- for (let i = 1; i <= CURVE_STEPS; i++) {
6387
- const t2 = i / CURVE_STEPS;
6604
+ for (let i = 1; i <= CURVE_STEPS2; i++) {
6605
+ const t2 = i / CURVE_STEPS2;
6388
6606
  const mt = 1 - t2;
6389
6607
  const a = mt * mt * mt;
6390
6608
  const b = 3 * mt * mt * t2;
@@ -10822,7 +11040,7 @@ function powerPointAccelDecelProgress(t2, accel, decel) {
10822
11040
  function rampStopCount(fraction) {
10823
11041
  return Math.max(3, Math.ceil(12 * Math.sqrt(fraction)));
10824
11042
  }
10825
- function fmt(value, digits) {
11043
+ function fmt2(value, digits) {
10826
11044
  return String(Number(value.toFixed(digits)));
10827
11045
  }
10828
11046
  function linearEasing(a, d) {
@@ -10840,11 +11058,11 @@ function linearEasing(a, d) {
10840
11058
  addRamp(1 - d, d);
10841
11059
  }
10842
11060
  const stops = [...times].sort((x, y) => x - y).map((t2) => {
10843
- const value = fmt(powerPointAccelDecelProgress(t2, a, d), 4);
11061
+ const value = fmt2(powerPointAccelDecelProgress(t2, a, d), 4);
10844
11062
  if (t2 === 0 || t2 === 1) {
10845
11063
  return value;
10846
11064
  }
10847
- return `${value} ${fmt(t2 * 100, 2)}%`;
11065
+ return `${value} ${fmt2(t2 * 100, 2)}%`;
10848
11066
  });
10849
11067
  return `linear(${stops.join(", ")})`;
10850
11068
  }
@@ -15445,10 +15663,10 @@ function createAttributeTransformModel(anim, box) {
15445
15663
  }
15446
15664
 
15447
15665
  // src/pptx/render/animation-transform-keyframes.ts
15448
- function slideOffset(percent3, axis, origin) {
15666
+ function slideOffset(percent4, axis, origin) {
15449
15667
  const fallback = axis === "w" ? "1280px" : "720px";
15450
15668
  const varName = origin === "parent" ? `--pptx-parent-${axis}` : `--pptx-slide-${axis}`;
15451
- return `calc(var(${varName}, ${fallback}) * ${(percent3 / 100).toFixed(4)})`;
15669
+ return `calc(var(${varName}, ${fallback}) * ${(percent4 / 100).toFixed(4)})`;
15452
15670
  }
15453
15671
  function hasRotation(anim) {
15454
15672
  return anim.rotationBy !== void 0 || anim.rotationFrom !== void 0 || anim.rotationTo !== void 0;
@@ -17750,25 +17968,25 @@ function createBehaviorPlayer(anim, box) {
17750
17968
  // src/pptx/render/animation-behavior-keyframes.ts
17751
17969
  var DENSE_SAMPLES = 60;
17752
17970
  var HOLD_EPSILON = 1e-5;
17753
- function fmt2(value, digits = 4) {
17971
+ function fmt3(value, digits = 4) {
17754
17972
  const rounded = Number(value.toFixed(digits));
17755
17973
  return String(Object.is(rounded, -0) ? 0 : rounded);
17756
17974
  }
17757
17975
  function declarations(frame, usage) {
17758
17976
  const parts = [
17759
- usage.slidePx ? `translate(${fmt2(frame.dx * usage.slidePx.width, 2)}px, ${fmt2(frame.dy * usage.slidePx.height, 2)}px)` : `translate(calc(var(--pptx-slide-w, 1280px) * ${fmt2(frame.dx)}), calc(var(--pptx-slide-h, 720px) * ${fmt2(frame.dy)}))`
17977
+ usage.slidePx ? `translate(${fmt3(frame.dx * usage.slidePx.width, 2)}px, ${fmt3(frame.dy * usage.slidePx.height, 2)}px)` : `translate(calc(var(--pptx-slide-w, 1280px) * ${fmt3(frame.dx)}), calc(var(--pptx-slide-h, 720px) * ${fmt3(frame.dy)}))`
17760
17978
  ];
17761
17979
  if (usage.rotate) {
17762
- parts.push(`rotate(${fmt2(frame.rotation, 2)}deg)`);
17980
+ parts.push(`rotate(${fmt3(frame.rotation, 2)}deg)`);
17763
17981
  }
17764
17982
  if (usage.shear) {
17765
- parts.push(`skewX(${fmt2(Math.atan(frame.shearX) * 180 / Math.PI, 2)}deg)`);
17983
+ parts.push(`skewX(${fmt3(Math.atan(frame.shearX) * 180 / Math.PI, 2)}deg)`);
17766
17984
  }
17767
17985
  if (usage.scale) {
17768
- parts.push(`scale(${fmt2(frame.scaleX)}, ${fmt2(frame.scaleY)})`);
17986
+ parts.push(`scale(${fmt3(frame.scaleX)}, ${fmt3(frame.scaleY)})`);
17769
17987
  }
17770
17988
  const mask = usage.wipeEdge ? ` ${maskEdgePartialDecl(usage.wipeEdge, frame.wipe?.revealed ?? 1)}` : "";
17771
- return `opacity: ${fmt2(frame.opacity, 3)}; transform: ${parts.join(" ")};${mask}`;
17989
+ return `opacity: ${fmt3(frame.opacity, 3)}; transform: ${parts.join(" ")};${mask}`;
17772
17990
  }
17773
17991
  function buildBehaviorKeyframes(anim, uid2, box, options = {}) {
17774
17992
  const player = createBehaviorPlayer(anim, box);
@@ -17802,7 +18020,7 @@ function buildBehaviorKeyframes(anim, uid2, box, options = {}) {
17802
18020
  };
17803
18021
  const name = `${options.prefix ?? "pptx-tl-bhvr"}-${uid2}`;
17804
18022
  const lines = frames.map(
17805
- ({ offset, frame }) => ` ${fmt2(offset * 100, 3)}% { ${declarations(frame, usage)} }`
18023
+ ({ offset, frame }) => ` ${fmt3(offset * 100, 3)}% { ${declarations(frame, usage)} }`
17806
18024
  );
17807
18025
  if (anim.presetClass === "entr") {
17808
18026
  lines[0] = lines[0].replace(/^\t0% \{ opacity: [\d.]+;/u, " 0% { opacity: 0;");
@@ -19409,10 +19627,10 @@ function buildMotionPathKeyframes(args) {
19409
19627
  return void 0;
19410
19628
  }
19411
19629
  const frames = points.map((point, index) => {
19412
- const percent3 = Math.round(index / (points.length - 1) * 100);
19630
+ const percent4 = Math.round(index / (points.length - 1) * 100);
19413
19631
  const x = trimNumber(point.x * args.slideWidth);
19414
19632
  const y = trimNumber(point.y * args.slideHeight);
19415
- return ` ${percent3}% { transform: translate(${x}px, ${y}px); }`;
19633
+ return ` ${percent4}% { transform: translate(${x}px, ${y}px); }`;
19416
19634
  });
19417
19635
  return {
19418
19636
  keyframeName: args.keyframeName,
@@ -21857,7 +22075,7 @@ function borderToCss(border, resolve) {
21857
22075
  const width = border.width ?? 1;
21858
22076
  const dash = ooxmlDashToCssBorderStyle(border.dash);
21859
22077
  const color = border.color ?? resolve(border.fill) ?? "#000000";
21860
- return chunkZO43VVWQ_cjs.screenBorder(width, dash, color);
22078
+ return chunkJ642EKDV_cjs.screenBorder(width, dash, color);
21861
22079
  }
21862
22080
  function collectSections(entry6, tableData, pos) {
21863
22081
  const { rowIndex, cellIndex, rowCount, columnCount } = pos;
@@ -23322,7 +23540,7 @@ function cellStyleToCss(style) {
23322
23540
  const w = edge.width ?? 1;
23323
23541
  const c = edge.color ?? style.borderColor ?? "#000000";
23324
23542
  const s = ooxmlDashToCssBorderStyle(edge.dash);
23325
- css[edge.prefix] = chunkZO43VVWQ_cjs.screenBorder(w, s, c);
23543
+ css[edge.prefix] = chunkJ642EKDV_cjs.screenBorder(w, s, c);
23326
23544
  }
23327
23545
  }
23328
23546
  Object.assign(css, cellPaddingCss(style));
@@ -30805,11 +31023,11 @@ function sampleImageCropMorphSteps(fromElement, toElement) {
30805
31023
  for (const key of keys) {
30806
31024
  insets[key] = from[key] + (to[key] - from[key]) * progress;
30807
31025
  }
30808
- const percent3 = Math.round(time * 100 * 1e4) / 1e4;
31026
+ const percent4 = Math.round(time * 100 * 1e4) / 1e4;
30809
31027
  const { placement, crop } = fitTransformsFromInsets(insets);
30810
31028
  const identity8 = "translate(0%, 0%) scale(1, 1)";
30811
31029
  const transform = step === CROP_TRACK_STEPS ? buildImageFitTransform(toElement, true) : `${placement || identity8} ${crop || identity8}`;
30812
- samples.push({ percent: `${percent3}%`, progress, transform });
31030
+ samples.push({ percent: `${percent4}%`, progress, transform });
30813
31031
  }
30814
31032
  return samples;
30815
31033
  }
@@ -31498,6 +31716,76 @@ function resolveMorphOverlayArrivals(outgoing, incoming, pairs, holdingGhostIds,
31498
31716
  }
31499
31717
  return lifted;
31500
31718
  }
31719
+
31720
+ // src/pptx/render/morph-overlay-layers.ts
31721
+ function buildMorphIncomingAnchoredOrder(outgoing, incoming, pairs) {
31722
+ const rank = new Map(incoming.map((element, index) => [element.id, index]));
31723
+ const partnerOf = new Map(pairs.map((pair) => [pair.fromElement.id, pair.toElement.id]));
31724
+ let run = [];
31725
+ let floor = -1;
31726
+ const flush = (ceiling) => {
31727
+ const base2 = floor < ceiling ? floor : ceiling - 1;
31728
+ const span = floor < ceiling ? Math.min(1, ceiling - floor) : 1;
31729
+ run.forEach((id, index) => rank.set(id, base2 + span * (index + 1) / (run.length + 1)));
31730
+ run = [];
31731
+ };
31732
+ for (const element of outgoing) {
31733
+ const partner = partnerOf.get(element.id);
31734
+ const partnerRank = partner === void 0 ? void 0 : rank.get(partner);
31735
+ if (partnerRank === void 0) {
31736
+ run.push(element.id);
31737
+ continue;
31738
+ }
31739
+ flush(partnerRank);
31740
+ rank.set(element.id, partnerRank);
31741
+ floor = partnerRank;
31742
+ }
31743
+ flush(incoming.length);
31744
+ return rank;
31745
+ }
31746
+ function ghostMorphPairsHiddenByGhosts(ghostIds, outgoing, incoming, pairs, holds) {
31747
+ const rank = buildMorphIncomingAnchoredOrder(outgoing, incoming, pairs);
31748
+ const boxOf = (pair) => travelledBox(pair.fromElement, pair.toElement);
31749
+ let changed = true;
31750
+ while (changed) {
31751
+ changed = false;
31752
+ const shields = pairs.filter((pair) => ghostIds.has(pair.fromElement.id) && holds(pair));
31753
+ for (const pair of pairs) {
31754
+ if (ghostIds.has(pair.fromElement.id)) {
31755
+ continue;
31756
+ }
31757
+ const mine = rank.get(pair.fromElement.id) ?? 0;
31758
+ const box = boxOf(pair);
31759
+ if (shields.some(
31760
+ (shield) => (rank.get(shield.fromElement.id) ?? 0) < mine && boxesOverlap(boxOf(shield), box)
31761
+ )) {
31762
+ ghostIds.add(pair.fromElement.id);
31763
+ changed = true;
31764
+ }
31765
+ }
31766
+ }
31767
+ return ghostIds;
31768
+ }
31769
+ function resolveMorphOverlayLayers(ghosts, lifted, outgoing, incoming, pairs) {
31770
+ const rank = buildMorphIncomingAnchoredOrder(outgoing, incoming, pairs);
31771
+ const entries2 = [
31772
+ ...ghosts.map((element, index) => ({ element, side: "outgoing", index })),
31773
+ ...lifted.map((element, index) => ({ element, side: "incoming", index }))
31774
+ ];
31775
+ entries2.sort(
31776
+ (a, b) => (rank.get(a.element.id) ?? 0) - (rank.get(b.element.id) ?? 0) || Number(a.side === "incoming") - Number(b.side === "incoming") || a.index - b.index
31777
+ );
31778
+ const layers = [];
31779
+ for (const entry6 of entries2) {
31780
+ const last = layers.at(-1);
31781
+ if (last?.side === entry6.side) {
31782
+ last.elements.push(entry6.element);
31783
+ } else {
31784
+ layers.push({ side: entry6.side, elements: [entry6.element] });
31785
+ }
31786
+ }
31787
+ return layers;
31788
+ }
31501
31789
  function tokenizeText(element, mode) {
31502
31790
  if (!pptx.hasTextProperties(element) || !element.text) {
31503
31791
  return [];
@@ -31868,7 +32156,7 @@ var GEOMETRY_EPSILON = 0.5;
31868
32156
  function isInertMorphPair(fromElement, toElement) {
31869
32157
  return !morphImageCropChanged(fromElement, toElement) && !morphImageAlphaChanged(fromElement, toElement) && Math.abs(fromElement.x - toElement.x) <= GEOMETRY_EPSILON && Math.abs(fromElement.y - toElement.y) <= GEOMETRY_EPSILON && Math.abs(fromElement.width - toElement.width) <= GEOMETRY_EPSILON && Math.abs(fromElement.height - toElement.height) <= GEOMETRY_EPSILON && (fromElement.rotation ?? 0) === (toElement.rotation ?? 0) && Boolean(fromElement.flipHorizontal) === Boolean(toElement.flipHorizontal) && Boolean(fromElement.flipVertical) === Boolean(toElement.flipVertical) && (fromElement.opacity ?? 1) === (toElement.opacity ?? 1) && !morphPairNeedsCrossfade(fromElement, toElement);
31870
32158
  }
31871
- function resolveMorphGhostIds(outgoingElements, pairs) {
32159
+ function resolveMorphGhostIds(outgoingElements, pairs, incomingElements) {
31872
32160
  const counterparts = new Map(pairs.map((pair) => [pair.fromElement.id, pair.toElement]));
31873
32161
  const painted = /* @__PURE__ */ new Set();
31874
32162
  const paintedBoxes = [];
@@ -31881,7 +32169,16 @@ function resolveMorphGhostIds(outgoingElements, pairs) {
31881
32169
  paintedBoxes.push(box);
31882
32170
  }
31883
32171
  }
31884
- return painted;
32172
+ if (incomingElements === void 0) {
32173
+ return painted;
32174
+ }
32175
+ return ghostMorphPairsHiddenByGhosts(
32176
+ painted,
32177
+ outgoingElements,
32178
+ incomingElements,
32179
+ pairs,
32180
+ (pair) => !morphPairNeedsCrossfade(pair.fromElement, pair.toElement)
32181
+ );
31885
32182
  }
31886
32183
  function morphPairIncomingFadesIn(fromElement, toElement, ghosted = true) {
31887
32184
  return !(ghosted && isInertMorphPair(fromElement, toElement)) && morphPairNeedsCrossfade(fromElement, toElement) && crossfadeIncomingMayFadeIn(toElement);
@@ -32144,7 +32441,11 @@ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "obj
32144
32441
  const matchResult = matchMorphElementsFull(fromSlide, toSlide);
32145
32442
  const allAnimations = [];
32146
32443
  const flattenedFrom = flattenMorphElements(fromSlide.elements, toSlide.elements);
32147
- const ghostIds = resolveMorphGhostIds(flattenedFrom, matchResult.pairs);
32444
+ const ghostIds = resolveMorphGhostIds(
32445
+ flattenedFrom,
32446
+ matchResult.pairs,
32447
+ flattenMorphElements(toSlide.elements, fromSlide.elements)
32448
+ );
32148
32449
  const zSwaps = computeZOrderSwaps(
32149
32450
  matchResult.pairs,
32150
32451
  flattenedFrom,
@@ -32263,7 +32564,8 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
32263
32564
  );
32264
32565
  const flattenedOutgoing = flattenMorphElements(fromSlide.elements, toSlide.elements);
32265
32566
  const outgoingIds = new Set(flattenedOutgoing.map((element) => element.id));
32266
- const ghostIds = resolveMorphGhostIds(flattenedOutgoing, match.pairs);
32567
+ const flattenedIncoming = flattenMorphElements(toSlide.elements, fromSlide.elements);
32568
+ const ghostIds = resolveMorphGhostIds(flattenedOutgoing, match.pairs, flattenedIncoming);
32267
32569
  const incomingAnimations = /* @__PURE__ */ new Map();
32268
32570
  const outgoingAnimations = /* @__PURE__ */ new Map();
32269
32571
  const incomingImageAnimations = /* @__PURE__ */ new Map();
@@ -32280,7 +32582,6 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
32280
32582
  );
32281
32583
  }
32282
32584
  const ghostElements = flattenedOutgoing.filter((element) => ghostIds.has(element.id));
32283
- const flattenedIncoming = flattenMorphElements(toSlide.elements, fromSlide.elements);
32284
32585
  const holdingGhostIds = new Set(
32285
32586
  match.pairs.filter(
32286
32587
  (candidate) => ghostIds.has(candidate.fromElement.id) && !morphPairNeedsCrossfade(candidate.fromElement, candidate.toElement)
@@ -32328,6 +32629,13 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
32328
32629
  const overlayIncomingElements = flattenedIncoming.filter(
32329
32630
  (element) => overlayIncomingAnimations.has(element.id) && !groupedIncomingIds.has(element.id)
32330
32631
  );
32632
+ const overlayLayers = resolveMorphOverlayLayers(
32633
+ outgoingElements,
32634
+ overlayIncomingElements,
32635
+ flattenedOutgoing,
32636
+ flattenedIncoming,
32637
+ match.pairs
32638
+ );
32331
32639
  return {
32332
32640
  keyframesCss: keyframes.join("\n"),
32333
32641
  incomingAnimations,
@@ -32337,6 +32645,7 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
32337
32645
  overlayIncomingAnimations,
32338
32646
  outgoingElements,
32339
32647
  overlayIncomingElements,
32648
+ overlayLayers,
32340
32649
  crossfadeGroups,
32341
32650
  durationMs
32342
32651
  };
@@ -40617,6 +40926,11 @@ function smartArtNodeAtPoint(root, x, y) {
40617
40926
  return best;
40618
40927
  }
40619
40928
  var LAYER_UI_SELECTOR = 'textarea, input, button, select, [role="group"]';
40929
+ var SMARTART_3D_EDIT_LAYER_ATTRIBUTE = "data-smartart-3d-edit-layer";
40930
+ var forwardedEvents = /* @__PURE__ */ new WeakSet();
40931
+ function isForwardedEditLayerEvent(event) {
40932
+ return forwardedEvents.has(event);
40933
+ }
40620
40934
  function routeEditLayerPointerToNodes(layer) {
40621
40935
  let forwarding = false;
40622
40936
  let hovered = null;
@@ -40624,15 +40938,15 @@ function routeEditLayerPointerToNodes(layer) {
40624
40938
  forwarding = true;
40625
40939
  try {
40626
40940
  for (const type of types) {
40627
- node.dispatchEvent(
40628
- new MouseEvent(type, {
40629
- // enter / leave do not bubble, as for a real pointer.
40630
- bubbles: type !== "mouseenter" && type !== "mouseleave",
40631
- cancelable: true,
40632
- clientX: source?.clientX ?? 0,
40633
- clientY: source?.clientY ?? 0
40634
- })
40635
- );
40941
+ const event = new MouseEvent(type, {
40942
+ // enter / leave do not bubble, as for a real pointer.
40943
+ bubbles: type !== "mouseenter" && type !== "mouseleave",
40944
+ cancelable: true,
40945
+ clientX: source?.clientX ?? 0,
40946
+ clientY: source?.clientY ?? 0
40947
+ });
40948
+ forwardedEvents.add(event);
40949
+ node.dispatchEvent(event);
40636
40950
  }
40637
40951
  } finally {
40638
40952
  forwarding = false;
@@ -43765,11 +44079,11 @@ function zoomOutScale(scale2) {
43765
44079
  }
43766
44080
  var ZOOM_MIN_PERCENT = MIN_ZOOM_SCALE * 100;
43767
44081
  var ZOOM_MAX_PERCENT = MAX_ZOOM_SCALE * 100;
43768
- function zoomInPercent(percent3) {
43769
- return Math.round(zoomInScale(percent3 / 100) * 100);
44082
+ function zoomInPercent(percent4) {
44083
+ return Math.round(zoomInScale(percent4 / 100) * 100);
43770
44084
  }
43771
- function zoomOutPercent(percent3) {
43772
- return Math.round(zoomOutScale(percent3 / 100) * 100);
44085
+ function zoomOutPercent(percent4) {
44086
+ return Math.round(zoomOutScale(percent4 / 100) * 100);
43773
44087
  }
43774
44088
 
43775
44089
  // src/pptx/render/viewer-zoom-store.ts
@@ -50259,7 +50573,7 @@ function quickStyleSwatchCss(quickStyle) {
50259
50573
  const { style } = quickStyle;
50260
50574
  return {
50261
50575
  background: style.fillGradient || style.fillColor || "transparent",
50262
- boxShadow: style.shadowColor ? `${style.shadowOffsetX ?? 2}px ${style.shadowOffsetY ?? 2}px ${style.shadowBlur ?? 4}px ${style.shadowColor}` : void 0,
50576
+ boxShadow: style.shadowColor ? `${style.shadowOffsetX ?? 2}px ${style.shadowOffsetY ?? 2}px ${style.shadowBlur ?? 4}px ${color.colorWithOpacity(style.shadowColor, style.shadowOpacity)}` : void 0,
50263
50577
  border: style.strokeColor ? `${style.strokeWidth ?? 1}px solid ${style.strokeColor}` : void 0
50264
50578
  };
50265
50579
  }
@@ -50352,7 +50666,8 @@ var SHAPE_QUICK_STYLES = [
50352
50666
  fillMode: "solid",
50353
50667
  fillColor: "#4472C4",
50354
50668
  strokeWidth: 0,
50355
- shadowColor: "rgba(0,0,0,0.35)",
50669
+ shadowColor: "#000000",
50670
+ shadowOpacity: 0.35,
50356
50671
  shadowBlur: 6,
50357
50672
  shadowOffsetX: 2,
50358
50673
  shadowOffsetY: 2
@@ -50365,7 +50680,8 @@ var SHAPE_QUICK_STYLES = [
50365
50680
  fillMode: "solid",
50366
50681
  fillColor: "#ED7D31",
50367
50682
  strokeWidth: 0,
50368
- shadowColor: "rgba(0,0,0,0.35)",
50683
+ shadowColor: "#000000",
50684
+ shadowOpacity: 0.35,
50369
50685
  shadowBlur: 6,
50370
50686
  shadowOffsetX: 2,
50371
50687
  shadowOffsetY: 2
@@ -50378,7 +50694,8 @@ var SHAPE_QUICK_STYLES = [
50378
50694
  fillMode: "solid",
50379
50695
  fillColor: "#2F5597",
50380
50696
  strokeWidth: 0,
50381
- shadowColor: "rgba(0,0,0,0.4)",
50697
+ shadowColor: "#000000",
50698
+ shadowOpacity: 0.4,
50382
50699
  shadowBlur: 8,
50383
50700
  shadowOffsetX: 3,
50384
50701
  shadowOffsetY: 3
@@ -50391,7 +50708,8 @@ var SHAPE_QUICK_STYLES = [
50391
50708
  fillMode: "solid",
50392
50709
  fillColor: "#C55A11",
50393
50710
  strokeWidth: 0,
50394
- shadowColor: "rgba(0,0,0,0.4)",
50711
+ shadowColor: "#000000",
50712
+ shadowOpacity: 0.4,
50395
50713
  shadowBlur: 8,
50396
50714
  shadowOffsetX: 3,
50397
50715
  shadowOffsetY: 3
@@ -50404,7 +50722,8 @@ var SHAPE_QUICK_STYLES = [
50404
50722
  fillMode: "solid",
50405
50723
  fillColor: "#548235",
50406
50724
  strokeWidth: 0,
50407
- shadowColor: "rgba(0,0,0,0.4)",
50725
+ shadowColor: "#000000",
50726
+ shadowOpacity: 0.4,
50408
50727
  shadowBlur: 8,
50409
50728
  shadowOffsetX: 3,
50410
50729
  shadowOffsetY: 3
@@ -50418,7 +50737,8 @@ var SHAPE_QUICK_STYLES = [
50418
50737
  fillColor: "#FFFFFF",
50419
50738
  strokeColor: "#D9D9D9",
50420
50739
  strokeWidth: 1,
50421
- shadowColor: "rgba(0,0,0,0.2)",
50740
+ shadowColor: "#000000",
50741
+ shadowOpacity: 0.2,
50422
50742
  shadowBlur: 4,
50423
50743
  shadowOffsetX: 1,
50424
50744
  shadowOffsetY: 1
@@ -51192,7 +51512,7 @@ function editGeometryBounds(geometry) {
51192
51512
  }
51193
51513
  return { minX, minY, maxX, maxY };
51194
51514
  }
51195
- function fmt3(value) {
51515
+ function fmt4(value) {
51196
51516
  return String(Math.round(value * 1e3) / 1e3);
51197
51517
  }
51198
51518
  function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POINTS_PATH_SCALE) {
@@ -51207,7 +51527,7 @@ function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POIN
51207
51527
  const segments = [];
51208
51528
  const start = pt(sub.nodes[0]);
51209
51529
  segments.push({ type: "moveTo", pt: start });
51210
- svg2.push(`M ${fmt3(start.x)} ${fmt3(start.y)}`);
51530
+ svg2.push(`M ${fmt4(start.x)} ${fmt4(start.y)}`);
51211
51531
  sub.segments.forEach((seg, i) => {
51212
51532
  if (sub.closed && seg.kind === "line" && i === sub.segments.length - 1) {
51213
51533
  return;
@@ -51215,13 +51535,13 @@ function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POIN
51215
51535
  const end = pt(sub.nodes[(i + 1) % sub.nodes.length]);
51216
51536
  if (seg.kind === "line") {
51217
51537
  segments.push({ type: "lineTo", pt: end });
51218
- svg2.push(`L ${fmt3(end.x)} ${fmt3(end.y)}`);
51538
+ svg2.push(`L ${fmt4(end.x)} ${fmt4(end.y)}`);
51219
51539
  } else {
51220
51540
  const c1 = pt(seg.c1);
51221
51541
  const c2 = pt(seg.c2);
51222
51542
  segments.push({ type: "cubicBezTo", pts: [c1, c2, end] });
51223
51543
  svg2.push(
51224
- `C ${fmt3(c1.x)} ${fmt3(c1.y)} ${fmt3(c2.x)} ${fmt3(c2.y)} ${fmt3(end.x)} ${fmt3(end.y)}`
51544
+ `C ${fmt4(c1.x)} ${fmt4(c1.y)} ${fmt4(c2.x)} ${fmt4(c2.y)} ${fmt4(end.x)} ${fmt4(end.y)}`
51225
51545
  );
51226
51546
  }
51227
51547
  });
@@ -57858,14 +58178,14 @@ function resolveAccentHex(themeColorMap, slot) {
57858
58178
 
57859
58179
  // src/pptx/render/ribbon-galleries/picture-color-gallery.ts
57860
58180
  var KEY2 = "pptx.gallery.pictureColor";
57861
- function saturationPreset(percent3) {
57862
- const sat = percent3 * 1e3;
57863
- const normal = percent3 === NEUTRAL_SATURATION_PERCENT;
58181
+ function saturationPreset(percent4) {
58182
+ const sat = percent4 * 1e3;
58183
+ const normal = percent4 === NEUTRAL_SATURATION_PERCENT;
57864
58184
  return {
57865
- id: normal ? "saturationNormal" : `saturation${percent3}`,
58185
+ id: normal ? "saturationNormal" : `saturation${percent4}`,
57866
58186
  labelKey: normal ? `${KEY2}.saturationNormal` : `${KEY2}.saturation`,
57867
- ...!normal && { labelParams: { amount: percent3 } },
57868
- label: normal ? "Saturation: 100% (Normal)" : `Saturation: ${percent3}%`,
58187
+ ...!normal && { labelParams: { amount: percent4 } },
58188
+ label: normal ? "Saturation: 100% (Normal)" : `Saturation: ${percent4}%`,
57869
58189
  changes: () => ({ colorSaturation: normal ? void 0 : { sat } }),
57870
58190
  applied: (fx) => (fx.colorSaturation?.sat ?? NEUTRAL_SATURATION_PERCENT * 1e3) === sat,
57871
58191
  preview: { css: getImageCorrectionsFilterTokens({ colorSaturation: { sat } }).join(" ") }
@@ -57933,14 +58253,14 @@ function recolorPresets(themeColorMap) {
57933
58253
  applied: isWashout,
57934
58254
  preview: { css: "brightness(1.7) contrast(0.3)" }
57935
58255
  };
57936
- const biLevels = BI_LEVEL_THRESHOLDS.map((percent3) => ({
57937
- id: `recolorBlackWhite${percent3}`,
58256
+ const biLevels = BI_LEVEL_THRESHOLDS.map((percent4) => ({
58257
+ id: `recolorBlackWhite${percent4}`,
57938
58258
  labelKey: `${KEY2}.recolorBlackWhite`,
57939
- labelParams: { amount: percent3 },
57940
- label: `Black and White: ${percent3}%`,
57941
- changes: (fx) => ({ ...recolorReset(fx), biLevel: percent3 }),
57942
- applied: (fx) => fx.biLevel === percent3,
57943
- preview: { threshold: percent3 }
58259
+ labelParams: { amount: percent4 },
58260
+ label: `Black and White: ${percent4}%`,
58261
+ changes: (fx) => ({ ...recolorReset(fx), biLevel: percent4 }),
58262
+ applied: (fx) => fx.biLevel === percent4,
58263
+ preview: { threshold: percent4 }
57944
58264
  }));
57945
58265
  const accents = RECOLOR_ACCENTS.flatMap((slot, index) => {
57946
58266
  const hex2 = resolveAccentHex(themeColorMap, slot);
@@ -57998,20 +58318,20 @@ var PICTURE_COLOR_GALLERY = adjustGalleryModule(
57998
58318
 
57999
58319
  // src/pptx/render/ribbon-galleries/picture-corrections-gallery.ts
58000
58320
  var KEY3 = "pptx.gallery.pictureCorrections";
58001
- function sharpenPreset(percent3) {
58002
- const amount = percent3 * 1e3;
58003
- const abs = Math.abs(percent3);
58004
- const id = percent3 < 0 ? `soften${abs}` : percent3 > 0 ? `sharpen${abs}` : "sharpenNormal";
58005
- const css = percent3 < 0 ? getImageCorrectionsFilterTokens({ sharpenSoften: { amount } }).join(" ") : (
58321
+ function sharpenPreset(percent4) {
58322
+ const amount = percent4 * 1e3;
58323
+ const abs = Math.abs(percent4);
58324
+ const id = percent4 < 0 ? `soften${abs}` : percent4 > 0 ? `sharpen${abs}` : "sharpenNormal";
58325
+ const css = percent4 < 0 ? getImageCorrectionsFilterTokens({ sharpenSoften: { amount } }).join(" ") : (
58006
58326
  // A sharpen is an SVG convolution at render time; a contrast lift previews it.
58007
- percent3 > 0 ? `contrast(${1 + percent3 / 200})` : ""
58327
+ percent4 > 0 ? `contrast(${1 + percent4 / 200})` : ""
58008
58328
  );
58009
58329
  return {
58010
58330
  id,
58011
- labelKey: percent3 === 0 ? `${KEY3}.sharpenNormal` : `${KEY3}.${percent3 < 0 ? "soften" : "sharpen"}`,
58012
- ...percent3 !== 0 && { labelParams: { amount: abs } },
58013
- label: percent3 === 0 ? "Sharpen: 0% (Normal)" : `${percent3 < 0 ? "Soften" : "Sharpen"}: ${abs}%`,
58014
- changes: () => ({ sharpenSoften: percent3 === 0 ? void 0 : { amount } }),
58331
+ labelKey: percent4 === 0 ? `${KEY3}.sharpenNormal` : `${KEY3}.${percent4 < 0 ? "soften" : "sharpen"}`,
58332
+ ...percent4 !== 0 && { labelParams: { amount: abs } },
58333
+ label: percent4 === 0 ? "Sharpen: 0% (Normal)" : `${percent4 < 0 ? "Soften" : "Sharpen"}: ${abs}%`,
58334
+ changes: () => ({ sharpenSoften: percent4 === 0 ? void 0 : { amount } }),
58015
58335
  applied: (fx) => (fx.sharpenSoften?.amount ?? 0) === amount,
58016
58336
  preview: { css }
58017
58337
  };
@@ -58803,6 +59123,55 @@ function apply3(itemId, ctx) {
58803
59123
  return { kind: "element", elementId: element.id, patch: pictureStylePatch(spec5, element) };
58804
59124
  }
58805
59125
  var PICTURE_STYLES_GALLERY = { build: build3, apply: apply3 };
59126
+ var TILE4 = { width: 34, height: 22 };
59127
+ function quickStyleId(preset2) {
59128
+ return preset2.labelKey.slice(preset2.labelKey.lastIndexOf(".") + 1);
59129
+ }
59130
+ function buildQuickStylesGallery(disabled = false) {
59131
+ return {
59132
+ id: "quickStyles",
59133
+ labelKey: "pptx.shape.quickStyles",
59134
+ label: "Quick Styles",
59135
+ disabled,
59136
+ sections: [
59137
+ {
59138
+ id: "presets",
59139
+ columns: 6,
59140
+ tileWidth: TILE4.width,
59141
+ tileHeight: TILE4.height,
59142
+ items: SHAPE_QUICK_STYLES.map((preset2) => {
59143
+ const id = quickStyleId(preset2);
59144
+ return {
59145
+ id,
59146
+ labelKey: preset2.labelKey,
59147
+ label: preset2.name,
59148
+ previewSvg: shapeTileSvg({
59149
+ ...tileSpecFromShapeStyle(`quick-${id}`, preset2.style, TILE4),
59150
+ inset: 4
59151
+ }),
59152
+ applied: false
59153
+ };
59154
+ })
59155
+ }
59156
+ ]
59157
+ };
59158
+ }
59159
+ function quickStyleShapeStyle(itemId) {
59160
+ return SHAPE_QUICK_STYLES.find((preset2) => quickStyleId(preset2) === itemId)?.style;
59161
+ }
59162
+ function styledElement(element) {
59163
+ return element && pptx.hasShapeProperties(element) ? element : void 0;
59164
+ }
59165
+ var QUICK_STYLES_GALLERY = {
59166
+ build(ctx) {
59167
+ return buildQuickStylesGallery(!styledElement(ctx.element));
59168
+ },
59169
+ apply(itemId, ctx) {
59170
+ const element = styledElement(ctx.element);
59171
+ const style = quickStyleShapeStyle(itemId);
59172
+ return element && style ? { kind: "element", elementId: element.id, patch: shapeQuickStylePatch(element, style) } : null;
59173
+ }
59174
+ };
58806
59175
 
58807
59176
  // src/pptx/render/ribbon-galleries/shape-effects-catalog.ts
58808
59177
  function outer(key, label3, dir, algn) {
@@ -59670,7 +60039,7 @@ function fallbackResolveStyleMatrix(styleXml2, colorMap) {
59670
60039
  }
59671
60040
 
59672
60041
  // src/pptx/render/ribbon-galleries/shape-styles-gallery.ts
59673
- var TILE4 = { width: 44, height: 32 };
60042
+ var TILE5 = { width: 44, height: 32 };
59674
60043
  var COLUMN_LABEL_KEYS = {
59675
60044
  dk1: "pptx.themeColor.dark1",
59676
60045
  accent1: "pptx.themeColor.accent1",
@@ -59808,7 +60177,7 @@ function item2(block, row, rowIndex, col, ctx) {
59808
60177
  labelParams: { color: COLUMN_LABELS[column2] },
59809
60178
  labelParamKeys: { color: { key: COLUMN_LABEL_KEYS[column2], fallback: COLUMN_LABELS[column2] } },
59810
60179
  label: `${row.label} - ${COLUMN_LABELS[column2]}`,
59811
- previewSvg: shapeTileSvg(tileSpecFromShapeStyle(`gss-${id}`, style, TILE4, resolved2?.fontColor)),
60180
+ previewSvg: shapeTileSvg(tileSpecFromShapeStyle(`gss-${id}`, style, TILE5, resolved2?.fontColor)),
59812
60181
  applied: styleMatches(ctx.element, style)
59813
60182
  };
59814
60183
  }
@@ -59825,8 +60194,8 @@ function buildShapeStylesGallery(ctx) {
59825
60194
  titleKey: "pptx.gallery.shapeStyles.themeStyles",
59826
60195
  title: "Theme Styles",
59827
60196
  columns: 7,
59828
- tileWidth: TILE4.width,
59829
- tileHeight: TILE4.height,
60197
+ tileWidth: TILE5.width,
60198
+ tileHeight: TILE5.height,
59830
60199
  items: block("theme", SHAPE_THEME_STYLE_ROWS)
59831
60200
  },
59832
60201
  {
@@ -59834,8 +60203,8 @@ function buildShapeStylesGallery(ctx) {
59834
60203
  titleKey: "pptx.gallery.shapeStyles.presets",
59835
60204
  title: "Presets",
59836
60205
  columns: 7,
59837
- tileWidth: TILE4.width,
59838
- tileHeight: TILE4.height,
60206
+ tileWidth: TILE5.width,
60207
+ tileHeight: TILE5.height,
59839
60208
  items: block("preset", SHAPE_PRESET_STYLE_ROWS)
59840
60209
  }
59841
60210
  ]
@@ -60085,7 +60454,7 @@ function smartArtTileSvg(id, fills, style, size2) {
60085
60454
  }
60086
60455
 
60087
60456
  // src/pptx/render/ribbon-galleries/smartart-colors-gallery.ts
60088
- var TILE5 = { width: 56, height: 36 };
60457
+ var TILE6 = { width: 56, height: 36 };
60089
60458
  var SECTIONS = [
60090
60459
  { id: "colorful", title: "Colorful" },
60091
60460
  { id: "accent1", title: "Accent 1" },
@@ -60115,8 +60484,8 @@ var SMARTART_COLORS_GALLERY = {
60115
60484
  titleKey: `pptx.gallery.smartArtColors.section.${section2.id}`,
60116
60485
  title: section2.title,
60117
60486
  columns: 5,
60118
- tileWidth: TILE5.width,
60119
- tileHeight: TILE5.height,
60487
+ tileWidth: TILE6.width,
60488
+ tileHeight: TILE6.height,
60120
60489
  items: SMARTART_COLOR_ENTRIES.filter((entry6) => entry6.section === section2.id).map((entry6) => {
60121
60490
  const params = labelParams(entry6);
60122
60491
  return {
@@ -60128,7 +60497,7 @@ var SMARTART_COLORS_GALLERY = {
60128
60497
  entry6.id,
60129
60498
  entry6.accents.map((accent) => scheme[accent]),
60130
60499
  "flat",
60131
- TILE5
60500
+ TILE6
60132
60501
  ),
60133
60502
  applied: current === entry6.id
60134
60503
  };
@@ -60158,7 +60527,7 @@ var SMARTART_COLORS_GALLERY = {
60158
60527
  };
60159
60528
 
60160
60529
  // src/pptx/render/ribbon-galleries/smartart-styles-gallery.ts
60161
- var TILE6 = { width: 56, height: 36 };
60530
+ var TILE7 = { width: 56, height: 36 };
60162
60531
  var SMARTART_STYLES_GALLERY = {
60163
60532
  build(ctx) {
60164
60533
  const element = ctx.element;
@@ -60177,13 +60546,13 @@ var SMARTART_STYLES_GALLERY = {
60177
60546
  titleKey: "pptx.gallery.smartArtStyles.section.bestMatch",
60178
60547
  title: "Best Match for Document",
60179
60548
  columns: 5,
60180
- tileWidth: TILE6.width,
60181
- tileHeight: TILE6.height,
60549
+ tileWidth: TILE7.width,
60550
+ tileHeight: TILE7.height,
60182
60551
  items: SMARTART_STYLE_ENTRIES.map((entry6) => ({
60183
60552
  id: entry6.id,
60184
60553
  labelKey: entry6.labelKey,
60185
60554
  label: entry6.name,
60186
- previewSvg: smartArtTileSvg(`style-${entry6.id}`, [accent1], entry6.id, TILE6),
60555
+ previewSvg: smartArtTileSvg(`style-${entry6.id}`, [accent1], entry6.id, TILE7),
60187
60556
  applied: current === entry6.id
60188
60557
  }))
60189
60558
  }
@@ -60437,7 +60806,7 @@ function smartArtLayoutTileSvg(type, fill, size2) {
60437
60806
  }
60438
60807
 
60439
60808
  // src/pptx/render/ribbon-galleries/smartart-layouts-gallery.ts
60440
- var TILE7 = { width: 56, height: 36 };
60809
+ var TILE8 = { width: 56, height: 36 };
60441
60810
  function smartArtLayoutNameKey(title) {
60442
60811
  const words = title.split(/[^A-Za-z0-9]+/u).filter(Boolean);
60443
60812
  const camel = words.map((word, i) => (i === 0 ? word[0].toLowerCase() : word[0].toUpperCase()) + word.slice(1)).join("");
@@ -60471,7 +60840,7 @@ function namedLayoutSections(accent1, currentId) {
60471
60840
  name: { key: smartArtLayoutNameKey(entry6.title), fallback: entry6.title }
60472
60841
  },
60473
60842
  label: entry6.title,
60474
- previewSvg: smartArtLayoutTileSvg(category2, accent1, TILE7),
60843
+ previewSvg: smartArtLayoutTileSvg(category2, accent1, TILE8),
60475
60844
  applied: currentId === entry6.id
60476
60845
  }));
60477
60846
  return items.length === 0 ? [] : [
@@ -60480,8 +60849,8 @@ function namedLayoutSections(accent1, currentId) {
60480
60849
  titleKey: schemaLabelKeys.SMARTART_LAYOUT_LABEL_KEYS[category2],
60481
60850
  title: heading,
60482
60851
  columns: 5,
60483
- tileWidth: TILE7.width,
60484
- tileHeight: TILE7.height,
60852
+ tileWidth: TILE8.width,
60853
+ tileHeight: TILE8.height,
60485
60854
  items
60486
60855
  }
60487
60856
  ];
@@ -60504,13 +60873,13 @@ var SMARTART_LAYOUTS_GALLERY = {
60504
60873
  {
60505
60874
  id: "layouts",
60506
60875
  columns: 5,
60507
- tileWidth: TILE7.width,
60508
- tileHeight: TILE7.height,
60876
+ tileWidth: TILE8.width,
60877
+ tileHeight: TILE8.height,
60509
60878
  items: pptx.SWITCHABLE_LAYOUT_TYPES.map((type) => ({
60510
60879
  id: type,
60511
60880
  labelKey: schemaLabelKeys.SMARTART_LAYOUT_LABEL_KEYS[type] ?? `pptx.smartart.category.${type}`,
60512
60881
  label: humanize(type),
60513
- previewSvg: smartArtLayoutTileSvg(type, accent1, TILE7),
60882
+ previewSvg: smartArtLayoutTileSvg(type, accent1, TILE8),
60514
60883
  applied: current === type
60515
60884
  }))
60516
60885
  },
@@ -61128,7 +61497,7 @@ function tableStyleTileSvg(styleId, colorScheme, size2, options = DEFAULT_OPTION
61128
61497
  }
61129
61498
 
61130
61499
  // src/pptx/render/ribbon-galleries/table-styles-gallery.ts
61131
- var TILE8 = { width: 60, height: 44 };
61500
+ var TILE9 = { width: 60, height: 44 };
61132
61501
  var CLEARED_CELL_KEYS = [
61133
61502
  "backgroundColor",
61134
61503
  "backgroundColorXml",
@@ -61209,8 +61578,8 @@ function build5(ctx) {
61209
61578
  titleKey: `pptx.gallery.tableStyles.section.${section2.id}`,
61210
61579
  title: section2.title,
61211
61580
  columns: 7,
61212
- tileWidth: TILE8.width,
61213
- tileHeight: TILE8.height,
61581
+ tileWidth: TILE9.width,
61582
+ tileHeight: TILE9.height,
61214
61583
  items: section2.entries.map((entry6) => ({
61215
61584
  id: entry6.id,
61216
61585
  labelKey: entry6.labelKey,
@@ -61219,7 +61588,7 @@ function build5(ctx) {
61219
61588
  previewSvg: tableStyleTileSvg(
61220
61589
  entry6.id,
61221
61590
  colorScheme,
61222
- TILE8,
61591
+ TILE9,
61223
61592
  options,
61224
61593
  ctx.theme?.formatScheme
61225
61594
  ),
@@ -61433,7 +61802,7 @@ var PACKED_ROWS = [
61433
61802
  var THEME_COLOR_SCHEME_ROWS = PACKED_ROWS.map(([name, hexes]) => [name, ...hexes.split(" ")]);
61434
61803
 
61435
61804
  // src/pptx/render/ribbon-galleries/theme-colors-gallery.ts
61436
- var TILE9 = { width: 96, height: 14 };
61805
+ var TILE10 = { width: 96, height: 14 };
61437
61806
  var CURRENT_ID = "current";
61438
61807
  var SCHEME_LABEL_KEY = "pptx.gallery.themeColors.scheme";
61439
61808
  var entries;
@@ -61475,7 +61844,7 @@ function tile4(id, name, scheme, applied, labelKey = SCHEME_LABEL_KEY) {
61475
61844
  }
61476
61845
  },
61477
61846
  label: name,
61478
- previewSvg: swatchStripSvg(swatches(scheme), TILE9),
61847
+ previewSvg: swatchStripSvg(swatches(scheme), TILE10),
61479
61848
  applied
61480
61849
  };
61481
61850
  }
@@ -61509,8 +61878,8 @@ var THEME_COLORS_GALLERY = {
61509
61878
  titleKey: "pptx.gallery.themeColors.section.office",
61510
61879
  title: "Office",
61511
61880
  columns: 1,
61512
- tileWidth: TILE9.width,
61513
- tileHeight: TILE9.height,
61881
+ tileWidth: TILE10.width,
61882
+ tileHeight: TILE10.height,
61514
61883
  items
61515
61884
  }
61516
61885
  ]
@@ -61527,7 +61896,7 @@ var THEME_COLORS_GALLERY = {
61527
61896
  return entry6 ? { kind: "themeColorScheme", colorScheme: { ...entry6.colorScheme }, name: entry6.name } : null;
61528
61897
  }
61529
61898
  };
61530
- var TILE10 = { width: 52, height: 36 };
61899
+ var TILE11 = { width: 52, height: 36 };
61531
61900
  var LABEL_KEY = "pptx.gallery.themeBackgrounds.style";
61532
61901
  function num10(value) {
61533
61902
  return String(Math.round(value * 100) / 100);
@@ -61576,8 +61945,8 @@ function backgroundStyleTileSvg(preset2, ctx) {
61576
61945
  const id = svgId(`bg-style-${preset2.index}`);
61577
61946
  const paint = backgroundPaint(`${id}-f`, resolved2?.shapeStyle, fallback);
61578
61947
  const text4 = safeColor(preset2.dark ? scheme.lt1 : scheme.dk1, "#000000");
61579
- const body = `<rect x="0.5" y="0.5" width="${TILE10.width - 1}" height="${TILE10.height - 1}" fill="${paint.fill}" stroke="#C8C8C8"/><rect x="6" y="9" width="26" height="4" fill="${text4}" opacity="0.85"/><rect x="6" y="18" width="38" height="2.5" fill="${text4}" opacity="0.5"/><rect x="6" y="24" width="30" height="2.5" fill="${text4}" opacity="0.5"/>`;
61580
- return svgTile(TILE10.width, TILE10.height, paint.defs, body);
61948
+ const body = `<rect x="0.5" y="0.5" width="${TILE11.width - 1}" height="${TILE11.height - 1}" fill="${paint.fill}" stroke="#C8C8C8"/><rect x="6" y="9" width="26" height="4" fill="${text4}" opacity="0.85"/><rect x="6" y="18" width="38" height="2.5" fill="${text4}" opacity="0.5"/><rect x="6" y="24" width="30" height="2.5" fill="${text4}" opacity="0.5"/>`;
61949
+ return svgTile(TILE11.width, TILE11.height, paint.defs, body);
61581
61950
  }
61582
61951
  function activePreset(ctx) {
61583
61952
  const ref = ctx.activeSlide?.backgroundStyleRef;
@@ -61624,8 +61993,8 @@ var THEME_BACKGROUNDS_GALLERY = {
61624
61993
  {
61625
61994
  id: "styles",
61626
61995
  columns: 4,
61627
- tileWidth: TILE10.width,
61628
- tileHeight: TILE10.height,
61996
+ tileWidth: TILE11.width,
61997
+ tileHeight: TILE11.height,
61629
61998
  items: pptx.BACKGROUND_STYLE_PRESETS.map((preset2) => tile5(preset2, ctx, active2))
61630
61999
  }
61631
62000
  ],
@@ -61653,7 +62022,7 @@ var THEME_BACKGROUNDS_GALLERY = {
61653
62022
  };
61654
62023
  }
61655
62024
  };
61656
- var TILE11 = { width: 76, height: 42 };
62025
+ var TILE12 = { width: 76, height: 42 };
61657
62026
  var SCHEME_LABEL_KEY2 = "pptx.gallery.themeEffects.scheme";
61658
62027
  var CELLS = [0, 1, 2];
61659
62028
  function num11(value) {
@@ -61693,12 +62062,12 @@ function sampleShape(id, style, x, size2) {
61693
62062
  filter = ` filter="url(#${shadowId})"`;
61694
62063
  }
61695
62064
  const fillOpacity = !gradient && style.fillOpacity !== void 0 && style.fillOpacity < 1 ? ` fill-opacity="${num11(style.fillOpacity)}"` : "";
61696
- const rect3 = `<rect x="${num11(x)}" y="${num11(TILE11.height / 2 - size2 / 2 - 2)}" width="${num11(size2)}" height="${num11(size2)}" rx="3" fill="${paint.fill}"${fillOpacity}${stroke}${filter}/>`;
62065
+ const rect3 = `<rect x="${num11(x)}" y="${num11(TILE12.height / 2 - size2 / 2 - 2)}" width="${num11(size2)}" height="${num11(size2)}" rx="3" fill="${paint.fill}"${fillOpacity}${stroke}${filter}/>`;
61697
62066
  return `${defs ? `<defs>${defs}</defs>` : ""}${rect3}`;
61698
62067
  }
61699
62068
  function effectSchemeTileSvg(schemeId, ctx, accent = "accent1") {
61700
62069
  const size2 = 15;
61701
- const gap = (TILE11.width - size2 * 3) / 4;
62070
+ const gap = (TILE12.width - size2 * 3) / 4;
61702
62071
  const accentHex2 = galleryColorScheme(ctx)[accent] ?? "#4472C4";
61703
62072
  const body = CELLS.map((index) => {
61704
62073
  const resolved2 = ctx.resolveStyleMatrix?.(
@@ -61713,7 +62082,7 @@ function effectSchemeTileSvg(schemeId, ctx, accent = "accent1") {
61713
62082
  };
61714
62083
  return sampleShape(`${schemeId ?? "deck"}-${index}`, style, gap + index * (size2 + gap), size2);
61715
62084
  }).join("");
61716
- return svgTile(TILE11.width, TILE11.height, "", body);
62085
+ return svgTile(TILE12.width, TILE12.height, "", body);
61717
62086
  }
61718
62087
  function item3(id, name, ctx, applied) {
61719
62088
  return {
@@ -61740,8 +62109,8 @@ var THEME_EFFECTS_GALLERY = {
61740
62109
  titleKey: "pptx.gallery.themeEffects.section.builtIn",
61741
62110
  title: "Built-in",
61742
62111
  columns: 3,
61743
- tileWidth: TILE11.width,
61744
- tileHeight: TILE11.height,
62112
+ tileWidth: TILE12.width,
62113
+ tileHeight: TILE12.height,
61745
62114
  items: pptx.THEME_EFFECT_SCHEMES.map(
61746
62115
  (scheme) => item3(scheme.id, scheme.name, ctx, scheme.id === active2?.id)
61747
62116
  )
@@ -61756,18 +62125,18 @@ var THEME_EFFECTS_GALLERY = {
61756
62125
  };
61757
62126
 
61758
62127
  // src/pptx/render/ribbon-galleries/themes-gallery.ts
61759
- var TILE12 = { width: 88, height: 50 };
62128
+ var TILE13 = { width: 88, height: 50 };
61760
62129
  var CURRENT_ID2 = "current";
61761
62130
  var ACCENTS = ["accent1", "accent2", "accent3", "accent4", "accent5", "accent6"];
61762
- function themeTileSvg(scheme, headingFont, size2 = TILE12) {
62131
+ function themeTileSvg(scheme, headingFont, size2 = TILE13) {
61763
62132
  const face = escapeSvgText((headingFont ?? "Calibri").replace(/[;{}<>]/gu, ""));
61764
- const swatchWidth = TILE12.width / 6;
62133
+ const swatchWidth = TILE13.width / 6;
61765
62134
  const swatches2 = ACCENTS.map(
61766
- (key, index) => `<rect x="${(index * swatchWidth).toFixed(2)}" y="${TILE12.height - 8}" width="${swatchWidth.toFixed(2)}" height="8" fill="${safeColor(scheme[key], "#808080")}"/>`
62135
+ (key, index) => `<rect x="${(index * swatchWidth).toFixed(2)}" y="${TILE13.height - 8}" width="${swatchWidth.toFixed(2)}" height="8" fill="${safeColor(scheme[key], "#808080")}"/>`
61767
62136
  ).join("");
61768
- const body = `<rect x="0.5" y="0.5" width="${TILE12.width - 1}" height="${TILE12.height - 1}" fill="${safeColor(scheme.lt1, "#FFFFFF")}" stroke="#C8C8C8"/><rect x="0" y="0" width="${TILE12.width}" height="5" fill="${safeColor(scheme.accent1, "#808080")}"/><text x="8" y="31" font-family="${face}, Calibri, Arial, sans-serif" font-size="22" fill="${safeColor(scheme.dk2, "#000000")}">Aa</text><rect x="48" y="20" width="32" height="3" fill="${safeColor(scheme.dk1, "#000000")}" opacity="0.55"/><rect x="48" y="27" width="24" height="3" fill="${safeColor(scheme.dk1, "#000000")}" opacity="0.35"/>` + swatches2;
61769
- return svgTile(TILE12.width, TILE12.height, "", body).replace(
61770
- `width="${TILE12.width}" height="${TILE12.height}"`,
62137
+ const body = `<rect x="0.5" y="0.5" width="${TILE13.width - 1}" height="${TILE13.height - 1}" fill="${safeColor(scheme.lt1, "#FFFFFF")}" stroke="#C8C8C8"/><rect x="0" y="0" width="${TILE13.width}" height="5" fill="${safeColor(scheme.accent1, "#808080")}"/><text x="8" y="31" font-family="${face}, Calibri, Arial, sans-serif" font-size="22" fill="${safeColor(scheme.dk2, "#000000")}">Aa</text><rect x="48" y="20" width="32" height="3" fill="${safeColor(scheme.dk1, "#000000")}" opacity="0.55"/><rect x="48" y="27" width="24" height="3" fill="${safeColor(scheme.dk1, "#000000")}" opacity="0.35"/>` + swatches2;
62138
+ return svgTile(TILE13.width, TILE13.height, "", body).replace(
62139
+ `width="${TILE13.width}" height="${TILE13.height}"`,
61771
62140
  `width="${size2.width}" height="${size2.height}"`
61772
62141
  );
61773
62142
  }
@@ -61811,8 +62180,8 @@ var THEMES_GALLERY = {
61811
62180
  titleKey: "pptx.gallery.themes.section.builtIn",
61812
62181
  title: "Built-in",
61813
62182
  columns: 4,
61814
- tileWidth: TILE12.width,
61815
- tileHeight: TILE12.height,
62183
+ tileWidth: TILE13.width,
62184
+ tileHeight: TILE13.height,
61816
62185
  items
61817
62186
  }
61818
62187
  ]
@@ -61833,7 +62202,7 @@ function fromPreset(preset2) {
61833
62202
 
61834
62203
  // src/pptx/render/ribbon-galleries/theme-variants-gallery.ts
61835
62204
  var ACCENTS2 = ["accent1", "accent2", "accent3", "accent4", "accent5", "accent6"];
61836
- var TILE13 = { width: 52, height: 30 };
62205
+ var TILE14 = { width: 52, height: 30 };
61837
62206
  function shiftAccents(scheme, by) {
61838
62207
  const next = { ...scheme };
61839
62208
  ACCENTS2.forEach((key, index) => {
@@ -61901,8 +62270,8 @@ function buildReal(ctx, variants) {
61901
62270
  titleKey: "pptx.gallery.themeVariants.section.theme",
61902
62271
  title: "Variants of this theme",
61903
62272
  columns: 4,
61904
- tileWidth: TILE13.width,
61905
- tileHeight: TILE13.height,
62273
+ tileWidth: TILE14.width,
62274
+ tileHeight: TILE14.height,
61906
62275
  items: variants.map((variant, index) => ({
61907
62276
  id: `real-${index}`,
61908
62277
  labelKey: "pptx.gallery.themeVariants.real",
@@ -61911,7 +62280,7 @@ function buildReal(ctx, variants) {
61911
62280
  previewSvg: themeTileSvg(
61912
62281
  tileScheme(variant),
61913
62282
  variant.fontScheme.majorFont?.latin ?? ctx.theme?.fontScheme?.majorFont?.latin,
61914
- TILE13
62283
+ TILE14
61915
62284
  ),
61916
62285
  applied: colorSchemesEqual(variant.colorScheme, current)
61917
62286
  }))
@@ -61941,13 +62310,13 @@ var THEME_VARIANTS_GALLERY = {
61941
62310
  titleKey: "pptx.gallery.themeVariants.section.computed",
61942
62311
  title: "Computed from the theme colors",
61943
62312
  columns: 4,
61944
- tileWidth: TILE13.width,
61945
- tileHeight: TILE13.height,
62313
+ tileWidth: TILE14.width,
62314
+ tileHeight: TILE14.height,
61946
62315
  items: themeVariants(variantBase(ctx)).map((variant) => ({
61947
62316
  id: variant.id,
61948
62317
  labelKey: variant.labelKey,
61949
62318
  label: variant.label,
61950
- previewSvg: themeTileSvg(variant.scheme, heading, TILE13),
62319
+ previewSvg: themeTileSvg(variant.scheme, heading, TILE14),
61951
62320
  applied: colorSchemesEqual(variant.scheme, current)
61952
62321
  }))
61953
62322
  }
@@ -62022,14 +62391,14 @@ var THEME_FONT_SCHEME_ROWS = [
62022
62391
  ];
62023
62392
 
62024
62393
  // src/pptx/render/ribbon-galleries/theme-fonts-gallery.ts
62025
- var TILE14 = { width: 150, height: 36 };
62394
+ var TILE15 = { width: 150, height: 36 };
62026
62395
  var CURRENT_ID3 = "current";
62027
62396
  function family(face) {
62028
62397
  return `${escapeSvgText(face.replace(/[;{}<>]/gu, ""))}, Calibri, Arial, sans-serif`;
62029
62398
  }
62030
62399
  function fontSchemeTileSvg(major, minor) {
62031
- const body = `<rect x="0" y="0" width="${TILE14.width}" height="${TILE14.height}" fill="#FFFFFF"/><text x="4" y="26" font-family="${family(major)}" font-size="22" fill="#000000">Aa</text><text x="38" y="15" font-family="${family(major)}" font-size="11" fill="#000000">${escapeSvgText(major)}</text><text x="38" y="29" font-family="${family(minor)}" font-size="10" fill="#404040">${escapeSvgText(minor)}</text>`;
62032
- return svgTile(TILE14.width, TILE14.height, "", body);
62400
+ const body = `<rect x="0" y="0" width="${TILE15.width}" height="${TILE15.height}" fill="#FFFFFF"/><text x="4" y="26" font-family="${family(major)}" font-size="22" fill="#000000">Aa</text><text x="38" y="15" font-family="${family(major)}" font-size="11" fill="#000000">${escapeSvgText(major)}</text><text x="38" y="29" font-family="${family(minor)}" font-size="10" fill="#404040">${escapeSvgText(minor)}</text>`;
62401
+ return svgTile(TILE15.width, TILE15.height, "", body);
62033
62402
  }
62034
62403
  function sameFace(a, b) {
62035
62404
  return Boolean(a && b && a.trim().toLowerCase() === b.trim().toLowerCase());
@@ -62093,8 +62462,8 @@ var THEME_FONTS_GALLERY = {
62093
62462
  titleKey: "pptx.gallery.themeFonts.section.office",
62094
62463
  title: "Office",
62095
62464
  columns: 1,
62096
- tileWidth: TILE14.width,
62097
- tileHeight: TILE14.height,
62465
+ tileWidth: TILE15.width,
62466
+ tileHeight: TILE15.height,
62098
62467
  items
62099
62468
  }
62100
62469
  ]
@@ -62764,7 +63133,7 @@ var WORDART_STYLES = [
62764
63133
  ...WORDART_FLAT_STYLES,
62765
63134
  ...WORDART_BEVEL_STYLES
62766
63135
  ];
62767
- var TILE15 = { width: 44, height: 44 };
63136
+ var TILE16 = { width: 44, height: 44 };
62768
63137
  function styleIndex(itemId) {
62769
63138
  const match = /^wordArt-(\d+)$/u.exec(itemId);
62770
63139
  const index = match ? Number(match[1]) : Number.NaN;
@@ -62798,15 +63167,15 @@ function build6(ctx) {
62798
63167
  {
62799
63168
  id: "styles",
62800
63169
  columns: 5,
62801
- tileWidth: TILE15.width,
62802
- tileHeight: TILE15.height,
63170
+ tileWidth: TILE16.width,
63171
+ tileHeight: TILE16.height,
62803
63172
  items: WORDART_STYLES.map((spec5, index) => {
62804
63173
  const run = wordArtRunStyle(spec5, ctx.themeColorMap);
62805
63174
  return {
62806
63175
  id: `wordArt-${index}`,
62807
63176
  labelKey: `pptx.gallery.wordArtStyles.style${index}`,
62808
63177
  label: spec5.label,
62809
- previewSvg: wordArtTileSvg(`gwa-${index}`, run, TILE15),
63178
+ previewSvg: wordArtTileSvg(`gwa-${index}`, run, TILE16),
62810
63179
  applied: runs.length > 0 && runs.every((segment) => runMatches(segment.style, run))
62811
63180
  };
62812
63181
  })
@@ -62844,6 +63213,7 @@ var MODULES = {
62844
63213
  shapeEffects: SHAPE_EFFECTS_GALLERY,
62845
63214
  wordArtStyles: WORDART_STYLES_GALLERY,
62846
63215
  textWarp: TEXT_WARP_GALLERY,
63216
+ quickStyles: QUICK_STYLES_GALLERY,
62847
63217
  pictureStyles: PICTURE_STYLES_GALLERY,
62848
63218
  pictureCorrections: PICTURE_CORRECTIONS_GALLERY,
62849
63219
  pictureColor: PICTURE_COLOR_GALLERY,
@@ -62874,7 +63244,7 @@ function buildRibbonGallery(id, ctx) {
62874
63244
  function applyRibbonGalleryItem(id, itemId, ctx, action) {
62875
63245
  return MODULES[id].apply(itemId, ctx, action);
62876
63246
  }
62877
- var INSPECTOR_GALLERIES = ["textWarp"];
63247
+ var INSPECTOR_GALLERIES = ["textWarp", "quickStyles"];
62878
63248
  var CONTEXTUAL_TAB_GROUPS = {
62879
63249
  shapeFormat: [
62880
63250
  {
@@ -64638,6 +65008,127 @@ async function checkModifyPassword(verifier, password) {
64638
65008
  }
64639
65009
  }
64640
65010
 
65011
+ // src/pptx/render/read-only-session.ts
65012
+ var INITIAL_READ_ONLY_SESSION = Object.freeze({
65013
+ bannerHidden: false,
65014
+ editAnyway: false,
65015
+ passwordPromptOpen: false,
65016
+ passwordError: null,
65017
+ checkingPassword: false,
65018
+ passwordCheck: 0
65019
+ });
65020
+ function unlocked(session) {
65021
+ return {
65022
+ ...session,
65023
+ bannerHidden: true,
65024
+ editAnyway: true,
65025
+ passwordPromptOpen: false,
65026
+ passwordError: null,
65027
+ checkingPassword: false
65028
+ };
65029
+ }
65030
+ function reduceReadOnlySession(session, event) {
65031
+ switch (event.type) {
65032
+ case "reset":
65033
+ return { ...INITIAL_READ_ONLY_SESSION, passwordCheck: session.passwordCheck + 1 };
65034
+ case "editAnyway":
65035
+ return event.requiresPassword ? { ...session, passwordPromptOpen: true, passwordError: null } : unlocked(session);
65036
+ case "dismiss":
65037
+ return session.bannerHidden ? session : { ...session, bannerHidden: true };
65038
+ case "cancelPassword":
65039
+ return {
65040
+ ...session,
65041
+ passwordPromptOpen: false,
65042
+ passwordError: null,
65043
+ checkingPassword: false,
65044
+ passwordCheck: session.passwordCheck + 1
65045
+ };
65046
+ case "checkStarted":
65047
+ return session.checkingPassword ? session : {
65048
+ ...session,
65049
+ checkingPassword: true,
65050
+ passwordCheck: session.passwordCheck + 1
65051
+ };
65052
+ case "checkFinished":
65053
+ if (!session.checkingPassword || event.check !== session.passwordCheck) {
65054
+ return session;
65055
+ }
65056
+ return event.result.ok ? unlocked(session) : { ...session, checkingPassword: false, passwordError: event.result.reason };
65057
+ }
65058
+ }
65059
+ function readOnlyLocked(recommendation, session) {
65060
+ return recommendation?.defaultReadOnly === true && !session.editAnyway;
65061
+ }
65062
+ function readOnlyBannerVisible(recommendation, session) {
65063
+ return (recommendation?.kind ?? null) !== null && !session.bannerHidden;
65064
+ }
65065
+ function readOnlyBannerState(recommendation, session, translate) {
65066
+ return {
65067
+ kind: recommendation.kind ?? null,
65068
+ messageKey: recommendation.messageKey,
65069
+ passwordPromptOpen: session.passwordPromptOpen,
65070
+ passwordError: session.passwordError,
65071
+ checkingPassword: session.checkingPassword,
65072
+ ...translate ? { translate } : {}
65073
+ };
65074
+ }
65075
+ function applyReadOnlySessionEvent(store, event) {
65076
+ const current = store.get();
65077
+ const next = reduceReadOnlySession(current, event);
65078
+ if (next !== current) {
65079
+ store.set(next);
65080
+ }
65081
+ }
65082
+ async function runReadOnlyPasswordCheck(store, verifier, password, check = checkModifyPassword) {
65083
+ const before = store.get();
65084
+ const started = reduceReadOnlySession(before, { type: "checkStarted" });
65085
+ if (started === before) {
65086
+ return;
65087
+ }
65088
+ store.set(started);
65089
+ let result;
65090
+ try {
65091
+ result = await check(verifier, password);
65092
+ } catch {
65093
+ result = { ok: false, reason: "unsupported-algorithm" };
65094
+ }
65095
+ applyReadOnlySessionEvent(store, {
65096
+ type: "checkFinished",
65097
+ check: started.passwordCheck,
65098
+ result
65099
+ });
65100
+ }
65101
+ function readOnlySessionActions(store, source) {
65102
+ const apply6 = (event) => applyReadOnlySessionEvent(store, event);
65103
+ return {
65104
+ reset: () => apply6({ type: "reset" }),
65105
+ editAnyway: () => apply6({
65106
+ type: "editAnyway",
65107
+ requiresPassword: source.recommendation()?.requiresPassword === true
65108
+ }),
65109
+ dismiss: () => apply6({ type: "dismiss" }),
65110
+ cancelPassword: () => apply6({ type: "cancelPassword" }),
65111
+ submitPassword: (password) => runReadOnlyPasswordCheck(store, source.modifyVerifier(), password)
65112
+ };
65113
+ }
65114
+ function dispatchReadOnlyBannerIntent(event, handlers) {
65115
+ const intent = event.detail;
65116
+ switch (intent?.id) {
65117
+ case "editAnyway":
65118
+ handlers.editAnyway?.();
65119
+ break;
65120
+ case "dismiss":
65121
+ handlers.dismiss?.();
65122
+ break;
65123
+ case "cancelPassword":
65124
+ handlers.cancelPassword?.();
65125
+ break;
65126
+ case "submitPassword":
65127
+ handlers.submitPassword?.(intent.password);
65128
+ break;
65129
+ }
65130
+ }
65131
+
64641
65132
  // src/pptx/render/compatibility-warning-toasts.ts
64642
65133
  var CODE_MESSAGE_KEYS = {
64643
65134
  UNMODELLED_PRESENTATION_MARKUP: "pptx.compatibility.unmodelledPresentationMarkup",
@@ -65072,14 +65563,14 @@ async function buildForeignObjectSvgBody(element, doc, options) {
65072
65563
  backgroundColor,
65073
65564
  readComputedStyle = (el) => window.getComputedStyle(el)
65074
65565
  } = options;
65075
- await chunkZO43VVWQ_cjs.settleThreeViews(element);
65566
+ await chunkJ642EKDV_cjs.settleThreeViews(element);
65076
65567
  const clone = element.cloneNode(true);
65077
- chunkZO43VVWQ_cjs.withAuthoredStrokeWidths(
65568
+ chunkJ642EKDV_cjs.withAuthoredStrokeWidths(
65078
65569
  element,
65079
65570
  () => inlineComputedStylesOnClone(element, clone, readComputedStyle)
65080
65571
  );
65081
- chunkZO43VVWQ_cjs.snapshotThreeViewsIntoClone(element, clone);
65082
- chunkZO43VVWQ_cjs.prepareExportClone(clone);
65572
+ chunkJ642EKDV_cjs.snapshotThreeViewsIntoClone(element, clone);
65573
+ chunkJ642EKDV_cjs.prepareExportClone(clone);
65083
65574
  const [{ allEmbedded: imagesEmbedded }, externalFonts] = await Promise.all([
65084
65575
  embedImagesOnClone(clone),
65085
65576
  collectExternalFontFaceCss(doc, fetchAsDataUrl)
@@ -66971,7 +67462,7 @@ var HANDLE_ANCHORS = [
66971
67462
  ["sw", 0, 1],
66972
67463
  ["w", 0, 0.5]
66973
67464
  ];
66974
- function fmt4(n) {
67465
+ function fmt5(n) {
66975
67466
  return String(Math.round(n * 1e3) / 1e3);
66976
67467
  }
66977
67468
  function handleFor(id, fx, fy, frameW, frameH, len, thick) {
@@ -66980,7 +67471,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
66980
67471
  const height = fy === 0.5 ? len : isCorner ? len : thick;
66981
67472
  const left = fx === 0 ? 0 : fx === 1 ? frameW - width : frameW / 2 - width / 2;
66982
67473
  const top = fy === 0 ? 0 : fy === 1 ? frameH - height : frameH / 2 - height / 2;
66983
- let path = `M0 0 H${fmt4(width)} V${fmt4(height)} H0 Z`;
67474
+ let path = `M0 0 H${fmt5(width)} V${fmt5(height)} H0 Z`;
66984
67475
  if (isCorner) {
66985
67476
  const x0 = fx === 0 ? 0 : len;
66986
67477
  const y0 = fy === 0 ? 0 : len;
@@ -66994,7 +67485,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
66994
67485
  [x0 + sx * thick, y0 + sy * len],
66995
67486
  [x0, y0 + sy * len]
66996
67487
  ];
66997
- path = `M${pts.map(([x, y]) => `${fmt4(x)} ${fmt4(y)}`).join(" L")} Z`;
67488
+ path = `M${pts.map(([x, y]) => `${fmt5(x)} ${fmt5(y)}`).join(" L")} Z`;
66998
67489
  }
66999
67490
  return { id, left, top, width, height, path, cursor: CURSORS[id] };
67000
67491
  }
@@ -67012,8 +67503,8 @@ function buildCropOverlay(el, zoom = 1) {
67012
67503
  };
67013
67504
  const hx = frame.x - image.x;
67014
67505
  const hy = frame.y - image.y;
67015
- const outer2 = `M0 0 H${fmt4(image.width)} V${fmt4(image.height)} H0 Z`;
67016
- const hole = `M${fmt4(hx)} ${fmt4(hy)} H${fmt4(hx + frame.width)} V${fmt4(hy + frame.height)} H${fmt4(hx)} Z`;
67506
+ const outer2 = `M0 0 H${fmt5(image.width)} V${fmt5(image.height)} H0 Z`;
67507
+ const hole = `M${fmt5(hx)} ${fmt5(hy)} H${fmt5(hx + frame.width)} V${fmt5(hy + frame.height)} H${fmt5(hx)} Z`;
67017
67508
  const flips = [
67018
67509
  start.flipHorizontal ? "scaleX(-1)" : "",
67019
67510
  start.flipVertical ? "scaleY(-1)" : ""
@@ -70369,6 +70860,32 @@ function statusBarViewMode(mode, sorterOpen = false) {
70369
70860
  }
70370
70861
  return mode === "edit" ? "normal" : void 0;
70371
70862
  }
70863
+ function statusBarState(host2) {
70864
+ const save = resolveStatusBarSave(host2.translate, host2.autosave, host2.dirty, host2.now);
70865
+ const handles = (id) => host2.handles?.[id] !== false;
70866
+ const hidden = (id) => isActionHidden(id, host2.hiddenActions);
70867
+ const zoom = hidden("zoom") ? void 0 : host2.zoomPercent;
70868
+ return {
70869
+ slideCount: host2.slideCount,
70870
+ activeSlideIndex: host2.activeSlideIndex,
70871
+ saveText: save.text,
70872
+ saveKind: save.kind,
70873
+ ...zoom === void 0 ? {} : { zoomPercent: zoom },
70874
+ showNotes: handles("notes") && !hidden("notes"),
70875
+ notesExpanded: host2.notesExpanded === true,
70876
+ showViewModes: handles("viewModes"),
70877
+ showSorter: handles("sorter"),
70878
+ showSlideShow: handles("slideShow") && !hidden("fullscreen"),
70879
+ ...host2.viewMode ? { viewMode: host2.viewMode } : {},
70880
+ translate: host2.translate
70881
+ };
70882
+ }
70883
+ function dispatchStatusBarIntent(event, handlers) {
70884
+ const id = event.detail?.id;
70885
+ if (id) {
70886
+ handlers[id]?.();
70887
+ }
70888
+ }
70372
70889
 
70373
70890
  // src/pptx/render/notes-toolbar-state.ts
70374
70891
  var NOTES_TOOLBAR_DEFAULT_STATE = {
@@ -73907,7 +74424,7 @@ var defineRibbonSection = definer(
73907
74424
  );
73908
74425
 
73909
74426
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/ribbon/gallery.css?raw
73910
- var gallery_default = "[data-office-gallery] {\n display: inline-flex;\n position: relative;\n flex: none;\n color: var(--office-foreground);\n}\n[data-office-gallery] .gallery-view {\n display: contents;\n}\n[data-office-gallery] button {\n box-sizing: border-box;\n font: inherit;\n color: inherit;\n cursor: pointer;\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius);\n background: var(--office-background);\n}\n[data-office-gallery] button:hover:not(:disabled) {\n background: var(--office-selected);\n}\n[data-office-gallery] button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n[data-office-gallery] button:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n[data-office-gallery] .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--office-space-1-5);\n min-height: var(--office-gallery-trigger-height);\n padding: 0 var(--office-space-1-5);\n font-size: var(--office-font-size-sm);\n white-space: nowrap;\n}\n[data-office-gallery]:not([mode='inline']) .trigger {\n border-color: transparent;\n background: transparent;\n}\n[data-office-gallery] .trigger svg {\n width: var(--office-icon-size-md);\n height: var(--office-icon-size-md);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n[data-office-gallery][mode='inline'] .trigger,\n[data-office-gallery][chevron-only] .trigger {\n align-self: stretch;\n padding: 0 var(--office-space-1);\n}\n[data-office-gallery] .strip {\n display: flex;\n gap: var(--office-space-0);\n padding: var(--office-space-0);\n align-items: center;\n}\n[data-office-gallery] .tile {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n padding: var(--office-space-0);\n}\n[data-office-gallery] .tile[aria-pressed='true'] {\n border: var(--office-border-width-thick) solid var(--office-accent);\n background: color-mix(in srgb, var(--office-accent) 15%, var(--office-background));\n}\n[data-office-gallery] .tile svg {\n max-width: 100%;\n max-height: 100%;\n}\n[data-office-gallery][mode='inline'] .strip {\n gap: 0;\n border: var(--office-border-width) solid var(--office-border);\n border-inline-end: 0;\n border-radius: var(--office-radius-sm) 0 0 var(--office-radius-sm);\n background: var(--office-gallery-strip-background);\n}\n[data-office-gallery][mode='inline'] .trigger {\n border-radius: 0 var(--office-radius-sm) var(--office-radius-sm) 0;\n background: var(--office-gallery-strip-background);\n}\n[data-office-gallery] .trigger.command {\n border-color: transparent;\n background: transparent;\n justify-content: flex-start;\n}\n[data-office-gallery] .trigger.command:hover:not(:disabled) {\n border-color: var(--office-border);\n background: var(--office-selected);\n}\n[data-office-gallery] .trigger.command svg {\n color: var(--office-command-icon-color);\n}\n[data-office-gallery] .trigger.command-large {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--office-space-0);\n min-width: var(--office-gallery-command-min-width);\n max-width: var(--office-gallery-command-max-width);\n height: var(--office-gallery-command-height);\n padding: var(--office-space-1);\n font-size: var(--office-font-size-2xs);\n line-height: var(--office-line-height-tight);\n white-space: normal;\n text-align: center;\n}\n[data-office-gallery] .trigger.command-large svg {\n width: var(--office-gallery-command-icon);\n height: var(--office-gallery-command-icon);\n}\n[data-office-gallery] .popup {\n box-sizing: border-box;\n position: fixed;\n z-index: var(--office-z-popover);\n max-width: calc(100vw - var(--office-space-4));\n max-height: var(--office-gallery-popup-max-height);\n overflow: auto;\n padding: var(--office-space-2);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n[data-office-gallery] .popup[hidden] {\n display: none;\n}\n[data-office-gallery] .grid {\n display: grid;\n gap: var(--office-space-1);\n width: max-content;\n max-width: 100%;\n}\n[data-office-gallery] .heading {\n margin: var(--office-space-1) 0 var(--office-space-1-5);\n font-size: var(--office-font-size-xs);\n font-weight: var(--office-font-weight-bold);\n}\n[data-office-gallery] .section + .section {\n margin-top: var(--office-space-2-5);\n}\n[data-office-gallery][mode='panel'] {\n display: block;\n}\n[data-office-gallery][mode='panel'] .grid {\n width: 100%;\n}\n[data-office-gallery][mode='panel']:not([compact]) .tile {\n flex-direction: column;\n gap: var(--office-space-1);\n width: 100% !important;\n height: auto !important;\n min-height: var(--office-target-size-touch);\n padding: var(--office-space-1);\n}\n[data-office-gallery][mode='panel'] .tile-label {\n font-size: var(--office-font-size-xs);\n}\n[data-office-gallery][mode='panel'] .tile svg {\n width: var(--office-gallery-preview-width);\n height: var(--office-gallery-preview-height);\n}\n[data-office-gallery] .footer {\n display: flex;\n flex-direction: column;\n margin-top: var(--office-space-2);\n padding-top: var(--office-space-1);\n border-top: var(--office-border-width) solid var(--office-border);\n}\n[data-office-gallery] .footer-item,\n[data-office-gallery] .tile-menu-item {\n display: block;\n padding: var(--office-space-1) var(--office-space-2);\n border-color: transparent;\n background: transparent;\n font-size: var(--office-font-size-sm);\n text-align: start;\n white-space: nowrap;\n}\n[data-office-gallery] .tile-menu {\n box-sizing: border-box;\n position: fixed;\n z-index: calc(var(--office-z-popover) + 1);\n display: flex;\n flex-direction: column;\n min-width: 12rem;\n padding: var(--office-space-1);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n@media (pointer: coarse), (max-width: 1023px) {\n [data-office-gallery] .trigger,\n [data-office-gallery] .tile {\n min-height: var(--office-target-size-touch);\n min-width: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n [data-office-gallery] button,\n [data-office-gallery] .popup {\n color: ButtonText;\n background: Canvas;\n border-color: ButtonText;\n }\n [data-office-gallery] button:disabled {\n color: GrayText;\n opacity: 1;\n }\n [data-office-gallery] button:focus-visible,\n [data-office-gallery] .tile[aria-pressed='true'] {\n outline: var(--office-focus-width) solid Highlight;\n border-color: Highlight;\n }\n}\n";
74427
+ var gallery_default = "[data-office-gallery] {\n display: inline-flex;\n position: relative;\n flex: none;\n color: var(--office-foreground);\n}\n[data-office-gallery] .gallery-view {\n display: contents;\n}\n[data-office-gallery] button {\n box-sizing: border-box;\n font: inherit;\n color: inherit;\n cursor: pointer;\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius);\n background: var(--office-background);\n}\n[data-office-gallery] button:hover:not(:disabled) {\n background: var(--office-selected);\n}\n[data-office-gallery] button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n[data-office-gallery] button:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n[data-office-gallery] .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--office-space-1-5);\n min-height: var(--office-gallery-trigger-height);\n padding: 0 var(--office-space-1-5);\n font-size: var(--office-font-size-sm);\n white-space: nowrap;\n}\n[data-office-gallery]:not([mode='inline']) .trigger {\n border-color: transparent;\n background: transparent;\n}\n[data-office-gallery] .trigger svg {\n width: var(--office-icon-size-md);\n height: var(--office-icon-size-md);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n[data-office-gallery][mode='inline'] .trigger,\n[data-office-gallery][chevron-only] .trigger {\n align-self: stretch;\n padding: 0 var(--office-space-1);\n}\n[data-office-gallery] .strip {\n display: flex;\n gap: var(--office-space-0);\n padding: var(--office-space-0);\n align-items: center;\n}\n[data-office-gallery] .tile {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n padding: var(--office-space-0);\n}\n[data-office-gallery] .tile[aria-pressed='true'] {\n border: var(--office-border-width-thick) solid var(--office-accent);\n background: color-mix(in srgb, var(--office-accent) 15%, var(--office-background));\n}\n[data-office-gallery] .tile svg {\n max-width: 100%;\n max-height: 100%;\n}\n[data-office-gallery][mode='inline'] .strip {\n gap: 0;\n border: var(--office-border-width) solid var(--office-border);\n border-inline-end: 0;\n border-radius: var(--office-radius-sm) 0 0 var(--office-radius-sm);\n background: var(--office-gallery-strip-background);\n}\n[data-office-gallery][mode='inline'] .trigger {\n border-radius: 0 var(--office-radius-sm) var(--office-radius-sm) 0;\n background: var(--office-gallery-strip-background);\n}\n[data-office-gallery] .trigger.command {\n border-color: transparent;\n background: transparent;\n justify-content: flex-start;\n}\n[data-office-gallery] .trigger.command:hover:not(:disabled) {\n border-color: var(--office-border);\n background: var(--office-selected);\n}\n[data-office-gallery] .trigger.command svg {\n color: var(--office-command-icon-color);\n}\n[data-office-gallery] .trigger.command-large {\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: var(--office-space-0);\n min-width: var(--office-gallery-command-min-width);\n max-width: var(--office-gallery-command-max-width);\n height: var(--office-gallery-command-height);\n padding: var(--office-space-1);\n font-size: var(--office-font-size-2xs);\n line-height: var(--office-line-height-tight);\n white-space: normal;\n text-align: center;\n}\n[data-office-gallery] .trigger.command-large svg {\n width: var(--office-gallery-command-icon);\n height: var(--office-gallery-command-icon);\n}\n[data-office-gallery] .popup {\n box-sizing: border-box;\n position: fixed;\n z-index: var(--office-z-popover);\n max-width: calc(100vw - var(--office-space-4));\n max-height: var(--office-gallery-popup-max-height);\n overflow: auto;\n padding: var(--office-space-2);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n[data-office-gallery] .popup[hidden] {\n display: none;\n}\n[data-office-gallery] .grid {\n display: grid;\n gap: var(--office-space-1);\n width: max-content;\n max-width: 100%;\n}\n[data-office-gallery] .heading {\n margin: var(--office-space-1) 0 var(--office-space-1-5);\n font-size: var(--office-font-size-xs);\n font-weight: var(--office-font-weight-bold);\n}\n[data-office-gallery] .section + .section {\n margin-top: var(--office-space-2-5);\n}\n[data-office-gallery][mode='panel'] {\n display: block;\n}\n[data-office-gallery][mode='panel'] .grid {\n width: 100%;\n}\n[data-office-gallery][mode='panel']:not([compact]) .tile {\n flex-direction: column;\n gap: var(--office-space-1);\n width: 100% !important;\n height: auto !important;\n min-height: var(--office-target-size-touch);\n padding: var(--office-space-1);\n}\n/* A compact panel's tiles share its width, so a row of touch-size tiles never runs past a narrow\n pane; the preview keeps its size in the middle. */\n[data-office-gallery][mode='panel'][compact] .tile {\n width: 100% !important;\n min-width: 0;\n}\n[data-office-gallery][mode='panel'] .tile-label {\n font-size: var(--office-font-size-xs);\n}\n[data-office-gallery][mode='panel'] .tile svg {\n width: var(--office-gallery-preview-width);\n height: var(--office-gallery-preview-height);\n}\n[data-office-gallery] .footer {\n display: flex;\n flex-direction: column;\n margin-top: var(--office-space-2);\n padding-top: var(--office-space-1);\n border-top: var(--office-border-width) solid var(--office-border);\n}\n[data-office-gallery] .footer-item,\n[data-office-gallery] .tile-menu-item {\n display: block;\n padding: var(--office-space-1) var(--office-space-2);\n border-color: transparent;\n background: transparent;\n font-size: var(--office-font-size-sm);\n text-align: start;\n white-space: nowrap;\n}\n[data-office-gallery] .tile-menu {\n box-sizing: border-box;\n position: fixed;\n z-index: calc(var(--office-z-popover) + 1);\n display: flex;\n flex-direction: column;\n min-width: 12rem;\n padding: var(--office-space-1);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n@media (pointer: coarse), (max-width: 1023px) {\n [data-office-gallery] .trigger,\n [data-office-gallery] .tile {\n min-height: var(--office-target-size-touch);\n min-width: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n [data-office-gallery] button,\n [data-office-gallery] .popup {\n color: ButtonText;\n background: Canvas;\n border-color: ButtonText;\n }\n [data-office-gallery] button:disabled {\n color: GrayText;\n opacity: 1;\n }\n [data-office-gallery] button:focus-visible,\n [data-office-gallery] .tile[aria-pressed='true'] {\n outline: var(--office-focus-width) solid Highlight;\n border-color: Highlight;\n }\n}\n";
73911
74428
 
73912
74429
  // src/ribbon/gallery-styles.ts
73913
74430
  var GALLERY_LIGHT_CSS = withTokens(gallery_default);
@@ -76247,6 +76764,115 @@ var OfficeUiColorGrid = class extends OfficeElement {
76247
76764
  };
76248
76765
  var defineColorGrid = definer("office-ui-color-grid", () => OfficeUiColorGrid);
76249
76766
 
76767
+ // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/dialog/progress-dialog.css?raw
76768
+ var progress_dialog_default = ":host {\n display: none;\n position: fixed;\n inset: 0;\n /* Above popovers and the File backstage the job is started from. */\n z-index: calc(var(--office-z-popover) + 100);\n align-items: center;\n justify-content: center;\n}\n:host([open]) {\n display: flex;\n}\n.backdrop {\n position: absolute;\n inset: 0;\n background: var(--office-overlay);\n}\n.box {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--office-space-3);\n width: min(calc(100vw - 2 * var(--office-space-4)), 24rem);\n padding: var(--office-space-5);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-lg);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n font-family: var(--office-font);\n}\nh2 {\n margin: 0;\n font-size: var(--office-font-size);\n font-weight: 600;\n}\n.track {\n height: var(--office-space-2-5);\n overflow: hidden;\n border-radius: var(--office-radius-full);\n background: var(--office-selected);\n}\n.fill {\n height: 100%;\n border-radius: inherit;\n background: var(--office-accent);\n transition: width 300ms ease-out;\n}\n.row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--office-space-2);\n font-size: var(--office-font-size-xs);\n color: var(--office-muted-foreground);\n}\n.percent {\n font-variant-numeric: tabular-nums;\n}\n.actions {\n display: flex;\n justify-content: flex-end;\n}\nbutton {\n box-sizing: border-box;\n min-height: var(--office-control-height-lg);\n padding: var(--office-space-1-5) var(--office-space-3-5);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-surface);\n color: var(--office-foreground);\n font: 500 var(--office-font-size) / 1.2 var(--office-font);\n cursor: pointer;\n}\nbutton:hover {\n background: var(--office-selected);\n}\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n@media (prefers-reduced-motion: reduce) {\n .fill {\n transition: none;\n }\n}\n@media (pointer: coarse) {\n button {\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n .fill {\n background: Highlight;\n }\n .track {\n border: var(--office-border-width) solid CanvasText;\n }\n}\n";
76769
+
76770
+ // src/dialog/progress-dialog.ts
76771
+ function percent3(value) {
76772
+ return Number.isFinite(value) ? Math.min(100, Math.max(0, Math.round(value))) : 0;
76773
+ }
76774
+ var OfficeUiProgressDialog = class extends OfficeElement {
76775
+ static cancelEvent = "office-progress-cancel";
76776
+ static testIdPrefix = "office-progress";
76777
+ static styles = controlStyles(progress_dialog_default);
76778
+ // A product subclass overrides `state` with its own accessor, so Lit is not told about it: its
76779
+ // first update would read the property before the subclass's fields exist.
76780
+ model = { open: false, title: "", progress: 0, status: "" };
76781
+ wasOpen = false;
76782
+ returnFocus = null;
76783
+ constructor() {
76784
+ super();
76785
+ this.addEventListener("keydown", (event) => this.onKey(event));
76786
+ this.addEventListener("mousedown", (event) => this.onPress(event));
76787
+ }
76788
+ get state() {
76789
+ return this.model;
76790
+ }
76791
+ set state(value) {
76792
+ this.model = value;
76793
+ this.requestUpdate("state");
76794
+ }
76795
+ get cancelButton() {
76796
+ return this.renderRoot.querySelector("button");
76797
+ }
76798
+ onKey(event) {
76799
+ if (!this.model.open) return;
76800
+ if (event.key === "Tab" || event.key === "Escape") {
76801
+ event.preventDefault();
76802
+ event.stopPropagation();
76803
+ this.cancelButton?.focus();
76804
+ }
76805
+ }
76806
+ onPress(event) {
76807
+ if (!this.model.open) return;
76808
+ const cancel = this.cancelButton;
76809
+ if (cancel && event.composedPath().includes(cancel)) return;
76810
+ event.preventDefault();
76811
+ }
76812
+ cancel() {
76813
+ this.fire(this.constructor.cancelEvent, {});
76814
+ }
76815
+ willUpdate() {
76816
+ this.toggleAttribute("open", this.model.open);
76817
+ }
76818
+ updated(_changed) {
76819
+ const open = this.model.open;
76820
+ if (open && !this.wasOpen) {
76821
+ const active2 = modalActiveElement(this.ownerDocument);
76822
+ this.returnFocus = active2 && active2 !== this.ownerDocument.body ? active2 : null;
76823
+ this.cancelButton?.focus();
76824
+ } else if (!open && this.wasOpen) {
76825
+ const target = this.returnFocus;
76826
+ this.returnFocus = null;
76827
+ target?.focus?.();
76828
+ }
76829
+ this.wasOpen = open;
76830
+ }
76831
+ render() {
76832
+ const { testIdPrefix: p } = this.constructor;
76833
+ const s = this.model;
76834
+ if (!s.open) return lit.html``;
76835
+ const value = percent3(s.progress);
76836
+ return lit.html`
76837
+ <div class="backdrop"></div>
76838
+ <div
76839
+ class="box"
76840
+ role="dialog"
76841
+ aria-modal="true"
76842
+ aria-labelledby="title"
76843
+ aria-describedby="status"
76844
+ data-testid="${p}-dialog"
76845
+ >
76846
+ <h2 id="title">${s.title}</h2>
76847
+ <div
76848
+ class="track"
76849
+ role="progressbar"
76850
+ aria-labelledby="title"
76851
+ aria-valuemin="0"
76852
+ aria-valuemax="100"
76853
+ aria-valuenow=${value}
76854
+ data-testid="${p}-bar"
76855
+ >
76856
+ <div class="fill" style="width:${value}%"></div>
76857
+ </div>
76858
+ <div class="row">
76859
+ <span id="status" aria-live="polite">${s.status}</span>
76860
+ <span class="percent" aria-hidden="true">${value}%</span>
76861
+ </div>
76862
+ <div class="actions">
76863
+ <button type="button" data-testid="${p}-cancel" @click=${() => this.cancel()}
76864
+ >${s.cancelLabel ?? "Cancel"}</button
76865
+ >
76866
+ </div>
76867
+ </div>
76868
+ `;
76869
+ }
76870
+ };
76871
+ var defineProgressDialog = definer(
76872
+ "office-ui-progress-dialog",
76873
+ () => OfficeUiProgressDialog
76874
+ );
76875
+
76250
76876
  // src/pptx/web-components/office-token-bridge.ts
76251
76877
  var BASE = `
76252
76878
  --office-ring: var(--pptx-focus-ring-color, var(--_pptx-ring));
@@ -76327,6 +76953,12 @@ var STATUS_BAR = `:host {
76327
76953
  var EXTRAS = {
76328
76954
  "pptx-ui-title-bar": TITLE_BAR,
76329
76955
  "pptx-ui-status-bar": STATUS_BAR,
76956
+ "pptx-ui-export-progress": `:host { --office-popover: var(--pptx-popover, var(--pptx-card, #1e1e2e));
76957
+ --office-popover-foreground: var(--pptx-popover-foreground, #f9fafb);
76958
+ --office-foreground: var(--pptx-foreground, #f9fafb); --office-border: var(--pptx-border, #33334d);
76959
+ --office-muted-foreground: var(--pptx-muted-foreground, #a5a5b5);
76960
+ --office-accent: var(--pptx-primary, #6366f1); --office-surface: var(--pptx-secondary, #1e1e2e);
76961
+ --office-selected: var(--pptx-muted, #2a2a3d); }`,
76330
76962
  "pptx-ui-ribbon-gallery": `:host { --office-foreground: var(--pptx-foreground, #f9fafb); --office-background: var(--pptx-background, #111827);
76331
76963
  --office-gallery-strip-background: color-mix(in srgb, var(--pptx-muted, #2a2a3d) 30%, transparent);
76332
76964
  --office-command-icon-color: var(--pptx-primary, #6366f1); --office-z-popover: 1200;
@@ -76767,6 +77399,35 @@ function definePptxContextMenu(registry2) {
76767
77399
  }
76768
77400
  );
76769
77401
  }
77402
+ function definePptxExportProgress(registry2) {
77403
+ if (registry2.get("pptx-ui-export-progress")) {
77404
+ return;
77405
+ }
77406
+ const Base = bridged(
77407
+ base(registry2, defineProgressDialog, "office-ui-progress-dialog"),
77408
+ "pptx-ui-export-progress"
77409
+ );
77410
+ class PptxExportProgress extends Base {
77411
+ static cancelEvent = "export-cancel";
77412
+ static testIdPrefix = "pptx-export-progress";
77413
+ #model = { open: false, title: "", progress: 0 };
77414
+ get state() {
77415
+ return this.#model;
77416
+ }
77417
+ set state(value) {
77418
+ this.#model = value;
77419
+ const t2 = value.translate ?? identity4;
77420
+ super.state = {
77421
+ open: value.open,
77422
+ title: value.title,
77423
+ progress: value.progress,
77424
+ status: value.status || t2("pptx.export.processing"),
77425
+ cancelLabel: t2("pptx.export.cancel")
77426
+ };
77427
+ }
77428
+ }
77429
+ registry2.define("pptx-ui-export-progress", PptxExportProgress);
77430
+ }
76770
77431
 
76771
77432
  // src/pptx/web-components/options-dialog.ts
76772
77433
  function definePptxOptionsDialog(registry2) {
@@ -82482,6 +83143,7 @@ var controls = [
82482
83143
  ["pptx-ui-present-toolbar", definePptxPresentToolbar],
82483
83144
  ["pptx-ui-presenter-console", definePptxPresenterConsole],
82484
83145
  ["pptx-ui-read-only-banner", definePptxReadOnlyBanner],
83146
+ ["pptx-ui-export-progress", definePptxExportProgress],
82485
83147
  ["pptx-ui-ribbon-command", definePptxRibbonCommand],
82486
83148
  ["pptx-ui-ribbon-animations", definePptxRibbonAnimations],
82487
83149
  ["pptx-ui-ribbon-draw", definePptxRibbonDraw],
@@ -86076,6 +86738,7 @@ exports.HOME_SELECT_ITEMS = HOME_SELECT_ITEMS;
86076
86738
  exports.HOME_SHAPE_ITEMS = HOME_SHAPE_ITEMS;
86077
86739
  exports.HOME_TEXT_DIRECTION_ITEMS = HOME_TEXT_DIRECTION_ITEMS;
86078
86740
  exports.INDENT_PX = INDENT_PX;
86741
+ exports.INITIAL_READ_ONLY_SESSION = INITIAL_READ_ONLY_SESSION;
86079
86742
  exports.INITIAL_SYNC_GRACE_MS = INITIAL_SYNC_GRACE_MS;
86080
86743
  exports.INLINE_GALLERY_TILE_COUNT = INLINE_GALLERY_TILE_COUNT;
86081
86744
  exports.INSERT_CHART_TYPES = INSERT_CHART_TYPES;
@@ -86331,6 +86994,7 @@ exports.SLIDE_TRANSITION_KEYFRAMES_CSS = SLIDE_TRANSITION_KEYFRAMES_CSS;
86331
86994
  exports.SLIDE_TRANSITION_LABEL_KEYS = SLIDE_TRANSITION_LABEL_KEYS;
86332
86995
  exports.SLIDE_TRANSITION_OPTIONS = SLIDE_TRANSITION_OPTIONS;
86333
86996
  exports.SLIDE_VIRTUALIZATION_THRESHOLD = SLIDE_VIRTUALIZATION_THRESHOLD;
86997
+ exports.SMARTART_3D_EDIT_LAYER_ATTRIBUTE = SMARTART_3D_EDIT_LAYER_ATTRIBUTE;
86334
86998
  exports.SMARTART_CONNECTOR_OPACITY = SMARTART_CONNECTOR_OPACITY;
86335
86999
  exports.SMARTART_CONNECTOR_STROKE = SMARTART_CONNECTOR_STROKE;
86336
87000
  exports.SMARTART_CONNECTOR_WIDTH = SMARTART_CONNECTOR_WIDTH;
@@ -86491,6 +87155,7 @@ exports.applyOutlineEdit = applyOutlineEdit;
86491
87155
  exports.applyParagraphCommand = applyParagraphCommand;
86492
87156
  exports.applyPasteSpecialFormat = applyPasteSpecialFormat;
86493
87157
  exports.applyPreferenceToOptions = applyPreferenceToOptions;
87158
+ exports.applyReadOnlySessionEvent = applyReadOnlySessionEvent;
86494
87159
  exports.applyReadingViewCommand = applyReadingViewCommand;
86495
87160
  exports.applyRehearsalTimings = applyRehearsalTimings;
86496
87161
  exports.applyRenderedElementAccessibility = applyRenderedElementAccessibility;
@@ -86632,6 +87297,7 @@ exports.buildLineShadowCss = buildLineShadowCss;
86632
87297
  exports.buildLiveInkStrokeView = buildLiveInkStrokeView;
86633
87298
  exports.buildMirrorTiledBackground = buildMirrorTiledBackground;
86634
87299
  exports.buildMorphAnimationRules = buildMorphAnimationRules;
87300
+ exports.buildMorphIncomingAnchoredOrder = buildMorphIncomingAnchoredOrder;
86635
87301
  exports.buildMorphMergedOrder = buildMorphMergedOrder;
86636
87302
  exports.buildMorphScopedCss = buildMorphScopedCss;
86637
87303
  exports.buildMorphTransitionPlan = buildMorphTransitionPlan;
@@ -86658,6 +87324,7 @@ exports.buildPreviewElements = buildPreviewElements;
86658
87324
  exports.buildPrintDocument = buildPrintDocument;
86659
87325
  exports.buildPrintStyleSheet = buildPrintStyleSheet;
86660
87326
  exports.buildQueryLinkUrl = buildQueryLinkUrl;
87327
+ exports.buildQuickStylesGallery = buildQuickStylesGallery;
86661
87328
  exports.buildRasterPictureElement = buildRasterPictureElement;
86662
87329
  exports.buildRecordRibbon = buildRecordRibbon;
86663
87330
  exports.buildReviewRibbon = buildReviewRibbon;
@@ -87025,6 +87692,8 @@ exports.disableSoftEdgePatch = disableSoftEdgePatch;
87025
87692
  exports.discardAutosaveRecovery = discardAutosaveRecovery;
87026
87693
  exports.dispatchChartSelectionRequest = dispatchChartSelectionRequest;
87027
87694
  exports.dispatchCropRequest = dispatchCropRequest;
87695
+ exports.dispatchReadOnlyBannerIntent = dispatchReadOnlyBannerIntent;
87696
+ exports.dispatchStatusBarIntent = dispatchStatusBarIntent;
87028
87697
  exports.dominantDisplacement = dominantDisplacement;
87029
87698
  exports.downloadBlob = downloadBlob;
87030
87699
  exports.downloadDataUrl = downloadDataUrl;
@@ -87361,6 +88030,7 @@ exports.getUnrotatedShapeConnectionSites = getUnrotatedShapeConnectionSites;
87361
88030
  exports.getViewerOptionsTab = getViewerOptionsTab;
87362
88031
  exports.getWarpCssTransform = getWarpCssTransform;
87363
88032
  exports.getWarpPath = getWarpPath;
88033
+ exports.ghostMorphPairsHiddenByGhosts = ghostMorphPairsHiddenByGhosts;
87364
88034
  exports.gradientStateFromStyle = gradientStateFromStyle;
87365
88035
  exports.gradientStateOf = gradientStateOf;
87366
88036
  exports.gradientStatePatch = gradientStatePatch;
@@ -87475,6 +88145,7 @@ exports.isExportAbortError = isExportAbortError;
87475
88145
  exports.isFeatureEnabled = isFeatureEnabled;
87476
88146
  exports.isFontFamilyAvailable = isFontFamilyAvailable;
87477
88147
  exports.isFontFamilyInstalledLocally = isFontFamilyInstalledLocally;
88148
+ exports.isForwardedEditLayerEvent = isForwardedEditLayerEvent;
87478
88149
  exports.isFreeformStrokeClosed = isFreeformStrokeClosed;
87479
88150
  exports.isHeaderFooterDateTextVisible = isHeaderFooterDateTextVisible;
87480
88151
  exports.isHeaderFooterFooterTextVisible = isHeaderFooterFooterTextVisible;
@@ -87813,6 +88484,7 @@ exports.pushRecentColor = pushRecentColor;
87813
88484
  exports.pushRecentShape = pushRecentShape;
87814
88485
  exports.px = px2;
87815
88486
  exports.quadToCubicControls = quadToCubicControls;
88487
+ exports.quickStyleShapeStyle = quickStyleShapeStyle;
87816
88488
  exports.quickStyleSwatchCss = quickStyleSwatchCss;
87817
88489
  exports.quickStyleSwatchStyleAttr = quickStyleSwatchStyleAttr;
87818
88490
  exports.radarStylePatch = radarStylePatch;
@@ -87837,7 +88509,11 @@ exports.readInlineListNativeSnapshot = readInlineListNativeSnapshot;
87837
88509
  exports.readInlineListSelection = readInlineListSelection;
87838
88510
  exports.readInlineListSnapshot = readInlineListSnapshot;
87839
88511
  exports.readListActivationSelection = readListActivationSelection;
88512
+ exports.readOnlyBannerState = readOnlyBannerState;
88513
+ exports.readOnlyBannerVisible = readOnlyBannerVisible;
88514
+ exports.readOnlyLocked = readOnlyLocked;
87840
88515
  exports.readOnlyRecommendation = readOnlyRecommendation;
88516
+ exports.readOnlySessionActions = readOnlySessionActions;
87841
88517
  exports.readRecentShapes = readRecentShapes;
87842
88518
  exports.readRibbonTransitionDraft = readRibbonTransitionDraft;
87843
88519
  exports.readSlideShowOption = readSlideShowOption;
@@ -87856,6 +88532,7 @@ exports.recordTableCellBold = recordTableCellBold;
87856
88532
  exports.redirectExitShapeByDirection = redirectExitShapeByDirection;
87857
88533
  exports.redirectMaskEffectByFilterSubtype = redirectMaskEffectByFilterSubtype;
87858
88534
  exports.redistributeColumnWidth = redistributeColumnWidth;
88535
+ exports.reduceReadOnlySession = reduceReadOnlySession;
87859
88536
  exports.reduceViewerZoom = reduceViewerZoom;
87860
88537
  exports.reflowRibbon = reflowRibbon;
87861
88538
  exports.reflowSmartArtData = reflowSmartArtData;
@@ -87977,6 +88654,7 @@ exports.resolveMetricTrackingPx = resolveMetricTrackingPx;
87977
88654
  exports.resolveMorphCrossfadeGroups = resolveMorphCrossfadeGroups;
87978
88655
  exports.resolveMorphGhostIds = resolveMorphGhostIds;
87979
88656
  exports.resolveMorphOverlayArrivals = resolveMorphOverlayArrivals;
88657
+ exports.resolveMorphOverlayLayers = resolveMorphOverlayLayers;
87980
88658
  exports.resolveNotesLevelStyle = resolveNotesLevelStyle;
87981
88659
  exports.resolveNotesSchematicBodyFontSizePx = resolveNotesSchematicBodyFontSizePx;
87982
88660
  exports.resolveNotesSegments = resolveNotesSegments;
@@ -88088,6 +88766,7 @@ exports.runMediaCommand = runMediaCommand;
88088
88766
  exports.runPresentationAction = runPresentationAction;
88089
88767
  exports.runProgramNoticeStackStyle = runProgramNoticeStackStyle;
88090
88768
  exports.runProgramNoticeStackStyleAttr = runProgramNoticeStackStyleAttr;
88769
+ exports.runReadOnlyPasswordCheck = runReadOnlyPasswordCheck;
88091
88770
  exports.runReviewCommentCommand = runReviewCommentCommand;
88092
88771
  exports.runRibbonAddInCommand = runRibbonAddInCommand;
88093
88772
  exports.safeColor = safeColor;
@@ -88236,12 +88915,14 @@ exports.splitWordsForUnderline = splitWordsForUnderline;
88236
88915
  exports.splitsUnderlineIntoWords = splitsUnderlineIntoWords;
88237
88916
  exports.startCropSession = startCropSession;
88238
88917
  exports.startMediaAutoplay = startMediaAutoplay;
88918
+ exports.statusBarState = statusBarState;
88239
88919
  exports.statusBarViewMode = statusBarViewMode;
88240
88920
  exports.stepPresenterZoom = stepPresenterZoom;
88241
88921
  exports.stitchContinuousGradientFill = stitchContinuousGradientFill;
88242
88922
  exports.stopAllPersistentAudio = stopAllPersistentAudio;
88243
88923
  exports.storeAudienceContent = storeAudienceContent;
88244
88924
  exports.storePresentationDeck = storePresentationDeck;
88925
+ exports.straddlingStrokeWidth = straddlingStrokeWidth;
88245
88926
  exports.stripEditLayerMarkers = stripEditLayerMarkers;
88246
88927
  exports.stripUnderlineDecoration = stripUnderlineDecoration;
88247
88928
  exports.strokeOnlyPresetPathData = strokeOnlyPresetPathData;