ooxml-ui 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -0
  2. package/custom-elements.json +34 -0
  3. package/dist/{chunk-Y67BTA5W.js → chunk-5ZFOSFCK.js} +3 -2
  4. package/dist/{chunk-A277D2OJ.js → chunk-S736N64L.js} +1 -1
  5. package/dist/{chunk-DQEV4EMA.js → chunk-SC44SOIS.js} +122 -2
  6. package/dist/{chunk-4AARUBIF.js → chunk-X5XR45BK.js} +1 -1
  7. package/dist/controls.d.ts +4 -2
  8. package/dist/controls.d.ts.map +1 -1
  9. package/dist/controls.js +1 -1
  10. package/dist/dialog/progress-dialog.d.ts +42 -0
  11. package/dist/dialog/progress-dialog.d.ts.map +1 -0
  12. package/dist/docx.js +13 -7
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +4 -4
  15. package/dist/pptx/{chunk-SQQJLXTZ.cjs → chunk-4TFSELNQ.cjs} +323 -48
  16. package/dist/pptx/{chunk-ZO43VVWQ.cjs → chunk-J642EKDV.cjs} +48 -0
  17. package/dist/pptx/{chunk-3UOENEK7.mjs → chunk-QTLP3MX7.mjs} +305 -39
  18. package/dist/pptx/{chunk-B5FR65LB.mjs → chunk-SCURBCNQ.mjs} +47 -1
  19. package/dist/pptx/dom/index.cjs +220 -220
  20. package/dist/pptx/dom/index.mjs +3 -3
  21. package/dist/pptx/export/html2canvas-clone.cjs +10 -2
  22. package/dist/pptx/export/html2canvas-clone.d.ts +24 -0
  23. package/dist/pptx/export/html2canvas-clone.d.ts.map +1 -1
  24. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  25. package/dist/pptx/index.cjs +2994 -2950
  26. package/dist/pptx/index.mjs +2 -2
  27. package/dist/pptx/render/export-progress.d.ts +12 -0
  28. package/dist/pptx/render/export-progress.d.ts.map +1 -1
  29. package/dist/pptx/render/index.d.ts +1 -0
  30. package/dist/pptx/render/index.d.ts.map +1 -1
  31. package/dist/pptx/render/read-only-session.d.ts +120 -0
  32. package/dist/pptx/render/read-only-session.d.ts.map +1 -0
  33. package/dist/pptx/web-components/index.d.ts +1 -0
  34. package/dist/pptx/web-components/index.d.ts.map +1 -1
  35. package/dist/pptx/web-components/office-alias-types.d.ts +6 -1
  36. package/dist/pptx/web-components/office-alias-types.d.ts.map +1 -1
  37. package/dist/pptx/web-components/office-aliases.d.ts +5 -0
  38. package/dist/pptx/web-components/office-aliases.d.ts.map +1 -1
  39. package/dist/pptx/web-components/office-token-bridge.d.ts +1 -1
  40. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  41. package/dist/teams.js +2 -2
  42. package/dist/visio.js +3 -3
  43. package/dist/xlsx.js +6 -6
  44. package/package.json +2 -2
@@ -15,7 +15,7 @@ var chunkW3X2UVYQ_cjs = require('./chunk-W3X2UVYQ.cjs');
15
15
  var chunkG3UVZ5FO_cjs = require('./chunk-G3UVZ5FO.cjs');
16
16
  var chunkFOE75Z6N_cjs = require('./chunk-FOE75Z6N.cjs');
17
17
  var chunkNTXHQHCS_cjs = require('./chunk-NTXHQHCS.cjs');
18
- var chunkZO43VVWQ_cjs = require('./chunk-ZO43VVWQ.cjs');
18
+ var chunkJ642EKDV_cjs = require('./chunk-J642EKDV.cjs');
19
19
  var chunkX4FNVH7J_cjs = require('./chunk-X4FNVH7J.cjs');
20
20
  var chunkUPN5FFKP_cjs = require('./chunk-UPN5FFKP.cjs');
21
21
  var chunkOJFD3SHS_cjs = require('./chunk-OJFD3SHS.cjs');
@@ -1499,12 +1499,12 @@ function getPresetShapeVectorGeometry(shapeType, width, height, adjustments) {
1499
1499
  function outlineStrands(compoundLine, strokeWidth) {
1500
1500
  const offsets2 = getCompoundLineOffsets(compoundLine, strokeWidth);
1501
1501
  if (offsets2.length <= 1) {
1502
- return [{ strokeWidth, cssStrokeWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1502
+ return [{ strokeWidth, cssStrokeWidth: chunkJ642EKDV_cjs.screenStrokeWidth(strokeWidth), offset: 0 }];
1503
1503
  }
1504
1504
  const widths = getCompoundLineWidths(compoundLine, strokeWidth);
1505
1505
  return offsets2.map((offset, idx) => {
1506
1506
  const width = widths[idx] ?? strokeWidth;
1507
- return { strokeWidth: width, cssStrokeWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(width), offset };
1507
+ return { strokeWidth: width, cssStrokeWidth: chunkJ642EKDV_cjs.screenStrokeWidth(width), offset };
1508
1508
  });
1509
1509
  }
1510
1510
  function needsCenteredStrokeOverlay(element, style, declaredWidth) {
@@ -2203,10 +2203,10 @@ function getComputedStrokeStyle(element) {
2203
2203
  const borderColor = style.strokeOpacity === void 0 ? rawColor : chunkG3UVZ5FO_cjs.colorWithOpacity(chunkG3UVZ5FO_cjs.normalizeHexColor(rawColor, chunkG3UVZ5FO_cjs.DEFAULT_STROKE_COLOR), style.strokeOpacity);
2204
2204
  return {
2205
2205
  borderWidth,
2206
- cssBorderWidth: chunkZO43VVWQ_cjs.screenStrokeWidth(borderWidth),
2206
+ cssBorderWidth: chunkJ642EKDV_cjs.screenStrokeWidth(borderWidth),
2207
2207
  borderStyle,
2208
2208
  borderColor,
2209
- border: chunkZO43VVWQ_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
2209
+ border: chunkJ642EKDV_cjs.screenBorder(borderWidth, borderStyle ?? "solid", borderColor),
2210
2210
  ...joins
2211
2211
  };
2212
2212
  }
@@ -2353,14 +2353,14 @@ function tileAlignmentPercentages(alignment) {
2353
2353
  return { x: 0, y: 0 };
2354
2354
  }
2355
2355
  }
2356
- function tileAxisPosition(percent3, offsetPx) {
2356
+ function tileAxisPosition(percent4, offsetPx) {
2357
2357
  if (offsetPx === 0) {
2358
- return `${percent3}%`;
2358
+ return `${percent4}%`;
2359
2359
  }
2360
- if (percent3 === 0) {
2360
+ if (percent4 === 0) {
2361
2361
  return `${offsetPx}px`;
2362
2362
  }
2363
- return `calc(${percent3}% + ${offsetPx}px)`;
2363
+ return `calc(${percent4}% + ${offsetPx}px)`;
2364
2364
  }
2365
2365
  function buildMirrorTiledBackground(src, flip, scaleX, scaleY, nativeSize) {
2366
2366
  if (!src.startsWith("data:")) {
@@ -15663,10 +15663,10 @@ function createAttributeTransformModel(anim, box) {
15663
15663
  }
15664
15664
 
15665
15665
  // src/pptx/render/animation-transform-keyframes.ts
15666
- function slideOffset(percent3, axis, origin) {
15666
+ function slideOffset(percent4, axis, origin) {
15667
15667
  const fallback = axis === "w" ? "1280px" : "720px";
15668
15668
  const varName = origin === "parent" ? `--pptx-parent-${axis}` : `--pptx-slide-${axis}`;
15669
- return `calc(var(${varName}, ${fallback}) * ${(percent3 / 100).toFixed(4)})`;
15669
+ return `calc(var(${varName}, ${fallback}) * ${(percent4 / 100).toFixed(4)})`;
15670
15670
  }
15671
15671
  function hasRotation(anim) {
15672
15672
  return anim.rotationBy !== void 0 || anim.rotationFrom !== void 0 || anim.rotationTo !== void 0;
@@ -19627,10 +19627,10 @@ function buildMotionPathKeyframes(args) {
19627
19627
  return void 0;
19628
19628
  }
19629
19629
  const frames = points.map((point, index) => {
19630
- const percent3 = Math.round(index / (points.length - 1) * 100);
19630
+ const percent4 = Math.round(index / (points.length - 1) * 100);
19631
19631
  const x = trimNumber(point.x * args.slideWidth);
19632
19632
  const y = trimNumber(point.y * args.slideHeight);
19633
- return ` ${percent3}% { transform: translate(${x}px, ${y}px); }`;
19633
+ return ` ${percent4}% { transform: translate(${x}px, ${y}px); }`;
19634
19634
  });
19635
19635
  return {
19636
19636
  keyframeName: args.keyframeName,
@@ -22075,7 +22075,7 @@ function borderToCss(border, resolve) {
22075
22075
  const width = border.width ?? 1;
22076
22076
  const dash = ooxmlDashToCssBorderStyle(border.dash);
22077
22077
  const color = border.color ?? resolve(border.fill) ?? "#000000";
22078
- return chunkZO43VVWQ_cjs.screenBorder(width, dash, color);
22078
+ return chunkJ642EKDV_cjs.screenBorder(width, dash, color);
22079
22079
  }
22080
22080
  function collectSections(entry6, tableData, pos) {
22081
22081
  const { rowIndex, cellIndex, rowCount, columnCount } = pos;
@@ -23540,7 +23540,7 @@ function cellStyleToCss(style) {
23540
23540
  const w = edge.width ?? 1;
23541
23541
  const c = edge.color ?? style.borderColor ?? "#000000";
23542
23542
  const s = ooxmlDashToCssBorderStyle(edge.dash);
23543
- css[edge.prefix] = chunkZO43VVWQ_cjs.screenBorder(w, s, c);
23543
+ css[edge.prefix] = chunkJ642EKDV_cjs.screenBorder(w, s, c);
23544
23544
  }
23545
23545
  }
23546
23546
  Object.assign(css, cellPaddingCss(style));
@@ -31023,11 +31023,11 @@ function sampleImageCropMorphSteps(fromElement, toElement) {
31023
31023
  for (const key of keys) {
31024
31024
  insets[key] = from[key] + (to[key] - from[key]) * progress;
31025
31025
  }
31026
- const percent3 = Math.round(time * 100 * 1e4) / 1e4;
31026
+ const percent4 = Math.round(time * 100 * 1e4) / 1e4;
31027
31027
  const { placement, crop } = fitTransformsFromInsets(insets);
31028
31028
  const identity8 = "translate(0%, 0%) scale(1, 1)";
31029
31029
  const transform = step === CROP_TRACK_STEPS ? buildImageFitTransform(toElement, true) : `${placement || identity8} ${crop || identity8}`;
31030
- samples.push({ percent: `${percent3}%`, progress, transform });
31030
+ samples.push({ percent: `${percent4}%`, progress, transform });
31031
31031
  }
31032
31032
  return samples;
31033
31033
  }
@@ -44079,11 +44079,11 @@ function zoomOutScale(scale2) {
44079
44079
  }
44080
44080
  var ZOOM_MIN_PERCENT = MIN_ZOOM_SCALE * 100;
44081
44081
  var ZOOM_MAX_PERCENT = MAX_ZOOM_SCALE * 100;
44082
- function zoomInPercent(percent3) {
44083
- return Math.round(zoomInScale(percent3 / 100) * 100);
44082
+ function zoomInPercent(percent4) {
44083
+ return Math.round(zoomInScale(percent4 / 100) * 100);
44084
44084
  }
44085
- function zoomOutPercent(percent3) {
44086
- return Math.round(zoomOutScale(percent3 / 100) * 100);
44085
+ function zoomOutPercent(percent4) {
44086
+ return Math.round(zoomOutScale(percent4 / 100) * 100);
44087
44087
  }
44088
44088
 
44089
44089
  // src/pptx/render/viewer-zoom-store.ts
@@ -58178,14 +58178,14 @@ function resolveAccentHex(themeColorMap, slot) {
58178
58178
 
58179
58179
  // src/pptx/render/ribbon-galleries/picture-color-gallery.ts
58180
58180
  var KEY2 = "pptx.gallery.pictureColor";
58181
- function saturationPreset(percent3) {
58182
- const sat = percent3 * 1e3;
58183
- const normal = percent3 === NEUTRAL_SATURATION_PERCENT;
58181
+ function saturationPreset(percent4) {
58182
+ const sat = percent4 * 1e3;
58183
+ const normal = percent4 === NEUTRAL_SATURATION_PERCENT;
58184
58184
  return {
58185
- id: normal ? "saturationNormal" : `saturation${percent3}`,
58185
+ id: normal ? "saturationNormal" : `saturation${percent4}`,
58186
58186
  labelKey: normal ? `${KEY2}.saturationNormal` : `${KEY2}.saturation`,
58187
- ...!normal && { labelParams: { amount: percent3 } },
58188
- label: normal ? "Saturation: 100% (Normal)" : `Saturation: ${percent3}%`,
58187
+ ...!normal && { labelParams: { amount: percent4 } },
58188
+ label: normal ? "Saturation: 100% (Normal)" : `Saturation: ${percent4}%`,
58189
58189
  changes: () => ({ colorSaturation: normal ? void 0 : { sat } }),
58190
58190
  applied: (fx) => (fx.colorSaturation?.sat ?? NEUTRAL_SATURATION_PERCENT * 1e3) === sat,
58191
58191
  preview: { css: getImageCorrectionsFilterTokens({ colorSaturation: { sat } }).join(" ") }
@@ -58253,14 +58253,14 @@ function recolorPresets(themeColorMap) {
58253
58253
  applied: isWashout,
58254
58254
  preview: { css: "brightness(1.7) contrast(0.3)" }
58255
58255
  };
58256
- const biLevels = BI_LEVEL_THRESHOLDS.map((percent3) => ({
58257
- id: `recolorBlackWhite${percent3}`,
58256
+ const biLevels = BI_LEVEL_THRESHOLDS.map((percent4) => ({
58257
+ id: `recolorBlackWhite${percent4}`,
58258
58258
  labelKey: `${KEY2}.recolorBlackWhite`,
58259
- labelParams: { amount: percent3 },
58260
- label: `Black and White: ${percent3}%`,
58261
- changes: (fx) => ({ ...recolorReset(fx), biLevel: percent3 }),
58262
- applied: (fx) => fx.biLevel === percent3,
58263
- preview: { threshold: percent3 }
58259
+ labelParams: { amount: percent4 },
58260
+ label: `Black and White: ${percent4}%`,
58261
+ changes: (fx) => ({ ...recolorReset(fx), biLevel: percent4 }),
58262
+ applied: (fx) => fx.biLevel === percent4,
58263
+ preview: { threshold: percent4 }
58264
58264
  }));
58265
58265
  const accents = RECOLOR_ACCENTS.flatMap((slot, index) => {
58266
58266
  const hex2 = resolveAccentHex(themeColorMap, slot);
@@ -58318,20 +58318,20 @@ var PICTURE_COLOR_GALLERY = adjustGalleryModule(
58318
58318
 
58319
58319
  // src/pptx/render/ribbon-galleries/picture-corrections-gallery.ts
58320
58320
  var KEY3 = "pptx.gallery.pictureCorrections";
58321
- function sharpenPreset(percent3) {
58322
- const amount = percent3 * 1e3;
58323
- const abs = Math.abs(percent3);
58324
- const id = percent3 < 0 ? `soften${abs}` : percent3 > 0 ? `sharpen${abs}` : "sharpenNormal";
58325
- const css = percent3 < 0 ? getImageCorrectionsFilterTokens({ sharpenSoften: { amount } }).join(" ") : (
58321
+ function sharpenPreset(percent4) {
58322
+ const amount = percent4 * 1e3;
58323
+ const abs = Math.abs(percent4);
58324
+ const id = percent4 < 0 ? `soften${abs}` : percent4 > 0 ? `sharpen${abs}` : "sharpenNormal";
58325
+ const css = percent4 < 0 ? getImageCorrectionsFilterTokens({ sharpenSoften: { amount } }).join(" ") : (
58326
58326
  // A sharpen is an SVG convolution at render time; a contrast lift previews it.
58327
- percent3 > 0 ? `contrast(${1 + percent3 / 200})` : ""
58327
+ percent4 > 0 ? `contrast(${1 + percent4 / 200})` : ""
58328
58328
  );
58329
58329
  return {
58330
58330
  id,
58331
- labelKey: percent3 === 0 ? `${KEY3}.sharpenNormal` : `${KEY3}.${percent3 < 0 ? "soften" : "sharpen"}`,
58332
- ...percent3 !== 0 && { labelParams: { amount: abs } },
58333
- label: percent3 === 0 ? "Sharpen: 0% (Normal)" : `${percent3 < 0 ? "Soften" : "Sharpen"}: ${abs}%`,
58334
- changes: () => ({ sharpenSoften: percent3 === 0 ? void 0 : { amount } }),
58331
+ labelKey: percent4 === 0 ? `${KEY3}.sharpenNormal` : `${KEY3}.${percent4 < 0 ? "soften" : "sharpen"}`,
58332
+ ...percent4 !== 0 && { labelParams: { amount: abs } },
58333
+ label: percent4 === 0 ? "Sharpen: 0% (Normal)" : `${percent4 < 0 ? "Soften" : "Sharpen"}: ${abs}%`,
58334
+ changes: () => ({ sharpenSoften: percent4 === 0 ? void 0 : { amount } }),
58335
58335
  applied: (fx) => (fx.sharpenSoften?.amount ?? 0) === amount,
58336
58336
  preview: { css }
58337
58337
  };
@@ -65008,6 +65008,127 @@ async function checkModifyPassword(verifier, password) {
65008
65008
  }
65009
65009
  }
65010
65010
 
65011
+ // src/pptx/render/read-only-session.ts
65012
+ var INITIAL_READ_ONLY_SESSION = Object.freeze({
65013
+ bannerHidden: false,
65014
+ editAnyway: false,
65015
+ passwordPromptOpen: false,
65016
+ passwordError: null,
65017
+ checkingPassword: false,
65018
+ passwordCheck: 0
65019
+ });
65020
+ function unlocked(session) {
65021
+ return {
65022
+ ...session,
65023
+ bannerHidden: true,
65024
+ editAnyway: true,
65025
+ passwordPromptOpen: false,
65026
+ passwordError: null,
65027
+ checkingPassword: false
65028
+ };
65029
+ }
65030
+ function reduceReadOnlySession(session, event) {
65031
+ switch (event.type) {
65032
+ case "reset":
65033
+ return { ...INITIAL_READ_ONLY_SESSION, passwordCheck: session.passwordCheck + 1 };
65034
+ case "editAnyway":
65035
+ return event.requiresPassword ? { ...session, passwordPromptOpen: true, passwordError: null } : unlocked(session);
65036
+ case "dismiss":
65037
+ return session.bannerHidden ? session : { ...session, bannerHidden: true };
65038
+ case "cancelPassword":
65039
+ return {
65040
+ ...session,
65041
+ passwordPromptOpen: false,
65042
+ passwordError: null,
65043
+ checkingPassword: false,
65044
+ passwordCheck: session.passwordCheck + 1
65045
+ };
65046
+ case "checkStarted":
65047
+ return session.checkingPassword ? session : {
65048
+ ...session,
65049
+ checkingPassword: true,
65050
+ passwordCheck: session.passwordCheck + 1
65051
+ };
65052
+ case "checkFinished":
65053
+ if (!session.checkingPassword || event.check !== session.passwordCheck) {
65054
+ return session;
65055
+ }
65056
+ return event.result.ok ? unlocked(session) : { ...session, checkingPassword: false, passwordError: event.result.reason };
65057
+ }
65058
+ }
65059
+ function readOnlyLocked(recommendation, session) {
65060
+ return recommendation?.defaultReadOnly === true && !session.editAnyway;
65061
+ }
65062
+ function readOnlyBannerVisible(recommendation, session) {
65063
+ return (recommendation?.kind ?? null) !== null && !session.bannerHidden;
65064
+ }
65065
+ function readOnlyBannerState(recommendation, session, translate) {
65066
+ return {
65067
+ kind: recommendation.kind ?? null,
65068
+ messageKey: recommendation.messageKey,
65069
+ passwordPromptOpen: session.passwordPromptOpen,
65070
+ passwordError: session.passwordError,
65071
+ checkingPassword: session.checkingPassword,
65072
+ ...translate ? { translate } : {}
65073
+ };
65074
+ }
65075
+ function applyReadOnlySessionEvent(store, event) {
65076
+ const current = store.get();
65077
+ const next = reduceReadOnlySession(current, event);
65078
+ if (next !== current) {
65079
+ store.set(next);
65080
+ }
65081
+ }
65082
+ async function runReadOnlyPasswordCheck(store, verifier, password, check = checkModifyPassword) {
65083
+ const before = store.get();
65084
+ const started = reduceReadOnlySession(before, { type: "checkStarted" });
65085
+ if (started === before) {
65086
+ return;
65087
+ }
65088
+ store.set(started);
65089
+ let result;
65090
+ try {
65091
+ result = await check(verifier, password);
65092
+ } catch {
65093
+ result = { ok: false, reason: "unsupported-algorithm" };
65094
+ }
65095
+ applyReadOnlySessionEvent(store, {
65096
+ type: "checkFinished",
65097
+ check: started.passwordCheck,
65098
+ result
65099
+ });
65100
+ }
65101
+ function readOnlySessionActions(store, source) {
65102
+ const apply6 = (event) => applyReadOnlySessionEvent(store, event);
65103
+ return {
65104
+ reset: () => apply6({ type: "reset" }),
65105
+ editAnyway: () => apply6({
65106
+ type: "editAnyway",
65107
+ requiresPassword: source.recommendation()?.requiresPassword === true
65108
+ }),
65109
+ dismiss: () => apply6({ type: "dismiss" }),
65110
+ cancelPassword: () => apply6({ type: "cancelPassword" }),
65111
+ submitPassword: (password) => runReadOnlyPasswordCheck(store, source.modifyVerifier(), password)
65112
+ };
65113
+ }
65114
+ function dispatchReadOnlyBannerIntent(event, handlers) {
65115
+ const intent = event.detail;
65116
+ switch (intent?.id) {
65117
+ case "editAnyway":
65118
+ handlers.editAnyway?.();
65119
+ break;
65120
+ case "dismiss":
65121
+ handlers.dismiss?.();
65122
+ break;
65123
+ case "cancelPassword":
65124
+ handlers.cancelPassword?.();
65125
+ break;
65126
+ case "submitPassword":
65127
+ handlers.submitPassword?.(intent.password);
65128
+ break;
65129
+ }
65130
+ }
65131
+
65011
65132
  // src/pptx/render/compatibility-warning-toasts.ts
65012
65133
  var CODE_MESSAGE_KEYS = {
65013
65134
  UNMODELLED_PRESENTATION_MARKUP: "pptx.compatibility.unmodelledPresentationMarkup",
@@ -65442,14 +65563,14 @@ async function buildForeignObjectSvgBody(element, doc, options) {
65442
65563
  backgroundColor,
65443
65564
  readComputedStyle = (el) => window.getComputedStyle(el)
65444
65565
  } = options;
65445
- await chunkZO43VVWQ_cjs.settleThreeViews(element);
65566
+ await chunkJ642EKDV_cjs.settleThreeViews(element);
65446
65567
  const clone = element.cloneNode(true);
65447
- chunkZO43VVWQ_cjs.withAuthoredStrokeWidths(
65568
+ chunkJ642EKDV_cjs.withAuthoredStrokeWidths(
65448
65569
  element,
65449
65570
  () => inlineComputedStylesOnClone(element, clone, readComputedStyle)
65450
65571
  );
65451
- chunkZO43VVWQ_cjs.snapshotThreeViewsIntoClone(element, clone);
65452
- chunkZO43VVWQ_cjs.prepareExportClone(clone);
65572
+ chunkJ642EKDV_cjs.snapshotThreeViewsIntoClone(element, clone);
65573
+ chunkJ642EKDV_cjs.prepareExportClone(clone);
65453
65574
  const [{ allEmbedded: imagesEmbedded }, externalFonts] = await Promise.all([
65454
65575
  embedImagesOnClone(clone),
65455
65576
  collectExternalFontFaceCss(doc, fetchAsDataUrl)
@@ -76643,6 +76764,115 @@ var OfficeUiColorGrid = class extends OfficeElement {
76643
76764
  };
76644
76765
  var defineColorGrid = definer("office-ui-color-grid", () => OfficeUiColorGrid);
76645
76766
 
76767
+ // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/dialog/progress-dialog.css?raw
76768
+ var progress_dialog_default = ":host {\n display: none;\n position: fixed;\n inset: 0;\n /* Above popovers and the File backstage the job is started from. */\n z-index: calc(var(--office-z-popover) + 100);\n align-items: center;\n justify-content: center;\n}\n:host([open]) {\n display: flex;\n}\n.backdrop {\n position: absolute;\n inset: 0;\n background: var(--office-overlay);\n}\n.box {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--office-space-3);\n width: min(calc(100vw - 2 * var(--office-space-4)), 24rem);\n padding: var(--office-space-5);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-lg);\n background: var(--office-popover);\n color: var(--office-popover-foreground);\n box-shadow: var(--office-shadow-lg);\n font-family: var(--office-font);\n}\nh2 {\n margin: 0;\n font-size: var(--office-font-size);\n font-weight: 600;\n}\n.track {\n height: var(--office-space-2-5);\n overflow: hidden;\n border-radius: var(--office-radius-full);\n background: var(--office-selected);\n}\n.fill {\n height: 100%;\n border-radius: inherit;\n background: var(--office-accent);\n transition: width 300ms ease-out;\n}\n.row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--office-space-2);\n font-size: var(--office-font-size-xs);\n color: var(--office-muted-foreground);\n}\n.percent {\n font-variant-numeric: tabular-nums;\n}\n.actions {\n display: flex;\n justify-content: flex-end;\n}\nbutton {\n box-sizing: border-box;\n min-height: var(--office-control-height-lg);\n padding: var(--office-space-1-5) var(--office-space-3-5);\n border: var(--office-border-width) solid var(--office-border);\n border-radius: var(--office-radius-md);\n background: var(--office-surface);\n color: var(--office-foreground);\n font: 500 var(--office-font-size) / 1.2 var(--office-font);\n cursor: pointer;\n}\nbutton:hover {\n background: var(--office-selected);\n}\nbutton:focus-visible {\n outline: var(--office-focus-width) solid var(--office-ring);\n outline-offset: var(--office-focus-offset);\n}\n@media (prefers-reduced-motion: reduce) {\n .fill {\n transition: none;\n }\n}\n@media (pointer: coarse) {\n button {\n min-height: var(--office-target-size-touch);\n }\n}\n@media (forced-colors: active) {\n .fill {\n background: Highlight;\n }\n .track {\n border: var(--office-border-width) solid CanvasText;\n }\n}\n";
76769
+
76770
+ // src/dialog/progress-dialog.ts
76771
+ function percent3(value) {
76772
+ return Number.isFinite(value) ? Math.min(100, Math.max(0, Math.round(value))) : 0;
76773
+ }
76774
+ var OfficeUiProgressDialog = class extends OfficeElement {
76775
+ static cancelEvent = "office-progress-cancel";
76776
+ static testIdPrefix = "office-progress";
76777
+ static styles = controlStyles(progress_dialog_default);
76778
+ // A product subclass overrides `state` with its own accessor, so Lit is not told about it: its
76779
+ // first update would read the property before the subclass's fields exist.
76780
+ model = { open: false, title: "", progress: 0, status: "" };
76781
+ wasOpen = false;
76782
+ returnFocus = null;
76783
+ constructor() {
76784
+ super();
76785
+ this.addEventListener("keydown", (event) => this.onKey(event));
76786
+ this.addEventListener("mousedown", (event) => this.onPress(event));
76787
+ }
76788
+ get state() {
76789
+ return this.model;
76790
+ }
76791
+ set state(value) {
76792
+ this.model = value;
76793
+ this.requestUpdate("state");
76794
+ }
76795
+ get cancelButton() {
76796
+ return this.renderRoot.querySelector("button");
76797
+ }
76798
+ onKey(event) {
76799
+ if (!this.model.open) return;
76800
+ if (event.key === "Tab" || event.key === "Escape") {
76801
+ event.preventDefault();
76802
+ event.stopPropagation();
76803
+ this.cancelButton?.focus();
76804
+ }
76805
+ }
76806
+ onPress(event) {
76807
+ if (!this.model.open) return;
76808
+ const cancel = this.cancelButton;
76809
+ if (cancel && event.composedPath().includes(cancel)) return;
76810
+ event.preventDefault();
76811
+ }
76812
+ cancel() {
76813
+ this.fire(this.constructor.cancelEvent, {});
76814
+ }
76815
+ willUpdate() {
76816
+ this.toggleAttribute("open", this.model.open);
76817
+ }
76818
+ updated(_changed) {
76819
+ const open = this.model.open;
76820
+ if (open && !this.wasOpen) {
76821
+ const active2 = modalActiveElement(this.ownerDocument);
76822
+ this.returnFocus = active2 && active2 !== this.ownerDocument.body ? active2 : null;
76823
+ this.cancelButton?.focus();
76824
+ } else if (!open && this.wasOpen) {
76825
+ const target = this.returnFocus;
76826
+ this.returnFocus = null;
76827
+ target?.focus?.();
76828
+ }
76829
+ this.wasOpen = open;
76830
+ }
76831
+ render() {
76832
+ const { testIdPrefix: p } = this.constructor;
76833
+ const s = this.model;
76834
+ if (!s.open) return lit.html``;
76835
+ const value = percent3(s.progress);
76836
+ return lit.html`
76837
+ <div class="backdrop"></div>
76838
+ <div
76839
+ class="box"
76840
+ role="dialog"
76841
+ aria-modal="true"
76842
+ aria-labelledby="title"
76843
+ aria-describedby="status"
76844
+ data-testid="${p}-dialog"
76845
+ >
76846
+ <h2 id="title">${s.title}</h2>
76847
+ <div
76848
+ class="track"
76849
+ role="progressbar"
76850
+ aria-labelledby="title"
76851
+ aria-valuemin="0"
76852
+ aria-valuemax="100"
76853
+ aria-valuenow=${value}
76854
+ data-testid="${p}-bar"
76855
+ >
76856
+ <div class="fill" style="width:${value}%"></div>
76857
+ </div>
76858
+ <div class="row">
76859
+ <span id="status" aria-live="polite">${s.status}</span>
76860
+ <span class="percent" aria-hidden="true">${value}%</span>
76861
+ </div>
76862
+ <div class="actions">
76863
+ <button type="button" data-testid="${p}-cancel" @click=${() => this.cancel()}
76864
+ >${s.cancelLabel ?? "Cancel"}</button
76865
+ >
76866
+ </div>
76867
+ </div>
76868
+ `;
76869
+ }
76870
+ };
76871
+ var defineProgressDialog = definer(
76872
+ "office-ui-progress-dialog",
76873
+ () => OfficeUiProgressDialog
76874
+ );
76875
+
76646
76876
  // src/pptx/web-components/office-token-bridge.ts
76647
76877
  var BASE = `
76648
76878
  --office-ring: var(--pptx-focus-ring-color, var(--_pptx-ring));
@@ -76723,6 +76953,12 @@ var STATUS_BAR = `:host {
76723
76953
  var EXTRAS = {
76724
76954
  "pptx-ui-title-bar": TITLE_BAR,
76725
76955
  "pptx-ui-status-bar": STATUS_BAR,
76956
+ "pptx-ui-export-progress": `:host { --office-popover: var(--pptx-popover, var(--pptx-card, #1e1e2e));
76957
+ --office-popover-foreground: var(--pptx-popover-foreground, #f9fafb);
76958
+ --office-foreground: var(--pptx-foreground, #f9fafb); --office-border: var(--pptx-border, #33334d);
76959
+ --office-muted-foreground: var(--pptx-muted-foreground, #a5a5b5);
76960
+ --office-accent: var(--pptx-primary, #6366f1); --office-surface: var(--pptx-secondary, #1e1e2e);
76961
+ --office-selected: var(--pptx-muted, #2a2a3d); }`,
76726
76962
  "pptx-ui-ribbon-gallery": `:host { --office-foreground: var(--pptx-foreground, #f9fafb); --office-background: var(--pptx-background, #111827);
76727
76963
  --office-gallery-strip-background: color-mix(in srgb, var(--pptx-muted, #2a2a3d) 30%, transparent);
76728
76964
  --office-command-icon-color: var(--pptx-primary, #6366f1); --office-z-popover: 1200;
@@ -77163,6 +77399,35 @@ function definePptxContextMenu(registry2) {
77163
77399
  }
77164
77400
  );
77165
77401
  }
77402
+ function definePptxExportProgress(registry2) {
77403
+ if (registry2.get("pptx-ui-export-progress")) {
77404
+ return;
77405
+ }
77406
+ const Base = bridged(
77407
+ base(registry2, defineProgressDialog, "office-ui-progress-dialog"),
77408
+ "pptx-ui-export-progress"
77409
+ );
77410
+ class PptxExportProgress extends Base {
77411
+ static cancelEvent = "export-cancel";
77412
+ static testIdPrefix = "pptx-export-progress";
77413
+ #model = { open: false, title: "", progress: 0 };
77414
+ get state() {
77415
+ return this.#model;
77416
+ }
77417
+ set state(value) {
77418
+ this.#model = value;
77419
+ const t2 = value.translate ?? identity4;
77420
+ super.state = {
77421
+ open: value.open,
77422
+ title: value.title,
77423
+ progress: value.progress,
77424
+ status: value.status || t2("pptx.export.processing"),
77425
+ cancelLabel: t2("pptx.export.cancel")
77426
+ };
77427
+ }
77428
+ }
77429
+ registry2.define("pptx-ui-export-progress", PptxExportProgress);
77430
+ }
77166
77431
 
77167
77432
  // src/pptx/web-components/options-dialog.ts
77168
77433
  function definePptxOptionsDialog(registry2) {
@@ -82878,6 +83143,7 @@ var controls = [
82878
83143
  ["pptx-ui-present-toolbar", definePptxPresentToolbar],
82879
83144
  ["pptx-ui-presenter-console", definePptxPresenterConsole],
82880
83145
  ["pptx-ui-read-only-banner", definePptxReadOnlyBanner],
83146
+ ["pptx-ui-export-progress", definePptxExportProgress],
82881
83147
  ["pptx-ui-ribbon-command", definePptxRibbonCommand],
82882
83148
  ["pptx-ui-ribbon-animations", definePptxRibbonAnimations],
82883
83149
  ["pptx-ui-ribbon-draw", definePptxRibbonDraw],
@@ -86472,6 +86738,7 @@ exports.HOME_SELECT_ITEMS = HOME_SELECT_ITEMS;
86472
86738
  exports.HOME_SHAPE_ITEMS = HOME_SHAPE_ITEMS;
86473
86739
  exports.HOME_TEXT_DIRECTION_ITEMS = HOME_TEXT_DIRECTION_ITEMS;
86474
86740
  exports.INDENT_PX = INDENT_PX;
86741
+ exports.INITIAL_READ_ONLY_SESSION = INITIAL_READ_ONLY_SESSION;
86475
86742
  exports.INITIAL_SYNC_GRACE_MS = INITIAL_SYNC_GRACE_MS;
86476
86743
  exports.INLINE_GALLERY_TILE_COUNT = INLINE_GALLERY_TILE_COUNT;
86477
86744
  exports.INSERT_CHART_TYPES = INSERT_CHART_TYPES;
@@ -86888,6 +87155,7 @@ exports.applyOutlineEdit = applyOutlineEdit;
86888
87155
  exports.applyParagraphCommand = applyParagraphCommand;
86889
87156
  exports.applyPasteSpecialFormat = applyPasteSpecialFormat;
86890
87157
  exports.applyPreferenceToOptions = applyPreferenceToOptions;
87158
+ exports.applyReadOnlySessionEvent = applyReadOnlySessionEvent;
86891
87159
  exports.applyReadingViewCommand = applyReadingViewCommand;
86892
87160
  exports.applyRehearsalTimings = applyRehearsalTimings;
86893
87161
  exports.applyRenderedElementAccessibility = applyRenderedElementAccessibility;
@@ -87424,6 +87692,7 @@ exports.disableSoftEdgePatch = disableSoftEdgePatch;
87424
87692
  exports.discardAutosaveRecovery = discardAutosaveRecovery;
87425
87693
  exports.dispatchChartSelectionRequest = dispatchChartSelectionRequest;
87426
87694
  exports.dispatchCropRequest = dispatchCropRequest;
87695
+ exports.dispatchReadOnlyBannerIntent = dispatchReadOnlyBannerIntent;
87427
87696
  exports.dispatchStatusBarIntent = dispatchStatusBarIntent;
87428
87697
  exports.dominantDisplacement = dominantDisplacement;
87429
87698
  exports.downloadBlob = downloadBlob;
@@ -88240,7 +88509,11 @@ exports.readInlineListNativeSnapshot = readInlineListNativeSnapshot;
88240
88509
  exports.readInlineListSelection = readInlineListSelection;
88241
88510
  exports.readInlineListSnapshot = readInlineListSnapshot;
88242
88511
  exports.readListActivationSelection = readListActivationSelection;
88512
+ exports.readOnlyBannerState = readOnlyBannerState;
88513
+ exports.readOnlyBannerVisible = readOnlyBannerVisible;
88514
+ exports.readOnlyLocked = readOnlyLocked;
88243
88515
  exports.readOnlyRecommendation = readOnlyRecommendation;
88516
+ exports.readOnlySessionActions = readOnlySessionActions;
88244
88517
  exports.readRecentShapes = readRecentShapes;
88245
88518
  exports.readRibbonTransitionDraft = readRibbonTransitionDraft;
88246
88519
  exports.readSlideShowOption = readSlideShowOption;
@@ -88259,6 +88532,7 @@ exports.recordTableCellBold = recordTableCellBold;
88259
88532
  exports.redirectExitShapeByDirection = redirectExitShapeByDirection;
88260
88533
  exports.redirectMaskEffectByFilterSubtype = redirectMaskEffectByFilterSubtype;
88261
88534
  exports.redistributeColumnWidth = redistributeColumnWidth;
88535
+ exports.reduceReadOnlySession = reduceReadOnlySession;
88262
88536
  exports.reduceViewerZoom = reduceViewerZoom;
88263
88537
  exports.reflowRibbon = reflowRibbon;
88264
88538
  exports.reflowSmartArtData = reflowSmartArtData;
@@ -88492,6 +88766,7 @@ exports.runMediaCommand = runMediaCommand;
88492
88766
  exports.runPresentationAction = runPresentationAction;
88493
88767
  exports.runProgramNoticeStackStyle = runProgramNoticeStackStyle;
88494
88768
  exports.runProgramNoticeStackStyleAttr = runProgramNoticeStackStyleAttr;
88769
+ exports.runReadOnlyPasswordCheck = runReadOnlyPasswordCheck;
88495
88770
  exports.runReviewCommentCommand = runReviewCommentCommand;
88496
88771
  exports.runRibbonAddInCommand = runRibbonAddInCommand;
88497
88772
  exports.safeColor = safeColor;
@@ -955,11 +955,57 @@ function preprocessCssForCapture(root, options = {}) {
955
955
  // src/pptx/export/html2canvas-clone.ts
956
956
  async function prepareHtml2CanvasClone(original, doc, clonedEl) {
957
957
  await settleThreeViews(original);
958
+ pinCapturedSize(original, clonedEl);
958
959
  snapshotThreeViewsIntoClone(original, clonedEl);
959
960
  prepareExportClone(clonedEl);
960
961
  await chunkHJ3JZXOL_cjs.normalizeColorsForCapture(doc, clonedEl);
961
962
  preprocessCssForCapture(clonedEl);
962
963
  }
964
+ function composedParent(node) {
965
+ const slot = node.assignedSlot;
966
+ if (slot) return slot;
967
+ const parent = node.parentNode;
968
+ return parent?.nodeType === 11 && parent.host ? parent.host : parent;
969
+ }
970
+ var STYLE_SOURCES = 'style, link[rel~="stylesheet"]';
971
+ function holdsStyleSource(node) {
972
+ if (node.matches(STYLE_SOURCES) || node.querySelector(STYLE_SOURCES)) return true;
973
+ return [...node.querySelectorAll("slot")].some(
974
+ (slot) => slot.assignedElements().some((assigned) => holdsStyleSource(assigned))
975
+ );
976
+ }
977
+ function html2canvasCaptureScope(captured, ignore) {
978
+ const ancestors = /* @__PURE__ */ new Set();
979
+ for (let node = composedParent(captured); node; node = composedParent(node)) {
980
+ ancestors.add(node);
981
+ }
982
+ const inside = (node) => {
983
+ for (let current = node; current; current = composedParent(current)) {
984
+ if (current === captured) return true;
985
+ if (ancestors.has(current)) return false;
986
+ }
987
+ return false;
988
+ };
989
+ return (node) => {
990
+ if (ignore?.(node)) return true;
991
+ if (ancestors.has(node) || inside(node)) return false;
992
+ const parent = composedParent(node);
993
+ if (parent && ancestors.has(parent)) return false;
994
+ return !(node.closest("head") || holdsStyleSource(node));
995
+ };
996
+ }
997
+ function pinCapturedSize(original, clonedEl) {
998
+ const width = original.offsetWidth;
999
+ if (width <= 0) return;
1000
+ const display = original.ownerDocument.defaultView?.getComputedStyle(original).display;
1001
+ if (display === "inline" || display === "contents") return;
1002
+ Object.assign(clonedEl.style, {
1003
+ boxSizing: "border-box",
1004
+ width: `${width}px`,
1005
+ minWidth: "0",
1006
+ maxWidth: "none"
1007
+ });
1008
+ }
963
1009
 
964
1010
  exports.DEVICE_PIXEL_RATIO_VAR = DEVICE_PIXEL_RATIO_VAR;
965
1011
  exports.DEVICE_PX_VAR = DEVICE_PX_VAR;
@@ -976,9 +1022,11 @@ exports.flatten3dTransforms = flatten3dTransforms;
976
1022
  exports.flattenBackdropFilter = flattenBackdropFilter;
977
1023
  exports.flattenMixBlendMode = flattenMixBlendMode;
978
1024
  exports.has3dTransform = has3dTransform;
1025
+ exports.html2canvasCaptureScope = html2canvasCaptureScope;
979
1026
  exports.isExportIgnoredElement = isExportIgnoredElement;
980
1027
  exports.neutralizeDeviceStrokes = neutralizeDeviceStrokes;
981
1028
  exports.parseBlurValue = parseBlurValue;
1029
+ exports.pinCapturedSize = pinCapturedSize;
982
1030
  exports.prepareExportClone = prepareExportClone;
983
1031
  exports.prepareHtml2CanvasClone = prepareHtml2CanvasClone;
984
1032
  exports.preprocessCssForCapture = preprocessCssForCapture;