ooxml-ui 1.23.0 → 1.24.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 (52) hide show
  1. package/README.md +3 -3
  2. package/custom-elements.json +1 -1
  3. package/dist/{chunk-FX6CF43K.js → chunk-4AARUBIF.js} +1 -1
  4. package/dist/{chunk-HTIJ2EAA.js → chunk-A277D2OJ.js} +1 -1
  5. package/dist/{chunk-TJ245GDD.js → chunk-DQEV4EMA.js} +1 -1
  6. package/dist/{chunk-6RCASLEC.js → chunk-Y67BTA5W.js} +2 -2
  7. package/dist/controls.js +1 -1
  8. package/dist/docx.js +3 -3
  9. package/dist/index.js +4 -4
  10. package/dist/pptx/{chunk-TK5LA3Z6.mjs → chunk-3UOENEK7.mjs} +683 -125
  11. package/dist/pptx/{chunk-WX77UUR5.cjs → chunk-SQQJLXTZ.cjs} +693 -122
  12. package/dist/pptx/dom/elements/smartart-3d.d.ts.map +1 -1
  13. package/dist/pptx/dom/elements/smartart-editable.d.ts.map +1 -1
  14. package/dist/pptx/dom/index.cjs +217 -210
  15. package/dist/pptx/dom/index.mjs +10 -3
  16. package/dist/pptx/index.cjs +2959 -2907
  17. package/dist/pptx/index.mjs +1 -1
  18. package/dist/pptx/render/index.d.ts +2 -0
  19. package/dist/pptx/render/index.d.ts.map +1 -1
  20. package/dist/pptx/render/morph-animation.d.ts +1 -1
  21. package/dist/pptx/render/morph-animation.d.ts.map +1 -1
  22. package/dist/pptx/render/morph-overlay-layers.d.ts +108 -0
  23. package/dist/pptx/render/morph-overlay-layers.d.ts.map +1 -0
  24. package/dist/pptx/render/morph-plan.d.ts +16 -0
  25. package/dist/pptx/render/morph-plan.d.ts.map +1 -1
  26. package/dist/pptx/render/ribbon-galleries/gallery-placements.d.ts.map +1 -1
  27. package/dist/pptx/render/ribbon-galleries/gallery-registry.d.ts.map +1 -1
  28. package/dist/pptx/render/ribbon-galleries/gallery-types.d.ts +3 -1
  29. package/dist/pptx/render/ribbon-galleries/gallery-types.d.ts.map +1 -1
  30. package/dist/pptx/render/ribbon-galleries/index.d.ts +1 -0
  31. package/dist/pptx/render/ribbon-galleries/index.d.ts.map +1 -1
  32. package/dist/pptx/render/ribbon-galleries/quick-styles-gallery.d.ts +18 -0
  33. package/dist/pptx/render/ribbon-galleries/quick-styles-gallery.d.ts.map +1 -0
  34. package/dist/pptx/render/shape-geometry-cascade.d.ts.map +1 -1
  35. package/dist/pptx/render/shape-quick-styles.d.ts +0 -5
  36. package/dist/pptx/render/shape-quick-styles.d.ts.map +1 -1
  37. package/dist/pptx/render/smartart-3d-edit-layer.d.ts +10 -0
  38. package/dist/pptx/render/smartart-3d-edit-layer.d.ts.map +1 -1
  39. package/dist/pptx/render/status-bar-state.d.ts +31 -7
  40. package/dist/pptx/render/status-bar-state.d.ts.map +1 -1
  41. package/dist/pptx/render/stroke-clip-outset.d.ts +12 -0
  42. package/dist/pptx/render/stroke-clip-outset.d.ts.map +1 -0
  43. package/dist/pptx/render/stroke-outline.d.ts +7 -0
  44. package/dist/pptx/render/stroke-outline.d.ts.map +1 -1
  45. package/dist/pptx/render/viewport-size.d.ts +85 -0
  46. package/dist/pptx/render/viewport-size.d.ts.map +1 -0
  47. package/dist/ribbon/gallery.d.ts +5 -4
  48. package/dist/ribbon/gallery.d.ts.map +1 -1
  49. package/dist/teams.js +2 -2
  50. package/dist/visio.js +3 -3
  51. package/dist/xlsx.js +6 -6
  52. package/package.json +2 -2
@@ -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;
@@ -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
  }
@@ -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;");
@@ -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;
@@ -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
  });
@@ -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
  {
@@ -65151,6 +65521,168 @@ function calculateViewportFit(input, defaults = DEFAULTS) {
65151
65521
  };
65152
65522
  }
65153
65523
 
65524
+ // src/pptx/render/viewport-size.ts
65525
+ var LAYOUT_UNIT = 1 / 64;
65526
+ var PADDING_SNAP = LAYOUT_UNIT / 0.25;
65527
+ function finiteOrZero(value) {
65528
+ return Number.isFinite(value) && value > 0 ? value : 0;
65529
+ }
65530
+ function isFiniteNumber(value) {
65531
+ return value !== void 0 && Number.isFinite(value);
65532
+ }
65533
+ function serializationError(value) {
65534
+ const magnitude = Math.abs(value);
65535
+ return magnitude === 0 ? 0 : 0.5 * 10 ** (Math.floor(Math.log10(magnitude)) - 5);
65536
+ }
65537
+ function localBorderBox(cssSize, boxSizing, borders, paddingStart, paddingEnd) {
65538
+ if (!isFiniteNumber(cssSize) || cssSize < 0) {
65539
+ return void 0;
65540
+ }
65541
+ if (boxSizing === "border-box") {
65542
+ const error2 = serializationError(cssSize);
65543
+ return {
65544
+ size: cssSize,
65545
+ low: cssSize - error2,
65546
+ high: cssSize + error2,
65547
+ floor: cssSize - error2,
65548
+ exact: true
65549
+ };
65550
+ }
65551
+ if (boxSizing !== "content-box" || !isFiniteNumber(paddingStart) || !isFiniteNumber(paddingEnd)) {
65552
+ return void 0;
65553
+ }
65554
+ const start = Math.max(0, paddingStart);
65555
+ const end = Math.max(0, paddingEnd);
65556
+ const size2 = cssSize + start + end + borders;
65557
+ const error = serializationError(cssSize) + serializationError(start) + serializationError(end) + serializationError(borders);
65558
+ const snap = (start > 0 ? PADDING_SNAP : 0) + (end > 0 ? PADDING_SNAP : 0);
65559
+ return {
65560
+ size: size2,
65561
+ low: size2 - error - snap,
65562
+ high: size2 + error,
65563
+ floor: size2 - error - snap,
65564
+ exact: snap === 0
65565
+ };
65566
+ }
65567
+ function fractionalAxis(client, offset, rect3, borderStart, borderEnd, cssSize, boxSizing, paddingStart, paddingEnd, zoomed) {
65568
+ const snapped = finiteOrZero(client);
65569
+ if (snapped === 0 || !(finiteOrZero(offset) > 0)) {
65570
+ return snapped;
65571
+ }
65572
+ const bordersKnown = isFiniteNumber(borderStart) && isFiniteNumber(borderEnd);
65573
+ const borders = bordersKnown ? Math.max(0, borderStart) + Math.max(0, borderEnd) : 0;
65574
+ if (bordersKnown && offset - snapped - borders >= 1) {
65575
+ return Math.max(0, snapped - 1);
65576
+ }
65577
+ const local = bordersKnown ? localBorderBox(cssSize, boxSizing, borders, paddingStart, paddingEnd) : void 0;
65578
+ if (local) {
65579
+ const plain = !zoomed && Number.isFinite(rect3) && rect3 >= local.low && rect3 <= local.high;
65580
+ if (plain) {
65581
+ const size2 = local.exact ? Math.min(rect3, local.floor + LAYOUT_UNIT) : local.floor;
65582
+ return Math.max(0, size2 - borders);
65583
+ }
65584
+ return Math.max(0, Math.min(snapped, local.size - borders) - 1);
65585
+ }
65586
+ if (!Number.isFinite(rect3)) {
65587
+ return snapped;
65588
+ }
65589
+ const error = rect3 - offset;
65590
+ if (zoomed || Math.abs(error) >= 1) {
65591
+ return Math.max(0, snapped - 1);
65592
+ }
65593
+ if (!bordersKnown) {
65594
+ return Math.max(0, snapped + error);
65595
+ }
65596
+ return Math.max(0, rect3 - borders);
65597
+ }
65598
+ function isZoomed(cssZoom) {
65599
+ return isFiniteNumber(cssZoom) && Math.abs(cssZoom - 1) > 1e-6;
65600
+ }
65601
+ function fractionalClientSize(metrics) {
65602
+ const zoomed = isZoomed(metrics.cssZoom);
65603
+ return {
65604
+ width: fractionalAxis(
65605
+ metrics.clientWidth,
65606
+ metrics.offsetWidth,
65607
+ metrics.rectWidth,
65608
+ metrics.borderLeft,
65609
+ metrics.borderRight,
65610
+ metrics.cssWidth,
65611
+ metrics.boxSizing,
65612
+ metrics.paddingLeft,
65613
+ metrics.paddingRight,
65614
+ zoomed
65615
+ ),
65616
+ height: fractionalAxis(
65617
+ metrics.clientHeight,
65618
+ metrics.offsetHeight,
65619
+ metrics.rectHeight,
65620
+ metrics.borderTop,
65621
+ metrics.borderBottom,
65622
+ metrics.cssHeight,
65623
+ metrics.boxSizing,
65624
+ metrics.paddingTop,
65625
+ metrics.paddingBottom,
65626
+ zoomed
65627
+ )
65628
+ };
65629
+ }
65630
+ function pixels(value) {
65631
+ const parsed = value === void 0 || !value.endsWith("px") ? Number.NaN : Number.parseFloat(value);
65632
+ return Number.isFinite(parsed) ? parsed : void 0;
65633
+ }
65634
+ function measureViewportClientSize(element) {
65635
+ const rect3 = element.getBoundingClientRect();
65636
+ const view2 = element.ownerDocument?.defaultView;
65637
+ const style = view2?.getComputedStyle ? view2.getComputedStyle(element) : void 0;
65638
+ const { currentCSSZoom } = element;
65639
+ return fractionalClientSize({
65640
+ clientWidth: element.clientWidth,
65641
+ clientHeight: element.clientHeight,
65642
+ offsetWidth: element.offsetWidth,
65643
+ offsetHeight: element.offsetHeight,
65644
+ rectWidth: rect3.width,
65645
+ rectHeight: rect3.height,
65646
+ borderLeft: pixels(style?.borderLeftWidth),
65647
+ borderRight: pixels(style?.borderRightWidth),
65648
+ borderTop: pixels(style?.borderTopWidth),
65649
+ borderBottom: pixels(style?.borderBottomWidth),
65650
+ cssWidth: pixels(style?.width),
65651
+ cssHeight: pixels(style?.height),
65652
+ boxSizing: style?.boxSizing,
65653
+ paddingLeft: pixels(style?.paddingLeft),
65654
+ paddingRight: pixels(style?.paddingRight),
65655
+ paddingTop: pixels(style?.paddingTop),
65656
+ paddingBottom: pixels(style?.paddingBottom),
65657
+ cssZoom: typeof currentCSSZoom === "number" ? currentCSSZoom : void 0
65658
+ });
65659
+ }
65660
+ function observeViewportClientSize(element, onSize) {
65661
+ let last = measureViewportClientSize(element);
65662
+ onSize(last);
65663
+ if (typeof ResizeObserver === "undefined") {
65664
+ return () => void 0;
65665
+ }
65666
+ const remeasure = () => {
65667
+ const next = measureViewportClientSize(element);
65668
+ if (next.width === last.width && next.height === last.height) {
65669
+ return;
65670
+ }
65671
+ last = next;
65672
+ onSize(next);
65673
+ };
65674
+ const observers = ["content-box", "border-box"].map((box) => {
65675
+ const observer = new ResizeObserver(remeasure);
65676
+ observer.observe(element, { box });
65677
+ return observer;
65678
+ });
65679
+ return () => {
65680
+ for (const observer of observers) {
65681
+ observer.disconnect();
65682
+ }
65683
+ };
65684
+ }
65685
+
65154
65686
  // src/pptx/render/inline-list-activation.ts
65155
65687
  function readListActivationSelection(root, body) {
65156
65688
  if (readEditableText(root) !== body) {
@@ -66809,7 +67341,7 @@ var HANDLE_ANCHORS = [
66809
67341
  ["sw", 0, 1],
66810
67342
  ["w", 0, 0.5]
66811
67343
  ];
66812
- function fmt4(n) {
67344
+ function fmt5(n) {
66813
67345
  return String(Math.round(n * 1e3) / 1e3);
66814
67346
  }
66815
67347
  function handleFor(id, fx, fy, frameW, frameH, len, thick) {
@@ -66818,7 +67350,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
66818
67350
  const height = fy === 0.5 ? len : isCorner ? len : thick;
66819
67351
  const left = fx === 0 ? 0 : fx === 1 ? frameW - width : frameW / 2 - width / 2;
66820
67352
  const top = fy === 0 ? 0 : fy === 1 ? frameH - height : frameH / 2 - height / 2;
66821
- let path = `M0 0 H${fmt4(width)} V${fmt4(height)} H0 Z`;
67353
+ let path = `M0 0 H${fmt5(width)} V${fmt5(height)} H0 Z`;
66822
67354
  if (isCorner) {
66823
67355
  const x0 = fx === 0 ? 0 : len;
66824
67356
  const y0 = fy === 0 ? 0 : len;
@@ -66832,7 +67364,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
66832
67364
  [x0 + sx * thick, y0 + sy * len],
66833
67365
  [x0, y0 + sy * len]
66834
67366
  ];
66835
- path = `M${pts.map(([x, y]) => `${fmt4(x)} ${fmt4(y)}`).join(" L")} Z`;
67367
+ path = `M${pts.map(([x, y]) => `${fmt5(x)} ${fmt5(y)}`).join(" L")} Z`;
66836
67368
  }
66837
67369
  return { id, left, top, width, height, path, cursor: CURSORS[id] };
66838
67370
  }
@@ -66850,8 +67382,8 @@ function buildCropOverlay(el, zoom = 1) {
66850
67382
  };
66851
67383
  const hx = frame.x - image.x;
66852
67384
  const hy = frame.y - image.y;
66853
- const outer2 = `M0 0 H${fmt4(image.width)} V${fmt4(image.height)} H0 Z`;
66854
- const hole = `M${fmt4(hx)} ${fmt4(hy)} H${fmt4(hx + frame.width)} V${fmt4(hy + frame.height)} H${fmt4(hx)} Z`;
67385
+ const outer2 = `M0 0 H${fmt5(image.width)} V${fmt5(image.height)} H0 Z`;
67386
+ const hole = `M${fmt5(hx)} ${fmt5(hy)} H${fmt5(hx + frame.width)} V${fmt5(hy + frame.height)} H${fmt5(hx)} Z`;
66855
67387
  const flips = [
66856
67388
  start.flipHorizontal ? "scaleX(-1)" : "",
66857
67389
  start.flipVertical ? "scaleY(-1)" : ""
@@ -70207,6 +70739,32 @@ function statusBarViewMode(mode, sorterOpen = false) {
70207
70739
  }
70208
70740
  return mode === "edit" ? "normal" : void 0;
70209
70741
  }
70742
+ function statusBarState(host2) {
70743
+ const save = resolveStatusBarSave(host2.translate, host2.autosave, host2.dirty, host2.now);
70744
+ const handles = (id) => host2.handles?.[id] !== false;
70745
+ const hidden = (id) => isActionHidden(id, host2.hiddenActions);
70746
+ const zoom = hidden("zoom") ? void 0 : host2.zoomPercent;
70747
+ return {
70748
+ slideCount: host2.slideCount,
70749
+ activeSlideIndex: host2.activeSlideIndex,
70750
+ saveText: save.text,
70751
+ saveKind: save.kind,
70752
+ ...zoom === void 0 ? {} : { zoomPercent: zoom },
70753
+ showNotes: handles("notes") && !hidden("notes"),
70754
+ notesExpanded: host2.notesExpanded === true,
70755
+ showViewModes: handles("viewModes"),
70756
+ showSorter: handles("sorter"),
70757
+ showSlideShow: handles("slideShow") && !hidden("fullscreen"),
70758
+ ...host2.viewMode ? { viewMode: host2.viewMode } : {},
70759
+ translate: host2.translate
70760
+ };
70761
+ }
70762
+ function dispatchStatusBarIntent(event, handlers) {
70763
+ const id = event.detail?.id;
70764
+ if (id) {
70765
+ handlers[id]?.();
70766
+ }
70767
+ }
70210
70768
 
70211
70769
  // src/pptx/render/notes-toolbar-state.ts
70212
70770
  var NOTES_TOOLBAR_DEFAULT_STATE = {
@@ -73745,7 +74303,7 @@ var defineRibbonSection = definer(
73745
74303
  );
73746
74304
 
73747
74305
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/ribbon/gallery.css?raw
73748
- 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";
74306
+ 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";
73749
74307
 
73750
74308
  // src/ribbon/gallery-styles.ts
73751
74309
  var GALLERY_LIGHT_CSS = withTokens(gallery_default);
@@ -82741,13 +83299,13 @@ function writeStr(out, str) {
82741
83299
  }
82742
83300
  }
82743
83301
  function quantizeFrame(imageData) {
82744
- const pixels = imageData.data;
83302
+ const pixels2 = imageData.data;
82745
83303
  const numPixels = imageData.width * imageData.height;
82746
83304
  const sampleStep = Math.max(1, Math.floor(numPixels / 1e4));
82747
83305
  const samples = [];
82748
83306
  for (let i = 0; i < numPixels; i += sampleStep) {
82749
83307
  const off = i * 4;
82750
- samples.push([pixels[off], pixels[off + 1], pixels[off + 2]]);
83308
+ samples.push([pixels2[off], pixels2[off + 1], pixels2[off + 2]]);
82751
83309
  }
82752
83310
  const buckets = medianCut(samples, 8);
82753
83311
  const palette = new Uint8Array(768);
@@ -82775,7 +83333,7 @@ function quantizeFrame(imageData) {
82775
83333
  const indexed = new Uint8Array(numPixels);
82776
83334
  for (let i = 0; i < numPixels; i++) {
82777
83335
  const off = i * 4;
82778
- indexed[i] = findNearest(centroids, pixels[off], pixels[off + 1], pixels[off + 2]);
83336
+ indexed[i] = findNearest(centroids, pixels2[off], pixels2[off + 1], pixels2[off + 2]);
82779
83337
  }
82780
83338
  return { palette, indexed };
82781
83339
  }
@@ -83672,18 +84230,18 @@ function filterRowNone(rowRgba) {
83672
84230
  out.set(rowRgba, 1);
83673
84231
  return out;
83674
84232
  }
83675
- function filterPixelBlock(pixels, width, height) {
84233
+ function filterPixelBlock(pixels2, width, height) {
83676
84234
  const rowBytes = width * RGBA_BYTES_PER_PIXEL;
83677
- if (pixels.length !== rowBytes * height) {
84235
+ if (pixels2.length !== rowBytes * height) {
83678
84236
  throw new Error(
83679
- `filterPixelBlock: expected ${rowBytes * height} bytes for ${width}x${height} RGBA, got ${pixels.length}`
84237
+ `filterPixelBlock: expected ${rowBytes * height} bytes for ${width}x${height} RGBA, got ${pixels2.length}`
83680
84238
  );
83681
84239
  }
83682
84240
  const out = new Uint8Array((rowBytes + 1) * height);
83683
84241
  for (let row = 0; row < height; row++) {
83684
84242
  const srcStart = row * rowBytes;
83685
84243
  out[row * (rowBytes + 1)] = 0;
83686
- out.set(pixels.subarray(srcStart, srcStart + rowBytes), row * (rowBytes + 1) + 1);
84244
+ out.set(pixels2.subarray(srcStart, srcStart + rowBytes), row * (rowBytes + 1) + 1);
83687
84245
  }
83688
84246
  return out;
83689
84247
  }
@@ -83736,9 +84294,9 @@ async function encodePngFromRowBands(width, height, rowBands) {
83736
84294
  }
83737
84295
  return assemblePng(width, height, [buildIdatChunk(zlibBytes)]);
83738
84296
  }
83739
- async function encodePngFromPixels(width, height, pixels) {
84297
+ async function encodePngFromPixels(width, height, pixels2) {
83740
84298
  async function* single() {
83741
- yield { pixels, bandHeight: height };
84299
+ yield { pixels: pixels2, bandHeight: height };
83742
84300
  }
83743
84301
  return encodePngFromRowBands(width, height, single());
83744
84302
  }
@@ -86169,6 +86727,7 @@ exports.SLIDE_TRANSITION_KEYFRAMES_CSS = SLIDE_TRANSITION_KEYFRAMES_CSS;
86169
86727
  exports.SLIDE_TRANSITION_LABEL_KEYS = SLIDE_TRANSITION_LABEL_KEYS;
86170
86728
  exports.SLIDE_TRANSITION_OPTIONS = SLIDE_TRANSITION_OPTIONS;
86171
86729
  exports.SLIDE_VIRTUALIZATION_THRESHOLD = SLIDE_VIRTUALIZATION_THRESHOLD;
86730
+ exports.SMARTART_3D_EDIT_LAYER_ATTRIBUTE = SMARTART_3D_EDIT_LAYER_ATTRIBUTE;
86172
86731
  exports.SMARTART_CONNECTOR_OPACITY = SMARTART_CONNECTOR_OPACITY;
86173
86732
  exports.SMARTART_CONNECTOR_STROKE = SMARTART_CONNECTOR_STROKE;
86174
86733
  exports.SMARTART_CONNECTOR_WIDTH = SMARTART_CONNECTOR_WIDTH;
@@ -86470,6 +87029,7 @@ exports.buildLineShadowCss = buildLineShadowCss;
86470
87029
  exports.buildLiveInkStrokeView = buildLiveInkStrokeView;
86471
87030
  exports.buildMirrorTiledBackground = buildMirrorTiledBackground;
86472
87031
  exports.buildMorphAnimationRules = buildMorphAnimationRules;
87032
+ exports.buildMorphIncomingAnchoredOrder = buildMorphIncomingAnchoredOrder;
86473
87033
  exports.buildMorphMergedOrder = buildMorphMergedOrder;
86474
87034
  exports.buildMorphScopedCss = buildMorphScopedCss;
86475
87035
  exports.buildMorphTransitionPlan = buildMorphTransitionPlan;
@@ -86496,6 +87056,7 @@ exports.buildPreviewElements = buildPreviewElements;
86496
87056
  exports.buildPrintDocument = buildPrintDocument;
86497
87057
  exports.buildPrintStyleSheet = buildPrintStyleSheet;
86498
87058
  exports.buildQueryLinkUrl = buildQueryLinkUrl;
87059
+ exports.buildQuickStylesGallery = buildQuickStylesGallery;
86499
87060
  exports.buildRasterPictureElement = buildRasterPictureElement;
86500
87061
  exports.buildRecordRibbon = buildRecordRibbon;
86501
87062
  exports.buildReviewRibbon = buildReviewRibbon;
@@ -86863,6 +87424,7 @@ exports.disableSoftEdgePatch = disableSoftEdgePatch;
86863
87424
  exports.discardAutosaveRecovery = discardAutosaveRecovery;
86864
87425
  exports.dispatchChartSelectionRequest = dispatchChartSelectionRequest;
86865
87426
  exports.dispatchCropRequest = dispatchCropRequest;
87427
+ exports.dispatchStatusBarIntent = dispatchStatusBarIntent;
86866
87428
  exports.dominantDisplacement = dominantDisplacement;
86867
87429
  exports.downloadBlob = downloadBlob;
86868
87430
  exports.downloadDataUrl = downloadDataUrl;
@@ -87012,6 +87574,7 @@ exports.formatSlideCounter = formatSlideCounter;
87012
87574
  exports.formatSnapshotSize = formatSnapshotSize;
87013
87575
  exports.formatTime = formatTime;
87014
87576
  exports.formatVersionTimestamp = formatVersionTimestamp;
87577
+ exports.fractionalClientSize = fractionalClientSize;
87015
87578
  exports.freeformCloseTolerance = freeformCloseTolerance;
87016
87579
  exports.galleryDeckView = galleryDeckView;
87017
87580
  exports.galleryHasItems = galleryHasItems;
@@ -87198,6 +87761,7 @@ exports.getUnrotatedShapeConnectionSites = getUnrotatedShapeConnectionSites;
87198
87761
  exports.getViewerOptionsTab = getViewerOptionsTab;
87199
87762
  exports.getWarpCssTransform = getWarpCssTransform;
87200
87763
  exports.getWarpPath = getWarpPath;
87764
+ exports.ghostMorphPairsHiddenByGhosts = ghostMorphPairsHiddenByGhosts;
87201
87765
  exports.gradientStateFromStyle = gradientStateFromStyle;
87202
87766
  exports.gradientStateOf = gradientStateOf;
87203
87767
  exports.gradientStatePatch = gradientStatePatch;
@@ -87312,6 +87876,7 @@ exports.isExportAbortError = isExportAbortError;
87312
87876
  exports.isFeatureEnabled = isFeatureEnabled;
87313
87877
  exports.isFontFamilyAvailable = isFontFamilyAvailable;
87314
87878
  exports.isFontFamilyInstalledLocally = isFontFamilyInstalledLocally;
87879
+ exports.isForwardedEditLayerEvent = isForwardedEditLayerEvent;
87315
87880
  exports.isFreeformStrokeClosed = isFreeformStrokeClosed;
87316
87881
  exports.isHeaderFooterDateTextVisible = isHeaderFooterDateTextVisible;
87317
87882
  exports.isHeaderFooterFooterTextVisible = isHeaderFooterFooterTextVisible;
@@ -87432,6 +87997,7 @@ exports.measureNormAutofitStepHeightPx = measureNormAutofitStepHeightPx;
87432
87997
  exports.measurePreviewGeometry = measurePreviewGeometry;
87433
87998
  exports.measureSvgViewportRect = measureSvgViewportRect;
87434
87999
  exports.measureTextWidth = measureTextWidth;
88000
+ exports.measureViewportClientSize = measureViewportClientSize;
87435
88001
  exports.mediaFallbackIcon = mediaFallbackIcon;
87436
88002
  exports.mediaFallbackLabelKey = mediaFallbackLabelKey;
87437
88003
  exports.mediaFallbackVisual = mediaFallbackVisual;
@@ -87515,6 +88081,7 @@ exports.numberControl = numberControl;
87515
88081
  exports.observeElementHeight = observeElementHeight;
87516
88082
  exports.observeExternalCollaborationReadiness = observeExternalCollaborationReadiness;
87517
88083
  exports.observeExternalCollaborationSession = observeExternalCollaborationSession;
88084
+ exports.observeViewportClientSize = observeViewportClientSize;
87518
88085
  exports.officeColorSwatchLabel = officeColorSwatchLabel;
87519
88086
  exports.oleActionsVisible = oleActionsVisible;
87520
88087
  exports.ooxmlDashToCssBorderStyle = ooxmlDashToCssBorderStyle;
@@ -87648,6 +88215,7 @@ exports.pushRecentColor = pushRecentColor;
87648
88215
  exports.pushRecentShape = pushRecentShape;
87649
88216
  exports.px = px2;
87650
88217
  exports.quadToCubicControls = quadToCubicControls;
88218
+ exports.quickStyleShapeStyle = quickStyleShapeStyle;
87651
88219
  exports.quickStyleSwatchCss = quickStyleSwatchCss;
87652
88220
  exports.quickStyleSwatchStyleAttr = quickStyleSwatchStyleAttr;
87653
88221
  exports.radarStylePatch = radarStylePatch;
@@ -87812,6 +88380,7 @@ exports.resolveMetricTrackingPx = resolveMetricTrackingPx;
87812
88380
  exports.resolveMorphCrossfadeGroups = resolveMorphCrossfadeGroups;
87813
88381
  exports.resolveMorphGhostIds = resolveMorphGhostIds;
87814
88382
  exports.resolveMorphOverlayArrivals = resolveMorphOverlayArrivals;
88383
+ exports.resolveMorphOverlayLayers = resolveMorphOverlayLayers;
87815
88384
  exports.resolveNotesLevelStyle = resolveNotesLevelStyle;
87816
88385
  exports.resolveNotesSchematicBodyFontSizePx = resolveNotesSchematicBodyFontSizePx;
87817
88386
  exports.resolveNotesSegments = resolveNotesSegments;
@@ -88071,12 +88640,14 @@ exports.splitWordsForUnderline = splitWordsForUnderline;
88071
88640
  exports.splitsUnderlineIntoWords = splitsUnderlineIntoWords;
88072
88641
  exports.startCropSession = startCropSession;
88073
88642
  exports.startMediaAutoplay = startMediaAutoplay;
88643
+ exports.statusBarState = statusBarState;
88074
88644
  exports.statusBarViewMode = statusBarViewMode;
88075
88645
  exports.stepPresenterZoom = stepPresenterZoom;
88076
88646
  exports.stitchContinuousGradientFill = stitchContinuousGradientFill;
88077
88647
  exports.stopAllPersistentAudio = stopAllPersistentAudio;
88078
88648
  exports.storeAudienceContent = storeAudienceContent;
88079
88649
  exports.storePresentationDeck = storePresentationDeck;
88650
+ exports.straddlingStrokeWidth = straddlingStrokeWidth;
88080
88651
  exports.stripEditLayerMarkers = stripEditLayerMarkers;
88081
88652
  exports.stripUnderlineDecoration = stripUnderlineDecoration;
88082
88653
  exports.strokeOnlyPresetPathData = strokeOnlyPresetPathData;