ooxml-ui 0.31.0 → 1.1.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 (115) hide show
  1. package/README.md +16 -0
  2. package/custom-elements.json +10 -0
  3. package/dist/{chunk-OXKWNNNJ.js → chunk-3FPW7M6U.js} +1 -1
  4. package/dist/{chunk-XDUYS4KK.js → chunk-BEN3453I.js} +1 -1
  5. package/dist/{chunk-HZ422LTR.js → chunk-BOX43CZD.js} +1 -0
  6. package/dist/{chunk-3GE2NHNG.js → chunk-KVKKXRL7.js} +121 -83
  7. package/dist/{chunk-2QW4QE56.js → chunk-M5DTJSOV.js} +105 -70
  8. package/dist/{chunk-ZV2Z4IWH.js → chunk-USDLALB5.js} +4 -1
  9. package/dist/{chunk-RAZAJMHK.js → chunk-ZU7GX4SY.js} +4 -4
  10. package/dist/controls.js +4 -4
  11. package/dist/docx/hard-break-command.d.ts +1 -3
  12. package/dist/docx/link-commands.d.ts +4 -15
  13. package/dist/docx/localization-strings.d.ts +1 -1
  14. package/dist/docx/localization.d.ts +0 -1
  15. package/dist/docx/note-editor.d.ts +3 -2
  16. package/dist/docx/run-styles.d.ts +1 -1
  17. package/dist/docx/schema.d.ts +1 -1
  18. package/dist/docx/toggle-commands.d.ts +2 -8
  19. package/dist/docx.js +118 -321
  20. package/dist/form/gradient-direction-gallery.d.ts +19 -0
  21. package/dist/form/gradient-gallery-preview.d.ts +3 -0
  22. package/dist/form/gradient-preset-gallery.d.ts +16 -0
  23. package/dist/form/gradient-stop-track.d.ts +20 -0
  24. package/dist/form/number-range.d.ts +12 -0
  25. package/dist/icons.d.ts.map +1 -1
  26. package/dist/icons.js +1 -1
  27. package/dist/index.js +7 -7
  28. package/dist/menu/menu-button.d.ts +10 -0
  29. package/dist/menu/menu-button.d.ts.map +1 -1
  30. package/dist/pptx/{chart-3d-view-scene-IANLDFIE.mjs → chart-3d-view-scene-2KRQ5667.mjs} +2 -2
  31. package/dist/pptx/{chart-3d-view-scene-3DK5TUBZ.cjs → chart-3d-view-scene-36DMZWZ3.cjs} +37 -37
  32. package/dist/pptx/{chunk-C42ZL35K.mjs → chunk-ADOC5JLI.mjs} +1 -1
  33. package/dist/pptx/{chunk-QM4FGZG4.cjs → chunk-AIL3BNZS.cjs} +31 -131
  34. package/dist/pptx/{chunk-WLETAW3T.cjs → chunk-CJU4P5FT.cjs} +33 -13
  35. package/dist/pptx/{chunk-6SCK57RJ.cjs → chunk-KPZWYF44.cjs} +220 -342
  36. package/dist/pptx/{chunk-XQZWZMGZ.cjs → chunk-SM3CWDIQ.cjs} +7 -17
  37. package/dist/pptx/{chunk-JSBGBVBH.mjs → chunk-VRFNAF3Q.mjs} +7 -17
  38. package/dist/pptx/{chunk-EVGSFPUV.mjs → chunk-Y2W4SZER.mjs} +71 -202
  39. package/dist/pptx/{chunk-7JEMQW6R.mjs → chunk-YARCML7O.mjs} +11 -122
  40. package/dist/pptx/{chunk-OHE5UXST.cjs → chunk-YHA6XAB3.cjs} +1 -1
  41. package/dist/pptx/{chunk-X2F6PA2D.mjs → chunk-YOGDIDPB.mjs} +22 -3
  42. package/dist/pptx/dom/index.cjs +238 -238
  43. package/dist/pptx/dom/index.mjs +8 -8
  44. package/dist/pptx/export/html2canvas-clone.cjs +2 -2
  45. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  46. package/dist/pptx/i18n/index.cjs +6 -6
  47. package/dist/pptx/i18n/index.mjs +1 -1
  48. package/dist/pptx/i18n/translator.d.ts.map +1 -1
  49. package/dist/pptx/index.cjs +3006 -2990
  50. package/dist/pptx/index.mjs +5 -5
  51. package/dist/pptx/render/chart-combo-stock.cjs +3 -3
  52. package/dist/pptx/render/chart-combo-stock.mjs +1 -1
  53. package/dist/pptx/render/chart-manual-layout.d.ts +2 -20
  54. package/dist/pptx/render/chart-manual-layout.d.ts.map +1 -1
  55. package/dist/pptx/render/chart-overlays.cjs +7 -7
  56. package/dist/pptx/render/chart-overlays.mjs +1 -1
  57. package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
  58. package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
  59. package/dist/pptx/render/chart-svg-def-types.d.ts +6 -1
  60. package/dist/pptx/render/chart-svg-def-types.d.ts.map +1 -1
  61. package/dist/pptx/render/chart-view-model-dom-helpers.d.ts +1 -1
  62. package/dist/pptx/render/chart-view-model-dom-helpers.d.ts.map +1 -1
  63. package/dist/pptx/render/chart-view-model.cjs +41 -41
  64. package/dist/pptx/render/chart-view-model.mjs +1 -1
  65. package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
  66. package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
  67. package/dist/pptx/render/connector-elbow-geometry.d.ts +7 -43
  68. package/dist/pptx/render/connector-elbow-geometry.d.ts.map +1 -1
  69. package/dist/pptx/render/element-interaction.d.ts +1 -1
  70. package/dist/pptx/render/element-interaction.d.ts.map +1 -1
  71. package/dist/pptx/render/gradient-picker.d.ts.map +1 -1
  72. package/dist/pptx/render/index.d.ts +2 -0
  73. package/dist/pptx/render/index.d.ts.map +1 -1
  74. package/dist/pptx/render/path-gradient-rect.d.ts +1 -75
  75. package/dist/pptx/render/path-gradient-rect.d.ts.map +1 -1
  76. package/dist/pptx/render/rotate-handle-placement.d.ts +1 -27
  77. package/dist/pptx/render/rotate-handle-placement.d.ts.map +1 -1
  78. package/dist/pptx/render/rotation-drag.d.ts +1 -7
  79. package/dist/pptx/render/rotation-drag.d.ts.map +1 -1
  80. package/dist/pptx/render/viewer-root-options.d.ts +46 -0
  81. package/dist/pptx/render/viewer-root-options.d.ts.map +1 -0
  82. package/dist/pptx/web-components/registration-contract.d.ts.map +1 -1
  83. package/dist/presence.js +2 -2
  84. package/dist/registry.d.ts +2 -0
  85. package/dist/registry.d.ts.map +1 -1
  86. package/dist/smartart.js +2 -2
  87. package/dist/teams/app/files-panel.d.ts +8 -3
  88. package/dist/teams/app/teams-app.d.ts +1 -0
  89. package/dist/teams/app/teams-settings.d.ts +6 -0
  90. package/dist/teams.js +5 -5
  91. package/dist/visio/render-fill.d.ts +2 -1
  92. package/dist/visio/render-svg.d.ts +2 -0
  93. package/dist/visio/ribbon-action.d.ts +8 -1
  94. package/dist/visio/ribbon-parts.d.ts +2 -1
  95. package/dist/visio/ribbon-router.d.ts +4 -2
  96. package/dist/visio/viewer-commands.d.ts +3 -3
  97. package/dist/visio/viewer-draw-tool.d.ts +16 -6
  98. package/dist/visio/viewer-handle-events.d.ts +19 -0
  99. package/dist/visio/viewer-line-endpoints.d.ts +14 -0
  100. package/dist/visio/viewer-rotation-handle.d.ts +14 -0
  101. package/dist/visio/viewer-rotation-preview.d.ts +7 -0
  102. package/dist/visio.js +742 -90
  103. package/dist/xlsx/chart-area-pane.d.ts +9 -0
  104. package/dist/xlsx/chart-fill-binding.d.ts +23 -0
  105. package/dist/xlsx/chart-gradient-preview.d.ts +8 -0
  106. package/dist/xlsx/chart-series-fill.d.ts +2 -1
  107. package/dist/xlsx/chart-series-gradient-type.d.ts +9 -0
  108. package/dist/xlsx/chart-series-gradient.d.ts +8 -0
  109. package/dist/xlsx/chart-series-pane.d.ts +2 -1
  110. package/dist/xlsx/chart-series-range-preview.d.ts +7 -0
  111. package/dist/xlsx/chart-series-transparency.d.ts +2 -1
  112. package/dist/xlsx/grid/measure.d.ts +5 -0
  113. package/dist/xlsx/grid/styles.d.ts +1 -1
  114. package/dist/xlsx.js +965 -105
  115. package/package.json +3 -3
@@ -4,7 +4,7 @@ var chunkWSTWYZFM_cjs = require('./chunk-WSTWYZFM.cjs');
4
4
  var chunkX7FS7XHU_cjs = require('./chunk-X7FS7XHU.cjs');
5
5
  var chunkUEF4BFW4_cjs = require('./chunk-UEF4BFW4.cjs');
6
6
  var chunk52LKIMK3_cjs = require('./chunk-52LKIMK3.cjs');
7
- var chunkWLETAW3T_cjs = require('./chunk-WLETAW3T.cjs');
7
+ var chunkCJU4P5FT_cjs = require('./chunk-CJU4P5FT.cjs');
8
8
  var chunkXOAXPD2W_cjs = require('./chunk-XOAXPD2W.cjs');
9
9
  var chunkBSGCZ4JZ_cjs = require('./chunk-BSGCZ4JZ.cjs');
10
10
  var chunkIOOI63TH_cjs = require('./chunk-IOOI63TH.cjs');
@@ -12,15 +12,15 @@ var chunkZJFN5POF_cjs = require('./chunk-ZJFN5POF.cjs');
12
12
  var chunkSTXGHV25_cjs = require('./chunk-STXGHV25.cjs');
13
13
  var chunkWB25PCHQ_cjs = require('./chunk-WB25PCHQ.cjs');
14
14
  var chunkW3X2UVYQ_cjs = require('./chunk-W3X2UVYQ.cjs');
15
- var chunkQM4FGZG4_cjs = require('./chunk-QM4FGZG4.cjs');
15
+ var chunkAIL3BNZS_cjs = require('./chunk-AIL3BNZS.cjs');
16
16
  var chunkFOE75Z6N_cjs = require('./chunk-FOE75Z6N.cjs');
17
17
  var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
- var chunkOHE5UXST_cjs = require('./chunk-OHE5UXST.cjs');
18
+ var chunkYHA6XAB3_cjs = require('./chunk-YHA6XAB3.cjs');
19
19
  var chunkX4FNVH7J_cjs = require('./chunk-X4FNVH7J.cjs');
20
20
  var chunkUPN5FFKP_cjs = require('./chunk-UPN5FFKP.cjs');
21
21
  var chunkY4LTLCQP_cjs = require('./chunk-Y4LTLCQP.cjs');
22
22
  var chunkUSBRSEJK_cjs = require('./chunk-USBRSEJK.cjs');
23
- var chunkXQZWZMGZ_cjs = require('./chunk-XQZWZMGZ.cjs');
23
+ var chunkSM3CWDIQ_cjs = require('./chunk-SM3CWDIQ.cjs');
24
24
  var chunkOGJRSAGH_cjs = require('./chunk-OGJRSAGH.cjs');
25
25
  var chunkEW5DW5KR_cjs = require('./chunk-EW5DW5KR.cjs');
26
26
  var pptx = require('ooxml-core/pptx');
@@ -68,12 +68,12 @@ var diagram = require('ooxml-core/diagram');
68
68
  var slideSearch = require('ooxml-core/pptx/editor/render/slide-search');
69
69
  var findReplace = require('ooxml-core/pptx/editor/render/find-replace');
70
70
  var groupDrill = require('ooxml-core/pptx/editor/render/group-drill');
71
+ var chart = require('ooxml-core/chart');
71
72
  var themeEditorPresets = require('ooxml-core/pptx/editor/render/theme-editor-presets');
72
73
  var templateEditing = require('ooxml-core/pptx/editor/render/template-editing');
73
74
  var ui = require('ooxml-core/pptx/ui');
74
75
  var deckSaveEncryption = require('ooxml-core/pptx/editor/render/deck-save-encryption');
75
76
  var tableStyleMapEdits = require('ooxml-core/pptx/editor/render/table-style-map-edits');
76
- var chart = require('ooxml-core/chart');
77
77
  var editorMutations = require('ooxml-core/pptx/editor/render/editor-mutations');
78
78
  var slideSizeRescale = require('ooxml-core/pptx/editor/render/slide-size-rescale');
79
79
  var tableStyleEditorParts = require('ooxml-core/pptx/editor/render/table-style-editor-parts');
@@ -1070,7 +1070,7 @@ function buildRectPathGradientDef(stops, id, focalPoint, fillToRect) {
1070
1070
  color: stop.color,
1071
1071
  ...typeof stop.opacity === "number" ? { opacity: stop.opacity } : {}
1072
1072
  }));
1073
- const markup = chunkQM4FGZG4_cjs.buildRectPathGradientSvg(rectStops, focalPoint, fillToRect);
1073
+ const markup = chunkAIL3BNZS_cjs.buildRectPathGradientSvg(rectStops, focalPoint, fillToRect);
1074
1074
  return { kind: "rectPath", id, href: `data:image/svg+xml,${encodeURIComponent(markup)}` };
1075
1075
  }
1076
1076
  function rectPathGradientMarkup(def) {
@@ -1084,9 +1084,9 @@ function buildSvgStrokePatternDef(style, elementId) {
1084
1084
  if (!style || style.strokeFillMode !== "pattern" || !style.strokePatternPreset) {
1085
1085
  return void 0;
1086
1086
  }
1087
- const fg = chunkQM4FGZG4_cjs.normalizeHexColor(style.strokeColor, "#000000");
1088
- const bg = chunkQM4FGZG4_cjs.normalizeHexColor(style.strokePatternBackgroundColor, "#ffffff");
1089
- const tile4 = chunkQM4FGZG4_cjs.getPatternTile(style.strokePatternPreset, fg, bg);
1087
+ const fg = chunkAIL3BNZS_cjs.normalizeHexColor(style.strokeColor, "#000000");
1088
+ const bg = chunkAIL3BNZS_cjs.normalizeHexColor(style.strokePatternBackgroundColor, "#ffffff");
1089
+ const tile4 = chunkAIL3BNZS_cjs.getPatternTile(style.strokePatternPreset, fg, bg);
1090
1090
  if (!tile4) {
1091
1091
  return void 0;
1092
1092
  }
@@ -1109,7 +1109,7 @@ function svgGradientId(elementId, suffix = "grad") {
1109
1109
  return `pptx-${suffix}-${seed}`;
1110
1110
  }
1111
1111
  function toSvgStops(stops) {
1112
- return chunkQM4FGZG4_cjs.sanitizeGradientStops(stops).map((stop) => ({
1112
+ return chunkAIL3BNZS_cjs.sanitizeGradientStops(stops).map((stop) => ({
1113
1113
  offset: round4(stop.position / 100),
1114
1114
  color: stop.color,
1115
1115
  ...typeof stop.opacity === "number" ? { opacity: round4(stop.opacity) } : {}
@@ -1136,7 +1136,7 @@ function buildFromSource(source, id) {
1136
1136
  if ((source.pathType || "circle") === "rect") {
1137
1137
  return buildRectPathGradientDef(stops, id, source.focalPoint, source.fillToRect);
1138
1138
  }
1139
- const { cx, cy } = chunkQM4FGZG4_cjs.computeGradientCenter(source.fillToRect, source.focalPoint);
1139
+ const { cx, cy } = chunkAIL3BNZS_cjs.computeGradientCenter(source.fillToRect, source.focalPoint);
1140
1140
  const fx = cx / 100;
1141
1141
  const fy = cy / 100;
1142
1142
  const r = Math.hypot(Math.max(fx, 1 - fx), Math.max(fy, 1 - fy));
@@ -1316,11 +1316,11 @@ function buildStrokeOutline(element) {
1316
1316
  return {
1317
1317
  d,
1318
1318
  paint,
1319
- stroke: paint ? svgGradientFillRef(paint) : chunkQM4FGZG4_cjs.colorWithOpacity(style?.strokeColor ?? chunkQM4FGZG4_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1319
+ stroke: paint ? svgGradientFillRef(paint) : chunkAIL3BNZS_cjs.colorWithOpacity(style?.strokeColor ?? chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1320
1320
  strokeWidth,
1321
1321
  strands: outlineStrands(style?.compoundLine, strokeWidth),
1322
- dashArray: chunkQM4FGZG4_cjs.getSvgStrokeDasharray(
1323
- chunkQM4FGZG4_cjs.normalizeStrokeDashType(style?.strokeDash),
1322
+ dashArray: chunkAIL3BNZS_cjs.getSvgStrokeDasharray(
1323
+ chunkAIL3BNZS_cjs.normalizeStrokeDashType(style?.strokeDash),
1324
1324
  Math.max(strokeWidth, 1),
1325
1325
  style?.customDashSegments
1326
1326
  ),
@@ -1499,12 +1499,12 @@ function getComputedStrokeStyle(element) {
1499
1499
  return { ...NO_STROKE, ...joins };
1500
1500
  }
1501
1501
  const borderWidth = width;
1502
- const borderStyle = chunkQM4FGZG4_cjs.getCssBorderDashStyle(
1503
- chunkQM4FGZG4_cjs.normalizeStrokeDashType(style.strokeDash),
1502
+ const borderStyle = chunkAIL3BNZS_cjs.getCssBorderDashStyle(
1503
+ chunkAIL3BNZS_cjs.normalizeStrokeDashType(style.strokeDash),
1504
1504
  style.compoundLine
1505
1505
  );
1506
- const rawColor = style.strokeColor ?? chunkQM4FGZG4_cjs.DEFAULT_STROKE_COLOR;
1507
- const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkQM4FGZG4_cjs.colorWithOpacity(chunkQM4FGZG4_cjs.normalizeHexColor(rawColor, chunkQM4FGZG4_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
1506
+ const rawColor = style.strokeColor ?? chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR;
1507
+ const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkAIL3BNZS_cjs.colorWithOpacity(chunkAIL3BNZS_cjs.normalizeHexColor(rawColor, chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
1508
1508
  return {
1509
1509
  borderWidth,
1510
1510
  borderStyle,
@@ -1665,7 +1665,7 @@ function resolveGroupChildFill(child, parentGroupFill) {
1665
1665
  if (!parentGroupFill || !pptx.hasShapeProperties(child) || child.shapeStyle?.fillMode !== "group") {
1666
1666
  return void 0;
1667
1667
  }
1668
- return chunkQM4FGZG4_cjs.getComputedFillStyle(child, parentGroupFill);
1668
+ return chunkAIL3BNZS_cjs.getComputedFillStyle(child, parentGroupFill);
1669
1669
  }
1670
1670
  function getFrameInverseTransform(element) {
1671
1671
  const transforms = [];
@@ -1717,9 +1717,9 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1717
1717
  }
1718
1718
  if (colorNode["a:scrgbClr"]) {
1719
1719
  const scrgb = colorNode["a:scrgbClr"];
1720
- const red = chunkQM4FGZG4_cjs.parseDrawingPercent(scrgb["@_r"]);
1721
- const green = chunkQM4FGZG4_cjs.parseDrawingPercent(scrgb["@_g"]);
1722
- const blue = chunkQM4FGZG4_cjs.parseDrawingPercent(scrgb["@_b"]);
1720
+ const red = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_r"]);
1721
+ const green = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_g"]);
1722
+ const blue = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_b"]);
1723
1723
  if (red !== void 0 && green !== void 0 && blue !== void 0) {
1724
1724
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1725
1725
  const base2 = `#${toHex2(red * 255)}${toHex2(green * 255)}${toHex2(blue * 255)}`;
@@ -1759,8 +1759,8 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1759
1759
  const lumRaw = Number.parseFloat(String(hslNode["@_lum"] ?? ""));
1760
1760
  if (Number.isFinite(hueRaw) && Number.isFinite(satRaw) && Number.isFinite(lumRaw)) {
1761
1761
  const h = hueRaw / 6e4;
1762
- const s = chunkQM4FGZG4_cjs.clampUnitInterval(satRaw / 1e5);
1763
- const l = chunkQM4FGZG4_cjs.clampUnitInterval(lumRaw / 1e5);
1762
+ const s = chunkAIL3BNZS_cjs.clampUnitInterval(satRaw / 1e5);
1763
+ const l = chunkAIL3BNZS_cjs.clampUnitInterval(lumRaw / 1e5);
1764
1764
  const rgb = pptx.hslToRgb(h, s, l);
1765
1765
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1766
1766
  const base2 = `#${toHex2(rgb.r)}${toHex2(rgb.g)}${toHex2(rgb.b)}`;
@@ -1800,11 +1800,11 @@ function parseDrawingColorOpacity(colorNode) {
1800
1800
  if (!colorChoice) {
1801
1801
  return void 0;
1802
1802
  }
1803
- const alpha = chunkQM4FGZG4_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1804
- const alphaMod = chunkQM4FGZG4_cjs.parseDrawingPercent(
1803
+ const alpha = chunkAIL3BNZS_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1804
+ const alphaMod = chunkAIL3BNZS_cjs.parseDrawingPercent(
1805
1805
  colorChoice["a:alphaMod"]?.["@_val"]
1806
1806
  );
1807
- const alphaOff = chunkQM4FGZG4_cjs.parseDrawingPercent(
1807
+ const alphaOff = chunkAIL3BNZS_cjs.parseDrawingPercent(
1808
1808
  colorChoice["a:alphaOff"]?.["@_val"]
1809
1809
  );
1810
1810
  if (alpha === void 0 && alphaMod === void 0 && alphaOff === void 0) {
@@ -1817,7 +1817,7 @@ function parseDrawingColorOpacity(colorNode) {
1817
1817
  if (alphaOff !== void 0) {
1818
1818
  opacity += alphaOff;
1819
1819
  }
1820
- return chunkQM4FGZG4_cjs.clampUnitInterval(opacity);
1820
+ return chunkAIL3BNZS_cjs.clampUnitInterval(opacity);
1821
1821
  }
1822
1822
  function substituteScriptFont(name, panose, baseFontFamily) {
1823
1823
  return name ? pptx.getSubstituteFontFamily(name, pptx.parsePanoseString(panose)) : baseFontFamily;
@@ -2028,7 +2028,7 @@ function buildPatternOverlayTile(pattern) {
2028
2028
  if (!pattern) {
2029
2029
  return void 0;
2030
2030
  }
2031
- const tile4 = chunkQM4FGZG4_cjs.getPatternTile(
2031
+ const tile4 = chunkAIL3BNZS_cjs.getPatternTile(
2032
2032
  pattern.preset,
2033
2033
  pattern.foreground ?? "#000000",
2034
2034
  pattern.background ?? "#ffffff"
@@ -3582,10 +3582,10 @@ function getMeasureCtx() {
3582
3582
  return measureCtx;
3583
3583
  }
3584
3584
  function envelopeFontSizePx(font) {
3585
- return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
3585
+ return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
3586
3586
  }
3587
3587
  function toCanvasFont(font, sizePx = envelopeFontSizePx(font)) {
3588
- const family2 = font.fontFamily || chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY;
3588
+ const family2 = font.fontFamily || chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
3589
3589
  return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${sizePx}px ${family2}`;
3590
3590
  }
3591
3591
  function enableKerning(ctx) {
@@ -4580,7 +4580,7 @@ function createGlyphOutlineLookup(cache) {
4580
4580
  return (char, font, x, y) => {
4581
4581
  const parsed = cache.get(font.fontFamily, font.bold, font.italic);
4582
4582
  if (parsed) {
4583
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
4583
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
4584
4584
  const commands = extractGlyphOutlineCommands(parsed, char, x, y, size);
4585
4585
  if (commands) {
4586
4586
  return commands;
@@ -6768,7 +6768,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6768
6768
  let rSquared = 0;
6769
6769
  switch (trendline.trendlineType) {
6770
6770
  case "linear": {
6771
- const reg = chunkQM4FGZG4_cjs.computeLinearRegression(xVals, yVals);
6771
+ const reg = chunkAIL3BNZS_cjs.computeLinearRegression(xVals, yVals);
6772
6772
  const intercept = trendline.intercept;
6773
6773
  const slope = intercept !== void 0 ? yVals.reduce((s, y, i) => s + (y - intercept) * xVals[i], 0) / xVals.reduce((s, x) => s + x * x, 0) : reg.slope;
6774
6774
  const b = intercept ?? reg.intercept;
@@ -6783,7 +6783,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6783
6783
  if (logY.length < 2) {
6784
6784
  return { points: [], equation: "", rSquared: 0 };
6785
6785
  }
6786
- const reg = chunkQM4FGZG4_cjs.computeLinearRegression(filteredX, logY);
6786
+ const reg = chunkAIL3BNZS_cjs.computeLinearRegression(filteredX, logY);
6787
6787
  const a = Math.exp(reg.intercept);
6788
6788
  const b = reg.slope;
6789
6789
  evalFn = (x) => a * Math.exp(b * x);
@@ -6797,7 +6797,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6797
6797
  if (lnX.length < 2) {
6798
6798
  return { points: [], equation: "", rSquared: 0 };
6799
6799
  }
6800
- const reg = chunkQM4FGZG4_cjs.computeLinearRegression(lnX, filteredY);
6800
+ const reg = chunkAIL3BNZS_cjs.computeLinearRegression(lnX, filteredY);
6801
6801
  evalFn = (x) => x > 0 ? reg.slope * Math.log(x) + reg.intercept : 0;
6802
6802
  equation = `y = ${reg.slope.toFixed(2)}ln(x) + ${reg.intercept.toFixed(2)}`;
6803
6803
  rSquared = reg.rSquared;
@@ -6809,7 +6809,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6809
6809
  if (logX.length < 2) {
6810
6810
  return { points: [], equation: "", rSquared: 0 };
6811
6811
  }
6812
- const reg = chunkQM4FGZG4_cjs.computeLinearRegression(logX, logY);
6812
+ const reg = chunkAIL3BNZS_cjs.computeLinearRegression(logX, logY);
6813
6813
  const a = Math.exp(reg.intercept);
6814
6814
  evalFn = (x) => x > 0 ? a * x ** reg.slope : 0;
6815
6815
  equation = `y = ${a.toFixed(2)}x^${reg.slope.toFixed(2)}`;
@@ -6818,10 +6818,10 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6818
6818
  }
6819
6819
  case "polynomial": {
6820
6820
  const order = Math.min(trendline.order ?? 2, 6);
6821
- const coeffs = chunkQM4FGZG4_cjs.fitPolynomial(xVals, yVals, order);
6821
+ const coeffs = chunkAIL3BNZS_cjs.fitPolynomial(xVals, yVals, order);
6822
6822
  evalFn = (x) => coeffs.reduce((s, c, i) => s + c * x ** i, 0);
6823
6823
  equation = coeffs.map((c, i) => `${c.toFixed(2)}x^${i}`).join(" + ");
6824
- rSquared = chunkQM4FGZG4_cjs.computeRSquared(xVals, yVals, evalFn);
6824
+ rSquared = chunkAIL3BNZS_cjs.computeRSquared(xVals, yVals, evalFn);
6825
6825
  break;
6826
6826
  }
6827
6827
  case "movingAvg": {
@@ -7159,7 +7159,7 @@ var COMBO_SERIES_TYPE_OPTIONS = [
7159
7159
  function patchChartData(data, patch) {
7160
7160
  const { chartType, ...rest } = patch;
7161
7161
  if (chartType === "pareto") {
7162
- return { ...chunkQM4FGZG4_cjs.applyParetoConversion(data), ...rest };
7162
+ return { ...chunkAIL3BNZS_cjs.applyParetoConversion(data), ...rest };
7163
7163
  }
7164
7164
  if (chartType && chartType !== data.chartType) {
7165
7165
  const adapted = pptx.chartDataChangeType(data, chartType);
@@ -7221,8 +7221,8 @@ function buildParetoInsertData() {
7221
7221
  layout: "histogram",
7222
7222
  binCount: PARETO_BIN_COUNT
7223
7223
  };
7224
- const bins = chunkQM4FGZG4_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7225
- const ordered = chunkQM4FGZG4_cjs.orderParetoEntries(
7224
+ const bins = chunkAIL3BNZS_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7225
+ const ordered = chunkAIL3BNZS_cjs.orderParetoEntries(
7226
7226
  bins.map((bin, index) => ({ value: bin.value, label: bin.label, sourcePointIndex: index }))
7227
7227
  );
7228
7228
  return {
@@ -7235,7 +7235,7 @@ function buildParetoInsertData() {
7235
7235
  },
7236
7236
  {
7237
7237
  name: "Cumulative %",
7238
- values: chunkQM4FGZG4_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7238
+ values: chunkAIL3BNZS_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7239
7239
  histogramOptions: { layout: "pareto" }
7240
7240
  }
7241
7241
  ]
@@ -7498,7 +7498,7 @@ var FILL_PATTERN_LABEL_KEYS = {
7498
7498
  trellis: "pptx.fillPatterns.trellis",
7499
7499
  zigZag: "pptx.fillPatterns.zigZag"
7500
7500
  };
7501
- var PATTERN_PRESET_OPTIONS = chunkQM4FGZG4_cjs.OOXML_PATTERN_PRESETS.map(
7501
+ var PATTERN_PRESET_OPTIONS = chunkAIL3BNZS_cjs.OOXML_PATTERN_PRESETS.map(
7502
7502
  (value) => ({ value, labelKey: FILL_PATTERN_LABEL_KEYS[value] })
7503
7503
  );
7504
7504
 
@@ -7661,7 +7661,7 @@ function findPreset(id) {
7661
7661
  }
7662
7662
  function buildChartStylePresets(chartData) {
7663
7663
  return CHART_STYLE_PRESETS.map(({ id, labelKey, styleId }) => {
7664
- const colors = chunkQM4FGZG4_cjs.getChartStylePalette(styleId);
7664
+ const colors = chunkAIL3BNZS_cjs.getChartStylePalette(styleId);
7665
7665
  return {
7666
7666
  id,
7667
7667
  labelKey,
@@ -7695,7 +7695,7 @@ function applyChartStylePreset(chartData, presetId) {
7695
7695
  if (!preset2) {
7696
7696
  return null;
7697
7697
  }
7698
- const colors = [...chunkQM4FGZG4_cjs.getChartStylePalette(preset2.styleId)];
7698
+ const colors = [...chunkAIL3BNZS_cjs.getChartStylePalette(preset2.styleId)];
7699
7699
  return {
7700
7700
  ...chartData,
7701
7701
  colorPalette: colors,
@@ -7759,7 +7759,7 @@ function applyChartElementToggle(chartData, key, checked) {
7759
7759
  style: { ...chartData.style, ...chartDataLabelsTogglePatch(chartData.style, checked) }
7760
7760
  });
7761
7761
  case "gridlines":
7762
- return patchChartData(chartData, chunkQM4FGZG4_cjs.chartGridlinesPatch(chartData, checked));
7762
+ return patchChartData(chartData, chunkAIL3BNZS_cjs.chartGridlinesPatch(chartData, checked));
7763
7763
  case "axes":
7764
7764
  return patchChartData(chartData, chartAxesVisibilityPatch(chartData, checked));
7765
7765
  case "axisTitles":
@@ -7798,7 +7798,7 @@ function buildElements(chartData) {
7798
7798
  {
7799
7799
  key: "gridlines",
7800
7800
  labelKey: "pptx.chart.showGridlines",
7801
- checked: chunkQM4FGZG4_cjs.chartGridlinesState(chartData)
7801
+ checked: chunkAIL3BNZS_cjs.chartGridlinesState(chartData)
7802
7802
  },
7803
7803
  {
7804
7804
  key: "dataLabels",
@@ -8210,17 +8210,17 @@ function chartEventPathElements(event) {
8210
8210
  }
8211
8211
  function findChartPartElementInEvent(event) {
8212
8212
  for (const el of chartEventPathElements(event)) {
8213
- if (el.getAttribute(chunkWLETAW3T_cjs.CHART_PART_ATTR) !== null) {
8213
+ if (el.getAttribute(chunkCJU4P5FT_cjs.CHART_PART_ATTR) !== null) {
8214
8214
  return el;
8215
8215
  }
8216
8216
  }
8217
8217
  return null;
8218
8218
  }
8219
8219
  function findChartPartInEvent(event) {
8220
- return chunkWLETAW3T_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8220
+ return chunkCJU4P5FT_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8221
8221
  }
8222
8222
  function isChartTitleEvent(event) {
8223
- return findChartPartElementInEvent(event)?.getAttribute(chunkWLETAW3T_cjs.CHART_PART_ATTR) === "title";
8223
+ return findChartPartElementInEvent(event)?.getAttribute(chunkCJU4P5FT_cjs.CHART_PART_ATTR) === "title";
8224
8224
  }
8225
8225
 
8226
8226
  // src/pptx/render/chart-interaction-mark-drag.ts
@@ -8255,14 +8255,14 @@ function advanceChartMarkDrag(state, clientX, clientY, rect3) {
8255
8255
  return null;
8256
8256
  }
8257
8257
  const travelled = Math.hypot(clientX - state.startClientX, clientY - state.startClientY);
8258
- if (!state.moved && travelled < chunkWLETAW3T_cjs.CHART_DRAG_THRESHOLD_PX) {
8258
+ if (!state.moved && travelled < chunkCJU4P5FT_cjs.CHART_DRAG_THRESHOLD_PX) {
8259
8259
  return null;
8260
8260
  }
8261
8261
  if (rect3.width === 0 || rect3.height === 0) {
8262
8262
  return null;
8263
8263
  }
8264
8264
  state.moved = true;
8265
- const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkWLETAW3T_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkWLETAW3T_cjs.withChartPointValue(
8265
+ const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkCJU4P5FT_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkCJU4P5FT_cjs.withChartPointValue(
8266
8266
  state.baseChartData,
8267
8267
  state.part.seriesIndex,
8268
8268
  state.part.pointIndex,
@@ -11828,7 +11828,7 @@ function getAnimationColorBaseStyle(element, options = {}) {
11828
11828
  }
11829
11829
  const style = {};
11830
11830
  if (options.animatesFill) {
11831
- const fill = chunkQM4FGZG4_cjs.getComputedFillStyle(element, options.parentGroupFill);
11831
+ const fill = chunkAIL3BNZS_cjs.getComputedFillStyle(element, options.parentGroupFill);
11832
11832
  style[ANIMATION_COLOR_BASE_PROPERTIES.fill] = fill?.backgroundColor ?? element.shapeStyle?.fillColor ?? "currentColor";
11833
11833
  }
11834
11834
  if (options.animatesStroke) {
@@ -19887,7 +19887,7 @@ function gradientCssFromFill(fill, colorScheme) {
19887
19887
  position: stop.position
19888
19888
  }))
19889
19889
  };
19890
- return chunkQM4FGZG4_cjs.buildGradientCss(shapeLike);
19890
+ return chunkAIL3BNZS_cjs.buildGradientCss(shapeLike);
19891
19891
  }
19892
19892
  function applyStyleFill(fill, colorScheme, css, fallback) {
19893
19893
  if (fill?.noFill) {
@@ -19913,13 +19913,13 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19913
19913
  }
19914
19914
  }
19915
19915
  if (fill?.pattern) {
19916
- const fg = chunkQM4FGZG4_cjs.normalizeHexColor(
19916
+ const fg = chunkAIL3BNZS_cjs.normalizeHexColor(
19917
19917
  resolveStyleFillColor(fill.pattern.foreground, colorScheme),
19918
19918
  "#000000"
19919
- ), bg = chunkQM4FGZG4_cjs.normalizeHexColor(
19919
+ ), bg = chunkAIL3BNZS_cjs.normalizeHexColor(
19920
19920
  resolveStyleFillColor(fill.pattern.background, colorScheme),
19921
19921
  "#ffffff"
19922
- ), svg2 = chunkQM4FGZG4_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19922
+ ), svg2 = chunkAIL3BNZS_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19923
19923
  clearBackground(css);
19924
19924
  if (svg2) {
19925
19925
  css.backgroundImage = `url("data:image/svg+xml,${encodeURIComponent(svg2)}")`;
@@ -19928,7 +19928,7 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19928
19928
  return true;
19929
19929
  }
19930
19930
  const resolved = resolveStyleFillColor(fill, colorScheme);
19931
- const color = (resolved && fill?.alpha !== void 0 ? chunkQM4FGZG4_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19931
+ const color = (resolved && fill?.alpha !== void 0 ? chunkAIL3BNZS_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19932
19932
  if (color) {
19933
19933
  layerSolidColor(css, color);
19934
19934
  return true;
@@ -20169,8 +20169,8 @@ function getMeasureContext() {
20169
20169
  return measureContext2;
20170
20170
  }
20171
20171
  function toCanvasFont2(font) {
20172
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
20173
- const family2 = font.fontFamily || chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY;
20172
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
20173
+ const family2 = font.fontFamily || chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
20174
20174
  return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family2}`;
20175
20175
  }
20176
20176
  function advancesOf(ctx, canvasFont, chars) {
@@ -20301,7 +20301,7 @@ function resolveTextOutlineDashCss(s, fillColor) {
20301
20301
  if (s.textFillGradient || s.textFillPattern || s.textFillBlipUrl || s.highlightColor) {
20302
20302
  return void 0;
20303
20303
  }
20304
- const strokeColor = chunkQM4FGZG4_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20304
+ const strokeColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20305
20305
  return {
20306
20306
  WebkitTextStroke: `${width}px transparent`,
20307
20307
  WebkitTextFillColor: s.textFillNone ? "transparent" : fillColor ?? "currentColor",
@@ -20670,13 +20670,13 @@ function applyExtraRunProps(style, s, text3, font) {
20670
20670
  style.fontKerning = fontKerning;
20671
20671
  }
20672
20672
  if (s.highlightColor) {
20673
- style.backgroundColor = chunkQM4FGZG4_cjs.normalizeHexColor(s.highlightColor, "transparent");
20673
+ style.backgroundColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.highlightColor, "transparent");
20674
20674
  }
20675
20675
  if (s.underlineColor) {
20676
- style.textDecorationColor = chunkQM4FGZG4_cjs.normalizeHexColor(s.underlineColor);
20676
+ style.textDecorationColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.underlineColor);
20677
20677
  }
20678
20678
  if (s.textOutlineWidth) {
20679
- style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkQM4FGZG4_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20679
+ style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkAIL3BNZS_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20680
20680
  style.paintOrder = "stroke fill";
20681
20681
  }
20682
20682
  if (s.textCaps === "all") {
@@ -20717,7 +20717,7 @@ function segmentStyleToCss(seg, fontScale = 1, context = {}) {
20717
20717
  if (s.color) {
20718
20718
  style.color = s.color;
20719
20719
  } else if (s.hyperlink) {
20720
- style.color = chunkQM4FGZG4_cjs.HYPERLINK_COLOR;
20720
+ style.color = chunkAIL3BNZS_cjs.HYPERLINK_COLOR;
20721
20721
  }
20722
20722
  style.fontWeight = s.bold ? "bold" : "normal";
20723
20723
  style.fontStyle = s.italic ? "italic" : "normal";
@@ -20795,9 +20795,9 @@ function cellPatternFillCss(style) {
20795
20795
  if (style.fillMode !== "pattern" || !style.patternFillPreset) {
20796
20796
  return null;
20797
20797
  }
20798
- const fg = chunkQM4FGZG4_cjs.normalizeHexColor(style.patternFillForeground, "#000000");
20799
- const bg = chunkQM4FGZG4_cjs.normalizeHexColor(style.patternFillBackground, "#ffffff");
20800
- const svgMarkup = chunkQM4FGZG4_cjs.getPatternSvg(style.patternFillPreset, fg, bg);
20798
+ const fg = chunkAIL3BNZS_cjs.normalizeHexColor(style.patternFillForeground, "#000000");
20799
+ const bg = chunkAIL3BNZS_cjs.normalizeHexColor(style.patternFillBackground, "#ffffff");
20800
+ const svgMarkup = chunkAIL3BNZS_cjs.getPatternSvg(style.patternFillPreset, fg, bg);
20801
20801
  if (svgMarkup) {
20802
20802
  const encoded = encodeURIComponent(svgMarkup);
20803
20803
  return {
@@ -21183,7 +21183,7 @@ function tableCellCss(tableData, cell, position, context, base2) {
21183
21183
  );
21184
21184
  const css = { ...base2, ...band, ...cellStyleToCss(cell?.style) };
21185
21185
  if (css.color === void 0) {
21186
- css.color = chunkQM4FGZG4_cjs.DEFAULT_TEXT_COLOR;
21186
+ css.color = chunkAIL3BNZS_cjs.DEFAULT_TEXT_COLOR;
21187
21187
  }
21188
21188
  return { ...TABLE_CELL_TEXT_DEFAULTS, ...css };
21189
21189
  }
@@ -21334,7 +21334,7 @@ var GRADIENT_TYPE_OPTIONS = [
21334
21334
  { value: "linear", i18nKey: "pptx.table.gradientLinear" },
21335
21335
  { value: "radial", i18nKey: "pptx.table.gradientRadial" }
21336
21336
  ];
21337
- var PATTERN_OPTIONS = chunkQM4FGZG4_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21337
+ var PATTERN_OPTIONS = chunkAIL3BNZS_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21338
21338
 
21339
21339
  // src/pptx/render/table-resize.ts
21340
21340
  var MIN_COLUMN_PROPORTION = 0.03;
@@ -21428,7 +21428,6 @@ var RESIZE_HANDLE_GEOMETRY = {
21428
21428
  };
21429
21429
  var ROTATE_STEM_PX = 24;
21430
21430
  var DEG_TO_RAD = Math.PI / 180;
21431
- var RAD_TO_DEG = 180 / Math.PI;
21432
21431
  function rotationOf(box) {
21433
21432
  return box.rotation ?? 0;
21434
21433
  }
@@ -21486,12 +21485,6 @@ function applyResize(box, handle, dxScreen, dyScreen, zoom, opts = {}) {
21486
21485
  }
21487
21486
  return { x: newX, y: newY, width: newW, height: newH, rotation };
21488
21487
  }
21489
- function computeRotation(center, pointer) {
21490
- const dx = pointer.x - center.x;
21491
- const dy = pointer.y - center.y;
21492
- const deg3 = Math.atan2(dx, -dy) * RAD_TO_DEG;
21493
- return (deg3 % 360 + 360) % 360;
21494
- }
21495
21488
  function snapAngle(angleDeg, step = 15, tolerance = step / 2) {
21496
21489
  const nearest = Math.round(angleDeg / step) * step;
21497
21490
  if (Math.abs(angleDeg - nearest) <= tolerance) {
@@ -21621,25 +21614,6 @@ function getSelectionOutlineColor(fallback) {
21621
21614
  return variable(SELECTION_CONTROL_CSS_VARS.outlineColor, fallback);
21622
21615
  }
21623
21616
 
21624
- // src/pptx/render/rotation-drag.ts
21625
- function createRotationDrag(center, startPointer, startRotation) {
21626
- const bearing = (pointer) => pointer.x === center.x && pointer.y === center.y ? void 0 : computeRotation(center, pointer);
21627
- let startAngle = bearing(startPointer);
21628
- let rotation = startRotation;
21629
- return (pointer) => {
21630
- const angle = bearing(pointer);
21631
- if (angle === void 0) {
21632
- return rotation;
21633
- }
21634
- if (startAngle === void 0) {
21635
- startAngle = angle;
21636
- return rotation;
21637
- }
21638
- rotation = ((startRotation + angle - startAngle) % 360 + 360) % 360;
21639
- return rotation;
21640
- };
21641
- }
21642
-
21643
21617
  // src/pptx/render/rotate-handle-dom.ts
21644
21618
  function rotateHandleHitRect(element) {
21645
21619
  const rects = [element, ...element.querySelectorAll("[data-pptx-handle-hit]")].map(
@@ -21720,71 +21694,6 @@ function rotateHandleParentMatrix(button, ancestors) {
21720
21694
  return matrix.is2D && Number.isFinite(matrix.a * matrix.d - matrix.b * matrix.c) && Math.abs(matrix.a * matrix.d - matrix.b * matrix.c) > 1e-9 ? matrix : null;
21721
21695
  }
21722
21696
 
21723
- // src/pptx/render/rotate-handle-placement.ts
21724
- function resolveRotateHandlePlacement(input) {
21725
- const { preferred, selection, bounds, hitWidth, hitHeight, obstacles } = input;
21726
- if (![
21727
- ...Object.values(preferred),
21728
- ...Object.values(selection),
21729
- ...Object.values(bounds),
21730
- hitWidth,
21731
- hitHeight
21732
- ].every(Number.isFinite) || hitWidth <= 0 || hitHeight <= 0) {
21733
- return null;
21734
- }
21735
- const halfX = hitWidth / 2;
21736
- const halfY = hitHeight / 2;
21737
- const center = {
21738
- x: (selection.left + selection.right) / 2,
21739
- y: (selection.top + selection.bottom) / 2
21740
- };
21741
- const fits = ({ x, y }) => {
21742
- const rect3 = { left: x - halfX, right: x + halfX, top: y - halfY, bottom: y + halfY };
21743
- return rect3.left >= bounds.left + 1 && rect3.right <= bounds.right - 1 && rect3.top >= bounds.top + 1 && rect3.bottom <= bounds.bottom - 1 && // A target over the rotation center has no usable initial bearing.
21744
- !(center.x >= rect3.left && center.x <= rect3.right && center.y >= rect3.top && center.y <= rect3.bottom) && !obstacles.some(
21745
- (other) => rect3.left < other.right + 2 && rect3.right > other.left - 2 && rect3.top < other.bottom + 2 && rect3.bottom > other.top - 2
21746
- );
21747
- };
21748
- if (fits(preferred)) {
21749
- return preferred;
21750
- }
21751
- const padX = Math.max(
21752
- 24,
21753
- halfX + 3 + Math.max(
21754
- 0,
21755
- ...obstacles.flatMap((rect3) => [selection.left - rect3.left, rect3.right - selection.right])
21756
- )
21757
- );
21758
- const padY = Math.max(
21759
- 24,
21760
- halfY + 3 + Math.max(
21761
- 0,
21762
- ...obstacles.flatMap((rect3) => [selection.top - rect3.top, rect3.bottom - selection.bottom])
21763
- )
21764
- );
21765
- const candidates = [
21766
- { x: center.x, y: selection.top - padY },
21767
- { x: selection.right + padX, y: center.y },
21768
- { x: center.x, y: selection.bottom + padY },
21769
- { x: selection.left - padX, y: center.y }
21770
- ];
21771
- const left = Math.max(selection.left, bounds.left) + halfX + 3;
21772
- const right = Math.min(selection.right, bounds.right) - halfX - 3;
21773
- const top = Math.max(selection.top, bounds.top) + halfY + 3;
21774
- const bottom = Math.min(selection.bottom, bounds.bottom) - halfY - 3;
21775
- if (left <= right && top <= bottom) {
21776
- for (const fraction of [0.25, 0.75]) {
21777
- const x = left + (right - left) * fraction;
21778
- const y = top + (bottom - top) * fraction;
21779
- candidates.push({ x, y: top }, { x, y: bottom }, { x: left, y }, { x: right, y });
21780
- }
21781
- }
21782
- return candidates.filter(fits).sort((a, b) => {
21783
- const difference = Math.hypot(a.x - preferred.x, a.y - preferred.y) - Math.hypot(b.x - preferred.x, b.y - preferred.y);
21784
- return Math.abs(difference) < 0.5 ? 0 : difference;
21785
- })[0] ?? null;
21786
- }
21787
-
21788
21697
  // src/pptx/render/rotate-handle-attachment.ts
21789
21698
  function attachRotateHandlePlacement(button, options = {}) {
21790
21699
  const win = button.ownerDocument.defaultView;
@@ -21847,7 +21756,7 @@ function attachRotateHandlePlacement(button, options = {}) {
21847
21756
  observeControl(node);
21848
21757
  return node;
21849
21758
  }).filter((node) => !node.hidden && win.getComputedStyle(node).display !== "none").map(rotateHandleHitRect);
21850
- const placement = resolveRotateHandlePlacement({
21759
+ const placement = geometry.resolveRotateHandlePlacement({
21851
21760
  preferred,
21852
21761
  selection: rect3,
21853
21762
  bounds: rotateHandleClipBounds(button, ancestors),
@@ -22169,10 +22078,10 @@ function imageFitTransformParts(el) {
22169
22078
  return { placement: "", crop: "" };
22170
22079
  }
22171
22080
  return fitTransformsFromInsets({
22172
- cropLeft: chunkQM4FGZG4_cjs.clampCropValue(el.cropLeft),
22173
- cropTop: chunkQM4FGZG4_cjs.clampCropValue(el.cropTop),
22174
- cropRight: chunkQM4FGZG4_cjs.clampCropValue(el.cropRight),
22175
- cropBottom: chunkQM4FGZG4_cjs.clampCropValue(el.cropBottom),
22081
+ cropLeft: chunkAIL3BNZS_cjs.clampCropValue(el.cropLeft),
22082
+ cropTop: chunkAIL3BNZS_cjs.clampCropValue(el.cropTop),
22083
+ cropRight: chunkAIL3BNZS_cjs.clampCropValue(el.cropRight),
22084
+ cropBottom: chunkAIL3BNZS_cjs.clampCropValue(el.cropBottom),
22176
22085
  fillRectLeft: el.fillRectLeft ?? 0,
22177
22086
  fillRectTop: el.fillRectTop ?? 0,
22178
22087
  fillRectRight: el.fillRectRight ?? 0,
@@ -22196,10 +22105,10 @@ function fitTransformsFromInsets(insets) {
22196
22105
  if (hasCrop2) {
22197
22106
  const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
22198
22107
  const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
22199
- cropLeft = chunkQM4FGZG4_cjs.clampCropValue(cropLeft * horizontalScale);
22200
- cropRight = chunkQM4FGZG4_cjs.clampCropValue(cropRight * horizontalScale);
22201
- cropTop = chunkQM4FGZG4_cjs.clampCropValue(cropTop * verticalScale);
22202
- cropBottom = chunkQM4FGZG4_cjs.clampCropValue(cropBottom * verticalScale);
22108
+ cropLeft = chunkAIL3BNZS_cjs.clampCropValue(cropLeft * horizontalScale);
22109
+ cropRight = chunkAIL3BNZS_cjs.clampCropValue(cropRight * horizontalScale);
22110
+ cropTop = chunkAIL3BNZS_cjs.clampCropValue(cropTop * verticalScale);
22111
+ cropBottom = chunkAIL3BNZS_cjs.clampCropValue(cropBottom * verticalScale);
22203
22112
  const remainingWidth = Math.max(0.01, 1 - cropLeft - cropRight);
22204
22113
  const remainingHeight = Math.max(0.01, 1 - cropTop - cropBottom);
22205
22114
  const tx = Math.round(-cropLeft / remainingWidth * 1e4) / 100;
@@ -22314,7 +22223,7 @@ function resolveShadeToTitleBackgroundImage(slide, slideWidthPx, slideHeightPx)
22314
22223
  if (stops.length === 0) {
22315
22224
  return void 0;
22316
22225
  }
22317
- return chunkQM4FGZG4_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22226
+ return chunkAIL3BNZS_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22318
22227
  }
22319
22228
 
22320
22229
  // src/pptx/render/slide-background.ts
@@ -22336,7 +22245,7 @@ function getSlideBackgroundStyle(slide, slideSize) {
22336
22245
  style["background-repeat"] = "no-repeat";
22337
22246
  }
22338
22247
  } else if (pattern) {
22339
- const svg2 = chunkQM4FGZG4_cjs.getPatternSvg(
22248
+ const svg2 = chunkAIL3BNZS_cjs.getPatternSvg(
22340
22249
  pattern.preset,
22341
22250
  pattern.fgColor ?? solid ?? "#000000",
22342
22251
  pattern.bgColor ?? DEFAULT_SLIDE_BACKGROUND
@@ -22754,7 +22663,7 @@ function createTemplateContext(options = {}) {
22754
22663
  const scheme = { ...pptx.DEFAULT_SCHEME_COLOR_MAP, ...options.scheme ?? {} };
22755
22664
  let counter = 0;
22756
22665
  const idFor = options.idFor ?? ((index) => `template-el-${Date.now()}-${index}`);
22757
- const dictionary = chunkXQZWZMGZ_cjs.translationsEn;
22666
+ const dictionary = chunkSM3CWDIQ_cjs.translationsEn;
22758
22667
  const translate = options.translate ?? ((key) => dictionary[key] ?? key);
22759
22668
  return {
22760
22669
  scheme,
@@ -23744,12 +23653,12 @@ function buildRunTabLines(text3, ctx, nestedDecoration, measure2 = (t) => measur
23744
23653
  // src/pptx/render/paragraph-run-enrich.ts
23745
23654
  function resolveRunExtrasContext(input) {
23746
23655
  const { seg, runFont, blockFont, blockScriptStyle, tabStops, defaultTabSize, rtl } = input;
23747
- const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY;
23656
+ const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
23748
23657
  const scriptFonts = resolveScriptFontSet(seg.style, blockScriptStyle, baseFontFamily);
23749
23658
  const tabContext = tabStops && tabStops.length > 0 ? buildTabContext(
23750
23659
  tabStops,
23751
23660
  defaultTabSize,
23752
- runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE,
23661
+ runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE,
23753
23662
  baseFontFamily,
23754
23663
  Boolean(seg.style?.bold),
23755
23664
  Boolean(seg.style?.italic),
@@ -23781,7 +23690,7 @@ function resolveRunReflection(segStyle, blockFont) {
23781
23690
  if (!segStyle) {
23782
23691
  return void 0;
23783
23692
  }
23784
- const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
23693
+ const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
23785
23694
  return getTextReflectionWrapperStyle(segStyle, height);
23786
23695
  }
23787
23696
  function applyRunReflection(run, reflection2) {
@@ -23943,7 +23852,7 @@ function buildTextShadowCss(style) {
23943
23852
  const ox = style.textShadowOffsetX ?? 0;
23944
23853
  const oy = style.textShadowOffsetY ?? 0;
23945
23854
  const blur = style.textShadowBlur ?? 4;
23946
- const color = chunkQM4FGZG4_cjs.normalizeHexColor(style.textShadowColor, "#000000");
23855
+ const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textShadowColor, "#000000");
23947
23856
  const opacity = style.textShadowOpacity ?? 0.5;
23948
23857
  const r = parseInt(color.slice(1, 3), 16);
23949
23858
  const g = parseInt(color.slice(3, 5), 16);
@@ -23956,7 +23865,7 @@ function buildTextShadowCss(style) {
23956
23865
  const dirRad = dir * Math.PI / 180;
23957
23866
  const psOx = Math.round(Math.cos(dirRad) * dist2 * 100) / 100;
23958
23867
  const psOy = Math.round(Math.sin(dirRad) * dist2 * 100) / 100;
23959
- const psColor = chunkQM4FGZG4_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
23868
+ const psColor = chunkAIL3BNZS_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
23960
23869
  const psOpacity = style.textPresetShadowOpacity ?? 0.5;
23961
23870
  const psR = parseInt(psColor.slice(1, 3), 16);
23962
23871
  const psG = parseInt(psColor.slice(3, 5), 16);
@@ -23973,7 +23882,7 @@ function buildTextInnerShadowCss(style) {
23973
23882
  const ox = style.textInnerShadowOffsetX ?? 0;
23974
23883
  const oy = style.textInnerShadowOffsetY ?? 0;
23975
23884
  const blur = style.textInnerShadowBlur ?? 3;
23976
- const color = chunkQM4FGZG4_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
23885
+ const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
23977
23886
  const opacity = style.textInnerShadowOpacity ?? 0.5;
23978
23887
  const r = parseInt(color.slice(1, 3), 16);
23979
23888
  const g = parseInt(color.slice(3, 5), 16);
@@ -24020,7 +23929,7 @@ function buildTextGlowFilter(style) {
24020
23929
  return void 0;
24021
23930
  }
24022
23931
  const radius = style.textGlowRadius ?? 6;
24023
- const color = chunkQM4FGZG4_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
23932
+ const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
24024
23933
  const opacity = style.textGlowOpacity ?? 0.6;
24025
23934
  const r = parseInt(color.slice(1, 3), 16);
24026
23935
  const g = parseInt(color.slice(3, 5), 16);
@@ -24048,9 +23957,9 @@ function buildTextFillCss(style) {
24048
23957
  };
24049
23958
  }
24050
23959
  if (style.textFillPattern) {
24051
- const fg = chunkQM4FGZG4_cjs.normalizeHexColor(style.textFillPatternForeground, "#000000");
24052
- const bg = chunkQM4FGZG4_cjs.normalizeHexColor(style.textFillPatternBackground, "#ffffff");
24053
- const svgPattern = chunkQM4FGZG4_cjs.getPatternSvg(style.textFillPattern, fg, bg);
23960
+ const fg = chunkAIL3BNZS_cjs.normalizeHexColor(style.textFillPatternForeground, "#000000");
23961
+ const bg = chunkAIL3BNZS_cjs.normalizeHexColor(style.textFillPatternBackground, "#ffffff");
23962
+ const svgPattern = chunkAIL3BNZS_cjs.getPatternSvg(style.textFillPattern, fg, bg);
24054
23963
  if (svgPattern) {
24055
23964
  const encoded = encodeURIComponent(svgPattern);
24056
23965
  return {
@@ -24195,15 +24104,15 @@ function resolveRunRuby(segment, baseFontSizePx, blockFont, baseColor) {
24195
24104
  return void 0;
24196
24105
  }
24197
24106
  const authoredFamily = segment.rubyStyle?.fontFamily ?? segment.style?.fontFamily;
24198
- const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
24107
+ const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
24199
24108
  const style = {
24200
24109
  fontSize: `${segment.rubyFontSize ?? baseSize * RUBY_SIZE_RATIO}px`,
24201
- fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY,
24110
+ fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY,
24202
24111
  textAlign: rubyTextAlign(segment.rubyAlignment)
24203
24112
  };
24204
24113
  const color = segment.rubyStyle?.color;
24205
24114
  if (color) {
24206
- style.color = chunkQM4FGZG4_cjs.normalizeHexColor(color, baseColor);
24115
+ style.color = chunkAIL3BNZS_cjs.normalizeHexColor(color, baseColor);
24207
24116
  }
24208
24117
  return { text: text3, style };
24209
24118
  }
@@ -24275,7 +24184,7 @@ function buildParagraphRuns(input) {
24275
24184
  bodyFontSizeRaw,
24276
24185
  fontScale
24277
24186
  );
24278
- const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
24187
+ const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
24279
24188
  equationStyle.fontSize = `${fallbackFontSize}px`;
24280
24189
  }
24281
24190
  runs.push({
@@ -24312,7 +24221,7 @@ function buildParagraphRuns(input) {
24312
24221
  });
24313
24222
  const ruby = resolveRunRuby(
24314
24223
  seg,
24315
- typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE,
24224
+ typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE,
24316
24225
  blockFont,
24317
24226
  typeof style.color === "string" ? style.color : void 0
24318
24227
  );
@@ -24477,8 +24386,8 @@ function buildParagraphs(element, fieldContext, segmentOverrides, options) {
24477
24386
  }
24478
24387
  const fontScale = resolveAutoFitFontScale(element.textStyle);
24479
24388
  const blockFont = {
24480
- fontFamily: element.textStyle?.fontFamily ? pptx.getSubstituteFontFamily(element.textStyle.fontFamily) : chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY,
24481
- fontSizePx: (element.textStyle?.fontSize || chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE) * fontScale
24389
+ fontFamily: element.textStyle?.fontFamily ? pptx.getSubstituteFontFamily(element.textStyle.fontFamily) : chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY,
24390
+ fontSizePx: (element.textStyle?.fontSize || chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE) * fontScale
24482
24391
  };
24483
24392
  const blockScriptStyle = element.textStyle;
24484
24393
  const tabStops = element.textStyle?.tabStops;
@@ -27431,17 +27340,17 @@ function hasItalicRuns(element) {
27431
27340
  );
27432
27341
  }
27433
27342
  function buildTextBlockStyle(element, options = {}) {
27434
- const fallbackColor = options.fallbackColor ?? chunkQM4FGZG4_cjs.DEFAULT_TEXT_COLOR;
27343
+ const fallbackColor = options.fallbackColor ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_COLOR;
27435
27344
  if (!pptx.hasTextProperties(element)) {
27436
27345
  return { color: fallbackColor };
27437
27346
  }
27438
27347
  const ts = element.textStyle;
27439
27348
  const italic = hasItalicRuns(element);
27440
27349
  const isRtl = ts?.rtl === true;
27441
- const bodyTop = ts?.bodyInsetTop ?? chunkQM4FGZG4_cjs.DEFAULT_BODY_INSET_TB_PX;
27442
- const bodyBottom = ts?.bodyInsetBottom ?? chunkQM4FGZG4_cjs.DEFAULT_BODY_INSET_TB_PX;
27443
- const bodyLeft = ts?.bodyInsetLeft ?? chunkQM4FGZG4_cjs.DEFAULT_BODY_INSET_LR_PX;
27444
- const bodyRight = ts?.bodyInsetRight ?? chunkQM4FGZG4_cjs.DEFAULT_BODY_INSET_LR_PX;
27350
+ const bodyTop = ts?.bodyInsetTop ?? chunkAIL3BNZS_cjs.DEFAULT_BODY_INSET_TB_PX;
27351
+ const bodyBottom = ts?.bodyInsetBottom ?? chunkAIL3BNZS_cjs.DEFAULT_BODY_INSET_TB_PX;
27352
+ const bodyLeft = ts?.bodyInsetLeft ?? chunkAIL3BNZS_cjs.DEFAULT_BODY_INSET_LR_PX;
27353
+ const bodyRight = ts?.bodyInsetRight ?? chunkAIL3BNZS_cjs.DEFAULT_BODY_INSET_LR_PX;
27445
27354
  const hasParagraphIndents = (element.paragraphIndents?.length ?? 0) > 0;
27446
27355
  const bodyIndent = hasParagraphIndents ? 0 : ts?.paragraphIndent || 0;
27447
27356
  const bodyMarginLeft = hasParagraphIndents ? 0 : ts?.paragraphMarginLeft || 0;
@@ -27470,17 +27379,17 @@ function buildTextBlockStyle(element, options = {}) {
27470
27379
  style.transformOrigin = "center";
27471
27380
  }
27472
27381
  }
27473
- style.color = ts?.hyperlink ? chunkQM4FGZG4_cjs.normalizeHexColor(ts?.color, chunkQM4FGZG4_cjs.HYPERLINK_COLOR) : chunkQM4FGZG4_cjs.normalizeHexColor(ts?.color, fallbackColor);
27382
+ style.color = ts?.hyperlink ? chunkAIL3BNZS_cjs.normalizeHexColor(ts?.color, chunkAIL3BNZS_cjs.HYPERLINK_COLOR) : chunkAIL3BNZS_cjs.normalizeHexColor(ts?.color, fallbackColor);
27474
27383
  if (!hasTextSegments && ts?.highlightColor) {
27475
- style.backgroundColor = chunkQM4FGZG4_cjs.normalizeHexColor(ts.highlightColor, void 0);
27384
+ style.backgroundColor = chunkAIL3BNZS_cjs.normalizeHexColor(ts.highlightColor, void 0);
27476
27385
  }
27477
27386
  style.textAlign = resolveCssTextAlign(ts?.align, isRtl) ?? "left";
27478
27387
  style.direction = toCssVerticalDirection(ts?.textDirection) ?? (isRtl ? "rtl" : bodyLayoutStyle?.direction ?? "ltr");
27479
27388
  if (isRtl) {
27480
27389
  style.unicodeBidi = "plaintext";
27481
27390
  }
27482
- style.fontSize = ts?.fontSize || chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
27483
- style.fontFamily = ts?.fontFamily ? pptx.getSubstituteFontFamily(ts.fontFamily, pptx.parsePanoseString(ts.latinFontPanose)) : chunkQM4FGZG4_cjs.DEFAULT_FONT_FAMILY;
27391
+ style.fontSize = ts?.fontSize || chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
27392
+ style.fontFamily = ts?.fontFamily ? pptx.getSubstituteFontFamily(ts.fontFamily, pptx.parsePanoseString(ts.latinFontPanose)) : chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
27484
27393
  style.fontWeight = ts?.bold ? 700 : 400;
27485
27394
  style.fontStyle = ts?.italic ? "italic" : "normal";
27486
27395
  style.textDecorationLine = decorations.length > 0 ? decorations.join(" ") : "none";
@@ -27520,7 +27429,7 @@ function buildTextBlockStyle(element, options = {}) {
27520
27429
  text: element.text ?? "",
27521
27430
  width: element.width,
27522
27431
  height: element.height,
27523
- defaultFontSize: chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE
27432
+ defaultFontSize: chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE
27524
27433
  });
27525
27434
  if (autoFit.fontSize !== void 0) {
27526
27435
  style.fontSize = autoFit.fontSize;
@@ -27528,7 +27437,7 @@ function buildTextBlockStyle(element, options = {}) {
27528
27437
  if (autoFit.lineHeight !== void 0) {
27529
27438
  style.lineHeight = autoFit.lineHeight;
27530
27439
  }
27531
- const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkQM4FGZG4_cjs.DEFAULT_TEXT_FONT_SIZE;
27440
+ const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
27532
27441
  const lineHeightPx = lineHeightToPx(fontSizePx, style.lineHeight);
27533
27442
  const contentHeightPx = element.height - style.paddingTop - style.paddingBottom;
27534
27443
  Object.assign(style, resolveVertOverflowEllipsisStyle(ts, contentHeightPx, lineHeightPx));
@@ -30860,8 +30769,6 @@ function clampFlyoutPosition(input) {
30860
30769
  top: Math.max(margin, input.height > 0 ? Math.min(input.y, maxTop) : input.y)
30861
30770
  };
30862
30771
  }
30863
-
30864
- // src/pptx/render/connector-elbow-geometry.ts
30865
30772
  function connectorAdjustmentFraction(element, key, fallback = 0.5) {
30866
30773
  const adj = element.shapeAdjustments;
30867
30774
  const raw = adj?.[key] ?? adj?.adj;
@@ -30874,80 +30781,19 @@ function connectorAdjustmentFraction(element, key, fallback = 0.5) {
30874
30781
  function connectorBendFraction(element) {
30875
30782
  return connectorAdjustmentFraction(element, "adj1", 0.5);
30876
30783
  }
30877
- function elbowSegmentCount(lowerShapeType) {
30878
- if (lowerShapeType.includes("connector4")) {
30879
- return 4;
30880
- }
30881
- if (lowerShapeType.includes("connector5")) {
30882
- return 5;
30883
- }
30884
- return 3;
30885
- }
30886
- function axisMapper(horizontalPrimary) {
30887
- return (u, v) => ({ x: u, y: v }) ;
30888
- }
30889
30784
  function elbowWaypoints(x1, y1, x2, y2, segments, adj1, adj2, adj3) {
30890
- const u1 = x1 ;
30891
- const v1 = y1 ;
30892
- const u2 = x2 ;
30893
- const v2 = y2 ;
30894
- const toXY = axisMapper();
30895
- if (segments === 3) {
30896
- const mu = u1 + (u2 - u1) * adj1;
30897
- return [toXY(u1, v1), toXY(mu, v1), toXY(mu, v2), toXY(u2, v2)];
30898
- }
30899
- if (segments === 4) {
30900
- const mu = u1 + (u2 - u1) * adj1;
30901
- const mv2 = v1 + (v2 - v1) * adj2;
30902
- return [toXY(u1, v1), toXY(mu, v1), toXY(mu, mv2), toXY(u2, mv2), toXY(u2, v2)];
30903
- }
30904
- const mu1 = u1 + (u2 - u1) * adj1;
30905
- const mv = v1 + (v2 - v1) * adj2;
30906
- const mu2 = u1 + (u2 - u1) * adj3;
30907
- return [toXY(u1, v1), toXY(mu1, v1), toXY(mu1, mv), toXY(mu2, mv), toXY(mu2, v2), toXY(u2, v2)];
30908
- }
30909
- function fmt3(p) {
30910
- return `${p.x},${p.y}`;
30911
- }
30912
- function curveTo(ctrl, end) {
30913
- return `C${fmt3(ctrl)} ${fmt3(ctrl)} ${fmt3(end)}`;
30914
- }
30915
- function curvedElbowPathD(x1, y1, x2, y2, segments, adj1, adj2, adj3) {
30916
- const u1 = x1 ;
30917
- const v1 = y1 ;
30918
- const u2 = x2 ;
30919
- const v2 = y2 ;
30920
- const toXY = axisMapper();
30921
- const start = toXY(u1, v1);
30922
- if (segments === 3) {
30923
- const mu = u1 + (u2 - u1) * adj1;
30924
- return `M${fmt3(start)} C${fmt3(toXY(mu, v1))} ${fmt3(toXY(mu, v2))} ${fmt3(toXY(u2, v2))}`;
30925
- }
30926
- if (segments === 4) {
30927
- const mu = u1 + (u2 - u1) * adj1;
30928
- const mv2 = v1 + (v2 - v1) * adj2;
30929
- const vq = v1 + (mv2 - v1) * 0.5;
30930
- const midU2 = (mu + u2) / 2;
30931
- return [
30932
- `M${fmt3(start)}`,
30933
- curveTo(toXY(mu, v1), toXY(mu, vq)),
30934
- curveTo(toXY(mu, mv2), toXY(midU2, mv2)),
30935
- curveTo(toXY(u2, mv2), toXY(u2, v2))
30936
- ].join(" ");
30937
- }
30938
- const mu1 = u1 + (u2 - u1) * adj1;
30939
- const mv = v1 + (v2 - v1) * adj2;
30940
- const mu2 = u1 + (u2 - u1) * adj3;
30941
- const vq1 = v1 + (mv - v1) * 0.5;
30942
- const vq2 = mv + (v2 - mv) * 0.5;
30943
- const midU = (mu1 + mu2) / 2;
30944
- return [
30945
- `M${fmt3(start)}`,
30946
- curveTo(toXY(mu1, v1), toXY(mu1, vq1)),
30947
- curveTo(toXY(mu1, mv), toXY(midU, mv)),
30948
- curveTo(toXY(mu2, mv), toXY(mu2, vq2)),
30949
- curveTo(toXY(mu2, v2), toXY(u2, v2))
30950
- ].join(" ");
30785
+ return geometry.elbowWaypoints(
30786
+ x1,
30787
+ y1,
30788
+ x2,
30789
+ y2,
30790
+ Math.abs(x2 - x1),
30791
+ Math.abs(y2 - y1),
30792
+ segments,
30793
+ adj1,
30794
+ adj2,
30795
+ adj3
30796
+ ).map(([x, y]) => ({ x, y }));
30951
30797
  }
30952
30798
 
30953
30799
  // src/pptx/render/connector-hit-target.ts
@@ -30985,9 +30831,9 @@ function normalizeArrow(a) {
30985
30831
  function buildConnectorGeometry(element, zIndex, routing) {
30986
30832
  const ss = pptx.hasShapeProperties(element) ? element.shapeStyle : void 0;
30987
30833
  const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
30988
- const strokeColor = ss?.strokeColor ?? chunkQM4FGZG4_cjs.DEFAULT_STROKE_COLOR;
30834
+ const strokeColor = ss?.strokeColor ?? chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR;
30989
30835
  const strokeOpacity = ss?.strokeOpacity ?? 1;
30990
- const dashArray = chunkQM4FGZG4_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
30836
+ const dashArray = chunkAIL3BNZS_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
30991
30837
  const strokeLinecap = svgLineCap(ss?.lineCap);
30992
30838
  const compoundOffsets = getCompoundLineOffsets(ss?.compoundLine, strokeWidth);
30993
30839
  const compoundWidths = getCompoundLineWidths(ss?.compoundLine, strokeWidth);
@@ -31061,15 +30907,15 @@ function buildConnectorPathD(shapeType, x1, y1, x2, y2, bend, bend2 = 0.5, bend3
31061
30907
  if (t.includes("bentconnector2")) {
31062
30908
  return `M${x1},${y1} L${x2},${y1} L${x2},${y2}`;
31063
30909
  }
31064
- const segments2 = elbowSegmentCount(t);
30910
+ const segments2 = geometry.elbowSegmentCount(t);
31065
30911
  const points = elbowWaypoints(x1, y1, x2, y2, segments2, bend, bend2, bend3);
31066
30912
  return waypointsToPathD(points);
31067
30913
  }
31068
30914
  if (t.includes("curvedconnector2")) {
31069
30915
  return `M${x1},${y1} Q${x2},${y1} ${x2},${y2}`;
31070
30916
  }
31071
- const segments = elbowSegmentCount(t);
31072
- return curvedElbowPathD(x1, y1, x2, y2, segments, bend, bend2, bend3);
30917
+ const segments = geometry.elbowSegmentCount(t);
30918
+ return geometry.curvedElbowPathD(x1, y1, x2, y2, segments, bend, bend2, bend3);
31073
30919
  }
31074
30920
  function connectorWrapperTransform(element) {
31075
30921
  return element.rotation ? `rotate(${element.rotation}deg)` : void 0;
@@ -37679,7 +37525,7 @@ function drawingShapeMeshOpacity(shape) {
37679
37525
  // src/pptx/render/svg-text-lines.ts
37680
37526
  var LINE_HEIGHT_RATIO = 1.2;
37681
37527
  function centeredSvgTextLines(text3, fontSize, options = {}) {
37682
- const lines = options.maxWidth !== void 0 ? chunkQM4FGZG4_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37528
+ const lines = options.maxWidth !== void 0 ? chunkAIL3BNZS_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37683
37529
  const centerY = options.centerY ?? 0;
37684
37530
  if (lines.length === 0) {
37685
37531
  return [{ text: "", y: centerY }];
@@ -38476,7 +38322,7 @@ function buildObliqueLabels(layout, input) {
38476
38322
  const { w, h, d } = layout.box;
38477
38323
  const span = layout.range.max - layout.range.min;
38478
38324
  const fontSize = input.fontSize;
38479
- for (const v of chunkQM4FGZG4_cjs.axisTickValues({ ...layout.range, span })) {
38325
+ for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...layout.range, span })) {
38480
38326
  const p = (v - layout.range.min) * layout.valueScale;
38481
38327
  if (layout.horizontal) {
38482
38328
  const at = screen2(layout, p, 0, 0);
@@ -38599,7 +38445,7 @@ function dataExtent(chartData, grouping, nCat) {
38599
38445
  function valueRange(chartData, grouping, nCat, valueLengthPx) {
38600
38446
  const axis = chartData.axes?.find((a) => a.axisType === "valAx");
38601
38447
  const [lo, hi] = dataExtent(chartData, grouping, nCat);
38602
- const auto = chunkQM4FGZG4_cjs.niceValueAxisBounds(lo, hi, chunkQM4FGZG4_cjs.axisTargetIntervals(valueLengthPx), 0);
38448
+ const auto = chunkAIL3BNZS_cjs.niceValueAxisBounds(lo, hi, chunkAIL3BNZS_cjs.axisTargetIntervals(valueLengthPx), 0);
38603
38449
  const min = typeof axis?.min === "number" ? axis.min : auto.min;
38604
38450
  let max = typeof axis?.max === "number" ? axis.max : auto.max;
38605
38451
  if (max <= min) {
@@ -38629,16 +38475,16 @@ function computeObliqueBarLayout(element, vm) {
38629
38475
  const rows = grouping === "standard" ? nSer : 1;
38630
38476
  const labelFont = vm.axisLabels[0]?.fontSize ?? 16;
38631
38477
  const catLabels = chartData.categories.length > 0 ? chartData.categories : Array.from({ length: nCat }, (_, i) => String(i + 1));
38632
- const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkQM4FGZG4_cjs.estimateTextWidth(t, labelFont)), 0);
38478
+ const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkAIL3BNZS_cjs.estimateTextWidth(t, labelFont)), 0);
38633
38479
  const top = vm.title ? TOP_WITH_TITLE : TOP_NO_TITLE;
38634
38480
  const hasBottomLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38635
38481
  const bottom = vm.svgHeight - (hasBottomLegend ? BOTTOM_WITH_LEGEND : BOTTOM_NO_LEGEND);
38636
38482
  const regionH = Math.max(1, bottom - top);
38637
38483
  const provisional = valueRange(chartData, grouping, nCat, regionH);
38638
- const valueTexts = chunkQM4FGZG4_cjs.axisTickValues({
38484
+ const valueTexts = chunkAIL3BNZS_cjs.axisTickValues({
38639
38485
  ...provisional,
38640
38486
  span: provisional.max - provisional.min
38641
- }).map((v) => chunkWLETAW3T_cjs.formatValueLabel(chartData, grouping, v));
38487
+ }).map((v) => chunkCJU4P5FT_cjs.formatValueLabel(chartData, grouping, v));
38642
38488
  const leftBand = (horizontal ? widest(catLabels) : widest(valueTexts)) + (horizontal ? OBLIQUE_CATEGORY_LABEL_GAP : OBLIQUE_VALUE_LABEL_GAP);
38643
38489
  const seriesLabelW = grouping === "standard" && !horizontal ? widest(chartData.series.map((s) => s.name)) : 0;
38644
38490
  const seriesOverhang = (depth2) => seriesLabelW > 0 ? Math.max(0, OBLIQUE_CATEGORY_LABEL_GAP + seriesLabelW - depth2 * shear.x / (2 * rows)) : 0;
@@ -38694,13 +38540,13 @@ function computeObliqueBarLayout(element, vm) {
38694
38540
  gridlines: [],
38695
38541
  labels: []
38696
38542
  };
38697
- layout.bars = chunkWLETAW3T_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38698
- layout.gridlines = chunkWLETAW3T_cjs.buildGridlines(layout);
38543
+ layout.bars = chunkCJU4P5FT_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38544
+ layout.gridlines = chunkCJU4P5FT_cjs.buildGridlines(layout);
38699
38545
  layout.labels = buildObliqueLabels(layout, {
38700
38546
  fontSize: labelFont,
38701
38547
  categories: catLabels,
38702
38548
  seriesNames: chartData.series.map((s) => s.name),
38703
- valueText: (v) => chunkWLETAW3T_cjs.formatValueLabel(chartData, grouping, v)
38549
+ valueText: (v) => chunkCJU4P5FT_cjs.formatValueLabel(chartData, grouping, v)
38704
38550
  });
38705
38551
  return layout;
38706
38552
  }
@@ -38713,7 +38559,7 @@ function buildPerspGridlines(box, range, horizontal) {
38713
38559
  { from: [w, 0, 0], to: [w, 0, d] }
38714
38560
  ];
38715
38561
  const span = range.max - range.min;
38716
- for (const v of chunkQM4FGZG4_cjs.axisTickValues({ ...range, span })) {
38562
+ for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...range, span })) {
38717
38563
  const t = (v - range.min) / span;
38718
38564
  if (horizontal) {
38719
38565
  const x = t * w;
@@ -38739,11 +38585,11 @@ function buildPerspLabels(layout, input) {
38739
38585
  const span = range.max - range.min;
38740
38586
  const labels = [];
38741
38587
  const fontSize = input.fontSize;
38742
- for (const v of chunkQM4FGZG4_cjs.axisTickValues({ ...range, span })) {
38588
+ for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...range, span })) {
38743
38589
  const t = (v - range.min) / span;
38744
- const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkQM4FGZG4_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38590
+ const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkAIL3BNZS_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38745
38591
  if (layout.horizontal) {
38746
- const at = chunkWLETAW3T_cjs.perspToScreen(view, [t * w, 0, 0]);
38592
+ const at = chunkCJU4P5FT_cjs.perspToScreen(view, [t * w, 0, 0]);
38747
38593
  labels.push({
38748
38594
  role: "value",
38749
38595
  text: text3,
@@ -38753,7 +38599,7 @@ function buildPerspLabels(layout, input) {
38753
38599
  fontSize
38754
38600
  });
38755
38601
  } else {
38756
- const at = chunkWLETAW3T_cjs.perspToScreen(view, [0, t * h, 0]);
38602
+ const at = chunkCJU4P5FT_cjs.perspToScreen(view, [0, t * h, 0]);
38757
38603
  labels.push({ role: "value", text: text3, x: at.x - VALUE_GAP2, y: at.y, anchor: "end", fontSize });
38758
38604
  }
38759
38605
  }
@@ -38763,7 +38609,7 @@ function buildPerspLabels(layout, input) {
38763
38609
  return;
38764
38610
  }
38765
38611
  if (layout.horizontal) {
38766
- const at2 = chunkWLETAW3T_cjs.perspToScreen(view, [0, pos, 0]);
38612
+ const at2 = chunkCJU4P5FT_cjs.perspToScreen(view, [0, pos, 0]);
38767
38613
  labels.push({
38768
38614
  role: "category",
38769
38615
  text: text3,
@@ -38774,7 +38620,7 @@ function buildPerspLabels(layout, input) {
38774
38620
  });
38775
38621
  return;
38776
38622
  }
38777
- const at = chunkWLETAW3T_cjs.perspToScreen(view, [pos, 0, 0]);
38623
+ const at = chunkCJU4P5FT_cjs.perspToScreen(view, [pos, 0, 0]);
38778
38624
  labels.push({
38779
38625
  role: "category",
38780
38626
  text: text3,
@@ -38787,7 +38633,7 @@ function buildPerspLabels(layout, input) {
38787
38633
  const rows = input.seriesNames.length;
38788
38634
  input.seriesNames.forEach((text3, s) => {
38789
38635
  const z = layout.kind === "surface" ? rows > 1 ? s / (rows - 1) * d : d / 2 : (s + 0.5) / rows * d;
38790
- const at = chunkWLETAW3T_cjs.perspToScreen(view, [w, 0, z]);
38636
+ const at = chunkCJU4P5FT_cjs.perspToScreen(view, [w, 0, z]);
38791
38637
  labels.push({
38792
38638
  role: "series",
38793
38639
  text: text3,
@@ -38893,16 +38739,16 @@ function computePerspChartLayout(element, vm, options = {}) {
38893
38739
  const valueExtent = horizontal ? 1 : baseHeight * heightScale;
38894
38740
  const catExtent = horizontal ? HORIZONTAL_CATEGORY_EXTENT * heightScale : 1;
38895
38741
  const box = horizontal ? { w: valueExtent, h: catExtent, d } : { w: 1, h: valueExtent, d };
38896
- const camera = options.oblique ? chunkWLETAW3T_cjs.perspObliqueCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20) : chunkWLETAW3T_cjs.perspCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20, view3D?.perspective ?? void 0);
38742
+ const camera = options.oblique ? chunkCJU4P5FT_cjs.perspObliqueCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20) : chunkCJU4P5FT_cjs.perspCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20, view3D?.perspective ?? void 0);
38897
38743
  const hasLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38898
- const view = chunkWLETAW3T_cjs.fitPerspView(camera, {
38744
+ const view = chunkCJU4P5FT_cjs.fitPerspView(camera, {
38899
38745
  left: RECT_LEFT,
38900
38746
  right: vm.svgWidth - (rows > 1 ? RECT_RIGHT_WITH_SERIES : RECT_RIGHT_NO_SERIES),
38901
38747
  top: vm.title ? RECT_TOP_WITH_TITLE : RECT_TOP_NO_TITLE,
38902
38748
  bottom: vm.svgHeight - (hasLegend ? RECT_BOTTOM_WITH_LEGEND : RECT_BOTTOM_NO_LEGEND)
38903
38749
  });
38904
38750
  const [lo, hi] = dataExtent2(chartData, grouping, nCat);
38905
- const auto = chunkQM4FGZG4_cjs.niceValueAxisBounds(lo, hi, chunkQM4FGZG4_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
38751
+ const auto = chunkAIL3BNZS_cjs.niceValueAxisBounds(lo, hi, chunkAIL3BNZS_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
38906
38752
  const min = typeof valAx?.min === "number" ? valAx.min : auto.min;
38907
38753
  let max = typeof valAx?.max === "number" ? valAx.max : auto.max;
38908
38754
  if (max <= min) {
@@ -38994,7 +38840,7 @@ function buildBarGeometry(element, vm) {
38994
38840
  }
38995
38841
  var PERSP_BOX_TYPES = /* @__PURE__ */ new Set(["line3D", "area3D", "surface", "bar3D"]);
38996
38842
  function buildPieGeometry(element, vm) {
38997
- const layout = chunkWLETAW3T_cjs.computePieChartLayout(element, chunkWLETAW3T_cjs.widenPieViewModel(vm, element));
38843
+ const layout = chunkCJU4P5FT_cjs.computePieChartLayout(element, chunkCJU4P5FT_cjs.widenPieViewModel(vm, element));
38998
38844
  return layout ? { kind: "pie", layout } : null;
38999
38845
  }
39000
38846
  function buildPerspGeometry(element, vm, oblique) {
@@ -39014,7 +38860,7 @@ function buildChart3DSpecForElement(element) {
39014
38860
  if (!chartData || !is3DChartType(chartType)) {
39015
38861
  return null;
39016
38862
  }
39017
- const vm = chunkQM4FGZG4_cjs.buildChartViewModel(element);
38863
+ const vm = chunkAIL3BNZS_cjs.buildChartViewModel(element);
39018
38864
  const projection = resolveChart3DProjection(chartType, chartData.view3D);
39019
38865
  const geometry = chartType === "bar3D" && projection.mode === "oblique" ? buildBarGeometry(element, vm) : PERSP_BOX_TYPES.has(chartType) && (projection.mode === "perspective" || chartType !== "bar3D") ? buildPerspGeometry(element, vm, projection.mode === "oblique") : chartType === "pie3D" ? buildPieGeometry(element, vm) : null;
39020
38866
  if (!geometry) {
@@ -46052,28 +45898,25 @@ function addGradientStopPatch(el, color, position) {
46052
45898
  const state = gradientStateOf(el);
46053
45899
  const clampedPos = Math.max(0, Math.min(100, position));
46054
45900
  const newStop = { color, position: clampedPos, opacity: 1 };
46055
- const next = sortStops([...state.stops, newStop]);
45901
+ const next = chart.sortGradientStops([...state.stops, newStop]);
46056
45902
  return gradientStatePatch(el, { ...state, stops: next });
46057
45903
  }
46058
45904
  function removeGradientStopPatch(el, index) {
46059
45905
  const state = gradientStateOf(el);
46060
- if (state.stops.length <= 2) {
46061
- return null;
46062
- }
46063
- const next = state.stops.filter((_, i) => i !== index);
45906
+ const next = chart.removeGradientStop(state.stops, index);
45907
+ if (!next) return null;
46064
45908
  return gradientStatePatch(el, { ...state, stops: next });
46065
45909
  }
46066
45910
  function updateGradientStopPatch(el, index, changes) {
46067
45911
  const state = gradientStateOf(el);
46068
- const stops = state.stops.map((s, i) => i === index ? { ...s, ...changes } : s);
46069
- return gradientStatePatch(el, { ...state, stops: sortStops(stops) });
45912
+ return gradientStatePatch(el, {
45913
+ ...state,
45914
+ stops: chart.updateGradientStop(state.stops, index, changes)
45915
+ });
46070
45916
  }
46071
45917
  function defaultGradientState() {
46072
45918
  return { type: "linear", angle: 90, stops: [{ ...DEFAULT_STOP_A }, { ...DEFAULT_STOP_B }] };
46073
45919
  }
46074
- function sortStops(stops) {
46075
- return stops.slice().sort((a, b) => a.position - b.position);
46076
- }
46077
45920
  function sanitizeStops(raw) {
46078
45921
  const valid = raw.filter(
46079
45922
  (s) => typeof s.color === "string" && s.color.trim().length > 0 && typeof s.position === "number" && Number.isFinite(s.position)
@@ -46084,7 +45927,7 @@ function sanitizeStops(raw) {
46084
45927
  opacity: typeof s.opacity === "number" && Number.isFinite(s.opacity) ? s.opacity : void 0,
46085
45928
  colorRef: s.colorRef
46086
45929
  }));
46087
- return sortStops(mapped);
45930
+ return chart.sortGradientStops(mapped);
46088
45931
  }
46089
45932
  function imageAdjustmentsStateOf(el) {
46090
45933
  const fx = pptx.isImageLikeElement(el) ? el.imageEffects : void 0;
@@ -53115,7 +52958,7 @@ function axisTitle(current, show) {
53115
52958
  return show ? current || AXIS_TITLE : void 0;
53116
52959
  }
53117
52960
  function applyChartQuickLayout(chartData, layout) {
53118
- const withGrid = patchChartData(chartData, chunkQM4FGZG4_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
52961
+ const withGrid = patchChartData(chartData, chunkAIL3BNZS_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
53119
52962
  const axes = (withGrid.axes ?? []).map((axis) => {
53120
52963
  if (axis.axisType === "valAx") {
53121
52964
  return {
@@ -53169,7 +53012,7 @@ function matchesLayout(chartData, layout) {
53169
53012
  const legend = style.hasLegend ? style.legendPosition ?? "r" : null;
53170
53013
  const isBar = chartData.chartType === "bar" || chartData.chartType === "bar3D";
53171
53014
  const barMatches = !isBar || (chartData.barGapWidth ?? 150) === layout.gapWidth && (chartData.barOverlap ?? 0) === layout.overlap;
53172
- return barMatches && Boolean(style.hasTitle) === layout.title && legend === layout.legend && Boolean(style.hasDataLabels) === layout.dataLabels && Boolean(chartData.dataTable) === layout.dataTable && Boolean(catAxis?.titleText) === layout.catAxisTitle && Boolean(valAxis?.titleText) === layout.valAxisTitle && chunkQM4FGZG4_cjs.chartGridlinesState(chartData) === layout.majorGridlines && Boolean(valAxis?.minorGridlines) === layout.minorGridlines && !valAxis?.deleted === layout.valueAxis;
53015
+ return barMatches && Boolean(style.hasTitle) === layout.title && legend === layout.legend && Boolean(style.hasDataLabels) === layout.dataLabels && Boolean(chartData.dataTable) === layout.dataTable && Boolean(catAxis?.titleText) === layout.catAxisTitle && Boolean(valAxis?.titleText) === layout.valAxisTitle && chunkAIL3BNZS_cjs.chartGridlinesState(chartData) === layout.majorGridlines && Boolean(valAxis?.minorGridlines) === layout.minorGridlines && !valAxis?.deleted === layout.valueAxis;
53173
53016
  }
53174
53017
  var CHART_QUICK_LAYOUT_GALLERY = {
53175
53018
  build(ctx) {
@@ -58397,7 +58240,7 @@ function createGestureController(deps) {
58397
58240
  startClientX: pointer.clientX,
58398
58241
  startClientY: pointer.clientY,
58399
58242
  startBox: { ...box },
58400
- rotate: kind === "rotate" ? createRotationDrag(boxCenter(box), stagePoint(pointer), box.rotation ?? 0) : void 0,
58243
+ rotate: kind === "rotate" ? geometry.createRotationDrag(boxCenter(box), stagePoint(pointer), box.rotation ?? 0) : void 0,
58401
58244
  handle,
58402
58245
  moved: false,
58403
58246
  last: null
@@ -58618,7 +58461,7 @@ function isSeriesUsingSecondaryAxis(chartData, seriesIndex) {
58618
58461
  if (!series) {
58619
58462
  return false;
58620
58463
  }
58621
- return chunkQM4FGZG4_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58464
+ return chunkAIL3BNZS_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58622
58465
  }
58623
58466
  function resolveSecondaryAxisId(chartData, useSecondary) {
58624
58467
  const axPos = useSecondary ? "r" : "l";
@@ -59156,11 +58999,11 @@ async function buildForeignObjectSvgBody(element, doc, options) {
59156
58999
  backgroundColor,
59157
59000
  readComputedStyle = (el) => window.getComputedStyle(el)
59158
59001
  } = options;
59159
- await chunkOHE5UXST_cjs.settleThreeViews(element);
59002
+ await chunkYHA6XAB3_cjs.settleThreeViews(element);
59160
59003
  const clone = element.cloneNode(true);
59161
59004
  inlineComputedStylesOnClone(element, clone, readComputedStyle);
59162
- chunkOHE5UXST_cjs.snapshotThreeViewsIntoClone(element, clone);
59163
- chunkOHE5UXST_cjs.prepareExportClone(clone);
59005
+ chunkYHA6XAB3_cjs.snapshotThreeViewsIntoClone(element, clone);
59006
+ chunkYHA6XAB3_cjs.prepareExportClone(clone);
59164
59007
  const [{ allEmbedded: imagesEmbedded }, externalFonts] = await Promise.all([
59165
59008
  embedImagesOnClone(clone),
59166
59009
  collectExternalFontFaceCss(doc, fetchAsDataUrl)
@@ -59986,7 +59829,7 @@ function editGeometryBounds(geometry) {
59986
59829
  }
59987
59830
  return { minX, minY, maxX, maxY };
59988
59831
  }
59989
- function fmt4(value) {
59832
+ function fmt3(value) {
59990
59833
  return String(Math.round(value * 1e3) / 1e3);
59991
59834
  }
59992
59835
  function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POINTS_PATH_SCALE) {
@@ -60001,7 +59844,7 @@ function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POIN
60001
59844
  const segments = [];
60002
59845
  const start = pt(sub.nodes[0]);
60003
59846
  segments.push({ type: "moveTo", pt: start });
60004
- svg2.push(`M ${fmt4(start.x)} ${fmt4(start.y)}`);
59847
+ svg2.push(`M ${fmt3(start.x)} ${fmt3(start.y)}`);
60005
59848
  sub.segments.forEach((seg, i) => {
60006
59849
  if (sub.closed && seg.kind === "line" && i === sub.segments.length - 1) {
60007
59850
  return;
@@ -60009,13 +59852,13 @@ function editGeometryToPaths(geometry, ox, oy, width, height, scale2 = EDIT_POIN
60009
59852
  const end = pt(sub.nodes[(i + 1) % sub.nodes.length]);
60010
59853
  if (seg.kind === "line") {
60011
59854
  segments.push({ type: "lineTo", pt: end });
60012
- svg2.push(`L ${fmt4(end.x)} ${fmt4(end.y)}`);
59855
+ svg2.push(`L ${fmt3(end.x)} ${fmt3(end.y)}`);
60013
59856
  } else {
60014
59857
  const c1 = pt(seg.c1);
60015
59858
  const c2 = pt(seg.c2);
60016
59859
  segments.push({ type: "cubicBezTo", pts: [c1, c2, end] });
60017
59860
  svg2.push(
60018
- `C ${fmt4(c1.x)} ${fmt4(c1.y)} ${fmt4(c2.x)} ${fmt4(c2.y)} ${fmt4(end.x)} ${fmt4(end.y)}`
59861
+ `C ${fmt3(c1.x)} ${fmt3(c1.y)} ${fmt3(c2.x)} ${fmt3(c2.y)} ${fmt3(end.x)} ${fmt3(end.y)}`
60019
59862
  );
60020
59863
  }
60021
59864
  });
@@ -61500,7 +61343,7 @@ var HANDLE_ANCHORS = [
61500
61343
  ["sw", 0, 1],
61501
61344
  ["w", 0, 0.5]
61502
61345
  ];
61503
- function fmt5(n) {
61346
+ function fmt4(n) {
61504
61347
  return String(Math.round(n * 1e3) / 1e3);
61505
61348
  }
61506
61349
  function handleFor(id, fx, fy, frameW, frameH, len, thick) {
@@ -61509,7 +61352,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
61509
61352
  const height = fy === 0.5 ? len : isCorner ? len : thick;
61510
61353
  const left = fx === 0 ? 0 : fx === 1 ? frameW - width : frameW / 2 - width / 2;
61511
61354
  const top = fy === 0 ? 0 : fy === 1 ? frameH - height : frameH / 2 - height / 2;
61512
- let path = `M0 0 H${fmt5(width)} V${fmt5(height)} H0 Z`;
61355
+ let path = `M0 0 H${fmt4(width)} V${fmt4(height)} H0 Z`;
61513
61356
  if (isCorner) {
61514
61357
  const x0 = fx === 0 ? 0 : len;
61515
61358
  const y0 = fy === 0 ? 0 : len;
@@ -61523,7 +61366,7 @@ function handleFor(id, fx, fy, frameW, frameH, len, thick) {
61523
61366
  [x0 + sx * thick, y0 + sy * len],
61524
61367
  [x0, y0 + sy * len]
61525
61368
  ];
61526
- path = `M${pts.map(([x, y]) => `${fmt5(x)} ${fmt5(y)}`).join(" L")} Z`;
61369
+ path = `M${pts.map(([x, y]) => `${fmt4(x)} ${fmt4(y)}`).join(" L")} Z`;
61527
61370
  }
61528
61371
  return { id, left, top, width, height, path, cursor: CURSORS[id] };
61529
61372
  }
@@ -61541,8 +61384,8 @@ function buildCropOverlay(el, zoom = 1) {
61541
61384
  };
61542
61385
  const hx = frame.x - image.x;
61543
61386
  const hy = frame.y - image.y;
61544
- const outer2 = `M0 0 H${fmt5(image.width)} V${fmt5(image.height)} H0 Z`;
61545
- const hole = `M${fmt5(hx)} ${fmt5(hy)} H${fmt5(hx + frame.width)} V${fmt5(hy + frame.height)} H${fmt5(hx)} Z`;
61387
+ const outer2 = `M0 0 H${fmt4(image.width)} V${fmt4(image.height)} H0 Z`;
61388
+ const hole = `M${fmt4(hx)} ${fmt4(hy)} H${fmt4(hx + frame.width)} V${fmt4(hy + frame.height)} H${fmt4(hx)} Z`;
61546
61389
  const flips = [
61547
61390
  start.flipHorizontal ? "scaleX(-1)" : "",
61548
61391
  start.flipVertical ? "scaleY(-1)" : ""
@@ -64583,6 +64426,28 @@ function applySorterAction(state, slides, action, active2) {
64583
64426
  }
64584
64427
  }
64585
64428
 
64429
+ // src/pptx/render/viewer-root-options.ts
64430
+ var VIEWER_ROOT_OPTION_DEFAULTS = Object.freeze({
64431
+ initialSlide: 0,
64432
+ showToolbar: true,
64433
+ showThumbnails: true
64434
+ });
64435
+ function resolveViewerRootOptions(options) {
64436
+ const initialSlide = options?.initialSlide;
64437
+ return {
64438
+ initialSlide: typeof initialSlide === "number" && Number.isFinite(initialSlide) ? initialSlide : VIEWER_ROOT_OPTION_DEFAULTS.initialSlide,
64439
+ showToolbar: options?.showToolbar ?? VIEWER_ROOT_OPTION_DEFAULTS.showToolbar,
64440
+ showThumbnails: options?.showThumbnails ?? VIEWER_ROOT_OPTION_DEFAULTS.showThumbnails
64441
+ };
64442
+ }
64443
+ function resolveInitialSlideIndex(initialSlide, slideCount) {
64444
+ if (!(slideCount > 0)) {
64445
+ return 0;
64446
+ }
64447
+ const requested = resolveViewerRootOptions({ initialSlide }).initialSlide;
64448
+ return Math.min(Math.max(Math.trunc(requested), 0), Math.trunc(slideCount) - 1);
64449
+ }
64450
+
64586
64451
  // src/pptx/web-components/control-styles.ts
64587
64452
  var sheetsByDocument = /* @__PURE__ */ new WeakMap();
64588
64453
  function attachControlStyles(root, css) {
@@ -65546,9 +65411,12 @@ function defineOnce(registry2, tag, make) {
65546
65411
  assertContract(registry2, tag);
65547
65412
  if (registry2.get(tag)) return;
65548
65413
  const ctor = make();
65549
- Object.defineProperty(ctor, CONTRACT_KEY, { value: CONTRACT_REVISION });
65414
+ markContract(ctor);
65550
65415
  registry2.define(tag, ctor);
65551
65416
  }
65417
+ function markContract(ctor) {
65418
+ Object.defineProperty(ctor, CONTRACT_KEY, { value: CONTRACT_REVISION });
65419
+ }
65552
65420
  function browserRegistry() {
65553
65421
  return typeof window === "undefined" ? void 0 : window.customElements;
65554
65422
  }
@@ -66074,6 +65942,7 @@ var BUILT_IN = {
66074
65942
  clock: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M10 6v4l3 2",
66075
65943
  reset: "M4 10a6 6 0 1 1 1.8 4.2M4 6v4h4",
66076
65944
  plus: "M10 4v12M4 10h12",
65945
+ upload: "M10 13V3M6 7l4-4 4 4M3 12v5h14v-5",
66077
65946
  minus: "M4 10h12",
66078
65947
  search: "M3 8.5a5.5 5.5 0 1 0 11 0 5.5 5.5 0 1 0-11 0M13 13l4 4",
66079
65948
  undo: "M7.5 11.5 3.5 7.5l4-4M3.5 7.5h9a4 4 0 0 1 0 8H10",
@@ -69759,21 +69628,21 @@ function definePptxPresenterConsole(registry2) {
69759
69628
  }
69760
69629
 
69761
69630
  // src/pptx/web-components/registration-contract.ts
69762
- var CONTRACT_REVISION2 = 1;
69763
- var CONTRACT_KEY2 = /* @__PURE__ */ Symbol.for("pptx-viewer.web-control-contract");
69631
+ var LEGACY_KEY = /* @__PURE__ */ Symbol.for("pptx-viewer.web-control-contract");
69764
69632
  function assertWebControlContract(registry2, names) {
69765
69633
  for (const name of names) {
69766
- const ctor = registry2.get(name);
69767
- const revision = ctor?.[CONTRACT_KEY2];
69768
- if (revision !== void 0 && revision !== CONTRACT_REVISION2) {
69634
+ assertContract(registry2, name);
69635
+ const revision = registry2.get(name)?.[LEGACY_KEY];
69636
+ if (revision !== void 0 && revision !== CONTRACT_REVISION) {
69769
69637
  throw new Error(
69770
- `Incompatible ${name} contract (${revision}; expected ${CONTRACT_REVISION2}). Use matching viewer bindings in this window.`
69638
+ `Incompatible ${name} contract (${revision}; expected ${CONTRACT_REVISION}). Use matching viewer bindings in this window.`
69771
69639
  );
69772
69640
  }
69773
69641
  }
69774
69642
  }
69775
69643
  function markWebControlContract(ctor) {
69776
- Object.defineProperty(ctor, CONTRACT_KEY2, { value: CONTRACT_REVISION2 });
69644
+ markContract(ctor);
69645
+ Object.defineProperty(ctor, LEGACY_KEY, { value: CONTRACT_REVISION });
69777
69646
  }
69778
69647
 
69779
69648
  // src/pptx/web-components/ribbon-scoped-styles.ts
@@ -74258,7 +74127,7 @@ function applyChart3DDrag(bridge, detail) {
74258
74127
  return;
74259
74128
  }
74260
74129
  bridge.commitChartData(
74261
- chunkWLETAW3T_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74130
+ chunkCJU4P5FT_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74262
74131
  );
74263
74132
  }
74264
74133
  function detailOf(event) {
@@ -74735,7 +74604,7 @@ function calculateNotesPageLayout(slideWidth, slideHeight) {
74735
74604
  };
74736
74605
  }
74737
74606
  function wrapNotesText(text3, maxWidth, fontSize) {
74738
- return chunkQM4FGZG4_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
74607
+ return chunkAIL3BNZS_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
74739
74608
  }
74740
74609
  function calculateContinuationPageMaxLines() {
74741
74610
  const contentHeight = NOTES_PAGE_H - 2 * NOTES_MARGIN;
@@ -76447,6 +76316,10 @@ Object.defineProperty(exports, "computeDistribute", {
76447
76316
  enumerable: true,
76448
76317
  get: function () { return geometry.computeDistribute; }
76449
76318
  });
76319
+ Object.defineProperty(exports, "computeRotation", {
76320
+ enumerable: true,
76321
+ get: function () { return geometry.computeRotation; }
76322
+ });
76450
76323
  Object.defineProperty(exports, "computeSnap", {
76451
76324
  enumerable: true,
76452
76325
  get: function () { return geometry.computeSnap; }
@@ -76455,6 +76328,10 @@ Object.defineProperty(exports, "computeSnapToShape", {
76455
76328
  enumerable: true,
76456
76329
  get: function () { return geometry.computeSnapToShape; }
76457
76330
  });
76331
+ Object.defineProperty(exports, "createRotationDrag", {
76332
+ enumerable: true,
76333
+ get: function () { return geometry.createRotationDrag; }
76334
+ });
76458
76335
  Object.defineProperty(exports, "distributeElements", {
76459
76336
  enumerable: true,
76460
76337
  get: function () { return geometry.distributeElements; }
@@ -77717,6 +77594,7 @@ exports.VIEWER_PANEL_DESCRIPTIONS = VIEWER_PANEL_DESCRIPTIONS;
77717
77594
  exports.VIEWER_PANEL_IDS = VIEWER_PANEL_IDS;
77718
77595
  exports.VIEWER_PREFERENCE_TOGGLES = VIEWER_PREFERENCE_TOGGLES;
77719
77596
  exports.VIEWER_PREFS_STORAGE_KEY = VIEWER_PREFS_STORAGE_KEY;
77597
+ exports.VIEWER_ROOT_OPTION_DEFAULTS = VIEWER_ROOT_OPTION_DEFAULTS;
77720
77598
  exports.VIEWER_SHORTCUT_REFERENCE = VIEWER_SHORTCUT_REFERENCE;
77721
77599
  exports.VIEW_EDITABLE_COMMANDS = VIEW_EDITABLE_COMMANDS;
77722
77600
  exports.WARP_PATH_GENERATORS = WARP_PATH_GENERATORS;
@@ -78154,7 +78032,6 @@ exports.computeRadialLayout = computeRadialLayout;
78154
78032
  exports.computeReadingOrder = computeReadingOrder;
78155
78033
  exports.computeResizedColumnWidths = computeResizedColumnWidths;
78156
78034
  exports.computeResizedRowHeight = computeResizedRowHeight;
78157
- exports.computeRotation = computeRotation;
78158
78035
  exports.computeScrollDelta = computeScrollDelta;
78159
78036
  exports.computeShadeToTitleFillToRect = computeShadeToTitleFillToRect;
78160
78037
  exports.computeSmartArtElementLayout = computeSmartArtElementLayout;
@@ -78213,7 +78090,6 @@ exports.createPresenterPointer = createPresenterPointer;
78213
78090
  exports.createPresenterShowGuard = createPresenterShowGuard;
78214
78091
  exports.createPresenterTimer = createPresenterTimer;
78215
78092
  exports.createRibbonControlIcon = createRibbonControlIcon;
78216
- exports.createRotationDrag = createRotationDrag;
78217
78093
  exports.createSheetDismissGesture = createSheetDismissGesture;
78218
78094
  exports.createSlideSorterState = createSlideSorterState;
78219
78095
  exports.createSyncGate = createSyncGate;
@@ -79155,6 +79031,7 @@ exports.resolveHistoryDepth = resolveHistoryDepth;
79155
79031
  exports.resolveHyperlinkTargetAttrs = resolveHyperlinkTargetAttrs;
79156
79032
  exports.resolveImageResolutionPpi = resolveImageResolutionPpi;
79157
79033
  exports.resolveImageResolutionScale = resolveImageResolutionScale;
79034
+ exports.resolveInitialSlideIndex = resolveInitialSlideIndex;
79158
79035
  exports.resolveInlineEditAutoFitHeight = resolveInlineEditAutoFitHeight;
79159
79036
  exports.resolveInlineEditNormAutofitShrink = resolveInlineEditNormAutofitShrink;
79160
79037
  exports.resolveInsertedFieldText = resolveInsertedFieldText;
@@ -79239,6 +79116,7 @@ exports.resolveVertOverflowEllipsisStyle = resolveVertOverflowEllipsisStyle;
79239
79116
  exports.resolveVerticalAnchorJustifyContent = resolveVerticalAnchorJustifyContent;
79240
79117
  exports.resolveViewerAddinRows = resolveViewerAddinRows;
79241
79118
  exports.resolveViewerAddinStatus = resolveViewerAddinStatus;
79119
+ exports.resolveViewerRootOptions = resolveViewerRootOptions;
79242
79120
  exports.resolveViewportFitOptions = resolveViewportFitOptions;
79243
79121
  exports.resolveVisibleRibbonTabs = resolveVisibleRibbonTabs;
79244
79122
  exports.resolveWheelSpokeCount = resolveWheelSpokeCount;