pptx-react-viewer 4.14.0 → 4.15.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 (111) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{AiChatPanel-WQUOEVQB.mjs → AiChatPanel-7OVUGUKW.mjs} +4 -4
  3. package/dist/AiChatPanel-7OVUGUKW.mjs.br +0 -0
  4. package/dist/AiChatPanel-7OVUGUKW.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-PULXQTFJ.js → AiChatPanel-CDQWJTWL.js} +28 -28
  6. package/dist/AiChatPanel-CDQWJTWL.js.br +0 -0
  7. package/dist/AiChatPanel-CDQWJTWL.js.gz +0 -0
  8. package/dist/{Model3DScene-HZG33BWN.mjs → Model3DScene-A3CPMFAO.mjs} +1 -1
  9. package/dist/Model3DScene-A3CPMFAO.mjs.br +0 -0
  10. package/dist/Model3DScene-A3CPMFAO.mjs.gz +0 -0
  11. package/dist/{Model3DScene-6MYHPE5N.js → Model3DScene-OLGB7Z7Q.js} +2 -2
  12. package/dist/Model3DScene-OLGB7Z7Q.js.br +0 -0
  13. package/dist/Model3DScene-OLGB7Z7Q.js.gz +0 -0
  14. package/dist/{chunk-6ZR27XTL.js → chunk-2CSRCH4H.js} +2321 -1211
  15. package/dist/chunk-2CSRCH4H.js.br +0 -0
  16. package/dist/chunk-2CSRCH4H.js.gz +0 -0
  17. package/dist/{chunk-RK5UV5HL.js → chunk-6ZPXMS64.js} +1517 -1526
  18. package/dist/chunk-6ZPXMS64.js.br +0 -0
  19. package/dist/chunk-6ZPXMS64.js.gz +0 -0
  20. package/dist/{chunk-ECKXYCP3.mjs → chunk-AHJ4ND7Q.mjs} +1 -1
  21. package/dist/chunk-AHJ4ND7Q.mjs.br +0 -0
  22. package/dist/chunk-AHJ4ND7Q.mjs.gz +0 -0
  23. package/dist/{chunk-UWVRB4Z5.mjs → chunk-AIWEM7VE.mjs} +2312 -1210
  24. package/dist/chunk-AIWEM7VE.mjs.br +0 -0
  25. package/dist/chunk-AIWEM7VE.mjs.gz +0 -0
  26. package/dist/{chunk-55OLQ7HS.mjs → chunk-CJSIEITL.mjs} +3 -0
  27. package/dist/chunk-CJSIEITL.mjs.br +0 -0
  28. package/dist/chunk-CJSIEITL.mjs.gz +0 -0
  29. package/dist/{chunk-DI4YTG3J.js → chunk-CNXVOFUW.js} +197 -197
  30. package/dist/chunk-CNXVOFUW.js.br +0 -0
  31. package/dist/{chunk-DI4YTG3J.js.gz → chunk-CNXVOFUW.js.gz} +0 -0
  32. package/dist/{chunk-EPMT65EN.mjs → chunk-DNWIW75I.mjs} +6 -5
  33. package/dist/chunk-DNWIW75I.mjs.br +0 -0
  34. package/dist/chunk-DNWIW75I.mjs.gz +0 -0
  35. package/dist/{chunk-E6VYR3GM.js → chunk-HGO243GV.js} +818 -816
  36. package/dist/chunk-HGO243GV.js.br +0 -0
  37. package/dist/chunk-HGO243GV.js.gz +0 -0
  38. package/dist/{chunk-AJTFPTSN.mjs → chunk-Q5VQ53R3.mjs} +2 -2
  39. package/dist/chunk-Q5VQ53R3.mjs.br +0 -0
  40. package/dist/chunk-Q5VQ53R3.mjs.gz +0 -0
  41. package/dist/{chunk-WSYKEPW6.mjs → chunk-RQCAXUVQ.mjs} +342 -351
  42. package/dist/chunk-RQCAXUVQ.mjs.br +0 -0
  43. package/dist/chunk-RQCAXUVQ.mjs.gz +0 -0
  44. package/dist/{chunk-XWO367ZG.js → chunk-UP6PJEHM.js} +5 -5
  45. package/dist/chunk-UP6PJEHM.js.br +0 -0
  46. package/dist/chunk-UP6PJEHM.js.gz +0 -0
  47. package/dist/{chunk-HIYK7HPX.js → chunk-XEYB25ZT.js} +3 -0
  48. package/dist/chunk-XEYB25ZT.js.br +0 -0
  49. package/dist/chunk-XEYB25ZT.js.gz +0 -0
  50. package/dist/i18n.js +4 -4
  51. package/dist/i18n.js.br +0 -0
  52. package/dist/i18n.js.gz +0 -0
  53. package/dist/i18n.mjs +1 -1
  54. package/dist/i18n.mjs.br +0 -0
  55. package/dist/i18n.mjs.gz +0 -0
  56. package/dist/index.d.ts +293 -268
  57. package/dist/index.js +63 -63
  58. package/dist/index.js.br +0 -0
  59. package/dist/index.js.gz +0 -0
  60. package/dist/index.mjs +6 -6
  61. package/dist/index.mjs.br +0 -0
  62. package/dist/index.mjs.gz +0 -0
  63. package/dist/internals.d.ts +600 -575
  64. package/dist/internals.js +105 -105
  65. package/dist/internals.js.br +0 -0
  66. package/dist/internals.js.gz +0 -0
  67. package/dist/internals.mjs +4 -4
  68. package/dist/internals.mjs.br +0 -0
  69. package/dist/internals.mjs.gz +0 -0
  70. package/dist/pptx-viewer.css +1 -1
  71. package/dist/pptx-viewer.css.br +0 -0
  72. package/dist/pptx-viewer.css.gz +0 -0
  73. package/dist/viewer/index.d.ts +161 -136
  74. package/dist/viewer/index.js +27 -27
  75. package/dist/viewer/index.js.br +0 -0
  76. package/dist/viewer/index.js.gz +0 -0
  77. package/dist/viewer/index.mjs +6 -6
  78. package/dist/viewer/index.mjs.br +0 -0
  79. package/dist/viewer/index.mjs.gz +0 -0
  80. package/package.json +1 -1
  81. package/dist/AiChatPanel-PULXQTFJ.js.br +0 -0
  82. package/dist/AiChatPanel-PULXQTFJ.js.gz +0 -0
  83. package/dist/AiChatPanel-WQUOEVQB.mjs.br +0 -0
  84. package/dist/AiChatPanel-WQUOEVQB.mjs.gz +0 -0
  85. package/dist/Model3DScene-6MYHPE5N.js.br +0 -0
  86. package/dist/Model3DScene-6MYHPE5N.js.gz +0 -0
  87. package/dist/Model3DScene-HZG33BWN.mjs.br +0 -0
  88. package/dist/Model3DScene-HZG33BWN.mjs.gz +0 -0
  89. package/dist/chunk-55OLQ7HS.mjs.br +0 -0
  90. package/dist/chunk-55OLQ7HS.mjs.gz +0 -0
  91. package/dist/chunk-6ZR27XTL.js.br +0 -0
  92. package/dist/chunk-6ZR27XTL.js.gz +0 -0
  93. package/dist/chunk-AJTFPTSN.mjs.br +0 -0
  94. package/dist/chunk-AJTFPTSN.mjs.gz +0 -0
  95. package/dist/chunk-DI4YTG3J.js.br +0 -0
  96. package/dist/chunk-E6VYR3GM.js.br +0 -0
  97. package/dist/chunk-E6VYR3GM.js.gz +0 -0
  98. package/dist/chunk-ECKXYCP3.mjs.br +0 -0
  99. package/dist/chunk-ECKXYCP3.mjs.gz +0 -0
  100. package/dist/chunk-EPMT65EN.mjs.br +0 -0
  101. package/dist/chunk-EPMT65EN.mjs.gz +0 -0
  102. package/dist/chunk-HIYK7HPX.js.br +0 -0
  103. package/dist/chunk-HIYK7HPX.js.gz +0 -0
  104. package/dist/chunk-RK5UV5HL.js.br +0 -0
  105. package/dist/chunk-RK5UV5HL.js.gz +0 -0
  106. package/dist/chunk-UWVRB4Z5.mjs.br +0 -0
  107. package/dist/chunk-UWVRB4Z5.mjs.gz +0 -0
  108. package/dist/chunk-WSYKEPW6.mjs.br +0 -0
  109. package/dist/chunk-WSYKEPW6.mjs.gz +0 -0
  110. package/dist/chunk-XWO367ZG.js.br +0 -0
  111. package/dist/chunk-XWO367ZG.js.gz +0 -0
@@ -59217,9 +59217,9 @@ function ensureArray4(val2) {
59217
59217
  }
59218
59218
  return Array.isArray(val2) ? val2 : [val2];
59219
59219
  }
59220
- function collectControlNodes(controls) {
59221
- const nodes = [...ensureArray4(controls["p:control"])];
59222
- const altContents = ensureArray4(controls["mc:AlternateContent"]);
59220
+ function collectControlNodes(controls2) {
59221
+ const nodes = [...ensureArray4(controls2["p:control"])];
59222
+ const altContents = ensureArray4(controls2["mc:AlternateContent"]);
59223
59223
  for (const alt of altContents) {
59224
59224
  const fallback = alt["mc:Fallback"];
59225
59225
  const fallbackControls = fallback ? ensureArray4(fallback["p:control"]) : [];
@@ -59276,11 +59276,11 @@ function parseActiveXControlsFromSlide(slideXml3) {
59276
59276
  if (!cSld) {
59277
59277
  return [];
59278
59278
  }
59279
- const controls = cSld["p:controls"];
59280
- if (!controls) {
59279
+ const controls2 = cSld["p:controls"];
59280
+ if (!controls2) {
59281
59281
  return [];
59282
59282
  }
59283
- const controlEntries = collectControlNodes(controls);
59283
+ const controlEntries = collectControlNodes(controls2);
59284
59284
  if (controlEntries.length === 0) {
59285
59285
  return [];
59286
59286
  }
@@ -59371,17 +59371,17 @@ function buildActiveXControlNode(control) {
59371
59371
  }
59372
59372
  return node;
59373
59373
  }
59374
- function applyActiveXControlsToSlide(slideXml3, controls) {
59374
+ function applyActiveXControlsToSlide(slideXml3, controls2) {
59375
59375
  const sld = slideXml3["p:sld"];
59376
59376
  const cSld = sld?.["p:cSld"];
59377
59377
  if (!cSld) {
59378
59378
  return;
59379
59379
  }
59380
- if (!controls || controls.length === 0) {
59380
+ if (!controls2 || controls2.length === 0) {
59381
59381
  delete cSld["p:controls"];
59382
59382
  return;
59383
59383
  }
59384
- const nodes = controls.map(buildActiveXControlNode);
59384
+ const nodes = controls2.map(buildActiveXControlNode);
59385
59385
  const container = cSld["p:controls"] ?? {};
59386
59386
  const isNewContainer = cSld["p:controls"] === void 0;
59387
59387
  container["p:control"] = nodes.length === 1 ? nodes[0] : nodes;
@@ -135053,6 +135053,28 @@ var init_slide_fingerprint = __esm({
135053
135053
  UNHASHABLE_COUNTER = 0;
135054
135054
  }
135055
135055
  });
135056
+ function updateSlideLayoutRelationship(relationships2, layoutPath, relationshipType) {
135057
+ if (!layoutPath) {
135058
+ return;
135059
+ }
135060
+ const target = `../${layoutPath.replace(/^\/?ppt\//, "")}`;
135061
+ const existing = relationships2.find((rel) => String(rel["@_Type"]).endsWith("/slideLayout"));
135062
+ if (existing) {
135063
+ existing["@_Target"] = target;
135064
+ delete existing["@_TargetMode"];
135065
+ return;
135066
+ }
135067
+ const ids = new Set(relationships2.map((rel) => String(rel["@_Id"])));
135068
+ let id = 1;
135069
+ while (ids.has(`rId${id}`)) {
135070
+ id++;
135071
+ }
135072
+ relationships2.push({ "@_Id": `rId${id}`, "@_Type": relationshipType, "@_Target": target });
135073
+ }
135074
+ var init_slide_layout_relationship = __esm({
135075
+ "src/core/core/runtime/slide-layout-relationship.ts"() {
135076
+ }
135077
+ });
135056
135078
  function isXmlObject7(value) {
135057
135079
  return typeof value === "object" && value !== null && !Array.isArray(value);
135058
135080
  }
@@ -135705,6 +135727,7 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
135705
135727
  init_PptxHandlerRuntimeSaveElementWriter();
135706
135728
  init_save_structural_id_gate();
135707
135729
  init_slide_fingerprint();
135730
+ init_slide_layout_relationship();
135708
135731
  init_slide_save_xml_order();
135709
135732
  init_slide_timing_reconcile();
135710
135733
  init_slide_transition_reconcile();
@@ -135872,9 +135895,15 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
135872
135895
  slideRelsRoot["@_xmlns"] = constants.relationshipsNamespace;
135873
135896
  }
135874
135897
  const slideRelationships = this.ensureArray(slideRelsRoot["Relationship"]);
135898
+ updateSlideLayoutRelationship(
135899
+ slideRelationships,
135900
+ slide.layoutPath,
135901
+ constants.slideLayoutRelationshipType
135902
+ );
135875
135903
  const slideRelationshipRegistry = new PptxSlideRelationshipRegistry({
135876
135904
  relationships: slideRelationships
135877
135905
  });
135906
+ this.slideRelsMap.set(slide.id, slideRelationshipRegistry.toRelationshipMap());
135878
135907
  const existingCommentRelationship = slideRelationshipRegistry.removeCommentRelationships(
135879
135908
  constants.slideCommentRelationshipType
135880
135909
  );
@@ -136893,12 +136922,12 @@ function orderedTemplatePartXml(options) {
136893
136922
  const rebuilt = positionsByRuntime.get(runtime)?.get(partPath);
136894
136923
  const ordered4 = rebuilt ? orderShapeTreeChildren(rewrapped, (node) => rebuilt.get(node), getLocalName2) : orderContainer(rewrapped, sourceXml ? scanSpTreeDocumentOrder(sourceXml) : [], getLocalName2);
136895
136924
  if (ordered4 === spTree) {
136896
- return withOrderedTableParagraphs(xmlObj);
136925
+ return withOrderedTableParagraphs(xmlObj, true);
136897
136926
  }
136898
136927
  const nextRoot = { ...root, "p:cSld": { ...commonSlideData, "p:spTree": ordered4 } };
136899
136928
  const nextPart = { ...xmlObj };
136900
136929
  setOwnXmlProperty(nextPart, rootTag2, nextRoot);
136901
- return withOrderedTableParagraphs(nextPart);
136930
+ return withOrderedTableParagraphs(nextPart, true);
136902
136931
  }
136903
136932
  var ALTERNATE_CONTENT_TAG3;
136904
136933
  var positionsByRuntime;
@@ -185569,6 +185598,250 @@ pptx-ui-checkbox[checked] { border-color: var(--pptx-primary, #6366f1); }
185569
185598
  }
185570
185599
  }
185571
185600
  `;
185601
+ var CONTRACT_REVISION = 1;
185602
+ var CONTRACT_KEY = /* @__PURE__ */ Symbol.for("pptx-viewer.web-control-contract");
185603
+ function assertWebControlContract(registry, names) {
185604
+ for (const name of names) {
185605
+ const ctor = registry.get(name);
185606
+ const revision = ctor?.[CONTRACT_KEY];
185607
+ if (revision !== void 0 && revision !== CONTRACT_REVISION) {
185608
+ throw new Error(
185609
+ `Incompatible ${name} contract (${revision}; expected ${CONTRACT_REVISION}). Use matching viewer bindings in this window.`
185610
+ );
185611
+ }
185612
+ }
185613
+ }
185614
+ function markWebControlContract(ctor) {
185615
+ Object.defineProperty(ctor, CONTRACT_KEY, { value: CONTRACT_REVISION });
185616
+ }
185617
+ var RIBBON_COMMAND_STYLES = `
185618
+ :host { display: inline-flex; flex: none; }
185619
+ button {
185620
+ box-sizing: border-box; display: inline-flex; flex-direction: column; align-items: center;
185621
+ justify-content: flex-start; gap: 2px; min-width: 54px; max-width: 78px; height: 58px;
185622
+ padding: 4px; border: 0; border-radius: 4px; background: transparent;
185623
+ color: var(--pptx-foreground, #f9fafb); cursor: pointer; font: inherit;
185624
+ font-size: 9px; line-height: 11px; text-align: center;
185625
+ }
185626
+ svg { width: 24px; height: 24px; flex: none; color: var(--pptx-primary, #6366f1);
185627
+ fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
185628
+ :host([compact]) button { flex-direction: row; align-items: center; justify-content: flex-start;
185629
+ gap: 6px; min-width: 88px; max-width: none; height: 26px; padding: 0 4px; font-size: 10px; text-align: left; }
185630
+ :host([compact]) svg { width: 16px; height: 16px; }
185631
+ button:hover:not(:disabled) { background: var(--pptx-accent, #33334d); }
185632
+ :host([active]) button { background: color-mix(in srgb, var(--pptx-primary, #6366f1) 15%, transparent); color: var(--pptx-primary, #6366f1); }
185633
+ button:disabled { opacity: .35; cursor: not-allowed; }
185634
+ button:focus-visible { outline: 2px solid var(--pptx-ring, #6366f1); outline-offset: 2px; }
185635
+ @media (pointer: coarse), (max-width: 767px) { :host([compact]) button { min-height: 44px; } }
185636
+ @media (forced-colors: active) {
185637
+ button { color: ButtonText; } svg { color: ButtonText; }
185638
+ button:disabled { color: GrayText; opacity: 1; }
185639
+ button:focus-visible { outline-color: Highlight; }
185640
+ :host([active]) button { border: 1px solid Highlight; }
185641
+ }
185642
+ `;
185643
+ var RIBBON_ICON_PATHS = {
185644
+ camera: "M2 6h4l2-3h4l2 3h4v11H2ZM7 11a3 3 0 1 0 6 0 3 3 0 1 0-6 0",
185645
+ eraser: "M3 12l8-8 6 6-7 7H7ZM3 17h14M7 8l6 6",
185646
+ reset: "M4 10a6 6 0 1 1 1.8 4.2M4 6v4h4",
185647
+ help: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M8 7a2 2 0 1 1 3 1.8c-.7.3-1 .8-1 1.7M10 14v.1",
185648
+ "play-start": "M4 3 15 10 4 17ZM17 3v14",
185649
+ play: "M5 3 16 10 5 17Z",
185650
+ presentation: "M2 3h16v11H2ZM7 18h6M10 14v4",
185651
+ list: "M4 4h12v12H4ZM7 8h6M7 11h6",
185652
+ broadcast: "M7 7a4.2 4.2 0 0 0 0 6M13 7a4.2 4.2 0 0 1 0 6M4.5 4.5a7.8 7.8 0 0 0 0 11M15.5 4.5a7.8 7.8 0 0 1 0 11M8.5 10a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0",
185653
+ video: "M2 5h11v10H2ZM13 10l5-3v6Z",
185654
+ settings: "M3 5h14M6 10h8M8 15h4M6 3v4M12 8v4M10 13v4",
185655
+ "eye-off": "M2.5 10S5.5 5 10 5s7.5 5 7.5 5-3 5-7.5 5-7.5-5-7.5-5ZM4 4l12 12",
185656
+ clock: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M10 6v4l3 2",
185657
+ record: "M5 10a5 5 0 1 0 10 0 5 5 0 1 0-10 0",
185658
+ captions: "M2 4h16v12H2ZM5 9h4M11 9h4M5 12h3M10 12h5",
185659
+ keyboard: "M2 5h16v10H2ZM5 8h1M9 8h1M13 8h1M5 11h1M9 11h5",
185660
+ accessibility: "M8 3a2 2 0 1 0 4 0 2 2 0 1 0-4 0M3 7l7 2 7-2M10 9v4M10 13l-4 5M10 13l4 5"
185661
+ };
185662
+ function definePptxRibbonCommand(registry) {
185663
+ if (registry.get("pptx-ui-ribbon-command")) {
185664
+ return;
185665
+ }
185666
+ class RibbonCommand extends HTMLElement {
185667
+ static observedAttributes = [
185668
+ "label",
185669
+ "icon",
185670
+ "disabled",
185671
+ "active",
185672
+ "compact",
185673
+ "pressed",
185674
+ "expanded",
185675
+ "title",
185676
+ "data-ribbon-control"
185677
+ ];
185678
+ button;
185679
+ text;
185680
+ path;
185681
+ constructor() {
185682
+ super();
185683
+ const root = this.attachShadow({ mode: "open" });
185684
+ attachControlStyles(root, RIBBON_COMMAND_STYLES);
185685
+ this.button = document.createElement("button");
185686
+ this.button.type = "button";
185687
+ this.button.setAttribute("part", "button");
185688
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
185689
+ svg.setAttribute("viewBox", "0 0 20 20");
185690
+ svg.setAttribute("aria-hidden", "true");
185691
+ this.path = document.createElementNS("http://www.w3.org/2000/svg", "path");
185692
+ svg.append(this.path);
185693
+ this.text = document.createElement("span");
185694
+ this.button.append(svg, this.text);
185695
+ root.append(this.button);
185696
+ this.button.addEventListener("keydown", (event) => {
185697
+ if ((event.key === " " || event.key === "Enter") && !event.ctrlKey && !event.metaKey && !event.altKey) {
185698
+ event.stopPropagation();
185699
+ }
185700
+ });
185701
+ this.button.addEventListener("click", () => {
185702
+ const id = this.getAttribute("data-ribbon-control");
185703
+ if (!this.button.disabled && id) {
185704
+ this.dispatchEvent(
185705
+ new CustomEvent("command-request", { detail: { id }, bubbles: true, composed: true })
185706
+ );
185707
+ }
185708
+ });
185709
+ }
185710
+ connectedCallback() {
185711
+ this.sync();
185712
+ }
185713
+ attributeChangedCallback() {
185714
+ this.sync();
185715
+ }
185716
+ sync() {
185717
+ this.text.textContent = this.getAttribute("label") ?? "";
185718
+ this.button.title = this.getAttribute("title") ?? this.text.textContent;
185719
+ this.button.disabled = this.hasAttribute("disabled");
185720
+ this.path.setAttribute("d", RIBBON_ICON_PATHS[this.getAttribute("icon") ?? ""] ?? "");
185721
+ for (const attr22 of ["pressed", "expanded"]) {
185722
+ const value = this.getAttribute(attr22);
185723
+ if (value === null) {
185724
+ this.button.removeAttribute(`aria-${attr22}`);
185725
+ } else {
185726
+ this.button.setAttribute(`aria-${attr22}`, value);
185727
+ }
185728
+ }
185729
+ }
185730
+ }
185731
+ registry.define("pptx-ui-ribbon-command", RibbonCommand);
185732
+ }
185733
+ var STYLES = `
185734
+ :host { display: inline-flex; flex: none; align-self: stretch; }
185735
+ .group { box-sizing: border-box; display: flex; flex-direction: column; justify-content: space-between;
185736
+ min-height: 78px; padding: 4px 8px 2px; border-right: 1px solid color-mix(in srgb, var(--pptx-border, #33334d) 60%, transparent); }
185737
+ :host(:last-child) .group { border-right: 0; }
185738
+ .row { display: flex; align-items: flex-start; gap: 4px; }
185739
+ ::slotted(*) { flex-shrink: 0; }
185740
+ .caption { padding-top: 2px; color: var(--pptx-muted-foreground, #94a3b8); font: inherit;
185741
+ font-size: 9px; line-height: 12px; text-align: center; white-space: nowrap; }
185742
+ `;
185743
+ function definePptxRibbonGroup(registry) {
185744
+ if (registry.get("pptx-ui-ribbon-group")) {
185745
+ return;
185746
+ }
185747
+ class RibbonGroup extends HTMLElement {
185748
+ static observedAttributes = ["label"];
185749
+ caption;
185750
+ constructor() {
185751
+ super();
185752
+ const root = this.attachShadow({ mode: "open" });
185753
+ attachControlStyles(root, STYLES);
185754
+ const group2 = document.createElement("div");
185755
+ group2.className = "group";
185756
+ const row = document.createElement("div");
185757
+ row.className = "row";
185758
+ row.append(document.createElement("slot"));
185759
+ this.caption = document.createElement("span");
185760
+ this.caption.className = "caption";
185761
+ group2.append(row, this.caption);
185762
+ root.append(group2);
185763
+ }
185764
+ connectedCallback() {
185765
+ this.setAttribute("role", "group");
185766
+ this.sync();
185767
+ }
185768
+ attributeChangedCallback() {
185769
+ this.sync();
185770
+ }
185771
+ sync() {
185772
+ const label = this.getAttribute("label") ?? "";
185773
+ this.caption.textContent = label;
185774
+ this.setAttribute("aria-label", label);
185775
+ }
185776
+ }
185777
+ registry.define("pptx-ui-ribbon-group", RibbonGroup);
185778
+ }
185779
+ function definePptxRibbonToggle(registry) {
185780
+ if (registry.get("pptx-ui-ribbon-toggle")) {
185781
+ return;
185782
+ }
185783
+ class RibbonToggle extends HTMLElement {
185784
+ static observedAttributes = ["label", "checked", "disabled", "title"];
185785
+ checkbox;
185786
+ text;
185787
+ constructor() {
185788
+ super();
185789
+ const root = this.attachShadow({ mode: "open" });
185790
+ attachControlStyles(
185791
+ root,
185792
+ `
185793
+ :host { display: block; }
185794
+ label { display: flex; align-items: center; gap: 4px; min-height: 22px; padding: 0 4px;
185795
+ color: var(--pptx-foreground, #f9fafb); font: inherit; font-size: 10px; white-space: nowrap; cursor: pointer; }
185796
+ :host([disabled]) label { color: var(--pptx-muted-foreground, #9ca3af); cursor: not-allowed; }
185797
+ @media (pointer: coarse), (max-width: 767px) { label { min-height: 44px; font-size: 12px; } }
185798
+ `
185799
+ );
185800
+ const label = document.createElement("label");
185801
+ this.checkbox = document.createElement("pptx-ui-checkbox");
185802
+ this.text = document.createTextNode("");
185803
+ label.append(this.checkbox, this.text);
185804
+ label.addEventListener("click", (event) => {
185805
+ event.preventDefault();
185806
+ if (event.target !== this.checkbox) {
185807
+ this.checkbox.click();
185808
+ }
185809
+ });
185810
+ this.checkbox.addEventListener("input", (event) => event.stopPropagation());
185811
+ this.checkbox.addEventListener("change", (event) => {
185812
+ event.stopPropagation();
185813
+ const checked = this.checkbox.checked;
185814
+ this.sync();
185815
+ const id = this.getAttribute("data-ribbon-control");
185816
+ if (!this.hasAttribute("disabled") && id) {
185817
+ this.dispatchEvent(
185818
+ new CustomEvent("toggle-request", {
185819
+ detail: { id, checked },
185820
+ bubbles: true,
185821
+ composed: true
185822
+ })
185823
+ );
185824
+ }
185825
+ });
185826
+ root.append(label);
185827
+ }
185828
+ connectedCallback() {
185829
+ this.sync();
185830
+ }
185831
+ attributeChangedCallback() {
185832
+ this.sync();
185833
+ }
185834
+ sync() {
185835
+ const label = this.getAttribute("label") ?? "";
185836
+ this.text.textContent = label;
185837
+ this.checkbox.setAttribute("aria-label", label);
185838
+ this.checkbox.title = this.getAttribute("title") ?? label;
185839
+ this.checkbox.checked = this.hasAttribute("checked");
185840
+ this.checkbox.disabled = this.hasAttribute("disabled");
185841
+ }
185842
+ }
185843
+ registry.define("pptx-ui-ribbon-toggle", RibbonToggle);
185844
+ }
185572
185845
  var SEARCH_STYLES = `
185573
185846
  :host {
185574
185847
  display: flex;
@@ -186008,6 +186281,9 @@ function definePptxSelect(registry) {
186008
186281
  }
186009
186282
  disconnectedCallback() {
186010
186283
  this.close();
186284
+ window.clearTimeout(this.searchTimer);
186285
+ this.searchTimer = 0;
186286
+ this.search = "";
186011
186287
  this.observer.disconnect();
186012
186288
  cancelAnimationFrame(this.refreshFrame);
186013
186289
  this.refreshFrame = 0;
@@ -186179,796 +186455,6 @@ function definePptxSelect(registry) {
186179
186455
  }
186180
186456
  registry.define("pptx-ui-select", PptxSelect);
186181
186457
  }
186182
- function registerPptxWebControls() {
186183
- if (typeof window === "undefined" || !window.customElements) {
186184
- return;
186185
- }
186186
- if (!document.getElementById("pptx-ui-control-hosts")) {
186187
- const style = document.createElement("style");
186188
- style.id = "pptx-ui-control-hosts";
186189
- style.textContent = HOST_STYLES;
186190
- document.head.append(style);
186191
- }
186192
- definePptxSearchField(window.customElements);
186193
- definePptxCheckbox(window.customElements);
186194
- definePptxSelect(window.customElements);
186195
- }
186196
- var defaultThemeColors = {
186197
- background: "#030712",
186198
- // gray-950
186199
- foreground: "#f3f4f6",
186200
- // gray-100
186201
- card: "#111827",
186202
- // gray-900
186203
- cardForeground: "#f3f4f6",
186204
- // gray-100
186205
- popover: "#111827",
186206
- // gray-900
186207
- popoverForeground: "#f3f4f6",
186208
- // gray-100
186209
- primary: "#6366f1",
186210
- // indigo-500
186211
- primaryForeground: "#ffffff",
186212
- // white
186213
- secondary: "#1f2937",
186214
- // gray-800
186215
- secondaryForeground: "#f3f4f6",
186216
- // gray-100
186217
- muted: "#1f2937",
186218
- // gray-800
186219
- mutedForeground: "#9ca3af",
186220
- // gray-400
186221
- accent: "#1f2937",
186222
- // gray-800
186223
- accentForeground: "#f3f4f6",
186224
- // gray-100
186225
- destructive: "#ef4444",
186226
- // red-500
186227
- destructiveForeground: "#ffffff",
186228
- // white
186229
- border: "#374151",
186230
- // gray-700
186231
- input: "#374151",
186232
- // gray-700
186233
- ring: "#6366f1"
186234
- // indigo-500
186235
- };
186236
- var defaultRadius = "0.5rem";
186237
- var lightThemeColors = {
186238
- background: "#f8fafc",
186239
- // slate-50
186240
- foreground: "#0f172a",
186241
- // slate-900
186242
- card: "#ffffff",
186243
- cardForeground: "#0f172a",
186244
- // slate-900
186245
- popover: "#ffffff",
186246
- popoverForeground: "#0f172a",
186247
- // slate-900
186248
- primary: "#4f46e5",
186249
- // indigo-600
186250
- primaryForeground: "#ffffff",
186251
- secondary: "#f1f5f9",
186252
- // slate-100
186253
- secondaryForeground: "#0f172a",
186254
- // slate-900
186255
- muted: "#f1f5f9",
186256
- // slate-100
186257
- mutedForeground: "#64748b",
186258
- // slate-500
186259
- accent: "#f1f5f9",
186260
- // slate-100
186261
- accentForeground: "#0f172a",
186262
- // slate-900
186263
- destructive: "#dc2626",
186264
- // red-600
186265
- destructiveForeground: "#ffffff",
186266
- border: "#e2e8f0",
186267
- // slate-200
186268
- input: "#e2e8f0",
186269
- // slate-200
186270
- ring: "#4f46e5"
186271
- // indigo-600
186272
- };
186273
- var lightTheme = {
186274
- colors: lightThemeColors
186275
- };
186276
- var COLOR_KEY_TO_CSS = {
186277
- background: "background",
186278
- foreground: "foreground",
186279
- card: "card",
186280
- cardForeground: "card-foreground",
186281
- popover: "popover",
186282
- popoverForeground: "popover-foreground",
186283
- primary: "primary",
186284
- primaryForeground: "primary-foreground",
186285
- secondary: "secondary",
186286
- secondaryForeground: "secondary-foreground",
186287
- muted: "muted",
186288
- mutedForeground: "muted-foreground",
186289
- accent: "accent",
186290
- accentForeground: "accent-foreground",
186291
- destructive: "destructive",
186292
- destructiveForeground: "destructive-foreground",
186293
- border: "border",
186294
- input: "input",
186295
- ring: "ring"
186296
- };
186297
- var DERIVED_COLOR_TOKENS = [
186298
- { source: "primary", cssSuffix: "inspector-active" },
186299
- { source: "border", cssSuffix: "inspector-border" }
186300
- ];
186301
- function themeToCssVars(theme, omitDefaults = false) {
186302
- const vars = {};
186303
- if (!theme) {
186304
- return vars;
186305
- }
186306
- const colors = theme.colors;
186307
- if (colors) {
186308
- for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
186309
- const value = colors[key2];
186310
- if (value === void 0) {
186311
- continue;
186312
- }
186313
- if (omitDefaults && value === defaultThemeColors[key2]) {
186314
- continue;
186315
- }
186316
- vars[`--pptx-${cssSuffix}`] = value;
186317
- vars[`--color-${cssSuffix}`] = value;
186318
- }
186319
- for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
186320
- const value = colors[source];
186321
- if (value === void 0) {
186322
- continue;
186323
- }
186324
- if (omitDefaults && value === defaultThemeColors[source]) {
186325
- continue;
186326
- }
186327
- vars[`--pptx-${cssSuffix}`] = value;
186328
- }
186329
- }
186330
- if (theme.radius !== void 0) {
186331
- if (!omitDefaults || theme.radius !== defaultRadius) {
186332
- vars["--pptx-radius"] = theme.radius;
186333
- const r = theme.radius;
186334
- vars["--radius-sm"] = `calc(${r} - 4px)`;
186335
- vars["--radius-md"] = `calc(${r} - 2px)`;
186336
- vars["--radius-lg"] = r;
186337
- vars["--radius-xl"] = `calc(${r} + 4px)`;
186338
- }
186339
- }
186340
- if (theme.cssVars) {
186341
- for (const [key2, value] of Object.entries(theme.cssVars)) {
186342
- vars[key2] = value;
186343
- }
186344
- }
186345
- return vars;
186346
- }
186347
- function defaultCssVars() {
186348
- const vars = {};
186349
- for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
186350
- vars[`--pptx-${cssSuffix}`] = defaultThemeColors[key2];
186351
- }
186352
- for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
186353
- vars[`--pptx-${cssSuffix}`] = defaultThemeColors[source];
186354
- }
186355
- vars["--pptx-radius"] = defaultRadius;
186356
- return vars;
186357
- }
186358
- var vermilionLightColors = {
186359
- background: "#fbfaf7",
186360
- foreground: "#1a1d21",
186361
- card: "#ffffff",
186362
- cardForeground: "#1a1d21",
186363
- popover: "#ffffff",
186364
- popoverForeground: "#1a1d21",
186365
- primary: "#c2431f",
186366
- primaryForeground: "#ffffff",
186367
- secondary: "#f2efe8",
186368
- secondaryForeground: "#1a1d21",
186369
- muted: "#f2efe8",
186370
- mutedForeground: "#5a626e",
186371
- accent: "rgba(194, 67, 31, 0.08)",
186372
- accentForeground: "#1a1d21",
186373
- destructive: "#dc2626",
186374
- destructiveForeground: "#ffffff",
186375
- border: "#e6e2d9",
186376
- input: "#e6e2d9",
186377
- ring: "#c2431f"
186378
- };
186379
- var vermilionDarkColors = {
186380
- background: "#0f1113",
186381
- foreground: "#f0efec",
186382
- card: "#171a1e",
186383
- cardForeground: "#f0efec",
186384
- popover: "#171a1e",
186385
- popoverForeground: "#f0efec",
186386
- primary: "#e86a40",
186387
- primaryForeground: "#ffffff",
186388
- secondary: "#1f242b",
186389
- secondaryForeground: "#f0efec",
186390
- muted: "#1f242b",
186391
- mutedForeground: "#9aa1ab",
186392
- accent: "rgba(232, 106, 64, 0.1)",
186393
- accentForeground: "#f0efec",
186394
- destructive: "#ef4444",
186395
- destructiveForeground: "#ffffff",
186396
- border: "#272c33",
186397
- input: "#272c33",
186398
- ring: "#e86a40"
186399
- };
186400
- var vermilionRadius = "0.375rem";
186401
- var vermilionLightTheme = {
186402
- colors: vermilionLightColors,
186403
- radius: vermilionRadius
186404
- };
186405
- var vermilionDarkTheme = {
186406
- colors: vermilionDarkColors,
186407
- radius: vermilionRadius
186408
- };
186409
- var THEME_CATALOG = [
186410
- { key: "default", labelKey: "pptx.settings.theme.default", theme: void 0 },
186411
- { key: "light", labelKey: "pptx.settings.theme.light", theme: lightTheme },
186412
- {
186413
- key: "vermilionLight",
186414
- labelKey: "pptx.settings.theme.vermilionLight",
186415
- theme: vermilionLightTheme
186416
- },
186417
- {
186418
- key: "vermilionDark",
186419
- labelKey: "pptx.settings.theme.vermilionDark",
186420
- theme: vermilionDarkTheme
186421
- }
186422
- ];
186423
- function resolveThemeCatalogEntry(key2, catalog = THEME_CATALOG) {
186424
- return catalog.find((entry5) => entry5.key === key2)?.theme;
186425
- }
186426
- function corePreset(id) {
186427
- const preset22 = THEME_PRESETS.find((p) => p.id === id);
186428
- if (!preset22) {
186429
- throw new Error(`theme-gallery-presets: core THEME_PRESETS is missing "${id}"`);
186430
- }
186431
- return preset22;
186432
- }
186433
- var WISP_PRESET = {
186434
- id: "wisp",
186435
- name: "Wisp",
186436
- colorScheme: {
186437
- dk1: "#000000",
186438
- lt1: "#FFFFFF",
186439
- dk2: "#46393B",
186440
- lt2: "#E8DCD8",
186441
- accent1: "#A53010",
186442
- accent2: "#DE7E18",
186443
- accent3: "#9F8351",
186444
- accent4: "#728653",
186445
- accent5: "#92AA4C",
186446
- accent6: "#6AAC91",
186447
- hlink: "#FB4F14",
186448
- folHlink: "#E25839"
186449
- },
186450
- fontScheme: {
186451
- majorFont: { latin: "Century Gothic" },
186452
- minorFont: { latin: "Century Gothic" }
186453
- }
186454
- };
186455
- var BERLIN_PRESET = {
186456
- id: "berlin",
186457
- name: "Berlin",
186458
- colorScheme: {
186459
- dk1: "#000000",
186460
- lt1: "#FFFFFF",
186461
- dk2: "#3E5C61",
186462
- lt2: "#D5E0D0",
186463
- accent1: "#F09415",
186464
- accent2: "#C1B56B",
186465
- accent3: "#89C2A3",
186466
- accent4: "#729BBE",
186467
- accent5: "#9A90C2",
186468
- accent6: "#BE8DBE",
186469
- hlink: "#25A0DA",
186470
- folHlink: "#FF7F00"
186471
- },
186472
- fontScheme: {
186473
- majorFont: { latin: "Trebuchet MS" },
186474
- minorFont: { latin: "Trebuchet MS" }
186475
- }
186476
- };
186477
- var SLICE_PRESET = {
186478
- id: "slice",
186479
- name: "Slice",
186480
- colorScheme: {
186481
- dk1: "#000000",
186482
- lt1: "#FFFFFF",
186483
- dk2: "#2E3B4C",
186484
- lt2: "#C7CDD3",
186485
- accent1: "#E2751D",
186486
- accent2: "#C53B23",
186487
- accent3: "#A13D69",
186488
- accent4: "#58599E",
186489
- accent5: "#36749D",
186490
- accent6: "#4EA39A",
186491
- hlink: "#FD6B32",
186492
- folHlink: "#D14D0F"
186493
- },
186494
- fontScheme: {
186495
- majorFont: { latin: "Century Gothic" },
186496
- minorFont: { latin: "Century Gothic" }
186497
- }
186498
- };
186499
- var DIVIDEND_PRESET = {
186500
- id: "dividend",
186501
- name: "Dividend",
186502
- colorScheme: {
186503
- dk1: "#000000",
186504
- lt1: "#FFFFFF",
186505
- dk2: "#3D3D3D",
186506
- lt2: "#E1E1E1",
186507
- accent1: "#4D1434",
186508
- accent2: "#903163",
186509
- accent3: "#B2324B",
186510
- accent4: "#D34817",
186511
- accent5: "#E8971C",
186512
- accent6: "#FDCB00",
186513
- hlink: "#A03068",
186514
- folHlink: "#C34882"
186515
- },
186516
- fontScheme: {
186517
- majorFont: { latin: "Gill Sans MT" },
186518
- minorFont: { latin: "Gill Sans MT" }
186519
- }
186520
- };
186521
- [
186522
- corePreset("office"),
186523
- corePreset("facet"),
186524
- corePreset("integral"),
186525
- corePreset("ion"),
186526
- corePreset("retrospect"),
186527
- corePreset("organic"),
186528
- WISP_PRESET,
186529
- BERLIN_PRESET,
186530
- SLICE_PRESET,
186531
- DIVIDEND_PRESET
186532
- ];
186533
- function createPresentationLoadResources(handler) {
186534
- const blobUrls = [];
186535
- let committed = false;
186536
- let released = false;
186537
- return {
186538
- blobUrls,
186539
- /** The live viewer now owns the handler and media URLs. */
186540
- commit() {
186541
- committed = true;
186542
- },
186543
- /** Call in finally, after pending asset reads have settled. */
186544
- releaseIfUncommitted() {
186545
- if (committed || released) {
186546
- return;
186547
- }
186548
- released = true;
186549
- handler.dispose();
186550
- for (const url of blobUrls) {
186551
- if (url.startsWith("blob:")) {
186552
- URL.revokeObjectURL(url);
186553
- }
186554
- }
186555
- }
186556
- };
186557
- }
186558
- function walkAndPatchElements(elements, patch) {
186559
- let mutated = false;
186560
- const next = elements.map((el) => {
186561
- let updated = patch(el);
186562
- if (updated.type === "group" && updated.children?.length) {
186563
- const newChildren = walkAndPatchElements(updated.children, patch);
186564
- if (newChildren !== updated.children) {
186565
- updated = { ...updated, children: newChildren };
186566
- }
186567
- }
186568
- if (updated !== el) {
186569
- mutated = true;
186570
- }
186571
- return updated;
186572
- });
186573
- return mutated ? next : elements;
186574
- }
186575
- function applyImagePathPatches(elements, resolvedMap, refs) {
186576
- const elementPatches = /* @__PURE__ */ new Map();
186577
- for (const ref of refs) {
186578
- const url = resolvedMap.get(ref.path);
186579
- if (!url) {
186580
- continue;
186581
- }
186582
- const existing = elementPatches.get(ref.element.id) ?? {};
186583
- existing[ref.field] = url;
186584
- elementPatches.set(ref.element.id, existing);
186585
- }
186586
- if (elementPatches.size === 0) {
186587
- return elements;
186588
- }
186589
- return walkAndPatchElements(elements, (el) => {
186590
- const patch = elementPatches.get(el.id);
186591
- return patch ? { ...el, ...patch } : el;
186592
- });
186593
- }
186594
- function isExternalUrl(path) {
186595
- return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
186596
- }
186597
- function collectMediaElements(elements, collector) {
186598
- for (const element of elements) {
186599
- if (element.type === "media") {
186600
- collector.push(element);
186601
- continue;
186602
- }
186603
- if (element.type === "group" && element.children?.length) {
186604
- collectMediaElements(element.children, collector);
186605
- }
186606
- }
186607
- }
186608
- function collectImagePaths(slides) {
186609
- const paths = /* @__PURE__ */ new Set();
186610
- const refs = [];
186611
- const walkElements = (elements) => {
186612
- for (const el of elements) {
186613
- if (el.type === "picture" || el.type === "image") {
186614
- const pic = el;
186615
- if (pic.imagePath && !pic.imageData && !isExternalUrl(pic.imagePath)) {
186616
- paths.add(pic.imagePath);
186617
- refs.push({ element: el, field: "imageData", path: pic.imagePath });
186618
- }
186619
- if (pic.svgPath && !pic.svgData && !isExternalUrl(pic.svgPath)) {
186620
- paths.add(pic.svgPath);
186621
- refs.push({ element: el, field: "svgData", path: pic.svgPath });
186622
- }
186623
- }
186624
- if (el.type === "media") {
186625
- const media = el;
186626
- if (media.posterFramePath && !media.posterFrameData && !isExternalUrl(media.posterFramePath)) {
186627
- paths.add(media.posterFramePath);
186628
- refs.push({
186629
- element: el,
186630
- field: "posterFrameData",
186631
- path: media.posterFramePath
186632
- });
186633
- }
186634
- }
186635
- if (el.type === "model3d") {
186636
- const model = el;
186637
- if (model.modelPath && !model.modelData && !isExternalUrl(model.modelPath)) {
186638
- paths.add(model.modelPath);
186639
- refs.push({ element: el, field: "modelData", path: model.modelPath });
186640
- }
186641
- const posterNeedsResolution = model.posterImage ? !isExternalUrl(model.posterImage) : !model.imageData;
186642
- if (model.imagePath && posterNeedsResolution && !isExternalUrl(model.imagePath)) {
186643
- paths.add(model.imagePath);
186644
- refs.push({ element: el, field: "posterImage", path: model.imagePath });
186645
- }
186646
- }
186647
- if (el.type === "group" && el.children?.length) {
186648
- walkElements(el.children);
186649
- }
186650
- }
186651
- };
186652
- for (const slide of slides) {
186653
- walkElements(slide.elements);
186654
- }
186655
- return { paths, refs };
186656
- }
186657
- function collectTableCellImagePaths(slides) {
186658
- const paths = /* @__PURE__ */ new Set();
186659
- const refs = [];
186660
- const walkElements = (elements) => {
186661
- for (const el of elements) {
186662
- if (el.type === "table") {
186663
- const rows = el.tableData?.rows ?? [];
186664
- rows.forEach((row, rowIndex) => {
186665
- row.cells.forEach((cell, cellIndex) => {
186666
- const path = cell.style?.backgroundImageFillPath;
186667
- if (path && !cell.style?.backgroundImageFillData && !isExternalUrl(path)) {
186668
- paths.add(path);
186669
- refs.push({ element: el, rowIndex, cellIndex, path });
186670
- }
186671
- });
186672
- });
186673
- }
186674
- if (el.type === "group" && el.children?.length) {
186675
- walkElements(el.children);
186676
- }
186677
- }
186678
- };
186679
- for (const slide of slides) {
186680
- walkElements(slide.elements);
186681
- }
186682
- return { paths, refs };
186683
- }
186684
- function applyTableCellImagePatches(elements, resolvedMap, refs) {
186685
- const patchesByElementId = /* @__PURE__ */ new Map();
186686
- for (const ref of refs) {
186687
- const url = resolvedMap.get(ref.path);
186688
- if (!url) {
186689
- continue;
186690
- }
186691
- const list2 = patchesByElementId.get(ref.element.id) ?? [];
186692
- list2.push({ rowIndex: ref.rowIndex, cellIndex: ref.cellIndex, url });
186693
- patchesByElementId.set(ref.element.id, list2);
186694
- }
186695
- if (patchesByElementId.size === 0) {
186696
- return elements;
186697
- }
186698
- return walkAndPatchElements(elements, (el) => {
186699
- const cellPatches = patchesByElementId.get(el.id);
186700
- if (!cellPatches || el.type !== "table") {
186701
- return el;
186702
- }
186703
- const table2 = el;
186704
- const tableData = table2.tableData;
186705
- if (!tableData) {
186706
- return el;
186707
- }
186708
- const newRows = tableData.rows.map((row, rowIndex) => {
186709
- const rowPatches = cellPatches.filter((p) => p.rowIndex === rowIndex);
186710
- if (rowPatches.length === 0) {
186711
- return row;
186712
- }
186713
- const newCells = row.cells.map((cell, cellIndex) => {
186714
- const patch = rowPatches.find((p) => p.cellIndex === cellIndex);
186715
- if (!patch || !cell.style) {
186716
- return cell;
186717
- }
186718
- return {
186719
- ...cell,
186720
- style: { ...cell.style, backgroundImageFillData: patch.url }
186721
- };
186722
- });
186723
- return { ...row, cells: newCells };
186724
- });
186725
- return { ...table2, tableData: { ...tableData, rows: newRows } };
186726
- });
186727
- }
186728
- function buildInitialGuides(presentationGuides, firstSlideGuides) {
186729
- const guides = [];
186730
- if (presentationGuides) {
186731
- for (const g2 of presentationGuides) {
186732
- guides.push({
186733
- id: g2.id,
186734
- axis: g2.orientation === "horz" ? "h" : "v",
186735
- position: guideEmuToPx(g2.positionEmu)
186736
- });
186737
- }
186738
- }
186739
- if (firstSlideGuides) {
186740
- for (const g2 of firstSlideGuides) {
186741
- guides.push({
186742
- id: g2.id,
186743
- axis: g2.orientation === "horz" ? "h" : "v",
186744
- position: guideEmuToPx(g2.positionEmu)
186745
- });
186746
- }
186747
- }
186748
- return guides;
186749
- }
186750
- async function resolveMediaElementSource(mediaElement, handler) {
186751
- const mediaPath = mediaElement.mediaPath;
186752
- if (!mediaPath) {
186753
- return { mediaPath: void 0, url: void 0, isBlobUrl: false, missing: true };
186754
- }
186755
- if (isExternalUrl(mediaPath)) {
186756
- return { mediaPath, url: mediaPath, isBlobUrl: false, missing: false };
186757
- }
186758
- try {
186759
- const isAudioVideo = mediaElement.mediaType === "audio" || mediaElement.mediaType === "video";
186760
- if (isAudioVideo) {
186761
- const arrayBuffer = await handler.getMediaArrayBuffer(mediaPath);
186762
- if (!arrayBuffer) {
186763
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186764
- }
186765
- const mimeType = mediaElement.mediaMimeType || "application/octet-stream";
186766
- const blobUrl = URL.createObjectURL(new Blob([arrayBuffer], { type: mimeType }));
186767
- return { mediaPath, url: blobUrl, isBlobUrl: true, missing: false };
186768
- }
186769
- const dataUrl = await handler.getImageData(mediaPath);
186770
- if (!dataUrl) {
186771
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186772
- }
186773
- return { mediaPath, url: dataUrl, isBlobUrl: false, missing: false };
186774
- } catch {
186775
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186776
- }
186777
- }
186778
- var TABLE_STYLE_FILL_KEYS = [
186779
- "wholeTblFill",
186780
- "band1HFill",
186781
- "band2HFill",
186782
- "band1VFill",
186783
- "band2VFill",
186784
- "lastColFill",
186785
- "firstColFill",
186786
- "lastRowFill",
186787
- "seCellFill",
186788
- "swCellFill",
186789
- "firstRowFill",
186790
- "neCellFill",
186791
- "nwCellFill"
186792
- ];
186793
- function isExternalUrl2(path) {
186794
- return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
186795
- }
186796
- function collectTableStyleImagePaths(tableStyleMap) {
186797
- const paths = /* @__PURE__ */ new Set();
186798
- const refs = [];
186799
- if (!tableStyleMap) {
186800
- return { paths, refs };
186801
- }
186802
- for (const [styleId, entry5] of Object.entries(tableStyleMap)) {
186803
- for (const fillKey of TABLE_STYLE_FILL_KEYS) {
186804
- const fill = entry5[fillKey];
186805
- const path = fill?.image?.path;
186806
- if (path && !fill?.image?.data && !isExternalUrl2(path)) {
186807
- paths.add(path);
186808
- refs.push({ styleId, fillKey, path });
186809
- }
186810
- }
186811
- }
186812
- return { paths, refs };
186813
- }
186814
- function applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs) {
186815
- const patchesByStyleId = /* @__PURE__ */ new Map();
186816
- for (const ref of refs) {
186817
- const url = resolvedMap.get(ref.path);
186818
- if (!url) {
186819
- continue;
186820
- }
186821
- const list2 = patchesByStyleId.get(ref.styleId) ?? [];
186822
- list2.push({ fillKey: ref.fillKey, url });
186823
- patchesByStyleId.set(ref.styleId, list2);
186824
- }
186825
- if (patchesByStyleId.size === 0) {
186826
- return tableStyleMap;
186827
- }
186828
- const next = { ...tableStyleMap };
186829
- for (const [styleId, patches] of patchesByStyleId) {
186830
- const entry5 = next[styleId];
186831
- if (!entry5) {
186832
- continue;
186833
- }
186834
- const patchedEntry = { ...entry5 };
186835
- for (const { fillKey, url } of patches) {
186836
- const fill = patchedEntry[fillKey];
186837
- if (!fill?.image) {
186838
- continue;
186839
- }
186840
- patchedEntry[fillKey] = { ...fill, image: { ...fill.image, data: url } };
186841
- }
186842
- next[styleId] = patchedEntry;
186843
- }
186844
- return next;
186845
- }
186846
- function collectTextFillBlipPaths(slides) {
186847
- const paths = /* @__PURE__ */ new Set();
186848
- const refs = [];
186849
- const walkElements = (elements) => {
186850
- for (const el of elements) {
186851
- if (hasTextProperties(el) && el.textSegments) {
186852
- el.textSegments.forEach((segment, segmentIndex) => {
186853
- const path = segment.style?.textFillBlipUrl;
186854
- if (path && !isExternalUrl(path)) {
186855
- paths.add(path);
186856
- refs.push({ element: el, segmentIndex, path });
186857
- }
186858
- });
186859
- }
186860
- if (el.type === "group" && el.children?.length) {
186861
- walkElements(el.children);
186862
- }
186863
- }
186864
- };
186865
- for (const slide of slides) {
186866
- walkElements(slide.elements);
186867
- }
186868
- return { paths, refs };
186869
- }
186870
- function applyTextFillBlipPatches(elements, resolvedMap, refs) {
186871
- const patchesByElementId = /* @__PURE__ */ new Map();
186872
- for (const ref of refs) {
186873
- const url = resolvedMap.get(ref.path);
186874
- if (!url) {
186875
- continue;
186876
- }
186877
- const list2 = patchesByElementId.get(ref.element.id) ?? [];
186878
- list2.push({ segmentIndex: ref.segmentIndex, url });
186879
- patchesByElementId.set(ref.element.id, list2);
186880
- }
186881
- if (patchesByElementId.size === 0) {
186882
- return elements;
186883
- }
186884
- return walkAndPatchElements(elements, (el) => {
186885
- const segmentPatches = patchesByElementId.get(el.id);
186886
- if (!segmentPatches || !hasTextProperties(el) || !el.textSegments) {
186887
- return el;
186888
- }
186889
- const newSegments = el.textSegments.map((segment, segmentIndex) => {
186890
- const patch = segmentPatches.find((p) => p.segmentIndex === segmentIndex);
186891
- if (!patch || !segment.style) {
186892
- return segment;
186893
- }
186894
- return { ...segment, style: { ...segment.style, textFillBlipUrl: patch.url } };
186895
- });
186896
- return { ...el, textSegments: newSegments };
186897
- });
186898
- }
186899
- async function resolveTableCellImageUrls(slides, getImageData) {
186900
- const { paths, refs } = collectTableCellImagePaths(slides);
186901
- if (paths.size === 0) {
186902
- return slides;
186903
- }
186904
- const resolvedMap = /* @__PURE__ */ new Map();
186905
- await Promise.all(
186906
- Array.from(paths).map(async (path) => {
186907
- try {
186908
- const url = await getImageData(path);
186909
- if (url) {
186910
- resolvedMap.set(path, url);
186911
- }
186912
- } catch {
186913
- }
186914
- })
186915
- );
186916
- if (resolvedMap.size === 0) {
186917
- return slides;
186918
- }
186919
- return slides.map((slide) => {
186920
- const newElements = applyTableCellImagePatches(slide.elements, resolvedMap, refs);
186921
- return newElements === slide.elements ? slide : { ...slide, elements: newElements };
186922
- });
186923
- }
186924
- async function resolveTableStyleImageUrls(tableStyleMap, getImageData) {
186925
- const { paths, refs } = collectTableStyleImagePaths(tableStyleMap);
186926
- if (paths.size === 0 || !tableStyleMap) {
186927
- return tableStyleMap;
186928
- }
186929
- const resolvedMap = /* @__PURE__ */ new Map();
186930
- await Promise.all(
186931
- Array.from(paths).map(async (path) => {
186932
- try {
186933
- const url = await getImageData(path);
186934
- if (url) {
186935
- resolvedMap.set(path, url);
186936
- }
186937
- } catch {
186938
- }
186939
- })
186940
- );
186941
- if (resolvedMap.size === 0) {
186942
- return tableStyleMap;
186943
- }
186944
- return applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs);
186945
- }
186946
- async function resolveTextFillBlipUrls(slides, getImageData) {
186947
- const { paths, refs } = collectTextFillBlipPaths(slides);
186948
- if (paths.size === 0) {
186949
- return slides;
186950
- }
186951
- const resolvedMap = /* @__PURE__ */ new Map();
186952
- await Promise.all(
186953
- Array.from(paths).map(async (path) => {
186954
- try {
186955
- const url = await getImageData(path);
186956
- if (url) {
186957
- resolvedMap.set(path, url);
186958
- }
186959
- } catch {
186960
- }
186961
- })
186962
- );
186963
- if (resolvedMap.size === 0) {
186964
- return slides;
186965
- }
186966
- return slides.map((slide) => {
186967
- const newElements = applyTextFillBlipPatches(slide.elements, resolvedMap, refs);
186968
- return newElements === slide.elements ? slide : { ...slide, elements: newElements };
186969
- });
186970
- }
186971
- init_constants2();
186972
186458
  function resolveLiveCustomGeometryPath(element) {
186973
186459
  const el = element;
186974
186460
  if (!el.pathData || !el.pathWidth || !el.pathHeight) {
@@ -196871,7 +196357,7 @@ function resolveAutoAdvanceDelayMs(slide, options) {
196871
196357
  }
196872
196358
  return advanceAfterMs;
196873
196359
  }
196874
- var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [role="dialog"]';
196360
+ var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [data-pptx-anim-trigger], [role="dialog"]';
196875
196361
  function isInertMedia(node) {
196876
196362
  return (node.tagName === "VIDEO" || node.tagName === "AUDIO") && !node.controls;
196877
196363
  }
@@ -200035,6 +199521,269 @@ function collectDiagramBuildInfo(timeline) {
200035
199521
  }
200036
199522
  return info;
200037
199523
  }
199524
+ var CLICK_EVENTS = /* @__PURE__ */ new Set(["onClick", "onNext"]);
199525
+ var TIMENODE_EVENTS = /* @__PURE__ */ new Set([
199526
+ "onBegin",
199527
+ "onEnd",
199528
+ "begin",
199529
+ "end",
199530
+ "onStopAudio"
199531
+ ]);
199532
+ function normalizeDelay(delay) {
199533
+ if (delay === void 0) {
199534
+ return { ms: 0, indefinite: false };
199535
+ }
199536
+ if (delay < 0) {
199537
+ return { ms: 0, indefinite: true };
199538
+ }
199539
+ return { ms: delay, indefinite: false };
199540
+ }
199541
+ function resolveEffectiveEndCondition(conditions) {
199542
+ if (!conditions || conditions.length === 0) {
199543
+ return void 0;
199544
+ }
199545
+ const result = {
199546
+ endsOnMouseOut: false,
199547
+ endsOnClick: false,
199548
+ indefinite: false
199549
+ };
199550
+ for (const cond of conditions) {
199551
+ const evt = cond.event;
199552
+ if (evt === "onMouseOut") {
199553
+ result.endsOnMouseOut = true;
199554
+ } else if (evt && CLICK_EVENTS.has(evt)) {
199555
+ result.endsOnClick = true;
199556
+ if (cond.targetShapeId) {
199557
+ result.clickTargetShapeId = cond.targetShapeId;
199558
+ }
199559
+ } else if (evt && TIMENODE_EVENTS.has(evt) && cond.targetTimeNodeId !== void 0) {
199560
+ result.endsWithTimeNodeId = cond.targetTimeNodeId;
199561
+ }
199562
+ const { ms, indefinite } = normalizeDelay(cond.delay);
199563
+ if (indefinite) {
199564
+ result.indefinite = true;
199565
+ } else if (ms > 0 && result.delayMs === void 0) {
199566
+ result.delayMs = ms;
199567
+ }
199568
+ }
199569
+ return result;
199570
+ }
199571
+ function resolveAnimationEnd(anim) {
199572
+ return resolveEffectiveEndCondition(anim.endConditions);
199573
+ }
199574
+ var HOVER_EVENTS = /* @__PURE__ */ new Set(["onMouseOver"]);
199575
+ function isInteractiveTrigger(trigger) {
199576
+ return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
199577
+ }
199578
+ function classifyCondition(cond) {
199579
+ const evt = cond.event;
199580
+ if (evt && CLICK_EVENTS.has(evt)) {
199581
+ return "click";
199582
+ }
199583
+ if (evt && HOVER_EVENTS.has(evt)) {
199584
+ return "hover";
199585
+ }
199586
+ if (evt === "onMediaBookmark" && cond.bookmarkTarget) {
199587
+ return "bookmark";
199588
+ }
199589
+ if (evt && TIMENODE_EVENTS.has(evt)) {
199590
+ if (cond.targetTimeNodeId !== void 0) {
199591
+ return "timenode";
199592
+ }
199593
+ if (evt === "onStopAudio" && cond.targetShapeId !== void 0) {
199594
+ return "timenode";
199595
+ }
199596
+ }
199597
+ return "delay";
199598
+ }
199599
+ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
199600
+ const base = {
199601
+ trigger: fallbackTrigger,
199602
+ delayMs: 0,
199603
+ hasClickAlternative: false,
199604
+ hasHoverAlternative: false,
199605
+ indefinite: false,
199606
+ requiresInteraction: isInteractiveTrigger(fallbackTrigger)
199607
+ };
199608
+ if (!conditions || conditions.length === 0) {
199609
+ return base;
199610
+ }
199611
+ let timenode;
199612
+ let bookmarkCond;
199613
+ let delayCond;
199614
+ let clickCond;
199615
+ let hoverCond;
199616
+ for (const cond of conditions) {
199617
+ switch (classifyCondition(cond)) {
199618
+ case "timenode":
199619
+ if (!timenode) {
199620
+ timenode = cond;
199621
+ } else if (cond.targetTimeNodeId !== void 0) {
199622
+ if (timenode.targetTimeNodeId === void 0 || cond.targetTimeNodeId < timenode.targetTimeNodeId) {
199623
+ timenode = cond;
199624
+ }
199625
+ }
199626
+ break;
199627
+ case "bookmark":
199628
+ if (!bookmarkCond) {
199629
+ bookmarkCond = cond;
199630
+ }
199631
+ break;
199632
+ case "delay":
199633
+ if (!delayCond || (cond.delay ?? 0) < (delayCond.delay ?? 0)) {
199634
+ delayCond = cond;
199635
+ }
199636
+ break;
199637
+ case "click":
199638
+ if (!clickCond) {
199639
+ clickCond = cond;
199640
+ }
199641
+ break;
199642
+ case "hover":
199643
+ if (!hoverCond) {
199644
+ hoverCond = cond;
199645
+ }
199646
+ break;
199647
+ }
199648
+ }
199649
+ base.hasClickAlternative = clickCond !== void 0;
199650
+ base.hasHoverAlternative = hoverCond !== void 0;
199651
+ if (clickCond?.targetShapeId) {
199652
+ base.clickTargetShapeId = clickCond.targetShapeId;
199653
+ }
199654
+ if (timenode) {
199655
+ const { ms, indefinite } = normalizeDelay(timenode.delay);
199656
+ base.trigger = timenode.event === "onBegin" || timenode.event === "begin" ? "withPrevious" : "afterPrevious";
199657
+ base.delayMs = ms;
199658
+ base.indefinite = indefinite;
199659
+ base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
199660
+ base.dependsOnShapeId = timenode.targetTimeNodeId === void 0 ? timenode.targetShapeId : void 0;
199661
+ base.dependsOnEvent = timenode.event;
199662
+ base.requiresInteraction = false;
199663
+ return base;
199664
+ }
199665
+ if (bookmarkCond?.bookmarkTarget) {
199666
+ base.trigger = "afterPrevious";
199667
+ base.delayMs = 0;
199668
+ base.dependsOnShapeId = bookmarkCond.bookmarkTarget.shapeId;
199669
+ base.dependsOnEvent = "onMediaBookmark";
199670
+ base.dependsOnBookmarkName = bookmarkCond.bookmarkTarget.bookmarkName;
199671
+ base.requiresInteraction = false;
199672
+ return base;
199673
+ }
199674
+ if (delayCond && (delayCond.delay ?? 0) !== 0) {
199675
+ const { ms, indefinite } = normalizeDelay(delayCond.delay);
199676
+ base.trigger = clickCond ? "onClick" : "afterDelay";
199677
+ base.delayMs = ms;
199678
+ base.indefinite = indefinite;
199679
+ base.requiresInteraction = indefinite;
199680
+ return base;
199681
+ }
199682
+ if (clickCond) {
199683
+ base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
199684
+ base.requiresInteraction = true;
199685
+ return base;
199686
+ }
199687
+ if (hoverCond) {
199688
+ base.trigger = "onHover";
199689
+ base.requiresInteraction = true;
199690
+ return base;
199691
+ }
199692
+ if (delayCond) {
199693
+ base.trigger = fallbackTrigger;
199694
+ base.delayMs = 0;
199695
+ base.requiresInteraction = false;
199696
+ }
199697
+ return base;
199698
+ }
199699
+ function resolveAnimationStart(anim) {
199700
+ return resolveEffectiveStartCondition(anim.startConditions, anim.trigger ?? "onClick");
199701
+ }
199702
+ var BEZIER_SAMPLES = 8;
199703
+ function cubicAt(p0, c1, c2, p3, t) {
199704
+ const mt = 1 - t;
199705
+ return mt * mt * mt * p0 + 3 * mt * mt * t * c1 + 3 * mt * t * t * c2 + t * t * t * p3;
199706
+ }
199707
+ function allFinite(values) {
199708
+ return values.every((v) => Number.isFinite(v));
199709
+ }
199710
+ function parseMotionPathPoints(motionPath) {
199711
+ const tokens = motionPath.match(/[MLCZmlcz]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/gu);
199712
+ if (!tokens) {
199713
+ return [];
199714
+ }
199715
+ const points4 = [];
199716
+ let curX = 0;
199717
+ let curY = 0;
199718
+ let startX = 0;
199719
+ let startY = 0;
199720
+ let i2 = 0;
199721
+ let cmd = "";
199722
+ const nextNum = () => Number(tokens[i2++]);
199723
+ const push2 = (x, y) => {
199724
+ points4.push({ x: x * 100, y: y * 100 });
199725
+ };
199726
+ while (i2 < tokens.length) {
199727
+ const tok = tokens[i2];
199728
+ if (/^[MLCZmlcz]$/u.test(tok)) {
199729
+ cmd = tok;
199730
+ i2++;
199731
+ if (cmd === "Z" || cmd === "z") {
199732
+ curX = startX;
199733
+ curY = startY;
199734
+ }
199735
+ continue;
199736
+ }
199737
+ const rel = cmd === cmd.toLowerCase();
199738
+ const upper = cmd.toUpperCase();
199739
+ if (upper === "M" || upper === "L") {
199740
+ let x = nextNum();
199741
+ let y = nextNum();
199742
+ if (!allFinite([x, y])) {
199743
+ break;
199744
+ }
199745
+ if (rel) {
199746
+ x += curX;
199747
+ y += curY;
199748
+ }
199749
+ curX = x;
199750
+ curY = y;
199751
+ if (upper === "M") {
199752
+ startX = x;
199753
+ startY = y;
199754
+ cmd = rel ? "l" : "L";
199755
+ }
199756
+ push2(x, y);
199757
+ } else if (upper === "C") {
199758
+ let c1x = nextNum();
199759
+ let c1y = nextNum();
199760
+ let c2x = nextNum();
199761
+ let c2y = nextNum();
199762
+ let ex = nextNum();
199763
+ let ey = nextNum();
199764
+ if (!allFinite([c1x, c1y, c2x, c2y, ex, ey])) {
199765
+ break;
199766
+ }
199767
+ if (rel) {
199768
+ c1x += curX;
199769
+ c1y += curY;
199770
+ c2x += curX;
199771
+ c2y += curY;
199772
+ ex += curX;
199773
+ ey += curY;
199774
+ }
199775
+ for (let s = 1; s <= BEZIER_SAMPLES; s++) {
199776
+ const t = s / BEZIER_SAMPLES;
199777
+ push2(cubicAt(curX, c1x, c2x, ex, t), cubicAt(curY, c1y, c2y, ey, t));
199778
+ }
199779
+ curX = ex;
199780
+ curY = ey;
199781
+ } else {
199782
+ i2++;
199783
+ }
199784
+ }
199785
+ return points4;
199786
+ }
200038
199787
  var BACKGROUND_ANIMATION_ID_SUFFIX = "::pptx-bg";
200039
199788
  function resolveAnimationTargetId(animation) {
200040
199789
  const targetId = (animation.target?.type === "shape" ? animation.target.subShapeId : void 0) ?? animation.targetId ?? "";
@@ -200043,6 +199792,42 @@ function resolveAnimationTargetId(animation) {
200043
199792
  }
200044
199793
  return targetId;
200045
199794
  }
199795
+ var DEFAULT_SLIDE_ASPECT = 16 / 9;
199796
+ function pacedFractions(points4, aspect = DEFAULT_SLIDE_ASPECT) {
199797
+ const lengths = [0];
199798
+ let total = 0;
199799
+ for (let i2 = 1; i2 < points4.length; i2++) {
199800
+ const dx = (points4[i2].x - points4[i2 - 1].x) * aspect;
199801
+ const dy = points4[i2].y - points4[i2 - 1].y;
199802
+ total += Math.hypot(dx, dy);
199803
+ lengths.push(total);
199804
+ }
199805
+ if (total <= 0) {
199806
+ return points4.map((_, i2) => points4.length > 1 ? i2 / (points4.length - 1) : 0);
199807
+ }
199808
+ return lengths.map((length) => length / total);
199809
+ }
199810
+ function pacedPointAt(points4, fractions, progress) {
199811
+ if (points4.length === 0) {
199812
+ return { x: 0, y: 0 };
199813
+ }
199814
+ if (points4.length === 1 || progress <= 0) {
199815
+ return points4[0];
199816
+ }
199817
+ if (progress >= 1) {
199818
+ return points4[points4.length - 1];
199819
+ }
199820
+ let i2 = 1;
199821
+ while (i2 < points4.length - 1 && fractions[i2] < progress) {
199822
+ i2++;
199823
+ }
199824
+ const span = fractions[i2] - fractions[i2 - 1];
199825
+ const ratio2 = span > 0 ? (progress - fractions[i2 - 1]) / span : 1;
199826
+ return {
199827
+ x: points4[i2 - 1].x + (points4[i2].x - points4[i2 - 1].x) * ratio2,
199828
+ y: points4[i2 - 1].y + (points4[i2].y - points4[i2 - 1].y) * ratio2
199829
+ };
199830
+ }
200046
199831
  var IDENT_RE = /^[#a-zA-Z_$][a-zA-Z0-9_]*/u;
200047
199832
  var NUMBER_RE = /^\d+(\.\d+)?|^\.\d+/u;
200048
199833
  function tokenize2(formula) {
@@ -200577,127 +200362,6 @@ function createAttributeTransformModel(anim, box) {
200577
200362
  }
200578
200363
  };
200579
200364
  }
200580
- var BEZIER_SAMPLES = 8;
200581
- function cubicAt(p0, c1, c2, p3, t) {
200582
- const mt = 1 - t;
200583
- return mt * mt * mt * p0 + 3 * mt * mt * t * c1 + 3 * mt * t * t * c2 + t * t * t * p3;
200584
- }
200585
- function allFinite(values) {
200586
- return values.every((v) => Number.isFinite(v));
200587
- }
200588
- function parseMotionPathPoints(motionPath) {
200589
- const tokens = motionPath.match(/[MLCZmlcz]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/gu);
200590
- if (!tokens) {
200591
- return [];
200592
- }
200593
- const points4 = [];
200594
- let curX = 0;
200595
- let curY = 0;
200596
- let startX = 0;
200597
- let startY = 0;
200598
- let i2 = 0;
200599
- let cmd = "";
200600
- const nextNum = () => Number(tokens[i2++]);
200601
- const push2 = (x, y) => {
200602
- points4.push({ x: x * 100, y: y * 100 });
200603
- };
200604
- while (i2 < tokens.length) {
200605
- const tok = tokens[i2];
200606
- if (/^[MLCZmlcz]$/u.test(tok)) {
200607
- cmd = tok;
200608
- i2++;
200609
- if (cmd === "Z" || cmd === "z") {
200610
- curX = startX;
200611
- curY = startY;
200612
- }
200613
- continue;
200614
- }
200615
- const rel = cmd === cmd.toLowerCase();
200616
- const upper = cmd.toUpperCase();
200617
- if (upper === "M" || upper === "L") {
200618
- let x = nextNum();
200619
- let y = nextNum();
200620
- if (!allFinite([x, y])) {
200621
- break;
200622
- }
200623
- if (rel) {
200624
- x += curX;
200625
- y += curY;
200626
- }
200627
- curX = x;
200628
- curY = y;
200629
- if (upper === "M") {
200630
- startX = x;
200631
- startY = y;
200632
- cmd = rel ? "l" : "L";
200633
- }
200634
- push2(x, y);
200635
- } else if (upper === "C") {
200636
- let c1x = nextNum();
200637
- let c1y = nextNum();
200638
- let c2x = nextNum();
200639
- let c2y = nextNum();
200640
- let ex = nextNum();
200641
- let ey = nextNum();
200642
- if (!allFinite([c1x, c1y, c2x, c2y, ex, ey])) {
200643
- break;
200644
- }
200645
- if (rel) {
200646
- c1x += curX;
200647
- c1y += curY;
200648
- c2x += curX;
200649
- c2y += curY;
200650
- ex += curX;
200651
- ey += curY;
200652
- }
200653
- for (let s = 1; s <= BEZIER_SAMPLES; s++) {
200654
- const t = s / BEZIER_SAMPLES;
200655
- push2(cubicAt(curX, c1x, c2x, ex, t), cubicAt(curY, c1y, c2y, ey, t));
200656
- }
200657
- curX = ex;
200658
- curY = ey;
200659
- } else {
200660
- i2++;
200661
- }
200662
- }
200663
- return points4;
200664
- }
200665
- var DEFAULT_SLIDE_ASPECT = 16 / 9;
200666
- function pacedFractions(points4, aspect = DEFAULT_SLIDE_ASPECT) {
200667
- const lengths = [0];
200668
- let total = 0;
200669
- for (let i2 = 1; i2 < points4.length; i2++) {
200670
- const dx = (points4[i2].x - points4[i2 - 1].x) * aspect;
200671
- const dy = points4[i2].y - points4[i2 - 1].y;
200672
- total += Math.hypot(dx, dy);
200673
- lengths.push(total);
200674
- }
200675
- if (total <= 0) {
200676
- return points4.map((_, i2) => points4.length > 1 ? i2 / (points4.length - 1) : 0);
200677
- }
200678
- return lengths.map((length) => length / total);
200679
- }
200680
- function pacedPointAt(points4, fractions, progress) {
200681
- if (points4.length === 0) {
200682
- return { x: 0, y: 0 };
200683
- }
200684
- if (points4.length === 1 || progress <= 0) {
200685
- return points4[0];
200686
- }
200687
- if (progress >= 1) {
200688
- return points4[points4.length - 1];
200689
- }
200690
- let i2 = 1;
200691
- while (i2 < points4.length - 1 && fractions[i2] < progress) {
200692
- i2++;
200693
- }
200694
- const span = fractions[i2] - fractions[i2 - 1];
200695
- const ratio2 = span > 0 ? (progress - fractions[i2 - 1]) / span : 1;
200696
- return {
200697
- x: points4[i2 - 1].x + (points4[i2].x - points4[i2 - 1].x) * ratio2,
200698
- y: points4[i2 - 1].y + (points4[i2].y - points4[i2 - 1].y) * ratio2
200699
- };
200700
- }
200701
200365
  function slideOffset(percent4, axis, origin) {
200702
200366
  const fallback = axis === "w" ? "1280px" : "720px";
200703
200367
  const varName = origin === "parent" ? `--pptx-parent-${axis}` : `--pptx-slide-${axis}`;
@@ -200844,6 +200508,217 @@ function buildTransformKeyframes(anim, uid, prefixes, box) {
200844
200508
  ${lines.join("\n")}
200845
200509
  }` };
200846
200510
  }
200511
+ function buildChainedMotionKeyframes(anim, uid, prefixes, box) {
200512
+ const chain2 = anim.motionChain;
200513
+ if (!chain2 || chain2.length < 2) {
200514
+ return void 0;
200515
+ }
200516
+ const totalMs = anim.durationMs ?? chain2.reduce((sum, segment) => sum + segment.durationMs, 0);
200517
+ if (totalMs <= 0) {
200518
+ return void 0;
200519
+ }
200520
+ const keyframes = [];
200521
+ for (const segment of chain2) {
200522
+ const fractions = pacedFractions(segment.points, box?.slideAspect);
200523
+ const segStartPct = segment.startMs / totalMs * 100;
200524
+ const segSpanPct = segment.durationMs / totalMs * 100;
200525
+ for (let j = 0; j < segment.points.length; j++) {
200526
+ const fraction = fractions[j];
200527
+ const point2 = pacedPointAt(segment.points, fractions, fraction);
200528
+ const progress = Number((segStartPct + fraction * segSpanPct).toFixed(4));
200529
+ const transform6 = `transform: translate(${slideOffset(point2.x, "w", anim.motionOrigin)}, ${slideOffset(point2.y, "h", anim.motionOrigin)})`;
200530
+ const easing = j === 0 ? segment.easing : void 0;
200531
+ const previous = keyframes[keyframes.length - 1];
200532
+ if (previous && previous.progress === progress) {
200533
+ previous.transform = transform6;
200534
+ previous.easing = easing ?? previous.easing;
200535
+ continue;
200536
+ }
200537
+ keyframes.push({ progress, transform: transform6, easing });
200538
+ }
200539
+ }
200540
+ const hideUntilStart = anim.motionChainHideUntilStart === true;
200541
+ if (hideUntilStart && keyframes.length > 0) {
200542
+ keyframes.splice(1, 0, { ...keyframes[0], progress: 0.01 });
200543
+ }
200544
+ const lines = keyframes.map((keyframe, index) => {
200545
+ const easing = keyframe.easing ? `animation-timing-function: ${keyframe.easing}; ` : "";
200546
+ const opacity2 = hideUntilStart && index === 0 ? "opacity: 0; " : hideUntilStart && index === 1 ? "opacity: 1; " : "";
200547
+ return ` ${formatNumber(keyframe.progress, 2)}% { ${easing}${opacity2}${keyframe.transform}; }`;
200548
+ });
200549
+ const name = `${prefixes.transform}-${uid}${hideUntilStart ? "-visibility" : ""}`;
200550
+ return {
200551
+ keyframeName: name,
200552
+ css: `@keyframes ${name} {
200553
+ ${lines.join("\n")}
200554
+ }`
200555
+ };
200556
+ }
200557
+ function isChainedMotionAnimation(anim) {
200558
+ return anim.motionChain !== void 0;
200559
+ }
200560
+ function isChainedMotionSwallowed(anim) {
200561
+ return anim.motionChainSwallowed === true;
200562
+ }
200563
+ function hasChainBlockingExtras(anim) {
200564
+ return Boolean(
200565
+ anim.rotationBy !== void 0 || anim.rotationFrom !== void 0 || anim.rotationTo !== void 0 || anim.scaleByX !== void 0 || anim.scaleByY !== void 0 || anim.scaleFromX !== void 0 || anim.scaleFromY !== void 0 || anim.scaleToX !== void 0 || anim.scaleToY !== void 0 || anim.colorAnimation || anim.attributeAnimations?.length || anim.setAnimations?.length || anim.repeatCount !== void 0 || anim.repeatDurMs !== void 0 || anim.autoReverse || anim.graphicBuildProperties || anim.iterate || anim.speedPct !== void 0 || anim.afterAnimationAction || anim.startConditions?.some(
200566
+ (condition) => condition.targetTimeNodeId !== void 0 || condition.event !== void 0 && condition.event !== "onClick" && condition.event !== "onMouseOver"
200567
+ )
200568
+ );
200569
+ }
200570
+ function authoredStartMs(anim) {
200571
+ return (anim.parGroupDelayMs ?? 0) + Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0);
200572
+ }
200573
+ function mergeChainedMotionPathAnims(anims) {
200574
+ const candidates = /* @__PURE__ */ new Map();
200575
+ let clickGroup = 0;
200576
+ const clickGroups = [];
200577
+ for (let index = 0; index < anims.length; index++) {
200578
+ const anim = anims[index];
200579
+ if (resolveAnimationStart(anim).trigger === "onClick") {
200580
+ clickGroup++;
200581
+ }
200582
+ clickGroups[index] = clickGroup;
200583
+ if (anim.presetClass !== "path" || !anim.motionPath || anim.parGroupIndex === void 0 || !Number.isFinite(anim.parGroupDelayMs) || !Number.isFinite(anim.durationMs) || (anim.durationMs ?? 0) <= 0) {
200584
+ continue;
200585
+ }
200586
+ if (hasChainBlockingExtras(anim)) {
200587
+ continue;
200588
+ }
200589
+ const targetId = resolveAnimationTargetId(anim);
200590
+ if (!targetId) {
200591
+ continue;
200592
+ }
200593
+ const startMs = authoredStartMs(anim);
200594
+ const candidateKey = JSON.stringify([
200595
+ clickGroup,
200596
+ anim.triggerShapeId,
200597
+ targetId,
200598
+ anim.motionOrigin
200599
+ ]);
200600
+ const run = candidates.get(candidateKey) ?? [];
200601
+ run.push({ index, anim, startMs, endMs: startMs + (anim.durationMs ?? 0) });
200602
+ candidates.set(candidateKey, run);
200603
+ }
200604
+ const swallowedIndices = /* @__PURE__ */ new Set();
200605
+ const replacements = /* @__PURE__ */ new Map();
200606
+ for (const [, run] of candidates) {
200607
+ if (run.length < 2) {
200608
+ continue;
200609
+ }
200610
+ const ordered4 = [...run].sort((left, right) => left.startMs - right.startMs);
200611
+ if (ordered4.slice(1).some((member) => member.anim.trigger === "onClick")) {
200612
+ continue;
200613
+ }
200614
+ if (ordered4.some((member, i2) => i2 > 0 && member.startMs < ordered4[i2 - 1].endMs)) {
200615
+ continue;
200616
+ }
200617
+ const segments = [];
200618
+ const points4 = [];
200619
+ const windowStartMs = ordered4[0].startMs;
200620
+ let windowEndMs = ordered4[0].endMs;
200621
+ let viable = true;
200622
+ for (const member of ordered4) {
200623
+ const segmentPoints = parseMotionPathPoints(member.anim.motionPath ?? "");
200624
+ if (segmentPoints.length < 2) {
200625
+ viable = false;
200626
+ break;
200627
+ }
200628
+ points4.push(...segmentPoints);
200629
+ segments.push({
200630
+ points: segmentPoints,
200631
+ startMs: member.startMs - windowStartMs,
200632
+ durationMs: member.anim.durationMs ?? 0,
200633
+ easing: cssEasingForAccelDecel(member.anim.accel, member.anim.decel)
200634
+ });
200635
+ windowEndMs = Math.max(windowEndMs, member.endMs);
200636
+ }
200637
+ if (!viable) {
200638
+ continue;
200639
+ }
200640
+ const head = ordered4[0];
200641
+ const windowStartMsAbs = windowStartMs;
200642
+ const hasPreChainExit = anims.some(
200643
+ (other, index) => index < head.index && clickGroups[index] === clickGroups[head.index] && other !== head.anim && other.presetClass === "exit" && resolveAnimationTargetId(other) === resolveAnimationTargetId(head.anim) && authoredStartMs(other) + (other.durationMs ?? 0) <= windowStartMsAbs
200644
+ );
200645
+ const synthetic = {
200646
+ ...head.anim,
200647
+ motionPath: pointsToPathString(points4),
200648
+ // The window includes any authored gaps between segments.
200649
+ durationMs: Math.max(1, windowEndMs - windowStartMs),
200650
+ motionChain: segments,
200651
+ motionChainHideUntilStart: hasPreChainExit
200652
+ };
200653
+ replacements.set(head.index, synthetic);
200654
+ for (const member of ordered4.slice(1)) {
200655
+ swallowedIndices.add(member.index);
200656
+ }
200657
+ }
200658
+ if (replacements.size === 0) {
200659
+ return [...anims];
200660
+ }
200661
+ return anims.map((anim, index) => {
200662
+ if (swallowedIndices.has(index)) {
200663
+ return { ...anim, motionChainSwallowed: true };
200664
+ }
200665
+ return replacements.get(index) ?? anim;
200666
+ });
200667
+ }
200668
+ function pointsToPathString(points4) {
200669
+ return points4.map((point2, index) => `${index === 0 ? "M" : "L"} ${point2.x / 100} ${point2.y / 100} `).join("");
200670
+ }
200671
+ function cssKeyframeName(effect) {
200672
+ return `pptx-${effect}`;
200673
+ }
200674
+ function defaultDuration(presetClass) {
200675
+ switch (presetClass) {
200676
+ case "entr":
200677
+ return 500;
200678
+ case "exit":
200679
+ return 500;
200680
+ case "emph":
200681
+ return 800;
200682
+ case "path":
200683
+ return 1e3;
200684
+ default:
200685
+ return 500;
200686
+ }
200687
+ }
200688
+ function fillModeForClass(presetClass) {
200689
+ switch (presetClass) {
200690
+ case "entr":
200691
+ return "both";
200692
+ case "exit":
200693
+ return "forwards";
200694
+ case "emph":
200695
+ return "both";
200696
+ default:
200697
+ return "both";
200698
+ }
200699
+ }
200700
+ function finalizeClickGroup(steps, options) {
200701
+ let maxEnd = 0;
200702
+ for (const step of steps) {
200703
+ const end = step.delayMs + step.durationMs;
200704
+ if (end > maxEnd) {
200705
+ maxEnd = end;
200706
+ }
200707
+ }
200708
+ const group2 = { steps, totalDurationMs: maxEnd };
200709
+ for (const step of steps) {
200710
+ if (group2.seqConcurrent === void 0 && step.seqConcurrent !== void 0) {
200711
+ group2.seqConcurrent = step.seqConcurrent;
200712
+ }
200713
+ if (group2.seqNextAction === void 0 && step.seqNextAction !== void 0) {
200714
+ group2.seqNextAction = step.seqNextAction;
200715
+ }
200716
+ if (group2.seqPrevAction === void 0 && step.seqPrevAction !== void 0) {
200717
+ group2.seqPrevAction = step.seqPrevAction;
200718
+ }
200719
+ }
200720
+ return group2;
200721
+ }
200847
200722
  function resolveEffect(anim, pixelateMosaic) {
200848
200723
  const cls = anim.presetClass;
200849
200724
  const id = anim.presetId;
@@ -200913,6 +200788,15 @@ function boxForAnimation(anim, renderContext) {
200913
200788
  return targetId ? renderContext.getElementBox(targetId) : void 0;
200914
200789
  }
200915
200790
  function buildDynamicKeyframe(anim, uid, renderContext) {
200791
+ const chained = isChainedMotionAnimation(anim) ? buildChainedMotionKeyframes(
200792
+ anim,
200793
+ uid,
200794
+ TIMELINE_TRANSFORM_PREFIXES,
200795
+ boxForAnimation(anim, renderContext)
200796
+ ) : void 0;
200797
+ if (chained) {
200798
+ return chained;
200799
+ }
200916
200800
  const transform6 = buildTransformKeyframes(
200917
200801
  anim,
200918
200802
  uid,
@@ -200943,57 +200827,6 @@ function buildDynamicKeyframe(anim, uid, renderContext) {
200943
200827
  }
200944
200828
  return void 0;
200945
200829
  }
200946
- function cssKeyframeName(effect) {
200947
- return `pptx-${effect}`;
200948
- }
200949
- function defaultDuration(presetClass) {
200950
- switch (presetClass) {
200951
- case "entr":
200952
- return 500;
200953
- case "exit":
200954
- return 500;
200955
- case "emph":
200956
- return 800;
200957
- case "path":
200958
- return 1e3;
200959
- default:
200960
- return 500;
200961
- }
200962
- }
200963
- function fillModeForClass(presetClass) {
200964
- switch (presetClass) {
200965
- case "entr":
200966
- return "both";
200967
- case "exit":
200968
- return "forwards";
200969
- case "emph":
200970
- return "both";
200971
- default:
200972
- return "both";
200973
- }
200974
- }
200975
- function finalizeClickGroup(steps, options) {
200976
- let maxEnd = 0;
200977
- for (const step of steps) {
200978
- const end = step.delayMs + step.durationMs;
200979
- if (end > maxEnd) {
200980
- maxEnd = end;
200981
- }
200982
- }
200983
- const group2 = { steps, totalDurationMs: maxEnd };
200984
- for (const step of steps) {
200985
- if (group2.seqConcurrent === void 0 && step.seqConcurrent !== void 0) {
200986
- group2.seqConcurrent = step.seqConcurrent;
200987
- }
200988
- if (group2.seqNextAction === void 0 && step.seqNextAction !== void 0) {
200989
- group2.seqNextAction = step.seqNextAction;
200990
- }
200991
- if (group2.seqPrevAction === void 0 && step.seqPrevAction !== void 0) {
200992
- group2.seqPrevAction = step.seqPrevAction;
200993
- }
200994
- }
200995
- return group2;
200996
- }
200997
200830
  function clamp015(value) {
200998
200831
  return Math.max(0, Math.min(1, value));
200999
200832
  }
@@ -201130,184 +200963,6 @@ function resolveEffectTiming(anim, baseDurationMs) {
201130
200963
  holdEndState: shouldHoldEndState(anim)
201131
200964
  };
201132
200965
  }
201133
- var CLICK_EVENTS = /* @__PURE__ */ new Set(["onClick", "onNext"]);
201134
- var TIMENODE_EVENTS = /* @__PURE__ */ new Set([
201135
- "onBegin",
201136
- "onEnd",
201137
- "begin",
201138
- "end",
201139
- "onStopAudio"
201140
- ]);
201141
- function normalizeDelay(delay) {
201142
- if (delay === void 0) {
201143
- return { ms: 0, indefinite: false };
201144
- }
201145
- if (delay < 0) {
201146
- return { ms: 0, indefinite: true };
201147
- }
201148
- return { ms: delay, indefinite: false };
201149
- }
201150
- function resolveEffectiveEndCondition(conditions) {
201151
- if (!conditions || conditions.length === 0) {
201152
- return void 0;
201153
- }
201154
- const result = {
201155
- endsOnMouseOut: false,
201156
- endsOnClick: false,
201157
- indefinite: false
201158
- };
201159
- for (const cond of conditions) {
201160
- const evt = cond.event;
201161
- if (evt === "onMouseOut") {
201162
- result.endsOnMouseOut = true;
201163
- } else if (evt && CLICK_EVENTS.has(evt)) {
201164
- result.endsOnClick = true;
201165
- if (cond.targetShapeId) {
201166
- result.clickTargetShapeId = cond.targetShapeId;
201167
- }
201168
- } else if (evt && TIMENODE_EVENTS.has(evt) && cond.targetTimeNodeId !== void 0) {
201169
- result.endsWithTimeNodeId = cond.targetTimeNodeId;
201170
- }
201171
- const { ms, indefinite } = normalizeDelay(cond.delay);
201172
- if (indefinite) {
201173
- result.indefinite = true;
201174
- } else if (ms > 0 && result.delayMs === void 0) {
201175
- result.delayMs = ms;
201176
- }
201177
- }
201178
- return result;
201179
- }
201180
- function resolveAnimationEnd(anim) {
201181
- return resolveEffectiveEndCondition(anim.endConditions);
201182
- }
201183
- var HOVER_EVENTS = /* @__PURE__ */ new Set(["onMouseOver"]);
201184
- function isInteractiveTrigger(trigger) {
201185
- return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
201186
- }
201187
- function classifyCondition(cond) {
201188
- const evt = cond.event;
201189
- if (evt && CLICK_EVENTS.has(evt)) {
201190
- return "click";
201191
- }
201192
- if (evt && HOVER_EVENTS.has(evt)) {
201193
- return "hover";
201194
- }
201195
- if (evt === "onMediaBookmark" && cond.bookmarkTarget) {
201196
- return "bookmark";
201197
- }
201198
- if (evt && TIMENODE_EVENTS.has(evt)) {
201199
- if (cond.targetTimeNodeId !== void 0) {
201200
- return "timenode";
201201
- }
201202
- if (evt === "onStopAudio" && cond.targetShapeId !== void 0) {
201203
- return "timenode";
201204
- }
201205
- }
201206
- return "delay";
201207
- }
201208
- function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
201209
- const base = {
201210
- trigger: fallbackTrigger,
201211
- delayMs: 0,
201212
- hasClickAlternative: false,
201213
- hasHoverAlternative: false,
201214
- indefinite: false,
201215
- requiresInteraction: isInteractiveTrigger(fallbackTrigger)
201216
- };
201217
- if (!conditions || conditions.length === 0) {
201218
- return base;
201219
- }
201220
- let timenode;
201221
- let bookmarkCond;
201222
- let delayCond;
201223
- let clickCond;
201224
- let hoverCond;
201225
- for (const cond of conditions) {
201226
- switch (classifyCondition(cond)) {
201227
- case "timenode":
201228
- if (!timenode) {
201229
- timenode = cond;
201230
- } else if (cond.targetTimeNodeId !== void 0) {
201231
- if (timenode.targetTimeNodeId === void 0 || cond.targetTimeNodeId < timenode.targetTimeNodeId) {
201232
- timenode = cond;
201233
- }
201234
- }
201235
- break;
201236
- case "bookmark":
201237
- if (!bookmarkCond) {
201238
- bookmarkCond = cond;
201239
- }
201240
- break;
201241
- case "delay":
201242
- if (!delayCond || (cond.delay ?? 0) < (delayCond.delay ?? 0)) {
201243
- delayCond = cond;
201244
- }
201245
- break;
201246
- case "click":
201247
- if (!clickCond) {
201248
- clickCond = cond;
201249
- }
201250
- break;
201251
- case "hover":
201252
- if (!hoverCond) {
201253
- hoverCond = cond;
201254
- }
201255
- break;
201256
- }
201257
- }
201258
- base.hasClickAlternative = clickCond !== void 0;
201259
- base.hasHoverAlternative = hoverCond !== void 0;
201260
- if (clickCond?.targetShapeId) {
201261
- base.clickTargetShapeId = clickCond.targetShapeId;
201262
- }
201263
- if (timenode) {
201264
- const { ms, indefinite } = normalizeDelay(timenode.delay);
201265
- base.trigger = timenode.event === "onBegin" || timenode.event === "begin" ? "withPrevious" : "afterPrevious";
201266
- base.delayMs = ms;
201267
- base.indefinite = indefinite;
201268
- base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
201269
- base.dependsOnShapeId = timenode.targetTimeNodeId === void 0 ? timenode.targetShapeId : void 0;
201270
- base.dependsOnEvent = timenode.event;
201271
- base.requiresInteraction = false;
201272
- return base;
201273
- }
201274
- if (bookmarkCond?.bookmarkTarget) {
201275
- base.trigger = "afterPrevious";
201276
- base.delayMs = 0;
201277
- base.dependsOnShapeId = bookmarkCond.bookmarkTarget.shapeId;
201278
- base.dependsOnEvent = "onMediaBookmark";
201279
- base.dependsOnBookmarkName = bookmarkCond.bookmarkTarget.bookmarkName;
201280
- base.requiresInteraction = false;
201281
- return base;
201282
- }
201283
- if (delayCond && (delayCond.delay ?? 0) !== 0) {
201284
- const { ms, indefinite } = normalizeDelay(delayCond.delay);
201285
- base.trigger = clickCond ? "onClick" : "afterDelay";
201286
- base.delayMs = ms;
201287
- base.indefinite = indefinite;
201288
- base.requiresInteraction = indefinite;
201289
- return base;
201290
- }
201291
- if (clickCond) {
201292
- base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
201293
- base.requiresInteraction = true;
201294
- return base;
201295
- }
201296
- if (hoverCond) {
201297
- base.trigger = "onHover";
201298
- base.requiresInteraction = true;
201299
- return base;
201300
- }
201301
- if (delayCond) {
201302
- base.trigger = fallbackTrigger;
201303
- base.delayMs = 0;
201304
- base.requiresInteraction = false;
201305
- }
201306
- return base;
201307
- }
201308
- function resolveAnimationStart(anim) {
201309
- return resolveEffectiveStartCondition(anim.startConditions, anim.trigger ?? "onClick");
201310
- }
201311
200966
  function isMediaCommandAnimation(anim) {
201312
200967
  return typeof anim.commandString === "string" && anim.commandString.trim().length > 0;
201313
200968
  }
@@ -202301,6 +201956,49 @@ function composeParallelSteps(left, right) {
202301
201956
  colorTargets: colorTargets.length > 0 ? colorTargets : void 0
202302
201957
  };
202303
201958
  }
201959
+ var TRANSFORM_KEYFRAME_NAME = /^pptx-(?:tl-)?(?:motion|rotate(?:Abs)?|scale(?:Abs)?|transform)-/u;
201960
+ var COLOR_KEYFRAME_NAME = /^pptx-(?:tl-)?(?:color|tavclr)-/u;
201961
+ var FILTER_KEYFRAME_NAME = /^pptx-(?:tl-)?emph-/u;
201962
+ var animatedPropertyCache = /* @__PURE__ */ new Map();
201963
+ function keyframeAnimatedProperties(keyframeName2) {
201964
+ let props = animatedPropertyCache.get(keyframeName2);
201965
+ if (props) {
201966
+ return props;
201967
+ }
201968
+ props = /* @__PURE__ */ new Set();
201969
+ if (TRANSFORM_KEYFRAME_NAME.test(keyframeName2)) {
201970
+ props.add("transform");
201971
+ if (keyframeName2.endsWith("-visibility")) {
201972
+ props.add("opacity");
201973
+ }
201974
+ } else if (COLOR_KEYFRAME_NAME.test(keyframeName2)) {
201975
+ props.add("color");
201976
+ } else if (FILTER_KEYFRAME_NAME.test(keyframeName2)) {
201977
+ props.add("filter");
201978
+ } else {
201979
+ const css = getEffectKeyframes(keyframeName2.replace(/^pptx-/u, ""));
201980
+ if (css) {
201981
+ if (/(?:^|[^-])\btransform\s*:/u.test(css)) {
201982
+ props.add("transform");
201983
+ }
201984
+ if (/(?:^|[^-])\bopacity\s*:/u.test(css)) {
201985
+ props.add("opacity");
201986
+ }
201987
+ if (/(?:^|[^-])\bfilter\s*:/u.test(css)) {
201988
+ props.add("filter");
201989
+ }
201990
+ if (/(?:^|[^-])\b(?:color|fill|stroke)\s*:/u.test(css)) {
201991
+ props.add("color");
201992
+ }
201993
+ } else {
201994
+ props.add("unknown");
201995
+ }
201996
+ }
201997
+ if (!/^pptx-(?:tl-)?(?:motion|rotate|scale|transform|color|tavclr|emph)-/u.test(keyframeName2)) {
201998
+ animatedPropertyCache.set(keyframeName2, props);
201999
+ }
202000
+ return props;
202001
+ }
202304
202002
  function parseTmFilter(raw) {
202305
202003
  if (!raw) {
202306
202004
  return void 0;
@@ -203002,6 +202700,23 @@ function expandIterateAnimation(anim) {
203002
202700
  function processRegularAnimation(state, anim, renderContext, pixelateMosaic) {
203003
202701
  const expandedSteps = expandIterateAnimation(anim);
203004
202702
  for (const singleAnim of expandedSteps) {
202703
+ if (isChainedMotionSwallowed(singleAnim)) {
202704
+ if (singleAnim.soundPath || singleAnim.stopSound) {
202705
+ state.currentGroup.push({
202706
+ elementId: "",
202707
+ cssAnimation: "",
202708
+ keyframeName: "",
202709
+ trigger: singleAnim.trigger ?? "onClick",
202710
+ delayMs: (singleAnim.parGroupDelayMs ?? 0) + Math.max(singleAnim.delayMs ?? 0, singleAnim.triggerDelayMs ?? 0),
202711
+ durationMs: singleAnim.durationMs ?? 0,
202712
+ fillMode: "forwards",
202713
+ presetClass: "emph",
202714
+ soundPath: singleAnim.soundPath,
202715
+ stopSound: singleAnim.stopSound
202716
+ });
202717
+ }
202718
+ continue;
202719
+ }
203005
202720
  const resolved = resolveStepEffect(
203006
202721
  singleAnim,
203007
202722
  renderContext,
@@ -203112,6 +202827,9 @@ function countDynamicUids(interactiveAnims) {
203112
202827
  let count = 0;
203113
202828
  for (const [, anims] of interactiveAnims) {
203114
202829
  for (const anim of anims) {
202830
+ if (isChainedMotionSwallowed(anim)) {
202831
+ continue;
202832
+ }
203115
202833
  const effect = resolveEffect(anim);
203116
202834
  if (!effect) {
203117
202835
  count++;
@@ -203130,6 +202848,23 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
203130
202848
  let subGroupIndex;
203131
202849
  let subGroupStartMs = 0;
203132
202850
  for (const anim of anims) {
202851
+ if (isChainedMotionSwallowed(anim)) {
202852
+ if (anim.soundPath || anim.stopSound) {
202853
+ seqGroup.push({
202854
+ elementId: "",
202855
+ cssAnimation: "",
202856
+ keyframeName: "",
202857
+ trigger: anim.trigger ?? "onShapeClick",
202858
+ delayMs: (anim.parGroupDelayMs ?? 0) + Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0),
202859
+ durationMs: anim.durationMs ?? 0,
202860
+ fillMode: "forwards",
202861
+ presetClass: "emph",
202862
+ soundPath: anim.soundPath,
202863
+ stopSound: anim.stopSound
202864
+ });
202865
+ }
202866
+ continue;
202867
+ }
203133
202868
  const resolved = resolveStepEffect(anim, renderContext, dynamicUid, false, pixelateMosaic);
203134
202869
  dynamicUid = resolved.nextDynamicUid;
203135
202870
  if (resolved.skip) {
@@ -203320,7 +203055,12 @@ function buildTimeline(nativeAnimations, renderContext, pixelateMosaic) {
203320
203055
  regularAnims.push(anim);
203321
203056
  }
203322
203057
  }
203323
- const { clickGroups, entranceIds, neededKeyframes, dynamicBlocks, dynamicUid } = buildRegularClickGroups(regularAnims, renderContext, pixelateMosaic);
203058
+ const mergedRegularAnims = mergeChainedMotionPathAnims(regularAnims);
203059
+ for (const [shapeId, anims] of interactiveAnims) {
203060
+ interactiveAnims.set(shapeId, mergeChainedMotionPathAnims(anims));
203061
+ }
203062
+ const mergedHoverAnims = mergeChainedMotionPathAnims(hoverAnims);
203063
+ const { clickGroups, entranceIds, neededKeyframes, dynamicBlocks, dynamicUid } = buildRegularClickGroups(mergedRegularAnims, renderContext, pixelateMosaic);
203324
203064
  const interactiveSequences = buildSequenceGroups(
203325
203065
  interactiveAnims,
203326
203066
  entranceIds,
@@ -203331,7 +203071,7 @@ function buildTimeline(nativeAnimations, renderContext, pixelateMosaic) {
203331
203071
  pixelateMosaic
203332
203072
  );
203333
203073
  const { hoverSequences } = buildHoverSequences(
203334
- hoverAnims,
203074
+ mergedHoverAnims,
203335
203075
  entranceIds,
203336
203076
  neededKeyframes,
203337
203077
  dynamicBlocks,
@@ -208751,17 +208491,17 @@ function attachRotateHandlePlacement(button, options = {}) {
208751
208491
  for (const node of ancestors) {
208752
208492
  mutations.observe(node, { attributes: true, attributeFilter: ["style", "class", "hidden"] });
208753
208493
  }
208754
- const controls = options.getObstacleRoot ? options.getObstacleRoot() : button.parentElement;
208755
- if (controls) {
208756
- mutations.observe(controls, {
208494
+ const controls2 = options.getObstacleRoot ? options.getObstacleRoot() : button.parentElement;
208495
+ if (controls2) {
208496
+ mutations.observe(controls2, {
208757
208497
  attributes: true,
208758
208498
  attributeFilter: ["style", "class", "hidden"],
208759
208499
  childList: true
208760
208500
  });
208761
- observed.add(controls);
208501
+ observed.add(controls2);
208762
208502
  for (const control of [
208763
208503
  button,
208764
- ...controls.querySelectorAll("[data-pptx-handle-kind]")
208504
+ ...controls2.querySelectorAll("[data-pptx-handle-kind]")
208765
208505
  ]) {
208766
208506
  observeControl(control);
208767
208507
  }
@@ -211466,6 +211206,9 @@ var translationsEn = {
211466
211206
  // Live captions
211467
211207
  "pptx.subtitles.listening": "Listening\u2026",
211468
211208
  "pptx.subtitles.notSupported": "Subtitles are not supported in this browser.",
211209
+ "pptx.subtitles.spokenLanguage": "Spoken language",
211210
+ "pptx.subtitles.browserLanguage": "Browser language",
211211
+ "pptx.subtitles.settingsDescription": "Choose the language you will speak. Captions use browser speech recognition; translation is not available.",
211469
211212
  // Table (additions)
211470
211213
  "pptx.table.background": "Background",
211471
211214
  "pptx.table.bandColCycle": "Column band size",
@@ -229183,6 +228926,89 @@ function slideShowOptionChange(id, checked) {
229183
228926
  return null;
229184
228927
  }
229185
228928
  }
228929
+ var SLIDE_SHOW_COMMAND_GROUPS = [
228930
+ {
228931
+ id: "slideShow.startSlideShow",
228932
+ labelKey: "pptx.slideShow.start",
228933
+ commands: [
228934
+ {
228935
+ id: "slideShow.startSlideShow.fromBeginning",
228936
+ labelKey: "pptx.slideShow.fromBeginning",
228937
+ icon: "play-start",
228938
+ tooltipKey: "pptx.slideShow.fromBeginningTooltip"
228939
+ },
228940
+ {
228941
+ id: "slideShow.startSlideShow.fromCurrent",
228942
+ labelKey: "pptx.slideShow.fromCurrent",
228943
+ icon: "play",
228944
+ tooltipKey: "pptx.slideShow.fromCurrentTooltip"
228945
+ }
228946
+ ]
228947
+ },
228948
+ {
228949
+ id: "slideShow.present",
228950
+ labelKey: "pptx.slideShow.present",
228951
+ commands: [
228952
+ {
228953
+ id: "slideShow.present.presenterView",
228954
+ labelKey: "pptx.slideShow.presenterView",
228955
+ icon: "presentation",
228956
+ tooltipKey: "pptx.slideShow.presenterViewTooltip"
228957
+ },
228958
+ {
228959
+ id: "slideShow.startSlideShow.customShow",
228960
+ labelKey: "pptx.slideShow.customShow",
228961
+ icon: "list",
228962
+ tooltipKey: "pptx.customShows.customShowTooltip"
228963
+ },
228964
+ {
228965
+ id: "slideShow.present.broadcast",
228966
+ labelKey: "pptx.slideShow.broadcast",
228967
+ icon: "broadcast",
228968
+ tooltipKey: "pptx.slideShow.broadcastTooltip"
228969
+ }
228970
+ ]
228971
+ },
228972
+ {
228973
+ id: "slideShow.setUp",
228974
+ labelKey: "pptx.slideShow.setUpGroup",
228975
+ commands: [
228976
+ {
228977
+ id: "slideShow.setUp.rehearseWithCoach",
228978
+ labelKey: "pptx.slideShow.rehearseCoach",
228979
+ icon: "video",
228980
+ unsupported: true
228981
+ },
228982
+ {
228983
+ id: "slideShow.setUp.setUpSlideShow",
228984
+ labelKey: "pptx.slideShow.setUp",
228985
+ icon: "settings",
228986
+ tooltipKey: "pptx.slideShow.setUpTooltip"
228987
+ },
228988
+ { id: "slideShow.setUp.hideSlide", labelKey: "pptx.slideShow.hideSlide", icon: "eye-off" },
228989
+ {
228990
+ id: "slideShow.setUp.rehearseTimings",
228991
+ labelKey: "pptx.slideShow.rehearseTimings",
228992
+ icon: "clock",
228993
+ tooltipKey: "pptx.slideShow.rehearseTimingsTooltip"
228994
+ },
228995
+ { id: "slideShow.setUp.record", labelKey: "pptx.titleBar.record", icon: "record" }
228996
+ ]
228997
+ }
228998
+ ];
228999
+ var HELP_RIBBON_COMMANDS = [
229000
+ { id: "help.help.options", labelKey: "pptx.settings.title", icon: "settings" },
229001
+ {
229002
+ id: "help.help.keyboardShortcuts",
229003
+ labelKey: "pptx.settings.keyboardShortcuts",
229004
+ icon: "keyboard"
229005
+ },
229006
+ {
229007
+ id: "help.help.accessibility",
229008
+ labelKey: "pptx.ribbon.accessibilityCheck",
229009
+ icon: "accessibility"
229010
+ }
229011
+ ];
229186
229012
  function resetSlideLayoutPath(slide) {
229187
229013
  const path = slide?.layoutPath;
229188
229014
  return typeof path === "string" && path !== "" ? path : void 0;
@@ -232414,20 +232240,20 @@ async function mountModel3D(container, modelUrl, options) {
232414
232240
  scene.add(light);
232415
232241
  }
232416
232242
  scene.add(rig.placeModel(model));
232417
- let controls = null;
232243
+ let controls2 = null;
232418
232244
  const OrbitCtrlCtor = await loadOrbitControlsCtor();
232419
232245
  const enableControls = (on) => {
232420
- if (on && !controls && OrbitCtrlCtor) {
232421
- controls = new OrbitCtrlCtor(camera, canvas);
232422
- controls.enablePan = false;
232423
- controls.enableZoom = true;
232424
- controls.enableRotate = true;
232425
- controls.minDistance = descriptor.authored ? rig.distance * 0.2 : 2;
232426
- controls.maxDistance = descriptor.authored ? rig.distance * 4 : 20;
232427
- controls.update();
232428
- } else if (!on && controls) {
232429
- controls.dispose();
232430
- controls = null;
232246
+ if (on && !controls2 && OrbitCtrlCtor) {
232247
+ controls2 = new OrbitCtrlCtor(camera, canvas);
232248
+ controls2.enablePan = false;
232249
+ controls2.enableZoom = true;
232250
+ controls2.enableRotate = true;
232251
+ controls2.minDistance = descriptor.authored ? rig.distance * 0.2 : 2;
232252
+ controls2.maxDistance = descriptor.authored ? rig.distance * 4 : 20;
232253
+ controls2.update();
232254
+ } else if (!on && controls2) {
232255
+ controls2.dispose();
232256
+ controls2 = null;
232431
232257
  }
232432
232258
  };
232433
232259
  enableControls(options.interactive ?? true);
@@ -232438,7 +232264,7 @@ async function mountModel3D(container, modelUrl, options) {
232438
232264
  return;
232439
232265
  }
232440
232266
  frame2 = requestAnimationFrame(renderLoop);
232441
- controls?.update();
232267
+ controls2?.update();
232442
232268
  renderer.render(scene, camera);
232443
232269
  };
232444
232270
  frame2 = requestAnimationFrame(renderLoop);
@@ -232475,7 +232301,7 @@ async function mountModel3D(container, modelUrl, options) {
232475
232301
  }
232476
232302
  disposed = true;
232477
232303
  cancelAnimationFrame(frame2);
232478
- controls?.dispose();
232304
+ controls2?.dispose();
232479
232305
  disposeModel();
232480
232306
  scene.clear();
232481
232307
  renderer.dispose();
@@ -237385,11 +237211,13 @@ function resolveElementAriaAttributes(element, options) {
237385
237211
  };
237386
237212
  }
237387
237213
  var PRESENTATION_STAGE_ATTRIBUTE = "data-pptx-presenting";
237214
+ var PRESENTATION_ANIM_TRIGGER_ATTRIBUTE = "data-pptx-anim-trigger";
237388
237215
  var PRESENTATION_HIT_TEST_CSS = `
237389
237216
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] {
237390
237217
  pointer-events: none;
237391
237218
  }
237392
237219
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-pptx-action],
237220
+ [${PRESENTATION_STAGE_ATTRIBUTE}] [${PRESENTATION_ANIM_TRIGGER_ATTRIBUTE}],
237393
237221
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] a[href],
237394
237222
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] video[controls],
237395
237223
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] audio[controls] {
@@ -237474,7 +237302,11 @@ function focusableElements(panel2) {
237474
237302
  }
237475
237303
  function activateModalFocus(panel2, options = {}) {
237476
237304
  const doc = panel2.ownerDocument;
237477
- const opener = doc.activeElement instanceof HTMLElement ? doc.activeElement : null;
237305
+ let activeElement = doc.activeElement;
237306
+ while (activeElement?.shadowRoot?.activeElement) {
237307
+ activeElement = activeElement.shadowRoot.activeElement;
237308
+ }
237309
+ const opener = activeElement instanceof HTMLElement ? activeElement : null;
237478
237310
  const restoreFocus = options.restoreFocus ?? true;
237479
237311
  function focusInitial() {
237480
237312
  const candidate = options.initialFocus ?? focusableElements(panel2)[0] ?? panel2;
@@ -241820,6 +241652,73 @@ function hiddenSlideCue(hidden, surface, slideIndex) {
241820
241652
  }
241821
241653
  return { hidden: true, labelId: hiddenSlideLabelId(surface, slideIndex), marker: "true" };
241822
241654
  }
241655
+ function mergeCaptionResults(resultIndex, results) {
241656
+ let finalText = "";
241657
+ let interimText = "";
241658
+ for (let index = resultIndex; index < results.length; index++) {
241659
+ const result = results[index];
241660
+ const fragment = result?.[0]?.transcript ?? "";
241661
+ if (result?.isFinal) {
241662
+ finalText += fragment;
241663
+ } else {
241664
+ interimText += fragment;
241665
+ }
241666
+ }
241667
+ return `${finalText} ${interimText}`.trim();
241668
+ }
241669
+ function getSpeechRecognitionCtor() {
241670
+ const source = globalThis;
241671
+ return source["SpeechRecognition"] ?? source["webkitSpeechRecognition"] ?? null;
241672
+ }
241673
+ var SUBTITLE_LANGUAGES = [
241674
+ "auto",
241675
+ "en-US",
241676
+ "en-GB",
241677
+ "fr-FR",
241678
+ "de-DE",
241679
+ "es-ES",
241680
+ "pt-BR",
241681
+ "it-IT",
241682
+ "ja-JP",
241683
+ "ko-KR",
241684
+ "zh-CN"
241685
+ ];
241686
+ function subtitleLanguageLabel(language) {
241687
+ try {
241688
+ return new Intl.DisplayNames(void 0, { type: "language" }).of(language) ?? language;
241689
+ } catch {
241690
+ return language;
241691
+ }
241692
+ }
241693
+ function normalizeSubtitleSettings(settings) {
241694
+ const spokenLanguage = settings?.spokenLanguage ?? "auto";
241695
+ return {
241696
+ spokenLanguage: SUBTITLE_LANGUAGES.includes(spokenLanguage) ? spokenLanguage : "auto"
241697
+ };
241698
+ }
241699
+ function subtitleSettingsFromOptions(options) {
241700
+ return normalizeSubtitleSettings({ spokenLanguage: options?.accessibility.subtitleLanguage });
241701
+ }
241702
+ function updateSubtitleSettings(store, settings) {
241703
+ store.setValue(
241704
+ "accessibility",
241705
+ "subtitleLanguage",
241706
+ normalizeSubtitleSettings(settings).spokenLanguage
241707
+ );
241708
+ }
241709
+ function subtitleRecognitionLanguage(settings, browserLanguage = "en-US") {
241710
+ return settings.spokenLanguage === "auto" ? browserLanguage || "en-US" : settings.spokenLanguage;
241711
+ }
241712
+ function subtitleSettingsLabels(t) {
241713
+ return {
241714
+ title: t("pptx.slideShow.subtitleSettings"),
241715
+ language: t("pptx.subtitles.spokenLanguage"),
241716
+ browserLanguage: t("pptx.subtitles.browserLanguage"),
241717
+ description: t("pptx.subtitles.settingsDescription"),
241718
+ apply: t("pptx.common.apply"),
241719
+ cancel: t("pptx.common.cancel")
241720
+ };
241721
+ }
241823
241722
  var VIEWER_PREFS_STORAGE_KEY = "pptx-viewer-prefs";
241824
241723
  function hasLocalStorage() {
241825
241724
  return typeof localStorage !== "undefined";
@@ -242184,6 +242083,7 @@ var DEFAULT_VIEWER_OPTIONS = {
242184
242083
  clearCacheOnClose: false
242185
242084
  },
242186
242085
  accessibility: {
242086
+ subtitleLanguage: "auto",
242187
242087
  showAccessibilityStatus: true,
242188
242088
  feedbackWithSound: false,
242189
242089
  soundScheme: "modern",
@@ -243823,7 +243723,7 @@ function resolveRibbonCustomization(ribbon3) {
243823
243723
  const actions = /* @__PURE__ */ new Set();
243824
243724
  const contextualTabs = /* @__PURE__ */ new Set();
243825
243725
  const groups = /* @__PURE__ */ new Set();
243826
- const controls = /* @__PURE__ */ new Set();
243726
+ const controls2 = /* @__PURE__ */ new Set();
243827
243727
  for (const tab of ribbon3?.hiddenTabs ?? []) {
243828
243728
  if (CONTEXTUAL_TAB_IDS.has(tab)) {
243829
243729
  contextualTabs.add(tab);
@@ -243838,19 +243738,19 @@ function resolveRibbonCustomization(ribbon3) {
243838
243738
  }
243839
243739
  for (const button of ribbon3?.hiddenButtons ?? []) {
243840
243740
  if (isRibbonControlId(button)) {
243841
- controls.add(button);
243741
+ controls2.add(button);
243842
243742
  } else {
243843
243743
  actions.add(button);
243844
243744
  }
243845
243745
  }
243846
243746
  for (const [action, control] of BUTTON_CONTROL_ALIASES) {
243847
243747
  if (actions.has(action)) {
243848
- controls.add(control);
243849
- } else if (controls.has(control)) {
243748
+ controls2.add(control);
243749
+ } else if (controls2.has(control)) {
243850
243750
  actions.add(action);
243851
243751
  }
243852
243752
  }
243853
- return { actions, contextualTabs, groups, controls };
243753
+ return { actions, contextualTabs, groups, controls: controls2 };
243854
243754
  }
243855
243755
  var DIALOG_ENTRY_POINTS = {
243856
243756
  options: { actions: [], pages: ["options"], cards: [] },
@@ -244053,13 +243953,13 @@ function customizeSection(tabId, section, resolved) {
244053
243953
  if (resolved.hiddenOptionsSections.has(`${tabId}.${section.id}`)) {
244054
243954
  return null;
244055
243955
  }
244056
- const controls = section.controls.filter((control) => isSettingVisible(resolved, optionsSettingIdOf(control))).map(
243956
+ const controls2 = section.controls.filter((control) => isSettingVisible(resolved, optionsSettingIdOf(control))).map(
244057
243957
  (control) => isSettingLocked(resolved, optionsSettingIdOf(control)) ? { ...control, readOnly: true } : control
244058
243958
  );
244059
- if (controls.length === 0 && section.controls.length > 0 && !section.special) {
243959
+ if (controls2.length === 0 && section.controls.length > 0 && !section.special) {
244060
243960
  return null;
244061
243961
  }
244062
- return { ...section, controls };
243962
+ return { ...section, controls: controls2 };
244063
243963
  }
244064
243964
  function customizeOptionsTabs(tabs, resolved) {
244065
243965
  if (resolved.hiddenOptionsPages.size === 0 && resolved.hiddenOptionsSections.size === 0 && resolved.hiddenSettings.size === 0 && Object.keys(resolved.lockedSettings).length === 0) {
@@ -248964,28 +248864,19 @@ function cursorForTool(tool) {
248964
248864
  return "default";
248965
248865
  }
248966
248866
  }
248967
- function carryBuildState(state) {
248968
- if (!state) {
248969
- return {};
248970
- }
248971
- const carried = {};
248972
- if (state.build) {
248973
- carried.build = state.build;
248974
- }
248975
- if (state.chartReveal) {
248976
- carried.chartReveal = state.chartReveal;
248977
- }
248978
- if (state.diagramReveal) {
248979
- carried.diagramReveal = state.diagramReveal;
248980
- }
248981
- if (state.textStyle) {
248982
- carried.textStyle = state.textStyle;
248983
- }
248984
- return carried;
248985
- }
248867
+ var playbackOwners = /* @__PURE__ */ new WeakMap();
248986
248868
  function applyAnimationGroupSteps(group2, ctx) {
248987
248869
  wireMediaEndedSteps(group2, ctx);
248988
248870
  wireMediaBookmarkSteps(group2, ctx);
248871
+ const ownedAnimations = /* @__PURE__ */ new Map();
248872
+ const owner = /* @__PURE__ */ Symbol("animation group");
248873
+ const owners = playbackOwners.get(ctx.setStates) ?? /* @__PURE__ */ new Map();
248874
+ playbackOwners.set(ctx.setStates, owners);
248875
+ for (const step of group2.steps) {
248876
+ if (step.elementId && !step.command) {
248877
+ owners.set(step.elementId, owner);
248878
+ }
248879
+ }
248989
248880
  for (const step of group2.steps) {
248990
248881
  if (step.command) {
248991
248882
  const command = step.command;
@@ -248999,46 +248890,101 @@ function applyAnimationGroupSteps(group2, ctx) {
248999
248890
  continue;
249000
248891
  }
249001
248892
  if (step.stopSound) {
249002
- ctx.stopSound();
248893
+ if (step.delayMs > 0) {
248894
+ const stopTimer = window.setTimeout(() => {
248895
+ ctx.stopSound();
248896
+ }, step.delayMs);
248897
+ ctx.timers.push(stopTimer);
248898
+ } else {
248899
+ ctx.stopSound();
248900
+ }
249003
248901
  } else if (step.soundPath) {
249004
- (ctx.onPlayActionSound ?? ctx.playSound)(step.soundPath);
248902
+ const soundPath = step.soundPath;
248903
+ if (step.delayMs > 0) {
248904
+ const soundTimer = window.setTimeout(() => {
248905
+ (ctx.onPlayActionSound ?? ctx.playSound)(soundPath);
248906
+ }, step.delayMs);
248907
+ ctx.timers.push(soundTimer);
248908
+ } else {
248909
+ (ctx.onPlayActionSound ?? ctx.playSound)(soundPath);
248910
+ }
249005
248911
  }
249006
248912
  }
249007
248913
  ctx.setStates((previous) => {
249008
248914
  const next = new Map(previous);
248915
+ const componentsByElement = /* @__PURE__ */ new Map();
249009
248916
  for (const step of group2.steps) {
249010
- if (step.command) {
248917
+ if (step.command || !step.elementId) {
249011
248918
  continue;
249012
248919
  }
249013
248920
  const current = next.get(step.elementId);
249014
248921
  const shouldBeVisible = step.presetClass === "exit" ? current?.visible ?? true : true;
249015
248922
  const carried = carryBuildState(current);
248923
+ let components = componentsByElement.get(step.elementId);
248924
+ if (!components) {
248925
+ components = [];
248926
+ componentsByElement.set(step.elementId, components);
248927
+ }
248928
+ if (step.cssAnimation) {
248929
+ const names = [...step.cssAnimation.matchAll(/(?:^|,\s*)([\w-]+)\s+[\d.]+m?s\b/gu)].map(
248930
+ (match) => match[1]
248931
+ );
248932
+ const stepProperties = new Set(
248933
+ (names.length ? names : [step.keyframeName]).flatMap((name) => [
248934
+ ...keyframeAnimatedProperties(name)
248935
+ ])
248936
+ );
248937
+ const takesOverEverything = stepProperties.has("unknown");
248938
+ for (let index = components.length - 1; index >= 0; index--) {
248939
+ const component2 = components[index];
248940
+ const collides = takesOverEverything || component2.properties.has("unknown") || [...stepProperties].some((property) => component2.properties.has(property));
248941
+ if (collides) {
248942
+ components.splice(index, 1);
248943
+ }
248944
+ }
248945
+ components.push({
248946
+ animation: step.cssAnimation,
248947
+ properties: stepProperties,
248948
+ colorTargets: step.colorTargets
248949
+ });
248950
+ ownedAnimations.set(
248951
+ step.elementId,
248952
+ components.map((component2) => component2.animation)
248953
+ );
248954
+ }
249016
248955
  next.set(step.elementId, {
249017
248956
  ...carried,
249018
248957
  visible: shouldBeVisible,
249019
- cssAnimation: step.cssAnimation,
249020
- animatesFill: step.colorTargets?.includes("fill") ? true : void 0,
249021
- animatesStroke: step.colorTargets?.includes("stroke") ? true : void 0,
248958
+ cssAnimation: components.map((component2) => component2.animation).join(", ") || void 0,
248959
+ animatesFill: components.some((component2) => component2.colorTargets?.includes("fill")) || void 0,
248960
+ animatesStroke: components.some((component2) => component2.colorTargets?.includes("stroke")) || void 0,
249022
248961
  textStyle: mergeTextStyleOnStart(carried.textStyle, step.textStyle)
249023
248962
  });
249024
248963
  }
249025
248964
  return next;
249026
248965
  });
249027
248966
  for (const step of group2.steps) {
249028
- if (step.command) {
248967
+ if (step.command || !step.elementId) {
249029
248968
  continue;
249030
248969
  }
249031
248970
  const timer = window.setTimeout(
249032
248971
  () => {
248972
+ const components = ownedAnimations.get(step.elementId) ?? [];
248973
+ const remaining = step.holdEndState ? components : components.filter((animation) => animation !== step.cssAnimation);
249033
248974
  ctx.setStates((previous) => {
249034
248975
  const next = new Map(previous);
249035
248976
  const current = next.get(step.elementId);
248977
+ if (owners.get(step.elementId) !== owner || current?.cssAnimation !== (components.join(", ") || void 0) || step.cssAnimation && !components.includes(step.cssAnimation)) {
248978
+ return next;
248979
+ }
249036
248980
  const visibleAfter = step.presetClass === "exit" || step.hideAfterEffect ? false : current?.visible ?? true;
249037
248981
  const carried = carryBuildState(current);
249038
248982
  next.set(step.elementId, {
249039
248983
  ...carried,
249040
248984
  visible: visibleAfter,
249041
- cssAnimation: step.holdEndState ? step.cssAnimation : void 0,
248985
+ cssAnimation: remaining.join(", ") || void 0,
248986
+ animatesFill: step.colorTargets ? void 0 : current?.animatesFill,
248987
+ animatesStroke: step.colorTargets ? void 0 : current?.animatesStroke,
249042
248988
  textStyle: resolveTextStyleOnCleanup(
249043
248989
  carried.textStyle,
249044
248990
  step.textStyle,
@@ -249047,12 +248993,32 @@ function applyAnimationGroupSteps(group2, ctx) {
249047
248993
  });
249048
248994
  return next;
249049
248995
  });
248996
+ ownedAnimations.set(step.elementId, remaining);
249050
248997
  },
249051
248998
  Math.max(0, step.delayMs + step.durationMs + 8)
249052
248999
  );
249053
249000
  ctx.timers.push(timer);
249054
249001
  }
249055
249002
  }
249003
+ function carryBuildState(state) {
249004
+ if (!state) {
249005
+ return {};
249006
+ }
249007
+ const carried = {};
249008
+ if (state.build) {
249009
+ carried.build = state.build;
249010
+ }
249011
+ if (state.chartReveal) {
249012
+ carried.chartReveal = state.chartReveal;
249013
+ }
249014
+ if (state.diagramReveal) {
249015
+ carried.diagramReveal = state.diagramReveal;
249016
+ }
249017
+ if (state.textStyle) {
249018
+ carried.textStyle = state.textStyle;
249019
+ }
249020
+ return carried;
249021
+ }
249056
249022
  function cancelBuildReveal(handle) {
249057
249023
  if (handle.current !== null && typeof cancelAnimationFrame === "function") {
249058
249024
  cancelAnimationFrame(handle.current);
@@ -253338,6 +253304,1142 @@ function prepareElementUpdateBatch(slides, updates) {
253338
253304
  });
253339
253305
  return changed ? next : null;
253340
253306
  }
253307
+ var RECORD_COMMAND_GROUPS = [
253308
+ {
253309
+ id: "record.camera",
253310
+ labelKey: "pptx.record.camera",
253311
+ commands: [
253312
+ {
253313
+ id: "record.camera.cameo",
253314
+ labelKey: "pptx.record.cameo",
253315
+ icon: "camera",
253316
+ unsupported: true
253317
+ }
253318
+ ]
253319
+ },
253320
+ {
253321
+ id: "record.record",
253322
+ labelKey: "pptx.ribbon.tab.record",
253323
+ commands: [
253324
+ {
253325
+ id: "record.record.fromBeginning",
253326
+ labelKey: "pptx.slideShow.fromBeginning",
253327
+ icon: "video"
253328
+ },
253329
+ { id: "record.record.fromCurrent", labelKey: "pptx.slideShow.fromCurrent", icon: "play" }
253330
+ ]
253331
+ },
253332
+ {
253333
+ id: "record.manage",
253334
+ labelKey: "pptx.record.manage",
253335
+ commands: [
253336
+ {
253337
+ id: "record.manage.clear",
253338
+ labelKey: "pptx.record.clear",
253339
+ icon: "eraser",
253340
+ unsupported: true
253341
+ },
253342
+ {
253343
+ id: "record.manage.reset",
253344
+ labelKey: "pptx.record.resetToCameo",
253345
+ icon: "reset",
253346
+ unsupported: true
253347
+ }
253348
+ ]
253349
+ },
253350
+ {
253351
+ id: "record.help",
253352
+ labelKey: "pptx.ribbon.tab.help",
253353
+ commands: [
253354
+ {
253355
+ id: "record.help.learnMore",
253356
+ labelKey: "pptx.record.learnMore",
253357
+ icon: "help",
253358
+ unsupported: true
253359
+ }
253360
+ ]
253361
+ }
253362
+ ];
253363
+ var SLIDE_SHOW_OPTIONS_STYLES = `
253364
+ :host {
253365
+ display: inline-flex;
253366
+ flex: none;
253367
+ align-items: flex-start;
253368
+ gap: 8px;
253369
+ color: var(--pptx-foreground, #f9fafb);
253370
+ font: inherit;
253371
+ }
253372
+ .column { display: flex; flex-direction: column; gap: 2px; }
253373
+ label {
253374
+ display: flex;
253375
+ align-items: center;
253376
+ gap: 4px;
253377
+ min-height: 22px;
253378
+ padding: 0 4px;
253379
+ font-size: 10px;
253380
+ white-space: nowrap;
253381
+ cursor: pointer;
253382
+ }
253383
+ label:has([disabled]) { color: var(--pptx-muted-foreground, #9ca3af); cursor: not-allowed; }
253384
+ @media (pointer: coarse), (max-width: 767px) {
253385
+ label { min-height: 44px; font-size: 12px; }
253386
+ }
253387
+ `;
253388
+ function definePptxSlideShowOptions(registry) {
253389
+ if (registry.get("pptx-ui-slide-show-options")) {
253390
+ return;
253391
+ }
253392
+ class SlideShowOptions extends HTMLElement {
253393
+ static observedAttributes = ["disabled"];
253394
+ properties;
253395
+ optionLabels = {};
253396
+ rows = /* @__PURE__ */ new Map();
253397
+ constructor() {
253398
+ super();
253399
+ const root = this.attachShadow({ mode: "open" });
253400
+ attachControlStyles(root, SLIDE_SHOW_OPTIONS_STYLES);
253401
+ const columns = [document.createElement("div"), document.createElement("div")];
253402
+ for (const column of columns) {
253403
+ column.className = "column";
253404
+ }
253405
+ SLIDE_SHOW_OPTIONS.forEach((option, index) => {
253406
+ const label = document.createElement("label");
253407
+ const checkbox = document.createElement("pptx-ui-checkbox");
253408
+ const text22 = document.createTextNode("");
253409
+ label.append(checkbox, text22);
253410
+ label.addEventListener("click", (event) => {
253411
+ event.preventDefault();
253412
+ if (event.target !== checkbox) {
253413
+ checkbox.click();
253414
+ }
253415
+ });
253416
+ columns[index < 3 ? 0 : 1].append(label);
253417
+ this.rows.set(option.id, { checkbox, text: text22 });
253418
+ checkbox.addEventListener("change", (event) => {
253419
+ event.stopPropagation();
253420
+ const change = slideShowOptionChange(option.id, checkbox.checked);
253421
+ this.sync();
253422
+ if (!this.disabled && !option.unsupported && change) {
253423
+ this.dispatchEvent(
253424
+ new CustomEvent("show-options-change", {
253425
+ detail: change,
253426
+ bubbles: true,
253427
+ composed: true
253428
+ })
253429
+ );
253430
+ }
253431
+ });
253432
+ checkbox.addEventListener("input", (event) => event.stopPropagation());
253433
+ });
253434
+ columns[1].append(document.createElement("slot"));
253435
+ root.append(...columns);
253436
+ }
253437
+ connectedCallback() {
253438
+ this.sync();
253439
+ }
253440
+ attributeChangedCallback() {
253441
+ this.sync();
253442
+ }
253443
+ get presentationProperties() {
253444
+ return this.properties;
253445
+ }
253446
+ set presentationProperties(value) {
253447
+ this.properties = value;
253448
+ this.sync();
253449
+ }
253450
+ get labels() {
253451
+ return this.optionLabels;
253452
+ }
253453
+ set labels(value) {
253454
+ this.optionLabels = value ?? {};
253455
+ this.sync();
253456
+ }
253457
+ get disabled() {
253458
+ return this.hasAttribute("disabled");
253459
+ }
253460
+ set disabled(value) {
253461
+ this.toggleAttribute("disabled", Boolean(value));
253462
+ }
253463
+ sync() {
253464
+ for (const option of SLIDE_SHOW_OPTIONS) {
253465
+ const row = this.rows.get(option.id);
253466
+ const label = this.optionLabels[option.id] ?? option.labelKey;
253467
+ row.text.textContent = label;
253468
+ row.checkbox.setAttribute("aria-label", label);
253469
+ row.checkbox.checked = readSlideShowOption(this.properties, option.id);
253470
+ row.checkbox.disabled = this.disabled || option.unsupported;
253471
+ }
253472
+ }
253473
+ }
253474
+ registry.define("pptx-ui-slide-show-options", SlideShowOptions);
253475
+ }
253476
+ var SUBTITLE_SETTINGS_STYLES = `
253477
+ :host { display: inline-flex; }
253478
+ dialog { box-sizing: border-box; width: min(440px, calc(100vw - 32px)); max-height: calc(100vh - 32px);
253479
+ margin: auto; padding: 24px; border: 1px solid var(--pptx-border, #374151); border-radius: 10px;
253480
+ background: var(--pptx-background, #181b20); color: var(--pptx-foreground, #f9fafb); font: 14px/1.5 system-ui; }
253481
+ dialog::backdrop { background: #0008; }
253482
+ h2 { margin: 0 0 12px; font-size: 18px; } p { margin: 0 0 20px; }
253483
+ label { display: block; margin-bottom: 8px; }
253484
+ pptx-ui-select { display: block; width: 100%; }
253485
+ footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px; }
253486
+ footer button { padding: 8px 16px; min-height: 44px; border: 1px solid var(--pptx-border, #374151);
253487
+ border-radius: 6px; background: var(--pptx-secondary, #252830); color: inherit; font: inherit; cursor: pointer; }
253488
+ footer button:last-child { background: var(--pptx-primary, #6366f1); color: var(--pptx-primary-foreground, #fff); }
253489
+ footer button:focus-visible { outline: 2px solid var(--pptx-ring, #6366f1); outline-offset: 2px; }
253490
+ @media (forced-colors: active) { dialog { background: Canvas; color: CanvasText; } footer button { color: ButtonText; } }
253491
+ `;
253492
+ function definePptxSubtitleSettings(registry) {
253493
+ if (registry.get("pptx-ui-subtitle-settings")) {
253494
+ return;
253495
+ }
253496
+ class SubtitleSettingsElement extends HTMLElement {
253497
+ current = normalizeSubtitleSettings();
253498
+ text = {
253499
+ title: "Subtitle Settings",
253500
+ language: "Spoken language",
253501
+ browserLanguage: "Browser language",
253502
+ description: "",
253503
+ apply: "Apply",
253504
+ cancel: "Cancel"
253505
+ };
253506
+ command;
253507
+ dialog;
253508
+ heading;
253509
+ description;
253510
+ languageLabel;
253511
+ language;
253512
+ apply;
253513
+ cancel;
253514
+ constructor() {
253515
+ super();
253516
+ const root = this.attachShadow({ mode: "open" });
253517
+ attachControlStyles(root, SUBTITLE_SETTINGS_STYLES);
253518
+ this.command = document.createElement("pptx-ui-ribbon-command");
253519
+ this.command.setAttribute("data-ribbon-control", "slideShow.captions.subtitleSettings");
253520
+ this.command.setAttribute("icon", "captions");
253521
+ this.command.setAttribute("compact", "");
253522
+ this.dialog = document.createElement("dialog");
253523
+ this.heading = document.createElement("h2");
253524
+ this.description = document.createElement("p");
253525
+ this.languageLabel = document.createElement("label");
253526
+ this.language = document.createElement("pptx-ui-select");
253527
+ this.language.id = "spoken-language";
253528
+ this.languageLabel.htmlFor = this.language.id;
253529
+ const footer = document.createElement("footer");
253530
+ this.cancel = document.createElement("button");
253531
+ this.cancel.type = "button";
253532
+ this.apply = document.createElement("button");
253533
+ this.apply.type = "button";
253534
+ footer.append(this.cancel, this.apply);
253535
+ this.dialog.append(this.heading, this.description, this.languageLabel, this.language, footer);
253536
+ root.append(this.command, this.dialog);
253537
+ this.command.addEventListener("command-request", () => this.open());
253538
+ this.cancel.addEventListener("click", () => this.close());
253539
+ this.dialog.addEventListener("cancel", (event) => {
253540
+ event.preventDefault();
253541
+ this.close();
253542
+ });
253543
+ this.dialog.addEventListener("keydown", (event) => {
253544
+ event.stopPropagation();
253545
+ if (event.key === "Tab") {
253546
+ const picker = this.language.shadowRoot?.querySelector("button");
253547
+ const controls2 = [
253548
+ ...picker && !picker.disabled ? [picker] : [],
253549
+ this.cancel,
253550
+ this.apply
253551
+ ];
253552
+ const active2 = event.composedPath()[0];
253553
+ const index = controls2.findIndex((control) => control === active2);
253554
+ event.preventDefault();
253555
+ controls2[(index + (event.shiftKey ? controls2.length - 1 : 1)) % controls2.length].focus();
253556
+ }
253557
+ if (event.key === "Escape") {
253558
+ event.preventDefault();
253559
+ this.close();
253560
+ }
253561
+ });
253562
+ this.apply.addEventListener("click", () => {
253563
+ const settings = normalizeSubtitleSettings({ spokenLanguage: this.language.value });
253564
+ this.dispatchEvent(
253565
+ new CustomEvent("subtitle-settings-change", {
253566
+ detail: settings,
253567
+ bubbles: true,
253568
+ composed: true
253569
+ })
253570
+ );
253571
+ this.close();
253572
+ });
253573
+ }
253574
+ get settings() {
253575
+ return { ...this.current };
253576
+ }
253577
+ set settings(value) {
253578
+ this.current = normalizeSubtitleSettings(value);
253579
+ }
253580
+ get labels() {
253581
+ return this.text;
253582
+ }
253583
+ set labels(value) {
253584
+ this.text = { ...this.text, ...value };
253585
+ this.sync();
253586
+ }
253587
+ get languageDisabled() {
253588
+ return this.language.disabled;
253589
+ }
253590
+ set languageDisabled(value) {
253591
+ this.language.disabled = value;
253592
+ }
253593
+ connectedCallback() {
253594
+ this.sync();
253595
+ }
253596
+ disconnectedCallback() {
253597
+ if (this.dialog.open) {
253598
+ this.dialog.close();
253599
+ }
253600
+ }
253601
+ open() {
253602
+ if (this.dialog.open) {
253603
+ return;
253604
+ }
253605
+ this.sync();
253606
+ this.language.value = this.current.spokenLanguage;
253607
+ this.dialog.showModal();
253608
+ this.language.shadowRoot?.querySelector("button")?.focus();
253609
+ }
253610
+ close() {
253611
+ this.dialog.close();
253612
+ this.command.shadowRoot?.querySelector("button")?.focus();
253613
+ }
253614
+ sync() {
253615
+ this.command.setAttribute("label", this.text.title);
253616
+ this.dialog.setAttribute("aria-label", this.text.title);
253617
+ this.heading.textContent = this.text.title;
253618
+ this.description.textContent = this.text.description;
253619
+ this.languageLabel.textContent = this.text.language;
253620
+ this.language.setAttribute("aria-label", this.text.language);
253621
+ this.cancel.textContent = this.text.cancel;
253622
+ this.apply.textContent = this.text.apply;
253623
+ this.language.replaceChildren(
253624
+ ...SUBTITLE_LANGUAGES.map((value) => {
253625
+ const option = document.createElement("option");
253626
+ option.value = value;
253627
+ option.textContent = value === "auto" ? this.text.browserLanguage : subtitleLanguageLabel(value);
253628
+ return option;
253629
+ })
253630
+ );
253631
+ }
253632
+ }
253633
+ registry.define("pptx-ui-subtitle-settings", SubtitleSettingsElement);
253634
+ }
253635
+ var controls = [
253636
+ ["pptx-ui-search", definePptxSearchField],
253637
+ ["pptx-ui-checkbox", definePptxCheckbox],
253638
+ ["pptx-ui-select", definePptxSelect],
253639
+ ["pptx-ui-slide-show-options", definePptxSlideShowOptions],
253640
+ ["pptx-ui-ribbon-command", definePptxRibbonCommand],
253641
+ ["pptx-ui-ribbon-group", definePptxRibbonGroup],
253642
+ ["pptx-ui-ribbon-toggle", definePptxRibbonToggle],
253643
+ ["pptx-ui-subtitle-settings", definePptxSubtitleSettings]
253644
+ ];
253645
+ function registerPptxWebControls() {
253646
+ if (typeof window === "undefined" || !window.customElements) {
253647
+ return;
253648
+ }
253649
+ const registry = window.customElements;
253650
+ assertWebControlContract(
253651
+ registry,
253652
+ controls.map(([name]) => name)
253653
+ );
253654
+ if (!document.getElementById("pptx-ui-control-hosts")) {
253655
+ const style = document.createElement("style");
253656
+ style.id = "pptx-ui-control-hosts";
253657
+ style.textContent = HOST_STYLES;
253658
+ document.head.append(style);
253659
+ }
253660
+ for (const [name, define] of controls) {
253661
+ if (!registry.get(name)) {
253662
+ define(registry);
253663
+ markWebControlContract(registry.get(name));
253664
+ }
253665
+ }
253666
+ }
253667
+ var defaultThemeColors = {
253668
+ background: "#030712",
253669
+ // gray-950
253670
+ foreground: "#f3f4f6",
253671
+ // gray-100
253672
+ card: "#111827",
253673
+ // gray-900
253674
+ cardForeground: "#f3f4f6",
253675
+ // gray-100
253676
+ popover: "#111827",
253677
+ // gray-900
253678
+ popoverForeground: "#f3f4f6",
253679
+ // gray-100
253680
+ primary: "#6366f1",
253681
+ // indigo-500
253682
+ primaryForeground: "#ffffff",
253683
+ // white
253684
+ secondary: "#1f2937",
253685
+ // gray-800
253686
+ secondaryForeground: "#f3f4f6",
253687
+ // gray-100
253688
+ muted: "#1f2937",
253689
+ // gray-800
253690
+ mutedForeground: "#9ca3af",
253691
+ // gray-400
253692
+ accent: "#1f2937",
253693
+ // gray-800
253694
+ accentForeground: "#f3f4f6",
253695
+ // gray-100
253696
+ destructive: "#ef4444",
253697
+ // red-500
253698
+ destructiveForeground: "#ffffff",
253699
+ // white
253700
+ border: "#374151",
253701
+ // gray-700
253702
+ input: "#374151",
253703
+ // gray-700
253704
+ ring: "#6366f1"
253705
+ // indigo-500
253706
+ };
253707
+ var defaultRadius = "0.5rem";
253708
+ var lightThemeColors = {
253709
+ background: "#f8fafc",
253710
+ // slate-50
253711
+ foreground: "#0f172a",
253712
+ // slate-900
253713
+ card: "#ffffff",
253714
+ cardForeground: "#0f172a",
253715
+ // slate-900
253716
+ popover: "#ffffff",
253717
+ popoverForeground: "#0f172a",
253718
+ // slate-900
253719
+ primary: "#4f46e5",
253720
+ // indigo-600
253721
+ primaryForeground: "#ffffff",
253722
+ secondary: "#f1f5f9",
253723
+ // slate-100
253724
+ secondaryForeground: "#0f172a",
253725
+ // slate-900
253726
+ muted: "#f1f5f9",
253727
+ // slate-100
253728
+ mutedForeground: "#64748b",
253729
+ // slate-500
253730
+ accent: "#f1f5f9",
253731
+ // slate-100
253732
+ accentForeground: "#0f172a",
253733
+ // slate-900
253734
+ destructive: "#dc2626",
253735
+ // red-600
253736
+ destructiveForeground: "#ffffff",
253737
+ border: "#e2e8f0",
253738
+ // slate-200
253739
+ input: "#e2e8f0",
253740
+ // slate-200
253741
+ ring: "#4f46e5"
253742
+ // indigo-600
253743
+ };
253744
+ var lightTheme = {
253745
+ colors: lightThemeColors
253746
+ };
253747
+ var COLOR_KEY_TO_CSS = {
253748
+ background: "background",
253749
+ foreground: "foreground",
253750
+ card: "card",
253751
+ cardForeground: "card-foreground",
253752
+ popover: "popover",
253753
+ popoverForeground: "popover-foreground",
253754
+ primary: "primary",
253755
+ primaryForeground: "primary-foreground",
253756
+ secondary: "secondary",
253757
+ secondaryForeground: "secondary-foreground",
253758
+ muted: "muted",
253759
+ mutedForeground: "muted-foreground",
253760
+ accent: "accent",
253761
+ accentForeground: "accent-foreground",
253762
+ destructive: "destructive",
253763
+ destructiveForeground: "destructive-foreground",
253764
+ border: "border",
253765
+ input: "input",
253766
+ ring: "ring"
253767
+ };
253768
+ var DERIVED_COLOR_TOKENS = [
253769
+ { source: "primary", cssSuffix: "inspector-active" },
253770
+ { source: "border", cssSuffix: "inspector-border" }
253771
+ ];
253772
+ function themeToCssVars(theme, omitDefaults = false) {
253773
+ const vars = {};
253774
+ if (!theme) {
253775
+ return vars;
253776
+ }
253777
+ const colors = theme.colors;
253778
+ if (colors) {
253779
+ for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
253780
+ const value = colors[key2];
253781
+ if (value === void 0) {
253782
+ continue;
253783
+ }
253784
+ if (omitDefaults && value === defaultThemeColors[key2]) {
253785
+ continue;
253786
+ }
253787
+ vars[`--pptx-${cssSuffix}`] = value;
253788
+ vars[`--color-${cssSuffix}`] = value;
253789
+ }
253790
+ for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
253791
+ const value = colors[source];
253792
+ if (value === void 0) {
253793
+ continue;
253794
+ }
253795
+ if (omitDefaults && value === defaultThemeColors[source]) {
253796
+ continue;
253797
+ }
253798
+ vars[`--pptx-${cssSuffix}`] = value;
253799
+ }
253800
+ }
253801
+ if (theme.radius !== void 0) {
253802
+ if (!omitDefaults || theme.radius !== defaultRadius) {
253803
+ vars["--pptx-radius"] = theme.radius;
253804
+ const r = theme.radius;
253805
+ vars["--radius-sm"] = `calc(${r} - 4px)`;
253806
+ vars["--radius-md"] = `calc(${r} - 2px)`;
253807
+ vars["--radius-lg"] = r;
253808
+ vars["--radius-xl"] = `calc(${r} + 4px)`;
253809
+ }
253810
+ }
253811
+ if (theme.cssVars) {
253812
+ for (const [key2, value] of Object.entries(theme.cssVars)) {
253813
+ vars[key2] = value;
253814
+ }
253815
+ }
253816
+ return vars;
253817
+ }
253818
+ function defaultCssVars() {
253819
+ const vars = {};
253820
+ for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
253821
+ vars[`--pptx-${cssSuffix}`] = defaultThemeColors[key2];
253822
+ }
253823
+ for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
253824
+ vars[`--pptx-${cssSuffix}`] = defaultThemeColors[source];
253825
+ }
253826
+ vars["--pptx-radius"] = defaultRadius;
253827
+ return vars;
253828
+ }
253829
+ var vermilionLightColors = {
253830
+ background: "#fbfaf7",
253831
+ foreground: "#1a1d21",
253832
+ card: "#ffffff",
253833
+ cardForeground: "#1a1d21",
253834
+ popover: "#ffffff",
253835
+ popoverForeground: "#1a1d21",
253836
+ primary: "#c2431f",
253837
+ primaryForeground: "#ffffff",
253838
+ secondary: "#f2efe8",
253839
+ secondaryForeground: "#1a1d21",
253840
+ muted: "#f2efe8",
253841
+ mutedForeground: "#5a626e",
253842
+ accent: "rgba(194, 67, 31, 0.08)",
253843
+ accentForeground: "#1a1d21",
253844
+ destructive: "#dc2626",
253845
+ destructiveForeground: "#ffffff",
253846
+ border: "#e6e2d9",
253847
+ input: "#e6e2d9",
253848
+ ring: "#c2431f"
253849
+ };
253850
+ var vermilionDarkColors = {
253851
+ background: "#0f1113",
253852
+ foreground: "#f0efec",
253853
+ card: "#171a1e",
253854
+ cardForeground: "#f0efec",
253855
+ popover: "#171a1e",
253856
+ popoverForeground: "#f0efec",
253857
+ primary: "#e86a40",
253858
+ primaryForeground: "#ffffff",
253859
+ secondary: "#1f242b",
253860
+ secondaryForeground: "#f0efec",
253861
+ muted: "#1f242b",
253862
+ mutedForeground: "#9aa1ab",
253863
+ accent: "rgba(232, 106, 64, 0.1)",
253864
+ accentForeground: "#f0efec",
253865
+ destructive: "#ef4444",
253866
+ destructiveForeground: "#ffffff",
253867
+ border: "#272c33",
253868
+ input: "#272c33",
253869
+ ring: "#e86a40"
253870
+ };
253871
+ var vermilionRadius = "0.375rem";
253872
+ var vermilionLightTheme = {
253873
+ colors: vermilionLightColors,
253874
+ radius: vermilionRadius
253875
+ };
253876
+ var vermilionDarkTheme = {
253877
+ colors: vermilionDarkColors,
253878
+ radius: vermilionRadius
253879
+ };
253880
+ var THEME_CATALOG = [
253881
+ { key: "default", labelKey: "pptx.settings.theme.default", theme: void 0 },
253882
+ { key: "light", labelKey: "pptx.settings.theme.light", theme: lightTheme },
253883
+ {
253884
+ key: "vermilionLight",
253885
+ labelKey: "pptx.settings.theme.vermilionLight",
253886
+ theme: vermilionLightTheme
253887
+ },
253888
+ {
253889
+ key: "vermilionDark",
253890
+ labelKey: "pptx.settings.theme.vermilionDark",
253891
+ theme: vermilionDarkTheme
253892
+ }
253893
+ ];
253894
+ function resolveThemeCatalogEntry(key2, catalog = THEME_CATALOG) {
253895
+ return catalog.find((entry5) => entry5.key === key2)?.theme;
253896
+ }
253897
+ function corePreset(id) {
253898
+ const preset22 = THEME_PRESETS.find((p) => p.id === id);
253899
+ if (!preset22) {
253900
+ throw new Error(`theme-gallery-presets: core THEME_PRESETS is missing "${id}"`);
253901
+ }
253902
+ return preset22;
253903
+ }
253904
+ var WISP_PRESET = {
253905
+ id: "wisp",
253906
+ name: "Wisp",
253907
+ colorScheme: {
253908
+ dk1: "#000000",
253909
+ lt1: "#FFFFFF",
253910
+ dk2: "#46393B",
253911
+ lt2: "#E8DCD8",
253912
+ accent1: "#A53010",
253913
+ accent2: "#DE7E18",
253914
+ accent3: "#9F8351",
253915
+ accent4: "#728653",
253916
+ accent5: "#92AA4C",
253917
+ accent6: "#6AAC91",
253918
+ hlink: "#FB4F14",
253919
+ folHlink: "#E25839"
253920
+ },
253921
+ fontScheme: {
253922
+ majorFont: { latin: "Century Gothic" },
253923
+ minorFont: { latin: "Century Gothic" }
253924
+ }
253925
+ };
253926
+ var BERLIN_PRESET = {
253927
+ id: "berlin",
253928
+ name: "Berlin",
253929
+ colorScheme: {
253930
+ dk1: "#000000",
253931
+ lt1: "#FFFFFF",
253932
+ dk2: "#3E5C61",
253933
+ lt2: "#D5E0D0",
253934
+ accent1: "#F09415",
253935
+ accent2: "#C1B56B",
253936
+ accent3: "#89C2A3",
253937
+ accent4: "#729BBE",
253938
+ accent5: "#9A90C2",
253939
+ accent6: "#BE8DBE",
253940
+ hlink: "#25A0DA",
253941
+ folHlink: "#FF7F00"
253942
+ },
253943
+ fontScheme: {
253944
+ majorFont: { latin: "Trebuchet MS" },
253945
+ minorFont: { latin: "Trebuchet MS" }
253946
+ }
253947
+ };
253948
+ var SLICE_PRESET = {
253949
+ id: "slice",
253950
+ name: "Slice",
253951
+ colorScheme: {
253952
+ dk1: "#000000",
253953
+ lt1: "#FFFFFF",
253954
+ dk2: "#2E3B4C",
253955
+ lt2: "#C7CDD3",
253956
+ accent1: "#E2751D",
253957
+ accent2: "#C53B23",
253958
+ accent3: "#A13D69",
253959
+ accent4: "#58599E",
253960
+ accent5: "#36749D",
253961
+ accent6: "#4EA39A",
253962
+ hlink: "#FD6B32",
253963
+ folHlink: "#D14D0F"
253964
+ },
253965
+ fontScheme: {
253966
+ majorFont: { latin: "Century Gothic" },
253967
+ minorFont: { latin: "Century Gothic" }
253968
+ }
253969
+ };
253970
+ var DIVIDEND_PRESET = {
253971
+ id: "dividend",
253972
+ name: "Dividend",
253973
+ colorScheme: {
253974
+ dk1: "#000000",
253975
+ lt1: "#FFFFFF",
253976
+ dk2: "#3D3D3D",
253977
+ lt2: "#E1E1E1",
253978
+ accent1: "#4D1434",
253979
+ accent2: "#903163",
253980
+ accent3: "#B2324B",
253981
+ accent4: "#D34817",
253982
+ accent5: "#E8971C",
253983
+ accent6: "#FDCB00",
253984
+ hlink: "#A03068",
253985
+ folHlink: "#C34882"
253986
+ },
253987
+ fontScheme: {
253988
+ majorFont: { latin: "Gill Sans MT" },
253989
+ minorFont: { latin: "Gill Sans MT" }
253990
+ }
253991
+ };
253992
+ [
253993
+ corePreset("office"),
253994
+ corePreset("facet"),
253995
+ corePreset("integral"),
253996
+ corePreset("ion"),
253997
+ corePreset("retrospect"),
253998
+ corePreset("organic"),
253999
+ WISP_PRESET,
254000
+ BERLIN_PRESET,
254001
+ SLICE_PRESET,
254002
+ DIVIDEND_PRESET
254003
+ ];
254004
+ function createPresentationLoadResources(handler) {
254005
+ const blobUrls = [];
254006
+ let committed = false;
254007
+ let released = false;
254008
+ return {
254009
+ blobUrls,
254010
+ /** The live viewer now owns the handler and media URLs. */
254011
+ commit() {
254012
+ committed = true;
254013
+ },
254014
+ /** Call in finally, after pending asset reads have settled. */
254015
+ releaseIfUncommitted() {
254016
+ if (committed || released) {
254017
+ return;
254018
+ }
254019
+ released = true;
254020
+ handler.dispose();
254021
+ for (const url of blobUrls) {
254022
+ if (url.startsWith("blob:")) {
254023
+ URL.revokeObjectURL(url);
254024
+ }
254025
+ }
254026
+ }
254027
+ };
254028
+ }
254029
+ function walkAndPatchElements(elements, patch) {
254030
+ let mutated = false;
254031
+ const next = elements.map((el) => {
254032
+ let updated = patch(el);
254033
+ if (updated.type === "group" && updated.children?.length) {
254034
+ const newChildren = walkAndPatchElements(updated.children, patch);
254035
+ if (newChildren !== updated.children) {
254036
+ updated = { ...updated, children: newChildren };
254037
+ }
254038
+ }
254039
+ if (updated !== el) {
254040
+ mutated = true;
254041
+ }
254042
+ return updated;
254043
+ });
254044
+ return mutated ? next : elements;
254045
+ }
254046
+ function applyImagePathPatches(elements, resolvedMap, refs) {
254047
+ const elementPatches = /* @__PURE__ */ new Map();
254048
+ for (const ref of refs) {
254049
+ const url = resolvedMap.get(ref.path);
254050
+ if (!url) {
254051
+ continue;
254052
+ }
254053
+ const existing = elementPatches.get(ref.element.id) ?? {};
254054
+ existing[ref.field] = url;
254055
+ elementPatches.set(ref.element.id, existing);
254056
+ }
254057
+ if (elementPatches.size === 0) {
254058
+ return elements;
254059
+ }
254060
+ return walkAndPatchElements(elements, (el) => {
254061
+ const patch = elementPatches.get(el.id);
254062
+ return patch ? { ...el, ...patch } : el;
254063
+ });
254064
+ }
254065
+ function isExternalUrl(path) {
254066
+ return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
254067
+ }
254068
+ function collectMediaElements(elements, collector) {
254069
+ for (const element of elements) {
254070
+ if (element.type === "media") {
254071
+ collector.push(element);
254072
+ continue;
254073
+ }
254074
+ if (element.type === "group" && element.children?.length) {
254075
+ collectMediaElements(element.children, collector);
254076
+ }
254077
+ }
254078
+ }
254079
+ function collectImagePaths(slides) {
254080
+ const paths = /* @__PURE__ */ new Set();
254081
+ const refs = [];
254082
+ const walkElements = (elements) => {
254083
+ for (const el of elements) {
254084
+ if (el.type === "picture" || el.type === "image") {
254085
+ const pic = el;
254086
+ if (pic.imagePath && !pic.imageData && !isExternalUrl(pic.imagePath)) {
254087
+ paths.add(pic.imagePath);
254088
+ refs.push({ element: el, field: "imageData", path: pic.imagePath });
254089
+ }
254090
+ if (pic.svgPath && !pic.svgData && !isExternalUrl(pic.svgPath)) {
254091
+ paths.add(pic.svgPath);
254092
+ refs.push({ element: el, field: "svgData", path: pic.svgPath });
254093
+ }
254094
+ }
254095
+ if (el.type === "media") {
254096
+ const media = el;
254097
+ if (media.posterFramePath && !media.posterFrameData && !isExternalUrl(media.posterFramePath)) {
254098
+ paths.add(media.posterFramePath);
254099
+ refs.push({
254100
+ element: el,
254101
+ field: "posterFrameData",
254102
+ path: media.posterFramePath
254103
+ });
254104
+ }
254105
+ }
254106
+ if (el.type === "model3d") {
254107
+ const model = el;
254108
+ if (model.modelPath && !model.modelData && !isExternalUrl(model.modelPath)) {
254109
+ paths.add(model.modelPath);
254110
+ refs.push({ element: el, field: "modelData", path: model.modelPath });
254111
+ }
254112
+ const posterNeedsResolution = model.posterImage ? !isExternalUrl(model.posterImage) : !model.imageData;
254113
+ if (model.imagePath && posterNeedsResolution && !isExternalUrl(model.imagePath)) {
254114
+ paths.add(model.imagePath);
254115
+ refs.push({ element: el, field: "posterImage", path: model.imagePath });
254116
+ }
254117
+ }
254118
+ if (el.type === "group" && el.children?.length) {
254119
+ walkElements(el.children);
254120
+ }
254121
+ }
254122
+ };
254123
+ for (const slide of slides) {
254124
+ walkElements(slide.elements);
254125
+ }
254126
+ return { paths, refs };
254127
+ }
254128
+ function collectTableCellImagePaths(slides) {
254129
+ const paths = /* @__PURE__ */ new Set();
254130
+ const refs = [];
254131
+ const walkElements = (elements) => {
254132
+ for (const el of elements) {
254133
+ if (el.type === "table") {
254134
+ const rows = el.tableData?.rows ?? [];
254135
+ rows.forEach((row, rowIndex) => {
254136
+ row.cells.forEach((cell, cellIndex) => {
254137
+ const path = cell.style?.backgroundImageFillPath;
254138
+ if (path && !cell.style?.backgroundImageFillData && !isExternalUrl(path)) {
254139
+ paths.add(path);
254140
+ refs.push({ element: el, rowIndex, cellIndex, path });
254141
+ }
254142
+ });
254143
+ });
254144
+ }
254145
+ if (el.type === "group" && el.children?.length) {
254146
+ walkElements(el.children);
254147
+ }
254148
+ }
254149
+ };
254150
+ for (const slide of slides) {
254151
+ walkElements(slide.elements);
254152
+ }
254153
+ return { paths, refs };
254154
+ }
254155
+ function applyTableCellImagePatches(elements, resolvedMap, refs) {
254156
+ const patchesByElementId = /* @__PURE__ */ new Map();
254157
+ for (const ref of refs) {
254158
+ const url = resolvedMap.get(ref.path);
254159
+ if (!url) {
254160
+ continue;
254161
+ }
254162
+ const list2 = patchesByElementId.get(ref.element.id) ?? [];
254163
+ list2.push({ rowIndex: ref.rowIndex, cellIndex: ref.cellIndex, url });
254164
+ patchesByElementId.set(ref.element.id, list2);
254165
+ }
254166
+ if (patchesByElementId.size === 0) {
254167
+ return elements;
254168
+ }
254169
+ return walkAndPatchElements(elements, (el) => {
254170
+ const cellPatches = patchesByElementId.get(el.id);
254171
+ if (!cellPatches || el.type !== "table") {
254172
+ return el;
254173
+ }
254174
+ const table2 = el;
254175
+ const tableData = table2.tableData;
254176
+ if (!tableData) {
254177
+ return el;
254178
+ }
254179
+ const newRows = tableData.rows.map((row, rowIndex) => {
254180
+ const rowPatches = cellPatches.filter((p) => p.rowIndex === rowIndex);
254181
+ if (rowPatches.length === 0) {
254182
+ return row;
254183
+ }
254184
+ const newCells = row.cells.map((cell, cellIndex) => {
254185
+ const patch = rowPatches.find((p) => p.cellIndex === cellIndex);
254186
+ if (!patch || !cell.style) {
254187
+ return cell;
254188
+ }
254189
+ return {
254190
+ ...cell,
254191
+ style: { ...cell.style, backgroundImageFillData: patch.url }
254192
+ };
254193
+ });
254194
+ return { ...row, cells: newCells };
254195
+ });
254196
+ return { ...table2, tableData: { ...tableData, rows: newRows } };
254197
+ });
254198
+ }
254199
+ function buildInitialGuides(presentationGuides, firstSlideGuides) {
254200
+ const guides = [];
254201
+ if (presentationGuides) {
254202
+ for (const g2 of presentationGuides) {
254203
+ guides.push({
254204
+ id: g2.id,
254205
+ axis: g2.orientation === "horz" ? "h" : "v",
254206
+ position: guideEmuToPx(g2.positionEmu)
254207
+ });
254208
+ }
254209
+ }
254210
+ if (firstSlideGuides) {
254211
+ for (const g2 of firstSlideGuides) {
254212
+ guides.push({
254213
+ id: g2.id,
254214
+ axis: g2.orientation === "horz" ? "h" : "v",
254215
+ position: guideEmuToPx(g2.positionEmu)
254216
+ });
254217
+ }
254218
+ }
254219
+ return guides;
254220
+ }
254221
+ async function resolveMediaElementSource(mediaElement, handler) {
254222
+ const mediaPath = mediaElement.mediaPath;
254223
+ if (!mediaPath) {
254224
+ return { mediaPath: void 0, url: void 0, isBlobUrl: false, missing: true };
254225
+ }
254226
+ if (isExternalUrl(mediaPath)) {
254227
+ return { mediaPath, url: mediaPath, isBlobUrl: false, missing: false };
254228
+ }
254229
+ try {
254230
+ const isAudioVideo = mediaElement.mediaType === "audio" || mediaElement.mediaType === "video";
254231
+ if (isAudioVideo) {
254232
+ const arrayBuffer = await handler.getMediaArrayBuffer(mediaPath);
254233
+ if (!arrayBuffer) {
254234
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254235
+ }
254236
+ const mimeType = mediaElement.mediaMimeType || "application/octet-stream";
254237
+ const blobUrl = URL.createObjectURL(new Blob([arrayBuffer], { type: mimeType }));
254238
+ return { mediaPath, url: blobUrl, isBlobUrl: true, missing: false };
254239
+ }
254240
+ const dataUrl = await handler.getImageData(mediaPath);
254241
+ if (!dataUrl) {
254242
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254243
+ }
254244
+ return { mediaPath, url: dataUrl, isBlobUrl: false, missing: false };
254245
+ } catch {
254246
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254247
+ }
254248
+ }
254249
+ var TABLE_STYLE_FILL_KEYS = [
254250
+ "wholeTblFill",
254251
+ "band1HFill",
254252
+ "band2HFill",
254253
+ "band1VFill",
254254
+ "band2VFill",
254255
+ "lastColFill",
254256
+ "firstColFill",
254257
+ "lastRowFill",
254258
+ "seCellFill",
254259
+ "swCellFill",
254260
+ "firstRowFill",
254261
+ "neCellFill",
254262
+ "nwCellFill"
254263
+ ];
254264
+ function isExternalUrl2(path) {
254265
+ return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
254266
+ }
254267
+ function collectTableStyleImagePaths(tableStyleMap) {
254268
+ const paths = /* @__PURE__ */ new Set();
254269
+ const refs = [];
254270
+ if (!tableStyleMap) {
254271
+ return { paths, refs };
254272
+ }
254273
+ for (const [styleId, entry5] of Object.entries(tableStyleMap)) {
254274
+ for (const fillKey of TABLE_STYLE_FILL_KEYS) {
254275
+ const fill = entry5[fillKey];
254276
+ const path = fill?.image?.path;
254277
+ if (path && !fill?.image?.data && !isExternalUrl2(path)) {
254278
+ paths.add(path);
254279
+ refs.push({ styleId, fillKey, path });
254280
+ }
254281
+ }
254282
+ }
254283
+ return { paths, refs };
254284
+ }
254285
+ function applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs) {
254286
+ const patchesByStyleId = /* @__PURE__ */ new Map();
254287
+ for (const ref of refs) {
254288
+ const url = resolvedMap.get(ref.path);
254289
+ if (!url) {
254290
+ continue;
254291
+ }
254292
+ const list2 = patchesByStyleId.get(ref.styleId) ?? [];
254293
+ list2.push({ fillKey: ref.fillKey, url });
254294
+ patchesByStyleId.set(ref.styleId, list2);
254295
+ }
254296
+ if (patchesByStyleId.size === 0) {
254297
+ return tableStyleMap;
254298
+ }
254299
+ const next = { ...tableStyleMap };
254300
+ for (const [styleId, patches] of patchesByStyleId) {
254301
+ const entry5 = next[styleId];
254302
+ if (!entry5) {
254303
+ continue;
254304
+ }
254305
+ const patchedEntry = { ...entry5 };
254306
+ for (const { fillKey, url } of patches) {
254307
+ const fill = patchedEntry[fillKey];
254308
+ if (!fill?.image) {
254309
+ continue;
254310
+ }
254311
+ patchedEntry[fillKey] = { ...fill, image: { ...fill.image, data: url } };
254312
+ }
254313
+ next[styleId] = patchedEntry;
254314
+ }
254315
+ return next;
254316
+ }
254317
+ function collectTextFillBlipPaths(slides) {
254318
+ const paths = /* @__PURE__ */ new Set();
254319
+ const refs = [];
254320
+ const walkElements = (elements) => {
254321
+ for (const el of elements) {
254322
+ if (hasTextProperties(el) && el.textSegments) {
254323
+ el.textSegments.forEach((segment, segmentIndex) => {
254324
+ const path = segment.style?.textFillBlipUrl;
254325
+ if (path && !isExternalUrl(path)) {
254326
+ paths.add(path);
254327
+ refs.push({ element: el, segmentIndex, path });
254328
+ }
254329
+ });
254330
+ }
254331
+ if (el.type === "group" && el.children?.length) {
254332
+ walkElements(el.children);
254333
+ }
254334
+ }
254335
+ };
254336
+ for (const slide of slides) {
254337
+ walkElements(slide.elements);
254338
+ }
254339
+ return { paths, refs };
254340
+ }
254341
+ function applyTextFillBlipPatches(elements, resolvedMap, refs) {
254342
+ const patchesByElementId = /* @__PURE__ */ new Map();
254343
+ for (const ref of refs) {
254344
+ const url = resolvedMap.get(ref.path);
254345
+ if (!url) {
254346
+ continue;
254347
+ }
254348
+ const list2 = patchesByElementId.get(ref.element.id) ?? [];
254349
+ list2.push({ segmentIndex: ref.segmentIndex, url });
254350
+ patchesByElementId.set(ref.element.id, list2);
254351
+ }
254352
+ if (patchesByElementId.size === 0) {
254353
+ return elements;
254354
+ }
254355
+ return walkAndPatchElements(elements, (el) => {
254356
+ const segmentPatches = patchesByElementId.get(el.id);
254357
+ if (!segmentPatches || !hasTextProperties(el) || !el.textSegments) {
254358
+ return el;
254359
+ }
254360
+ const newSegments = el.textSegments.map((segment, segmentIndex) => {
254361
+ const patch = segmentPatches.find((p) => p.segmentIndex === segmentIndex);
254362
+ if (!patch || !segment.style) {
254363
+ return segment;
254364
+ }
254365
+ return { ...segment, style: { ...segment.style, textFillBlipUrl: patch.url } };
254366
+ });
254367
+ return { ...el, textSegments: newSegments };
254368
+ });
254369
+ }
254370
+ async function resolveTableCellImageUrls(slides, getImageData) {
254371
+ const { paths, refs } = collectTableCellImagePaths(slides);
254372
+ if (paths.size === 0) {
254373
+ return slides;
254374
+ }
254375
+ const resolvedMap = /* @__PURE__ */ new Map();
254376
+ await Promise.all(
254377
+ Array.from(paths).map(async (path) => {
254378
+ try {
254379
+ const url = await getImageData(path);
254380
+ if (url) {
254381
+ resolvedMap.set(path, url);
254382
+ }
254383
+ } catch {
254384
+ }
254385
+ })
254386
+ );
254387
+ if (resolvedMap.size === 0) {
254388
+ return slides;
254389
+ }
254390
+ return slides.map((slide) => {
254391
+ const newElements = applyTableCellImagePatches(slide.elements, resolvedMap, refs);
254392
+ return newElements === slide.elements ? slide : { ...slide, elements: newElements };
254393
+ });
254394
+ }
254395
+ async function resolveTableStyleImageUrls(tableStyleMap, getImageData) {
254396
+ const { paths, refs } = collectTableStyleImagePaths(tableStyleMap);
254397
+ if (paths.size === 0 || !tableStyleMap) {
254398
+ return tableStyleMap;
254399
+ }
254400
+ const resolvedMap = /* @__PURE__ */ new Map();
254401
+ await Promise.all(
254402
+ Array.from(paths).map(async (path) => {
254403
+ try {
254404
+ const url = await getImageData(path);
254405
+ if (url) {
254406
+ resolvedMap.set(path, url);
254407
+ }
254408
+ } catch {
254409
+ }
254410
+ })
254411
+ );
254412
+ if (resolvedMap.size === 0) {
254413
+ return tableStyleMap;
254414
+ }
254415
+ return applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs);
254416
+ }
254417
+ async function resolveTextFillBlipUrls(slides, getImageData) {
254418
+ const { paths, refs } = collectTextFillBlipPaths(slides);
254419
+ if (paths.size === 0) {
254420
+ return slides;
254421
+ }
254422
+ const resolvedMap = /* @__PURE__ */ new Map();
254423
+ await Promise.all(
254424
+ Array.from(paths).map(async (path) => {
254425
+ try {
254426
+ const url = await getImageData(path);
254427
+ if (url) {
254428
+ resolvedMap.set(path, url);
254429
+ }
254430
+ } catch {
254431
+ }
254432
+ })
254433
+ );
254434
+ if (resolvedMap.size === 0) {
254435
+ return slides;
254436
+ }
254437
+ return slides.map((slide) => {
254438
+ const newElements = applyTextFillBlipPatches(slide.elements, resolvedMap, refs);
254439
+ return newElements === slide.elements ? slide : { ...slide, elements: newElements };
254440
+ });
254441
+ }
254442
+ init_constants2();
253341
254443
  function isChart3DViewEnabled(flags, chartType) {
253342
254444
  if (!flags || !chartType) {
253343
254445
  return false;
@@ -255866,4 +256968,4 @@ registerPptxWebControls();
255866
256968
  * `<p:extLst>` (optional)
255867
256969
  */
255868
256970
 
255869
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ANIMATION_DIRECTION_LABEL_KEYS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_CARD_IDS, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_PAGE_IDS, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CANVAS_CONTEXT_MENU_COMMAND_IDS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_QUICK_ACTION_BUTTON_SIZE, CHART_TYPE_OPTIONS, CINEMATIC_TRANSITION_KEYFRAMES, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CONTEXTUAL_TAB_GROUPS, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, CROP_HANDLE_ARIA_KEY, CROP_LABEL_KEY, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MORPH_DURATION_MS, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_TRANSITION_DURATION_MS, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DUOTONE_PRESETS, EASE, EDITOR_SHORTCUT_ACTION_IDS, EDIT_POINTS_STYLE, EDIT_POINTS_TARGET_ATTR, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, ELEMENT_CONTEXT_MENU_COMMAND_IDS, EMPHASIS_PRESET_VALUES, EMPTY_RESOLVED_CUSTOMIZATION, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EditPointsSession, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, FIXED_TAB_GALLERIES, FREEFORM_TOOL_IDS, FREEFORM_TOOL_LABEL_KEYS, FreeformToolSession, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, INSTANT, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, 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_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MEDIA_FULLSCREEN_OVERLAY_STYLE, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_MENU_ITEMS, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, ONLINE_VIDEO_IFRAME_ALLOW, ONLINE_VIDEO_IFRAME_SANDBOX, OPTIONS_PAGE_IDS, OPTIONS_SECTION_IDS, OPTIONS_SETTING_IDS, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, P14_TRANSITION_KEYFRAMES, P14_TRANSITION_KEYFRAMES_2, P14_TRANSITION_KEYFRAMES_ALL, PASTE_SPECIAL_OPTIONS, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, RANDOM_ELIGIBLE_TYPES, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_CONTEXTUAL_TAB_ATTR, RIBBON_CONTROL_ATTR, RIBBON_GALLERY_ATTR, RIBBON_GALLERY_ITEM_ATTR, RIBBON_GALLERY_POPUP_ATTR, RIBBON_GROUP_ATTR, RIBBON_SCOPE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TAB_IDS, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_KEYFRAMES_CSS, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_DECORATION_FLAGS, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_BUTTON_IDS, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_DURATION_MS, TRANSITION_SPEED_OPTIONS, TRANSITION_THRUBLK_TYPES, TRANSITION_VALID_DIRECTIONS, TRIGGER_OPTIONS, ThemePresets, VIEWER_DIALOG_IDS, VIEWER_EXPORT_FORMAT_IDS, VIEWER_FEATURE_IDS, VIEWER_OPTIONS_TABS, VIEWER_PANEL_IDS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, WHEEL_SPOKE_COUNTS, acceptAutosaveRecovery, acceptsPresentationInput, acknowledgeAutosaveRecovery, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyActiveInlineListFormatting, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChart3DDrag, applyChart3DSelect, applyChartElementToggle, applyChartPartHighlight, applyChartStylePreset, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyListStyleUpdate, applyMasterViewCrudAction, applyMergeShapesPlan, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPasteSpecialFormat, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyRibbonGalleryItem, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachOverlayKeyboard, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, authoredLetterSpacingPx, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginCropDrag, beginShapeAdjustment, beginZoomExcursion, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildCanvasContextMenuEntries, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCropOverlay, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildFreeformShapeElement, buildGlyphEnvelopeBlock, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineListStylePatch, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRasterPictureElement, buildRectPathGradient, buildRibbonGallery, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlidePaneContextMenuEntries, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, buildZoomTransitionOverride, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canCropElement, canDrillDown, canEditElementPoints, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canMergeShapes, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, cancelCropUpdate, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampFlyoutPosition, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, clientToSlidePoint, cloneElementForPaste, cloneElementUpdates, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, contextMenuInspectorAnchor, contextualTabLabelKey, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createCustomizationController, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createImageElementFromFile, createInitialPresentationSnapshot, createInlineListModelObserver, createInlineListSeed, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createRotationDrag, createSnapshotTextPositions, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, createWriteBackScheduler, cropFill, cropFit, cropModeKeyAction, cropSessionChanged, cropToAspectRatio, cursorForTool, customGeometryPathsToSvgSubpaths, customizeBackstageCards, customizeBackstageNav, customizeCanvasContextMenuEntries, customizeContextMenuEntries, customizeOptionsTabs, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, directionValuesFor, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, dragCropHandle, editCommentInList, effectiveDirection, effectiveTimingCurve, elementActionToPptxAction, elementBulletKind, elementContainerHeightStyle, elementHitTargetStyle, elementIdSelector, elementLockTogglePatch, elementPictureFilename, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, followingText, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, galleryHasItems, galleryItemLabel, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedNativeImageSize, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCinematicTransitionAnimations, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getConnectorPathGeometry, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFillCounterTransform, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelectionResult, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOnlineVideoEmbed, getOverflowSegments, getP14TransitionAnimations, getPatternSvg, getPendingSelectionRestore, getPresetShapeVectorGeometry, getPrintableArea, getResizeHandleHitAreaStyle, getSelectionControlArtworkStyle, getSelectionOutlineColor, getSelectionTextStyleFlags, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasMultipleSelectedTableCells, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, inlineGalleryItems, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isDialogAvailable, isDrawingToolVisible, isEditPointsEnabled, isEditableMotionPath, isEditableTextElement, isEditorControlTarget, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isFeatureEnabled, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isOptionsPageVisible, isPanelVisible, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, listMediaBookmarkOptions, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapCustomizedEditorKey, mapEditingWheel, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measurePreviewGeometry, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, oleActionsVisible, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, overlayPointerInput, paintedElementSize, paintedStrokeWidth, panCropImage, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, planMergeShapes, playAnimationRibbonPreview, playFeedbackSound, playGroup, playSlideTransitionPreview, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareHtml2CanvasClone, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, probeNativeImageSize, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterResultToPngDataUrl, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readListActivationSelection, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveActiveRibbonTab, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveEditPointsAvailability, resolveEffectiveHiddenActions, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveForwardSlideWithZoomReturn, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaBookmarkTimesMs, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolveOrientation, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlidePaneClick, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveTextFillBlipUrls, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, resolveZoomNavigationTarget, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonCustomizationCss, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleFontSizeForAutoFit, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, scrollInspectorSectionIntoView, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedBookmarkOptionValue, selectedParagraphBulletKind, selectionBulletKind, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, setTrigger, setTriggerBookmark, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRenderHitTarget, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldShowMediaFullscreenStopButton, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitEastAsianBreaks, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, splitsUnderlineIntoWords, startCropSession, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toElementAxes, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformInlineListCase, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleContextualTabs, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };
256971
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ANIMATION_DIRECTION_LABEL_KEYS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_CARD_IDS, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_PAGE_IDS, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CANVAS_CONTEXT_MENU_COMMAND_IDS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_QUICK_ACTION_BUTTON_SIZE, CHART_TYPE_OPTIONS, CINEMATIC_TRANSITION_KEYFRAMES, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CONTEXTUAL_TAB_GROUPS, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, CROP_HANDLE_ARIA_KEY, CROP_LABEL_KEY, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MORPH_DURATION_MS, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_TRANSITION_DURATION_MS, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DUOTONE_PRESETS, EASE, EDITOR_SHORTCUT_ACTION_IDS, EDIT_POINTS_STYLE, EDIT_POINTS_TARGET_ATTR, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, ELEMENT_CONTEXT_MENU_COMMAND_IDS, EMPHASIS_PRESET_VALUES, EMPTY_RESOLVED_CUSTOMIZATION, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EditPointsSession, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, FIXED_TAB_GALLERIES, FREEFORM_TOOL_IDS, FREEFORM_TOOL_LABEL_KEYS, FreeformToolSession, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HELP_RIBBON_COMMANDS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, INSTANT, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, 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_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MEDIA_FULLSCREEN_OVERLAY_STYLE, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_MENU_ITEMS, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, ONLINE_VIDEO_IFRAME_ALLOW, ONLINE_VIDEO_IFRAME_SANDBOX, OPTIONS_PAGE_IDS, OPTIONS_SECTION_IDS, OPTIONS_SETTING_IDS, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, P14_TRANSITION_KEYFRAMES, P14_TRANSITION_KEYFRAMES_2, P14_TRANSITION_KEYFRAMES_ALL, PASTE_SPECIAL_OPTIONS, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_ANIM_TRIGGER_ATTRIBUTE, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, RANDOM_ELIGIBLE_TYPES, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RECORD_COMMAND_GROUPS, RIBBON_CONTEXTUAL_TAB_ATTR, RIBBON_CONTROL_ATTR, RIBBON_GALLERY_ATTR, RIBBON_GALLERY_ITEM_ATTR, RIBBON_GALLERY_POPUP_ATTR, RIBBON_GROUP_ATTR, RIBBON_SCOPE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TAB_IDS, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_COMMAND_GROUPS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_KEYFRAMES_CSS, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_DECORATION_FLAGS, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_BUTTON_IDS, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_DURATION_MS, TRANSITION_SPEED_OPTIONS, TRANSITION_THRUBLK_TYPES, TRANSITION_VALID_DIRECTIONS, TRIGGER_OPTIONS, ThemePresets, VIEWER_DIALOG_IDS, VIEWER_EXPORT_FORMAT_IDS, VIEWER_FEATURE_IDS, VIEWER_OPTIONS_TABS, VIEWER_PANEL_IDS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, WHEEL_SPOKE_COUNTS, acceptAutosaveRecovery, acceptsPresentationInput, acknowledgeAutosaveRecovery, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyActiveInlineListFormatting, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChart3DDrag, applyChart3DSelect, applyChartElementToggle, applyChartPartHighlight, applyChartStylePreset, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyListStyleUpdate, applyMasterViewCrudAction, applyMergeShapesPlan, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPasteSpecialFormat, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyRibbonGalleryItem, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachOverlayKeyboard, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, authoredLetterSpacingPx, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginCropDrag, beginShapeAdjustment, beginZoomExcursion, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildCanvasContextMenuEntries, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCropOverlay, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildFreeformShapeElement, buildGlyphEnvelopeBlock, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineListStylePatch, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRasterPictureElement, buildRectPathGradient, buildRibbonGallery, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlidePaneContextMenuEntries, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, buildZoomTransitionOverride, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canCropElement, canDrillDown, canEditElementPoints, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canMergeShapes, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, cancelCropUpdate, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampFlyoutPosition, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, clientToSlidePoint, cloneElementForPaste, cloneElementUpdates, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, contextMenuInspectorAnchor, contextualTabLabelKey, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createCustomizationController, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createImageElementFromFile, createInitialPresentationSnapshot, createInlineListModelObserver, createInlineListSeed, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createRotationDrag, createSnapshotTextPositions, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, createWriteBackScheduler, cropFill, cropFit, cropModeKeyAction, cropSessionChanged, cropToAspectRatio, cursorForTool, customGeometryPathsToSvgSubpaths, customizeBackstageCards, customizeBackstageNav, customizeCanvasContextMenuEntries, customizeContextMenuEntries, customizeOptionsTabs, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, directionValuesFor, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, dragCropHandle, editCommentInList, effectiveDirection, effectiveTimingCurve, elementActionToPptxAction, elementBulletKind, elementContainerHeightStyle, elementHitTargetStyle, elementIdSelector, elementLockTogglePatch, elementPictureFilename, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, followingText, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, galleryHasItems, galleryItemLabel, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedNativeImageSize, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCinematicTransitionAnimations, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getConnectorPathGeometry, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFillCounterTransform, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelectionResult, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOnlineVideoEmbed, getOverflowSegments, getP14TransitionAnimations, getPatternSvg, getPendingSelectionRestore, getPresetShapeVectorGeometry, getPrintableArea, getResizeHandleHitAreaStyle, getSelectionControlArtworkStyle, getSelectionOutlineColor, getSelectionTextStyleFlags, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSpeechRecognitionCtor, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasMultipleSelectedTableCells, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, inlineGalleryItems, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isDialogAvailable, isDrawingToolVisible, isEditPointsEnabled, isEditableMotionPath, isEditableTextElement, isEditorControlTarget, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isFeatureEnabled, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isOptionsPageVisible, isPanelVisible, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, listMediaBookmarkOptions, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapCustomizedEditorKey, mapEditingWheel, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measurePreviewGeometry, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCaptionResults, mergeCells, mergePresentationSnapshot, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, oleActionsVisible, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, overlayPointerInput, paintedElementSize, paintedStrokeWidth, panCropImage, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, planMergeShapes, playAnimationRibbonPreview, playFeedbackSound, playGroup, playSlideTransitionPreview, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareHtml2CanvasClone, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, probeNativeImageSize, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterResultToPngDataUrl, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readListActivationSelection, readOnlyRecommendation, readRibbonTransitionDraft, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveActiveRibbonTab, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveEditPointsAvailability, resolveEffectiveHiddenActions, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveForwardSlideWithZoomReturn, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaBookmarkTimesMs, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolveOrientation, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlidePaneClick, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveTextFillBlipUrls, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, resolveZoomNavigationTarget, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonCustomizationCss, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleFontSizeForAutoFit, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, scrollInspectorSectionIntoView, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedBookmarkOptionValue, selectedParagraphBulletKind, selectionBulletKind, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, setTrigger, setTriggerBookmark, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRenderHitTarget, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldShowMediaFullscreenStopButton, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitEastAsianBreaks, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, splitsUnderlineIntoWords, startCropSession, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, subtitleRecognitionLanguage, subtitleSettingsFromOptions, subtitleSettingsLabels, surfaceWireframePatch, svgGradientFillRef, svgLineCap, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toElementAxes, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformInlineListCase, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateSubtitleSettings, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleContextualTabs, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };