ooxml-ui 1.1.0 → 1.3.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 (203) hide show
  1. package/README.md +38 -36
  2. package/custom-elements.json +372 -4
  3. package/dist/chrome/ruler.d.ts +60 -2
  4. package/dist/chrome/ruler.d.ts.map +1 -1
  5. package/dist/chrome/status-bar.d.ts +3 -1
  6. package/dist/chrome/status-bar.d.ts.map +1 -1
  7. package/dist/{chunk-JFJXBYRD.js → chunk-2WLRFPMW.js} +9 -0
  8. package/dist/{chunk-X7RINDJQ.js → chunk-56A2JK63.js} +1 -1
  9. package/dist/{chunk-KVKKXRL7.js → chunk-5OFAJDMQ.js} +93 -14
  10. package/dist/{chunk-M5DTJSOV.js → chunk-723JC3OC.js} +461 -16
  11. package/dist/{chunk-USDLALB5.js → chunk-IY7QJLQG.js} +1 -1
  12. package/dist/{chunk-BOX43CZD.js → chunk-M6GF5ED2.js} +2 -1
  13. package/dist/{chunk-BEN3453I.js → chunk-NYRRH2MD.js} +1 -1
  14. package/dist/{chunk-3FPW7M6U.js → chunk-TWQ45BFL.js} +1 -1
  15. package/dist/{chunk-ZU7GX4SY.js → chunk-V6P6KZCO.js} +7 -5
  16. package/dist/comments/comments-pane.d.ts +116 -0
  17. package/dist/comments/comments-pane.d.ts.map +1 -0
  18. package/dist/comments/types.d.ts +80 -0
  19. package/dist/comments/types.d.ts.map +1 -0
  20. package/dist/controls.d.ts +6 -2
  21. package/dist/controls.d.ts.map +1 -1
  22. package/dist/controls.js +5 -5
  23. package/dist/docx/comments-panel.d.ts +8 -1
  24. package/dist/docx/editor-chrome.d.ts +8 -1
  25. package/dist/docx/file-commands.d.ts +1 -1
  26. package/dist/docx/image-media.d.ts +1 -1
  27. package/dist/docx/locales/en-app.d.ts +1 -0
  28. package/dist/docx/locales/en-ribbon.d.ts +1 -0
  29. package/dist/docx/locales/en.d.ts +2 -0
  30. package/dist/docx/localization-strings.d.ts +2 -0
  31. package/dist/docx/localization.d.ts +7 -0
  32. package/dist/docx/print-layout.d.ts +2 -2
  33. package/dist/docx/print-picture.d.ts +12 -0
  34. package/dist/docx/review-controller.d.ts +2 -0
  35. package/dist/docx/ribbon-actions.d.ts +22 -0
  36. package/dist/docx/ruler.d.ts +7 -10
  37. package/dist/docx/title-bar.d.ts +3 -5
  38. package/dist/docx.js +342 -362
  39. package/dist/form/gradient-preset-gallery.d.ts +2 -2
  40. package/dist/icons.d.ts.map +1 -1
  41. package/dist/icons.js +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +9 -9
  44. package/dist/pptx/{chart-3d-view-scene-2KRQ5667.mjs → chart-3d-view-scene-OYJ4CDCO.mjs} +4 -5
  45. package/dist/pptx/{chart-3d-view-scene-36DMZWZ3.cjs → chart-3d-view-scene-SE2Y6QRE.cjs} +38 -39
  46. package/dist/pptx/{chunk-YOGDIDPB.mjs → chunk-CIVA3MLN.mjs} +8 -2
  47. package/dist/pptx/{chunk-KPZWYF44.cjs → chunk-FPE5PZMI.cjs} +789 -491
  48. package/dist/pptx/{chunk-AIL3BNZS.cjs → chunk-IURZJAWP.cjs} +529 -387
  49. package/dist/pptx/{chunk-YHA6XAB3.cjs → chunk-KRMMJUCO.cjs} +83 -1
  50. package/dist/pptx/{chunk-Y2W4SZER.mjs → chunk-MWHGUEIJ.mjs} +637 -348
  51. package/dist/pptx/{chunk-YARCML7O.mjs → chunk-STLXPKJJ.mjs} +519 -388
  52. package/dist/pptx/{chunk-ADOC5JLI.mjs → chunk-TC7HCF5M.mjs} +76 -2
  53. package/dist/pptx/{chunk-CJU4P5FT.cjs → chunk-WKLHJEPD.cjs} +18 -12
  54. package/dist/pptx/dom/element-styles.d.ts.map +1 -1
  55. package/dist/pptx/dom/elements/chart.d.ts +2 -3
  56. package/dist/pptx/dom/elements/chart.d.ts.map +1 -1
  57. package/dist/pptx/dom/elements/connector.d.ts.map +1 -1
  58. package/dist/pptx/dom/elements/shape-filter-defs.d.ts.map +1 -1
  59. package/dist/pptx/dom/elements/table.d.ts.map +1 -1
  60. package/dist/pptx/dom/index.cjs +272 -261
  61. package/dist/pptx/dom/index.mjs +46 -35
  62. package/dist/pptx/dom/slide-stage.d.ts.map +1 -1
  63. package/dist/pptx/export/html2canvas-clone.cjs +2 -2
  64. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  65. package/dist/pptx/index.cjs +3065 -2993
  66. package/dist/pptx/index.mjs +4 -4
  67. package/dist/pptx/render/chart-3d-oblique-layout.d.ts.map +1 -1
  68. package/dist/pptx/render/chart-3d-persp-bars.d.ts.map +1 -1
  69. package/dist/pptx/render/chart-3d-persp-layout.d.ts.map +1 -1
  70. package/dist/pptx/render/chart-axis-range.d.ts +7 -0
  71. package/dist/pptx/render/chart-axis-range.d.ts.map +1 -1
  72. package/dist/pptx/render/chart-axis-render.d.ts +3 -1
  73. package/dist/pptx/render/chart-axis-render.d.ts.map +1 -1
  74. package/dist/pptx/render/chart-axis-style.d.ts +5 -0
  75. package/dist/pptx/render/chart-axis-style.d.ts.map +1 -1
  76. package/dist/pptx/render/chart-axis.d.ts +1 -1
  77. package/dist/pptx/render/chart-axis.d.ts.map +1 -1
  78. package/dist/pptx/render/chart-bar-cluster-geometry.d.ts +1 -1
  79. package/dist/pptx/render/chart-bar-cluster-geometry.d.ts.map +1 -1
  80. package/dist/pptx/render/chart-cartesian-area.d.ts.map +1 -1
  81. package/dist/pptx/render/chart-cartesian-axes.d.ts.map +1 -1
  82. package/dist/pptx/render/chart-cartesian-bars.d.ts +3 -3
  83. package/dist/pptx/render/chart-cartesian-line-area.d.ts.map +1 -1
  84. package/dist/pptx/render/chart-cartesian-percent-stacked.d.ts.map +1 -1
  85. package/dist/pptx/render/chart-cartesian-stacked-labels.d.ts +11 -7
  86. package/dist/pptx/render/chart-cartesian-stacked-labels.d.ts.map +1 -1
  87. package/dist/pptx/render/chart-cartesian.d.ts.map +1 -1
  88. package/dist/pptx/render/chart-combo-stock.cjs +3 -3
  89. package/dist/pptx/render/chart-combo-stock.mjs +1 -1
  90. package/dist/pptx/render/chart-combo.d.ts.map +1 -1
  91. package/dist/pptx/render/chart-data-label-anchor.d.ts +4 -1
  92. package/dist/pptx/render/chart-data-label-anchor.d.ts.map +1 -1
  93. package/dist/pptx/render/chart-gridlines-toggle.d.ts +13 -1
  94. package/dist/pptx/render/chart-gridlines-toggle.d.ts.map +1 -1
  95. package/dist/pptx/render/chart-helpers.d.ts +13 -13
  96. package/dist/pptx/render/chart-helpers.d.ts.map +1 -1
  97. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts +7 -3
  98. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts.map +1 -1
  99. package/dist/pptx/render/chart-horizontal-bars.d.ts.map +1 -1
  100. package/dist/pptx/render/chart-interaction-stacked.d.ts.map +1 -1
  101. package/dist/pptx/render/chart-line-path.d.ts +9 -0
  102. package/dist/pptx/render/chart-line-path.d.ts.map +1 -1
  103. package/dist/pptx/render/chart-overlays.cjs +7 -7
  104. package/dist/pptx/render/chart-overlays.mjs +1 -1
  105. package/dist/pptx/render/chart-palette.d.ts +5 -14
  106. package/dist/pptx/render/chart-palette.d.ts.map +1 -1
  107. package/dist/pptx/render/chart-plot-clip.d.ts +37 -0
  108. package/dist/pptx/render/chart-plot-clip.d.ts.map +1 -0
  109. package/dist/pptx/render/chart-quick-action-styles.d.ts +5 -3
  110. package/dist/pptx/render/chart-quick-action-styles.d.ts.map +1 -1
  111. package/dist/pptx/render/chart-scatter-x-axis.d.ts.map +1 -1
  112. package/dist/pptx/render/chart-style-palette.d.ts +52 -0
  113. package/dist/pptx/render/chart-style-palette.d.ts.map +1 -0
  114. package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
  115. package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
  116. package/dist/pptx/render/chart-view-model-bars.d.ts +32 -1
  117. package/dist/pptx/render/chart-view-model-bars.d.ts.map +1 -1
  118. package/dist/pptx/render/chart-view-model-build.d.ts.map +1 -1
  119. package/dist/pptx/render/chart-view-model.cjs +53 -41
  120. package/dist/pptx/render/chart-view-model.mjs +1 -1
  121. package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
  122. package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
  123. package/dist/pptx/render/device-pixel-stroke.d.ts +101 -0
  124. package/dist/pptx/render/device-pixel-stroke.d.ts.map +1 -0
  125. package/dist/pptx/render/export-clone.d.ts +4 -0
  126. package/dist/pptx/render/export-clone.d.ts.map +1 -1
  127. package/dist/pptx/render/foreign-object-svg-document.d.ts +12 -0
  128. package/dist/pptx/render/foreign-object-svg-document.d.ts.map +1 -1
  129. package/dist/pptx/render/index.d.ts +3 -0
  130. package/dist/pptx/render/index.d.ts.map +1 -1
  131. package/dist/pptx/render/stroke-outline.d.ts +6 -0
  132. package/dist/pptx/render/stroke-outline.d.ts.map +1 -1
  133. package/dist/pptx/render/stroke-style.d.ts +8 -2
  134. package/dist/pptx/render/stroke-style.d.ts.map +1 -1
  135. package/dist/pptx/render/tab-row-actions.d.ts +40 -0
  136. package/dist/pptx/render/tab-row-actions.d.ts.map +1 -0
  137. package/dist/pptx/render/table-cell-css.d.ts +3 -2
  138. package/dist/pptx/render/table-cell-css.d.ts.map +1 -1
  139. package/dist/pptx/render/table-cell-edit.d.ts +1 -1
  140. package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
  141. package/dist/pptx/render/table-cell-paragraphs.d.ts +29 -0
  142. package/dist/pptx/render/table-cell-paragraphs.d.ts.map +1 -0
  143. package/dist/pptx/render/table-style-borders.d.ts.map +1 -1
  144. package/dist/pptx/render/table-style.d.ts +2 -0
  145. package/dist/pptx/render/table-style.d.ts.map +1 -1
  146. package/dist/pptx/render/title-bar.d.ts +5 -0
  147. package/dist/pptx/render/title-bar.d.ts.map +1 -1
  148. package/dist/pptx/render/viewer-root-options.d.ts +11 -3
  149. package/dist/pptx/render/viewer-root-options.d.ts.map +1 -1
  150. package/dist/pptx/web-components/index.d.ts.map +1 -1
  151. package/dist/pptx/web-components/office-token-bridge.d.ts +1 -1
  152. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  153. package/dist/pptx/web-components/ribbon-actions.d.ts +8 -0
  154. package/dist/pptx/web-components/ribbon-actions.d.ts.map +1 -0
  155. package/dist/presence.js +3 -3
  156. package/dist/ribbon/ribbon-actions.d.ts +119 -0
  157. package/dist/ribbon/ribbon-actions.d.ts.map +1 -0
  158. package/dist/ribbon/ribbon-tabs.d.ts +2 -1
  159. package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
  160. package/dist/smartart/smartart-svg.d.ts +3 -2
  161. package/dist/smartart.js +3 -3
  162. package/dist/suite/attachment-store.d.ts +13 -0
  163. package/dist/suite/document-store.d.ts +31 -0
  164. package/dist/suite/index.d.ts +2 -0
  165. package/dist/suite.js +132 -1
  166. package/dist/teams/app/channel-tab.d.ts +5 -0
  167. package/dist/teams/chat-composer.d.ts +3 -0
  168. package/dist/teams.js +7 -7
  169. package/dist/theme.js +2 -2
  170. package/dist/tokens.d.ts +9 -0
  171. package/dist/tokens.d.ts.map +1 -1
  172. package/dist/visio/styles/index.d.ts +2 -0
  173. package/dist/visio/styles/theme.d.ts +11 -0
  174. package/dist/visio/styles.d.ts +2 -2
  175. package/dist/visio.js +66 -21
  176. package/dist/xlsx/backstage/index.d.ts +4 -1
  177. package/dist/xlsx/backstage/pages-share.d.ts +19 -0
  178. package/dist/xlsx/backstage/parts.d.ts +3 -0
  179. package/dist/xlsx/calc-preparation.d.ts +44 -0
  180. package/dist/xlsx/chart-fill-binding.d.ts +2 -2
  181. package/dist/xlsx/chart-series-gradient-type.d.ts +3 -2
  182. package/dist/xlsx/collaboration-session.d.ts +9 -0
  183. package/dist/xlsx/collaboration-types.d.ts +41 -0
  184. package/dist/xlsx/collaboration.d.ts +56 -0
  185. package/dist/xlsx/component.d.ts +8 -0
  186. package/dist/xlsx/dialogs/comments-list.d.ts +4 -0
  187. package/dist/xlsx/dialogs/help-dialogs.d.ts +1 -1
  188. package/dist/xlsx/editor-core.d.ts +6 -0
  189. package/dist/xlsx/element-api.d.ts +19 -1
  190. package/dist/xlsx/events.d.ts +4 -1
  191. package/dist/xlsx/grid/remote-layer.d.ts +3 -0
  192. package/dist/xlsx/grid/sparkline.d.ts +3 -0
  193. package/dist/xlsx/grid/styles.d.ts +1 -1
  194. package/dist/xlsx/index.d.ts +1 -0
  195. package/dist/xlsx/ribbon-actions.d.ts +22 -0
  196. package/dist/xlsx/shell-commands.d.ts +1 -1
  197. package/dist/xlsx/title-bar.d.ts +4 -2
  198. package/dist/xlsx.js +801 -92
  199. package/package.json +2 -2
  200. package/dist/pptx/web-components/status-bar-styles.d.ts +0 -3
  201. package/dist/pptx/web-components/status-bar-styles.d.ts.map +0 -1
  202. package/dist/pptx/web-components/title-bar-styles.d.ts +0 -7
  203. package/dist/pptx/web-components/title-bar-styles.d.ts.map +0 -1
@@ -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 chunkCJU4P5FT_cjs = require('./chunk-CJU4P5FT.cjs');
7
+ var chunkWKLHJEPD_cjs = require('./chunk-WKLHJEPD.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 chunkAIL3BNZS_cjs = require('./chunk-AIL3BNZS.cjs');
15
+ var chunkIURZJAWP_cjs = require('./chunk-IURZJAWP.cjs');
16
16
  var chunkFOE75Z6N_cjs = require('./chunk-FOE75Z6N.cjs');
17
17
  var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
- var chunkYHA6XAB3_cjs = require('./chunk-YHA6XAB3.cjs');
18
+ var chunkKRMMJUCO_cjs = require('./chunk-KRMMJUCO.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');
@@ -31,6 +31,7 @@ var opentypeModule = require('opentype.js');
31
31
  var math = require('ooxml-core/math');
32
32
  var schemaLabelKeys = require('ooxml-core/pptx/editor/render/schema-label-keys');
33
33
  var chartUserShapeEdit = require('ooxml-core/pptx/editor/render/chart-user-shape-edit');
34
+ var bulletList = require('ooxml-core/pptx/editor/render/bullet-list');
34
35
  var tableMerge = require('ooxml-core/pptx/editor/render/table-merge');
35
36
  var tableLayout = require('ooxml-core/pptx/editor/render/table-layout');
36
37
  var tableCellEdit = require('ooxml-core/pptx/editor/render/table-cell-edit');
@@ -47,7 +48,6 @@ var editorHistory = require('ooxml-core/pptx/editor/render/editor-history');
47
48
  var sectionOperations = require('ooxml-core/pptx/editor/render/section-operations');
48
49
  var slideOperations = require('ooxml-core/pptx/editor/render/slide-operations');
49
50
  var bulletAutonum = require('ooxml-core/pptx/editor/render/bullet-autonum');
50
- var bulletList = require('ooxml-core/pptx/editor/render/bullet-list');
51
51
  var textTheme = require('ooxml-core/pptx/editor/render/text-theme');
52
52
  var collaborationReconcile = require('ooxml-core/pptx/editor/render/collaboration-reconcile');
53
53
  var collaborationSync = require('ooxml-core/pptx/editor/render/collaboration-sync');
@@ -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 = chunkAIL3BNZS_cjs.buildRectPathGradientSvg(rectStops, focalPoint, fillToRect);
1073
+ const markup = chunkIURZJAWP_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 = 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);
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);
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 chunkAIL3BNZS_cjs.sanitizeGradientStops(stops).map((stop) => ({
1112
+ return chunkIURZJAWP_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 } = chunkAIL3BNZS_cjs.computeGradientCenter(source.fillToRect, source.focalPoint);
1139
+ const { cx, cy } = chunkIURZJAWP_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,10 +1278,13 @@ 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, offset: 0 }];
1281
+ return [{ strokeWidth, cssStrokeWidth: chunkKRMMJUCO_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1282
1282
  }
1283
1283
  const widths = getCompoundLineWidths(compoundLine, strokeWidth);
1284
- return offsets2.map((offset, idx) => ({ strokeWidth: widths[idx] ?? strokeWidth, offset }));
1284
+ return offsets2.map((offset, idx) => {
1285
+ const width = widths[idx] ?? strokeWidth;
1286
+ return { strokeWidth: width, cssStrokeWidth: chunkKRMMJUCO_cjs.screenStrokeWidth(width), offset };
1287
+ });
1285
1288
  }
1286
1289
  function needsCenteredStrokeOverlay(element, style, declaredWidth) {
1287
1290
  if (!style || declaredWidth <= 0 || element.type === "connector" || !hasStrokePaint(style)) {
@@ -1316,11 +1319,11 @@ function buildStrokeOutline(element) {
1316
1319
  return {
1317
1320
  d,
1318
1321
  paint,
1319
- stroke: paint ? svgGradientFillRef(paint) : chunkAIL3BNZS_cjs.colorWithOpacity(style?.strokeColor ?? chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1322
+ stroke: paint ? svgGradientFillRef(paint) : chunkIURZJAWP_cjs.colorWithOpacity(style?.strokeColor ?? chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR, style?.strokeOpacity),
1320
1323
  strokeWidth,
1321
1324
  strands: outlineStrands(style?.compoundLine, strokeWidth),
1322
- dashArray: chunkAIL3BNZS_cjs.getSvgStrokeDasharray(
1323
- chunkAIL3BNZS_cjs.normalizeStrokeDashType(style?.strokeDash),
1325
+ dashArray: chunkIURZJAWP_cjs.getSvgStrokeDasharray(
1326
+ chunkIURZJAWP_cjs.normalizeStrokeDashType(style?.strokeDash),
1324
1327
  Math.max(strokeWidth, 1),
1325
1328
  style?.customDashSegments
1326
1329
  ),
@@ -1444,6 +1447,7 @@ function resolveShapeGeometry(element) {
1444
1447
  }
1445
1448
  var NO_STROKE = {
1446
1449
  borderWidth: 0,
1450
+ cssBorderWidth: "0px",
1447
1451
  borderStyle: void 0,
1448
1452
  borderColor: void 0,
1449
1453
  border: void 0,
@@ -1499,17 +1503,18 @@ function getComputedStrokeStyle(element) {
1499
1503
  return { ...NO_STROKE, ...joins };
1500
1504
  }
1501
1505
  const borderWidth = width;
1502
- const borderStyle = chunkAIL3BNZS_cjs.getCssBorderDashStyle(
1503
- chunkAIL3BNZS_cjs.normalizeStrokeDashType(style.strokeDash),
1506
+ const borderStyle = chunkIURZJAWP_cjs.getCssBorderDashStyle(
1507
+ chunkIURZJAWP_cjs.normalizeStrokeDashType(style.strokeDash),
1504
1508
  style.compoundLine
1505
1509
  );
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);
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);
1508
1512
  return {
1509
1513
  borderWidth,
1514
+ cssBorderWidth: chunkKRMMJUCO_cjs.screenStrokeWidth(borderWidth),
1510
1515
  borderStyle,
1511
1516
  borderColor,
1512
- border: `${borderWidth}px ${borderStyle ?? "solid"} ${borderColor}`,
1517
+ border: chunkKRMMJUCO_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
1513
1518
  ...joins
1514
1519
  };
1515
1520
  }
@@ -1665,7 +1670,7 @@ function resolveGroupChildFill(child, parentGroupFill) {
1665
1670
  if (!parentGroupFill || !pptx.hasShapeProperties(child) || child.shapeStyle?.fillMode !== "group") {
1666
1671
  return void 0;
1667
1672
  }
1668
- return chunkAIL3BNZS_cjs.getComputedFillStyle(child, parentGroupFill);
1673
+ return chunkIURZJAWP_cjs.getComputedFillStyle(child, parentGroupFill);
1669
1674
  }
1670
1675
  function getFrameInverseTransform(element) {
1671
1676
  const transforms = [];
@@ -1717,9 +1722,9 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1717
1722
  }
1718
1723
  if (colorNode["a:scrgbClr"]) {
1719
1724
  const scrgb = colorNode["a:scrgbClr"];
1720
- const red = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_r"]);
1721
- const green = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_g"]);
1722
- const blue = chunkAIL3BNZS_cjs.parseDrawingPercent(scrgb["@_b"]);
1725
+ const red = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_r"]);
1726
+ const green = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_g"]);
1727
+ const blue = chunkIURZJAWP_cjs.parseDrawingPercent(scrgb["@_b"]);
1723
1728
  if (red !== void 0 && green !== void 0 && blue !== void 0) {
1724
1729
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1725
1730
  const base2 = `#${toHex2(red * 255)}${toHex2(green * 255)}${toHex2(blue * 255)}`;
@@ -1759,8 +1764,8 @@ function parseDrawingColorChoice(colorNode, schemeColorOverrides) {
1759
1764
  const lumRaw = Number.parseFloat(String(hslNode["@_lum"] ?? ""));
1760
1765
  if (Number.isFinite(hueRaw) && Number.isFinite(satRaw) && Number.isFinite(lumRaw)) {
1761
1766
  const h = hueRaw / 6e4;
1762
- const s = chunkAIL3BNZS_cjs.clampUnitInterval(satRaw / 1e5);
1763
- const l = chunkAIL3BNZS_cjs.clampUnitInterval(lumRaw / 1e5);
1767
+ const s = chunkIURZJAWP_cjs.clampUnitInterval(satRaw / 1e5);
1768
+ const l = chunkIURZJAWP_cjs.clampUnitInterval(lumRaw / 1e5);
1764
1769
  const rgb = pptx.hslToRgb(h, s, l);
1765
1770
  const toHex2 = (value) => Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
1766
1771
  const base2 = `#${toHex2(rgb.r)}${toHex2(rgb.g)}${toHex2(rgb.b)}`;
@@ -1800,11 +1805,11 @@ function parseDrawingColorOpacity(colorNode) {
1800
1805
  if (!colorChoice) {
1801
1806
  return void 0;
1802
1807
  }
1803
- const alpha = chunkAIL3BNZS_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1804
- const alphaMod = chunkAIL3BNZS_cjs.parseDrawingPercent(
1808
+ const alpha = chunkIURZJAWP_cjs.parseDrawingPercent(colorChoice["a:alpha"]?.["@_val"]);
1809
+ const alphaMod = chunkIURZJAWP_cjs.parseDrawingPercent(
1805
1810
  colorChoice["a:alphaMod"]?.["@_val"]
1806
1811
  );
1807
- const alphaOff = chunkAIL3BNZS_cjs.parseDrawingPercent(
1812
+ const alphaOff = chunkIURZJAWP_cjs.parseDrawingPercent(
1808
1813
  colorChoice["a:alphaOff"]?.["@_val"]
1809
1814
  );
1810
1815
  if (alpha === void 0 && alphaMod === void 0 && alphaOff === void 0) {
@@ -1817,7 +1822,7 @@ function parseDrawingColorOpacity(colorNode) {
1817
1822
  if (alphaOff !== void 0) {
1818
1823
  opacity += alphaOff;
1819
1824
  }
1820
- return chunkAIL3BNZS_cjs.clampUnitInterval(opacity);
1825
+ return chunkIURZJAWP_cjs.clampUnitInterval(opacity);
1821
1826
  }
1822
1827
  function substituteScriptFont(name, panose, baseFontFamily) {
1823
1828
  return name ? pptx.getSubstituteFontFamily(name, pptx.parsePanoseString(panose)) : baseFontFamily;
@@ -2028,7 +2033,7 @@ function buildPatternOverlayTile(pattern) {
2028
2033
  if (!pattern) {
2029
2034
  return void 0;
2030
2035
  }
2031
- const tile4 = chunkAIL3BNZS_cjs.getPatternTile(
2036
+ const tile4 = chunkIURZJAWP_cjs.getPatternTile(
2032
2037
  pattern.preset,
2033
2038
  pattern.foreground ?? "#000000",
2034
2039
  pattern.background ?? "#ffffff"
@@ -3582,10 +3587,10 @@ function getMeasureCtx() {
3582
3587
  return measureCtx;
3583
3588
  }
3584
3589
  function envelopeFontSizePx(font) {
3585
- return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
3590
+ return font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
3586
3591
  }
3587
3592
  function toCanvasFont(font, sizePx = envelopeFontSizePx(font)) {
3588
- const family2 = font.fontFamily || chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
3593
+ const family2 = font.fontFamily || chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
3589
3594
  return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${sizePx}px ${family2}`;
3590
3595
  }
3591
3596
  function enableKerning(ctx) {
@@ -4580,7 +4585,7 @@ function createGlyphOutlineLookup(cache) {
4580
4585
  return (char, font, x, y) => {
4581
4586
  const parsed = cache.get(font.fontFamily, font.bold, font.italic);
4582
4587
  if (parsed) {
4583
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
4588
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
4584
4589
  const commands = extractGlyphOutlineCommands(parsed, char, x, y, size);
4585
4590
  if (commands) {
4586
4591
  return commands;
@@ -6768,7 +6773,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6768
6773
  let rSquared = 0;
6769
6774
  switch (trendline.trendlineType) {
6770
6775
  case "linear": {
6771
- const reg = chunkAIL3BNZS_cjs.computeLinearRegression(xVals, yVals);
6776
+ const reg = chunkIURZJAWP_cjs.computeLinearRegression(xVals, yVals);
6772
6777
  const intercept = trendline.intercept;
6773
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;
6774
6779
  const b = intercept ?? reg.intercept;
@@ -6783,7 +6788,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6783
6788
  if (logY.length < 2) {
6784
6789
  return { points: [], equation: "", rSquared: 0 };
6785
6790
  }
6786
- const reg = chunkAIL3BNZS_cjs.computeLinearRegression(filteredX, logY);
6791
+ const reg = chunkIURZJAWP_cjs.computeLinearRegression(filteredX, logY);
6787
6792
  const a = Math.exp(reg.intercept);
6788
6793
  const b = reg.slope;
6789
6794
  evalFn = (x) => a * Math.exp(b * x);
@@ -6797,7 +6802,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6797
6802
  if (lnX.length < 2) {
6798
6803
  return { points: [], equation: "", rSquared: 0 };
6799
6804
  }
6800
- const reg = chunkAIL3BNZS_cjs.computeLinearRegression(lnX, filteredY);
6805
+ const reg = chunkIURZJAWP_cjs.computeLinearRegression(lnX, filteredY);
6801
6806
  evalFn = (x) => x > 0 ? reg.slope * Math.log(x) + reg.intercept : 0;
6802
6807
  equation = `y = ${reg.slope.toFixed(2)}ln(x) + ${reg.intercept.toFixed(2)}`;
6803
6808
  rSquared = reg.rSquared;
@@ -6809,7 +6814,7 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6809
6814
  if (logX.length < 2) {
6810
6815
  return { points: [], equation: "", rSquared: 0 };
6811
6816
  }
6812
- const reg = chunkAIL3BNZS_cjs.computeLinearRegression(logX, logY);
6817
+ const reg = chunkIURZJAWP_cjs.computeLinearRegression(logX, logY);
6813
6818
  const a = Math.exp(reg.intercept);
6814
6819
  evalFn = (x) => x > 0 ? a * x ** reg.slope : 0;
6815
6820
  equation = `y = ${a.toFixed(2)}x^${reg.slope.toFixed(2)}`;
@@ -6818,10 +6823,10 @@ function computeTrendlinePoints(trendline, values, catCount, layout, range, mode
6818
6823
  }
6819
6824
  case "polynomial": {
6820
6825
  const order = Math.min(trendline.order ?? 2, 6);
6821
- const coeffs = chunkAIL3BNZS_cjs.fitPolynomial(xVals, yVals, order);
6826
+ const coeffs = chunkIURZJAWP_cjs.fitPolynomial(xVals, yVals, order);
6822
6827
  evalFn = (x) => coeffs.reduce((s, c, i) => s + c * x ** i, 0);
6823
6828
  equation = coeffs.map((c, i) => `${c.toFixed(2)}x^${i}`).join(" + ");
6824
- rSquared = chunkAIL3BNZS_cjs.computeRSquared(xVals, yVals, evalFn);
6829
+ rSquared = chunkIURZJAWP_cjs.computeRSquared(xVals, yVals, evalFn);
6825
6830
  break;
6826
6831
  }
6827
6832
  case "movingAvg": {
@@ -7159,7 +7164,7 @@ var COMBO_SERIES_TYPE_OPTIONS = [
7159
7164
  function patchChartData(data, patch) {
7160
7165
  const { chartType, ...rest } = patch;
7161
7166
  if (chartType === "pareto") {
7162
- return { ...chunkAIL3BNZS_cjs.applyParetoConversion(data), ...rest };
7167
+ return { ...chunkIURZJAWP_cjs.applyParetoConversion(data), ...rest };
7163
7168
  }
7164
7169
  if (chartType && chartType !== data.chartType) {
7165
7170
  const adapted = pptx.chartDataChangeType(data, chartType);
@@ -7221,8 +7226,8 @@ function buildParetoInsertData() {
7221
7226
  layout: "histogram",
7222
7227
  binCount: PARETO_BIN_COUNT
7223
7228
  };
7224
- const bins = chunkAIL3BNZS_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7225
- const ordered = chunkAIL3BNZS_cjs.orderParetoEntries(
7229
+ const bins = chunkIURZJAWP_cjs.computeHistogramBins(PARETO_VALUES, histogramOptions);
7230
+ const ordered = chunkIURZJAWP_cjs.orderParetoEntries(
7226
7231
  bins.map((bin, index) => ({ value: bin.value, label: bin.label, sourcePointIndex: index }))
7227
7232
  );
7228
7233
  return {
@@ -7235,7 +7240,7 @@ function buildParetoInsertData() {
7235
7240
  },
7236
7241
  {
7237
7242
  name: "Cumulative %",
7238
- values: chunkAIL3BNZS_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7243
+ values: chunkIURZJAWP_cjs.cumulativePercentOfTotal(ordered.map((entry5) => entry5.value)),
7239
7244
  histogramOptions: { layout: "pareto" }
7240
7245
  }
7241
7246
  ]
@@ -7498,7 +7503,7 @@ var FILL_PATTERN_LABEL_KEYS = {
7498
7503
  trellis: "pptx.fillPatterns.trellis",
7499
7504
  zigZag: "pptx.fillPatterns.zigZag"
7500
7505
  };
7501
- var PATTERN_PRESET_OPTIONS = chunkAIL3BNZS_cjs.OOXML_PATTERN_PRESETS.map(
7506
+ var PATTERN_PRESET_OPTIONS = chunkIURZJAWP_cjs.OOXML_PATTERN_PRESETS.map(
7502
7507
  (value) => ({ value, labelKey: FILL_PATTERN_LABEL_KEYS[value] })
7503
7508
  );
7504
7509
 
@@ -7643,13 +7648,49 @@ function setDataLabelsRangeCache(series, pointIndex, text3) {
7643
7648
 
7644
7649
  // src/pptx/render/chart-quick-action-styles.ts
7645
7650
  var CHART_STYLE_PRESETS = [
7646
- { id: "colorful", labelKey: "pptx.chart.styleColorful", styleId: 2 },
7647
- { id: "monochrome", labelKey: "pptx.chart.styleMonochrome", styleId: 10 },
7648
- { id: "colorfulLight", labelKey: "pptx.chart.styleColorfulLight", styleId: 18 },
7649
- { id: "colorfulDark", labelKey: "pptx.chart.styleColorfulDark", styleId: 26 },
7650
- { id: "mutedDark", labelKey: "pptx.chart.styleMutedDark", styleId: 34 },
7651
- { id: "pastel", labelKey: "pptx.chart.stylePastel", styleId: 42 }
7651
+ {
7652
+ id: "colorful",
7653
+ labelKey: "pptx.chart.styleColorful",
7654
+ styleId: 2,
7655
+ palette: () => chunkIURZJAWP_cjs.getChartStylePalette(2)
7656
+ },
7657
+ {
7658
+ id: "monochrome",
7659
+ labelKey: "pptx.chart.styleMonochrome",
7660
+ styleId: 3,
7661
+ palette: () => chunkIURZJAWP_cjs.getChartStylePalette(3)
7662
+ },
7663
+ {
7664
+ id: "colorfulLight",
7665
+ labelKey: "pptx.chart.styleColorfulLight",
7666
+ styleId: 18,
7667
+ palette: () => recolour((c) => chunkIURZJAWP_cjs.tint(c, 0.3))
7668
+ },
7669
+ {
7670
+ id: "colorfulDark",
7671
+ labelKey: "pptx.chart.styleColorfulDark",
7672
+ styleId: 26,
7673
+ palette: () => recolour((c) => chunkIURZJAWP_cjs.shade(c, 0.3))
7674
+ },
7675
+ {
7676
+ id: "mutedDark",
7677
+ labelKey: "pptx.chart.styleMutedDark",
7678
+ styleId: 34,
7679
+ palette: () => recolour((c) => chunkIURZJAWP_cjs.shade(chunkIURZJAWP_cjs.tint(c, 0.3), 0.4))
7680
+ },
7681
+ {
7682
+ id: "pastel",
7683
+ labelKey: "pptx.chart.stylePastel",
7684
+ styleId: 42,
7685
+ palette: () => recolour((c) => chunkIURZJAWP_cjs.tint(c, 0.55))
7686
+ }
7652
7687
  ];
7688
+ function recolour(transform) {
7689
+ return chunkIURZJAWP_cjs.getChartStylePalette(2).map(transform);
7690
+ }
7691
+ function chartStylePresetPalette(id) {
7692
+ return findPreset(id)?.palette();
7693
+ }
7653
7694
  function paletteEquals(a, b) {
7654
7695
  if (!b || a.length !== b.length) {
7655
7696
  return false;
@@ -7660,8 +7701,8 @@ function findPreset(id) {
7660
7701
  return CHART_STYLE_PRESETS.find((p) => p.id === id);
7661
7702
  }
7662
7703
  function buildChartStylePresets(chartData) {
7663
- return CHART_STYLE_PRESETS.map(({ id, labelKey, styleId }) => {
7664
- const colors = chunkAIL3BNZS_cjs.getChartStylePalette(styleId);
7704
+ return CHART_STYLE_PRESETS.map(({ id, labelKey, palette }) => {
7705
+ const colors = palette();
7665
7706
  return {
7666
7707
  id,
7667
7708
  labelKey,
@@ -7695,7 +7736,7 @@ function applyChartStylePreset(chartData, presetId) {
7695
7736
  if (!preset2) {
7696
7737
  return null;
7697
7738
  }
7698
- const colors = [...chunkAIL3BNZS_cjs.getChartStylePalette(preset2.styleId)];
7739
+ const colors = [...preset2.palette()];
7699
7740
  return {
7700
7741
  ...chartData,
7701
7742
  colorPalette: colors,
@@ -7759,7 +7800,7 @@ function applyChartElementToggle(chartData, key, checked) {
7759
7800
  style: { ...chartData.style, ...chartDataLabelsTogglePatch(chartData.style, checked) }
7760
7801
  });
7761
7802
  case "gridlines":
7762
- return patchChartData(chartData, chunkAIL3BNZS_cjs.chartGridlinesPatch(chartData, checked));
7803
+ return patchChartData(chartData, chunkIURZJAWP_cjs.chartGridlinesPatch(chartData, checked));
7763
7804
  case "axes":
7764
7805
  return patchChartData(chartData, chartAxesVisibilityPatch(chartData, checked));
7765
7806
  case "axisTitles":
@@ -7798,7 +7839,7 @@ function buildElements(chartData) {
7798
7839
  {
7799
7840
  key: "gridlines",
7800
7841
  labelKey: "pptx.chart.showGridlines",
7801
- checked: chunkAIL3BNZS_cjs.chartGridlinesState(chartData)
7842
+ checked: chunkIURZJAWP_cjs.chartGridlinesState(chartData)
7802
7843
  },
7803
7844
  {
7804
7845
  key: "dataLabels",
@@ -8210,17 +8251,17 @@ function chartEventPathElements(event) {
8210
8251
  }
8211
8252
  function findChartPartElementInEvent(event) {
8212
8253
  for (const el of chartEventPathElements(event)) {
8213
- if (el.getAttribute(chunkCJU4P5FT_cjs.CHART_PART_ATTR) !== null) {
8254
+ if (el.getAttribute(chunkWKLHJEPD_cjs.CHART_PART_ATTR) !== null) {
8214
8255
  return el;
8215
8256
  }
8216
8257
  }
8217
8258
  return null;
8218
8259
  }
8219
8260
  function findChartPartInEvent(event) {
8220
- return chunkCJU4P5FT_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8261
+ return chunkWKLHJEPD_cjs.chartPartFromElement(findChartPartElementInEvent(event));
8221
8262
  }
8222
8263
  function isChartTitleEvent(event) {
8223
- return findChartPartElementInEvent(event)?.getAttribute(chunkCJU4P5FT_cjs.CHART_PART_ATTR) === "title";
8264
+ return findChartPartElementInEvent(event)?.getAttribute(chunkWKLHJEPD_cjs.CHART_PART_ATTR) === "title";
8224
8265
  }
8225
8266
 
8226
8267
  // src/pptx/render/chart-interaction-mark-drag.ts
@@ -8255,14 +8296,14 @@ function advanceChartMarkDrag(state, clientX, clientY, rect3) {
8255
8296
  return null;
8256
8297
  }
8257
8298
  const travelled = Math.hypot(clientX - state.startClientX, clientY - state.startClientY);
8258
- if (!state.moved && travelled < chunkCJU4P5FT_cjs.CHART_DRAG_THRESHOLD_PX) {
8299
+ if (!state.moved && travelled < chunkWKLHJEPD_cjs.CHART_DRAG_THRESHOLD_PX) {
8259
8300
  return null;
8260
8301
  }
8261
8302
  if (rect3.width === 0 || rect3.height === 0) {
8262
8303
  return null;
8263
8304
  }
8264
8305
  state.moved = true;
8265
- const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkCJU4P5FT_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkCJU4P5FT_cjs.withChartPointValue(
8306
+ const pointer = clientPointToViewBox(clientX, clientY, rect3, state.svgWidth, state.svgHeight), value = chunkWKLHJEPD_cjs.resolveChartDragValue(state.geometry, pointer), chartData = chunkWKLHJEPD_cjs.withChartPointValue(
8266
8307
  state.baseChartData,
8267
8308
  state.part.seriesIndex,
8268
8309
  state.part.pointIndex,
@@ -11828,7 +11869,7 @@ function getAnimationColorBaseStyle(element, options = {}) {
11828
11869
  }
11829
11870
  const style = {};
11830
11871
  if (options.animatesFill) {
11831
- const fill = chunkAIL3BNZS_cjs.getComputedFillStyle(element, options.parentGroupFill);
11872
+ const fill = chunkIURZJAWP_cjs.getComputedFillStyle(element, options.parentGroupFill);
11832
11873
  style[ANIMATION_COLOR_BASE_PROPERTIES.fill] = fill?.backgroundColor ?? element.shapeStyle?.fillColor ?? "currentColor";
11833
11874
  }
11834
11875
  if (options.animatesStroke) {
@@ -19509,7 +19550,7 @@ function borderToCss(border2, resolve) {
19509
19550
  const width = border2.width ?? 1;
19510
19551
  const dash = ooxmlDashToCssBorderStyle(border2.dash);
19511
19552
  const color = border2.color ?? resolve(border2.fill) ?? "#000000";
19512
- return `${width}px ${dash} ${color}`;
19553
+ return chunkKRMMJUCO_cjs.screenBorder(width, dash, color);
19513
19554
  }
19514
19555
  function collectSections(entry5, tableData, pos) {
19515
19556
  const { rowIndex, cellIndex, rowCount, columnCount } = pos;
@@ -19887,7 +19928,7 @@ function gradientCssFromFill(fill, colorScheme) {
19887
19928
  position: stop.position
19888
19929
  }))
19889
19930
  };
19890
- return chunkAIL3BNZS_cjs.buildGradientCss(shapeLike);
19931
+ return chunkIURZJAWP_cjs.buildGradientCss(shapeLike);
19891
19932
  }
19892
19933
  function applyStyleFill(fill, colorScheme, css, fallback) {
19893
19934
  if (fill?.noFill) {
@@ -19913,13 +19954,13 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19913
19954
  }
19914
19955
  }
19915
19956
  if (fill?.pattern) {
19916
- const fg = chunkAIL3BNZS_cjs.normalizeHexColor(
19957
+ const fg = chunkIURZJAWP_cjs.normalizeHexColor(
19917
19958
  resolveStyleFillColor(fill.pattern.foreground, colorScheme),
19918
19959
  "#000000"
19919
- ), bg = chunkAIL3BNZS_cjs.normalizeHexColor(
19960
+ ), bg = chunkIURZJAWP_cjs.normalizeHexColor(
19920
19961
  resolveStyleFillColor(fill.pattern.background, colorScheme),
19921
19962
  "#ffffff"
19922
- ), svg2 = chunkAIL3BNZS_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19963
+ ), svg2 = chunkIURZJAWP_cjs.getPatternSvg(fill.pattern.preset, fg, bg);
19923
19964
  clearBackground(css);
19924
19965
  if (svg2) {
19925
19966
  css.backgroundImage = `url("data:image/svg+xml,${encodeURIComponent(svg2)}")`;
@@ -19928,7 +19969,7 @@ function applyStyleFill(fill, colorScheme, css, fallback) {
19928
19969
  return true;
19929
19970
  }
19930
19971
  const resolved = resolveStyleFillColor(fill, colorScheme);
19931
- const color = (resolved && fill?.alpha !== void 0 ? chunkAIL3BNZS_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19972
+ const color = (resolved && fill?.alpha !== void 0 ? chunkIURZJAWP_cjs.colorWithOpacity(resolved, fill.alpha / 1e5) : resolved) ?? fallback;
19932
19973
  if (color) {
19933
19974
  layerSolidColor(css, color);
19934
19975
  return true;
@@ -20140,192 +20181,6 @@ function followingText(pieces, i, next) {
20140
20181
  return next;
20141
20182
  }
20142
20183
 
20143
- // src/pptx/render/text-metric-tracking.ts
20144
- var ADVANCE_STEPS_PER_PX = 6;
20145
- var MAX_TRACKING_PX_PER_CHAR = 1 / (2 * ADVANCE_STEPS_PER_PX);
20146
- var MAX_CACHE_ENTRIES = 2e4;
20147
- var measureContext2;
20148
- var trackingCache = /* @__PURE__ */ new Map();
20149
- var fontsHookInstalled = false;
20150
- function installFontLoadHook() {
20151
- if (fontsHookInstalled || typeof document === "undefined") {
20152
- return;
20153
- }
20154
- fontsHookInstalled = true;
20155
- document.fonts?.addEventListener?.("loadingdone", () => {
20156
- trackingCache = /* @__PURE__ */ new Map();
20157
- });
20158
- }
20159
- function getMeasureContext() {
20160
- if (measureContext2 !== void 0) {
20161
- return measureContext2;
20162
- }
20163
- if (typeof document === "undefined") {
20164
- measureContext2 = null;
20165
- return null;
20166
- }
20167
- installFontLoadHook();
20168
- measureContext2 = document.createElement("canvas").getContext("2d");
20169
- return measureContext2;
20170
- }
20171
- function toCanvasFont2(font) {
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
- return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family2}`;
20175
- }
20176
- function advancesOf(ctx, canvasFont, chars) {
20177
- ctx.font = canvasFont;
20178
- ctx.fontKerning = "none";
20179
- const advances = [];
20180
- let previous = 0;
20181
- let prefix = "";
20182
- for (const char of chars) {
20183
- prefix += char;
20184
- const width = ctx.measureText(prefix).width;
20185
- advances.push(width - previous);
20186
- previous = width;
20187
- }
20188
- return advances;
20189
- }
20190
- function resolveMetricTrackingPx(text3, font) {
20191
- if (!text3) {
20192
- return 0;
20193
- }
20194
- const canvasFont = toCanvasFont2(font);
20195
- const key = `${canvasFont}\0${text3}`;
20196
- const cached = trackingCache.get(key);
20197
- if (cached !== void 0) {
20198
- return cached;
20199
- }
20200
- const ctx = getMeasureContext();
20201
- if (!ctx) {
20202
- return 0;
20203
- }
20204
- const chars = [...text3];
20205
- let powerPoint = 0;
20206
- for (const advance of advancesOf(ctx, canvasFont, chars)) {
20207
- powerPoint += Math.round(advance * ADVANCE_STEPS_PER_PX);
20208
- }
20209
- ctx.fontKerning = "auto";
20210
- const natural = ctx.measureText(text3).width;
20211
- if (!(natural > 0)) {
20212
- return 0;
20213
- }
20214
- powerPoint /= ADVANCE_STEPS_PER_PX;
20215
- const limit = MAX_TRACKING_PX_PER_CHAR;
20216
- const raw = (powerPoint - natural) / chars.length;
20217
- const tracking = Math.min(limit, Math.max(-limit, raw));
20218
- if (trackingCache.size >= MAX_CACHE_ENTRIES) {
20219
- trackingCache = /* @__PURE__ */ new Map();
20220
- }
20221
- trackingCache.set(key, tracking);
20222
- return tracking;
20223
- }
20224
- function isBreakBoundary(previous, next) {
20225
- const previousSpace = /\s/u.test(previous);
20226
- const nextSpace = /\s/u.test(next);
20227
- if (previousSpace !== nextSpace) {
20228
- return true;
20229
- }
20230
- return previous === "-" && next !== "-" && !nextSpace;
20231
- }
20232
- function splitRunForMetrics(text3, font) {
20233
- const chars = [...text3];
20234
- if (chars.length < 2 || !getMeasureContext()) {
20235
- return [{ text: text3, tracking: resolveMetricTrackingPx(text3, font) }];
20236
- }
20237
- const pieces = [];
20238
- let current = chars[0];
20239
- for (let i = 1; i < chars.length; i++) {
20240
- if (isBreakBoundary(chars[i - 1], chars[i])) {
20241
- pieces.push(current);
20242
- current = "";
20243
- }
20244
- current += chars[i];
20245
- }
20246
- pieces.push(current);
20247
- if (pieces.length === 1) {
20248
- return [{ text: text3, tracking: resolveMetricTrackingPx(text3, font) }];
20249
- }
20250
- return pieces.map((piece) => ({ text: piece, tracking: resolveMetricTrackingPx(piece, font) }));
20251
- }
20252
- function resolveMetricTracking(text3, font) {
20253
- const tracking = resolveMetricTrackingPx(text3, font);
20254
- return tracking === 0 ? void 0 : `${tracking}px`;
20255
- }
20256
- function resolveTrackedTextWidth(text3, font, naturalWidth) {
20257
- if (!text3) {
20258
- return naturalWidth;
20259
- }
20260
- const tracking = resolveMetricTrackingPx(text3, font);
20261
- return tracking === 0 ? naturalWidth : naturalWidth + tracking * [...text3].length;
20262
- }
20263
- function resetMetricTrackingCache() {
20264
- trackingCache = /* @__PURE__ */ new Map();
20265
- measureContext2 = void 0;
20266
- }
20267
-
20268
- // src/pptx/render/text-outline-dash.ts
20269
- var DASH_PATTERNS = {
20270
- dot: [1, 3],
20271
- sysDot: [1, 1],
20272
- dash: [4, 3],
20273
- sysDash: [3, 1],
20274
- lgDash: [8, 3],
20275
- dashDot: [4, 3, 1, 3],
20276
- sysDashDot: [3, 1, 1, 1],
20277
- lgDashDot: [8, 3, 1, 3],
20278
- lgDashDotDot: [8, 3, 1, 3, 1, 3],
20279
- sysDashDotDot: [3, 1, 1, 1, 1, 1]
20280
- };
20281
- function dashStripe(pattern, widthPx, color) {
20282
- const stops = [];
20283
- let at = 0;
20284
- pattern.forEach((len, i) => {
20285
- const end = at + len * widthPx;
20286
- const paint = i % 2 === 0 ? color : "transparent";
20287
- stops.push(`${paint} ${round2(at)}px ${round2(end)}px`);
20288
- at = end;
20289
- });
20290
- return `repeating-linear-gradient(45deg, ${stops.join(", ")})`;
20291
- }
20292
- function round2(v) {
20293
- return Math.round(v * 100) / 100;
20294
- }
20295
- function resolveTextOutlineDashCss(s, fillColor) {
20296
- const width = s.textOutlineWidth;
20297
- const pattern = s.textOutlineDash ? DASH_PATTERNS[s.textOutlineDash] : void 0;
20298
- if (!width || width <= 0 || !pattern) {
20299
- return void 0;
20300
- }
20301
- if (s.textFillGradient || s.textFillPattern || s.textFillBlipUrl || s.highlightColor) {
20302
- return void 0;
20303
- }
20304
- const strokeColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20305
- return {
20306
- WebkitTextStroke: `${width}px transparent`,
20307
- WebkitTextFillColor: s.textFillNone ? "transparent" : fillColor ?? "currentColor",
20308
- background: dashStripe(pattern, width, strokeColor),
20309
- backgroundClip: "text",
20310
- WebkitBackgroundClip: "text"
20311
- };
20312
- }
20313
-
20314
- // src/pptx/render/text-run-hollow.ts
20315
- function hollowTextFillStyle(s, painted = {}) {
20316
- if (!s.textFillNone) {
20317
- return void 0;
20318
- }
20319
- const hollow = {
20320
- color: "transparent",
20321
- WebkitTextFillColor: "transparent"
20322
- };
20323
- if (painted.textStroke !== void 0 && !s.textOutlineColor) {
20324
- hollow.WebkitTextStroke = `${s.textOutlineWidth}px ${painted.color ?? "currentColor"}`;
20325
- }
20326
- return hollow;
20327
- }
20328
-
20329
20184
  // src/pptx/render/text-decoration.ts
20330
20185
  var HEAVY_PX = "2px";
20331
20186
  var EMU_PER_PX2 = 9525;
@@ -20469,6 +20324,131 @@ function splitWordsForUnderline(text3) {
20469
20324
  return pieces;
20470
20325
  }
20471
20326
 
20327
+ // src/pptx/render/text-metric-tracking.ts
20328
+ var ADVANCE_STEPS_PER_PX = 6;
20329
+ var MAX_TRACKING_PX_PER_CHAR = 1 / (2 * ADVANCE_STEPS_PER_PX);
20330
+ var MAX_CACHE_ENTRIES = 2e4;
20331
+ var measureContext2;
20332
+ var trackingCache = /* @__PURE__ */ new Map();
20333
+ var fontsHookInstalled = false;
20334
+ function installFontLoadHook() {
20335
+ if (fontsHookInstalled || typeof document === "undefined") {
20336
+ return;
20337
+ }
20338
+ fontsHookInstalled = true;
20339
+ document.fonts?.addEventListener?.("loadingdone", () => {
20340
+ trackingCache = /* @__PURE__ */ new Map();
20341
+ });
20342
+ }
20343
+ function getMeasureContext() {
20344
+ if (measureContext2 !== void 0) {
20345
+ return measureContext2;
20346
+ }
20347
+ if (typeof document === "undefined") {
20348
+ measureContext2 = null;
20349
+ return null;
20350
+ }
20351
+ installFontLoadHook();
20352
+ measureContext2 = document.createElement("canvas").getContext("2d");
20353
+ return measureContext2;
20354
+ }
20355
+ 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;
20358
+ return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family2}`;
20359
+ }
20360
+ function advancesOf(ctx, canvasFont, chars) {
20361
+ ctx.font = canvasFont;
20362
+ ctx.fontKerning = "none";
20363
+ const advances = [];
20364
+ let previous = 0;
20365
+ let prefix = "";
20366
+ for (const char of chars) {
20367
+ prefix += char;
20368
+ const width = ctx.measureText(prefix).width;
20369
+ advances.push(width - previous);
20370
+ previous = width;
20371
+ }
20372
+ return advances;
20373
+ }
20374
+ function resolveMetricTrackingPx(text3, font) {
20375
+ if (!text3) {
20376
+ return 0;
20377
+ }
20378
+ const canvasFont = toCanvasFont2(font);
20379
+ const key = `${canvasFont}\0${text3}`;
20380
+ const cached = trackingCache.get(key);
20381
+ if (cached !== void 0) {
20382
+ return cached;
20383
+ }
20384
+ const ctx = getMeasureContext();
20385
+ if (!ctx) {
20386
+ return 0;
20387
+ }
20388
+ const chars = [...text3];
20389
+ let powerPoint = 0;
20390
+ for (const advance of advancesOf(ctx, canvasFont, chars)) {
20391
+ powerPoint += Math.round(advance * ADVANCE_STEPS_PER_PX);
20392
+ }
20393
+ ctx.fontKerning = "auto";
20394
+ const natural = ctx.measureText(text3).width;
20395
+ if (!(natural > 0)) {
20396
+ return 0;
20397
+ }
20398
+ powerPoint /= ADVANCE_STEPS_PER_PX;
20399
+ const limit = MAX_TRACKING_PX_PER_CHAR;
20400
+ const raw = (powerPoint - natural) / chars.length;
20401
+ const tracking = Math.min(limit, Math.max(-limit, raw));
20402
+ if (trackingCache.size >= MAX_CACHE_ENTRIES) {
20403
+ trackingCache = /* @__PURE__ */ new Map();
20404
+ }
20405
+ trackingCache.set(key, tracking);
20406
+ return tracking;
20407
+ }
20408
+ function isBreakBoundary(previous, next) {
20409
+ const previousSpace = /\s/u.test(previous);
20410
+ const nextSpace = /\s/u.test(next);
20411
+ if (previousSpace !== nextSpace) {
20412
+ return true;
20413
+ }
20414
+ return previous === "-" && next !== "-" && !nextSpace;
20415
+ }
20416
+ function splitRunForMetrics(text3, font) {
20417
+ const chars = [...text3];
20418
+ if (chars.length < 2 || !getMeasureContext()) {
20419
+ return [{ text: text3, tracking: resolveMetricTrackingPx(text3, font) }];
20420
+ }
20421
+ const pieces = [];
20422
+ let current = chars[0];
20423
+ for (let i = 1; i < chars.length; i++) {
20424
+ if (isBreakBoundary(chars[i - 1], chars[i])) {
20425
+ pieces.push(current);
20426
+ current = "";
20427
+ }
20428
+ current += chars[i];
20429
+ }
20430
+ pieces.push(current);
20431
+ if (pieces.length === 1) {
20432
+ return [{ text: text3, tracking: resolveMetricTrackingPx(text3, font) }];
20433
+ }
20434
+ return pieces.map((piece) => ({ text: piece, tracking: resolveMetricTrackingPx(piece, font) }));
20435
+ }
20436
+ function resolveMetricTracking(text3, font) {
20437
+ const tracking = resolveMetricTrackingPx(text3, font);
20438
+ return tracking === 0 ? void 0 : `${tracking}px`;
20439
+ }
20440
+ function resolveTrackedTextWidth(text3, font, naturalWidth) {
20441
+ if (!text3) {
20442
+ return naturalWidth;
20443
+ }
20444
+ const tracking = resolveMetricTrackingPx(text3, font);
20445
+ return tracking === 0 ? naturalWidth : naturalWidth + tracking * [...text3].length;
20446
+ }
20447
+ function resetMetricTrackingCache() {
20448
+ trackingCache = /* @__PURE__ */ new Map();
20449
+ measureContext2 = void 0;
20450
+ }
20451
+
20472
20452
  // src/pptx/render/text-run-spacing.ts
20473
20453
  var PX_PER_POINT = 96 / 72;
20474
20454
  function authoredLetterSpacingPx(style) {
@@ -20531,6 +20511,67 @@ function splitStyledRun(text3, style, font, authoredPx, underlineWords = false)
20531
20511
  return out.length > 0 ? out : [{ text: text3, style }];
20532
20512
  }
20533
20513
 
20514
+ // src/pptx/render/text-outline-dash.ts
20515
+ var DASH_PATTERNS = {
20516
+ dot: [1, 3],
20517
+ sysDot: [1, 1],
20518
+ dash: [4, 3],
20519
+ sysDash: [3, 1],
20520
+ lgDash: [8, 3],
20521
+ dashDot: [4, 3, 1, 3],
20522
+ sysDashDot: [3, 1, 1, 1],
20523
+ lgDashDot: [8, 3, 1, 3],
20524
+ lgDashDotDot: [8, 3, 1, 3, 1, 3],
20525
+ sysDashDotDot: [3, 1, 1, 1, 1, 1]
20526
+ };
20527
+ function dashStripe(pattern, widthPx, color) {
20528
+ const stops = [];
20529
+ let at = 0;
20530
+ pattern.forEach((len, i) => {
20531
+ const end = at + len * widthPx;
20532
+ const paint = i % 2 === 0 ? color : "transparent";
20533
+ stops.push(`${paint} ${round2(at)}px ${round2(end)}px`);
20534
+ at = end;
20535
+ });
20536
+ return `repeating-linear-gradient(45deg, ${stops.join(", ")})`;
20537
+ }
20538
+ function round2(v) {
20539
+ return Math.round(v * 100) / 100;
20540
+ }
20541
+ function resolveTextOutlineDashCss(s, fillColor) {
20542
+ const width = s.textOutlineWidth;
20543
+ const pattern = s.textOutlineDash ? DASH_PATTERNS[s.textOutlineDash] : void 0;
20544
+ if (!width || width <= 0 || !pattern) {
20545
+ return void 0;
20546
+ }
20547
+ if (s.textFillGradient || s.textFillPattern || s.textFillBlipUrl || s.highlightColor) {
20548
+ return void 0;
20549
+ }
20550
+ const strokeColor = chunkIURZJAWP_cjs.normalizeHexColor(s.textOutlineColor, fillColor ?? "#000000");
20551
+ return {
20552
+ WebkitTextStroke: `${width}px transparent`,
20553
+ WebkitTextFillColor: s.textFillNone ? "transparent" : fillColor ?? "currentColor",
20554
+ background: dashStripe(pattern, width, strokeColor),
20555
+ backgroundClip: "text",
20556
+ WebkitBackgroundClip: "text"
20557
+ };
20558
+ }
20559
+
20560
+ // src/pptx/render/text-run-hollow.ts
20561
+ function hollowTextFillStyle(s, painted = {}) {
20562
+ if (!s.textFillNone) {
20563
+ return void 0;
20564
+ }
20565
+ const hollow = {
20566
+ color: "transparent",
20567
+ WebkitTextFillColor: "transparent"
20568
+ };
20569
+ if (painted.textStroke !== void 0 && !s.textOutlineColor) {
20570
+ hollow.WebkitTextStroke = `${s.textOutlineWidth}px ${painted.color ?? "currentColor"}`;
20571
+ }
20572
+ return hollow;
20573
+ }
20574
+
20534
20575
  // src/pptx/render/text-line-height.ts
20535
20576
  var DEFAULT_LINE_HEIGHT = 1.2;
20536
20577
  function resolveLineHeight(textStyle, hasItalicRuns2) {
@@ -20670,13 +20711,13 @@ function applyExtraRunProps(style, s, text3, font) {
20670
20711
  style.fontKerning = fontKerning;
20671
20712
  }
20672
20713
  if (s.highlightColor) {
20673
- style.backgroundColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.highlightColor, "transparent");
20714
+ style.backgroundColor = chunkIURZJAWP_cjs.normalizeHexColor(s.highlightColor, "transparent");
20674
20715
  }
20675
20716
  if (s.underlineColor) {
20676
- style.textDecorationColor = chunkAIL3BNZS_cjs.normalizeHexColor(s.underlineColor);
20717
+ style.textDecorationColor = chunkIURZJAWP_cjs.normalizeHexColor(s.underlineColor);
20677
20718
  }
20678
20719
  if (s.textOutlineWidth) {
20679
- style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkAIL3BNZS_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20720
+ style.WebkitTextStroke = s.textOutlineColor ? `${s.textOutlineWidth}px ${chunkIURZJAWP_cjs.normalizeHexColor(s.textOutlineColor, "#000000")}` : `${s.textOutlineWidth}px currentColor`;
20680
20721
  style.paintOrder = "stroke fill";
20681
20722
  }
20682
20723
  if (s.textCaps === "all") {
@@ -20717,7 +20758,7 @@ function segmentStyleToCss(seg, fontScale = 1, context = {}) {
20717
20758
  if (s.color) {
20718
20759
  style.color = s.color;
20719
20760
  } else if (s.hyperlink) {
20720
- style.color = chunkAIL3BNZS_cjs.HYPERLINK_COLOR;
20761
+ style.color = chunkIURZJAWP_cjs.HYPERLINK_COLOR;
20721
20762
  }
20722
20763
  style.fontWeight = s.bold ? "bold" : "normal";
20723
20764
  style.fontStyle = s.italic ? "italic" : "normal";
@@ -20786,6 +20827,10 @@ function cellRunStyle(run) {
20786
20827
  if (deco.length > 0) {
20787
20828
  css.textDecoration = deco.join(" ");
20788
20829
  }
20830
+ const letterSpacingPx = authoredLetterSpacingPx(run);
20831
+ if (letterSpacingPx !== 0) {
20832
+ css.letterSpacing = `${letterSpacingPx}px`;
20833
+ }
20789
20834
  if (isKoreanLanguage(run.language)) {
20790
20835
  css.wordBreak = "keep-all";
20791
20836
  }
@@ -20795,9 +20840,9 @@ function cellPatternFillCss(style) {
20795
20840
  if (style.fillMode !== "pattern" || !style.patternFillPreset) {
20796
20841
  return null;
20797
20842
  }
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);
20843
+ const fg = chunkIURZJAWP_cjs.normalizeHexColor(style.patternFillForeground, "#000000");
20844
+ const bg = chunkIURZJAWP_cjs.normalizeHexColor(style.patternFillBackground, "#ffffff");
20845
+ const svgMarkup = chunkIURZJAWP_cjs.getPatternSvg(style.patternFillPreset, fg, bg);
20801
20846
  if (svgMarkup) {
20802
20847
  const encoded = encodeURIComponent(svgMarkup);
20803
20848
  return {
@@ -20961,7 +21006,7 @@ function cellStyleToCss(style) {
20961
21006
  const w = edge.width ?? 1;
20962
21007
  const c = edge.color ?? style.borderColor ?? "#000000";
20963
21008
  const s = ooxmlDashToCssBorderStyle(edge.dash);
20964
- css[edge.prefix] = `${w}px ${s} ${c}`;
21009
+ css[edge.prefix] = chunkKRMMJUCO_cjs.screenBorder(w, s, c);
20965
21010
  }
20966
21011
  }
20967
21012
  Object.assign(css, cellPaddingCss(style));
@@ -21183,11 +21228,186 @@ function tableCellCss(tableData, cell, position, context, base2) {
21183
21228
  );
21184
21229
  const css = { ...base2, ...band, ...cellStyleToCss(cell?.style) };
21185
21230
  if (css.color === void 0) {
21186
- css.color = chunkAIL3BNZS_cjs.DEFAULT_TEXT_COLOR;
21231
+ css.color = chunkIURZJAWP_cjs.DEFAULT_TEXT_COLOR;
21187
21232
  }
21188
21233
  return { ...TABLE_CELL_TEXT_DEFAULTS, ...css };
21189
21234
  }
21190
21235
 
21236
+ // src/pptx/render/paragraph-spacing.ts
21237
+ var PT_TO_PX = 96 / 72;
21238
+ function resolveParagraphSpacing(input) {
21239
+ const {
21240
+ paraProps,
21241
+ bodyStyle,
21242
+ isFirst = false,
21243
+ isLast = false,
21244
+ spaceFirstLast = false,
21245
+ lineSpacingReduction
21246
+ } = input;
21247
+ const out = {};
21248
+ const before = paraProps?.paragraphSpacingBefore ?? bodyStyle?.paragraphSpacingBefore;
21249
+ const effectiveBefore = typeof before === "number" && before > 0 && (!isFirst || spaceFirstLast) ? before : 0;
21250
+ const after = paraProps?.paragraphSpacingAfter ?? bodyStyle?.paragraphSpacingAfter;
21251
+ const effectiveAfter = typeof after === "number" && after > 0 && (!isLast || spaceFirstLast) ? after : 0;
21252
+ const combinedAfter = effectiveBefore + effectiveAfter;
21253
+ if (combinedAfter > 0) {
21254
+ out.spaceAfterPx = combinedAfter;
21255
+ }
21256
+ const hasOwnLineSpacing = paraProps?.lineSpacing !== void 0 || paraProps?.lineSpacingExactPt !== void 0;
21257
+ const lineSource = hasOwnLineSpacing ? paraProps : bodyStyle;
21258
+ const exactPt = lineSource?.lineSpacingExactPt;
21259
+ const multiplier = lineSource?.lineSpacing;
21260
+ if (typeof exactPt === "number" && exactPt > 0) {
21261
+ out.lineHeight = `${exactPt * PT_TO_PX}px`;
21262
+ } else if (typeof multiplier === "number" && multiplier > 0) {
21263
+ const proportional = proportionalLineHeight(multiplier, bodyStyle?.compatibleLineSpacing);
21264
+ out.lineHeight = typeof lineSpacingReduction === "number" && lineSpacingReduction > 0 ? proportional * (1 - lineSpacingReduction) : proportional;
21265
+ }
21266
+ return out;
21267
+ }
21268
+
21269
+ // src/pptx/render/text-paragraph-style.ts
21270
+ function resolveParagraphRtl(paraSegments, elementRtl) {
21271
+ for (const entry5 of paraSegments) {
21272
+ const paraRtl = entry5.segment.paragraphProperties?.rtl;
21273
+ if (paraRtl !== void 0) {
21274
+ return paraRtl;
21275
+ }
21276
+ }
21277
+ for (const entry5 of paraSegments) {
21278
+ const segRtl = entry5.segment.style?.rtl;
21279
+ if (segRtl !== void 0) {
21280
+ return segRtl;
21281
+ }
21282
+ }
21283
+ return elementRtl;
21284
+ }
21285
+ function resolveParagraphAlign(paraSegments, elementAlign) {
21286
+ for (const entry5 of paraSegments) {
21287
+ const segAlign = entry5.segment.style?.align;
21288
+ if (segAlign !== void 0) {
21289
+ return segAlign;
21290
+ }
21291
+ }
21292
+ return elementAlign;
21293
+ }
21294
+ function resolveCssTextAlign(align, isRtl) {
21295
+ if (align === "justLow" || align === "dist" || align === "thaiDist") {
21296
+ return "justify";
21297
+ }
21298
+ if (align) {
21299
+ return align;
21300
+ }
21301
+ return isRtl ? "right" : void 0;
21302
+ }
21303
+ function resolveTextAlignLast(align) {
21304
+ return align === "dist" ? "justify" : void 0;
21305
+ }
21306
+
21307
+ // src/pptx/render/table-cell-paragraphs.ts
21308
+ var BLANK_LINE = { text: "", isLineBreak: true };
21309
+ function groupRuns(runs) {
21310
+ const groups = [[]];
21311
+ for (const run of runs) {
21312
+ if (run.isParagraphBreak) {
21313
+ groups.push([]);
21314
+ } else {
21315
+ groups[groups.length - 1].push(run);
21316
+ }
21317
+ }
21318
+ return groups;
21319
+ }
21320
+ function strutFontSizePt(runs) {
21321
+ let smallest;
21322
+ for (const run of runs) {
21323
+ if (!run.text) {
21324
+ continue;
21325
+ }
21326
+ if (typeof run.fontSize !== "number" || run.fontSize <= 0) {
21327
+ return void 0;
21328
+ }
21329
+ smallest = smallest === void 0 ? run.fontSize : Math.min(smallest, run.fontSize);
21330
+ }
21331
+ return smallest;
21332
+ }
21333
+ function paragraphLayoutCss(paragraph2, followsCell, isFirst, isLast) {
21334
+ const css = {};
21335
+ const rtl = paragraph2?.rtl === true;
21336
+ if (!followsCell) {
21337
+ css.textAlign = resolveCssTextAlign(paragraph2?.align, rtl) ?? "start";
21338
+ const textAlignLast = resolveTextAlignLast(paragraph2?.align);
21339
+ if (textAlignLast !== void 0) {
21340
+ css.textAlignLast = textAlignLast;
21341
+ }
21342
+ }
21343
+ if (paragraph2?.rtl !== void 0) {
21344
+ css.direction = rtl ? "rtl" : "ltr";
21345
+ css.unicodeBidi = "embed";
21346
+ }
21347
+ const indent = bulletList.resolveParagraphIndent(
21348
+ { marginLeft: paragraph2?.paragraphMarginLeft, indent: paragraph2?.paragraphIndent },
21349
+ void 0
21350
+ );
21351
+ if (indent.marginLeftPx !== void 0) {
21352
+ css.marginInlineStart = `${indent.marginLeftPx}px`;
21353
+ }
21354
+ if (indent.textIndentPx !== void 0 && (indent.textIndentPx > 0 || indent.marginLeftPx !== void 0)) {
21355
+ css.textIndent = `${indent.textIndentPx}px`;
21356
+ }
21357
+ const spacing = resolveParagraphSpacing({ paraProps: paragraph2, isFirst, isLast });
21358
+ if (spacing.lineHeight !== void 0) {
21359
+ css.lineHeight = spacing.lineHeight;
21360
+ }
21361
+ if (spacing.spaceAfterPx !== void 0) {
21362
+ css.marginBlockEnd = `${spacing.spaceAfterPx}px`;
21363
+ }
21364
+ return css;
21365
+ }
21366
+ function alignOf(paragraph2) {
21367
+ return paragraph2?.align ?? "left";
21368
+ }
21369
+ function followsCellAlign(cell, paragraph2, first) {
21370
+ return alignOf(paragraph2) === alignOf(first) && (paragraph2?.rtl !== true || cell.style?.align !== void 0);
21371
+ }
21372
+ function needsBlocks(paragraphs2, follows, layouts) {
21373
+ return follows.some(
21374
+ (followsCell, index) => !followsCell || paragraphs2[index]?.rtl === true || layouts[index].marginInlineStart !== void 0 || layouts[index].textIndent !== void 0 || layouts[index].marginBlockEnd !== void 0 || layouts[index].lineHeight !== void 0 && layouts[index].lineHeight !== DEFAULT_LINE_HEIGHT
21375
+ );
21376
+ }
21377
+ function cellParagraphBlocks(cell) {
21378
+ const { paragraphs: paragraphs2 } = cell;
21379
+ if (!paragraphs2 || paragraphs2.length === 0) {
21380
+ return void 0;
21381
+ }
21382
+ const runs = cell.textRuns && cell.textRuns.length > 0 ? cell.textRuns : [{ text: cell.text }];
21383
+ const groups = groupRuns(runs);
21384
+ const follows = groups.map(
21385
+ (_, index) => followsCellAlign(cell, paragraphs2[index], paragraphs2[0])
21386
+ );
21387
+ const layouts = groups.map(
21388
+ (_, index) => paragraphLayoutCss(paragraphs2[index], follows[index], index === 0, index === groups.length - 1)
21389
+ );
21390
+ if (!needsBlocks(paragraphs2, follows, layouts)) {
21391
+ return void 0;
21392
+ }
21393
+ return groups.map((group, index) => {
21394
+ const css = layouts[index];
21395
+ const hasContent = group.some((run) => run.text !== "" || run.isLineBreak);
21396
+ if (!hasContent) {
21397
+ const endPt = paragraphs2[index]?.endParaFontSize;
21398
+ if (endPt !== void 0) {
21399
+ css.fontSize = `${endPt}pt`;
21400
+ }
21401
+ return { css, runs: [BLANK_LINE] };
21402
+ }
21403
+ const strutPt = strutFontSizePt(group);
21404
+ if (strutPt !== void 0) {
21405
+ css.fontSize = `${strutPt}pt`;
21406
+ }
21407
+ return { css, runs: group };
21408
+ });
21409
+ }
21410
+
21191
21411
  // src/pptx/render/table-cell-pointer.ts
21192
21412
  function tableCellPointerIntent(input) {
21193
21413
  if (!input.isTableCell) {
@@ -21334,7 +21554,7 @@ var GRADIENT_TYPE_OPTIONS = [
21334
21554
  { value: "linear", i18nKey: "pptx.table.gradientLinear" },
21335
21555
  { value: "radial", i18nKey: "pptx.table.gradientRadial" }
21336
21556
  ];
21337
- var PATTERN_OPTIONS = chunkAIL3BNZS_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21557
+ var PATTERN_OPTIONS = chunkIURZJAWP_cjs.OOXML_PATTERN_PRESETS.slice(0, 20);
21338
21558
 
21339
21559
  // src/pptx/render/table-resize.ts
21340
21560
  var MIN_COLUMN_PROPORTION = 0.03;
@@ -22078,10 +22298,10 @@ function imageFitTransformParts(el) {
22078
22298
  return { placement: "", crop: "" };
22079
22299
  }
22080
22300
  return fitTransformsFromInsets({
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),
22301
+ cropLeft: chunkIURZJAWP_cjs.clampCropValue(el.cropLeft),
22302
+ cropTop: chunkIURZJAWP_cjs.clampCropValue(el.cropTop),
22303
+ cropRight: chunkIURZJAWP_cjs.clampCropValue(el.cropRight),
22304
+ cropBottom: chunkIURZJAWP_cjs.clampCropValue(el.cropBottom),
22085
22305
  fillRectLeft: el.fillRectLeft ?? 0,
22086
22306
  fillRectTop: el.fillRectTop ?? 0,
22087
22307
  fillRectRight: el.fillRectRight ?? 0,
@@ -22105,10 +22325,10 @@ function fitTransformsFromInsets(insets) {
22105
22325
  if (hasCrop2) {
22106
22326
  const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
22107
22327
  const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
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);
22328
+ cropLeft = chunkIURZJAWP_cjs.clampCropValue(cropLeft * horizontalScale);
22329
+ cropRight = chunkIURZJAWP_cjs.clampCropValue(cropRight * horizontalScale);
22330
+ cropTop = chunkIURZJAWP_cjs.clampCropValue(cropTop * verticalScale);
22331
+ cropBottom = chunkIURZJAWP_cjs.clampCropValue(cropBottom * verticalScale);
22112
22332
  const remainingWidth = Math.max(0.01, 1 - cropLeft - cropRight);
22113
22333
  const remainingHeight = Math.max(0.01, 1 - cropTop - cropBottom);
22114
22334
  const tx = Math.round(-cropLeft / remainingWidth * 1e4) / 100;
@@ -22223,7 +22443,7 @@ function resolveShadeToTitleBackgroundImage(slide, slideWidthPx, slideHeightPx)
22223
22443
  if (stops.length === 0) {
22224
22444
  return void 0;
22225
22445
  }
22226
- return chunkAIL3BNZS_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22446
+ return chunkIURZJAWP_cjs.buildRectPathGradientImage(stops, void 0, fillToRect);
22227
22447
  }
22228
22448
 
22229
22449
  // src/pptx/render/slide-background.ts
@@ -22245,7 +22465,7 @@ function getSlideBackgroundStyle(slide, slideSize) {
22245
22465
  style["background-repeat"] = "no-repeat";
22246
22466
  }
22247
22467
  } else if (pattern) {
22248
- const svg2 = chunkAIL3BNZS_cjs.getPatternSvg(
22468
+ const svg2 = chunkIURZJAWP_cjs.getPatternSvg(
22249
22469
  pattern.preset,
22250
22470
  pattern.fgColor ?? solid ?? "#000000",
22251
22471
  pattern.bgColor ?? DEFAULT_SLIDE_BACKGROUND
@@ -23653,12 +23873,12 @@ function buildRunTabLines(text3, ctx, nestedDecoration, measure2 = (t) => measur
23653
23873
  // src/pptx/render/paragraph-run-enrich.ts
23654
23874
  function resolveRunExtrasContext(input) {
23655
23875
  const { seg, runFont, blockFont, blockScriptStyle, tabStops, defaultTabSize, rtl } = input;
23656
- const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY;
23876
+ const baseFontFamily = runFont.fontFamily ?? blockFont.fontFamily ?? chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
23657
23877
  const scriptFonts = resolveScriptFontSet(seg.style, blockScriptStyle, baseFontFamily);
23658
23878
  const tabContext = tabStops && tabStops.length > 0 ? buildTabContext(
23659
23879
  tabStops,
23660
23880
  defaultTabSize,
23661
- runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE,
23881
+ runFont.fontSizePx ?? blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE,
23662
23882
  baseFontFamily,
23663
23883
  Boolean(seg.style?.bold),
23664
23884
  Boolean(seg.style?.italic),
@@ -23690,7 +23910,7 @@ function resolveRunReflection(segStyle, blockFont) {
23690
23910
  if (!segStyle) {
23691
23911
  return void 0;
23692
23912
  }
23693
- const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
23913
+ const height = typeof segStyle.fontSize === "number" ? segStyle.fontSize : blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
23694
23914
  return getTextReflectionWrapperStyle(segStyle, height);
23695
23915
  }
23696
23916
  function applyRunReflection(run, reflection2) {
@@ -23852,7 +24072,7 @@ function buildTextShadowCss(style) {
23852
24072
  const ox = style.textShadowOffsetX ?? 0;
23853
24073
  const oy = style.textShadowOffsetY ?? 0;
23854
24074
  const blur = style.textShadowBlur ?? 4;
23855
- const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textShadowColor, "#000000");
24075
+ const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textShadowColor, "#000000");
23856
24076
  const opacity = style.textShadowOpacity ?? 0.5;
23857
24077
  const r = parseInt(color.slice(1, 3), 16);
23858
24078
  const g = parseInt(color.slice(3, 5), 16);
@@ -23865,7 +24085,7 @@ function buildTextShadowCss(style) {
23865
24085
  const dirRad = dir * Math.PI / 180;
23866
24086
  const psOx = Math.round(Math.cos(dirRad) * dist2 * 100) / 100;
23867
24087
  const psOy = Math.round(Math.sin(dirRad) * dist2 * 100) / 100;
23868
- const psColor = chunkAIL3BNZS_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
24088
+ const psColor = chunkIURZJAWP_cjs.normalizeHexColor(style.textPresetShadowColor, "#000000");
23869
24089
  const psOpacity = style.textPresetShadowOpacity ?? 0.5;
23870
24090
  const psR = parseInt(psColor.slice(1, 3), 16);
23871
24091
  const psG = parseInt(psColor.slice(3, 5), 16);
@@ -23882,7 +24102,7 @@ function buildTextInnerShadowCss(style) {
23882
24102
  const ox = style.textInnerShadowOffsetX ?? 0;
23883
24103
  const oy = style.textInnerShadowOffsetY ?? 0;
23884
24104
  const blur = style.textInnerShadowBlur ?? 3;
23885
- const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
24105
+ const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textInnerShadowColor, "#000000");
23886
24106
  const opacity = style.textInnerShadowOpacity ?? 0.5;
23887
24107
  const r = parseInt(color.slice(1, 3), 16);
23888
24108
  const g = parseInt(color.slice(3, 5), 16);
@@ -23929,7 +24149,7 @@ function buildTextGlowFilter(style) {
23929
24149
  return void 0;
23930
24150
  }
23931
24151
  const radius = style.textGlowRadius ?? 6;
23932
- const color = chunkAIL3BNZS_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
24152
+ const color = chunkIURZJAWP_cjs.normalizeHexColor(style.textGlowColor, "#ffff00");
23933
24153
  const opacity = style.textGlowOpacity ?? 0.6;
23934
24154
  const r = parseInt(color.slice(1, 3), 16);
23935
24155
  const g = parseInt(color.slice(3, 5), 16);
@@ -23957,9 +24177,9 @@ function buildTextFillCss(style) {
23957
24177
  };
23958
24178
  }
23959
24179
  if (style.textFillPattern) {
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);
24180
+ const fg = chunkIURZJAWP_cjs.normalizeHexColor(style.textFillPatternForeground, "#000000");
24181
+ const bg = chunkIURZJAWP_cjs.normalizeHexColor(style.textFillPatternBackground, "#ffffff");
24182
+ const svgPattern = chunkIURZJAWP_cjs.getPatternSvg(style.textFillPattern, fg, bg);
23963
24183
  if (svgPattern) {
23964
24184
  const encoded = encodeURIComponent(svgPattern);
23965
24185
  return {
@@ -24104,15 +24324,15 @@ function resolveRunRuby(segment, baseFontSizePx, blockFont, baseColor) {
24104
24324
  return void 0;
24105
24325
  }
24106
24326
  const authoredFamily = segment.rubyStyle?.fontFamily ?? segment.style?.fontFamily;
24107
- const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
24327
+ const baseSize = Number.isFinite(baseFontSizePx) ? baseFontSizePx : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
24108
24328
  const style = {
24109
24329
  fontSize: `${segment.rubyFontSize ?? baseSize * RUBY_SIZE_RATIO}px`,
24110
- fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkAIL3BNZS_cjs.DEFAULT_FONT_FAMILY,
24330
+ fontFamily: authoredFamily ? pptx.getSubstituteFontFamily(authoredFamily) : blockFont.fontFamily ?? chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY,
24111
24331
  textAlign: rubyTextAlign(segment.rubyAlignment)
24112
24332
  };
24113
24333
  const color = segment.rubyStyle?.color;
24114
24334
  if (color) {
24115
- style.color = chunkAIL3BNZS_cjs.normalizeHexColor(color, baseColor);
24335
+ style.color = chunkIURZJAWP_cjs.normalizeHexColor(color, baseColor);
24116
24336
  }
24117
24337
  return { text: text3, style };
24118
24338
  }
@@ -24184,7 +24404,7 @@ function buildParagraphRuns(input) {
24184
24404
  bodyFontSizeRaw,
24185
24405
  fontScale
24186
24406
  );
24187
- const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
24407
+ const fallbackFontSize = strutFontSize ?? blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
24188
24408
  equationStyle.fontSize = `${fallbackFontSize}px`;
24189
24409
  }
24190
24410
  runs.push({
@@ -24221,7 +24441,7 @@ function buildParagraphRuns(input) {
24221
24441
  });
24222
24442
  const ruby = resolveRunRuby(
24223
24443
  seg,
24224
- typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE,
24444
+ typeof seg.style?.fontSize === "number" ? seg.style.fontSize : blockFont.fontSizePx ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE,
24225
24445
  blockFont,
24226
24446
  typeof style.color === "string" ? style.color : void 0
24227
24447
  );
@@ -24272,39 +24492,6 @@ function buildParagraphRuns(input) {
24272
24492
  return runs;
24273
24493
  }
24274
24494
 
24275
- // src/pptx/render/paragraph-spacing.ts
24276
- var PT_TO_PX = 96 / 72;
24277
- function resolveParagraphSpacing(input) {
24278
- const {
24279
- paraProps,
24280
- bodyStyle,
24281
- isFirst = false,
24282
- isLast = false,
24283
- spaceFirstLast = false,
24284
- lineSpacingReduction
24285
- } = input;
24286
- const out = {};
24287
- const before = paraProps?.paragraphSpacingBefore ?? bodyStyle?.paragraphSpacingBefore;
24288
- const effectiveBefore = typeof before === "number" && before > 0 && (!isFirst || spaceFirstLast) ? before : 0;
24289
- const after = paraProps?.paragraphSpacingAfter ?? bodyStyle?.paragraphSpacingAfter;
24290
- const effectiveAfter = typeof after === "number" && after > 0 && (!isLast || spaceFirstLast) ? after : 0;
24291
- const combinedAfter = effectiveBefore + effectiveAfter;
24292
- if (combinedAfter > 0) {
24293
- out.spaceAfterPx = combinedAfter;
24294
- }
24295
- const hasOwnLineSpacing = paraProps?.lineSpacing !== void 0 || paraProps?.lineSpacingExactPt !== void 0;
24296
- const lineSource = hasOwnLineSpacing ? paraProps : bodyStyle;
24297
- const exactPt = lineSource?.lineSpacingExactPt;
24298
- const multiplier = lineSource?.lineSpacing;
24299
- if (typeof exactPt === "number" && exactPt > 0) {
24300
- out.lineHeight = `${exactPt * PT_TO_PX}px`;
24301
- } else if (typeof multiplier === "number" && multiplier > 0) {
24302
- const proportional = proportionalLineHeight(multiplier, bodyStyle?.compatibleLineSpacing);
24303
- out.lineHeight = typeof lineSpacingReduction === "number" && lineSpacingReduction > 0 ? proportional * (1 - lineSpacingReduction) : proportional;
24304
- }
24305
- return out;
24306
- }
24307
-
24308
24495
  // src/pptx/render/paragraph-trailing-space.ts
24309
24496
  function alignsTrailingEdge(cssAlign, rtl) {
24310
24497
  if (cssAlign === "center" || cssAlign === "justify") {
@@ -24337,44 +24524,6 @@ function trimParagraphTrailingSpaces(runs, cssAlign, rtl) {
24337
24524
  return changed ? out : runs;
24338
24525
  }
24339
24526
 
24340
- // src/pptx/render/text-paragraph-style.ts
24341
- function resolveParagraphRtl(paraSegments, elementRtl) {
24342
- for (const entry5 of paraSegments) {
24343
- const paraRtl = entry5.segment.paragraphProperties?.rtl;
24344
- if (paraRtl !== void 0) {
24345
- return paraRtl;
24346
- }
24347
- }
24348
- for (const entry5 of paraSegments) {
24349
- const segRtl = entry5.segment.style?.rtl;
24350
- if (segRtl !== void 0) {
24351
- return segRtl;
24352
- }
24353
- }
24354
- return elementRtl;
24355
- }
24356
- function resolveParagraphAlign(paraSegments, elementAlign) {
24357
- for (const entry5 of paraSegments) {
24358
- const segAlign = entry5.segment.style?.align;
24359
- if (segAlign !== void 0) {
24360
- return segAlign;
24361
- }
24362
- }
24363
- return elementAlign;
24364
- }
24365
- function resolveCssTextAlign(align, isRtl) {
24366
- if (align === "justLow" || align === "dist" || align === "thaiDist") {
24367
- return "justify";
24368
- }
24369
- if (align) {
24370
- return align;
24371
- }
24372
- return isRtl ? "right" : void 0;
24373
- }
24374
- function resolveTextAlignLast(align) {
24375
- return align === "dist" ? "justify" : void 0;
24376
- }
24377
-
24378
24527
  // src/pptx/render/text-paragraphs.ts
24379
24528
  function buildParagraphs(element, fieldContext, segmentOverrides, options) {
24380
24529
  if (!pptx.hasTextProperties(element)) {
@@ -24386,8 +24535,8 @@ function buildParagraphs(element, fieldContext, segmentOverrides, options) {
24386
24535
  }
24387
24536
  const fontScale = resolveAutoFitFontScale(element.textStyle);
24388
24537
  const blockFont = {
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
24538
+ fontFamily: element.textStyle?.fontFamily ? pptx.getSubstituteFontFamily(element.textStyle.fontFamily) : chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY,
24539
+ fontSizePx: (element.textStyle?.fontSize || chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE) * fontScale
24391
24540
  };
24392
24541
  const blockScriptStyle = element.textStyle;
24393
24542
  const tabStops = element.textStyle?.tabStops;
@@ -27340,17 +27489,17 @@ function hasItalicRuns(element) {
27340
27489
  );
27341
27490
  }
27342
27491
  function buildTextBlockStyle(element, options = {}) {
27343
- const fallbackColor = options.fallbackColor ?? chunkAIL3BNZS_cjs.DEFAULT_TEXT_COLOR;
27492
+ const fallbackColor = options.fallbackColor ?? chunkIURZJAWP_cjs.DEFAULT_TEXT_COLOR;
27344
27493
  if (!pptx.hasTextProperties(element)) {
27345
27494
  return { color: fallbackColor };
27346
27495
  }
27347
27496
  const ts = element.textStyle;
27348
27497
  const italic = hasItalicRuns(element);
27349
27498
  const isRtl = ts?.rtl === true;
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;
27499
+ const bodyTop = ts?.bodyInsetTop ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_TB_PX;
27500
+ const bodyBottom = ts?.bodyInsetBottom ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_TB_PX;
27501
+ const bodyLeft = ts?.bodyInsetLeft ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_LR_PX;
27502
+ const bodyRight = ts?.bodyInsetRight ?? chunkIURZJAWP_cjs.DEFAULT_BODY_INSET_LR_PX;
27354
27503
  const hasParagraphIndents = (element.paragraphIndents?.length ?? 0) > 0;
27355
27504
  const bodyIndent = hasParagraphIndents ? 0 : ts?.paragraphIndent || 0;
27356
27505
  const bodyMarginLeft = hasParagraphIndents ? 0 : ts?.paragraphMarginLeft || 0;
@@ -27379,17 +27528,17 @@ function buildTextBlockStyle(element, options = {}) {
27379
27528
  style.transformOrigin = "center";
27380
27529
  }
27381
27530
  }
27382
- style.color = ts?.hyperlink ? chunkAIL3BNZS_cjs.normalizeHexColor(ts?.color, chunkAIL3BNZS_cjs.HYPERLINK_COLOR) : chunkAIL3BNZS_cjs.normalizeHexColor(ts?.color, fallbackColor);
27531
+ style.color = ts?.hyperlink ? chunkIURZJAWP_cjs.normalizeHexColor(ts?.color, chunkIURZJAWP_cjs.HYPERLINK_COLOR) : chunkIURZJAWP_cjs.normalizeHexColor(ts?.color, fallbackColor);
27383
27532
  if (!hasTextSegments && ts?.highlightColor) {
27384
- style.backgroundColor = chunkAIL3BNZS_cjs.normalizeHexColor(ts.highlightColor, void 0);
27533
+ style.backgroundColor = chunkIURZJAWP_cjs.normalizeHexColor(ts.highlightColor, void 0);
27385
27534
  }
27386
27535
  style.textAlign = resolveCssTextAlign(ts?.align, isRtl) ?? "left";
27387
27536
  style.direction = toCssVerticalDirection(ts?.textDirection) ?? (isRtl ? "rtl" : bodyLayoutStyle?.direction ?? "ltr");
27388
27537
  if (isRtl) {
27389
27538
  style.unicodeBidi = "plaintext";
27390
27539
  }
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;
27540
+ style.fontSize = ts?.fontSize || chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
27541
+ style.fontFamily = ts?.fontFamily ? pptx.getSubstituteFontFamily(ts.fontFamily, pptx.parsePanoseString(ts.latinFontPanose)) : chunkIURZJAWP_cjs.DEFAULT_FONT_FAMILY;
27393
27542
  style.fontWeight = ts?.bold ? 700 : 400;
27394
27543
  style.fontStyle = ts?.italic ? "italic" : "normal";
27395
27544
  style.textDecorationLine = decorations.length > 0 ? decorations.join(" ") : "none";
@@ -27429,7 +27578,7 @@ function buildTextBlockStyle(element, options = {}) {
27429
27578
  text: element.text ?? "",
27430
27579
  width: element.width,
27431
27580
  height: element.height,
27432
- defaultFontSize: chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE
27581
+ defaultFontSize: chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE
27433
27582
  });
27434
27583
  if (autoFit.fontSize !== void 0) {
27435
27584
  style.fontSize = autoFit.fontSize;
@@ -27437,7 +27586,7 @@ function buildTextBlockStyle(element, options = {}) {
27437
27586
  if (autoFit.lineHeight !== void 0) {
27438
27587
  style.lineHeight = autoFit.lineHeight;
27439
27588
  }
27440
- const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkAIL3BNZS_cjs.DEFAULT_TEXT_FONT_SIZE;
27589
+ const fontSizePx = typeof style.fontSize === "number" ? style.fontSize : chunkIURZJAWP_cjs.DEFAULT_TEXT_FONT_SIZE;
27441
27590
  const lineHeightPx = lineHeightToPx(fontSizePx, style.lineHeight);
27442
27591
  const contentHeightPx = element.height - style.paddingTop - style.paddingBottom;
27443
27592
  Object.assign(style, resolveVertOverflowEllipsisStyle(ts, contentHeightPx, lineHeightPx));
@@ -30831,9 +30980,9 @@ function normalizeArrow(a) {
30831
30980
  function buildConnectorGeometry(element, zIndex, routing) {
30832
30981
  const ss = pptx.hasShapeProperties(element) ? element.shapeStyle : void 0;
30833
30982
  const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
30834
- const strokeColor = ss?.strokeColor ?? chunkAIL3BNZS_cjs.DEFAULT_STROKE_COLOR;
30983
+ const strokeColor = ss?.strokeColor ?? chunkIURZJAWP_cjs.DEFAULT_STROKE_COLOR;
30835
30984
  const strokeOpacity = ss?.strokeOpacity ?? 1;
30836
- const dashArray = chunkAIL3BNZS_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
30985
+ const dashArray = chunkIURZJAWP_cjs.buildDashArray(ss?.strokeDash, strokeWidth, ss?.customDashSegments);
30837
30986
  const strokeLinecap = svgLineCap(ss?.lineCap);
30838
30987
  const compoundOffsets = getCompoundLineOffsets(ss?.compoundLine, strokeWidth);
30839
30988
  const compoundWidths = getCompoundLineWidths(ss?.compoundLine, strokeWidth);
@@ -37525,7 +37674,7 @@ function drawingShapeMeshOpacity(shape) {
37525
37674
  // src/pptx/render/svg-text-lines.ts
37526
37675
  var LINE_HEIGHT_RATIO = 1.2;
37527
37676
  function centeredSvgTextLines(text3, fontSize, options = {}) {
37528
- const lines = options.maxWidth !== void 0 ? chunkAIL3BNZS_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37677
+ const lines = options.maxWidth !== void 0 ? chunkIURZJAWP_cjs.wrapTextByEstimatedWidth(text3, options.maxWidth, fontSize) : text3.split("\n").filter((line4) => line4.length > 0);
37529
37678
  const centerY = options.centerY ?? 0;
37530
37679
  if (lines.length === 0) {
37531
37680
  return [{ text: "", y: centerY }];
@@ -38322,7 +38471,7 @@ function buildObliqueLabels(layout, input) {
38322
38471
  const { w, h, d } = layout.box;
38323
38472
  const span = layout.range.max - layout.range.min;
38324
38473
  const fontSize = input.fontSize;
38325
- for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...layout.range, span })) {
38474
+ for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...layout.range, span })) {
38326
38475
  const p = (v - layout.range.min) * layout.valueScale;
38327
38476
  if (layout.horizontal) {
38328
38477
  const at = screen2(layout, p, 0, 0);
@@ -38406,7 +38555,6 @@ var TOP_WITH_TITLE = 46.5 * PT2;
38406
38555
  var TOP_NO_TITLE = 14 * PT2;
38407
38556
  var BOTTOM_WITH_LEGEND = 57.5 * PT2;
38408
38557
  var BOTTOM_NO_LEGEND = 31 * PT2;
38409
- var DEFAULT_GAP_WIDTH = 150;
38410
38558
  var DEFAULT_GAP_DEPTH = 150;
38411
38559
  function resolveGrouping(chartData) {
38412
38560
  const g = chartData.grouping;
@@ -38445,7 +38593,7 @@ function dataExtent(chartData, grouping, nCat) {
38445
38593
  function valueRange(chartData, grouping, nCat, valueLengthPx) {
38446
38594
  const axis = chartData.axes?.find((a) => a.axisType === "valAx");
38447
38595
  const [lo, hi] = dataExtent(chartData, grouping, nCat);
38448
- const auto = chunkAIL3BNZS_cjs.niceValueAxisBounds(lo, hi, chunkAIL3BNZS_cjs.axisTargetIntervals(valueLengthPx), 0);
38596
+ const auto = chunkIURZJAWP_cjs.niceValueAxisBounds(lo, hi, chunkIURZJAWP_cjs.axisTargetIntervals(valueLengthPx), 0);
38449
38597
  const min = typeof axis?.min === "number" ? axis.min : auto.min;
38450
38598
  let max = typeof axis?.max === "number" ? axis.max : auto.max;
38451
38599
  if (max <= min) {
@@ -38469,22 +38617,22 @@ function computeObliqueBarLayout(element, vm) {
38469
38617
  const rotX = (chartData.view3D?.rotX ?? 15) * Math.PI / 180;
38470
38618
  const rotY = (chartData.view3D?.rotY ?? 20) * Math.PI / 180;
38471
38619
  const shear = { x: Math.sin(rotY), y: -Math.sin(rotX) };
38472
- const gapWidth = (chartData.barGapWidth ?? DEFAULT_GAP_WIDTH) / 100;
38620
+ const gapWidth = (chartData.barGapWidth ?? chunkIURZJAWP_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38473
38621
  const gapDepth = (chartData.gapDepth ?? DEFAULT_GAP_DEPTH) / 100;
38474
38622
  const slots = grouping === "clustered" ? nSer : 1;
38475
38623
  const rows = grouping === "standard" ? nSer : 1;
38476
38624
  const labelFont = vm.axisLabels[0]?.fontSize ?? 16;
38477
38625
  const catLabels = chartData.categories.length > 0 ? chartData.categories : Array.from({ length: nCat }, (_, i) => String(i + 1));
38478
- const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkAIL3BNZS_cjs.estimateTextWidth(t, labelFont)), 0);
38626
+ const widest = (texts) => texts.reduce((m, t) => Math.max(m, chunkIURZJAWP_cjs.estimateTextWidth(t, labelFont)), 0);
38479
38627
  const top = vm.title ? TOP_WITH_TITLE : TOP_NO_TITLE;
38480
38628
  const hasBottomLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38481
38629
  const bottom = vm.svgHeight - (hasBottomLegend ? BOTTOM_WITH_LEGEND : BOTTOM_NO_LEGEND);
38482
38630
  const regionH = Math.max(1, bottom - top);
38483
38631
  const provisional = valueRange(chartData, grouping, nCat, regionH);
38484
- const valueTexts = chunkAIL3BNZS_cjs.axisTickValues({
38632
+ const valueTexts = chunkIURZJAWP_cjs.axisTickValues({
38485
38633
  ...provisional,
38486
38634
  span: provisional.max - provisional.min
38487
- }).map((v) => chunkCJU4P5FT_cjs.formatValueLabel(chartData, grouping, v));
38635
+ }).map((v) => chunkWKLHJEPD_cjs.formatValueLabel(chartData, grouping, v));
38488
38636
  const leftBand = (horizontal ? widest(catLabels) : widest(valueTexts)) + (horizontal ? OBLIQUE_CATEGORY_LABEL_GAP : OBLIQUE_VALUE_LABEL_GAP);
38489
38637
  const seriesLabelW = grouping === "standard" && !horizontal ? widest(chartData.series.map((s) => s.name)) : 0;
38490
38638
  const seriesOverhang = (depth2) => seriesLabelW > 0 ? Math.max(0, OBLIQUE_CATEGORY_LABEL_GAP + seriesLabelW - depth2 * shear.x / (2 * rows)) : 0;
@@ -38540,13 +38688,13 @@ function computeObliqueBarLayout(element, vm) {
38540
38688
  gridlines: [],
38541
38689
  labels: []
38542
38690
  };
38543
- layout.bars = chunkCJU4P5FT_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38544
- layout.gridlines = chunkCJU4P5FT_cjs.buildGridlines(layout);
38691
+ layout.bars = chunkWKLHJEPD_cjs.buildBars(chartData, vm, layout, { nCat, slots, rows, gapWidth, gapDepth });
38692
+ layout.gridlines = chunkWKLHJEPD_cjs.buildGridlines(layout);
38545
38693
  layout.labels = buildObliqueLabels(layout, {
38546
38694
  fontSize: labelFont,
38547
38695
  categories: catLabels,
38548
38696
  seriesNames: chartData.series.map((s) => s.name),
38549
- valueText: (v) => chunkCJU4P5FT_cjs.formatValueLabel(chartData, grouping, v)
38697
+ valueText: (v) => chunkWKLHJEPD_cjs.formatValueLabel(chartData, grouping, v)
38550
38698
  });
38551
38699
  return layout;
38552
38700
  }
@@ -38559,7 +38707,7 @@ function buildPerspGridlines(box, range, horizontal) {
38559
38707
  { from: [w, 0, 0], to: [w, 0, d] }
38560
38708
  ];
38561
38709
  const span = range.max - range.min;
38562
- for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...range, span })) {
38710
+ for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...range, span })) {
38563
38711
  const t = (v - range.min) / span;
38564
38712
  if (horizontal) {
38565
38713
  const x = t * w;
@@ -38585,11 +38733,11 @@ function buildPerspLabels(layout, input) {
38585
38733
  const span = range.max - range.min;
38586
38734
  const labels = [];
38587
38735
  const fontSize = input.fontSize;
38588
- for (const v of chunkAIL3BNZS_cjs.axisTickValues({ ...range, span })) {
38736
+ for (const v of chunkIURZJAWP_cjs.axisTickValues({ ...range, span })) {
38589
38737
  const t = (v - range.min) / span;
38590
- const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkAIL3BNZS_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38738
+ const text3 = input.percent ? `${Math.round(v * 100)}%` : chunkIURZJAWP_cjs.formatAxisValueWithUnits(v, input.valueAxis);
38591
38739
  if (layout.horizontal) {
38592
- const at = chunkCJU4P5FT_cjs.perspToScreen(view, [t * w, 0, 0]);
38740
+ const at = chunkWKLHJEPD_cjs.perspToScreen(view, [t * w, 0, 0]);
38593
38741
  labels.push({
38594
38742
  role: "value",
38595
38743
  text: text3,
@@ -38599,7 +38747,7 @@ function buildPerspLabels(layout, input) {
38599
38747
  fontSize
38600
38748
  });
38601
38749
  } else {
38602
- const at = chunkCJU4P5FT_cjs.perspToScreen(view, [0, t * h, 0]);
38750
+ const at = chunkWKLHJEPD_cjs.perspToScreen(view, [0, t * h, 0]);
38603
38751
  labels.push({ role: "value", text: text3, x: at.x - VALUE_GAP2, y: at.y, anchor: "end", fontSize });
38604
38752
  }
38605
38753
  }
@@ -38609,7 +38757,7 @@ function buildPerspLabels(layout, input) {
38609
38757
  return;
38610
38758
  }
38611
38759
  if (layout.horizontal) {
38612
- const at2 = chunkCJU4P5FT_cjs.perspToScreen(view, [0, pos, 0]);
38760
+ const at2 = chunkWKLHJEPD_cjs.perspToScreen(view, [0, pos, 0]);
38613
38761
  labels.push({
38614
38762
  role: "category",
38615
38763
  text: text3,
@@ -38620,7 +38768,7 @@ function buildPerspLabels(layout, input) {
38620
38768
  });
38621
38769
  return;
38622
38770
  }
38623
- const at = chunkCJU4P5FT_cjs.perspToScreen(view, [pos, 0, 0]);
38771
+ const at = chunkWKLHJEPD_cjs.perspToScreen(view, [pos, 0, 0]);
38624
38772
  labels.push({
38625
38773
  role: "category",
38626
38774
  text: text3,
@@ -38633,7 +38781,7 @@ function buildPerspLabels(layout, input) {
38633
38781
  const rows = input.seriesNames.length;
38634
38782
  input.seriesNames.forEach((text3, s) => {
38635
38783
  const z = layout.kind === "surface" ? rows > 1 ? s / (rows - 1) * d : d / 2 : (s + 0.5) / rows * d;
38636
- const at = chunkCJU4P5FT_cjs.perspToScreen(view, [w, 0, z]);
38784
+ const at = chunkWKLHJEPD_cjs.perspToScreen(view, [w, 0, z]);
38637
38785
  labels.push({
38638
38786
  role: "series",
38639
38787
  text: text3,
@@ -38657,7 +38805,7 @@ var RECT_TOP_WITH_TITLE = 48 * PT4;
38657
38805
  var RECT_TOP_NO_TITLE = 14 * PT4;
38658
38806
  var RECT_BOTTOM_WITH_LEGEND = 62 * PT4;
38659
38807
  var RECT_BOTTOM_NO_LEGEND = 31 * PT4;
38660
- var DEFAULT_GAP = 150;
38808
+ var DEFAULT_GAP_DEPTH2 = 150;
38661
38809
  var HORIZONTAL_CATEGORY_EXTENT = 0.483;
38662
38810
  var DEPTH_FIT_MULTI_ROW = 0.96;
38663
38811
  var DEPTH_FIT_SINGLE_ROW = 1.04;
@@ -38726,8 +38874,8 @@ function computePerspChartLayout(element, vm, options = {}) {
38726
38874
  const valAx = chartData.axes?.find((a) => a.axisType === "valAx");
38727
38875
  const midCat = (valAx?.crossBetween ?? (kind === "area" || kind === "surface" ? "midCat" : "between")) === "midCat";
38728
38876
  const view3D = chartData.view3D;
38729
- const gapWidth = (chartData.barGapWidth ?? DEFAULT_GAP) / 100;
38730
- const gapDepth = (chartData.gapDepth ?? DEFAULT_GAP) / 100;
38877
+ const gapWidth = (chartData.barGapWidth ?? chunkIURZJAWP_cjs.DEFAULT_BAR_GAP_WIDTH) / 100;
38878
+ const gapDepth = (chartData.gapDepth ?? DEFAULT_GAP_DEPTH2) / 100;
38731
38879
  const slot = 1 / nCat;
38732
38880
  const rows = kind === "surface" ? nSer : grouping === "standard" ? nSer : 1;
38733
38881
  const markDepth = slot / (1 + gapWidth);
@@ -38739,16 +38887,16 @@ function computePerspChartLayout(element, vm, options = {}) {
38739
38887
  const valueExtent = horizontal ? 1 : baseHeight * heightScale;
38740
38888
  const catExtent = horizontal ? HORIZONTAL_CATEGORY_EXTENT * heightScale : 1;
38741
38889
  const box = horizontal ? { w: valueExtent, h: catExtent, d } : { w: 1, h: valueExtent, d };
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);
38890
+ 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);
38743
38891
  const hasLegend = chartData.style?.hasLegend !== false && (chartData.style?.legendPosition ?? "b") === "b";
38744
- const view = chunkCJU4P5FT_cjs.fitPerspView(camera, {
38892
+ const view = chunkWKLHJEPD_cjs.fitPerspView(camera, {
38745
38893
  left: RECT_LEFT,
38746
38894
  right: vm.svgWidth - (rows > 1 ? RECT_RIGHT_WITH_SERIES : RECT_RIGHT_NO_SERIES),
38747
38895
  top: vm.title ? RECT_TOP_WITH_TITLE : RECT_TOP_NO_TITLE,
38748
38896
  bottom: vm.svgHeight - (hasLegend ? RECT_BOTTOM_WITH_LEGEND : RECT_BOTTOM_NO_LEGEND)
38749
38897
  });
38750
38898
  const [lo, hi] = dataExtent2(chartData, grouping, nCat);
38751
- const auto = chunkAIL3BNZS_cjs.niceValueAxisBounds(lo, hi, chunkAIL3BNZS_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
38899
+ const auto = chunkIURZJAWP_cjs.niceValueAxisBounds(lo, hi, chunkIURZJAWP_cjs.axisTargetIntervals(view.focal * valueExtent), 0);
38752
38900
  const min = typeof valAx?.min === "number" ? valAx.min : auto.min;
38753
38901
  let max = typeof valAx?.max === "number" ? valAx.max : auto.max;
38754
38902
  if (max <= min) {
@@ -38840,7 +38988,7 @@ function buildBarGeometry(element, vm) {
38840
38988
  }
38841
38989
  var PERSP_BOX_TYPES = /* @__PURE__ */ new Set(["line3D", "area3D", "surface", "bar3D"]);
38842
38990
  function buildPieGeometry(element, vm) {
38843
- const layout = chunkCJU4P5FT_cjs.computePieChartLayout(element, chunkCJU4P5FT_cjs.widenPieViewModel(vm, element));
38991
+ const layout = chunkWKLHJEPD_cjs.computePieChartLayout(element, chunkWKLHJEPD_cjs.widenPieViewModel(vm, element));
38844
38992
  return layout ? { kind: "pie", layout } : null;
38845
38993
  }
38846
38994
  function buildPerspGeometry(element, vm, oblique) {
@@ -38860,7 +39008,7 @@ function buildChart3DSpecForElement(element) {
38860
39008
  if (!chartData || !is3DChartType(chartType)) {
38861
39009
  return null;
38862
39010
  }
38863
- const vm = chunkAIL3BNZS_cjs.buildChartViewModel(element);
39011
+ const vm = chunkIURZJAWP_cjs.buildChartViewModel(element);
38864
39012
  const projection = resolveChart3DProjection(chartType, chartData.view3D);
38865
39013
  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;
38866
39014
  if (!geometry) {
@@ -52958,7 +53106,7 @@ function axisTitle(current, show) {
52958
53106
  return show ? current || AXIS_TITLE : void 0;
52959
53107
  }
52960
53108
  function applyChartQuickLayout(chartData, layout) {
52961
- const withGrid = patchChartData(chartData, chunkAIL3BNZS_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
53109
+ const withGrid = patchChartData(chartData, chunkIURZJAWP_cjs.chartGridlinesPatch(chartData, layout.majorGridlines));
52962
53110
  const axes = (withGrid.axes ?? []).map((axis) => {
52963
53111
  if (axis.axisType === "valAx") {
52964
53112
  return {
@@ -53012,7 +53160,7 @@ function matchesLayout(chartData, layout) {
53012
53160
  const legend = style.hasLegend ? style.legendPosition ?? "r" : null;
53013
53161
  const isBar = chartData.chartType === "bar" || chartData.chartType === "bar3D";
53014
53162
  const barMatches = !isBar || (chartData.barGapWidth ?? 150) === layout.gapWidth && (chartData.barOverlap ?? 0) === layout.overlap;
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;
53163
+ 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;
53016
53164
  }
53017
53165
  var CHART_QUICK_LAYOUT_GALLERY = {
53018
53166
  build(ctx) {
@@ -58461,7 +58609,7 @@ function isSeriesUsingSecondaryAxis(chartData, seriesIndex) {
58461
58609
  if (!series) {
58462
58610
  return false;
58463
58611
  }
58464
- return chunkAIL3BNZS_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58612
+ return chunkIURZJAWP_cjs.isSeriesOnSecondaryAxis(series, chartData.axes);
58465
58613
  }
58466
58614
  function resolveSecondaryAxisId(chartData, useSecondary) {
58467
58615
  const axPos = useSecondary ? "r" : "l";
@@ -58989,8 +59137,8 @@ async function embedImagesOnClone(root) {
58989
59137
  }
58990
59138
 
58991
59139
  // src/pptx/render/foreign-object-svg-document.ts
58992
- function escapeAttr(value) {
58993
- return value.replace(/&/gu, "&amp;").replace(/"/gu, "&quot;");
59140
+ function cssCdata(css) {
59141
+ return `<![CDATA[${css.replaceAll("]]>", "]]]]><![CDATA[>")}]]>`;
58994
59142
  }
58995
59143
  async function buildForeignObjectSvgBody(element, doc, options) {
58996
59144
  const {
@@ -58999,19 +59147,22 @@ async function buildForeignObjectSvgBody(element, doc, options) {
58999
59147
  backgroundColor,
59000
59148
  readComputedStyle = (el) => window.getComputedStyle(el)
59001
59149
  } = options;
59002
- await chunkYHA6XAB3_cjs.settleThreeViews(element);
59150
+ await chunkKRMMJUCO_cjs.settleThreeViews(element);
59003
59151
  const clone = element.cloneNode(true);
59004
- inlineComputedStylesOnClone(element, clone, readComputedStyle);
59005
- chunkYHA6XAB3_cjs.snapshotThreeViewsIntoClone(element, clone);
59006
- chunkYHA6XAB3_cjs.prepareExportClone(clone);
59152
+ chunkKRMMJUCO_cjs.withAuthoredStrokeWidths(
59153
+ element,
59154
+ () => inlineComputedStylesOnClone(element, clone, readComputedStyle)
59155
+ );
59156
+ chunkKRMMJUCO_cjs.snapshotThreeViewsIntoClone(element, clone);
59157
+ chunkKRMMJUCO_cjs.prepareExportClone(clone);
59007
59158
  const [{ allEmbedded: imagesEmbedded }, externalFonts] = await Promise.all([
59008
59159
  embedImagesOnClone(clone),
59009
59160
  collectExternalFontFaceCss(doc, fetchAsDataUrl)
59010
59161
  ]);
59011
59162
  const allEmbedded = imagesEmbedded && externalFonts.allEmbedded;
59012
59163
  const fontFaceCss = [collectFontFaceCss(doc), externalFonts.css].filter(Boolean).join("\n\n");
59013
- const defs = fontFaceCss ? `<defs><style type="text/css"><![CDATA[${fontFaceCss}]]></style></defs>` : "";
59014
- const bgRect = backgroundColor ? `<rect width="${width}" height="${height}" fill="${escapeAttr(backgroundColor)}" />` : "";
59164
+ const defs = fontFaceCss ? `<defs><style type="text/css">${cssCdata(fontFaceCss)}</style></defs>` : "";
59165
+ const bgRect = backgroundColor ? `<rect width="${width}" height="${height}" fill="${escapeSvgAttr(backgroundColor)}" />` : "";
59015
59166
  const bodyMarkup = [
59016
59167
  defs,
59017
59168
  bgRect,
@@ -64338,6 +64489,37 @@ function buildTitleBarState(input) {
64338
64489
  };
64339
64490
  }
64340
64491
 
64492
+ // src/pptx/render/tab-row-actions.ts
64493
+ function buildTabRowActionsState(input) {
64494
+ const t = input.translate;
64495
+ const share = t("pptx.toolbar.share");
64496
+ return {
64497
+ commentsLabel: t("pptx.toolbar.comments"),
64498
+ commentsTitle: t("pptx.toolbar.comments"),
64499
+ commentsPressed: input.commentsOpen,
64500
+ commentsCount: Math.max(0, input.commentCount ?? 0),
64501
+ noComments: !input.showComments,
64502
+ shareLabel: share,
64503
+ shareTitle: input.isCollaborating && input.collaboratorCount !== void 0 ? t("pptx.toolbar.sharingUsers", { count: input.collaboratorCount }) : share,
64504
+ sharePressed: input.isCollaborating,
64505
+ noShare: !input.showShare
64506
+ };
64507
+ }
64508
+ function tabRowActionsAttributes(state) {
64509
+ const flag2 = (on) => on ? "" : void 0;
64510
+ return {
64511
+ "comments-label": state.commentsLabel,
64512
+ "comments-title": state.commentsTitle,
64513
+ "comments-pressed": flag2(state.commentsPressed),
64514
+ "comments-count": String(state.commentsCount),
64515
+ "no-comments": flag2(state.noComments),
64516
+ "share-label": state.shareLabel,
64517
+ "share-title": state.shareTitle,
64518
+ "share-pressed": flag2(state.sharePressed),
64519
+ "no-share": flag2(state.noShare)
64520
+ };
64521
+ }
64522
+
64341
64523
  // src/pptx/render/slide-sorter-state.ts
64342
64524
  function createSlideSorterState(slides, active2) {
64343
64525
  return {
@@ -64430,14 +64612,16 @@ function applySorterAction(state, slides, action, active2) {
64430
64612
  var VIEWER_ROOT_OPTION_DEFAULTS = Object.freeze({
64431
64613
  initialSlide: 0,
64432
64614
  showToolbar: true,
64433
- showThumbnails: true
64615
+ showThumbnails: true,
64616
+ showCompatibilityToasts: true
64434
64617
  });
64435
64618
  function resolveViewerRootOptions(options) {
64436
64619
  const initialSlide = options?.initialSlide;
64437
64620
  return {
64438
64621
  initialSlide: typeof initialSlide === "number" && Number.isFinite(initialSlide) ? initialSlide : VIEWER_ROOT_OPTION_DEFAULTS.initialSlide,
64439
64622
  showToolbar: options?.showToolbar ?? VIEWER_ROOT_OPTION_DEFAULTS.showToolbar,
64440
- showThumbnails: options?.showThumbnails ?? VIEWER_ROOT_OPTION_DEFAULTS.showThumbnails
64623
+ showThumbnails: options?.showThumbnails ?? VIEWER_ROOT_OPTION_DEFAULTS.showThumbnails,
64624
+ showCompatibilityToasts: options?.showCompatibilityToasts ?? VIEWER_ROOT_OPTION_DEFAULTS.showCompatibilityToasts
64441
64625
  };
64442
64626
  }
64443
64627
  function resolveInitialSlideIndex(initialSlide, slideCount) {
@@ -65477,6 +65661,8 @@ var OFFICE_TOKENS = {
65477
65661
  "--office-font-size-md": "14px",
65478
65662
  "--office-font-size-lg": "15px",
65479
65663
  "--office-font-size-xl": "18px",
65664
+ /** Smallest text size that keeps mobile browsers from zooming a focused field. */
65665
+ "--office-font-size-touch": "16px",
65480
65666
  "--office-font-weight-medium": "500",
65481
65667
  "--office-font-weight-bold": "600",
65482
65668
  "--office-line-height": "1.4",
@@ -65509,6 +65695,8 @@ var OFFICE_TOKENS = {
65509
65695
  // Sizes
65510
65696
  "--office-target-size": "28px",
65511
65697
  "--office-target-size-touch": "44px",
65698
+ /** Minimum pointer target on touch layouts. */
65699
+ "--office-touch-target": "36px",
65512
65700
  "--office-control-height": "24px",
65513
65701
  "--office-control-height-md": "28px",
65514
65702
  "--office-control-height-lg": "32px",
@@ -65597,6 +65785,7 @@ var OFFICE_TOKENS = {
65597
65785
  "--office-launcher-height": "14px",
65598
65786
  "--office-tab-indicator-width": "2.5px",
65599
65787
  "--office-status-bar-height": "24px",
65788
+ "--office-status-bar-separator-opacity": "1",
65600
65789
  "--office-tab-height": "28px",
65601
65790
  "--office-tab-max-width": "220px",
65602
65791
  "--office-zoom-slider-width": "120px",
@@ -65646,6 +65835,8 @@ var OFFICE_TOKENS = {
65646
65835
  "--office-avatar-size": "48px",
65647
65836
  "--office-avatar-color": "var(--office-muted-foreground, #6b7280)",
65648
65837
  "--office-toast-width": "360px",
65838
+ "--office-comments-pane-width": "300px",
65839
+ "--office-comment-avatar-size": "24px",
65649
65840
  "--office-account-field-width": "320px",
65650
65841
  // Component: galleries
65651
65842
  "--office-gallery-trigger-height": "24px",
@@ -65664,6 +65855,8 @@ var OFFICE_TOKENS = {
65664
65855
  "--office-title-bar-mark-size": "20px",
65665
65856
  "--office-title-bar-mark-background": "var(--office-accent, #2563eb)",
65666
65857
  "--office-title-bar-mark-foreground": "var(--office-accent-foreground, #ffffff)",
65858
+ "--office-title-bar-name-foreground": "var(--office-title-bar-foreground, var(--office-foreground, #1f2937))",
65859
+ "--office-title-bar-result-selected": "var(--office-selected, #e5e7eb)",
65667
65860
  "--office-title-bar-name-max-width": "240px",
65668
65861
  "--office-title-bar-name-max-width-narrow": "140px",
65669
65862
  "--office-title-bar-search-max-width": "448px",
@@ -65993,7 +66186,8 @@ var BUILT_IN = {
65993
66186
  warning: "M10 3l7.5 13H2.5ZM10 8v3.5M10 14v.1",
65994
66187
  info: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M10 9v4.5M10 6.3v.1",
65995
66188
  restore: "M3.5 10a6.5 6.5 0 1 0 2-4.6M3.5 3v3.5H7M10 6.5v3.8l2.5 1.6",
65996
- print: "M5.5 7.5V3h9v4.5M5.5 14.5H3V8h14v6.5h-2.5M5.5 12h9v5h-9Z"
66189
+ print: "M5.5 7.5V3h9v4.5M5.5 14.5H3V8h14v6.5h-2.5M5.5 12h9v5h-9Z",
66190
+ share: "m12 4 5 5-5 5M17 9h-6a7 7 0 0 0-7 7"
65997
66191
  };
65998
66192
  for (const [name, d] of Object.entries(BUILT_IN)) registry.set(name, { d });
65999
66193
  function registerIcon(name, icon2) {
@@ -66733,6 +66927,72 @@ var OfficeUiSearch = class extends OfficeElement {
66733
66927
  };
66734
66928
  var defineSearchField = definer("office-ui-search", () => OfficeUiSearch);
66735
66929
 
66930
+ // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/ribbon/ribbon-actions.css?raw
66931
+ var ribbon_actions_default = ":host {\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: var(--office-space-1-5);\n padding-inline-start: var(--office-space-2);\n color: var(--office-foreground);\n font: inherit;\n font-size: var(--office-font-size);\n}\n[hidden] {\n display: none !important;\n}\n.glyph {\n flex: none;\n width: var(--office-icon-size-md);\n height: var(--office-icon-size-md);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.glyph:not([data-painted]) {\n display: none;\n}\n.mode {\n position: relative;\n display: inline-flex;\n align-items: center;\n height: var(--office-control-height-md);\n}\n.mode > .glyph {\n position: absolute;\n inset-inline-start: var(--office-space-2);\n pointer-events: none;\n}\n.mode-select {\n height: var(--office-control-height-md);\n padding: 0 var(--office-space-1-5) 0 calc(var(--office-space-2) * 2 + var(--office-icon-size-md));\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-sm);\n background: var(--office-background);\n color: var(--office-foreground);\n font: inherit;\n cursor: pointer;\n}\nbutton {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--office-space-1-5);\n height: var(--office-control-height-md);\n padding: 0 var(--office-space-2-5);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-sm);\n background: transparent;\n color: var(--office-foreground);\n font: inherit;\n white-space: nowrap;\n cursor: pointer;\n}\n.comments:hover {\n background: var(--office-surface);\n}\n.comments[aria-pressed='true'] {\n background: var(--office-selected);\n}\n.badge {\n min-width: var(--office-space-4);\n padding: 0 var(--office-space-1);\n border-radius: var(--office-radius-full);\n background: var(--office-accent);\n color: var(--office-accent-foreground);\n font-size: var(--office-font-size-2xs);\n line-height: var(--office-space-4);\n text-align: center;\n}\n.share {\n padding: 0 var(--office-space-3);\n border-color: var(--office-accent);\n background: var(--office-accent);\n color: var(--office-accent-foreground);\n}\n.share:hover,\n.share[aria-pressed='true'] {\n /* Darkened here rather than read from --office-accent-hover, which resolves where the theme\n is installed and so would miss a product's own accent. */\n filter: brightness(0.88);\n}\n.mode-select:focus-visible,\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n/* Narrow windows keep the icons and drop the labels, as Office's simplified layout does. */\n@media (max-width: 900px) {\n .label {\n display: none;\n }\n button {\n padding: 0 var(--office-space-1-5);\n }\n}\n";
66932
+
66933
+ // src/ribbon/ribbon-actions.ts
66934
+ var OfficeUiRibbonActions = class extends OfficeElement {
66935
+ static modeEvent = "office-ribbon-mode";
66936
+ static commentsEvent = "office-ribbon-comments";
66937
+ static shareEvent = "office-ribbon-share";
66938
+ static styles = controlStyles(ribbon_actions_default);
66939
+ static properties = {
66940
+ modes: { attribute: false },
66941
+ mode: { type: String },
66942
+ modeLabel: { attribute: "mode-label", type: String },
66943
+ commentsLabel: { attribute: "comments-label", type: String },
66944
+ commentsTitle: { attribute: "comments-title", type: String },
66945
+ commentsPressed: { attribute: "comments-pressed", ...flag },
66946
+ commentsCount: { attribute: "comments-count", type: Number },
66947
+ noComments: { attribute: "no-comments", ...flag },
66948
+ shareLabel: { attribute: "share-label", type: String },
66949
+ shareTitle: { attribute: "share-title", type: String },
66950
+ sharePressed: { attribute: "share-pressed", ...flag },
66951
+ noShare: { attribute: "no-share", ...flag }
66952
+ };
66953
+ constructor() {
66954
+ super();
66955
+ this.modes = [];
66956
+ this.mode = "";
66957
+ this.modeLabel = "Editing mode";
66958
+ this.commentsLabel = "Comments";
66959
+ this.commentsTitle = null;
66960
+ this.commentsPressed = false;
66961
+ this.commentsCount = 0;
66962
+ this.noComments = false;
66963
+ this.shareLabel = "Share";
66964
+ this.shareTitle = null;
66965
+ this.sharePressed = false;
66966
+ this.noShare = false;
66967
+ }
66968
+ /** The rendered control of a part, or null before the first render. */
66969
+ control(part) {
66970
+ return this.renderRoot.querySelector(`[part="${part}"]`);
66971
+ }
66972
+ onMode(event) {
66973
+ event.stopPropagation();
66974
+ const select2 = event.target;
66975
+ const mode = select2.value;
66976
+ select2.value = this.mode;
66977
+ if (mode !== this.mode) this.fire(this.events().modeEvent, { mode });
66978
+ }
66979
+ events() {
66980
+ return this.constructor;
66981
+ }
66982
+ updated() {
66983
+ const select2 = this.control("mode-select");
66984
+ if (select2 && select2.value !== this.mode) select2.value = this.mode;
66985
+ }
66986
+ render() {
66987
+ const modes = this.modes ?? [];
66988
+ const count = Number(this.commentsCount) || 0;
66989
+ const commentsTitle = this.commentsTitle ?? this.commentsLabel;
66990
+ const shareTitle = this.shareTitle ?? this.shareLabel;
66991
+ return lit.html`<label class="mode" part="mode" ?hidden=${modes.length === 0}>${glyph("pencil", "glyph")}<select class="mode-select" part="mode-select" aria-label=${this.modeLabel} title=${this.modeLabel} @change=${this.onMode}>${modes.map((option) => lit.html`<option value=${option.value} ?selected=${option.value === this.mode}>${option.label}</option>`)}</select></label><button class="comments" part="comments" type="button" aria-label=${this.commentsLabel} title=${count > 0 ? `${commentsTitle} (${count})` : commentsTitle} aria-pressed=${String(present(this.commentsPressed))} ?hidden=${present(this.noComments)} @click=${() => this.fire(this.events().commentsEvent, {})}>${glyph("message", "glyph")}<span class="label">${this.commentsLabel}</span>${count > 0 ? lit.html`<span class="badge" aria-hidden="true">${count}</span>` : ""}</button><button class="share" part="share" type="button" aria-label=${this.shareLabel} title=${shareTitle} aria-pressed=${String(present(this.sharePressed))} ?hidden=${present(this.noShare)} @click=${() => this.fire(this.events().shareEvent, {})}>${glyph("share", "glyph")}<span class="label">${this.shareLabel}</span></button>`;
66992
+ }
66993
+ };
66994
+ var defineRibbonActions = definer("office-ui-ribbon-actions", () => OfficeUiRibbonActions);
66995
+
66736
66996
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/ribbon/button.css?raw
66737
66997
  var button_default = ":host {\n display: inline-flex;\n vertical-align: middle;\n}\nbutton {\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--office-space-1-5);\n min-width: var(--office-target-size);\n min-height: var(--office-target-size);\n padding: 0 var(--office-space-2);\n border: var(--office-border-width) solid transparent;\n border-radius: var(--office-radius);\n background: transparent;\n color: var(--office-foreground);\n font: inherit;\n font-size: var(--office-font-size-sm);\n cursor: pointer;\n white-space: nowrap;\n}\n:host([variant='stacked']) button {\n flex-direction: column;\n padding: var(--office-space-1) var(--office-space-2);\n}\nbutton:hover:not(:disabled) {\n background: var(--office-surface);\n}\nbutton:active:not(:disabled) {\n background: var(--office-selected);\n}\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: calc(var(--office-focus-offset) / 2);\n}\nbutton[aria-pressed='true'],\nbutton[aria-expanded='true'] {\n border-color: var(--office-accent);\n background: var(--office-surface);\n}\n:host([active]) button {\n background: var(--office-command-active);\n color: var(--office-accent);\n}\nbutton:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\nsvg {\n width: var(--office-icon-size-ml);\n height: var(--office-icon-size-ml);\n flex: none;\n color: var(--office-command-icon-color);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\nsvg.glyph:not([data-painted]) {\n display: none;\n}\n.label[hidden],\n.caret[hidden],\n.badge[hidden] {\n display: none;\n}\n/* Office trails a menu chevron after the last line of the label. */\n.caret {\n display: inline-block;\n width: var(--office-icon-size-xs);\n height: var(--office-icon-size-xs);\n margin-inline-start: var(--office-space-0);\n vertical-align: middle;\n color: var(--office-muted-foreground);\n}\n.badge {\n position: absolute;\n top: 0;\n inset-inline-end: 0;\n padding: 0 var(--office-space-0);\n border-radius: var(--office-radius-full);\n background: var(--office-accent);\n color: var(--office-accent-foreground);\n font-size: var(--office-font-size-3xs);\n}\n\n/* Large ribbon command: a big glyph above a two-line label. */\n:host([size='large']) button {\n flex-direction: column;\n justify-content: flex-start;\n gap: var(--office-space-0);\n min-width: var(--office-command-large-min-width);\n max-width: var(--office-command-large-max-width);\n height: var(--office-command-large-height);\n padding: var(--office-space-0) var(--office-space-1);\n border: 0;\n white-space: normal;\n text-align: center;\n line-height: var(--office-line-height-tight);\n}\n:host([size='large']) svg.glyph {\n width: var(--office-command-large-icon);\n height: var(--office-command-large-icon);\n}\n\n/* Small ribbon command: icon and label in one row. */\n:host([size='small']) button {\n justify-content: flex-start;\n min-width: 0;\n height: var(--office-control-height);\n min-height: var(--office-control-height);\n padding: 0 var(--office-space-1-5);\n border: 0;\n text-align: start;\n}\n:host([size='small']) svg.glyph {\n width: var(--office-command-small-icon);\n height: var(--office-command-small-icon);\n}\n\n/* Tall, label-less tool tiles (pens, erasers). */\n:host([icon-only][tall]) button {\n min-width: var(--office-command-tall-min-width);\n height: var(--office-command-tall-height);\n padding: var(--office-space-1);\n}\n:host([icon-only][tall]) svg.glyph {\n width: var(--office-command-tall-icon);\n height: var(--office-command-tall-icon);\n}\n:host([icon-only][tall][active]) button {\n box-shadow: inset 0 0 0 var(--office-border-width) var(--office-accent);\n}\n\n@media (pointer: coarse), (max-width: 767px) {\n :host([size='small']) button {\n min-height: var(--office-target-size-touch);\n }\n :host([icon-only]) button {\n min-width: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n button {\n border-color: ButtonText;\n color: ButtonText;\n background: ButtonFace;\n }\n svg {\n color: ButtonText;\n }\n button:disabled {\n color: GrayText;\n border-color: GrayText;\n }\n button[aria-pressed='true'],\n button[aria-expanded='true'],\n :host([active]) button {\n background: Highlight;\n color: HighlightText;\n }\n}\n";
66738
66998
 
@@ -68169,7 +68429,7 @@ var OfficeUiSelect = class extends OfficeElement {
68169
68429
  var defineSelect = definer("office-ui-select", () => OfficeUiSelect);
68170
68430
 
68171
68431
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/chrome/status-bar.css?raw
68172
- var status_bar_default = ":host {\n display: flex;\n align-items: center;\n gap: var(--office-space-3);\n min-height: var(--office-status-bar-height);\n padding: 0 var(--office-space-2);\n font-size: var(--office-font-size-xs);\n background: var(--office-surface);\n color: var(--office-foreground);\n border-top: var(--office-border-width) solid var(--office-border);\n font-family: var(--office-font);\n}\n::slotted([slot='end']) {\n margin-inline-start: auto;\n}\n.bar {\n display: contents;\n}\n[hidden] {\n display: none !important;\n}\n:host([data-controlled]) {\n display: block;\n flex: none;\n padding: 0;\n gap: 0;\n}\n:host([data-controlled]) .bar {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--office-space-1);\n width: 100%;\n min-height: var(--office-status-bar-height);\n padding: var(--office-space-0) var(--office-space-2);\n color: var(--office-muted-foreground);\n}\n:host([data-controlled]) ::slotted([slot='end']) {\n margin-inline-start: 0;\n}\n.items {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.item {\n flex: none;\n white-space: nowrap;\n}\n.item + .item::before {\n content: '';\n display: inline-block;\n width: var(--office-border-width);\n height: var(--office-space-3);\n margin: 0 var(--office-space-2);\n vertical-align: middle;\n background: var(--office-border);\n}\n.item.saving {\n color: var(--office-warning);\n}\n.item.error {\n color: var(--office-danger);\n}\n.spacer {\n flex: 1;\n}\n.toggles,\n.group {\n display: flex;\n align-items: center;\n gap: var(--office-space-0);\n}\n.sep {\n flex: none;\n width: var(--office-border-width);\n height: var(--office-space-3);\n margin: 0 var(--office-space-0);\n background: var(--office-border);\n}\n.bar button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--office-space-1);\n min-width: var(--office-control-height-xs);\n min-height: var(--office-control-height-xs);\n padding: var(--office-space-1);\n border: 0;\n border-radius: var(--office-radius-sm);\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n touch-action: manipulation;\n}\n.bar button:hover {\n background: var(--office-selected);\n color: var(--office-foreground);\n}\n.bar button[aria-pressed='true'] {\n color: var(--office-accent);\n}\n.bar button:active {\n opacity: 0.8;\n}\n.bar button:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n.bar svg {\n flex: none;\n width: var(--office-icon-size);\n height: var(--office-icon-size);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.toggle svg,\n.zoom-step svg {\n width: var(--office-icon-size-sm);\n height: var(--office-icon-size-sm);\n}\n.zoom-fit {\n min-width: var(--office-zoom-value-width);\n font-variant-numeric: tabular-nums;\n}\n@media (max-width: 767px) {\n .narrow-hide,\n .toggle .label {\n display: none !important;\n }\n}\n@media (pointer: coarse) {\n .bar button {\n min-width: var(--office-target-size-touch);\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n :host {\n background: Canvas;\n color: CanvasText;\n border-top-color: CanvasText;\n }\n .bar button {\n color: ButtonText;\n }\n .bar button:hover {\n background: Highlight;\n color: HighlightText;\n }\n .bar button[aria-pressed='true'] {\n border: var(--office-border-width) solid Highlight;\n }\n .bar button:focus-visible {\n outline-color: Highlight;\n }\n .sep,\n .item + .item::before {\n background: CanvasText;\n }\n}\n";
68432
+ var status_bar_default = ":host {\n display: flex;\n align-items: center;\n gap: var(--office-space-3);\n min-height: var(--office-status-bar-height);\n padding: 0 var(--office-space-2);\n font-size: var(--office-font-size-xs);\n background: var(--office-surface);\n color: var(--office-foreground);\n border-top: var(--office-border-width) solid var(--office-border);\n font-family: var(--office-font);\n}\n::slotted([slot='end']) {\n margin-inline-start: auto;\n}\n.bar {\n display: contents;\n}\n[hidden] {\n display: none !important;\n}\n:host([data-controlled]) {\n display: block;\n flex: none;\n padding: 0;\n gap: 0;\n}\n:host([data-controlled]) .bar {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--office-space-1);\n width: 100%;\n min-height: var(--office-status-bar-height);\n padding: var(--office-space-0) var(--office-space-2);\n color: var(--office-muted-foreground);\n}\n:host([data-controlled]) ::slotted([slot='end']) {\n margin-inline-start: 0;\n}\n.items {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.item {\n flex: none;\n white-space: nowrap;\n}\n.item + .item::before {\n content: '';\n display: inline-block;\n width: var(--office-border-width);\n height: var(--office-space-3);\n margin: 0 var(--office-space-2);\n vertical-align: middle;\n background: var(--office-border);\n opacity: var(--office-status-bar-separator-opacity);\n}\n.item.saving {\n color: var(--office-warning);\n}\n.item.error {\n color: var(--office-danger);\n}\n.spacer {\n flex: 1;\n}\n.toggles,\n.group {\n display: flex;\n align-items: center;\n gap: var(--office-space-0);\n}\n.sep {\n flex: none;\n width: var(--office-border-width);\n height: var(--office-space-3);\n margin: 0 var(--office-space-0);\n background: var(--office-border);\n opacity: var(--office-status-bar-separator-opacity);\n}\n.bar button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--office-space-1);\n min-width: var(--office-control-height-xs);\n min-height: var(--office-control-height-xs);\n padding: var(--office-space-1);\n border: 0;\n border-radius: var(--office-radius-sm);\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n touch-action: manipulation;\n}\n.bar button:hover {\n background: var(--office-selected);\n color: var(--office-foreground);\n}\n.bar button[aria-pressed='true'] {\n color: var(--office-accent);\n}\n.bar button:active {\n opacity: 0.8;\n}\n.bar button:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n.bar svg {\n flex: none;\n width: var(--office-icon-size);\n height: var(--office-icon-size);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.toggle svg,\n.zoom-step svg {\n width: var(--office-icon-size-sm);\n height: var(--office-icon-size-sm);\n}\n.zoom-fit {\n min-width: var(--office-zoom-value-width);\n font-variant-numeric: tabular-nums;\n}\n@media (max-width: 767px) {\n .narrow-hide,\n .toggle .label {\n display: none !important;\n }\n}\n@media (pointer: coarse) {\n .bar button {\n min-width: var(--office-target-size-touch);\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n :host {\n background: Canvas;\n color: CanvasText;\n border-top-color: CanvasText;\n }\n .bar button {\n color: ButtonText;\n }\n .bar button:hover {\n background: Highlight;\n color: HighlightText;\n }\n .bar button[aria-pressed='true'] {\n border: var(--office-border-width) solid Highlight;\n }\n .bar button:focus-visible {\n outline-color: Highlight;\n }\n .sep,\n .item + .item::before {\n background: CanvasText;\n }\n}\n";
68173
68433
 
68174
68434
  // src/chrome/status-bar.ts
68175
68435
  var OfficeUiStatusBar = class extends OfficeElement {
@@ -68260,6 +68520,7 @@ var OfficeUiStatusBar = class extends OfficeElement {
68260
68520
  </span>
68261
68521
  <slot></slot>
68262
68522
  <span class="spacer" ?hidden=${!state}></span>
68523
+ <slot name="summary"></slot>
68263
68524
  <span class="toggles" ?hidden=${togglesHidden}>
68264
68525
  ${repeat_js.repeat(
68265
68526
  toggles,
@@ -68310,7 +68571,7 @@ function matchTitleBarCommands(search, query) {
68310
68571
  }
68311
68572
 
68312
68573
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/chrome/title-bar.css?raw
68313
- var title_bar_default = ":host {\n display: block;\n flex: none;\n}\n:host([data-empty]) {\n display: none !important;\n}\n[hidden] {\n display: none !important;\n}\n.bar {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--office-space-1);\n width: 100%;\n height: var(--office-title-bar-height);\n padding: 0 var(--office-space-2);\n border-bottom: var(--office-border-width) solid var(--office-title-bar-border);\n background: var(--office-title-bar-background);\n color: var(--office-title-bar-foreground);\n font: var(--office-font-size-xs)/var(--office-line-height-tight) var(--office-font);\n user-select: none;\n}\n:host([placement='belowRibbon']) .bar {\n height: auto;\n min-height: var(--office-title-bar-below-height);\n padding-block: var(--office-space-0);\n}\n.mark {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--office-title-bar-mark-size);\n height: var(--office-title-bar-mark-size);\n border-radius: var(--office-radius-sm);\n background: var(--office-title-bar-mark-background);\n color: var(--office-title-bar-mark-foreground);\n font-size: var(--office-font-size-2xs);\n font-weight: var(--office-font-weight-bold);\n}\n.autosave {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--office-space-1-5);\n padding: 0 var(--office-space-0) 0 var(--office-space-1-5);\n white-space: nowrap;\n}\n.label,\n.dot,\n.status {\n color: var(--office-muted-foreground);\n white-space: nowrap;\n}\n.sep {\n flex: none;\n width: var(--office-border-width);\n height: var(--office-space-4);\n margin: 0 var(--office-space-1);\n background: var(--office-title-bar-border);\n}\n.qat {\n display: flex;\n align-items: center;\n gap: var(--office-space-0);\n min-width: 0;\n}\n.qat button,\n.results button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--office-space-1);\n min-width: var(--office-control-height-md);\n min-height: var(--office-control-height-md);\n padding: var(--office-space-1);\n border: 0;\n border-radius: var(--office-radius-sm);\n background: transparent;\n color: var(--office-muted-foreground);\n font: inherit;\n cursor: pointer;\n touch-action: manipulation;\n}\n.qat button:hover:not(:disabled) {\n background: var(--office-selected);\n}\n.qat button:active:not(:disabled) {\n opacity: 0.7;\n}\n.qat button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n.qat small {\n font-size: var(--office-font-size-xs);\n white-space: nowrap;\n}\nsvg {\n flex: none;\n width: var(--office-icon-size);\n height: var(--office-icon-size);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.file {\n display: flex;\n align-items: baseline;\n gap: var(--office-space-1-5);\n min-width: 0;\n padding: 0 var(--office-space-1);\n flex: 0 1 auto;\n}\n.name {\n max-width: var(--office-title-bar-name-max-width);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--office-title-bar-foreground);\n font-size: var(--office-font-size-sm);\n font-weight: var(--office-font-weight-medium);\n}\n.status.saving {\n color: var(--office-warning);\n}\n.status.error {\n color: var(--office-danger);\n}\n.search {\n position: relative;\n flex: 1;\n display: flex;\n justify-content: center;\n min-width: 0;\n padding: 0 var(--office-space-2);\n}\n.box {\n position: relative;\n width: 100%;\n max-width: var(--office-title-bar-search-max-width);\n min-width: 0;\n}\n.box > [part='search'] {\n width: 100%;\n}\n.results {\n position: absolute;\n z-index: var(--office-z-popover);\n top: calc(100% + var(--office-space-1));\n right: 0;\n left: 0;\n max-height: var(--office-title-bar-results-max-height);\n overflow-y: auto;\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-lg);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n.heading {\n padding: var(--office-space-1-5) var(--office-space-3);\n color: var(--office-muted-foreground);\n font-size: var(--office-font-size-2xs);\n font-weight: var(--office-font-weight-bold);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.empty {\n padding: var(--office-space-2) var(--office-space-3);\n color: var(--office-muted-foreground);\n}\n.results button {\n display: flex;\n width: 100%;\n justify-content: flex-start;\n gap: var(--office-space-2);\n padding: var(--office-space-1-5) var(--office-space-3);\n border-radius: 0;\n color: inherit;\n text-align: start;\n}\n.results button:hover,\n.results button[aria-selected='true'] {\n background: var(--office-selected);\n}\n.results .cat {\n margin-inline-start: auto;\n color: var(--office-muted-foreground);\n font-size: var(--office-font-size-2xs);\n text-transform: capitalize;\n}\n.results .content {\n border-top: var(--office-border-width) solid var(--office-border);\n}\n.end {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--office-space-1);\n}\n.sr {\n position: absolute;\n width: var(--office-space-px);\n height: var(--office-space-px);\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n@media (max-width: 767px), (max-width: 1023px) and (max-height: 520px) {\n :host(:not([placement='belowRibbon'])) {\n display: none !important;\n }\n}\n@media (max-width: 1100px) {\n .qat small {\n display: none;\n }\n .name {\n max-width: var(--office-title-bar-name-max-width-narrow);\n }\n}\n@media (pointer: coarse) {\n .qat button,\n .results button {\n min-width: var(--office-target-size-touch);\n min-height: var(--office-target-size-touch);\n }\n .bar {\n height: auto;\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n .bar {\n border-bottom-color: CanvasText;\n background: Canvas;\n color: CanvasText;\n }\n .mark {\n border: var(--office-border-width) solid CanvasText;\n background: Canvas;\n color: CanvasText;\n }\n .label,\n .dot,\n .status,\n .name,\n .qat button,\n .results button {\n color: CanvasText;\n }\n .sep {\n background: CanvasText;\n }\n .qat button:hover:not(:disabled),\n .results button:hover,\n .results button[aria-selected='true'] {\n background: Highlight;\n color: HighlightText;\n }\n .qat button:disabled {\n color: GrayText;\n opacity: 1;\n }\n .results {\n border-color: CanvasText;\n background: Canvas;\n }\n button:focus-visible {\n outline-color: Highlight;\n }\n}\n";
68574
+ var title_bar_default = ":host {\n display: block;\n flex: none;\n}\n:host([data-empty]) {\n display: none !important;\n}\n[hidden] {\n display: none !important;\n}\n.bar {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--office-space-1);\n width: 100%;\n height: var(--office-title-bar-height);\n padding: 0 var(--office-space-2);\n border-bottom: var(--office-border-width) solid var(--office-title-bar-border);\n background: var(--office-title-bar-background);\n color: var(--office-title-bar-foreground);\n font: var(--office-font-size-xs)/var(--office-line-height-tight) var(--office-font);\n user-select: none;\n}\n:host([placement='belowRibbon']) .bar {\n height: auto;\n min-height: var(--office-title-bar-below-height);\n padding-block: var(--office-space-0);\n}\n.mark {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--office-title-bar-mark-size);\n height: var(--office-title-bar-mark-size);\n border-radius: var(--office-radius-sm);\n background: var(--office-title-bar-mark-background);\n color: var(--office-title-bar-mark-foreground);\n font-size: var(--office-font-size-2xs);\n font-weight: var(--office-font-weight-bold);\n}\n.autosave {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--office-space-1-5);\n padding: 0 var(--office-space-0) 0 var(--office-space-1-5);\n white-space: nowrap;\n}\n.label,\n.dot,\n.status {\n color: var(--office-muted-foreground);\n white-space: nowrap;\n}\n.sep {\n flex: none;\n width: var(--office-border-width);\n height: var(--office-space-4);\n margin: 0 var(--office-space-1);\n background: var(--office-title-bar-border);\n}\n.qat {\n display: flex;\n align-items: center;\n gap: var(--office-space-0);\n min-width: 0;\n}\n.qat button,\n.results button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--office-space-1);\n min-width: var(--office-control-height-md);\n min-height: var(--office-control-height-md);\n padding: var(--office-space-1);\n border: 0;\n border-radius: var(--office-radius-sm);\n background: transparent;\n color: var(--office-muted-foreground);\n font: inherit;\n cursor: pointer;\n touch-action: manipulation;\n}\n.qat button:hover:not(:disabled) {\n background: var(--office-selected);\n}\n.qat button:active:not(:disabled) {\n opacity: 0.7;\n}\n.qat button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n.qat small {\n font-size: var(--office-font-size-xs);\n white-space: nowrap;\n}\nsvg {\n flex: none;\n width: var(--office-icon-size);\n height: var(--office-icon-size);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--office-icon-stroke);\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.file {\n display: flex;\n align-items: baseline;\n gap: var(--office-space-1-5);\n min-width: 0;\n padding: 0 var(--office-space-1);\n flex: 0 1 auto;\n}\n.name {\n max-width: var(--office-title-bar-name-max-width);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--office-title-bar-name-foreground);\n font-size: var(--office-font-size-sm);\n font-weight: var(--office-font-weight-medium);\n}\n.status.saving {\n color: var(--office-warning);\n}\n.status.error {\n color: var(--office-danger);\n}\n.search {\n position: relative;\n flex: 1;\n display: flex;\n justify-content: center;\n min-width: 0;\n padding: 0 var(--office-space-2);\n}\n.box {\n position: relative;\n width: 100%;\n max-width: var(--office-title-bar-search-max-width);\n min-width: 0;\n}\n.box > [part='search'] {\n width: 100%;\n}\n.results {\n position: absolute;\n z-index: var(--office-z-popover);\n top: calc(100% + var(--office-space-1));\n right: 0;\n left: 0;\n max-height: var(--office-title-bar-results-max-height);\n overflow-y: auto;\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-lg);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n}\n.heading {\n padding: var(--office-space-1-5) var(--office-space-3);\n color: var(--office-muted-foreground);\n font-size: var(--office-font-size-2xs);\n font-weight: var(--office-font-weight-bold);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.empty {\n padding: var(--office-space-2) var(--office-space-3);\n color: var(--office-muted-foreground);\n}\n.results button {\n display: flex;\n width: 100%;\n justify-content: flex-start;\n gap: var(--office-space-2);\n padding: var(--office-space-1-5) var(--office-space-3);\n border-radius: 0;\n color: inherit;\n text-align: start;\n}\n.results button:hover,\n.results button[aria-selected='true'] {\n background: var(--office-title-bar-result-selected);\n}\n.results .cat {\n margin-inline-start: auto;\n color: var(--office-muted-foreground);\n font-size: var(--office-font-size-2xs);\n text-transform: capitalize;\n}\n.results .content {\n border-top: var(--office-border-width) solid var(--office-border);\n}\n.end {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--office-space-1);\n}\n.sr {\n position: absolute;\n width: var(--office-space-px);\n height: var(--office-space-px);\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n@media (max-width: 767px), (max-width: 1023px) and (max-height: 520px) {\n :host(:not([placement='belowRibbon'])) {\n display: none !important;\n }\n}\n@media (max-width: 1100px) {\n .qat small {\n display: none;\n }\n .name {\n max-width: var(--office-title-bar-name-max-width-narrow);\n }\n}\n@media (pointer: coarse) {\n .qat button,\n .results button {\n min-width: var(--office-target-size-touch);\n min-height: var(--office-target-size-touch);\n }\n .bar {\n height: auto;\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n .bar {\n border-bottom-color: CanvasText;\n background: Canvas;\n color: CanvasText;\n }\n .mark {\n border: var(--office-border-width) solid CanvasText;\n background: Canvas;\n color: CanvasText;\n }\n .label,\n .dot,\n .status,\n .name,\n .qat button,\n .results button {\n color: CanvasText;\n }\n .sep {\n background: CanvasText;\n }\n .qat button:hover:not(:disabled),\n .results button:hover,\n .results button[aria-selected='true'] {\n background: Highlight;\n color: HighlightText;\n }\n .qat button:disabled {\n color: GrayText;\n opacity: 1;\n }\n .results {\n border-color: CanvasText;\n background: Canvas;\n }\n button:focus-visible {\n outline-color: Highlight;\n }\n}\n";
68314
68575
 
68315
68576
  // src/chrome/title-bar.ts
68316
68577
  var EMPTY = { fileName: "" };
@@ -68590,59 +68851,6 @@ var defineTitleBar = definer("office-ui-title-bar", () => OfficeUiTitleBar, [
68590
68851
  defineSwitch
68591
68852
  ]);
68592
68853
 
68593
- // src/pptx/web-components/status-bar-styles.ts
68594
- var STATUS_BAR_BRIDGE = `
68595
- :host {
68596
- --office-status-bar-height: ${STATUS_BAR_METRICS.height}px;
68597
- --office-surface: color-mix(in srgb, var(--pptx-secondary, #1e1e2e) 50%, transparent);
68598
- --office-border: var(--pptx-border, #33334d);
68599
- --office-foreground: var(--pptx-card-foreground, #e2e8f0);
68600
- --office-font-size-xs: 10px;
68601
- --office-control-height-xs: 24px;
68602
- --office-icon-stroke: 1.45;
68603
- --office-warning: #facc15;
68604
- --office-danger: #f87171;
68605
- }
68606
- .bar { font: 10px/1.2 system-ui, sans-serif; }
68607
- .sep, .item + .item::before { opacity: .6; }
68608
- .zoom-fit { min-width: 3rem; padding: 2px 6px; }
68609
- `;
68610
-
68611
- // src/pptx/web-components/title-bar-styles.ts
68612
- var TITLE_BAR_BRIDGE = `
68613
- :host {
68614
- --office-title-bar-height: ${TITLE_BAR_METRICS.height}px;
68615
- --office-title-bar-background: color-mix(in srgb, var(--pptx-secondary, #1e1e2e) 80%, transparent);
68616
- --office-title-bar-foreground: var(--pptx-card-foreground, #e2e8f0);
68617
- --office-title-bar-border: color-mix(in srgb, var(--pptx-border, #33334d) 60%, transparent);
68618
- --office-title-bar-mark-size: ${TITLE_BAR_METRICS.logoSize}px;
68619
- --office-title-bar-mark-background: ${TITLE_BAR_METRICS.logoBackground};
68620
- --office-title-bar-mark-foreground: #fff;
68621
- --office-font-size-xs: ${TITLE_BAR_METRICS.fontSize}px;
68622
- --office-font-size-sm: ${TITLE_BAR_METRICS.fileNameFontSize}px;
68623
- --office-font-size-2xs: ${TITLE_BAR_METRICS.logoFontSize}px;
68624
- --office-font-weight-medium: ${TITLE_BAR_METRICS.fileNameFontWeight};
68625
- --office-icon-size: 14px;
68626
- --office-icon-stroke: 1.4;
68627
- --office-control-height-md: 24px;
68628
- --office-selected: color-mix(in srgb, var(--pptx-accent, #33334d) 60%, transparent);
68629
- --office-warning: #eab308;
68630
- --office-danger: #f87171;
68631
- --office-popover: var(--pptx-popover, var(--pptx-card, #1e1e2e));
68632
- --office-shadow-lg: 0 14px 28px rgb(0 0 0 / 40%);
68633
- }
68634
- .results button[aria-selected="true"], .results button:hover { background: var(--pptx-accent, #33334d); }
68635
- .name { color: var(--pptx-foreground, #f1f5f9); }
68636
- .switch {
68637
- --pptx-switch-width: ${TITLE_BAR_METRICS.switchTrackWidth}px; --pptx-switch-height: ${TITLE_BAR_METRICS.switchTrackHeight}px;
68638
- --pptx-switch-knob-size: ${TITLE_BAR_METRICS.switchKnobSize}px; --pptx-switch-knob-offset: ${TITLE_BAR_METRICS.switchKnobOffsetOff}px;
68639
- --pptx-switch-knob-travel: ${TITLE_BAR_METRICS.switchKnobOffsetOn - TITLE_BAR_METRICS.switchKnobOffsetOff}px;
68640
- --pptx-switch-track: color-mix(in srgb, var(--pptx-muted-foreground, #a5a5b5) 40%, transparent);
68641
- --pptx-switch-thumb: #fff;
68642
- }
68643
- @media (max-width: 767px), (max-width: 1023px) and (max-height: 520px) { :host { display: none !important; } }
68644
- `;
68645
-
68646
68854
  // src/pptx/web-components/office-token-bridge.ts
68647
68855
  var BASE = `
68648
68856
  --office-font: system-ui, sans-serif;
@@ -68700,9 +68908,53 @@ var BASE = `
68700
68908
  --office-switch-thumb: ${tok("--pptx-switch-thumb")};
68701
68909
  --office-switch-thumb-on: ${tok("--pptx-switch-thumb")};
68702
68910
  `;
68911
+ var TITLE_BAR = `:host {
68912
+ --office-title-bar-height: ${TITLE_BAR_METRICS.height}px;
68913
+ --office-title-bar-background: color-mix(in srgb, var(--pptx-secondary, #1e1e2e) 80%, transparent);
68914
+ --office-title-bar-foreground: var(--pptx-card-foreground, #e2e8f0);
68915
+ --office-title-bar-name-foreground: var(--pptx-foreground, #f1f5f9);
68916
+ --office-title-bar-border: color-mix(in srgb, var(--pptx-border, #33334d) 60%, transparent);
68917
+ --office-title-bar-mark-size: ${TITLE_BAR_METRICS.logoSize}px;
68918
+ --office-title-bar-mark-background: ${TITLE_BAR_METRICS.logoBackground};
68919
+ --office-title-bar-mark-foreground: #fff;
68920
+ --office-title-bar-result-selected: var(--pptx-accent, #33334d);
68921
+ --office-font-size-xs: ${TITLE_BAR_METRICS.fontSize}px;
68922
+ --office-font-size-sm: ${TITLE_BAR_METRICS.fileNameFontSize}px;
68923
+ --office-font-size-2xs: ${TITLE_BAR_METRICS.logoFontSize}px;
68924
+ --office-font-weight-medium: ${TITLE_BAR_METRICS.fileNameFontWeight};
68925
+ --office-icon-size: 14px;
68926
+ --office-icon-stroke: 1.4;
68927
+ --office-control-height-md: 24px;
68928
+ --office-selected: color-mix(in srgb, var(--pptx-accent, #33334d) 60%, transparent);
68929
+ --office-warning: #eab308;
68930
+ --office-danger: #f87171;
68931
+ --office-popover: var(--pptx-popover, var(--pptx-card, #1e1e2e));
68932
+ --office-shadow-lg: 0 14px 28px rgb(0 0 0 / 40%);
68933
+ --pptx-switch-width: ${TITLE_BAR_METRICS.switchTrackWidth}px;
68934
+ --pptx-switch-height: ${TITLE_BAR_METRICS.switchTrackHeight}px;
68935
+ --pptx-switch-knob-size: ${TITLE_BAR_METRICS.switchKnobSize}px;
68936
+ --pptx-switch-knob-offset: ${TITLE_BAR_METRICS.switchKnobOffsetOff}px;
68937
+ --pptx-switch-knob-travel: ${TITLE_BAR_METRICS.switchKnobOffsetOn - TITLE_BAR_METRICS.switchKnobOffsetOff}px;
68938
+ --pptx-switch-track: color-mix(in srgb, var(--pptx-muted-foreground, #a5a5b5) 40%, transparent);
68939
+ --pptx-switch-thumb: #fff;
68940
+ }
68941
+ @media (max-width: 767px), (max-width: 1023px) and (max-height: 520px) { :host { display: none !important; } }`;
68942
+ var STATUS_BAR = `:host {
68943
+ --office-status-bar-height: ${STATUS_BAR_METRICS.height}px;
68944
+ --office-status-bar-separator-opacity: 0.6;
68945
+ --office-surface: color-mix(in srgb, var(--pptx-secondary, #1e1e2e) 50%, transparent);
68946
+ --office-border: var(--pptx-border, #33334d);
68947
+ --office-foreground: var(--pptx-card-foreground, #e2e8f0);
68948
+ --office-font-size-xs: 10px;
68949
+ --office-control-height-xs: 24px;
68950
+ --office-icon-stroke: 1.45;
68951
+ --office-warning: #facc15;
68952
+ --office-danger: #f87171;
68953
+ line-height: 1.2;
68954
+ }`;
68703
68955
  var EXTRAS = {
68704
- "pptx-ui-title-bar": TITLE_BAR_BRIDGE,
68705
- "pptx-ui-status-bar": STATUS_BAR_BRIDGE,
68956
+ "pptx-ui-title-bar": TITLE_BAR,
68957
+ "pptx-ui-status-bar": STATUS_BAR,
68706
68958
  "pptx-ui-ribbon-gallery": `:host { --office-foreground: var(--pptx-foreground, #f9fafb); --office-background: var(--pptx-background, #111827);
68707
68959
  --office-gallery-strip-background: color-mix(in srgb, var(--pptx-muted, #2a2a3d) 30%, transparent);
68708
68960
  --office-command-icon-color: var(--pptx-primary, #6366f1); --office-z-popover: 1200;
@@ -68720,6 +68972,9 @@ var EXTRAS = {
68720
68972
  --office-launcher-inset-end: -2px; --office-launcher-inset-bottom: 1px; --office-launcher-width: 14px;
68721
68973
  --office-launcher-height: 14px; --office-ribbon-collapse-x: var(--pptx-collapse-x, 8px);
68722
68974
  --office-ribbon-collapse-y: var(--pptx-collapse-y, 120px); }`,
68975
+ // The tab row's Comments and Share at the pptx tab-row scale (11px labels, 24px controls).
68976
+ "pptx-ui-ribbon-actions": `:host { --office-font-size: 11px; --office-control-height-md: 24px;
68977
+ --office-icon-size-md: 14px; --office-font-size-2xs: 8px; padding-inline-start: 0; }`,
68723
68978
  "pptx-ui-context-menu": `:host { --office-menu-min-width: 180px; --office-danger: var(--pptx-destructive, #f87171);
68724
68979
  --office-selected: var(--pptx-accent, #33334d); --office-radius-md: var(--pptx-radius, 6px); }`
68725
68980
  };
@@ -72930,6 +73185,39 @@ function definePptxStatusBar(registry2) {
72930
73185
  registry2.define("pptx-ui-status-bar", PptxStatusBar);
72931
73186
  }
72932
73187
 
73188
+ // src/pptx/web-components/ribbon-actions.ts
73189
+ function definePptxRibbonActions(registry2) {
73190
+ if (registry2.get("pptx-ui-ribbon-actions")) {
73191
+ return;
73192
+ }
73193
+ defineRibbonActions(registry2);
73194
+ const Base = registry2.get("office-ui-ribbon-actions");
73195
+ class PptxRibbonActions extends Base {
73196
+ static commentsEvent = "comments-toggle";
73197
+ static shareEvent = "share-request";
73198
+ #model;
73199
+ constructor() {
73200
+ super();
73201
+ if (this.shadowRoot) {
73202
+ attachControlStyles(this.shadowRoot, bridgeCss("pptx-ui-ribbon-actions"));
73203
+ }
73204
+ }
73205
+ get state() {
73206
+ return this.#model;
73207
+ }
73208
+ set state(value) {
73209
+ this.#model = value;
73210
+ if (value) {
73211
+ Object.assign(this, value);
73212
+ }
73213
+ }
73214
+ }
73215
+ registry2.define(
73216
+ "pptx-ui-ribbon-actions",
73217
+ PptxRibbonActions
73218
+ );
73219
+ }
73220
+
72933
73221
  // src/pptx/web-components/subtitle-settings-styles.ts
72934
73222
  var SUBTITLE_SETTINGS_STYLES = `
72935
73223
  :host { display: inline-flex; }
@@ -73997,6 +74285,7 @@ var controls = [
73997
74285
  ["pptx-ui-ribbon-gallery", definePptxRibbonGallery],
73998
74286
  ["pptx-ui-ribbon-toggle", definePptxRibbonToggle],
73999
74287
  ["pptx-ui-status-bar", definePptxStatusBar],
74288
+ ["pptx-ui-ribbon-actions", definePptxRibbonActions],
74000
74289
  ["pptx-ui-notes-toolbar", definePptxNotesToolbar],
74001
74290
  ["pptx-ui-context-menu", definePptxContextMenu],
74002
74291
  ["pptx-ui-subtitle-settings", definePptxSubtitleSettings],
@@ -74127,7 +74416,7 @@ function applyChart3DDrag(bridge, detail) {
74127
74416
  return;
74128
74417
  }
74129
74418
  bridge.commitChartData(
74130
- chunkCJU4P5FT_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74419
+ chunkWKLHJEPD_cjs.withChartPointValue(bridge.chartData, part.seriesIndex, part.pointIndex, value)
74131
74420
  );
74132
74421
  }
74133
74422
  function detailOf(event) {
@@ -74604,7 +74893,7 @@ function calculateNotesPageLayout(slideWidth, slideHeight) {
74604
74893
  };
74605
74894
  }
74606
74895
  function wrapNotesText(text3, maxWidth, fontSize) {
74607
- return chunkAIL3BNZS_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
74896
+ return chunkIURZJAWP_cjs.wrapTextByEstimatedWidth(text3, maxWidth, fontSize, { keepBlankLines: true });
74608
74897
  }
74609
74898
  function calculateContinuationPageMaxLines() {
74610
74899
  const contentHeight = NOTES_PAGE_H - 2 * NOTES_MARGIN;
@@ -76116,6 +76405,22 @@ Object.defineProperty(exports, "withChartUserShapeUpdated", {
76116
76405
  enumerable: true,
76117
76406
  get: function () { return chartUserShapeEdit.withChartUserShapeUpdated; }
76118
76407
  });
76408
+ Object.defineProperty(exports, "bulletIndentPx", {
76409
+ enumerable: true,
76410
+ get: function () { return bulletList.bulletIndentPx; }
76411
+ });
76412
+ Object.defineProperty(exports, "resolveParagraphBullet", {
76413
+ enumerable: true,
76414
+ get: function () { return bulletList.resolveParagraphBullet; }
76415
+ });
76416
+ Object.defineProperty(exports, "resolveParagraphIndent", {
76417
+ enumerable: true,
76418
+ get: function () { return bulletList.resolveParagraphIndent; }
76419
+ });
76420
+ Object.defineProperty(exports, "resolvePictureBullet", {
76421
+ enumerable: true,
76422
+ get: function () { return bulletList.resolvePictureBullet; }
76423
+ });
76119
76424
  Object.defineProperty(exports, "canMergeCells", {
76120
76425
  enumerable: true,
76121
76426
  get: function () { return tableMerge.canMergeCells; }
@@ -76176,6 +76481,10 @@ Object.defineProperty(exports, "setCellText", {
76176
76481
  enumerable: true,
76177
76482
  get: function () { return tableCellEdit.setCellText; }
76178
76483
  });
76484
+ Object.defineProperty(exports, "withCellStyle", {
76485
+ enumerable: true,
76486
+ get: function () { return tableCellEdit.withCellStyle; }
76487
+ });
76179
76488
  Object.defineProperty(exports, "withCellText", {
76180
76489
  enumerable: true,
76181
76490
  get: function () { return tableCellEdit.withCellText; }
@@ -76512,22 +76821,6 @@ Object.defineProperty(exports, "romanNumeral", {
76512
76821
  enumerable: true,
76513
76822
  get: function () { return bulletAutonum.romanNumeral; }
76514
76823
  });
76515
- Object.defineProperty(exports, "bulletIndentPx", {
76516
- enumerable: true,
76517
- get: function () { return bulletList.bulletIndentPx; }
76518
- });
76519
- Object.defineProperty(exports, "resolveParagraphBullet", {
76520
- enumerable: true,
76521
- get: function () { return bulletList.resolveParagraphBullet; }
76522
- });
76523
- Object.defineProperty(exports, "resolveParagraphIndent", {
76524
- enumerable: true,
76525
- get: function () { return bulletList.resolveParagraphIndent; }
76526
- });
76527
- Object.defineProperty(exports, "resolvePictureBullet", {
76528
- enumerable: true,
76529
- get: function () { return bulletList.resolvePictureBullet; }
76530
- });
76531
76824
  Object.defineProperty(exports, "THEME_COLOR_LABELS", {
76532
76825
  enumerable: true,
76533
76826
  get: function () { return textTheme.THEME_COLOR_LABELS; }
@@ -77861,6 +78154,7 @@ exports.buildSvgGradientDef = buildSvgGradientDef;
77861
78154
  exports.buildSvgStrokeGradientDef = buildSvgStrokeGradientDef;
77862
78155
  exports.buildSvgStrokePatternDef = buildSvgStrokePatternDef;
77863
78156
  exports.buildTabContext = buildTabContext;
78157
+ exports.buildTabRowActionsState = buildTabRowActionsState;
77864
78158
  exports.buildTableDataGrid = buildTableDataGrid;
77865
78159
  exports.buildTextBlockStyle = buildTextBlockStyle;
77866
78160
  exports.buildTextBlurFilter = buildTextBlurFilter;
@@ -77920,6 +78214,7 @@ exports.cascadeDownPath = cascadeDownPath;
77920
78214
  exports.cascadeUpPath = cascadeUpPath;
77921
78215
  exports.cell3DBevelCss = cell3DBevelCss;
77922
78216
  exports.cellImageFillCss = cellImageFillCss;
78217
+ exports.cellParagraphBlocks = cellParagraphBlocks;
77923
78218
  exports.cellPatternFillCss = cellPatternFillCss;
77924
78219
  exports.cellRunStyle = cellRunStyle;
77925
78220
  exports.cellStyleToCss = cellStyleToCss;
@@ -77932,6 +78227,7 @@ exports.chartAxisTitlesState = chartAxisTitlesState;
77932
78227
  exports.chartDataLabelsTogglePatch = chartDataLabelsTogglePatch;
77933
78228
  exports.chartEventPathElements = chartEventPathElements;
77934
78229
  exports.chartPlaceholderLabel = chartPlaceholderLabel;
78230
+ exports.chartStylePresetPalette = chartStylePresetPalette;
77935
78231
  exports.chartThreeViewSpec = chartThreeViewSpec;
77936
78232
  exports.checkModifyPassword = checkModifyPassword;
77937
78233
  exports.checkerboardDecl = checkerboardDecl;
@@ -78109,6 +78405,7 @@ exports.cropResetState = cropResetState;
78109
78405
  exports.cropSessionChanged = cropSessionChanged;
78110
78406
  exports.cropToAspectRatio = cropToAspectRatio;
78111
78407
  exports.cropUpdateFromRects = cropUpdateFromRects;
78408
+ exports.cssCdata = cssCdata;
78112
78409
  exports.cssEasingForAccelDecel = cssEasingForAccelDecel;
78113
78410
  exports.cssEasingForTimingCurve = cssEasingForTimingCurve;
78114
78411
  exports.cssKeyframeName = cssKeyframeName;
@@ -79333,6 +79630,7 @@ exports.svgToDataUrl = svgToDataUrl;
79333
79630
  exports.swapPresentationWindows = swapPresentationWindows;
79334
79631
  exports.switchSmartArtLayoutData = switchSmartArtLayoutData;
79335
79632
  exports.syncGoogleWebfontStylesheet = syncGoogleWebfontStylesheet;
79633
+ exports.tabRowActionsAttributes = tabRowActionsAttributes;
79336
79634
  exports.tableCellCss = tableCellCss;
79337
79635
  exports.tableCellFillColorCommitPatch = tableCellFillColorCommitPatch;
79338
79636
  exports.tableCellPointerIntent = tableCellPointerIntent;