pptx-react-viewer 2.11.1 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-RMQIJDUJ.mjs → AiChatPanel-CGGUPVQX.mjs} +4 -4
  3. package/dist/AiChatPanel-CGGUPVQX.mjs.br +0 -0
  4. package/dist/AiChatPanel-CGGUPVQX.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-E6W3EACA.js → AiChatPanel-UEFYTUJN.js} +23 -23
  6. package/dist/AiChatPanel-UEFYTUJN.js.br +0 -0
  7. package/dist/AiChatPanel-UEFYTUJN.js.gz +0 -0
  8. package/dist/{Model3DScene-U4B4NZJT.js → Model3DScene-QYXJNALP.js} +2 -2
  9. package/dist/{Model3DScene-U4B4NZJT.js.br → Model3DScene-QYXJNALP.js.br} +0 -0
  10. package/dist/Model3DScene-QYXJNALP.js.gz +0 -0
  11. package/dist/{Model3DScene-WHSHBMR5.mjs → Model3DScene-TU4NTHRM.mjs} +1 -1
  12. package/dist/Model3DScene-TU4NTHRM.mjs.br +0 -0
  13. package/dist/Model3DScene-TU4NTHRM.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-5S43UBRD.js → SurfaceChart3DScene-4VCO3DRP.js} +2 -2
  15. package/dist/SurfaceChart3DScene-4VCO3DRP.js.br +0 -0
  16. package/dist/SurfaceChart3DScene-4VCO3DRP.js.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-77JP5XH5.mjs → SurfaceChart3DScene-VTJBKUQY.mjs} +1 -1
  18. package/dist/{SurfaceChart3DScene-77JP5XH5.mjs.br → SurfaceChart3DScene-VTJBKUQY.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-VTJBKUQY.mjs.gz +0 -0
  20. package/dist/{chunk-NJ4PTG4F.mjs → chunk-4GYNTY2G.mjs} +28 -48
  21. package/dist/chunk-4GYNTY2G.mjs.br +0 -0
  22. package/dist/chunk-4GYNTY2G.mjs.gz +0 -0
  23. package/dist/{chunk-PXYZFWDA.mjs → chunk-4SGXEGVL.mjs} +339 -256
  24. package/dist/chunk-4SGXEGVL.mjs.br +0 -0
  25. package/dist/chunk-4SGXEGVL.mjs.gz +0 -0
  26. package/dist/{chunk-IOVOQ6ZJ.js → chunk-BXAK3JFM.js} +301 -1
  27. package/dist/chunk-BXAK3JFM.js.br +0 -0
  28. package/dist/chunk-BXAK3JFM.js.gz +0 -0
  29. package/dist/{chunk-FV7HEYCX.mjs → chunk-CABQXGPI.mjs} +621 -70
  30. package/dist/chunk-CABQXGPI.mjs.br +0 -0
  31. package/dist/chunk-CABQXGPI.mjs.gz +0 -0
  32. package/dist/{chunk-IXBM3HWH.js → chunk-GBKIWNW6.js} +2047 -1964
  33. package/dist/chunk-GBKIWNW6.js.br +0 -0
  34. package/dist/chunk-GBKIWNW6.js.gz +0 -0
  35. package/dist/{chunk-FAP6OPLL.js → chunk-LE6YA5WB.js} +262 -296
  36. package/dist/chunk-LE6YA5WB.js.br +0 -0
  37. package/dist/chunk-LE6YA5WB.js.gz +0 -0
  38. package/dist/{chunk-HF6L2CTF.mjs → chunk-N3NKU7SC.mjs} +1 -1
  39. package/dist/chunk-N3NKU7SC.mjs.br +0 -0
  40. package/dist/{chunk-HF6L2CTF.mjs.gz → chunk-N3NKU7SC.mjs.gz} +0 -0
  41. package/dist/{chunk-QT6BPOZM.js → chunk-NUDH7TI2.js} +355 -375
  42. package/dist/chunk-NUDH7TI2.js.br +0 -0
  43. package/dist/chunk-NUDH7TI2.js.gz +0 -0
  44. package/dist/{chunk-KDJBWJJH.js → chunk-TDUDH7S4.js} +648 -71
  45. package/dist/chunk-TDUDH7S4.js.br +0 -0
  46. package/dist/chunk-TDUDH7S4.js.gz +0 -0
  47. package/dist/{chunk-RHR7GTDX.mjs → chunk-TEXIGSA6.mjs} +301 -1
  48. package/dist/chunk-TEXIGSA6.mjs.br +0 -0
  49. package/dist/chunk-TEXIGSA6.mjs.gz +0 -0
  50. package/dist/{chunk-X3SFCKAF.js → chunk-UIWY4XJT.js} +3 -3
  51. package/dist/chunk-UIWY4XJT.js.br +0 -0
  52. package/dist/chunk-UIWY4XJT.js.gz +0 -0
  53. package/dist/{chunk-DD54KUDG.mjs → chunk-YIPR3GKG.mjs} +24 -58
  54. package/dist/chunk-YIPR3GKG.mjs.br +0 -0
  55. package/dist/chunk-YIPR3GKG.mjs.gz +0 -0
  56. package/dist/i18n.js +4 -4
  57. package/dist/i18n.js.br +0 -0
  58. package/dist/i18n.js.gz +0 -0
  59. package/dist/i18n.mjs +1 -1
  60. package/dist/i18n.mjs.br +0 -0
  61. package/dist/i18n.mjs.gz +0 -0
  62. package/dist/index.js +36 -36
  63. package/dist/index.js.br +0 -0
  64. package/dist/index.js.gz +0 -0
  65. package/dist/index.mjs +6 -6
  66. package/dist/index.mjs.br +0 -0
  67. package/dist/index.mjs.gz +0 -0
  68. package/dist/internals.d.ts.map +1 -1
  69. package/dist/internals.js +79 -79
  70. package/dist/internals.js.br +0 -0
  71. package/dist/internals.js.gz +0 -0
  72. package/dist/internals.mjs +4 -4
  73. package/dist/internals.mjs.br +0 -0
  74. package/dist/internals.mjs.gz +0 -0
  75. package/dist/pptx-viewer.css +1 -1
  76. package/dist/pptx-viewer.css.br +0 -0
  77. package/dist/pptx-viewer.css.gz +0 -0
  78. package/dist/viewer/index.js +22 -22
  79. package/dist/viewer/index.js.br +0 -0
  80. package/dist/viewer/index.js.gz +0 -0
  81. package/dist/viewer/index.mjs +6 -6
  82. package/dist/viewer/index.mjs.br +0 -0
  83. package/dist/viewer/index.mjs.gz +0 -0
  84. package/package.json +1 -1
  85. package/dist/AiChatPanel-E6W3EACA.js.br +0 -0
  86. package/dist/AiChatPanel-E6W3EACA.js.gz +0 -0
  87. package/dist/AiChatPanel-RMQIJDUJ.mjs.br +0 -0
  88. package/dist/AiChatPanel-RMQIJDUJ.mjs.gz +0 -0
  89. package/dist/Model3DScene-U4B4NZJT.js.gz +0 -0
  90. package/dist/Model3DScene-WHSHBMR5.mjs.br +0 -0
  91. package/dist/Model3DScene-WHSHBMR5.mjs.gz +0 -0
  92. package/dist/SurfaceChart3DScene-5S43UBRD.js.br +0 -0
  93. package/dist/SurfaceChart3DScene-5S43UBRD.js.gz +0 -0
  94. package/dist/SurfaceChart3DScene-77JP5XH5.mjs.gz +0 -0
  95. package/dist/chunk-DD54KUDG.mjs.br +0 -0
  96. package/dist/chunk-DD54KUDG.mjs.gz +0 -0
  97. package/dist/chunk-FAP6OPLL.js.br +0 -0
  98. package/dist/chunk-FAP6OPLL.js.gz +0 -0
  99. package/dist/chunk-FV7HEYCX.mjs.br +0 -0
  100. package/dist/chunk-FV7HEYCX.mjs.gz +0 -0
  101. package/dist/chunk-HF6L2CTF.mjs.br +0 -0
  102. package/dist/chunk-IOVOQ6ZJ.js.br +0 -0
  103. package/dist/chunk-IOVOQ6ZJ.js.gz +0 -0
  104. package/dist/chunk-IXBM3HWH.js.br +0 -0
  105. package/dist/chunk-IXBM3HWH.js.gz +0 -0
  106. package/dist/chunk-KDJBWJJH.js.br +0 -0
  107. package/dist/chunk-KDJBWJJH.js.gz +0 -0
  108. package/dist/chunk-NJ4PTG4F.mjs.br +0 -0
  109. package/dist/chunk-NJ4PTG4F.mjs.gz +0 -0
  110. package/dist/chunk-PXYZFWDA.mjs.br +0 -0
  111. package/dist/chunk-PXYZFWDA.mjs.gz +0 -0
  112. package/dist/chunk-QT6BPOZM.js.br +0 -0
  113. package/dist/chunk-QT6BPOZM.js.gz +0 -0
  114. package/dist/chunk-RHR7GTDX.mjs.br +0 -0
  115. package/dist/chunk-RHR7GTDX.mjs.gz +0 -0
  116. package/dist/chunk-X3SFCKAF.js.br +0 -0
  117. package/dist/chunk-X3SFCKAF.js.gz +0 -0
@@ -15924,6 +15924,15 @@ var MC_NAMESPACE_CAPABILITIES = {
15924
15924
  "hiddenFill",
15925
15925
  "hiddenLine"
15926
15926
  ]),
15927
+ // PowerPoint 2016+ writes the Morph transition as `<p159:morph @option>`,
15928
+ // either inside an `mc:Choice Requires="p159"` or in a `p:transition/p:extLst`
15929
+ // extension. Both forms are parsed (see `PptxSlideTransitionService`), so the
15930
+ // choice IS supported: without this entry every morph slide reported
15931
+ // `UNSUPPORTED_ALTERNATE_CONTENT_CHOICE`, which reads as "the transition was
15932
+ // dropped and the fallback fade was used" when in fact the morph plays.
15933
+ // `morph` alone is listed on purpose: any OTHER `p159:*` element still makes
15934
+ // the choice unsupported and falls back, which is the honest answer.
15935
+ p159: /* @__PURE__ */ new Set(["morph"]),
15927
15936
  a14: /* @__PURE__ */ new Set(["m", "hiddenFill", "hiddenLine", "imgEffect", "imgLayer"]),
15928
15937
  a16: /* @__PURE__ */ new Set(["svgBlip", "colId"]),
15929
15938
  asvg: /* @__PURE__ */ new Set(["svgBlip"]),
@@ -93065,6 +93074,28 @@ var DIRECTIONAL_PRESETS = /* @__PURE__ */ new Set([
93065
93074
  "floatIn",
93066
93075
  "peekIn"
93067
93076
  ]);
