ooxml-ui 1.5.0 → 1.6.1

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 (145) hide show
  1. package/custom-elements.json +59 -0
  2. package/dist/{chunk-FN3MBKHE.js → chunk-L7JV5FVE.js} +1 -1
  3. package/dist/{chunk-CXOK5QWQ.js → chunk-OGNNNTKI.js} +1 -1
  4. package/dist/{chunk-6YEWVS7I.js → chunk-PXIYHFZ5.js} +1 -1
  5. package/dist/{chunk-YNGNCKBE.js → chunk-QAIVGTQZ.js} +3 -3
  6. package/dist/{chunk-J2WUY2Q4.js → chunk-QHAE6Y5B.js} +156 -8
  7. package/dist/{chunk-V5P7RPMN.js → chunk-Z7CS3UUK.js} +5 -4
  8. package/dist/controls.d.ts +4 -2
  9. package/dist/controls.d.ts.map +1 -1
  10. package/dist/controls.js +3 -3
  11. package/dist/docx.js +4 -4
  12. package/dist/export/pdf-pages.d.ts +29 -0
  13. package/dist/form/symbol-picker.d.ts +45 -0
  14. package/dist/form/symbol-picker.d.ts.map +1 -0
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +6 -6
  17. package/dist/pptx/{chart-3d-view-scene-SE2Y6QRE.cjs → chart-3d-view-scene-55WDENSO.cjs} +38 -38
  18. package/dist/pptx/{chart-3d-view-scene-OYJ4CDCO.mjs → chart-3d-view-scene-ERX2GRCD.mjs} +2 -2
  19. package/dist/pptx/{chunk-CIVA3MLN.mjs → chunk-AWQRQUPL.mjs} +2 -1
  20. package/dist/pptx/{chunk-O2TZQM65.cjs → chunk-BLAJIEXA.cjs} +271 -155
  21. package/dist/pptx/{chunk-LQLOD3HL.mjs → chunk-E55NU4BF.mjs} +121 -8
  22. package/dist/pptx/{chunk-7DMJEYQJ.cjs → chunk-G2YUKLRX.cjs} +1 -1
  23. package/dist/pptx/{chunk-IURZJAWP.cjs → chunk-LCIXR7WE.cjs} +55 -0
  24. package/dist/pptx/{chunk-WKLHJEPD.cjs → chunk-RPRC2EG5.cjs} +14 -13
  25. package/dist/pptx/{chunk-STLXPKJJ.mjs → chunk-SVN6OBG4.mjs} +55 -0
  26. package/dist/pptx/{chunk-LHNTMJSK.mjs → chunk-TKATCPOK.mjs} +1 -1
  27. package/dist/pptx/dom/elements/text-block.d.ts.map +1 -1
  28. package/dist/pptx/dom/index.cjs +252 -248
  29. package/dist/pptx/dom/index.mjs +12 -8
  30. package/dist/pptx/export/html2canvas-clone.cjs +2 -2
  31. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  32. package/dist/pptx/index.cjs +3032 -3020
  33. package/dist/pptx/index.mjs +4 -4
  34. package/dist/pptx/render/chart-combo-stock.cjs +3 -3
  35. package/dist/pptx/render/chart-combo-stock.mjs +1 -1
  36. package/dist/pptx/render/chart-gradient-defs.d.ts.map +1 -1
  37. package/dist/pptx/render/chart-overlays.cjs +7 -7
  38. package/dist/pptx/render/chart-overlays.mjs +1 -1
  39. package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
  40. package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
  41. package/dist/pptx/render/chart-view-model-dom-helpers.d.ts.map +1 -1
  42. package/dist/pptx/render/chart-view-model.cjs +44 -44
  43. package/dist/pptx/render/chart-view-model.mjs +1 -1
  44. package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
  45. package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
  46. package/dist/pptx/render/element-action-affordance.d.ts +1 -1
  47. package/dist/pptx/render/element-action-affordance.d.ts.map +1 -1
  48. package/dist/pptx/render/index.d.ts +1 -0
  49. package/dist/pptx/render/index.d.ts.map +1 -1
  50. package/dist/pptx/render/presentation-action.d.ts.map +1 -1
  51. package/dist/pptx/render/text-run-meta.d.ts +2 -0
  52. package/dist/pptx/render/text-run-meta.d.ts.map +1 -1
  53. package/dist/pptx/render/viewer-hyperlinks.d.ts +34 -0
  54. package/dist/pptx/render/viewer-hyperlinks.d.ts.map +1 -0
  55. package/dist/presence.js +2 -2
  56. package/dist/ribbon/gallery.d.ts.map +1 -1
  57. package/dist/smartart/smartart.d.ts +1 -1
  58. package/dist/smartart.js +2 -2
  59. package/dist/teams/app-rail.d.ts +1 -1
  60. package/dist/teams/avatar.d.ts +1 -1
  61. package/dist/teams/call-controls.d.ts +1 -1
  62. package/dist/teams/call-grid.d.ts +1 -1
  63. package/dist/teams/channel-list.d.ts +1 -1
  64. package/dist/teams/chat-composer.d.ts +1 -1
  65. package/dist/teams/chat-list.d.ts +1 -1
  66. package/dist/teams/prejoin.d.ts +1 -1
  67. package/dist/teams.js +4 -4
  68. package/dist/visio/controller.d.ts +11 -0
  69. package/dist/visio/format-shape-dialog.d.ts +21 -0
  70. package/dist/visio/page-setup-action.d.ts +29 -0
  71. package/dist/visio/page-setup-dialog-form.d.ts +32 -0
  72. package/dist/visio/presentation-keys.d.ts +41 -0
  73. package/dist/visio/render-effects.d.ts +10 -0
  74. package/dist/visio/render-shadow.d.ts +7 -0
  75. package/dist/visio/ribbon-action.d.ts +97 -4
  76. package/dist/visio/ribbon-change-shape.d.ts +11 -0
  77. package/dist/visio/ribbon-diagram-parts.d.ts +14 -0
  78. package/dist/visio/ribbon-layout.d.ts +11 -0
  79. package/dist/visio/ribbon-other-tabs.d.ts +2 -5
  80. package/dist/visio/ribbon-page-setup.d.ts +12 -0
  81. package/dist/visio/ribbon-parts.d.ts +1 -0
  82. package/dist/visio/ribbon-review.d.ts +4 -0
  83. package/dist/visio/ribbon-router.d.ts +29 -1
  84. package/dist/visio/ribbon-shape-styles.d.ts +17 -0
  85. package/dist/visio/ribbon-themes.d.ts +17 -0
  86. package/dist/visio/ribbon-view.d.ts +1 -1
  87. package/dist/visio/shapes-sections.d.ts +12 -0
  88. package/dist/visio/shapes-window.d.ts +3 -31
  89. package/dist/visio/stencil-catalog.d.ts +47 -0
  90. package/dist/visio/styles.d.ts +1 -1
  91. package/dist/visio/text-run-style.d.ts +9 -0
  92. package/dist/visio/viewer-backstage.d.ts +7 -0
  93. package/dist/visio/viewer-change-shape.d.ts +16 -0
  94. package/dist/visio/viewer-chrome.d.ts +1 -1
  95. package/dist/visio/viewer-commands.d.ts +6 -0
  96. package/dist/visio/viewer-comment-threads.d.ts +17 -0
  97. package/dist/visio/viewer-comments.d.ts +25 -0
  98. package/dist/visio/viewer-connection-points.d.ts +31 -0
  99. package/dist/visio/viewer-connector-routes.d.ts +24 -0
  100. package/dist/visio/viewer-connector-tool.d.ts +42 -0
  101. package/dist/visio/viewer-data-import.d.ts +31 -0
  102. package/dist/visio/viewer-data-links.d.ts +25 -0
  103. package/dist/visio/viewer-data-sources.d.ts +23 -0
  104. package/dist/visio/viewer-data-window.d.ts +17 -0
  105. package/dist/visio/viewer-data.d.ts +28 -0
  106. package/dist/visio/viewer-diagram-parts.d.ts +17 -0
  107. package/dist/visio/viewer-dialog.d.ts +31 -0
  108. package/dist/visio/viewer-draw-tool.d.ts +12 -4
  109. package/dist/visio/viewer-drawing-gesture.d.ts +6 -4
  110. package/dist/visio/viewer-edit-controls.d.ts +1 -1
  111. package/dist/visio/viewer-element.d.ts +5 -0
  112. package/dist/visio/viewer-explorer.d.ts +17 -0
  113. package/dist/visio/viewer-export.d.ts +17 -0
  114. package/dist/visio/viewer-format-painter.d.ts +20 -0
  115. package/dist/visio/viewer-format-shape.d.ts +16 -0
  116. package/dist/visio/viewer-grouping.d.ts +13 -0
  117. package/dist/visio/viewer-guides.d.ts +27 -0
  118. package/dist/visio/viewer-insert-dialog.d.ts +41 -0
  119. package/dist/visio/viewer-insert.d.ts +25 -0
  120. package/dist/visio/viewer-issues.d.ts +29 -0
  121. package/dist/visio/viewer-layer-assign.d.ts +17 -0
  122. package/dist/visio/viewer-layout-commands.d.ts +41 -0
  123. package/dist/visio/viewer-layout.d.ts +24 -0
  124. package/dist/visio/viewer-page-breaks.d.ts +6 -0
  125. package/dist/visio/viewer-page-setup-dialog.d.ts +20 -0
  126. package/dist/visio/viewer-page-setup.d.ts +23 -0
  127. package/dist/visio/viewer-paste-special.d.ts +18 -0
  128. package/dist/visio/viewer-pointer-gestures.d.ts +5 -0
  129. package/dist/visio/viewer-presentation.d.ts +29 -0
  130. package/dist/visio/viewer-review.d.ts +23 -0
  131. package/dist/visio/viewer-select-type.d.ts +16 -0
  132. package/dist/visio/viewer-shape-data.d.ts +16 -0
  133. package/dist/visio/viewer-shape-report.d.ts +26 -0
  134. package/dist/visio/viewer-shape-styles.d.ts +9 -0
  135. package/dist/visio/viewer-shape-target.d.ts +7 -0
  136. package/dist/visio/viewer-stencil.d.ts +1 -1
  137. package/dist/visio/viewer-subprocess.d.ts +22 -0
  138. package/dist/visio/viewer-text-block.d.ts +23 -0
  139. package/dist/visio/viewer-text-dialog.d.ts +24 -0
  140. package/dist/visio/viewer-text-features.d.ts +24 -0
  141. package/dist/visio/viewer-text-insert.d.ts +28 -0
  142. package/dist/visio/viewer-themes.d.ts +16 -0
  143. package/dist/visio.js +14634 -6446
  144. package/dist/xlsx.js +7 -7
  145. package/package.json +2 -2
@@ -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 chunkWKLHJEPD_cjs = require('./chunk-WKLHJEPD.cjs');
7
+ var chunkRPRC2EG5_cjs = require('./chunk-RPRC2EG5.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,10 +12,10 @@ 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 chunkIURZJAWP_cjs = require('./chunk-IURZJAWP.cjs');
15
+ var chunkLCIXR7WE_cjs = require('./chunk-LCIXR7WE.cjs');
16
16
  var chunkFOE75Z6N_cjs = require('./chunk-FOE75Z6N.cjs');
17
17
  var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
- var chunk7DMJEYQJ_cjs = require('./chunk-7DMJEYQJ.cjs');
18
+ var chunkG2YUKLRX_cjs = require('./chunk-G2YUKLRX.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');
@@ -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 = chunkIURZJAWP_cjs.buildRectPathGradientSvg(rectStops, focalPoint, fillToRect);
1073
+ const markup = chunkLCIXR7WE_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 = chunkIURZJAWP_cjs.normalizeHexColor(style.strokeColor, "#000000");
1088
- const bg = chunkIURZJAWP_cjs.normalizeHexColor(style.strokePatternBackgroundColor, "#ffffff");
1089
- const tile4 = chunkIURZJAWP_cjs.getPatternTile(style.strokePatternPreset, fg, bg);
1087
+ const fg = chunkLCIXR7WE_cjs.normalizeHexColor(style.strokeColor, "#000000");
1088
+ const bg = chunkLCIXR7WE_cjs.normalizeHexColor(style.strokePatternBackgroundColor, "#ffffff");
1089
+ const tile4 = chunkLCIXR7WE_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 chunkIURZJAWP_cjs.sanitizeGradientStops(stops).map((stop) => ({
1112
+ return chunkLCIXR7WE_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 } = chunkIURZJAWP_cjs.computeGradientCenter(source.fillToRect, source.focalPoint);
1139
+ const { cx, cy } = chunkLCIXR7WE_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));
@@ -1278,12 +1278,12 @@ function getPresetShapeVectorGeometry(shapeType, width, height, adjustments) {
1278
1278
  function outlineStrands(compoundLine, strokeWidth) {
1279
1279
  const offsets2 = getCompoundLineOffsets(compoundLine, strokeWidth);
1280
1280
  if (offsets2.length <= 1) {
1281
- return [{ strokeWidth, cssStrokeWidth: chunk7DMJEYQJ_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1281
+ return [{ strokeWidth, cssStrokeWidth: chunkG2YUKLRX_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1282
1282
  }
1283
1283
  const widths = getCompoundLineWidths(compoundLine, strokeWidth);
1284
1284
  return offsets2.map((offset, idx) => {
1285
1285
  const width = widths[idx] ?? strokeWidth;
1286
- return { strokeWidth: width, cssStrokeWidth: chunk7DMJEYQJ_cjs.screenStrokeWidth(width), offset };
1286
+ return { strokeWidth: width, cssStrokeWidth: chunkG2YUKLRX_cjs.screenStrokeWidth(width), offset };
1287
1287
  });
1288
1288
  }
1289
1289
  function needsCenteredStrokeOverlay(element, style, declaredWidth) {
@@ -1319,11 +1319,11 @@ function buildStrokeOutline(element) {
1319
1319
  return {
1320
1320
  d,
1321
1321
  paint,
1322
- stroke: paint ? svgGradientFillRef(paint) : chunkIURZJAWP_cjs.colorWithOpacity(style?.strokeColor ?? chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1322
+ stroke: paint ? svgGradientFillRef(paint) : chunkLCIXR7WE_cjs.colorWithOpacity(style?.strokeColor ?? chunkLCIXR7WE_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1323
1323
  strokeWidth,
1324
1324
  strands: outlineStrands(style?.compoundLine, strokeWidth),
1325
- dashArray: chunkIURZJAWP_cjs.getSvgStrokeDasharray(
1326
- chunkIURZJAWP_cjs.normalizeStrokeDashType(style?.strokeDash),
1325
+ dashArray: chunkLCIXR7WE_cjs.getSvgStrokeDasharray(
1326
+ chunkLCIXR7WE_cjs.normalizeStrokeDashType(style?.strokeDash),
1327
1327
  Math.max(strokeWidth, 1),
1328
1328
  style?.customDashSegments
1329
1329
  ),
@@ -1503,18 +1503,18 @@ function getComputedStrokeStyle(element) {
1503
1503
  return { ...NO_STROKE, ...joins };
1504
1504
  }
1505
1505
  const borderWidth = width;
1506
- const borderStyle = chunkIURZJAWP_cjs.getCssBorderDashStyle(
1507
- chunkIURZJAWP_cjs.normalizeStrokeDashType(style.strokeDash),
1506
+ const borderStyle = chunkLCIXR7WE_cjs.getCssBorderDashStyle(
1507
+ chunkLCIXR7WE_cjs.normalizeStrokeDashType(style.strokeDash),
1508
1508
  style.compoundLine
1509
1509
  );
1510
- const rawColor = style.strokeColor ?? chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR;
1511
- const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkIURZJAWP_cjs.colorWithOpacity(chunkIURZJAWP_cjs.normalizeHexColor(rawColor, chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
1510
+ const rawColor = style.strokeColor ?? chunkLCIXR7WE_cjs.DEFAULT_STROKE_COLOR;
1511
+ const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkLCIXR7WE_cjs.colorWithOpacity(chunkLCIXR7WE_cjs.normalizeHexColor(rawColor, chunkLCIXR7WE_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
1512
1512
  return {
1513
1513
  borderWidth,
1514
- cssBorderWidth: chunk7DMJEYQJ_cjs.screenStrokeWidth(borderWidth),
1514
+ cssBorderWidth: chunkG2YUKLRX_cjs.screenStrokeWidth(borderWidth),
1515
1515
  borderStyle,
1516
1516
  borderColor,
1517
- border: chunk7DMJEYQJ_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
1517
+ border: chunkG2YUKLRX_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
1518
1518
  ...joins
1519
1519
  };
1520
1520
  }
@@ -1670,7 +1670,7 @@ function resolveGroupChildFill(child, parentGroupFill) {
1670
1670
  if (!parentGroupFill || !pptx.hasShapeProperties(child) || child.shapeStyle?.fillMode !== "group") {
1671
1671
  return void 0;
1672
1672
  }
1673
- return chunkIURZJAWP_cjs.getComputedFillStyle(child, parentGroupFill);
1673
+ return chunkLCIXR7WE_cjs.getComputedFillStyle(child, parentGroupFill);
1674
1674
  }
1675
1675
  function getFrameInverseTransform(element) {
1676
1676
  const transforms = [];
@@ -1722,9 +1722,9 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1722
1722
  }
1723
1723
  if (colorNode["a:scrgbClr"]) {
1724
1724
  const scrgb = colorNode["a:scrgbClr"];
1725
- const red = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_r"]);
1726
- const green = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_g"]);
1727
- const blue = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_b"]);
1725
+ const red = chunkLCIXR7WE_cjs.parseDrawingPercent(scrgb["@_r"]);
1726
+ const green = chunkLCIXR7WE_cjs.parseDrawingPercent(scrgb["@_g"]);
1727
+ const blue = chunkLCIXR7WE_cjs.parseDrawingPercent(scrgb["@_b"]);
1728
1728
  if (red !== void 0 && green !== void 0 && blue !== void 0) {
1729
1729
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1730
1730
  const base2 = `#${toHex2(red * 255)}${toHex2(green * 255)}${toHex2(blue * 255)}`;
@@ -1764,8 +1764,8 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1764
1764
  const lumRaw = Number.parseFloat(String(hslNode["@_lum"] ?? ""));
1765
1765
  if (Number.isFinite(hueRaw) && Number.isFinite(satRaw) && Number.isFinite(lumRaw)) {
1766
1766
  const h = hueRaw / 6e4;
1767
- const s = chunkIURZJAWP_cjs.clampUnitInterval(satRaw / 1e5);
1768
- const l = chunkIURZJAWP_cjs.clampUnitInterval(lumRaw / 1e5);
1767
+ const s = chunkLCIXR7WE_cjs.clampUnitInterval(satRaw / 1e5);
1768
+ const l = chunkLCIXR7WE_cjs.clampUnitInterval(lumRaw / 1e5);
1769
1769
  const rgb = pptx.hslToRgb(h, s, l);
1770
1770
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1771
1771
  const base2 = `#${toHex2(rgb.r)}${toHex2(rgb.g)}${toHex2(rgb.b)}`;
@@ -1805,11 +1805,11 @@ function parseDrawingColorOpacity(colorNode) {
1805
1805
  if (!colorChoice) {
1806
1806
  return void 0;
1807
1807
  }
1808
- const alpha = chunkIURZJAWP_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1809
- const alphaMod = chunkIURZJAWP_cjs.parseDrawingPercent(
1808
+ const alpha = chunkLCIXR7WE_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1809
+ const alphaMod = chunkLCIXR7WE_cjs.parseDrawingPercent(
1810
1810
  colorChoice["a:alphaMod"]?.["@_val"]
1811
1811
  );
1812
- const alphaOff = chunkIURZJAWP_cjs.parseDrawingPercent(
1812
+ const alphaOff = chunkLCIXR7WE_cjs.parseDrawingPercent(
1813
1813
  colorChoice["a:alphaOff"]?.["@_val"]
1814
1814
  );
1815
1815
  if (alpha === void 0 && alphaMod === void 0 && alphaOff === void 0) {
@@ -1822,7 +1822,7 @@ function parseDrawingColorOpacity(colorNode) {
1822
1822
  if (alphaOff !== void 0) {
1823
1823
  opacity += alphaOff;
1824
1824
  }
1825
- return chunkIURZJAWP_cjs.clampUnitInterval(opacity);
1825
+ return chunkLCIXR7WE_cjs.clampUnitInterval(opacity);
1826
1826
  }
1827
1827
  function substituteScriptFont(name, panose, baseFontFamily) {
1828
1828
  return name ? pptx.getSubstituteFontFamily(name, pptx.parsePanoseString(panose)) : baseFontFamily;
@@ -2033,7 +2033,7 @@ function buildPatternOverlayTile(pattern) {
2033
2033
  if (!pattern) {
2034
2034
  return void 0;
2035
2035
  }
2036
- const tile4 = chunkIURZJAWP_cjs.getPatternTile(
2036
+ const tile4 = chunkLCIXR7WE_cjs.getPatternTile(
2037
2037
  pattern.preset,
2038
2038
  pattern.foreground ?? "#000000",
2039
2039
  pattern.background ?? "#ffffff"
@@ -3587,10 +3587,10 @@ function getMeasureCtx() {
3587
3587
  return measureCtx;
3588
3588
  }
3589
3589
  function envelopeFontSizePx(font) {
3590
- return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
3590
+ return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
3591
3591
  }
3592
3592
  function toCanvasFont(font, sizePx = envelopeFontSizePx(font)) {
3593
- const family2 = font.fontFamily || chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
3593
+ const family2 = font.fontFamily || chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY;
3594
3594
  return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${sizePx}px ${family2}`;
3595
3595
  }
3596
3596
  function enableKerning(ctx) {
@@ -4585,7 +4585,7 @@ function createGlyphOutlineLookup(cache) {
4585
4585
  return (char, font, x, y) => {
4586
4586
  const parsed = cache.get(font.fontFamily, font.bold, font.italic);
4587
4587
  if (parsed) {
4588
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
4588
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
4589
4589
  const commands = extractGlyphOutlineCommands(parsed, char, x, y, size);
4590
4590
  if (commands) {
4591
4591
  return commands;
@@ -6773,7 +6773,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6773
6773
  let rSquared = 0;
6774
6774
  switch (trendline.trendlineType) {
6775
6775
  case "linear": {
6776
- const reg = chunkIURZJAWP_cjs.computeLinearRegression(xVals, yVals);
6776
+ const reg = chunkLCIXR7WE_cjs.computeLinearRegression(xVals, yVals);
6777
6777
  const intercept = trendline.intercept;
6778
6778
  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;
6779
6779
  const b = intercept ?? reg.intercept;
@@ -6788,7 +6788,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6788
6788
  if (logY.length < 2) {
6789
6789
  return { points: [], equation: "", rSquared: 0 };
6790
6790
  }
6791
- const reg = chunkIURZJAWP_cjs.computeLinearRegression(filteredX, logY);
6791
+ const reg = chunkLCIXR7WE_cjs.computeLinearRegression(filteredX, logY);
6792
6792
  const a = Math.exp(reg.intercept);
6793
6793
  const b = reg.slope;
6794
6794
  evalFn = (x) => a * Math.exp(b * x);
@@ -6802,7 +6802,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6802
6802
  if (lnX.length < 2) {
6803
6803
  return { points: [], equation: "", rSquared: 0 };
6804
6804
  }
6805
- const reg = chunkIURZJAWP_cjs.computeLinearRegression(lnX, filteredY);
6805
+ const reg = chunkLCIXR7WE_cjs.computeLinearRegression(lnX, filteredY);
6806
6806
  evalFn = (x) => x > 0 ? reg.slope * Math.log(x) + reg.intercept : 0;
6807
6807
  equation = `y = ${reg.slope.toFixed(2)}ln(x) + ${reg.intercept.toFixed(2)}`;
6808
6808
  rSquared = reg.rSquared;
@@ -6814,7 +6814,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6814
6814
  if (logX.length < 2) {
6815
6815
  return { points: [], equation: "", rSquared: 0 };
6816
6816
  }
6817
- const reg = chunkIURZJAWP_cjs.computeLinearRegression(logX, logY);
6817
+ const reg = chunkLCIXR7WE_cjs.computeLinearRegression(logX, logY);
6818
6818
  const a = Math.exp(reg.intercept);
6819
6819
  evalFn = (x) => x > 0 ? a * x ** reg.slope : 0;
6820
6820
  equation = `y = ${a.toFixed(2)}x^${reg.slope.toFixed(2)}`;
@@ -6823,10 +6823,10 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6823
6823
  }
6824
6824
  case "polynomial": {
6825
6825
  const order = Math.min(trendline.order ?? 2, 6);
6826
- const coeffs = chunkIURZJAWP_cjs.fitPolynomial(xVals, yVals, order);
6826
+ const coeffs = chunkLCIXR7WE_cjs.fitPolynomial(xVals, yVals, order);
6827
6827
  evalFn = (x) => coeffs.reduce((s, c, i) => s + c * x ** i, 0);
6828
6828
  equation = coeffs.map((c, i) => `${c.toFixed(2)}x^${i}`).join(" + ");
6829
- rSquared = chunkIURZJAWP_cjs.computeRSquared(xVals, yVals, evalFn);
6829
+ rSquared = chunkLCIXR7WE_cjs.computeRSquared(xVals, yVals, evalFn);
6830
6830
  break;
6831
6831
  }
6832
6832
  case "movingAvg": {
@@ -7164,7 +7164,7 @@ var COMBO_SERIES_TYPE_OPTIONS = [
7164
7164
  function patchChartData(data, patch) {
7165
7165
  const { chartType, ...rest } = patch;
7166
7166
  if (chartType === "pareto") {
7167
- return { ...chunkIURZJAWP_cjs.applyParetoConversion(data), ...rest };
7167
+ return { ...chunkLCIXR7WE_cjs.applyParetoConversion(data), ...rest };
7168
7168
  }
7169
7169
  if (chartType && chartType !== data.chartType) {
7170
7170
  const adapted = pptx.chartDataChangeType(data, chartType);
@@ -7226,8 +7226,8 @@ function buildParetoInsertData() {
7226
7226
  layout: "histogram",
7227
7227
  binCount: PARETO_BIN_COUNT
7228
7228
  };
7229
- const bins = chunkIURZJAWP_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7230
- const ordered = chunkIURZJAWP_cjs.orderParetoEntries(
7229
+ const bins = chunkLCIXR7WE_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7230
+ const ordered = chunkLCIXR7WE_cjs.orderParetoEntries(
7231
7231
  bins.map((bin, index) => ({ value: bin.value, label: bin.label, sourcePointIndex: index }))
7232
7232
  );
7233
7233
  return {
@@ -7240,7 +7240,7 @@ function buildParetoInsertData() {
7240
7240
  },
7241
7241
  {
7242
7242
  name: "Cumulative %",
7243
- values: chunkIURZJAWP_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7243
+ values: chunkLCIXR7WE_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7244
7244
  histogramOptions: { layout: "pareto" }
7245
7245
  }
7246
7246
  ]
@@ -7503,7 +7503,7 @@ var FILL_PATTERN_LABEL_KEYS = {
7503
7503
  trellis: "pptx.fillPatterns.trellis",
7504
7504
  zigZag: "pptx.fillPatterns.zigZag"
7505
7505
  };
7506
- var PATTERN_PRESET_OPTIONS = chunkIURZJAWP_cjs.OOXML_PATTERN_PRESETS.map(
7506
+ var PATTERN_PRESET_OPTIONS = chunkLCIXR7WE_cjs.OOXML_PATTERN_PRESETS.map(
7507
7507
  (value) => ({ value, labelKey: FILL_PATTERN_LABEL_KEYS[value] })
7508
7508
  );
7509
7509
 
@@ -7652,41 +7652,41 @@ var CHART_STYLE_PRESETS = [
7652
7652
  id: "colorful",
7653
7653
  labelKey: "pptx.chart.styleColorful",
7654
7654
  styleId: 2,
7655
- palette: () => chunkIURZJAWP_cjs.getChartStylePalette(2)
7655
+ palette: () => chunkLCIXR7WE_cjs.getChartStylePalette(2)
7656
7656
  },
7657
7657
  {
7658
7658
  id: "monochrome",
7659
7659
  labelKey: "pptx.chart.styleMonochrome",
7660
7660
  styleId: 3,
7661
- palette: () => chunkIURZJAWP_cjs.getChartStylePalette(3)
7661
+ palette: () => chunkLCIXR7WE_cjs.getChartStylePalette(3)
7662
7662
  },
7663
7663
  {
7664
7664
  id: "colorfulLight",
7665
7665
  labelKey: "pptx.chart.styleColorfulLight",
7666
7666
  styleId: 18,
7667
- palette: () => recolour((c) => chunkIURZJAWP_cjs.tint(c, 0.3))
7667
+ palette: () => recolour((c) => chunkLCIXR7WE_cjs.tint(c, 0.3))
7668
7668
  },
7669
7669
  {
7670
7670
  id: "colorfulDark",
7671
7671
  labelKey: "pptx.chart.styleColorfulDark",
7672
7672
  styleId: 26,
7673
- palette: () => recolour((c) => chunkIURZJAWP_cjs.shade(c, 0.3))
7673
+ palette: () => recolour((c) => chunkLCIXR7WE_cjs.shade(c, 0.3))
7674
7674
  },
7675
7675
  {
7676
7676
  id: "mutedDark",
7677
7677
  labelKey: "pptx.chart.styleMutedDark",
7678
7678
  styleId: 34,
7679
- palette: () => recolour((c) => chunkIURZJAWP_cjs.shade(chunkIURZJAWP_cjs.tint(c, 0.3), 0.4))
7679
+ palette: () => recolour((c) => chunkLCIXR7WE_cjs.shade(chunkLCIXR7WE_cjs.tint(c, 0.3), 0.4))
7680
7680
  },
7681
7681
  {
7682
7682
  id: "pastel",
7683
7683
  labelKey: "pptx.chart.stylePastel",
7684
7684
  styleId: 42,
7685
- palette: () => recolour((c) => chunkIURZJAWP_cjs.tint(c, 0.55))
7685
+ palette: () => recolour((c) => chunkLCIXR7WE_cjs.tint(c, 0.55))
7686
7686
  }
7687
7687
  ];
7688
7688
  function recolour(transform) {
7689
- return chunkIURZJAWP_cjs.getChartStylePalette(2).map(transform);
7689
+ return chunkLCIXR7WE_cjs.getChartStylePalette(2).map(transform);
7690
7690
  }
7691
7691
  function chartStylePresetPalette(id) {
7692
7692
  return findPreset(id)?.palette();
@@ -7800,7 +7800,7 @@ function applyChartElementToggle(chartData, key, checked) {
7800
7800
  style: { ...chartData.style, ...chartDataLabelsTogglePatch(chartData.style, checked) }
7801
7801
  });
7802
7802
  case "gridlines":
7803
- return patchChartData(chartData, chunkIURZJAWP_cjs.chartGridlinesPatch(chartData, checked));
7803
+ return patchChartData(chartData, chunkLCIXR7WE_cjs.chartGridlinesPatch(chartData, checked));
7804
7804
  case "axes":
7805
7805
  return patchChartData(chartData, chartAxesVisibilityPatch(chartData, checked));
7806
7806
  case "axisTitles":
@@ -7839,7 +7839,7 @@ function buildElements(chartData) {
7839
7839
  {
7840
7840
  key: "gridlines",
7841
7841
  labelKey: "pptx.chart.showGridlines",
7842
- checked: chunkIURZJAWP_cjs.chartGridlinesState(chartData)
7842
+ checked: chunkLCIXR7WE_cjs.chartGridlinesState(chartData)
7843
7843
  },
7844
7844
  {
7845
7845
  key: "dataLabels",
@@ -8251,17 +8251,17 @@ function chartEventPathElements(event) {
8251
8251
  }
8252
8252
  function findChartPartElementInEvent(event) {
8253
8253
  for (const el of chartEventPathElements(event)) {
8254
- if (el.getAttribute(chunkWKLHJEPD_cjs.CHART_PART_ATTR) !== null) {
8254
+ if (el.getAttribute(chunkRPRC2EG5_cjs.CHART_PART_ATTR) !== null) {
8255
8255
  return el;
8256
8256
  }
8257
8257
  }
8258
8258
  return null;
8259
8259
  }
8260
8260
  function findChartPartInEvent(event) {
8261
- return chunkWKLHJEPD_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8261
+ return chunkRPRC2EG5_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8262
8262
  }
8263
8263
  function isChartTitleEvent(event) {
8264
- return findChartPartElementInEvent(event)?.getAttribute(chunkWKLHJEPD_cjs.CHART_PART_ATTR) === "title";
8264
+ return findChartPartElementInEvent(event)?.getAttribute(chunkRPRC2EG5_cjs.CHART_PART_ATTR) === "title";
8265
8265
  }
8266
8266
 
8267
8267
  // src/pptx/render/chart-interaction-mark-drag.ts
@@ -8296,14 +8296,14 @@ function advanceChartMarkDrag(state, clientX, clientY, rect3) {
8296
8296
  return null;
8297
8297
  }
8298
8298
  const travelled = Math.hypot(clientX - state.startClientX, clientY - state.startClientY);
8299
- if (!state.moved && travelled < chunkWKLHJEPD_cjs.CHART_DRAG_THRESHOLD_PX) {
8299
+ if (!state.moved && travelled < chunkRPRC2EG5_cjs.CHART_DRAG_THRESHOLD_PX) {
8300
8300
  return null;
8301
8301
  }
8302
8302
  if (rect3.width === 0 || rect3.height === 0) {
8303
8303
  return null;
8304
8304
  }
8305
8305
  state.moved = true;
8306
- const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkWKLHJEPD_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkWKLHJEPD_cjs.withChartPointValue(
8306
+ const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkRPRC2EG5_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkRPRC2EG5_cjs.withChartPointValue(
8307
8307
  state.baseChartData,
8308
8308
  state.part.seriesIndex,
8309
8309
  state.part.pointIndex,
@@ -9176,6 +9176,14 @@ function findPresentationActionTarget(target, slide) {
9176
9176
  if (typeof Element === "undefined" || !(target instanceof Element) || !slide) {
9177
9177
  return void 0;
9178
9178
  }
9179
+ const run = target.closest("[data-pptx-hyperlink]");
9180
+ if (run) {
9181
+ const internal = chunkIOOI63TH_cjs.parsePpactionUrl(run.getAttribute("data-pptx-hyperlink") ?? "");
9182
+ return internal ? {
9183
+ elementId: run.closest("[data-element-id]")?.getAttribute("data-element-id") ?? "",
9184
+ action: { action: internal.action, targetSlideIndex: internal.targetSlideIndex }
9185
+ } : void 0;
9186
+ }
9179
9187
  const byId = /* @__PURE__ */ new Map();
9180
9188
  for (const element of flattenSlideElements(slide.elements)) {
9181
9189
  byId.set(element.id, element);
@@ -11869,7 +11877,7 @@ function getAnimationColorBaseStyle(element, options = {}) {
11869
11877
  }
11870
11878
  const style = {};
11871
11879
  if (options.animatesFill) {
11872
- const fill = chunkIURZJAWP_cjs.getComputedFillStyle(element, options.parentGroupFill);
11880
+ const fill = chunkLCIXR7WE_cjs.getComputedFillStyle(element, options.parentGroupFill);
11873
11881
  style[ANIMATION_COLOR_BASE_PROPERTIES.fill] = fill?.backgroundColor ?? element.shapeStyle?.fillColor ?? "currentColor";
11874
11882
  }
11875
11883
  if (options.animatesStroke) {
@@ -19550,7 +19558,7 @@ function borderToCss(border2, resolve) {
19550
19558
  const width = border2.width ?? 1;
19551
19559
  const dash = ooxmlDashToCssBorderStyle(border2.dash);
19552
19560
  const color = border2.color ?? resolve(border2.fill) ?? "#000000";
19553
- return chunk7DMJEYQJ_cjs.screenBorder(width, dash, color);
19561
+ return chunkG2YUKLRX_cjs.screenBorder(width, dash, color);
19554
19562
  }
19555
19563
  function collectSections(entry5, tableData, pos) {
19556
19564
  const { rowIndex, cellIndex, rowCount, columnCount } = pos;
@@ -19928,7 +19936,7 @@ function gradientCssFromFill(fill, colorScheme) {
19928
19936
  position: stop.position
19929
19937
  }))
19930
19938
  };
19931
- return chunkIURZJAWP_cjs.buildGradientCss(shapeLike);
19939
+ return chunkLCIXR7WE_cjs.buildGradientCss(shapeLike);
19932
19940
  }
19933
19941
  function applyStyleFill(fill, colorScheme, css, fallback) {
19934
19942
  if (fill?.noFill) {
@@ -19954,13 +19962,13 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19954
19962
  }
19955
19963
  }
19956
19964
  if (fill?.pattern) {
19957
- const fg = chunkIURZJAWP_cjs.normalizeHexColor(
19965
+ const fg = chunkLCIXR7WE_cjs.normalizeHexColor(
19958
19966
  resolveStyleFillColor(fill.pattern.foreground, colorScheme),
19959
19967
  "#000000"
19960
- ), bg = chunkIURZJAWP_cjs.normalizeHexColor(
19968
+ ), bg = chunkLCIXR7WE_cjs.normalizeHexColor(
19961
19969
  resolveStyleFillColor(fill.pattern.background, colorScheme),
19962
19970
  "#ffffff"
19963
- ), svg2 = chunkIURZJAWP_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19971
+ ), svg2 = chunkLCIXR7WE_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19964
19972
  clearBackground(css);
19965
19973
  if (svg2) {
19966
19974
  css.backgroundImage = `url("data:image/svg+xml,${encodeURIComponent(svg2)}")`;
@@ -19969,7 +19977,7 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19969
19977
  return true;
19970
19978
  }
19971
19979
  const resolved = resolveStyleFillColor(fill, colorScheme);
19972
- const color = (resolved && fill?.alpha !== void 0 ? chunkIURZJAWP_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19980
+ const color = (resolved && fill?.alpha !== void 0 ? chunkLCIXR7WE_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19973
19981
  if (color) {
19974
19982
  layerSolidColor(css, color);
19975
19983
  return true;
@@ -20353,8 +20361,8 @@ function getMeasureContext() {
20353
20361
  return measureContext2;
20354
20362
  }
20355
20363
  function toCanvasFont2(font) {
20356
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
20357
- const family2 = font.fontFamily || chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
20364
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
20365
+ const family2 = font.fontFamily || chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY;
20358
20366
  return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family2}`;
20359
20367
  }
20360
20368
  function advancesOf(ctx, canvasFont, chars) {
@@ -20547,7 +20555,7 @@ function resolveTextOutlineDashCss(s, fillColor) {
20547
20555
  if (s.textFillGradient || s.textFillPattern || s.textFillBlipUrl || s.highlightColor) {
20548
20556
  return void 0;
20549
20557
  }
20550
- const strokeColor = chunkIURZJAWP_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20558
+ const strokeColor = chunkLCIXR7WE_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20551
20559
  return {
20552
20560
  WebkitTextStroke: `${width}px transparent`,
20553
20561
  WebkitTextFillColor: s.textFillNone ? "transparent" : fillColor ?? "currentColor",
@@ -20711,13 +20719,13 @@ function applyExtraRunProps(style, s, text3, font) {
20711
20719
  style.fontKerning = fontKerning;
20712
20720
  }
20713
20721
  if (s.highlightColor) {
20714
- style.backgroundColor = chunkIURZJAWP_cjs.normalizeHexColor(s.highlightColor, "transparent");
20722
+ style.backgroundColor = chunkLCIXR7WE_cjs.normalizeHexColor(s.highlightColor, "transparent");
20715
20723
  }
20716
20724
  if (s.underlineColor) {
20717
- style.textDecorationColor = chunkIURZJAWP_cjs.normalizeHexColor(s.underlineColor);
20725
+ style.textDecorationColor = chunkLCIXR7WE_cjs.normalizeHexColor(s.underlineColor);
20718
20726
  }
20719
20727
  if (s.textOutlineWidth) {
20720
- style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkIURZJAWP_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20728
+ style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkLCIXR7WE_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20721
20729
  style.paintOrder = "stroke fill";
20722
20730
  }
20723
20731
  if (s.textCaps === "all") {
@@ -20758,7 +20766,7 @@ function segmentStyleToCss(seg, fontScale = 1, context = {}) {
20758
20766
  if (s.color) {
20759
20767
  style.color = s.color;
20760
20768
  } else if (s.hyperlink) {
20761
- style.color = chunkIURZJAWP_cjs.HYPERLINK_COLOR;
20769
+ style.color = chunkLCIXR7WE_cjs.HYPERLINK_COLOR;
20762
20770
  }
20763
20771
  style.fontWeight = s.bold ? "bold" : "normal";
20764
20772
  style.fontStyle = s.italic ? "italic" : "normal";
@@ -20843,9 +20851,9 @@ function cellPatternFillCss(style) {
20843
20851
  if (style.fillMode !== "pattern" || !style.patternFillPreset) {
20844
20852
  return null;
20845
20853
  }
20846
- const fg = chunkIURZJAWP_cjs.normalizeHexColor(style.patternFillForeground, "#000000");
20847
- const bg = chunkIURZJAWP_cjs.normalizeHexColor(style.patternFillBackground, "#ffffff");
20848
- const svgMarkup = chunkIURZJAWP_cjs.getPatternSvg(style.patternFillPreset, fg, bg);
20854
+ const fg = chunkLCIXR7WE_cjs.normalizeHexColor(style.patternFillForeground, "#000000");
20855
+ const bg = chunkLCIXR7WE_cjs.normalizeHexColor(style.patternFillBackground, "#ffffff");
20856
+ const svgMarkup = chunkLCIXR7WE_cjs.getPatternSvg(style.patternFillPreset, fg, bg);
20849
20857
  if (svgMarkup) {
20850
20858
  const encoded = encodeURIComponent(svgMarkup);
20851
20859
  return {
@@ -21009,7 +21017,7 @@ function cellStyleToCss(style) {
21009
21017
  const w = edge.width ?? 1;
21010
21018
  const c = edge.color ?? style.borderColor ?? "#000000";
21011
21019
  const s = ooxmlDashToCssBorderStyle(edge.dash);
21012
- css[edge.prefix] = chunk7DMJEYQJ_cjs.screenBorder(w, s, c);
21020
+ css[edge.prefix] = chunkG2YUKLRX_cjs.screenBorder(w, s, c);
21013
21021
  }
21014
21022
  }
21015
21023
  Object.assign(css, cellPaddingCss(style));
@@ -21231,7 +21239,7 @@ function tableCellCss(tableData, cell, position, context, base2) {
21231
21239
  );
21232
21240
  const css = { ...base2, ...band, ...cellStyleToCss(cell?.style) };
21233
21241
  if (css.color === void 0) {
21234
- css.color = chunkIURZJAWP_cjs.DEFAULT_TEXT_COLOR;
21242
+ css.color = chunkLCIXR7WE_cjs.DEFAULT_TEXT_COLOR;
21235
21243
  }
21236
21244
  return { ...TABLE_CELL_TEXT_DEFAULTS, ...css };
21237
21245
  }
@@ -21560,7 +21568,7 @@ var GRADIENT_TYPE_OPTIONS = [
21560
21568
  { value: "linear", i18nKey: "pptx.table.gradientLinear" },
21561
21569
  { value: "radial", i18nKey: "pptx.table.gradientRadial" }
21562
21570
  ];
21563
- var PATTERN_OPTIONS = chunkIURZJAWP_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21571
+ var PATTERN_OPTIONS = chunkLCIXR7WE_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21564
21572
 
21565
21573
  // src/pptx/render/table-resize.ts
21566
21574
  var MIN_COLUMN_PROPORTION = 0.03;
@@ -22391,10 +22399,10 @@ function imageFitTransformParts(el) {
22391
22399
  return { placement: "", crop: "" };
22392
22400
  }
22393
22401
  return fitTransformsFromInsets({
22394
- cropLeft: chunkIURZJAWP_cjs.clampCropValue(el.cropLeft),
22395
- cropTop: chunkIURZJAWP_cjs.clampCropValue(el.cropTop),
22396
- cropRight: chunkIURZJAWP_cjs.clampCropValue(el.cropRight),
22397
- cropBottom: chunkIURZJAWP_cjs.clampCropValue(el.cropBottom),
22402
+ cropLeft: chunkLCIXR7WE_cjs.clampCropValue(el.cropLeft),
22403
+ cropTop: chunkLCIXR7WE_cjs.clampCropValue(el.cropTop),
22404
+ cropRight: chunkLCIXR7WE_cjs.clampCropValue(el.cropRight),
22405
+ cropBottom: chunkLCIXR7WE_cjs.clampCropValue(el.cropBottom),
22398
22406
  fillRectLeft: el.fillRectLeft ?? 0,
22399
22407
  fillRectTop: el.fillRectTop ?? 0,
22400
22408
  fillRectRight: el.fillRectRight ?? 0,
@@ -22418,10 +22426,10 @@ function fitTransformsFromInsets(insets) {
22418
22426
  if (hasCrop2) {
22419
22427
  const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
22420
22428
  const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
22421
- cropLeft = chunkIURZJAWP_cjs.clampCropValue(cropLeft * horizontalScale);
22422
- cropRight = chunkIURZJAWP_cjs.clampCropValue(cropRight * horizontalScale);
22423
- cropTop = chunkIURZJAWP_cjs.clampCropValue(cropTop * verticalScale);
22424
- cropBottom = chunkIURZJAWP_cjs.clampCropValue(cropBottom * verticalScale);
22429
+ cropLeft = chunkLCIXR7WE_cjs.clampCropValue(cropLeft * horizontalScale);
22430
+ cropRight = chunkLCIXR7WE_cjs.clampCropValue(cropRight * horizontalScale);
22431
+ cropTop = chunkLCIXR7WE_cjs.clampCropValue(cropTop * verticalScale);
22432
+ cropBottom = chunkLCIXR7WE_cjs.clampCropValue(cropBottom * verticalScale);
22425
22433
  const remainingWidth = Math.max(0.01, 1 - cropLeft - cropRight);
22426
22434
  const remainingHeight = Math.max(0.01, 1 - cropTop - cropBottom);
22427
22435
  const tx = Math.round(-cropLeft / remainingWidth * 1e4) / 100;
@@ -22536,7 +22544,7 @@ function resolveShadeToTitleBackgroundImage(slide, slideWidthPx, slideHeightPx)
22536
22544
  if (stops.length === 0) {
22537
22545
  return void 0;
22538
22546
  }
22539
- return chunkIURZJAWP_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22547
+ return chunkLCIXR7WE_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22540
22548
  }
22541
22549
 
22542
22550
  // src/pptx/render/slide-background.ts
@@ -22558,7 +22566,7 @@ function getSlideBackgroundStyle(slide, slideSize) {
22558
22566
  style["background-repeat"] = "no-repeat";
22559
22567
  }
22560
22568
  } else if (pattern) {
22561
- const svg2 = chunkIURZJAWP_cjs.getPatternSvg(
22569
+ const svg2 = chunkLCIXR7WE_cjs.getPatternSvg(
22562
22570
  pattern.preset,
22563
22571
  pattern.fgColor ?? solid ?? "#000000",
22564
22572
  pattern.bgColor ?? DEFAULT_SLIDE_BACKGROUND
@@ -23966,12 +23974,12 @@ function buildRunTabLines(text3, ctx, nestedDecoration, measure2 = (t) => measur
23966
23974
  // src/pptx/render/paragraph-run-enrich.ts
23967
23975
  function resolveRunExtrasContext(input) {
23968
23976
  const { seg, runFont, blockFont, blockScriptStyle, tabStops, defaultTabSize, rtl } = input;
23969
- const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
23977
+ const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY;
23970
23978
  const scriptFonts = resolveScriptFontSet(seg.style, blockScriptStyle, baseFontFamily);
23971
23979
  const tabContext = tabStops && tabStops.length > 0 ? buildTabContext(
23972
23980
  tabStops,
23973
23981
  defaultTabSize,
23974
- runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE,
23982
+ runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE,
23975
23983
  baseFontFamily,
23976
23984
  Boolean(seg.style?.bold),
23977
23985
  Boolean(seg.style?.italic),
@@ -24003,7 +24011,7 @@ function resolveRunReflection(segStyle, blockFont) {
24003
24011
  if (!segStyle) {
24004
24012
  return void 0;
24005
24013
  }
24006
- const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
24014
+ const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
24007
24015
  return getTextReflectionWrapperStyle(segStyle, height);
24008
24016
  }
24009
24017
  function applyRunReflection(run, reflection2) {
@@ -24023,9 +24031,14 @@ function resolveHyperlinkTargetAttrs(tgtFrame) {
24023
24031
  }
24024
24032
 
24025
24033
  // src/pptx/render/text-run-meta.ts
24034
+ function isRunHyperlinkClickable(link) {
24035
+ return Boolean(link && (link.href || chunkIOOI63TH_cjs.isPpactionUrl(link.url)));
24036
+ }
24026
24037
  function resolveRunHyperlink(style) {
24027
24038
  const clicked = style?.hyperlink;
24028
- const raw = clicked || style?.hyperlinkMouseOver;
24039
+ const clickAction = style?.hyperlinkAction;
24040
+ const internalJump = clickAction && /^ppaction:\/\/(?:hlinksldjump|hlinkshowjump)(?:\?|$)/iu.test(clickAction);
24041
+ const raw = (internalJump ? clickAction : clicked) || style?.hyperlinkMouseOver;
24029
24042
  if (!raw) {
24030
24043
  return void 0;
24031
24044
  }
@@ -24165,7 +24178,7 @@ function buildTextShadowCss(style) {
24165
24178
  const ox = style.textShadowOffsetX ?? 0;
24166
24179
  const oy = style.textShadowOffsetY ?? 0;
24167
24180
  const blur = style.textShadowBlur ?? 4;
24168
- const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textShadowColor, "#000000");
24181
+ const color = chunkLCIXR7WE_cjs.normalizeHexColor(style.textShadowColor, "#000000");
24169
24182
  const opacity = style.textShadowOpacity ?? 0.5;
24170
24183
  const r = parseInt(color.slice(1, 3), 16);
24171
24184
  const g = parseInt(color.slice(3, 5), 16);
@@ -24178,7 +24191,7 @@ function buildTextShadowCss(style) {
24178
24191
  const dirRad = dir * Math.PI / 180;
24179
24192
  const psOx = Math.round(Math.cos(dirRad) * dist2 * 100) / 100;
24180
24193
  const psOy = Math.round(Math.sin(dirRad) * dist2 * 100) / 100;
24181
- const psColor = chunkIURZJAWP_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
24194
+ const psColor = chunkLCIXR7WE_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
24182
24195
  const psOpacity = style.textPresetShadowOpacity ?? 0.5;
24183
24196
  const psR = parseInt(psColor.slice(1, 3), 16);
24184
24197
  const psG = parseInt(psColor.slice(3, 5), 16);
@@ -24195,7 +24208,7 @@ function buildTextInnerShadowCss(style) {
24195
24208
  const ox = style.textInnerShadowOffsetX ?? 0;
24196
24209
  const oy = style.textInnerShadowOffsetY ?? 0;
24197
24210
  const blur = style.textInnerShadowBlur ?? 3;
24198
- const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
24211
+ const color = chunkLCIXR7WE_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
24199
24212
  const opacity = style.textInnerShadowOpacity ?? 0.5;
24200
24213
  const r = parseInt(color.slice(1, 3), 16);
24201
24214
  const g = parseInt(color.slice(3, 5), 16);
@@ -24242,7 +24255,7 @@ function buildTextGlowFilter(style) {
24242
24255
  return void 0;
24243
24256
  }
24244
24257
  const radius = style.textGlowRadius ?? 6;
24245
- const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
24258
+ const color = chunkLCIXR7WE_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
24246
24259
  const opacity = style.textGlowOpacity ?? 0.6;
24247
24260
  const r = parseInt(color.slice(1, 3), 16);
24248
24261
  const g = parseInt(color.slice(3, 5), 16);
@@ -24270,9 +24283,9 @@ function buildTextFillCss(style) {
24270
24283
  };
24271
24284
  }
24272
24285
  if (style.textFillPattern) {
24273
- const fg = chunkIURZJAWP_cjs.normalizeHexColor(style.textFillPatternForeground, "#000000");
24274
- const bg = chunkIURZJAWP_cjs.normalizeHexColor(style.textFillPatternBackground, "#ffffff");
24275
- const svgPattern = chunkIURZJAWP_cjs.getPatternSvg(style.textFillPattern, fg, bg);
24286
+ const fg = chunkLCIXR7WE_cjs.normalizeHexColor(style.textFillPatternForeground, "#000000");
24287
+ const bg = chunkLCIXR7WE_cjs.normalizeHexColor(style.textFillPatternBackground, "#ffffff");
24288
+ const svgPattern = chunkLCIXR7WE_cjs.getPatternSvg(style.textFillPattern, fg, bg);
24276
24289
  if (svgPattern) {
24277
24290
  const encoded = encodeURIComponent(svgPattern);
24278
24291
  return {
@@ -24417,15 +24430,15 @@ function resolveRunRuby(segment, baseFontSizePx, blockFont, baseColor) {
24417
24430
  return void 0;
24418
24431
  }
24419
24432
  const authoredFamily = segment.rubyStyle?.fontFamily ?? segment.style?.fontFamily;
24420
- const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
24433
+ const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
24421
24434
  const style = {
24422
24435
  fontSize: `${segment.rubyFontSize ?? baseSize * RUBY_SIZE_RATIO}px`,
24423
- fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY,
24436
+ fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY,
24424
24437
  textAlign: rubyTextAlign(segment.rubyAlignment)
24425
24438
  };
24426
24439
  const color = segment.rubyStyle?.color;
24427
24440
  if (color) {
24428
- style.color = chunkIURZJAWP_cjs.normalizeHexColor(color, baseColor);
24441
+ style.color = chunkLCIXR7WE_cjs.normalizeHexColor(color, baseColor);
24429
24442
  }
24430
24443
  return { text: text3, style };
24431
24444
  }
@@ -24497,7 +24510,7 @@ function buildParagraphRuns(input) {
24497
24510
  bodyFontSizeRaw,
24498
24511
  fontScale
24499
24512
  );
24500
- const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
24513
+ const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
24501
24514
  equationStyle.fontSize = `${fallbackFontSize}px`;
24502
24515
  }
24503
24516
  runs.push({
@@ -24534,7 +24547,7 @@ function buildParagraphRuns(input) {
24534
24547
  });
24535
24548
  const ruby = resolveRunRuby(
24536
24549
  seg,
24537
- typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE,
24550
+ typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE,
24538
24551
  blockFont,
24539
24552
  typeof style.color === "string" ? style.color : void 0
24540
24553
  );
@@ -24634,8 +24647,8 @@ function buildParagraphs(element, fieldContext, segmentOverrides, options) {
24634
24647
  }
24635
24648
  const fontScale = resolveAutoFitFontScale(element.textStyle);
24636
24649
  const blockFont = {
24637
- fontFamily: element.textStyle?.fontFamily ? pptx.getSubstituteFontFamily(element.textStyle.fontFamily) : chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY,
24638
- fontSizePx: (element.textStyle?.fontSize || chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE) * fontScale
24650
+ fontFamily: element.textStyle?.fontFamily ? pptx.getSubstituteFontFamily(element.textStyle.fontFamily) : chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY,
24651
+ fontSizePx: (element.textStyle?.fontSize || chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE) * fontScale
24639
24652
  };
24640
24653
  const blockScriptStyle = element.textStyle;
24641
24654
  const tabStops = element.textStyle?.tabStops;
@@ -27591,17 +27604,17 @@ function hasItalicRuns(element) {
27591
27604
  );
27592
27605
  }
27593
27606
  function buildTextBlockStyle(element, options = {}) {
27594
- const fallbackColor = options.fallbackColor ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_COLOR;
27607
+ const fallbackColor = options.fallbackColor ?? chunkLCIXR7WE_cjs.DEFAULT_TEXT_COLOR;
27595
27608
  if (!pptx.hasTextProperties(element)) {
27596
27609
  return { color: fallbackColor };
27597
27610
  }
27598
27611
  const ts = element.textStyle;
27599
27612
  const italic = hasItalicRuns(element);
27600
27613
  const isRtl = ts?.rtl === true;
27601
- const bodyTop = ts?.bodyInsetTop ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_TB_PX;
27602
- const bodyBottom = ts?.bodyInsetBottom ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_TB_PX;
27603
- const bodyLeft = ts?.bodyInsetLeft ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_LR_PX;
27604
- const bodyRight = ts?.bodyInsetRight ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_LR_PX;
27614
+ const bodyTop = ts?.bodyInsetTop ?? chunkLCIXR7WE_cjs.DEFAULT_BODY_INSET_TB_PX;
27615
+ const bodyBottom = ts?.bodyInsetBottom ?? chunkLCIXR7WE_cjs.DEFAULT_BODY_INSET_TB_PX;
27616
+ const bodyLeft = ts?.bodyInsetLeft ?? chunkLCIXR7WE_cjs.DEFAULT_BODY_INSET_LR_PX;
27617
+ const bodyRight = ts?.bodyInsetRight ?? chunkLCIXR7WE_cjs.DEFAULT_BODY_INSET_LR_PX;
27605
27618
  const hasParagraphIndents = (element.paragraphIndents?.length ?? 0) > 0;
27606
27619
  const bodyIndent = hasParagraphIndents ? 0 : ts?.paragraphIndent || 0;
27607
27620
  const bodyMarginLeft = hasParagraphIndents ? 0 : ts?.paragraphMarginLeft || 0;
@@ -27630,17 +27643,17 @@ function buildTextBlockStyle(element, options = {}) {
27630
27643
  style.transformOrigin = "center";
27631
27644
  }
27632
27645
  }
27633
- style.color = ts?.hyperlink ? chunkIURZJAWP_cjs.normalizeHexColor(ts?.color, chunkIURZJAWP_cjs.HYPERLINK_COLOR) : chunkIURZJAWP_cjs.normalizeHexColor(ts?.color, fallbackColor);
27646
+ style.color = ts?.hyperlink ? chunkLCIXR7WE_cjs.normalizeHexColor(ts?.color, chunkLCIXR7WE_cjs.HYPERLINK_COLOR) : chunkLCIXR7WE_cjs.normalizeHexColor(ts?.color, fallbackColor);
27634
27647
  if (!hasTextSegments && ts?.highlightColor) {
27635
- style.backgroundColor = chunkIURZJAWP_cjs.normalizeHexColor(ts.highlightColor, void 0);
27648
+ style.backgroundColor = chunkLCIXR7WE_cjs.normalizeHexColor(ts.highlightColor, void 0);
27636
27649
  }
27637
27650
  style.textAlign = resolveCssTextAlign(ts?.align, isRtl) ?? "left";
27638
27651
  style.direction = toCssVerticalDirection(ts?.textDirection) ?? (isRtl ? "rtl" : bodyLayoutStyle?.direction ?? "ltr");
27639
27652
  if (isRtl) {
27640
27653
  style.unicodeBidi = "plaintext";
27641
27654
  }
27642
- style.fontSize = ts?.fontSize || chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
27643
- style.fontFamily = ts?.fontFamily ? pptx.getSubstituteFontFamily(ts.fontFamily, pptx.parsePanoseString(ts.latinFontPanose)) : chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
27655
+ style.fontSize = ts?.fontSize || chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
27656
+ style.fontFamily = ts?.fontFamily ? pptx.getSubstituteFontFamily(ts.fontFamily, pptx.parsePanoseString(ts.latinFontPanose)) : chunkLCIXR7WE_cjs.DEFAULT_FONT_FAMILY;
27644
27657
  style.fontWeight = ts?.bold ? 700 : 400;
27645
27658
  style.fontStyle = ts?.italic ? "italic" : "normal";
27646
27659
  style.textDecorationLine = decorations.length > 0 ? decorations.join(" ") : "none";
@@ -27680,7 +27693,7 @@ function buildTextBlockStyle(element, options = {}) {
27680
27693
  text: element.text ?? "",
27681
27694
  width: element.width,
27682
27695
  height: element.height,
27683
- defaultFontSize: chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE
27696
+ defaultFontSize: chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE
27684
27697
  });
27685
27698
  if (autoFit.fontSize !== void 0) {
27686
27699
  style.fontSize = autoFit.fontSize;
@@ -27688,7 +27701,7 @@ function buildTextBlockStyle(element, options = {}) {
27688
27701
  if (autoFit.lineHeight !== void 0) {
27689
27702
  style.lineHeight = autoFit.lineHeight;
27690
27703
  }
27691
- const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
27704
+ const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkLCIXR7WE_cjs.DEFAULT_TEXT_FONT_SIZE;
27692
27705
  const lineHeightPx = lineHeightToPx(fontSizePx, style.lineHeight);
27693
27706
  const contentHeightPx = element.height - style.paddingTop - style.paddingBottom;
27694
27707
  Object.assign(style, resolveVertOverflowEllipsisStyle(ts, contentHeightPx, lineHeightPx));
@@ -31087,9 +31100,9 @@ function normalizeArrow(a) {
31087
31100
  function buildConnectorGeometry(element, zIndex, routing) {
31088
31101
  const ss = pptx.hasShapeProperties(element) ? element.shapeStyle : void 0;
31089
31102
  const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
31090
- const strokeColor = ss?.strokeColor ?? chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR;
31103
+ const strokeColor = ss?.strokeColor ?? chunkLCIXR7WE_cjs.DEFAULT_STROKE_COLOR;
31091
31104
  const strokeOpacity = ss?.strokeOpacity ?? 1;
31092
- const dashArray = chunkIURZJAWP_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
31105
+ const dashArray = chunkLCIXR7WE_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
31093
31106
  const strokeLinecap = svgLineCap(ss?.lineCap);
31094
31107
  const compoundOffsets = getCompoundLineOffsets(ss?.compoundLine, strokeWidth);
31095
31108
  const compoundWidths = getCompoundLineWidths(ss?.compoundLine, strokeWidth);
@@ -37781,7 +37794,7 @@ function drawingShapeMeshOpacity(shape) {
37781
37794
  // src/pptx/render/svg-text-lines.ts
37782
37795
  var LINE_HEIGHT_RATIO = 1.2;
37783
37796
  function centeredSvgTextLines(text3, fontSize, options = {}) {
37784
- const lines = options.maxWidth !== void 0 ? chunkIURZJAWP_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37797
+ const lines = options.maxWidth !== void 0 ? chunkLCIXR7WE_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37785
37798
  const centerY = options.centerY ?? 0;
37786
37799
  if (lines.length === 0) {
37787
37800
  return [{ text: "", y: centerY }];
@@ -38578,7 +38591,7 @@ function buildObliqueLabels(layout, input) {
38578
38591
  const { w, h, d } = layout.box;
38579
38592
  const span = layout.range.max - layout.range.min;
38580
38593
  const fontSize = input.fontSize;
38581
- for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...layout.range, span })) {
38594
+ for (const v of chunkLCIXR7WE_cjs.axisTickValues({ ...layout.range, span })) {
38582
38595
  const p = (v - layout.range.min) * layout.valueScale;
38583
38596
  if (layout.horizontal) {
38584
38597
  const at = screen2(layout, p, 0, 0);
@@ -38700,7 +38713,7 @@ function dataExtent(chartData, grouping, nCat) {
38700
38713
  function valueRange(chartData, grouping, nCat, valueLengthPx) {
38701
38714
  const axis = chartData.axes?.find((a) => a.axisType === "valAx");
38702
38715
  const [lo, hi] = dataExtent(chartData, grouping, nCat);
38703
- const auto = chunkIURZJAWP_cjs.niceValueAxisBounds(lo, hi, chunkIURZJAWP_cjs.axisTargetIntervals(valueLengthPx), 0);
38716
+ const auto = chunkLCIXR7WE_cjs.niceValueAxisBounds(lo, hi, chunkLCIXR7WE_cjs.axisTargetIntervals(valueLengthPx), 0);
38704
38717
  const min = typeof axis?.min === "number" ? axis.min : auto.min;
38705
38718
  let max = typeof axis?.max === "number" ? axis.max : auto.max;
38706
38719
  if (max <= min) {
@@ -38724,22 +38737,22 @@ function computeObliqueBarLayout(element, vm) {
38724
38737
  const rotX = (chartData.view3D?.rotX ?? 15) * Math.PI / 180;
38725
38738
  const rotY = (chartData.view3D?.rotY ?? 20) * Math.PI / 180;
38726
38739
  const shear = { x: Math.sin(rotY), y: -Math.sin(rotX) };
38727
- const gapWidth = (chartData.barGapWidth ?? chunkIURZJAWP_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38740
+ const gapWidth = (chartData.barGapWidth ?? chunkLCIXR7WE_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38728
38741
  const gapDepth = (chartData.gapDepth ?? DEFAULT_GAP_DEPTH) / 100;
38729
38742
  const slots = grouping === "clustered" ? nSer : 1;
38730
38743
  const rows = grouping === "standard" ? nSer : 1;
38731
38744
  const labelFont = vm.axisLabels[0]?.fontSize ?? 16;
38732
38745
  const catLabels = chartData.categories.length > 0 ? chartData.categories : Array.from({ length: nCat }, (_, i) => String(i + 1));
38733
- const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkIURZJAWP_cjs.estimateTextWidth(t, labelFont)), 0);
38746
+ const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkLCIXR7WE_cjs.estimateTextWidth(t, labelFont)), 0);
38734
38747
  const top = vm.title ? TOP_WITH_TITLE : TOP_NO_TITLE;
38735
38748
  const hasBottomLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38736
38749
  const bottom = vm.svgHeight - (hasBottomLegend ? BOTTOM_WITH_LEGEND : BOTTOM_NO_LEGEND);
38737
38750
  const regionH = Math.max(1, bottom - top);
38738
38751
  const provisional = valueRange(chartData, grouping, nCat, regionH);
38739
- const valueTexts = chunkIURZJAWP_cjs.axisTickValues({
38752
+ const valueTexts = chunkLCIXR7WE_cjs.axisTickValues({
38740
38753
  ...provisional,
38741
38754
  span: provisional.max - provisional.min
38742
- }).map((v) => chunkWKLHJEPD_cjs.formatValueLabel(chartData, grouping, v));
38755
+ }).map((v) => chunkRPRC2EG5_cjs.formatValueLabel(chartData, grouping, v));
38743
38756
  const leftBand = (horizontal ? widest(catLabels) : widest(valueTexts)) + (horizontal ? OBLIQUE_CATEGORY_LABEL_GAP : OBLIQUE_VALUE_LABEL_GAP);
38744
38757
  const seriesLabelW = grouping === "standard" && !horizontal ? widest(chartData.series.map((s) => s.name)) : 0;
38745
38758
  const seriesOverhang = (depth2) => seriesLabelW > 0 ? Math.max(0, OBLIQUE_CATEGORY_LABEL_GAP + seriesLabelW - depth2 * shear.x / (2 * rows)) : 0;
@@ -38795,13 +38808,13 @@ function computeObliqueBarLayout(element, vm) {
38795
38808
  gridlines: [],
38796
38809
  labels: []
38797
38810
  };
38798
- layout.bars = chunkWKLHJEPD_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38799
- layout.gridlines = chunkWKLHJEPD_cjs.buildGridlines(layout);
38811
+ layout.bars = chunkRPRC2EG5_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38812
+ layout.gridlines = chunkRPRC2EG5_cjs.buildGridlines(layout);
38800
38813
  layout.labels = buildObliqueLabels(layout, {
38801
38814
  fontSize: labelFont,
38802
38815
  categories: catLabels,
38803
38816
  seriesNames: chartData.series.map((s) => s.name),
38804
- valueText: (v) => chunkWKLHJEPD_cjs.formatValueLabel(chartData, grouping, v)
38817
+ valueText: (v) => chunkRPRC2EG5_cjs.formatValueLabel(chartData, grouping, v)
38805
38818
  });
38806
38819
  return layout;
38807
38820
  }
@@ -38814,7 +38827,7 @@ function buildPerspGridlines(box, range, horizontal) {
38814
38827
  { from: [w, 0, 0], to: [w, 0, d] }
38815
38828
  ];
38816
38829
  const span = range.max - range.min;
38817
- for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...range, span })) {
38830
+ for (const v of chunkLCIXR7WE_cjs.axisTickValues({ ...range, span })) {
38818
38831
  const t = (v - range.min) / span;
38819
38832
  if (horizontal) {
38820
38833
  const x = t * w;
@@ -38840,11 +38853,11 @@ function buildPerspLabels(layout, input) {
38840
38853
  const span = range.max - range.min;
38841
38854
  const labels = [];
38842
38855
  const fontSize = input.fontSize;
38843
- for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...range, span })) {
38856
+ for (const v of chunkLCIXR7WE_cjs.axisTickValues({ ...range, span })) {
38844
38857
  const t = (v - range.min) / span;
38845
- const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkIURZJAWP_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38858
+ const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkLCIXR7WE_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38846
38859
  if (layout.horizontal) {
38847
- const at = chunkWKLHJEPD_cjs.perspToScreen(view, [t * w, 0, 0]);
38860
+ const at = chunkRPRC2EG5_cjs.perspToScreen(view, [t * w, 0, 0]);
38848
38861
  labels.push({
38849
38862
  role: "value",
38850
38863
  text: text3,
@@ -38854,7 +38867,7 @@ function buildPerspLabels(layout, input) {
38854
38867
  fontSize
38855
38868
  });
38856
38869
  } else {
38857
- const at = chunkWKLHJEPD_cjs.perspToScreen(view, [0, t * h, 0]);
38870
+ const at = chunkRPRC2EG5_cjs.perspToScreen(view, [0, t * h, 0]);
38858
38871
  labels.push({ role: "value", text: text3, x: at.x - VALUE_GAP2, y: at.y, anchor: "end", fontSize });
38859
38872
  }
38860
38873
  }
@@ -38864,7 +38877,7 @@ function buildPerspLabels(layout, input) {
38864
38877
  return;
38865
38878
  }
38866
38879
  if (layout.horizontal) {
38867
- const at2 = chunkWKLHJEPD_cjs.perspToScreen(view, [0, pos, 0]);
38880
+ const at2 = chunkRPRC2EG5_cjs.perspToScreen(view, [0, pos, 0]);
38868
38881
  labels.push({
38869
38882
  role: "category",
38870
38883
  text: text3,
@@ -38875,7 +38888,7 @@ function buildPerspLabels(layout, input) {
38875
38888
  });
38876
38889
  return;
38877
38890
  }
38878
- const at = chunkWKLHJEPD_cjs.perspToScreen(view, [pos, 0, 0]);
38891
+ const at = chunkRPRC2EG5_cjs.perspToScreen(view, [pos, 0, 0]);
38879
38892
  labels.push({
38880
38893
  role: "category",
38881
38894
  text: text3,
@@ -38888,7 +38901,7 @@ function buildPerspLabels(layout, input) {
38888
38901
  const rows = input.seriesNames.length;
38889
38902
  input.seriesNames.forEach((text3, s) => {
38890
38903
  const z = layout.kind === "surface" ? rows > 1 ? s / (rows - 1) * d : d / 2 : (s + 0.5) / rows * d;
38891
- const at = chunkWKLHJEPD_cjs.perspToScreen(view, [w, 0, z]);
38904
+ const at = chunkRPRC2EG5_cjs.perspToScreen(view, [w, 0, z]);
38892
38905
  labels.push({
38893
38906
  role: "series",
38894
38907
  text: text3,
@@ -38981,7 +38994,7 @@ function computePerspChartLayout(element, vm, options = {}) {
38981
38994
  const valAx = chartData.axes?.find((a) => a.axisType === "valAx");
38982
38995
  const midCat = (valAx?.crossBetween ?? (kind === "area" || kind === "surface" ? "midCat" : "between")) === "midCat";
38983
38996
  const view3D = chartData.view3D;
38984
- const gapWidth = (chartData.barGapWidth ?? chunkIURZJAWP_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38997
+ const gapWidth = (chartData.barGapWidth ?? chunkLCIXR7WE_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38985
38998
  const gapDepth = (chartData.gapDepth ?? DEFAULT_GAP_DEPTH2) / 100;
38986
38999
  const slot = 1 / nCat;
38987
39000
  const rows = kind === "surface" ? nSer : grouping === "standard" ? nSer : 1;
@@ -38994,16 +39007,16 @@ function computePerspChartLayout(element, vm, options = {}) {
38994
39007
  const valueExtent = horizontal ? 1 : baseHeight * heightScale;
38995
39008
  const catExtent = horizontal ? HORIZONTAL_CATEGORY_EXTENT * heightScale : 1;
38996
39009
  const box = horizontal ? { w: valueExtent, h: catExtent, d } : { w: 1, h: valueExtent, d };
38997
- const camera = options.oblique ? chunkWKLHJEPD_cjs.perspObliqueCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20) : chunkWKLHJEPD_cjs.perspCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20, view3D?.perspective ?? void 0);
39010
+ const camera = options.oblique ? chunkRPRC2EG5_cjs.perspObliqueCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20) : chunkRPRC2EG5_cjs.perspCameraFor(box, view3D?.rotX ?? 15, view3D?.rotY ?? 20, view3D?.perspective ?? void 0);
38998
39011
  const hasLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38999
- const view = chunkWKLHJEPD_cjs.fitPerspView(camera, {
39012
+ const view = chunkRPRC2EG5_cjs.fitPerspView(camera, {
39000
39013
  left: RECT_LEFT,
39001
39014
  right: vm.svgWidth - (rows > 1 ? RECT_RIGHT_WITH_SERIES : RECT_RIGHT_NO_SERIES),
39002
39015
  top: vm.title ? RECT_TOP_WITH_TITLE : RECT_TOP_NO_TITLE,
39003
39016
  bottom: vm.svgHeight - (hasLegend ? RECT_BOTTOM_WITH_LEGEND : RECT_BOTTOM_NO_LEGEND)
39004
39017
  });
39005
39018
  const [lo, hi] = dataExtent2(chartData, grouping, nCat);
39006
- const auto = chunkIURZJAWP_cjs.niceValueAxisBounds(lo, hi, chunkIURZJAWP_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
39019
+ const auto = chunkLCIXR7WE_cjs.niceValueAxisBounds(lo, hi, chunkLCIXR7WE_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
39007
39020
  const min = typeof valAx?.min === "number" ? valAx.min : auto.min;
39008
39021
  let max = typeof valAx?.max === "number" ? valAx.max : auto.max;
39009
39022
  if (max <= min) {
@@ -39095,7 +39108,7 @@ function buildBarGeometry(element, vm) {
39095
39108
  }
39096
39109
  var PERSP_BOX_TYPES = /* @__PURE__ */ new Set(["line3D", "area3D", "surface", "bar3D"]);
39097
39110
  function buildPieGeometry(element, vm) {
39098
- const layout = chunkWKLHJEPD_cjs.computePieChartLayout(element, chunkWKLHJEPD_cjs.widenPieViewModel(vm, element));
39111
+ const layout = chunkRPRC2EG5_cjs.computePieChartLayout(element, chunkRPRC2EG5_cjs.widenPieViewModel(vm, element));
39099
39112
  return layout ? { kind: "pie", layout } : null;
39100
39113
  }
39101
39114
  function buildPerspGeometry(element, vm, oblique) {
@@ -39115,7 +39128,7 @@ function buildChart3DSpecForElement(element) {
39115
39128
  if (!chartData || !is3DChartType(chartType)) {
39116
39129
  return null;
39117
39130
  }
39118
- const vm = chunkIURZJAWP_cjs.buildChartViewModel(element);
39131
+ const vm = chunkLCIXR7WE_cjs.buildChartViewModel(element);
39119
39132
  const projection = resolveChart3DProjection(chartType, chartData.view3D);
39120
39133
  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;
39121
39134
  if (!geometry) {
@@ -45386,6 +45399,10 @@ var LINK_TOOLTIP_HINT_CLASS = "pptx-link-tooltip-hint";
45386
45399
  var ACTION_INDICATOR_CLASS = "pptx-action-indicator";
45387
45400
  var ACTION_INDICATOR_ICON_PATH = "M13 2L3 14h9l-1 8 10-12h-9l1-8z";
45388
45401
  var ACTION_AFFORDANCE_CSS = `
45402
+ [data-pptx-read-only] .${ACTION_INDICATOR_CLASS},
45403
+ [data-pptx-read-only] .${LINK_TOOLTIP_CLASS} {
45404
+ display: none;
45405
+ }
45389
45406
  .${ACTION_INDICATOR_CLASS} {
45390
45407
  position: absolute;
45391
45408
  top: -4px;
@@ -53213,7 +53230,7 @@ function axisTitle(current, show) {
53213
53230
  return show ? current || AXIS_TITLE : void 0;
53214
53231
  }
53215
53232
  function applyChartQuickLayout(chartData, layout) {
53216
- const withGrid = patchChartData(chartData, chunkIURZJAWP_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
53233
+ const withGrid = patchChartData(chartData, chunkLCIXR7WE_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
53217
53234
  const axes = (withGrid.axes ?? []).map((axis) => {
53218
53235
  if (axis.axisType === "valAx") {
53219
53236
  return {
@@ -53267,7 +53284,7 @@ function matchesLayout(chartData, layout) {
53267
53284
  const legend = style.hasLegend ? style.legendPosition ?? "r" : null;
53268
53285
  const isBar = chartData.chartType === "bar" || chartData.chartType === "bar3D";
53269
53286
  const barMatches = !isBar || (chartData.barGapWidth ?? 150) === layout.gapWidth && (chartData.barOverlap ?? 0) === layout.overlap;
53270
- 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 && chunkIURZJAWP_cjs.chartGridlinesState(chartData) === layout.majorGridlines && Boolean(valAxis?.minorGridlines) === layout.minorGridlines && !valAxis?.deleted === layout.valueAxis;
53287
+ 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 && chunkLCIXR7WE_cjs.chartGridlinesState(chartData) === layout.majorGridlines && Boolean(valAxis?.minorGridlines) === layout.minorGridlines && !valAxis?.deleted === layout.valueAxis;
53271
53288
  }
53272
53289
  var CHART_QUICK_LAYOUT_GALLERY = {
53273
53290
  build(ctx) {
@@ -58716,7 +58733,7 @@ function isSeriesUsingSecondaryAxis(chartData, seriesIndex) {
58716
58733
  if (!series) {
58717
58734
  return false;
58718
58735
  }
58719
- return chunkIURZJAWP_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58736
+ return chunkLCIXR7WE_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58720
58737
  }
58721
58738
  function resolveSecondaryAxisId(chartData, useSecondary) {
58722
58739
  const axPos = useSecondary ? "r" : "l";
@@ -59254,14 +59271,14 @@ async function buildForeignObjectSvgBody(element, doc, options) {
59254
59271
  backgroundColor,
59255
59272
  readComputedStyle = (el) => window.getComputedStyle(el)
59256
59273
  } = options;
59257
- await chunk7DMJEYQJ_cjs.settleThreeViews(element);
59274
+ await chunkG2YUKLRX_cjs.settleThreeViews(element);
59258
59275
  const clone = element.cloneNode(true);
59259
- chunk7DMJEYQJ_cjs.withAuthoredStrokeWidths(
59276
+ chunkG2YUKLRX_cjs.withAuthoredStrokeWidths(
59260
59277
  element,
59261
59278
  () => inlineComputedStylesOnClone(element, clone, readComputedStyle)
59262
59279
  );
59263
- chunk7DMJEYQJ_cjs.snapshotThreeViewsIntoClone(element, clone);
59264
- chunk7DMJEYQJ_cjs.prepareExportClone(clone);
59280
+ chunkG2YUKLRX_cjs.snapshotThreeViewsIntoClone(element, clone);
59281
+ chunkG2YUKLRX_cjs.prepareExportClone(clone);
59265
59282
  const [{ allEmbedded: imagesEmbedded }, externalFonts] = await Promise.all([
59266
59283
  embedImagesOnClone(clone),
59267
59284
  collectExternalFontFaceCss(doc, fetchAsDataUrl)
@@ -64739,6 +64756,92 @@ function resolveInitialSlideIndex(initialSlide, slideCount) {
64739
64756
  return Math.min(Math.max(Math.trunc(requested), 0), Math.trunc(slideCount) - 1);
64740
64757
  }
64741
64758
 
64759
+ // src/pptx/render/viewer-hyperlinks.ts
64760
+ var RUN_HYPERLINK_ATTR = "data-pptx-hyperlink";
64761
+ function textRunAction(node) {
64762
+ const url = node.getAttribute(RUN_HYPERLINK_ATTR);
64763
+ if (!url) return void 0;
64764
+ const internal = chunkIOOI63TH_cjs.parsePpactionUrl(url);
64765
+ return internal ? { action: internal.action, targetSlideIndex: internal.targetSlideIndex } : { url };
64766
+ }
64767
+ function clickInfo(action, elementId) {
64768
+ return {
64769
+ url: action.url,
64770
+ action: action.action,
64771
+ targetSlideIndex: action.targetSlideIndex,
64772
+ elementId
64773
+ };
64774
+ }
64775
+ function attachViewerHyperlinks(root, navigation) {
64776
+ const readOnlyAttr = "data-pptx-read-only";
64777
+ const previousReadOnly = root.getAttribute(readOnlyAttr);
64778
+ root.toggleAttribute(readOnlyAttr, !navigation.getState().editable);
64779
+ const follow = (event) => {
64780
+ const target = event.target;
64781
+ if (!(target instanceof Element) || target.closest('[aria-hidden="true"]')) return;
64782
+ if (!target.closest('[aria-roledescription="slide"]')) return;
64783
+ const state = navigation.getState();
64784
+ const run = target.closest(`[${RUN_HYPERLINK_ATTR}]`);
64785
+ if (!run && target.closest('a, button, input, textarea, select, [contenteditable="true"]')) {
64786
+ return;
64787
+ }
64788
+ const shape = run ? void 0 : findPresentationActionTarget(target, state.slide);
64789
+ const action = run ? textRunAction(run) : shape?.action;
64790
+ if (!action) return;
64791
+ const resolution = resolvePresentationAction(action, { slideCount: state.slideCount });
64792
+ const internal = chunkIOOI63TH_cjs.isPpactionUrl(action.action);
64793
+ if (!run && !["goToSlide", "move", "openUrl", "customShow", "lastViewed", "endShow"].includes(
64794
+ resolution.intent.kind
64795
+ ))
64796
+ return;
64797
+ if (state.editable && !state.presenting && !event.ctrlKey && !event.metaKey && (!run || internal || run.hasAttribute("data-pptx-require-ctrl-click")))
64798
+ return;
64799
+ if (event instanceof KeyboardEvent && !["Enter", " "].includes(event.key)) return;
64800
+ if (event instanceof KeyboardEvent && state.presenting && (internal || shape)) {
64801
+ event.preventDefault();
64802
+ event.stopImmediatePropagation();
64803
+ (run ?? target).dispatchEvent(
64804
+ new MouseEvent("click", {
64805
+ bubbles: true,
64806
+ cancelable: true,
64807
+ ctrlKey: event.ctrlKey,
64808
+ metaKey: event.metaKey
64809
+ })
64810
+ );
64811
+ return;
64812
+ }
64813
+ const permitted = navigation.onHyperlinkClick?.(clickInfo(action, shape?.elementId)) !== false;
64814
+ if (permitted && state.presenting && (internal || shape)) return;
64815
+ if (!permitted || run || resolution.intent.kind === "goToSlide" || resolution.intent.kind === "openUrl" || !state.presenting && internal) {
64816
+ event.preventDefault();
64817
+ event.stopImmediatePropagation();
64818
+ }
64819
+ if (!permitted) return;
64820
+ const intent = resolution.intent;
64821
+ if (intent.kind === "goToSlide") {
64822
+ navigation.goToSlide(intent.slideIndex);
64823
+ } else if (run && intent.kind === "move") {
64824
+ const index = chunkIOOI63TH_cjs.clampSlideIndex(state.currentSlideIndex + intent.direction, state.slideCount);
64825
+ if (index !== null) navigation.goToSlide(index);
64826
+ } else if (intent.kind === "openUrl" && !internal) {
64827
+ if (navigation.confirmExternalHyperlink?.(intent.url) ?? true) {
64828
+ chunkIOOI63TH_cjs.safeOpenUrl(
64829
+ intent.url,
64830
+ run?.getAttribute("target") ?? run?.getAttribute("data-pptx-hyperlink-target") ?? "_blank"
64831
+ );
64832
+ }
64833
+ }
64834
+ };
64835
+ root.addEventListener("click", follow, true);
64836
+ root.addEventListener("keydown", follow, true);
64837
+ return () => {
64838
+ root.removeEventListener("click", follow, true);
64839
+ root.removeEventListener("keydown", follow, true);
64840
+ if (previousReadOnly === null) root.removeAttribute(readOnlyAttr);
64841
+ else root.setAttribute(readOnlyAttr, previousReadOnly);
64842
+ };
64843
+ }
64844
+
64742
64845
  // src/pptx/web-components/control-styles.ts
64743
64846
  var sheetsByDocument = /* @__PURE__ */ new WeakMap();
64744
64847
  function attachControlStyles(root, css) {
@@ -67632,8 +67735,18 @@ var OfficeUiGallery = class extends OfficeElement {
67632
67735
  const anchor = this.trigger.getBoundingClientRect();
67633
67736
  const box = popup.getBoundingClientRect();
67634
67737
  const margin = 8;
67635
- popup.style.left = `${Math.max(margin, Math.min(anchor.left, window2.innerWidth - box.width - margin))}px`;
67636
- popup.style.top = `${Math.max(margin, Math.min(anchor.bottom + 4, window2.innerHeight - box.height - margin))}px`;
67738
+ const left = Math.max(margin, Math.min(anchor.left, window2.innerWidth - box.width - margin));
67739
+ const top = Math.max(
67740
+ margin,
67741
+ Math.min(anchor.bottom + 4, window2.innerHeight - box.height - margin)
67742
+ );
67743
+ popup.style.left = `${left}px`;
67744
+ popup.style.top = `${top}px`;
67745
+ const placed = popup.getBoundingClientRect();
67746
+ if (placed.width > 0 && (placed.left !== left || placed.top !== top)) {
67747
+ popup.style.left = `${2 * left - placed.left}px`;
67748
+ popup.style.top = `${2 * top - placed.top}px`;
67749
+ }
67637
67750
  };
67638
67751
  cleanup() {
67639
67752
  const doc = this.ownerDocument;
@@ -74525,7 +74638,7 @@ function applyChart3DDrag(bridge, detail) {
74525
74638
  return;
74526
74639
  }
74527
74640
  bridge.commitChartData(
74528
- chunkWKLHJEPD_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74641
+ chunkRPRC2EG5_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74529
74642
  );
74530
74643
  }
74531
74644
  function detailOf(event) {
@@ -75002,7 +75115,7 @@ function calculateNotesPageLayout(slideWidth, slideHeight) {
75002
75115
  };
75003
75116
  }
75004
75117
  function wrapNotesText(text3, maxWidth, fontSize) {
75005
- return chunkIURZJAWP_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
75118
+ return chunkLCIXR7WE_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
75006
75119
  }
75007
75120
  function calculateContinuationPageMaxLines() {
75008
75121
  const contentHeight = NOTES_PAGE_H - 2 * NOTES_MARGIN;
@@ -77888,6 +78001,7 @@ exports.ROTATE_STEM_PX = ROTATE_STEM_PX;
77888
78001
  exports.ROUTING_PADDING_DEFAULT = ROUTING_PADDING_DEFAULT;
77889
78002
  exports.RULER_FONT_SIZE = RULER_FONT_SIZE;
77890
78003
  exports.RULER_THICKNESS = RULER_THICKNESS;
78004
+ exports.RUN_HYPERLINK_ATTR = RUN_HYPERLINK_ATTR;
77891
78005
  exports.RUN_PROGRAM_NOTICE_METRICS = RUN_PROGRAM_NOTICE_METRICS;
77892
78006
  exports.SATURATION_PERCENTS = SATURATION_PERCENTS;
77893
78007
  exports.SAVE_TAB = SAVE_TAB;
@@ -78105,6 +78219,7 @@ exports.attachOverlayKeyboard = attachOverlayKeyboard;
78105
78219
  exports.attachPresentationVisibilityPause = attachPresentationVisibilityPause;
78106
78220
  exports.attachRibbonOverflow = attachRibbonOverflow;
78107
78221
  exports.attachRotateHandlePlacement = attachRotateHandlePlacement;
78222
+ exports.attachViewerHyperlinks = attachViewerHyperlinks;
78108
78223
  exports.authorConnectorBetweenSites = authorConnectorBetweenSites;
78109
78224
  exports.authoredLetterSpacingPx = authoredLetterSpacingPx;
78110
78225
  exports.autoFitModeOf = autoFitModeOf;
@@ -79033,6 +79148,7 @@ exports.isRibbonGroupId = isRibbonGroupId;
79033
79148
  exports.isRibbonGroupVisible = isRibbonGroupVisible;
79034
79149
  exports.isRoutedToLegacyBevelShadow = isRoutedToLegacyBevelShadow;
79035
79150
  exports.isRowBoundaryMergedAt = isRowBoundaryMergedAt;
79151
+ exports.isRunHyperlinkClickable = isRunHyperlinkClickable;
79036
79152
  exports.isSafeSvgMarkup = isSafeSvgMarkup;
79037
79153
  exports.isSameArtisticEffect = isSameArtisticEffect;
79038
79154
  exports.isSeriesUsingSecondaryAxis = isSeriesUsingSecondaryAxis;