93077
+ function animationPresetLabelKey(preset) {
93078
+ return `pptx.animation.preset.${preset}`;
93079
+ }
93080
+ function animationCatalogPresetSlug(presetId) {
93081
+ return presetId.split(".").map((part, index) => index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)).join("");
93082
+ }
93083
+ function animationCatalogPresetLabelKey(presetId) {
93084
+ return `pptx.animation.catalogPreset.${animationCatalogPresetSlug(presetId)}`;
93085
+ }
93086
+ function isAnimationCatalogPresetId(token2) {
93087
+ return token2.includes(".");
93088
+ }
93089
+ function animationEffectLabelKey(anim) {
93090
+ const token2 = anim.entrance ?? anim.emphasis ?? anim.exit;
93091
+ if (!token2 || token2 === "none") {
93092
+ return anim.motionPath ? "pptx.animation.motionPath.label" : "pptx.animation.animation";
93093
+ }
93094
+ return isAnimationCatalogPresetId(token2) ? animationCatalogPresetLabelKey(token2) : animationPresetLabelKey(token2);
93095
+ }
93096
+ function animationEffectLabel(anim, translate) {
93097
+ return translate(animationEffectLabelKey(anim));
93098
+ }
93068
93099
  var PRESET_ID_TO_EFFECT = {
93069
93100
  entr: {
93070
93101
  1: "appear",
@@ -93938,6 +93969,9 @@ function normalizeDelay(delay) {
93938
93969
  }
93939
93970
  return { ms: delay, indefinite: false };
93940
93971
  }
93972
+ function isInteractiveTrigger(trigger) {
93973
+ return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
93974
+ }
93941
93975
  function classifyCondition(cond) {
93942
93976
  const evt = cond.event;
93943
93977
  if (evt && CLICK_EVENTS.has(evt)) {
@@ -93957,7 +93991,8 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
93957
93991
  delayMs: 0,
93958
93992
  hasClickAlternative: false,
93959
93993
  hasHoverAlternative: false,
93960
- indefinite: false
93994
+ indefinite: false,
93995
+ requiresInteraction: isInteractiveTrigger(fallbackTrigger)
93961
93996
  };
93962
93997
  if (!conditions || conditions.length === 0) {
93963
93998
  return base;
@@ -94002,6 +94037,7 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
94002
94037
  base.indefinite = indefinite;
94003
94038
  base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
94004
94039
  base.dependsOnEvent = timenode.event;
94040
+ base.requiresInteraction = false;
94005
94041
  return base;
94006
94042
  }
94007
94043
  if (delayCond && (delayCond.delay ?? 0) !== 0) {
@@ -94009,19 +94045,23 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
94009
94045
  base.trigger = clickCond ? "onClick" : "afterDelay";
94010
94046
  base.delayMs = ms;
94011
94047
  base.indefinite = indefinite;
94048
+ base.requiresInteraction = indefinite;
94012
94049
  return base;
94013
94050
  }
94014
94051
  if (clickCond) {
94015
94052
  base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
94053
+ base.requiresInteraction = true;
94016
94054
  return base;
94017
94055
  }
94018
94056
  if (hoverCond) {
94019
94057
  base.trigger = "onHover";
94058
+ base.requiresInteraction = true;
94020
94059
  return base;
94021
94060
  }
94022
94061
  if (delayCond) {
94023
94062
  base.trigger = fallbackTrigger;
94024
94063
  base.delayMs = 0;
94064
+ base.requiresInteraction = false;
94025
94065
  }
94026
94066
  return base;
94027
94067
  }
@@ -94360,7 +94400,7 @@ function parseMediaCommand(commandString) {
94360
94400
  if (lower === "stop" || lower === "stopmedia") {
94361
94401
  return { verb: "stop" };
94362
94402
  }
94363
- if (lower === "toggleplay") {
94403
+ if (lower === "toggleplay" || lower === "togglepause") {
94364
94404
  return { verb: "togglePlay" };
94365
94405
  }
94366
94406
  return void 0;
@@ -94492,7 +94532,7 @@ function buildTimeline(nativeAnimations) {
94492
94532
  }
94493
94533
  currentGroup = [];
94494
94534
  currentGroupIsClick = isOnClick || isFirstAnimation;
94495
- currentGroupAutoStart = !isOnClick && singleAnim.groupAutoStart === true;
94535
+ currentGroupAutoStart = singleAnim.groupAutoStart === true && !effective.requiresInteraction;
94496
94536
  subGroupIndex = singleAnim.parGroupIndex;
94497
94537
  subGroupStartMs = 0;
94498
94538
  }
@@ -94597,25 +94637,26 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94597
94637
  for (const anim of anims) {
94598
94638
  let effect = resolveEffect(anim);
94599
94639
  const dynamic = effect ? void 0 : buildDynamicKeyframe(anim, dynamicUid++);
94600
- if (!effect && !dynamic) {
94640
+ const isCommand = !effect && !dynamic && isMediaCommandAnimation(anim);
94641
+ if (!effect && !dynamic && !isCommand) {
94601
94642
  effect = fallbackEffectForClass(anim.presetClass);
94602
94643
  if (!effect) {
94603
94644
  continue;
94604
94645
  }
94605
94646
  }
94606
- const keyframe = effect ? cssKeyframeName(effect) : dynamic.keyframeName;
94647
+ const keyframe = isCommand ? "" : effect ? cssKeyframeName(effect) : dynamic.keyframeName;
94607
94648
  if (effect) {
94608
94649
  neededKeyframes.add(effect);
94609
94650
  }
94610
94651
  if (dynamic) {
94611
94652
  dynamicBlocks.push(dynamic.css);
94612
94653
  }
94613
- const elementId = anim.targetId ?? "";
94654
+ const elementId = isCommand ? "" : anim.targetId ?? "";
94614
94655
  const seqTrigger = anim.trigger ?? "onShapeClick";
94615
- const duration = anim.durationMs ?? defaultDuration(anim.presetClass);
94656
+ const duration = isCommand ? 0 : anim.durationMs ?? defaultDuration(anim.presetClass);
94616
94657
  const animDelay = Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0);
94617
94658
  const triggerDelay = 0;
94618
- const presetClass = anim.presetClass ?? "entr";
94659
+ const presetClass = isCommand ? "emph" : anim.presetClass ?? "entr";
94619
94660
  const fill = fillModeForClass(anim.presetClass);
94620
94661
  const iterCount = anim.repeatCount ?? 1;
94621
94662
  const direction = anim.autoReverse ? "alternate" : "normal";
@@ -94639,7 +94680,7 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94639
94680
  }
94640
94681
  const iterStr = iterCount === Infinity ? "infinite" : String(iterCount);
94641
94682
  const easing = cssEasingForAnimation(anim);
94642
- const cssAnimation = `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
94683
+ const cssAnimation = isCommand ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
94643
94684
  seqGroup.push({
94644
94685
  elementId,
94645
94686
  cssAnimation,
@@ -94651,8 +94692,9 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94651
94692
  presetClass,
94652
94693
  soundPath: anim.soundPath,
94653
94694
  stopSound: anim.stopSound,
94654
- build: resolveStepBuildDescriptor(anim),
94655
- colorTargets: stepColorTargets(anim)
94695
+ command: isCommand ? buildStepCommand(anim) : void 0,
94696
+ build: isCommand ? void 0 : resolveStepBuildDescriptor(anim),
94697
+ colorTargets: isCommand ? void 0 : stepColorTargets(anim)
94656
94698
  });
94657
94699
  }
94658
94700
  if (seqGroup.length > 0) {
@@ -97793,6 +97835,45 @@ function computeMarqueeHitIds(marquee, elements, minSize = MIN_ELEMENT_SIZE) {
97793
97835
  function mergeAdditiveSelection(baseSelectionIds, hitIds) {
97794
97836
  return Array.from(/* @__PURE__ */ new Set([...baseSelectionIds ?? [], ...hitIds]));
97795
97837
  }
97838
+ function getImageFitStyle(el) {
97839
+ const uncropped = {
97840
+ width: "100%",
97841
+ height: "100%",
97842
+ objectFit: "cover"
97843
+ };
97844
+ if (!isImageLikeElement(el)) {
97845
+ return uncropped;
97846
+ }
97847
+ const cropLeft = clampCropValue(el.cropLeft);
97848
+ const cropTop = clampCropValue(el.cropTop);
97849
+ const cropRight = clampCropValue(el.cropRight);
97850
+ const cropBottom = clampCropValue(el.cropBottom);
97851
+ if (cropLeft + cropRight <= 1e-4 && cropTop + cropBottom <= 1e-4) {
97852
+ return uncropped;
97853
+ }
97854
+ const horizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
97855
+ const verticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
97856
+ const left = clampCropValue(cropLeft * horizontalScale);
97857
+ const right = clampCropValue(cropRight * horizontalScale);
97858
+ const top = clampCropValue(cropTop * verticalScale);
97859
+ const bottom = clampCropValue(cropBottom * verticalScale);
97860
+ const remainingWidth = Math.max(0.01, 1 - left - right);
97861
+ const remainingHeight = Math.max(0.01, 1 - top - bottom);
97862
+ const tx = Math.round(-left / remainingWidth * 1e4) / 100;
97863
+ const ty = Math.round(-top / remainingHeight * 1e4) / 100;
97864
+ const sx = Math.round(1 / remainingWidth * 1e6) / 1e6;
97865
+ const sy = Math.round(1 / remainingHeight * 1e6) / 1e6;
97866
+ return {
97867
+ position: "absolute",
97868
+ width: "100%",
97869
+ height: "100%",
97870
+ maxWidth: "none",
97871
+ maxHeight: "none",
97872
+ objectFit: "fill",
97873
+ transformOrigin: "top left",
97874
+ transform: `translate(${tx}%, ${ty}%) scale(${sx}, ${sy})`
97875
+ };
97876
+ }
97796
97877
  function groupElements(elements, ids, groupId) {
97797
97878
  const idSet = new Set(ids);
97798
97879
  const gathered = [];
@@ -106746,12 +106827,6 @@ function mobileSlideCounter(currentIndex, total) {
106746
106827
  }
106747
106828
  return `${currentIndex + 1} / ${total}`;
106748
106829
  }
106749
- function isFirstSlide(currentIndex) {
106750
- return currentIndex <= 0;
106751
- }
106752
- function isLastSlide(currentIndex, total) {
106753
- return currentIndex >= total - 1;
106754
- }
106755
106830
  function pad2(value) {
106756
106831
  return String(value).padStart(2, "0");
106757
106832
  }
@@ -107511,9 +107586,260 @@ async function openNativeEyeDropper() {
107511
107586
  return null;
107512
107587
  }
107513
107588
  }
107589
+ var PEN_COLORS = [
107590
+ "#ff0000",
107591
+ "#0000ff",
107592
+ "#00aa00",
107593
+ "#ff8800",
107594
+ "#ffffff",
107595
+ "#000000",
107596
+ "#ff00ff",
107597
+ "#00cccc"
107598
+ ];
107599
+ var HIGHLIGHTER_COLORS = [
107600
+ "#ffff00",
107601
+ "#00ff00",
107602
+ "#ff69b4",
107603
+ "#00bfff",
107604
+ "#ff8c00",
107605
+ "#adff2f",
107606
+ "#ff6347",
107607
+ "#87ceeb"
107608
+ ];
107514
107609
  function formatSlideCounter(currentSlide, totalSlides) {
107515
107610
  return `${currentSlide + 1} / ${totalSlides}`;
107516
107611
  }
107612
+ var PRESENT_TOOLBAR_CONTROLS = [
107613
+ {
107614
+ id: "previous",
107615
+ kind: "button",
107616
+ labelKey: "pptx.presenter.previousSlide",
107617
+ icon: "chevron-left"
107618
+ },
107619
+ { id: "counter", kind: "counter" },
107620
+ { id: "next", kind: "button", labelKey: "pptx.presenter.nextSlide", icon: "chevron-right" },
107621
+ { id: "divider-navigation", kind: "divider" },
107622
+ { id: "timer", kind: "timer", labelKey: "pptx.presenter.elapsed", icon: "timer" },
107623
+ { id: "divider-timer", kind: "divider" },
107624
+ {
107625
+ id: "laser",
107626
+ kind: "toggle",
107627
+ labelKey: "pptx.presentation.laserPointer",
107628
+ icon: "mouse-pointer-2"
107629
+ },
107630
+ { id: "pen", kind: "toggle", labelKey: "pptx.presentation.pen", icon: "pen-tool" },
107631
+ {
107632
+ id: "pen-color",
107633
+ kind: "caret",
107634
+ labelKey: "pptx.presentationToolbar.penColor",
107635
+ icon: "chevron-down"
107636
+ },
107637
+ {
107638
+ id: "highlighter",
107639
+ kind: "toggle",
107640
+ labelKey: "pptx.presentation.highlighter",
107641
+ icon: "highlighter"
107642
+ },
107643
+ {
107644
+ id: "highlighter-color",
107645
+ kind: "caret",
107646
+ labelKey: "pptx.presentationToolbar.highlighterColor",
107647
+ icon: "chevron-down"
107648
+ },
107649
+ { id: "eraser", kind: "toggle", labelKey: "pptx.presentation.eraser", icon: "eraser" },
107650
+ { id: "clear", kind: "button", labelKey: "pptx.presentation.clearAnnotations", icon: "trash-2" },
107651
+ { id: "divider-tools", kind: "divider" },
107652
+ {
107653
+ id: "presenter-view",
107654
+ kind: "toggle",
107655
+ labelKey: "pptx.presenter.presenterView",
107656
+ icon: "panel-right"
107657
+ },
107658
+ { id: "end", kind: "button", labelKey: "pptx.presenter.endPresentation", icon: "x" }
107659
+ ];
107660
+ PRESENT_TOOLBAR_CONTROLS.map(
107661
+ (control) => control.id
107662
+ );
107663
+ PRESENT_TOOLBAR_CONTROLS.flatMap(
107664
+ (control) => control.labelKey === void 0 ? [] : [control.labelKey]
107665
+ );
107666
+ var PRESENT_TOOLBAR_CLASSES = {
107667
+ /** The floating bar itself. */
107668
+ container: "flex items-center gap-1 px-3 py-2 rounded-xl bg-neutral-900/90 backdrop-blur-md border border-white/15 shadow-2xl",
107669
+ /** The auto-hiding positioner the bar sits in. */
107670
+ wrapper: "absolute bottom-6 left-1/2 -translate-x-1/2 z-[80] transition-opacity duration-300",
107671
+ /** Navigation / action button. */
107672
+ button: "flex items-center justify-center w-9 h-9 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10 disabled:text-white/20 disabled:cursor-not-allowed",
107673
+ /** Annotation-tool toggle, inactive. */
107674
+ toggle: "relative flex items-center justify-center w-9 h-9 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10",
107675
+ /** Annotation-tool toggle, active. */
107676
+ toggleActive: "relative flex items-center justify-center w-9 h-9 rounded-md transition-colors bg-white/25 text-white",
107677
+ /** Colour caret beside a tool toggle. */
107678
+ caret: "flex items-center justify-center w-7 h-9 -ml-1 rounded-r-md transition-colors text-white/50 hover:text-white hover:bg-white/10",
107679
+ /** Vertical hairline between groups. */
107680
+ divider: "w-px h-6 bg-white/20 mx-1",
107681
+ /** Slide counter. */
107682
+ counter: "text-xs font-mono tabular-nums text-white/80 px-1.5 select-none min-w-[48px] text-center",
107683
+ /** Elapsed-time readout. */
107684
+ timer: "flex items-center gap-1.5 text-xs font-mono tabular-nums text-white/60 px-1 select-none",
107685
+ /**
107686
+ * Colour palette popover.
107687
+ *
107688
+ * `w-max` is load-bearing. An absolutely positioned grid shrink-to-fits its
107689
+ * positioned ancestor, which here is the 64px tool+caret pair, so without it
107690
+ * the four 36px swatch columns are squeezed into 50px and overlap each other
107691
+ * to the point that a swatch cannot be clicked. React shipped it that way,
107692
+ * and the ports faithfully reproduced the defect.
107693
+ */
107694
+ palette: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 p-3 w-max bg-neutral-800 rounded-lg border border-white/20 shadow-xl grid grid-cols-4 gap-2",
107695
+ /** One colour swatch inside the palette. */
107696
+ swatch: "w-9 h-9 rounded-full border-2 transition-transform hover:scale-110",
107697
+ /** Underline showing a tool's current colour. */
107698
+ swatchBar: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-3 h-0.5 rounded-full"
107699
+ };
107700
+ var PRESENTER_CONSOLE_CONTROLS = [
107701
+ {
107702
+ id: "timer-toggle",
107703
+ kind: "button",
107704
+ labelKey: "pptx.presenter.toggleTimer",
107705
+ icon: "circle-pause",
107706
+ activeIcon: "circle-play"
107707
+ },
107708
+ { id: "timer-reset", kind: "button", labelKey: "pptx.presenter.resetTimer", icon: "rotate-ccw" },
107709
+ { id: "divider-timer", kind: "divider" },
107710
+ {
107711
+ id: "all-slides",
107712
+ kind: "button",
107713
+ labelKey: "pptx.presenter.seeAllSlides",
107714
+ icon: "grid-2x2"
107715
+ },
107716
+ { id: "zoom-in", kind: "button", labelKey: "pptx.presenter.zoomIn", icon: "zoom-in" },
107717
+ { id: "zoom-out", kind: "button", labelKey: "pptx.presenter.zoomOut", icon: "zoom-out" },
107718
+ { id: "zoom-reset", kind: "button", labelKey: "pptx.presenter.resetZoom", icon: "scan" },
107719
+ { id: "divider-zoom", kind: "divider" },
107720
+ {
107721
+ id: "laser",
107722
+ kind: "toggle",
107723
+ labelKey: "pptx.presentation.laserPointer",
107724
+ icon: "mouse-pointer-2"
107725
+ },
107726
+ { id: "pen", kind: "toggle", labelKey: "pptx.presentation.pen", icon: "pen-tool" },
107727
+ {
107728
+ id: "highlighter",
107729
+ kind: "toggle",
107730
+ labelKey: "pptx.presentation.highlighter",
107731
+ icon: "highlighter"
107732
+ },
107733
+ { id: "eraser", kind: "toggle", labelKey: "pptx.presentation.eraser", icon: "eraser" },
107734
+ { id: "divider-tools", kind: "divider" },
107735
+ { id: "blackout-black", kind: "toggle", labelKey: "pptx.presenter.blackScreen", glyph: "B" },
107736
+ { id: "blackout-white", kind: "toggle", labelKey: "pptx.presenter.whiteScreen", glyph: "W" },
107737
+ {
107738
+ id: "captions",
107739
+ kind: "toggle",
107740
+ labelKey: "pptx.slideShow.subtitlesTooltip",
107741
+ icon: "captions"
107742
+ },
107743
+ { id: "spacer", kind: "spacer" },
107744
+ {
107745
+ id: "audience",
107746
+ kind: "toggle",
107747
+ labelKey: "pptx.presenter.openAudienceWindow",
107748
+ activeLabelKey: "pptx.presenter.closeAudienceWindow",
107749
+ icon: "monitor",
107750
+ activeIcon: "monitor-off"
107751
+ },
107752
+ {
107753
+ id: "swap-displays",
107754
+ kind: "button",
107755
+ labelKey: "pptx.presenter.swapDisplays",
107756
+ icon: "arrow-left-right"
107757
+ },
107758
+ { id: "end", kind: "button", labelKey: "pptx.presenter.endPresentation", icon: "x" }
107759
+ ];
107760
+ PRESENTER_CONSOLE_CONTROLS.map(
107761
+ (control) => control.id
107762
+ );
107763
+ PRESENTER_CONSOLE_CONTROLS.flatMap(
107764
+ (control) => control.labelKey === void 0 ? [] : [control.labelKey]
107765
+ );
107766
+ var PRESENTER_NAVIGATOR_LABEL_KEYS = {
107767
+ title: "pptx.presenter.slideNavigator",
107768
+ subtitle: "pptx.presenter.seeAllSlides",
107769
+ close: "pptx.presenter.closeNavigator"
107770
+ };
107771
+ function presenterNextDisabled() {
107772
+ return false;
107773
+ }
107774
+ function presenterPrevDisabled(currentIndex) {
107775
+ return currentIndex <= 0;
107776
+ }
107777
+ var PRESENTER_TIMER_SEGMENT_MS = 5 * 60 * 1e3;
107778
+ function presenterTimerProgress(elapsedMs) {
107779
+ const elapsed = Math.max(0, elapsedMs);
107780
+ return {
107781
+ percent: Math.min(
107782
+ 100,
107783
+ elapsed % PRESENTER_TIMER_SEGMENT_MS / PRESENTER_TIMER_SEGMENT_MS * 100
107784
+ ),
107785
+ segment: Math.floor(elapsed / PRESENTER_TIMER_SEGMENT_MS)
107786
+ };
107787
+ }
107788
+ var PRESENTER_CONSOLE_CLASSES = {
107789
+ /** The console root, laid over the show stage. */
107790
+ root: "absolute inset-0 z-50 flex flex-col bg-card text-foreground",
107791
+ /** The control strip across the top. */
107792
+ strip: "flex flex-wrap items-center gap-1 border-b border-border bg-card px-3 py-2",
107793
+ /** A strip control, inactive. */
107794
+ control: "inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors bg-muted text-foreground hover:bg-accent",
107795
+ /** A strip control, active. */
107796
+ controlActive: "inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors bg-primary text-primary-foreground",
107797
+ /** Vertical hairline between strip groups. */
107798
+ divider: "mx-1 h-6 w-px bg-border",
107799
+ /** Flexible gap pushing the trailing group right. */
107800
+ spacer: "flex-1",
107801
+ /** The body row: current-slide pane plus rail. */
107802
+ body: "flex flex-1 min-h-0",
107803
+ /** The current-slide pane. */
107804
+ main: "relative flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden",
107805
+ /** The right-hand rail. */
107806
+ rail: "flex flex-[3] min-w-[260px] max-w-[440px] flex-col border-l border-border bg-background",
107807
+ /** Rail section heading (Current Time / Next Slide / Speaker Notes). */
107808
+ railHeading: "text-[10px] uppercase tracking-wider text-muted-foreground",
107809
+ /** Timer progress bar track. */
107810
+ progressTrack: "h-1.5 w-full bg-muted/60 flex-shrink-0",
107811
+ /** Timer progress bar fill. */
107812
+ progressFill: "h-full bg-primary transition-[width] duration-1000 ease-linear",
107813
+ /** The "all slides" navigator overlay. */
107814
+ navigator: "absolute inset-0 z-[120] overflow-auto bg-card p-6",
107815
+ /** The navigator's tile grid. */
107816
+ navigatorGrid: "grid gap-5 [grid-template-columns:repeat(auto-fill,minmax(220px,1fr))]"
107817
+ };
107818
+ var AUDIENCE_FULLSCREEN_BOUNCE_MS = 1e3;
107819
+ function createPresenterShowGuard(options) {
107820
+ const graceMs = options?.graceMs ?? AUDIENCE_FULLSCREEN_BOUNCE_MS;
107821
+ let armedAt;
107822
+ const stillArmed = (now) => armedAt !== void 0 && now - armedAt >= 0 && now - armedAt <= graceMs;
107823
+ return {
107824
+ expectAudienceBounce(now = Date.now()) {
107825
+ armedAt = now;
107826
+ },
107827
+ classifyFullscreenExit(now = Date.now()) {
107828
+ if (!stillArmed(now)) {
107829
+ armedAt = void 0;
107830
+ return "end-show";
107831
+ }
107832
+ armedAt = void 0;
107833
+ return "restore-show";
107834
+ },
107835
+ isExpectingBounce(now = Date.now()) {
107836
+ return stillArmed(now);
107837
+ },
107838
+ disarm() {
107839
+ armedAt = void 0;
107840
+ }
107841
+ };
107842
+ }
107517
107843
  function createPresentationKeyBuffer() {
107518
107844
  return { digits: "" };
107519
107845
  }
@@ -109015,6 +109341,134 @@ function getAriaRoleDescription(element) {
109015
109341
  return void 0;
109016
109342
  }
109017
109343
  }
109344
+ function shouldLoopContinuously(input) {
109345
+ return Boolean(input.loopContinuously) || input.showType === "kiosk";
109346
+ }
109347
+ function resolveAutoAdvanceDelayMs(slide, options) {
109348
+ if (options?.useTimings === false) {
109349
+ return void 0;
109350
+ }
109351
+ const advanceAfterMs = slide?.transition?.advanceAfterMs;
109352
+ if (typeof advanceAfterMs !== "number" || !Number.isFinite(advanceAfterMs) || advanceAfterMs < 0) {
109353
+ return void 0;
109354
+ }
109355
+ return advanceAfterMs;
109356
+ }
109357
+ var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [role="dialog"]';
109358
+ function isInertMedia(node) {
109359
+ return (node.tagName === "VIDEO" || node.tagName === "AUDIO") && !node.controls;
109360
+ }
109361
+ function isPresentationAdvanceClick(target) {
109362
+ if (typeof Element === "undefined" || !(target instanceof Element)) {
109363
+ return false;
109364
+ }
109365
+ for (let node = target; node !== null; node = node.parentElement) {
109366
+ if (isInertMedia(node)) {
109367
+ continue;
109368
+ }
109369
+ if (node.matches(PRESENTATION_INERT_CLICK_SELECTOR)) {
109370
+ return false;
109371
+ }
109372
+ }
109373
+ return true;
109374
+ }
109375
+ function applyRehearsalTimings(slides, timings) {
109376
+ return slides.map((slide, index) => {
109377
+ const advanceAfterMs = timings[index];
109378
+ if (typeof advanceAfterMs !== "number") {
109379
+ return slide;
109380
+ }
109381
+ return {
109382
+ ...slide,
109383
+ transition: {
109384
+ ...slide.transition,
109385
+ type: slide.transition?.type ?? "none",
109386
+ advanceAfterMs
109387
+ }
109388
+ };
109389
+ });
109390
+ }
109391
+ function computeEntranceAnimationDelay(delayMs, animationIndex) {
109392
+ return Math.max(0, delayMs || 0) + animationIndex * 60;
109393
+ }
109394
+ var NO_OP_ACTION = "ppaction://noaction";
109395
+ function isNoOpPresentationAction(action) {
109396
+ if (!action) {
109397
+ return true;
109398
+ }
109399
+ const verb = (action.action ?? "").trim().toLowerCase();
109400
+ if (verb === NO_OP_ACTION) {
109401
+ return true;
109402
+ }
109403
+ return verb.length === 0 && typeof action.targetSlideIndex !== "number" && !(action.url ?? "").trim();
109404
+ }
109405
+ function resolvePresentationAction(action, options) {
109406
+ const soundPath = action?.soundPath;
109407
+ if (!action || isNoOpPresentationAction(action)) {
109408
+ return { intent: { kind: "none" }, soundPath };
109409
+ }
109410
+ const verb = (action.action ?? "").toLowerCase();
109411
+ if (typeof action.targetSlideIndex === "number" && Number.isFinite(action.targetSlideIndex)) {
109412
+ if (options.slideCount <= 0) {
109413
+ return { intent: { kind: "none" }, soundPath };
109414
+ }
109415
+ const slideIndex = Math.max(
109416
+ 0,
109417
+ Math.min(options.slideCount - 1, Math.floor(action.targetSlideIndex))
109418
+ );
109419
+ return { intent: { kind: "goToSlide", slideIndex }, soundPath };
109420
+ }
109421
+ if (verb.includes("hlinkshowjump")) {
109422
+ if (verb.includes("nextslide")) {
109423
+ return { intent: { kind: "move", direction: 1 }, soundPath };
109424
+ }
109425
+ if (verb.includes("previousslide")) {
109426
+ return { intent: { kind: "move", direction: -1 }, soundPath };
109427
+ }
109428
+ if (verb.includes("firstslide")) {
109429
+ return { intent: { kind: "goToSlide", slideIndex: 0 }, soundPath };
109430
+ }
109431
+ if (verb.includes("lastslide")) {
109432
+ return {
109433
+ intent: options.slideCount > 0 ? { kind: "goToSlide", slideIndex: options.slideCount - 1 } : { kind: "none" },
109434
+ soundPath
109435
+ };
109436
+ }
109437
+ if (verb.includes("endshow")) {
109438
+ return { intent: { kind: "endShow" }, soundPath };
109439
+ }
109440
+ return { intent: { kind: "none" }, soundPath };
109441
+ }
109442
+ if (verb.includes("hlinksldjump")) {
109443
+ return { intent: { kind: "none" }, soundPath };
109444
+ }
109445
+ const url = (action.url ?? "").trim();
109446
+ if (url && isUrlSafe(url)) {
109447
+ return { intent: { kind: "openUrl", url }, soundPath };
109448
+ }
109449
+ return { intent: { kind: "none" }, soundPath };
109450
+ }
109451
+ function runPresentationAction(action, options, runner) {
109452
+ const { intent, soundPath } = resolvePresentationAction(action, options);
109453
+ if (soundPath && runner.playSound) {
109454
+ runner.playSound(soundPath);
109455
+ }
109456
+ switch (intent.kind) {
109457
+ case "goToSlide":
109458
+ runner.goToSlide(intent.slideIndex);
109459
+ return true;
109460
+ case "move":
109461
+ runner.move(intent.direction);
109462
+ return true;
109463
+ case "endShow":
109464
+ runner.endShow();
109465
+ return true;
109466
+ case "openUrl":
109467
+ return safeOpenUrl(intent.url);
109468
+ default:
109469
+ return false;
109470
+ }
109471
+ }
109018
109472
  function elementHasTextHyperlink(element) {
109019
109473
  if (!hasTextProperties(element)) {
109020
109474
  return false;
@@ -109023,10 +109477,10 @@ function elementHasTextHyperlink(element) {
109023
109477
  }
109024
109478
  function isElementActionable(element, options = {}) {
109025
109479
  const { hasActionHandler = true, hasHyperlinkHandler = true, hasZoomHandler = true } = options;
109026
- if (element.actionClick && hasActionHandler) {
109480
+ if (element.actionClick && hasActionHandler && !isNoOpPresentationAction(element.actionClick)) {
109027
109481
  return true;
109028
109482
  }
109029
- if (element.actionHover) {
109483
+ if (element.actionHover && !isNoOpPresentationAction(element.actionHover)) {
109030
109484
  return true;
109031
109485
  }
109032
109486
  if (hasHyperlinkHandler && elementHasTextHyperlink(element)) {
@@ -109034,6 +109488,129 @@ function isElementActionable(element, options = {}) {
109034
109488
  }
109035
109489
  return element.type === "zoom" && hasZoomHandler;
109036
109490
  }
109491
+ var LINK_TOOLTIP_HOST_CLASS = "pptx-link-host";
109492
+ var LINK_TOOLTIP_CLASS = "pptx-link-tooltip";
109493
+ var LINK_TOOLTIP_PANEL_CLASS = "pptx-link-tooltip-panel";
109494
+ var LINK_TOOLTIP_LABEL_CLASS = "pptx-link-tooltip-label";
109495
+ var LINK_TOOLTIP_HINT_CLASS = "pptx-link-tooltip-hint";
109496
+ var ACTION_INDICATOR_CLASS = "pptx-action-indicator";
109497
+ var ACTION_INDICATOR_ICON_PATH = "M13 2L3 14h9l-1 8 10-12h-9l1-8z";
109498
+ var ACTION_AFFORDANCE_CSS = `
109499
+ .${ACTION_INDICATOR_CLASS} {
109500
+ position: absolute;
109501
+ top: -4px;
109502
+ right: -4px;
109503
+ z-index: 20;
109504
+ display: flex;
109505
+ width: 16px;
109506
+ height: 16px;
109507
+ align-items: center;
109508
+ justify-content: center;
109509
+ border-radius: 9999px;
109510
+ background: #f59e0b;
109511
+ /* Left pointer-interactive on purpose: the badge's native title attribute is
109512
+ the only place the deck's screen tip is readable, and a title on a
109513
+ pointer-transparent node never fires. Clicks still reach the element
109514
+ underneath by bubbling, so nothing is swallowed. */
109515
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
109516
+ }
109517
+ .${ACTION_INDICATOR_CLASS} svg {
109518
+ width: 10px;
109519
+ height: 10px;
109520
+ color: #fff;
109521
+ }
109522
+ .${LINK_TOOLTIP_CLASS} {
109523
+ position: absolute;
109524
+ top: 100%;
109525
+ left: 4px;
109526
+ z-index: 9999;
109527
+ max-width: 16rem;
109528
+ margin-top: 4px;
109529
+ opacity: 0;
109530
+ transition: opacity 150ms;
109531
+ pointer-events: none;
109532
+ font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
109533
+ text-align: left;
109534
+ }
109535
+ .${LINK_TOOLTIP_HOST_CLASS}:hover > .${LINK_TOOLTIP_CLASS} {
109536
+ opacity: 1;
109537
+ }
109538
+ .${LINK_TOOLTIP_PANEL_CLASS} {
109539
+ border: 1px solid var(--pptx-border, #374151);
109540
+ border-radius: 0.25rem;
109541
+ background: var(--pptx-popover, #111827);
109542
+ padding: 6px 10px;
109543
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
109544
+ }
109545
+ .${LINK_TOOLTIP_LABEL_CLASS} {
109546
+ overflow: hidden;
109547
+ color: var(--pptx-foreground, #f3f4f6);
109548
+ font-size: 12px;
109549
+ font-weight: 400;
109550
+ font-style: normal;
109551
+ line-height: 16px;
109552
+ letter-spacing: normal;
109553
+ text-decoration: none;
109554
+ text-overflow: ellipsis;
109555
+ text-transform: none;
109556
+ white-space: nowrap;
109557
+ }
109558
+ .${LINK_TOOLTIP_HINT_CLASS} {
109559
+ margin-top: 2px;
109560
+ color: var(--pptx-muted-foreground, #9ca3af);
109561
+ font-size: 10px;
109562
+ font-weight: 400;
109563
+ font-style: normal;
109564
+ line-height: 12px;
109565
+ letter-spacing: normal;
109566
+ text-decoration: none;
109567
+ text-transform: none;
109568
+ }
109569
+ `;
109570
+ var AFFORDANCE_STYLE_ELEMENT_ID = "pptx-action-affordance-styles";
109571
+ function ensureActionAffordanceStyles(doc) {
109572
+ const target = doc ?? (typeof document === "undefined" ? void 0 : document);
109573
+ if (!target || target.getElementById(AFFORDANCE_STYLE_ELEMENT_ID)) {
109574
+ return;
109575
+ }
109576
+ const style = target.createElement("style");
109577
+ style.id = AFFORDANCE_STYLE_ELEMENT_ID;
109578
+ style.textContent = ACTION_AFFORDANCE_CSS;
109579
+ (target.head ?? target.documentElement).appendChild(style);
109580
+ }
109581
+ function actionAffordanceLabels(translate) {
109582
+ return {
109583
+ hasAction: translate("pptx.element.hasAction"),
109584
+ link: translate("pptx.element.linkFallback"),
109585
+ followLink: translate("pptx.linkTooltip.followLink"),
109586
+ presentationMode: translate("pptx.linkTooltip.presentationMode")
109587
+ };
109588
+ }
109589
+ var NO_AFFORDANCE = Object.freeze({
109590
+ showIndicator: false,
109591
+ indicatorTitle: "",
109592
+ showLinkTooltip: false,
109593
+ linkTooltipLabel: "",
109594
+ linkTooltipHint: ""
109595
+ });
109596
+ function resolveElementActionAffordance(element, context) {
109597
+ const { canInteract, presenting = false, labels } = context;
109598
+ const click = element.actionClick;
109599
+ const hover = element.actionHover;
109600
+ if (!canInteract || presenting || !click && !hover) {
109601
+ return NO_AFFORDANCE;
109602
+ }
109603
+ const hasUrl = Boolean(click?.url);
109604
+ return {
109605
+ showIndicator: true,
109606
+ indicatorTitle: click?.tooltip || hover?.tooltip || labels.hasAction,
109607
+ // The tooltip names a CLICK destination, so a hover-only action gets the
109608
+ // badge but no popover: there is nothing to follow and no key to press.
109609
+ showLinkTooltip: Boolean(click),
109610
+ linkTooltipLabel: click?.tooltip || click?.url || click?.action || labels.link,
109611
+ linkTooltipHint: hasUrl ? labels.followLink : labels.presentationMode
109612
+ };
109613
+ }
109037
109614
  var ELEMENT_ACTION_TYPE_OPTIONS = [
109038
109615
  { value: "none", labelKey: "pptx.hyperlink.actionNone" },
109039
109616
  { value: "url", labelKey: "pptx.action.gotoUrl" },
@@ -109522,6 +110099,19 @@ function rebuildDrawingShapesIfCleared(smartArtData, layout, palette, style, ele
109522
110099
  drawingShapes: reflowToDrawingShapes(layoutResult, smartArtData.nodes)
109523
110100
  };
109524
110101
  }
110102
+ function mediaPlaybackAttributes(source) {
110103
+ return {
110104
+ loop: source.loop === true,
110105
+ volume: Math.max(0, Math.min(1, source.volume ?? 1)),
110106
+ playbackRate: Math.max(0.25, Math.min(4, source.playbackSpeed ?? 1))
110107
+ };
110108
+ }
110109
+ function mediaTransportVisible(surface) {
110110
+ if (surface.presenting || surface.preview) {
110111
+ return false;
110112
+ }
110113
+ return surface.canvasTransport;
110114
+ }
109525
110115
  function buildSummaryZoomView(element, lookup) {
109526
110116
  if (element.zoomType !== "summary" || !element.summaryTargets?.length) {
109527
110117
  return void 0;
@@ -111091,56 +111681,6 @@ var VIEWER_SHORTCUT_REFERENCE = [
111091
111681
  { actionKey: "pptx.shortcuts.title", shortcut: "?" }
111092
111682
  ];
111093
111683
  var SHORTCUT_REFERENCE_ITEMS = VIEWER_SHORTCUT_REFERENCE;
111094
- function shouldLoopContinuously(input) {
111095
- return Boolean(input.loopContinuously) || input.showType === "kiosk";
111096
- }
111097
- function resolveAutoAdvanceDelayMs(slide, options) {
111098
- if (options?.useTimings === false) {
111099
- return void 0;
111100
- }
111101
- const advanceAfterMs = slide?.transition?.advanceAfterMs;
111102
- if (typeof advanceAfterMs !== "number" || !Number.isFinite(advanceAfterMs) || advanceAfterMs < 0) {
111103
- return void 0;
111104
- }
111105
- return advanceAfterMs;
111106
- }
111107
- var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [role="dialog"]';
111108
- function isInertMedia(node) {
111109
- return (node.tagName === "VIDEO" || node.tagName === "AUDIO") && !node.controls;
111110
- }
111111
- function isPresentationAdvanceClick(target) {
111112
- if (typeof Element === "undefined" || !(target instanceof Element)) {
111113
- return false;
111114
- }
111115
- for (let node = target; node !== null; node = node.parentElement) {
111116
- if (isInertMedia(node)) {
111117
- continue;
111118
- }
111119
- if (node.matches(PRESENTATION_INERT_CLICK_SELECTOR)) {
111120
- return false;
111121
- }
111122
- }
111123
- return true;
111124
- }
111125
- function applyRehearsalTimings(slides, timings) {
111126
- return slides.map((slide, index) => {
111127
- const advanceAfterMs = timings[index];
111128
- if (typeof advanceAfterMs !== "number") {
111129
- return slide;
111130
- }
111131
- return {
111132
- ...slide,
111133
- transition: {
111134
- ...slide.transition,
111135
- type: slide.transition?.type ?? "none",
111136
- advanceAfterMs
111137
- }
111138
- };
111139
- });
111140
- }
111141
- function computeEntranceAnimationDelay(delayMs, animationIndex) {
111142
- return Math.max(0, delayMs || 0) + animationIndex * 60;
111143
- }
111144
111684
  function resolveCustomShowIndexes(slides, customShow) {
111145
111685
  const keys = customShow.slideRIds ?? customShow.slideIds;
111146
111686
  if (!keys || keys.length === 0) {
@@ -111226,6 +111766,17 @@ function firstShowSlideIndex(showIndexes) {
111226
111766
  function lastShowSlideIndex(showIndexes) {
111227
111767
  return showIndexes.length > 0 ? showIndexes[showIndexes.length - 1] : void 0;
111228
111768
  }
111769
+ var HIDDEN_SLIDE_LABEL_KEY = "pptx.slideSorter.hidden";
111770
+ var HIDDEN_SLIDE_SLASH_GRADIENT = "linear-gradient(to top right, transparent 47%, color-mix(in srgb, currentColor 60%, transparent) 47%, color-mix(in srgb, currentColor 60%, transparent) 53%, transparent 53%)";
111771
+ function hiddenSlideLabelId(surface, slideIndex) {
111772
+ return `pptx-hidden-slide-${surface}-${slideIndex}`;
111773
+ }
111774
+ function hiddenSlideCue(hidden, surface, slideIndex) {
111775
+ if (!hidden) {
111776
+ return { hidden: false, labelId: void 0, marker: void 0 };
111777
+ }
111778
+ return { hidden: true, labelId: hiddenSlideLabelId(surface, slideIndex), marker: "true" };
111779
+ }
111229
111780
  var VIEWER_PREFS_STORAGE_KEY = "pptx-viewer-prefs";
111230
111781
  function hasLocalStorage() {
111231
111782
  return typeof localStorage !== "undefined";
@@ -113831,4 +114382,4 @@ function segmentFrameCount(durationMs, fps) {
113831
114382
  * `<p:extLst>` (optional)
113832
114383
  */
113833
114384
 
113834
- export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapOutlineKey, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };
114385
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PEN_COLORS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, animationEffectLabel, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, hiddenSlideCue, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isImageLikeElement, isInkElement, isKeyboardOpen, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapOutlineKey, mapPresentationKey, mayLeaveSlideShow, mediaPlaybackAttributes, mediaTransportVisible, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveElementActionAffordance, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, runPresentationAction, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };