pptx-react-viewer 2.12.0 → 2.13.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 (122) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-CS4CONUO.mjs → AiChatPanel-4YS6DEIT.mjs} +4 -4
  3. package/dist/AiChatPanel-4YS6DEIT.mjs.br +0 -0
  4. package/dist/AiChatPanel-4YS6DEIT.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-JIXSOZXN.js → AiChatPanel-DEI3EQFM.js} +23 -23
  6. package/dist/AiChatPanel-DEI3EQFM.js.br +0 -0
  7. package/dist/AiChatPanel-DEI3EQFM.js.gz +0 -0
  8. package/dist/{Model3DScene-RWFPSN6B.mjs → Model3DScene-JSNQCKCJ.mjs} +1 -1
  9. package/dist/Model3DScene-JSNQCKCJ.mjs.br +0 -0
  10. package/dist/Model3DScene-JSNQCKCJ.mjs.gz +0 -0
  11. package/dist/{Model3DScene-5KMJ4JL6.js → Model3DScene-X4W7GZVY.js} +2 -2
  12. package/dist/Model3DScene-X4W7GZVY.js.br +0 -0
  13. package/dist/Model3DScene-X4W7GZVY.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs → SurfaceChart3DScene-3MSU74YH.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-2GZQM3LN.mjs.br → SurfaceChart3DScene-3MSU74YH.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-3MSU74YH.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-BIOKIETC.js → SurfaceChart3DScene-IZLUWT27.js} +2 -2
  18. package/dist/SurfaceChart3DScene-IZLUWT27.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-IZLUWT27.js.gz +0 -0
  20. package/dist/{chunk-QGHC65C4.mjs → chunk-4TD7EINA.mjs} +1071 -375
  21. package/dist/chunk-4TD7EINA.mjs.br +0 -0
  22. package/dist/chunk-4TD7EINA.mjs.gz +0 -0
  23. package/dist/{chunk-AOED5MFM.mjs → chunk-6KRNQ2KF.mjs} +13 -12
  24. package/dist/chunk-6KRNQ2KF.mjs.br +0 -0
  25. package/dist/chunk-6KRNQ2KF.mjs.gz +0 -0
  26. package/dist/{chunk-3GNSGGY2.js → chunk-BXAK3JFM.js} +13 -0
  27. package/dist/chunk-BXAK3JFM.js.br +0 -0
  28. package/dist/chunk-BXAK3JFM.js.gz +0 -0
  29. package/dist/{chunk-PJUQQF3I.js → chunk-EFSQW6S5.js} +1091 -376
  30. package/dist/chunk-EFSQW6S5.js.br +0 -0
  31. package/dist/chunk-EFSQW6S5.js.gz +0 -0
  32. package/dist/{chunk-ZIXSSQAZ.js → chunk-G2LZT5SV.js} +3 -3
  33. package/dist/chunk-G2LZT5SV.js.br +0 -0
  34. package/dist/chunk-G2LZT5SV.js.gz +0 -0
  35. package/dist/{chunk-CEUHGUZ4.mjs → chunk-HRLF4REI.mjs} +54 -28
  36. package/dist/chunk-HRLF4REI.mjs.br +0 -0
  37. package/dist/chunk-HRLF4REI.mjs.gz +0 -0
  38. package/dist/{chunk-2VUHJNWM.js → chunk-IDW5UPXW.js} +292 -266
  39. package/dist/chunk-IDW5UPXW.js.br +0 -0
  40. package/dist/chunk-IDW5UPXW.js.gz +0 -0
  41. package/dist/{chunk-PTGTFXPU.js → chunk-RWIQHVZQ.js} +341 -340
  42. package/dist/chunk-RWIQHVZQ.js.br +0 -0
  43. package/dist/chunk-RWIQHVZQ.js.gz +0 -0
  44. package/dist/{chunk-SP7U34QM.js → chunk-SHZ3GWOD.js} +2004 -1943
  45. package/dist/chunk-SHZ3GWOD.js.br +0 -0
  46. package/dist/chunk-SHZ3GWOD.js.gz +0 -0
  47. package/dist/{chunk-ECDKYPQ2.mjs → chunk-TEXIGSA6.mjs} +13 -0
  48. package/dist/chunk-TEXIGSA6.mjs.br +0 -0
  49. package/dist/chunk-TEXIGSA6.mjs.gz +0 -0
  50. package/dist/{chunk-EJRHYYKE.mjs → chunk-WEU5EMKK.mjs} +1 -1
  51. package/dist/chunk-WEU5EMKK.mjs.br +0 -0
  52. package/dist/chunk-WEU5EMKK.mjs.gz +0 -0
  53. package/dist/{chunk-BJQSHVYH.mjs → chunk-YA7VFYTW.mjs} +271 -210
  54. package/dist/chunk-YA7VFYTW.mjs.br +0 -0
  55. package/dist/chunk-YA7VFYTW.mjs.gz +0 -0
  56. package/dist/i18n.js +4 -4
  57. package/dist/i18n.js.br +0 -0
  58. package/dist/i18n.js.gz +0 -0
  59. package/dist/i18n.mjs +1 -1
  60. package/dist/i18n.mjs.br +0 -0
  61. package/dist/i18n.mjs.gz +0 -0
  62. package/dist/index.d.ts +18 -0
  63. package/dist/index.js +36 -36
  64. package/dist/index.js.br +0 -0
  65. package/dist/index.js.gz +0 -0
  66. package/dist/index.mjs +6 -6
  67. package/dist/index.mjs.br +0 -0
  68. package/dist/index.mjs.gz +0 -0
  69. package/dist/internals.d.ts +18 -0
  70. package/dist/internals.d.ts.map +1 -1
  71. package/dist/internals.js +79 -79
  72. package/dist/internals.js.br +0 -0
  73. package/dist/internals.js.gz +0 -0
  74. package/dist/internals.mjs +4 -4
  75. package/dist/internals.mjs.br +0 -0
  76. package/dist/internals.mjs.gz +0 -0
  77. package/dist/pptx-viewer.css +1 -1
  78. package/dist/pptx-viewer.css.br +0 -0
  79. package/dist/pptx-viewer.css.gz +0 -0
  80. package/dist/viewer/index.d.ts +18 -0
  81. package/dist/viewer/index.js +22 -22
  82. package/dist/viewer/index.js.br +0 -0
  83. package/dist/viewer/index.js.gz +0 -0
  84. package/dist/viewer/index.mjs +6 -6
  85. package/dist/viewer/index.mjs.br +0 -0
  86. package/dist/viewer/index.mjs.gz +0 -0
  87. package/package.json +1 -1
  88. package/dist/AiChatPanel-CS4CONUO.mjs.br +0 -0
  89. package/dist/AiChatPanel-CS4CONUO.mjs.gz +0 -0
  90. package/dist/AiChatPanel-JIXSOZXN.js.br +0 -0
  91. package/dist/AiChatPanel-JIXSOZXN.js.gz +0 -0
  92. package/dist/Model3DScene-5KMJ4JL6.js.br +0 -0
  93. package/dist/Model3DScene-5KMJ4JL6.js.gz +0 -0
  94. package/dist/Model3DScene-RWFPSN6B.mjs.br +0 -0
  95. package/dist/Model3DScene-RWFPSN6B.mjs.gz +0 -0
  96. package/dist/SurfaceChart3DScene-2GZQM3LN.mjs.gz +0 -0
  97. package/dist/SurfaceChart3DScene-BIOKIETC.js.br +0 -0
  98. package/dist/SurfaceChart3DScene-BIOKIETC.js.gz +0 -0
  99. package/dist/chunk-2VUHJNWM.js.br +0 -0
  100. package/dist/chunk-2VUHJNWM.js.gz +0 -0
  101. package/dist/chunk-3GNSGGY2.js.br +0 -0
  102. package/dist/chunk-3GNSGGY2.js.gz +0 -0
  103. package/dist/chunk-AOED5MFM.mjs.br +0 -0
  104. package/dist/chunk-AOED5MFM.mjs.gz +0 -0
  105. package/dist/chunk-BJQSHVYH.mjs.br +0 -0
  106. package/dist/chunk-BJQSHVYH.mjs.gz +0 -0
  107. package/dist/chunk-CEUHGUZ4.mjs.br +0 -0
  108. package/dist/chunk-CEUHGUZ4.mjs.gz +0 -0
  109. package/dist/chunk-ECDKYPQ2.mjs.br +0 -0
  110. package/dist/chunk-ECDKYPQ2.mjs.gz +0 -0
  111. package/dist/chunk-EJRHYYKE.mjs.br +0 -0
  112. package/dist/chunk-EJRHYYKE.mjs.gz +0 -0
  113. package/dist/chunk-PJUQQF3I.js.br +0 -0
  114. package/dist/chunk-PJUQQF3I.js.gz +0 -0
  115. package/dist/chunk-PTGTFXPU.js.br +0 -0
  116. package/dist/chunk-PTGTFXPU.js.gz +0 -0
  117. package/dist/chunk-QGHC65C4.mjs.br +0 -0
  118. package/dist/chunk-QGHC65C4.mjs.gz +0 -0
  119. package/dist/chunk-SP7U34QM.js.br +0 -0
  120. package/dist/chunk-SP7U34QM.js.gz +0 -0
  121. package/dist/chunk-ZIXSSQAZ.js.br +0 -0
  122. package/dist/chunk-ZIXSSQAZ.js.gz +0 -0
@@ -2152,9 +2152,9 @@ function getStockObject(index) {
2152
2152
  }
2153
2153
  }
2154
2154
  async function blobToDataUrl(blob) {
2155
- return new Promise((resolve, reject) => {
2155
+ return new Promise((resolve2, reject) => {
2156
2156
  const reader = new FileReader();
2157
- reader.onload = () => resolve(reader.result);
2157
+ reader.onload = () => resolve2(reader.result);
2158
2158
  reader.onerror = () => reject(reader.error);
2159
2159
  reader.readAsDataURL(blob);
2160
2160
  });
@@ -9757,12 +9757,12 @@ function updateSection(section) {
9757
9757
  }
9758
9758
  return node;
9759
9759
  }
9760
- function applySections(presentation, sections, lookup, remap) {
9761
- if (sections === void 0) {
9760
+ function applySections(presentation, sections2, lookup, remap) {
9761
+ if (sections2 === void 0) {
9762
9762
  return;
9763
9763
  }
9764
9764
  let location = findSectionList(presentation, lookup);
9765
- if (sections.length === 0) {
9765
+ if (sections2.length === 0) {
9766
9766
  if (location) {
9767
9767
  delete location.parent[location.key];
9768
9768
  }
@@ -9779,14 +9779,14 @@ function applySections(presentation, sections, lookup, remap) {
9779
9779
  location = { parent: ext, key: "p14:sectionLst", list: ext["p14:sectionLst"] };
9780
9780
  }
9781
9781
  const list = cloneXmlObject(location.list) ?? {};
9782
- const effectiveSections = remap && remap.changed ? sections.map((section) => ({
9782
+ const effectiveSections = remap && remap.changed ? sections2.map((section) => ({
9783
9783
  ...section,
9784
9784
  slideIds: remapReferenceList(
9785
9785
  section.slideIds,
9786
9786
  remap.sldIdByOldSldId,
9787
9787
  remap.removedSldIds
9788
9788
  )
9789
- })) : sections;
9789
+ })) : sections2;
9790
9790
  replaceChildren(list, "section", effectiveSections.map(updateSection), "p14:section");
9791
9791
  location.parent[location.key] = list;
9792
9792
  }
@@ -13830,10 +13830,11 @@ var PptxShapeStyleExtractor = class {
13830
13830
  this.context.resolveThemeFillRef(styleNode["a:fillRef"], style);
13831
13831
  }
13832
13832
  const lineNode = shapeProps["a:ln"];
13833
+ if (styleNode?.["a:lnRef"]) {
13834
+ this.context.resolveThemeLineRef(styleNode["a:lnRef"], style);
13835
+ }
13833
13836
  if (lineNode) {
13834
13837
  applyLineProperties(lineNode, style, this.context);
13835
- } else if (styleNode?.["a:lnRef"]) {
13836
- this.context.resolveThemeLineRef(styleNode["a:lnRef"], style);
13837
13838
  }
13838
13839
  Object.assign(style, this.context.extractShadowStyle(shapeProps));
13839
13840
  Object.assign(style, this.context.extractInnerShadowStyle(shapeProps));
@@ -15159,7 +15160,10 @@ var PptxConnectorParser = class {
15159
15160
  const skewY = transform["@_skewY"] ? parseInt(String(transform["@_skewY"]), 10) / 6e4 : void 0;
15160
15161
  const { flipHorizontal, flipVertical } = this.context.readFlipState(transform);
15161
15162
  const cNvConnectionShapeProperties = connector2?.["p:nvCxnSpPr"]?.["p:cNvCxnSpPr"];
15162
- const shapeStyle = this.context.extractShapeStyle(shapeProperties);
15163
+ const shapeStyle = this.context.extractShapeStyle(
15164
+ shapeProperties,
15165
+ connector2["p:style"]
15166
+ );
15163
15167
  const startConnectionNode = cNvConnectionShapeProperties?.["a:stCxn"];
15164
15168
  if (startConnectionNode) {
15165
15169
  const startConnection = {};
@@ -15309,8 +15313,8 @@ var PptxLoadDataBuilder = class {
15309
15313
  this.customShows = customShows;
15310
15314
  return this;
15311
15315
  }
15312
- withSections(sections) {
15313
- this.sections = sections;
15316
+ withSections(sections2) {
15317
+ this.sections = sections2;
15314
15318
  return this;
15315
15319
  }
15316
15320
  withWarnings(warnings) {
@@ -18972,7 +18976,7 @@ function remapEditorAnimationsToShapeIds(elements2, animations, reservedMaxId =
18972
18976
  byId.set(el.id, el);
18973
18977
  }
18974
18978
  let nextId2 = Math.max(maxShapeId(flat), reservedMaxId) + 1;
18975
- const resolve = (elementId) => {
18979
+ const resolve2 = (elementId) => {
18976
18980
  const el = byId.get(elementId);
18977
18981
  if (!el) {
18978
18982
  return void 0;
@@ -18984,8 +18988,8 @@ function remapEditorAnimationsToShapeIds(elements2, animations, reservedMaxId =
18984
18988
  return el.shapeId;
18985
18989
  };
18986
18990
  return animations.map((anim) => {
18987
- const resolvedElement = resolve(anim.elementId);
18988
- const resolvedTrigger = anim.triggerShapeId !== void 0 ? resolve(anim.triggerShapeId) : void 0;
18991
+ const resolvedElement = resolve2(anim.elementId);
18992
+ const resolvedTrigger = anim.triggerShapeId !== void 0 ? resolve2(anim.triggerShapeId) : void 0;
18989
18993
  if (resolvedElement === void 0 && resolvedTrigger === void 0) {
18990
18994
  return anim;
18991
18995
  }
@@ -19987,7 +19991,7 @@ var PptxNativeAnimationService = class {
19987
19991
  * parent node. See `animation-group-context` for why the flat list
19988
19992
  * needs it.
19989
19993
  */
19990
- walkTimingTree(node, animations, currentTrigger, group = createGroupContext()) {
19994
+ walkTimingTree(node, animations, currentTrigger, group2 = createGroupContext()) {
19991
19995
  if (!node) {
19992
19996
  return;
19993
19997
  }
@@ -20086,8 +20090,8 @@ var PptxNativeAnimationService = class {
20086
20090
  textTarget: textTarget ?? void 0,
20087
20091
  cTnAttributes: roundTripAttrs,
20088
20092
  afterEffect: afterEffectFlag,
20089
- groupAutoStart: group.groupAutoStart,
20090
- parGroupIndex: group.parGroupIndex
20093
+ groupAutoStart: group2.groupAutoStart,
20094
+ parGroupIndex: group2.parGroupIndex
20091
20095
  });
20092
20096
  }
20093
20097
  const childTnList = cTn["p:childTnLst"];
@@ -20101,7 +20105,7 @@ var PptxNativeAnimationService = class {
20101
20105
  parallel,
20102
20106
  animations,
20103
20107
  trigger,
20104
- childGroupContext(group, parallel["p:cTn"], {
20108
+ childGroupContext(group2, parallel["p:cTn"], {
20105
20109
  isClickLevelGroup: isClickLevel
20106
20110
  })
20107
20111
  );
@@ -20110,11 +20114,11 @@ var PptxNativeAnimationService = class {
20110
20114
  if (isInteractiveSequence(sequence)) {
20111
20115
  continue;
20112
20116
  }
20113
- this.walkTimingTree(sequence, animations, trigger, group);
20117
+ this.walkTimingTree(sequence, animations, trigger, group2);
20114
20118
  }
20115
20119
  for (const excl of exclusives) {
20116
20120
  const exclAnims = [];
20117
- this.walkTimingTree(excl, exclAnims, trigger, group);
20121
+ this.walkTimingTree(excl, exclAnims, trigger, group2);
20118
20122
  for (const a of exclAnims) {
20119
20123
  a.exclusive = true;
20120
20124
  animations.push(a);
@@ -20129,7 +20133,7 @@ var PptxNativeAnimationService = class {
20129
20133
  parallel,
20130
20134
  animations,
20131
20135
  currentTrigger,
20132
- childGroupContext(group, parallel["p:cTn"], {
20136
+ childGroupContext(group2, parallel["p:cTn"], {
20133
20137
  isClickLevelGroup: false
20134
20138
  })
20135
20139
  );
@@ -20138,7 +20142,7 @@ var PptxNativeAnimationService = class {
20138
20142
  if (isInteractiveSequence(sequence)) {
20139
20143
  continue;
20140
20144
  }
20141
- this.walkTimingTree(sequence, animations, currentTrigger, group);
20145
+ this.walkTimingTree(sequence, animations, currentTrigger, group2);
20142
20146
  }
20143
20147
  }
20144
20148
  /**
@@ -22041,7 +22045,7 @@ var PptxAnimationWriteService = class {
22041
22045
  if (currentGroup.length > 0) {
22042
22046
  clickGroups.push(currentGroup);
22043
22047
  }
22044
- const nodes = clickGroups.map((group) => {
22048
+ const nodes = clickGroups.map((group2) => {
22045
22049
  const groupId = this.allocateId();
22046
22050
  return {
22047
22051
  "p:cTn": {
@@ -22053,7 +22057,7 @@ var PptxAnimationWriteService = class {
22053
22057
  }
22054
22058
  },
22055
22059
  "p:childTnLst": {
22056
- "p:par": group.length === 1 ? group[0] : group
22060
+ "p:par": group2.length === 1 ? group2[0] : group2
22057
22061
  }
22058
22062
  }
22059
22063
  };
@@ -23844,17 +23848,20 @@ var stripedRightArrow = {
23844
23848
  name: "stripedRightArrow",
23845
23849
  avLst: { adj1: 5e4, adj2: 5e4 },
23846
23850
  gdLst: [
23851
+ // Head length runs off `ss`, the short side, not `w`. See the note on
23852
+ // `rightArrow` in `preset-shape-definitions-table.ts`.
23853
+ gd3("maxAdj2", "*/ 84375 w ss"),
23847
23854
  gd3("a1", "pin 0 adj1 100000"),
23848
- gd3("a2", "pin 0 adj2 100000"),
23855
+ gd3("a2", "pin 0 adj2 maxAdj2"),
23849
23856
  gd3("y1", "*/ hd2 a1 100000"),
23850
23857
  gd3("y2", "+- vc 0 y1"),
23851
23858
  gd3("y3", "+- vc y1 0"),
23852
23859
  gd3("x2", "*/ ss 1 32"),
23853
23860
  gd3("x3", "*/ ss 2 32"),
23854
23861
  gd3("x4", "*/ ss 5 32"),
23855
- gd3("x5", "*/ w a2 100000"),
23862
+ gd3("x5", "*/ ss a2 100000"),
23856
23863
  gd3("x6", "+- r 0 x5"),
23857
- gd3("dx", "*/ hd2 x5 wd2"),
23864
+ gd3("dx", "*/ y1 x5 hd2"),
23858
23865
  gd3("x7", "+- x6 dx 0")
23859
23866
  ],
23860
23867
  rect: { l: "x4", t: "y2", r: "x7", b: "y3" },
@@ -23889,14 +23896,17 @@ var notchedRightArrow = {
23889
23896
  name: "notchedRightArrow",
23890
23897
  avLst: { adj1: 5e4, adj2: 5e4 },
23891
23898
  gdLst: [
23899
+ // Head length runs off `ss`, the short side, not `w`. See the note on
23900
+ // `rightArrow` in `preset-shape-definitions-table.ts`.
23901
+ gd3("maxAdj2", "*/ 100000 w ss"),
23892
23902
  gd3("a1", "pin 0 adj1 100000"),
23893
- gd3("a2", "pin 0 adj2 100000"),
23903
+ gd3("a2", "pin 0 adj2 maxAdj2"),
23894
23904
  gd3("y1", "*/ hd2 a1 100000"),
23895
23905
  gd3("y2", "+- vc 0 y1"),
23896
23906
  gd3("y3", "+- vc y1 0"),
23897
- gd3("x2", "*/ w a2 100000"),
23907
+ gd3("x2", "*/ ss a2 100000"),
23898
23908
  gd3("x1", "+- r 0 x2"),
23899
- gd3("dx2", "*/ hd2 x2 wd2"),
23909
+ gd3("dx2", "*/ y1 x2 hd2"),
23900
23910
  gd3("x3", "+- x1 dx2 0"),
23901
23911
  gd3("nx", "*/ y1 1 1")
23902
23912
  ],
@@ -23920,7 +23930,12 @@ var notchedRightArrow = {
23920
23930
  var homePlate = {
23921
23931
  name: "homePlate",
23922
23932
  avLst: { adj: 5e4 },
23923
- gdLst: [gd3("a", "pin 0 adj 100000"), gd3("x1", "*/ w a 100000")],
23933
+ gdLst: [
23934
+ gd3("maxAdj", "*/ 100000 w ss"),
23935
+ gd3("a", "pin 0 adj maxAdj"),
23936
+ gd3("dx1", "*/ ss a 100000"),
23937
+ gd3("x1", "+- r 0 dx1")
23938
+ ],
23924
23939
  rect: { l: "l", t: "t", r: "x1", b: "b" },
23925
23940
  pathLst: [
23926
23941
  {
@@ -23938,8 +23953,13 @@ var homePlate = {
23938
23953
  var chevron = {
23939
23954
  name: "chevron",
23940
23955
  avLst: { adj: 5e4 },
23941
- gdLst: [gd3("a", "pin 0 adj 100000"), gd3("x1", "*/ w a 100000"), gd3("x2", "+- r 0 x1")],
23942
- rect: { l: "l", t: "t", r: "x2", b: "b" },
23956
+ gdLst: [
23957
+ gd3("maxAdj", "*/ 100000 w ss"),
23958
+ gd3("a", "pin 0 adj maxAdj"),
23959
+ gd3("x1", "*/ ss a 100000"),
23960
+ gd3("x2", "+- r 0 x1")
23961
+ ],
23962
+ rect: { l: "x1", t: "t", r: "x2", b: "b" },
23943
23963
  pathLst: [
23944
23964
  {
23945
23965
  commands: [
@@ -29025,27 +29045,28 @@ var rightArrow = {
29025
29045
  name: "rightArrow",
29026
29046
  avLst: { adj1: 5e4, adj2: 5e4 },
29027
29047
  gdLst: [
29048
+ gd13("maxAdj2", "*/ 100000 w ss"),
29028
29049
  gd13("a1", "pin 0 adj1 100000"),
29029
- gd13("a2", "pin 0 adj2 100000"),
29030
- gd13("y1", "*/ hd2 a1 100000"),
29031
- gd13("y2", "+- vc 0 y1"),
29032
- gd13("y3", "+- vc y1 0"),
29033
- gd13("x2", "*/ w a2 100000"),
29034
- gd13("x1", "+- r 0 x2"),
29035
- gd13("dx2", "*/ hd2 x2 wd2"),
29036
- gd13("x3", "+- x1 dx2 0")
29050
+ gd13("a2", "pin 0 adj2 maxAdj2"),
29051
+ gd13("dx1", "*/ ss a2 100000"),
29052
+ gd13("x1", "+- r 0 dx1"),
29053
+ gd13("dy1", "*/ h a1 200000"),
29054
+ gd13("y1", "+- vc 0 dy1"),
29055
+ gd13("y2", "+- vc dy1 0"),
29056
+ gd13("dx2", "*/ y1 dx1 hd2"),
29057
+ gd13("x2", "+- x1 dx2 0")
29037
29058
  ],
29038
- rect: { l: "l", t: "y2", r: "x3", b: "y3" },
29059
+ rect: { l: "l", t: "y1", r: "x2", b: "y2" },
29039
29060
  pathLst: [
29040
29061
  {
29041
29062
  commands: [
29042
- { kind: "moveTo", x: "l", y: "y2" },
29043
- { kind: "lnTo", x: "x1", y: "y2" },
29063
+ { kind: "moveTo", x: "l", y: "y1" },
29064
+ { kind: "lnTo", x: "x1", y: "y1" },
29044
29065
  { kind: "lnTo", x: "x1", y: "t" },
29045
29066
  { kind: "lnTo", x: "r", y: "vc" },
29046
29067
  { kind: "lnTo", x: "x1", y: "b" },
29047
- { kind: "lnTo", x: "x1", y: "y3" },
29048
- { kind: "lnTo", x: "l", y: "y3" },
29068
+ { kind: "lnTo", x: "x1", y: "y2" },
29069
+ { kind: "lnTo", x: "l", y: "y2" },
29049
29070
  { kind: "close" }
29050
29071
  ]
29051
29072
  }
@@ -29055,26 +29076,28 @@ var leftArrow = {
29055
29076
  name: "leftArrow",
29056
29077
  avLst: { adj1: 5e4, adj2: 5e4 },
29057
29078
  gdLst: [
29079
+ gd13("maxAdj2", "*/ 100000 w ss"),
29058
29080
  gd13("a1", "pin 0 adj1 100000"),
29059
- gd13("a2", "pin 0 adj2 100000"),
29060
- gd13("y1", "*/ hd2 a1 100000"),
29061
- gd13("y2", "+- vc 0 y1"),
29062
- gd13("y3", "+- vc y1 0"),
29063
- gd13("x1", "*/ w a2 100000"),
29064
- gd13("dx2", "*/ hd2 x1 wd2"),
29065
- gd13("x2", "+- l dx2 0")
29081
+ gd13("a2", "pin 0 adj2 maxAdj2"),
29082
+ gd13("dx2", "*/ ss a2 100000"),
29083
+ gd13("x2", "+- l dx2 0"),
29084
+ gd13("dy1", "*/ h a1 200000"),
29085
+ gd13("y1", "+- vc 0 dy1"),
29086
+ gd13("y2", "+- vc dy1 0"),
29087
+ gd13("dx1", "*/ y1 dx2 hd2"),
29088
+ gd13("x1", "+- dx2 0 dx1")
29066
29089
  ],
29067
- rect: { l: "x2", t: "y2", r: "r", b: "y3" },
29090
+ rect: { l: "x1", t: "y1", r: "r", b: "y2" },
29068
29091
  pathLst: [
29069
29092
  {
29070
29093
  commands: [
29071
29094
  { kind: "moveTo", x: "l", y: "vc" },
29072
- { kind: "lnTo", x: "x1", y: "t" },
29073
- { kind: "lnTo", x: "x1", y: "y2" },
29095
+ { kind: "lnTo", x: "x2", y: "t" },
29096
+ { kind: "lnTo", x: "x2", y: "y1" },
29097
+ { kind: "lnTo", x: "r", y: "y1" },
29074
29098
  { kind: "lnTo", x: "r", y: "y2" },
29075
- { kind: "lnTo", x: "r", y: "y3" },
29076
- { kind: "lnTo", x: "x1", y: "y3" },
29077
- { kind: "lnTo", x: "x1", y: "b" },
29099
+ { kind: "lnTo", x: "x2", y: "y2" },
29100
+ { kind: "lnTo", x: "x2", y: "b" },
29078
29101
  { kind: "close" }
29079
29102
  ]
29080
29103
  }
@@ -29084,26 +29107,28 @@ var upArrow = {
29084
29107
  name: "upArrow",
29085
29108
  avLst: { adj1: 5e4, adj2: 5e4 },
29086
29109
  gdLst: [
29110
+ gd13("maxAdj2", "*/ 100000 h ss"),
29087
29111
  gd13("a1", "pin 0 adj1 100000"),
29088
- gd13("a2", "pin 0 adj2 100000"),
29089
- gd13("x1", "*/ wd2 a1 100000"),
29090
- gd13("x2", "+- hc 0 x1"),
29091
- gd13("x3", "+- hc x1 0"),
29092
- gd13("y2", "*/ h a2 100000"),
29093
- gd13("dy2", "*/ wd2 y2 hd2"),
29094
- gd13("y1", "+- t dy2 0")
29112
+ gd13("a2", "pin 0 adj2 maxAdj2"),
29113
+ gd13("dy2", "*/ ss a2 100000"),
29114
+ gd13("y2", "+- t dy2 0"),
29115
+ gd13("dx1", "*/ w a1 200000"),
29116
+ gd13("x1", "+- hc 0 dx1"),
29117
+ gd13("x2", "+- hc dx1 0"),
29118
+ gd13("dy1", "*/ x1 dy2 wd2"),
29119
+ gd13("y1", "+- y2 0 dy1")
29095
29120
  ],
29096
- rect: { l: "x2", t: "y1", r: "x3", b: "b" },
29121
+ rect: { l: "x1", t: "y1", r: "x2", b: "b" },
29097
29122
  pathLst: [
29098
29123
  {
29099
29124
  commands: [
29100
- { kind: "moveTo", x: "hc", y: "t" },
29125
+ { kind: "moveTo", x: "l", y: "y2" },
29126
+ { kind: "lnTo", x: "hc", y: "t" },
29101
29127
  { kind: "lnTo", x: "r", y: "y2" },
29102
- { kind: "lnTo", x: "x3", y: "y2" },
29103
- { kind: "lnTo", x: "x3", y: "b" },
29104
- { kind: "lnTo", x: "x2", y: "b" },
29105
29128
  { kind: "lnTo", x: "x2", y: "y2" },
29106
- { kind: "lnTo", x: "l", y: "y2" },
29129
+ { kind: "lnTo", x: "x2", y: "b" },
29130
+ { kind: "lnTo", x: "x1", y: "b" },
29131
+ { kind: "lnTo", x: "x1", y: "y2" },
29107
29132
  { kind: "close" }
29108
29133
  ]
29109
29134
  }
@@ -29113,26 +29138,27 @@ var downArrow = {
29113
29138
  name: "downArrow",
29114
29139
  avLst: { adj1: 5e4, adj2: 5e4 },
29115
29140
  gdLst: [
29141
+ gd13("maxAdj2", "*/ 100000 h ss"),
29116
29142
  gd13("a1", "pin 0 adj1 100000"),
29117
- gd13("a2", "pin 0 adj2 100000"),
29118
- gd13("x1", "*/ wd2 a1 100000"),
29119
- gd13("x2", "+- hc 0 x1"),
29120
- gd13("x3", "+- hc x1 0"),
29121
- gd13("y1", "*/ h a2 100000"),
29122
- gd13("y2", "+- b 0 y1"),
29123
- gd13("dy2", "*/ wd2 y1 hd2"),
29124
- gd13("y3", "+- b 0 dy2")
29143
+ gd13("a2", "pin 0 adj2 maxAdj2"),
29144
+ gd13("dy1", "*/ ss a2 100000"),
29145
+ gd13("y1", "+- b 0 dy1"),
29146
+ gd13("dx1", "*/ w a1 200000"),
29147
+ gd13("x1", "+- hc 0 dx1"),
29148
+ gd13("x2", "+- hc dx1 0"),
29149
+ gd13("dy2", "*/ x1 dy1 wd2"),
29150
+ gd13("y2", "+- b 0 dy2")
29125
29151
  ],
29126
- rect: { l: "x2", t: "t", r: "x3", b: "y3" },
29152
+ rect: { l: "x1", t: "t", r: "x2", b: "y2" },
29127
29153
  pathLst: [
29128
29154
  {
29129
29155
  commands: [
29130
- { kind: "moveTo", x: "l", y: "y2" },
29131
- { kind: "lnTo", x: "x2", y: "y2" },
29156
+ { kind: "moveTo", x: "l", y: "y1" },
29157
+ { kind: "lnTo", x: "x1", y: "y1" },
29158
+ { kind: "lnTo", x: "x1", y: "t" },
29132
29159
  { kind: "lnTo", x: "x2", y: "t" },
29133
- { kind: "lnTo", x: "x3", y: "t" },
29134
- { kind: "lnTo", x: "x3", y: "y2" },
29135
- { kind: "lnTo", x: "r", y: "y2" },
29160
+ { kind: "lnTo", x: "x2", y: "y1" },
29161
+ { kind: "lnTo", x: "r", y: "y1" },
29136
29162
  { kind: "lnTo", x: "hc", y: "b" },
29137
29163
  { kind: "close" }
29138
29164
  ]
@@ -32312,8 +32338,8 @@ function extractSectionMap(presentationData, lookup) {
32312
32338
  const orderedSections = [];
32313
32339
  const presentation = presentationData ? lookup.getChildByLocalName(presentationData, "presentation") : void 0;
32314
32340
  const sectionList = findSectionList2(presentation, lookup);
32315
- const sections = lookup.getChildrenArrayByLocalName(sectionList, "section");
32316
- sections.forEach((section, index) => {
32341
+ const sections2 = lookup.getChildrenArrayByLocalName(sectionList, "section");
32342
+ sections2.forEach((section, index) => {
32317
32343
  const sectionId = String(section["@_id"] || `section-${index + 1}`);
32318
32344
  const rawName = String(section["@_name"] || "").trim();
32319
32345
  const sectionName = rawName || `Section ${index + 1}`;
@@ -32788,8 +32814,8 @@ function scalar(parent, name, xmlLookup) {
32788
32814
  return node?.["#text"] === void 0 ? void 0 : String(node["#text"]);
32789
32815
  }
32790
32816
  function parseSeriesDataLabels(seriesNode, xmlLookup) {
32791
- const group = xmlLookup.getChildByLocalName(seriesNode, "dLbls");
32792
- const nodes = group ? xmlLookup.getChildrenArrayByLocalName(group, "dLbl") : xmlLookup.getChildrenArrayByLocalName(seriesNode, "dLbl");
32817
+ const group2 = xmlLookup.getChildByLocalName(seriesNode, "dLbls");
32818
+ const nodes = group2 ? xmlLookup.getChildrenArrayByLocalName(group2, "dLbl") : xmlLookup.getChildrenArrayByLocalName(seriesNode, "dLbl");
32793
32819
  return nodes.flatMap((node) => {
32794
32820
  const idx = uint32(xmlLookup.getChildByLocalName(node, "idx")?.["@_val"]);
32795
32821
  if (idx === void 0) {
@@ -32834,7 +32860,7 @@ function parseSeriesDataLabels(seriesNode, xmlLookup) {
32834
32860
  return [result];
32835
32861
  });
32836
32862
  }
32837
- function parseChartDataLabelOptions(group, xmlLookup) {
32863
+ function parseChartDataLabelOptions(group2, xmlLookup) {
32838
32864
  const result = {};
32839
32865
  const fields = [
32840
32866
  ["showVal", "showValue"],
@@ -32846,16 +32872,16 @@ function parseChartDataLabelOptions(group, xmlLookup) {
32846
32872
  ["showLeaderLines", "showLeaderLines"]
32847
32873
  ];
32848
32874
  for (const [xmlName, property] of fields) {
32849
- const value = bool(xmlLookup.getChildByLocalName(group, xmlName));
32875
+ const value = bool(xmlLookup.getChildByLocalName(group2, xmlName));
32850
32876
  if (value !== void 0) {
32851
32877
  result[property] = value;
32852
32878
  }
32853
32879
  }
32854
- const pos2 = position(xmlLookup.getChildByLocalName(group, "dLblPos"));
32880
+ const pos2 = position(xmlLookup.getChildByLocalName(group2, "dLblPos"));
32855
32881
  if (pos2) {
32856
32882
  result.position = pos2;
32857
32883
  }
32858
- const separator = scalar(group, "separator", xmlLookup);
32884
+ const separator = scalar(group2, "separator", xmlLookup);
32859
32885
  if (separator !== void 0) {
32860
32886
  result.separator = separator;
32861
32887
  }
@@ -38175,12 +38201,12 @@ function layoutGroupedList(nodes, bounds, themeColorMap) {
38175
38201
  const usableW = bounds.width - padding * 2;
38176
38202
  const groupW = (usableW - gap * (groups.length - 1)) / groups.length;
38177
38203
  const usableH = bounds.height - padding * 2;
38178
- groups.forEach((group, gi) => {
38204
+ groups.forEach((group2, gi) => {
38179
38205
  const fill = accentColor(gi, themeColorMap);
38180
38206
  const gx = bounds.x + padding + gi * (groupW + gap);
38181
38207
  const headerH = usableH * 0.2;
38182
38208
  const subItemGap = 3;
38183
- const subItemH = (usableH - headerH - 4 - subItemGap * (group.length - 1)) / group.length;
38209
+ const subItemH = (usableH - headerH - 4 - subItemGap * (group2.length - 1)) / group2.length;
38184
38210
  elements2.push(
38185
38211
  makeShapeElement(
38186
38212
  nextId("sa-grp-header"),
@@ -38198,7 +38224,7 @@ function layoutGroupedList(nodes, bounds, themeColorMap) {
38198
38224
  }
38199
38225
  )
38200
38226
  );
38201
- group.forEach((node, si) => {
38227
+ group2.forEach((node, si) => {
38202
38228
  const sy = bounds.y + padding + headerH + 4 + si * (subItemH + subItemGap);
38203
38229
  elements2.push(
38204
38230
  makeShapeElement(
@@ -41479,6 +41505,23 @@ var GENERIC_FAMILY_CONCRETE_FONTS = {
41479
41505
  cursive: ["Comic Sans MS", "cursive"],
41480
41506
  fantasy: ["Impact", "fantasy"]
41481
41507
  };
41508
+ function parsePanoseString(panoseStr) {
41509
+ if (!panoseStr) {
41510
+ return void 0;
41511
+ }
41512
+ const cleaned = panoseStr.trim();
41513
+ if (cleaned.length !== 20) {
41514
+ return void 0;
41515
+ }
41516
+ if (!/^[0-9a-fA-F]{20}$/.test(cleaned)) {
41517
+ return void 0;
41518
+ }
41519
+ const bytes = [];
41520
+ for (let i = 0; i < 20; i += 2) {
41521
+ bytes.push(parseInt(cleaned.substring(i, i + 2), 16));
41522
+ }
41523
+ return bytes;
41524
+ }
41482
41525
  function classifyPanose(panose) {
41483
41526
  if (!panose || panose.length < 4) {
41484
41527
  return "sans-serif";
@@ -49646,6 +49689,29 @@ var PptxHandlerRuntime10 = class extends PptxHandlerRuntime9 {
49646
49689
  return void 0;
49647
49690
  }
49648
49691
  }
49692
+ /**
49693
+ * Resolve the `c:spPr` fill of a chart container (`c:chartSpace` or
49694
+ * `c:plotArea`) to a colour string, or the literal `'none'` for
49695
+ * `<a:noFill/>`. Returns `undefined` when the container declares no fill at
49696
+ * all, which leaves the choice to the renderer.
49697
+ *
49698
+ * `<a:noFill/>` parses to the empty STRING, so presence - not truthiness -
49699
+ * has to decide.
49700
+ */
49701
+ parseChartContainerFill(container) {
49702
+ const shapeProperties = this.xmlLookupService.getChildByLocalName(container, "spPr");
49703
+ if (!shapeProperties) {
49704
+ return void 0;
49705
+ }
49706
+ const hasNoFill = Object.keys(shapeProperties).some(
49707
+ (key) => this.compatibilityService.getXmlLocalName(key) === "noFill"
49708
+ );
49709
+ if (hasNoFill) {
49710
+ return "none";
49711
+ }
49712
+ const solidFill2 = this.xmlLookupService.getChildByLocalName(shapeProperties, "solidFill");
49713
+ return solidFill2 ? this.parseColor(solidFill2) : void 0;
49714
+ }
49649
49715
  /**
49650
49716
  * Extract chart style metadata from chart XML.
49651
49717
  */
@@ -49660,6 +49726,11 @@ var PptxHandlerRuntime10 = class extends PptxHandlerRuntime9 {
49660
49726
  style.styleId = parseInt(String(styleNode["@_val"]));
49661
49727
  hasStyle = true;
49662
49728
  }
49729
+ const chartAreaFill2 = this.parseChartContainerFill(chartSpace);
49730
+ if (chartAreaFill2) {
49731
+ style.chartAreaFill = chartAreaFill2;
49732
+ hasStyle = true;
49733
+ }
49663
49734
  if (chartRoot) {
49664
49735
  const legend = this.xmlLookupService.getChildByLocalName(chartRoot, "legend");
49665
49736
  if (legend) {
@@ -49685,6 +49756,11 @@ var PptxHandlerRuntime10 = class extends PptxHandlerRuntime9 {
49685
49756
  }
49686
49757
  const plotArea = this.xmlLookupService.getChildByLocalName(chartRoot, "plotArea");
49687
49758
  if (plotArea) {
49759
+ const plotAreaFill2 = this.parseChartContainerFill(plotArea);
49760
+ if (plotAreaFill2) {
49761
+ style.plotAreaFill = plotAreaFill2;
49762
+ hasStyle = true;
49763
+ }
49688
49764
  const valAx = this.xmlLookupService.getChildByLocalName(plotArea, "valAx");
49689
49765
  if (valAx) {
49690
49766
  const majorGridlines = this.xmlLookupService.getChildByLocalName(valAx, "majorGridlines");
@@ -51018,32 +51094,32 @@ var PptxHandlerRuntime15 = class _PptxHandlerRuntime3 extends PptxHandlerRuntime
51018
51094
  * Build a p:grpSp XML object from a GroupPptxElement.
51019
51095
  * Children are stored with coordinates relative to the group origin.
51020
51096
  */
51021
- buildGroupShapeXml(group) {
51022
- if (group.rawXml && group.children.length === 0) {
51023
- return group.rawXml;
51097
+ buildGroupShapeXml(group2) {
51098
+ if (group2.rawXml && group2.children.length === 0) {
51099
+ return group2.rawXml;
51024
51100
  }
51025
51101
  const EMU = _PptxHandlerRuntime3.EMU_PER_PX;
51026
- const offX = Math.round(group.x * EMU);
51027
- const offY = Math.round(group.y * EMU);
51028
- const extCx = Math.round(group.width * EMU);
51029
- const extCy = Math.round(group.height * EMU);
51102
+ const offX = Math.round(group2.x * EMU);
51103
+ const offY = Math.round(group2.y * EMU);
51104
+ const extCx = Math.round(group2.width * EMU);
51105
+ const extCy = Math.round(group2.height * EMU);
51030
51106
  const chOffX = 0;
51031
51107
  const chOffY = 0;
51032
51108
  const chExtCx = extCx;
51033
51109
  const chExtCy = extCy;
51034
51110
  const xfrmAttrs = {};
51035
- if (typeof group.rotation === "number" && group.rotation !== 0) {
51036
- xfrmAttrs["@_rot"] = String(Math.round(group.rotation * 6e4));
51111
+ if (typeof group2.rotation === "number" && group2.rotation !== 0) {
51112
+ xfrmAttrs["@_rot"] = String(Math.round(group2.rotation * 6e4));
51037
51113
  }
51038
- if (group.flipHorizontal) {
51114
+ if (group2.flipHorizontal) {
51039
51115
  xfrmAttrs["@_flipH"] = "1";
51040
51116
  }
51041
- if (group.flipVertical) {
51117
+ if (group2.flipVertical) {
51042
51118
  xfrmAttrs["@_flipV"] = "1";
51043
51119
  }
51044
51120
  const grpXml = {
51045
51121
  "p:nvGrpSpPr": {
51046
- "p:cNvPr": { "@_id": "0", "@_name": group.id },
51122
+ "p:cNvPr": { "@_id": "0", "@_name": group2.id },
51047
51123
  "p:cNvGrpSpPr": {},
51048
51124
  "p:nvPr": {}
51049
51125
  },
@@ -51072,7 +51148,7 @@ var PptxHandlerRuntime15 = class _PptxHandlerRuntime3 extends PptxHandlerRuntime
51072
51148
  const childShapes = [];
51073
51149
  const childPics = [];
51074
51150
  const childConnectors = [];
51075
- for (const child202 of group.children) {
51151
+ for (const child202 of group2.children) {
51076
51152
  let xml = child202.rawXml;
51077
51153
  if (!xml && (child202.type === "text" || child202.type === "shape")) {
51078
51154
  xml = this.createElementXml(child202);
@@ -58594,12 +58670,12 @@ var PptxHandlerRuntime37 = class _PptxHandlerRuntime13 extends PptxHandlerRuntim
58594
58670
  updateSummaryFallback(shape, el, targets, relationships) {
58595
58671
  const block = this.alternateContentBlockByRawXml.get(shape);
58596
58672
  const fallback = block?.rawAc["mc:Fallback"];
58597
- const group = fallback?.["p:grpSp"];
58598
- if (!group) {
58673
+ const group2 = fallback?.["p:grpSp"];
58674
+ if (!group2) {
58599
58675
  return;
58600
58676
  }
58601
- const existing = this.ensureArray(group["p:pic"]);
58602
- group["p:pic"] = targets.map((target, index) => {
58677
+ const existing = this.ensureArray(group2["p:pic"]);
58678
+ group2["p:pic"] = targets.map((target, index) => {
58603
58679
  const tile = this.summaryTileElement(el, target, index);
58604
58680
  const picture = existing[index] ?? this.buildZoomFallbackPicture(tile, relationships[index]);
58605
58681
  this.applyZoomTransform(picture["p:spPr"] ??= {}, tile);
@@ -59985,7 +60061,7 @@ var PptxHandlerRuntime42 = class extends PptxHandlerRuntime41 {
59985
60061
  */
59986
60062
  buildFontSchemeObject(schemeName, fontMap, majorScripts, minorScripts) {
59987
60063
  const buildFontGroup = (latinKey, eaKey, csKey, scripts) => {
59988
- const group = {
60064
+ const group2 = {
59989
60065
  "a:latin": { "@_typeface": fontMap[latinKey] || "Calibri" },
59990
60066
  "a:ea": { "@_typeface": fontMap[eaKey] || "" },
59991
60067
  "a:cs": { "@_typeface": fontMap[csKey] || "" }
@@ -59996,9 +60072,9 @@ var PptxHandlerRuntime42 = class extends PptxHandlerRuntime41 {
59996
60072
  "@_script": script,
59997
60073
  "@_typeface": scripts[script]
59998
60074
  }));
59999
- group["a:font"] = fontEntries.length === 1 ? fontEntries[0] : fontEntries;
60075
+ group2["a:font"] = fontEntries.length === 1 ? fontEntries[0] : fontEntries;
60000
60076
  }
60001
- return group;
60077
+ return group2;
60002
60078
  };
60003
60079
  return {
60004
60080
  "@_name": schemeName,
@@ -64631,7 +64707,7 @@ function parseEmuInt2(value) {
64631
64707
  return parsed;
64632
64708
  }
64633
64709
  var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntime66 {
64634
- async parseGroupShape(group, baseId, slidePath, rawXmlStr, depth = 0) {
64710
+ async parseGroupShape(group2, baseId, slidePath, rawXmlStr, depth = 0) {
64635
64711
  if (depth > MAX_GROUP_DEPTH) {
64636
64712
  this.compatibilityService.reportWarning({
64637
64713
  code: "group-depth-exceeded",
@@ -64643,7 +64719,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64643
64719
  });
64644
64720
  return [];
64645
64721
  }
64646
- const grpSpPr = group["p:grpSpPr"];
64722
+ const grpSpPr = group2["p:grpSpPr"];
64647
64723
  const xfrm = grpSpPr?.["a:xfrm"];
64648
64724
  const EMU_PX = _PptxHandlerRuntime30.EMU_PER_PX;
64649
64725
  let parentX = 0, parentY = 0, parentW = 0, parentH = 0;
@@ -64708,16 +64784,16 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64708
64784
  }
64709
64785
  return el;
64710
64786
  };
64711
- this.unwrapAlternateContent(group);
64787
+ this.unwrapAlternateContent(group2);
64712
64788
  const childOrder3 = this.extractSpTreeChildOrder(
64713
64789
  void 0,
64714
- group,
64790
+ group2,
64715
64791
  "p:grpSp"
64716
64792
  );
64717
64793
  const elements2 = [];
64718
64794
  for (const entry2 of childOrder3) {
64719
64795
  if (entry2.tag === "p:grpSp") {
64720
- const subArr = this.ensureArray(group["p:grpSp"]);
64796
+ const subArr = this.ensureArray(group2["p:grpSp"]);
64721
64797
  const subGroup = subArr[entry2.indexInType];
64722
64798
  if (!subGroup) {
64723
64799
  continue;
@@ -64735,12 +64811,12 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64735
64811
  const element = await this.parseSpTreeChild(
64736
64812
  entry2.tag,
64737
64813
  entry2.indexInType,
64738
- group,
64814
+ group2,
64739
64815
  slidePath,
64740
64816
  `${baseId}-`
64741
64817
  );
64742
64818
  if (element) {
64743
- const childNode2 = this.ensureArray(group[entry2.tag])[entry2.indexInType];
64819
+ const childNode2 = this.ensureArray(group2[entry2.tag])[entry2.indexInType];
64744
64820
  applyRawChildGeometry(element, childNode2);
64745
64821
  transformElement(element);
64746
64822
  elements2.push(element);
@@ -64753,8 +64829,8 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64753
64829
  * Parse a p:grpSp element into a GroupPptxElement with children.
64754
64830
  * Children have coordinates relative to the group's position.
64755
64831
  */
64756
- async parseGroupShapeAsGroup(group, baseId, slidePath, rawXmlStr) {
64757
- const grpSpPr = group["p:grpSpPr"];
64832
+ async parseGroupShapeAsGroup(group2, baseId, slidePath, rawXmlStr) {
64833
+ const grpSpPr = group2["p:grpSpPr"];
64758
64834
  const xfrm = grpSpPr?.["a:xfrm"];
64759
64835
  let parentX = 0, parentY = 0, parentW = 0, parentH = 0;
64760
64836
  let groupRotation;
@@ -64780,7 +64856,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64780
64856
  }
64781
64857
  const grpFillStyle = grpSpPr ? this.extractShapeStyle(grpSpPr) : void 0;
64782
64858
  const hasGroupFill = grpFillStyle && grpFillStyle.fillMode && grpFillStyle.fillMode !== "none";
64783
- const children10 = await this.parseGroupShape(group, baseId, slidePath, rawXmlStr);
64859
+ const children10 = await this.parseGroupShape(group2, baseId, slidePath, rawXmlStr);
64784
64860
  if (children10.length === 0) {
64785
64861
  return null;
64786
64862
  }
@@ -64806,7 +64882,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64806
64882
  child202.x -= parentX;
64807
64883
  child202.y -= parentY;
64808
64884
  }
64809
- const grpCNvPr = group?.["p:nvGrpSpPr"]?.["p:cNvPr"];
64885
+ const grpCNvPr = group2?.["p:nvGrpSpPr"]?.["p:cNvPr"];
64810
64886
  const grpSlideRels = this.slideRelsMap.get(slidePath);
64811
64887
  const { actionClick: grpActionClick, actionHover: grpActionHover } = this.parseElementActions(
64812
64888
  grpCNvPr,
@@ -64826,7 +64902,7 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64826
64902
  flipHorizontal: flipHorizontal || void 0,
64827
64903
  flipVertical: flipVertical || void 0,
64828
64904
  children: children10,
64829
- rawXml: group,
64905
+ rawXml: group2,
64830
64906
  actionClick: grpActionClick,
64831
64907
  actionHover: grpActionHover,
64832
64908
  groupFill: hasGroupFill ? grpFillStyle : void 0
@@ -66293,12 +66369,12 @@ var PptxHandlerRuntime74 = class extends PptxHandlerRuntime73 {
66293
66369
  }
66294
66370
  } else if (entry2.tag === "p:grpSp") {
66295
66371
  const groups = this.ensureArray(spTree["p:grpSp"]);
66296
- const group = groups[entry2.indexInType];
66297
- if (!group) {
66372
+ const group2 = groups[entry2.indexInType];
66373
+ if (!group2) {
66298
66374
  continue;
66299
66375
  }
66300
66376
  const element = await this.parseGroupShapeAsGroup(
66301
- group,
66377
+ group2,
66302
66378
  `master-group-${masterToken}-${entry2.indexInType}`,
66303
66379
  masterPath
66304
66380
  );
@@ -66515,12 +66591,12 @@ var PptxHandlerRuntime76 = class extends PptxHandlerRuntime75 {
66515
66591
  }
66516
66592
  } else if (entry2.tag === "p:grpSp") {
66517
66593
  const groups = this.ensureArray(spTree["p:grpSp"]);
66518
- const group = groups[entry2.indexInType];
66519
- if (!group) {
66594
+ const group2 = groups[entry2.indexInType];
66595
+ if (!group2) {
66520
66596
  continue;
66521
66597
  }
66522
66598
  const element = await this.parseGroupShapeAsGroup(
66523
- group,
66599
+ group2,
66524
66600
  `layout-group-${layoutToken}-${entry2.indexInType}`,
66525
66601
  layoutPath
66526
66602
  );
@@ -68397,16 +68473,16 @@ function extractDrawingShapeTextStyle(txBody, deps) {
68397
68473
  }
68398
68474
  return { fontSize, fontColor };
68399
68475
  }
68400
- function resolveSmartArtTextStyles(paragraphs, resolve) {
68476
+ function resolveSmartArtTextStyles(paragraphs, resolve2) {
68401
68477
  for (const paragraph of paragraphs ?? []) {
68402
68478
  if (paragraph.endParaRPr) {
68403
- paragraph.endParaStyle = resolve(paragraph.endParaRPr);
68479
+ paragraph.endParaStyle = resolve2(paragraph.endParaRPr);
68404
68480
  }
68405
68481
  for (const item of paragraph.items) {
68406
68482
  if (item.kind === "run" && item.run.rPr) {
68407
- item.run.style = resolve(item.run.rPr);
68483
+ item.run.style = resolve2(item.run.rPr);
68408
68484
  } else if ((item.kind === "field" || item.kind === "break") && item.rPr) {
68409
- item.style = resolve(item.rPr);
68485
+ item.style = resolve2(item.rPr);
68410
68486
  }
68411
68487
  }
68412
68488
  }
@@ -69915,6 +69991,20 @@ var PptxHandlerRuntime90 = class extends PptxHandlerRuntime89 {
69915
69991
  const hasBlanks = expanded.some((value) => value === null);
69916
69992
  const values = hasBlanks ? expanded.map((value) => value ?? 0) : this.extractChartPointValues(valNode, true).map((value) => Number.parseFloat(value)).filter((value) => Number.isFinite(value));
69917
69993
  const blanks = hasBlanks ? expanded.map((value) => value === null) : void 0;
69994
+ const seriesNumberFormat = String(
69995
+ this.xmlLookupService.getChildByLocalName(
69996
+ this.xmlLookupService.getChildByLocalName(seriesNode, "dLbls"),
69997
+ "numFmt"
69998
+ )?.["@_formatCode"] ?? ""
69999
+ ).trim() || String(
70000
+ this.xmlLookupService.getScalarChildByLocalName(
70001
+ this.xmlLookupService.getChildByLocalName(
70002
+ this.xmlLookupService.getChildByLocalName(valNode, "numRef") ?? valNode,
70003
+ "numCache"
70004
+ ),
70005
+ "formatCode"
70006
+ ) ?? ""
70007
+ ).trim();
69918
70008
  const seriesShapeProperties = this.xmlLookupService.getChildByLocalName(seriesNode, "spPr");
69919
70009
  const seriesColor23 = this.parseColor(
69920
70010
  this.xmlLookupService.getChildByLocalName(seriesShapeProperties, "solidFill")
@@ -69946,6 +70036,7 @@ var PptxHandlerRuntime90 = class extends PptxHandlerRuntime89 {
69946
70036
  name: seriesName.trim().length > 0 ? seriesName : `Series ${seriesIndex + 1}`,
69947
70037
  values: fallbackValues,
69948
70038
  ...blanks ? { blanks } : {},
70039
+ ...seriesNumberFormat ? { numberFormat: seriesNumberFormat } : {},
69949
70040
  color: seriesColor23,
69950
70041
  ...trendlines.length > 0 ? { trendlines } : {},
69951
70042
  ...errBars.length > 0 ? { errBars } : {},
@@ -79972,9 +80063,9 @@ var SlideMetadataRenderer = class {
79972
80063
  const clickGroups = this.groupByClickSequence(items);
79973
80064
  const lines = ["### Animations"];
79974
80065
  for (let gi = 0; gi < clickGroups.length; gi += 1) {
79975
- const group = clickGroups[gi];
80066
+ const group2 = clickGroups[gi];
79976
80067
  lines.push(`- **Click ${gi + 1}:**`);
79977
- for (const anim of group) {
80068
+ for (const anim of group2) {
79978
80069
  lines.push(` - ${this.summariseAnimation(anim)}`);
79979
80070
  }
79980
80071
  }
@@ -80870,7 +80961,7 @@ var TextSegmentRenderer = class {
80870
80961
  return "";
80871
80962
  }
80872
80963
  const paragraphs = this.groupParagraphs(segments);
80873
- const renderedParagraphs = paragraphs.map((group) => this.renderParagraph(group, options)).filter((paragraph) => paragraph.text.length > 0);
80964
+ const renderedParagraphs = paragraphs.map((group2) => this.renderParagraph(group2, options)).filter((paragraph) => paragraph.text.length > 0);
80874
80965
  if (renderedParagraphs.length === 0) {
80875
80966
  return "";
80876
80967
  }
@@ -80902,7 +80993,7 @@ var TextSegmentRenderer = class {
80902
80993
  plainText(segments, options = {}) {
80903
80994
  const paragraphs = this.groupParagraphs(segments);
80904
80995
  const rendered = paragraphs.map(
80905
- (group) => group.segments.map((segment) => {
80996
+ (group2) => group2.segments.map((segment) => {
80906
80997
  const base = this.resolvePlainSegmentText(segment, options);
80907
80998
  if (segment.rubyText) {
80908
80999
  return `${base}(${segment.rubyText})`;
@@ -80932,8 +81023,8 @@ var TextSegmentRenderer = class {
80932
81023
  }
80933
81024
  return groups;
80934
81025
  }
80935
- renderParagraph(group, options) {
80936
- let rawText = group.segments.map((segment) => this.renderSegment(segment, options)).join("");
81026
+ renderParagraph(group2, options) {
81027
+ let rawText = group2.segments.map((segment) => this.renderSegment(segment, options)).join("");
80937
81028
  if (options.htmlFormatting) {
80938
81029
  rawText = rawText.replace(/<\/strong><strong>/g, "").replace(/<\/em><em>/g, "").replace(/<\/s><s>/g, "");
80939
81030
  } else {
@@ -80947,10 +81038,10 @@ var TextSegmentRenderer = class {
80947
81038
  return { text: "", isListItem: false };
80948
81039
  }
80949
81040
  if (!options.disableLists && !options.inlineMode) {
80950
- const bullet = group.segments.find((segment) => Boolean(segment.bulletInfo))?.bulletInfo;
81041
+ const bullet = group2.segments.find((segment) => Boolean(segment.bulletInfo))?.bulletInfo;
80951
81042
  if (bullet && !bullet.none) {
80952
- const level = resolveListLevel(bullet, group.index, options.paragraphIndents);
80953
- const marker = resolveListMarker(bullet, group.index);
81043
+ const level = resolveListLevel(bullet, group2.index, options.paragraphIndents);
81044
+ const marker = resolveListMarker(bullet, group2.index);
80954
81045
  const alreadyNumbered = bullet.autoNumType && /^\d+[.)]\s/.test(rawText);
80955
81046
  const prefix = alreadyNumbered ? "" : `${marker} `;
80956
81047
  if (options.htmlFormatting) {
@@ -80966,7 +81057,7 @@ var TextSegmentRenderer = class {
80966
81057
  };
80967
81058
  }
80968
81059
  }
80969
- const align = group.segments[0]?.style.align;
81060
+ const align = group2.segments[0]?.style.align;
80970
81061
  if (!options.disableAlignment && !options.inlineMode && align && align !== "left") {
80971
81062
  return {
80972
81063
  text: `<p align="${align}">${rawText}</p>`,
@@ -83815,8 +83906,8 @@ function buildStrokeOutline(element) {
83815
83906
  function suppressesCssBorder(element) {
83816
83907
  return buildStrokeOutline(element) !== void 0;
83817
83908
  }
83818
- function getGroupChildParentFill(group) {
83819
- return group.type === "group" ? group.groupFill : void 0;
83909
+ function getGroupChildParentFill(group2) {
83910
+ return group2.type === "group" ? group2.groupFill : void 0;
83820
83911
  }
83821
83912
  function resolveGroupChildFill(child22, parentGroupFill) {
83822
83913
  if (!parentGroupFill || !hasShapeProperties(child22) || child22.shapeStyle?.fillMode !== "group") {
@@ -86288,11 +86379,11 @@ var LatexParser = class {
86288
86379
  return tryParseScripts(this, base);
86289
86380
  }
86290
86381
  if (tok.type === "group_start") {
86291
- const group = this.parseGroup();
86292
- if (group.length === 0) {
86382
+ const group2 = this.parseGroup();
86383
+ if (group2.length === 0) {
86293
86384
  return null;
86294
86385
  }
86295
- const base = group.length === 1 ? group[0] : this.wrapE(group);
86386
+ const base = group2.length === 1 ? group2[0] : this.wrapE(group2);
86296
86387
  return tryParseScripts(this, base);
86297
86388
  }
86298
86389
  if (tok.type === "command") {
@@ -86700,6 +86791,273 @@ function latexToMathMl(source) {
86700
86791
  function compileEquationTemplateMathMl() {
86701
86792
  return EQUATION_TEMPLATES.map((tmpl) => latexToMathMl(tmpl.latex));
86702
86793
  }
86794
+ var NICE_STEPS = [1, 2, 2.5, 5, 10];
86795
+ var HEADROOM = 0.05;
86796
+ var ZERO_ANCHOR_RATIO = 5 / 6;
86797
+ function niceAxisStep(value) {
86798
+ if (!Number.isFinite(value) || value <= 0) {
86799
+ return 1;
86800
+ }
86801
+ const exponent = Math.floor(Math.log10(value));
86802
+ const power = 10 ** exponent;
86803
+ const mantissa = value / power;
86804
+ const step = NICE_STEPS.find((candidate) => mantissa <= candidate + 1e-12) ?? 10;
86805
+ return step * power;
86806
+ }
86807
+ function snap(value, unit, direction) {
86808
+ const scaled = value / unit;
86809
+ const rounded = direction === "up" ? Math.ceil(scaled - 1e-9) : Math.floor(scaled + 1e-9);
86810
+ return rounded * unit;
86811
+ }
86812
+ function niceValueAxisBounds(dataMin, dataMax, targetIntervals = 4) {
86813
+ if (!Number.isFinite(dataMin) || !Number.isFinite(dataMax)) {
86814
+ return { min: 0, max: 1, majorUnit: 0.5 };
86815
+ }
86816
+ const low = Math.min(dataMin, dataMax);
86817
+ const high = Math.max(dataMin, dataMax);
86818
+ const intervals = Math.max(1, Math.round(targetIntervals));
86819
+ if (low === high) {
86820
+ if (low === 0) {
86821
+ return { min: 0, max: 1, majorUnit: 1 / intervals };
86822
+ }
86823
+ const unit2 = niceAxisStep(Math.abs(low) / intervals);
86824
+ return low > 0 ? { min: 0, max: snap(low, unit2, "up") || unit2, majorUnit: unit2 } : { min: snap(low, unit2, "down"), max: 0, majorUnit: unit2 };
86825
+ }
86826
+ const dataSpan = high - low;
86827
+ const padding = dataSpan * HEADROOM;
86828
+ let paddedMin;
86829
+ let paddedMax;
86830
+ if (low >= 0) {
86831
+ paddedMin = low < high * ZERO_ANCHOR_RATIO ? 0 : low - padding;
86832
+ paddedMax = high + padding;
86833
+ } else if (high <= 0) {
86834
+ paddedMax = high > low * ZERO_ANCHOR_RATIO ? 0 : high + padding;
86835
+ paddedMin = low - padding;
86836
+ } else {
86837
+ paddedMin = low - padding;
86838
+ paddedMax = high + padding;
86839
+ }
86840
+ const unit = niceAxisStep((paddedMax - paddedMin) / intervals);
86841
+ const min = paddedMin === 0 ? 0 : snap(paddedMin, unit, "down");
86842
+ let max = paddedMax === 0 ? 0 : snap(paddedMax, unit, "up");
86843
+ if (max <= min) {
86844
+ max = min + unit;
86845
+ }
86846
+ return { min, max, majorUnit: unit };
86847
+ }
86848
+ var GENERAL = /* @__PURE__ */ new Set(["", "general", "@"]);
86849
+ function sections(code) {
86850
+ const out = [];
86851
+ let current = "";
86852
+ let inQuotes = false;
86853
+ for (let i = 0; i < code.length; i += 1) {
86854
+ const ch = code[i];
86855
+ if (ch === '"') {
86856
+ inQuotes = !inQuotes;
86857
+ current += ch;
86858
+ continue;
86859
+ }
86860
+ if (ch === "\\") {
86861
+ current += ch + (code[i + 1] ?? "");
86862
+ i += 1;
86863
+ continue;
86864
+ }
86865
+ if (ch === ";" && !inQuotes) {
86866
+ out.push(current);
86867
+ current = "";
86868
+ continue;
86869
+ }
86870
+ current += ch;
86871
+ }
86872
+ out.push(current);
86873
+ return out;
86874
+ }
86875
+ function sectionFor(value, parts) {
86876
+ if (parts.length === 1) {
86877
+ return { code: parts[0], forcePositive: false };
86878
+ }
86879
+ if (value < 0 && parts[1] !== void 0) {
86880
+ return { code: parts[1], forcePositive: true };
86881
+ }
86882
+ if (value === 0 && parts[2] !== void 0) {
86883
+ return { code: parts[2], forcePositive: false };
86884
+ }
86885
+ return { code: parts[0], forcePositive: false };
86886
+ }
86887
+ var PLACEHOLDER = /[0#?]/u;
86888
+ function parsePattern(code) {
86889
+ let scale = 1;
86890
+ let scientific = false;
86891
+ const chars = [];
86892
+ let inQuotes = false;
86893
+ for (let i = 0; i < code.length; i += 1) {
86894
+ const ch = code[i];
86895
+ if (ch === '"') {
86896
+ inQuotes = !inQuotes;
86897
+ continue;
86898
+ }
86899
+ if (inQuotes) {
86900
+ chars.push({ ch, literal: true });
86901
+ continue;
86902
+ }
86903
+ if (ch === "\\" || ch === "*" || ch === "_") {
86904
+ const next = code[i + 1];
86905
+ i += 1;
86906
+ if (ch === "\\" && next !== void 0) {
86907
+ chars.push({ ch: next, literal: true });
86908
+ }
86909
+ continue;
86910
+ }
86911
+ if (ch === "%") {
86912
+ scale *= 100;
86913
+ chars.push({ ch, literal: true });
86914
+ continue;
86915
+ }
86916
+ if (ch === "E" && (code[i + 1] === "+" || code[i + 1] === "-")) {
86917
+ scientific = true;
86918
+ chars.push({ ch: "E", literal: false });
86919
+ i += 1;
86920
+ continue;
86921
+ }
86922
+ if (ch === "[") {
86923
+ const close = code.indexOf("]", i);
86924
+ i = close === -1 ? code.length : close;
86925
+ continue;
86926
+ }
86927
+ chars.push({ ch, literal: false });
86928
+ }
86929
+ const firstDigit = chars.findIndex((c) => !c.literal && PLACEHOLDER.test(c.ch));
86930
+ if (firstDigit === -1) {
86931
+ return void 0;
86932
+ }
86933
+ let lastDigit = firstDigit;
86934
+ for (let i = chars.length - 1; i >= firstDigit; i -= 1) {
86935
+ const c = chars[i];
86936
+ if (!c.literal && (PLACEHOLDER.test(c.ch) || c.ch === "." || c.ch === "," || c.ch === "E")) {
86937
+ lastDigit = i;
86938
+ break;
86939
+ }
86940
+ }
86941
+ const numeric = chars.slice(firstDigit, lastDigit + 1);
86942
+ const prefix = chars.slice(0, firstDigit).map((c) => c.ch).join("");
86943
+ const suffix = chars.slice(lastDigit + 1).map((c) => c.ch).join("");
86944
+ let grouped = false;
86945
+ let intDigits = 0;
86946
+ let required = 0;
86947
+ let optional = 0;
86948
+ let afterPoint = false;
86949
+ let inExponent = false;
86950
+ for (let i = 0; i < numeric.length; i += 1) {
86951
+ const { ch, literal } = numeric[i];
86952
+ if (literal) {
86953
+ continue;
86954
+ }
86955
+ if (ch === "E") {
86956
+ inExponent = true;
86957
+ continue;
86958
+ }
86959
+ if (inExponent) {
86960
+ continue;
86961
+ }
86962
+ if (ch === ".") {
86963
+ afterPoint = true;
86964
+ continue;
86965
+ }
86966
+ if (ch === ",") {
86967
+ const next = numeric.slice(i + 1).find((c) => !c.literal);
86968
+ if (!next || next.ch === "." || !PLACEHOLDER.test(next.ch)) {
86969
+ scale /= 1e3;
86970
+ } else {
86971
+ grouped = true;
86972
+ }
86973
+ continue;
86974
+ }
86975
+ if (!PLACEHOLDER.test(ch)) {
86976
+ continue;
86977
+ }
86978
+ if (afterPoint) {
86979
+ if (ch === "0") {
86980
+ required += 1;
86981
+ } else {
86982
+ optional += 1;
86983
+ }
86984
+ } else if (ch === "0") {
86985
+ intDigits += 1;
86986
+ }
86987
+ }
86988
+ return {
86989
+ prefix,
86990
+ suffix,
86991
+ intDigits,
86992
+ decimals: { required, optional },
86993
+ grouped,
86994
+ scale,
86995
+ scientific
86996
+ };
86997
+ }
86998
+ function group(intPart) {
86999
+ return intPart.replace(/\B(?=(\d{3})+(?!\d))/gu, ",");
87000
+ }
87001
+ function applyPattern(value, pattern, forcePositive) {
87002
+ const scaled = value * pattern.scale;
87003
+ const magnitude = forcePositive ? Math.abs(scaled) : scaled;
87004
+ if (pattern.scientific) {
87005
+ const digits = pattern.decimals.required + pattern.decimals.optional;
87006
+ const exponential = magnitude.toExponential(digits);
87007
+ const [mantissa, exponent] = exponential.split("e");
87008
+ const sign = exponent.startsWith("-") ? "-" : "+";
87009
+ const power = Math.abs(Number(exponent)).toString().padStart(2, "0");
87010
+ return `${pattern.prefix}${mantissa}E${sign}${power}${pattern.suffix}`;
87011
+ }
87012
+ const maxDecimals = pattern.decimals.required + pattern.decimals.optional;
87013
+ let body = magnitude.toFixed(maxDecimals);
87014
+ if (pattern.decimals.optional > 0) {
87015
+ body = body.replace(/(\.\d*?)0+$/u, "$1").replace(/\.$/u, "");
87016
+ const [, frac = ""] = body.split(".");
87017
+ if (frac.length < pattern.decimals.required) {
87018
+ body = Number(body).toFixed(pattern.decimals.required);
87019
+ }
87020
+ }
87021
+ const [rawIntPart, fracPart] = body.split(".");
87022
+ let intPart = rawIntPart;
87023
+ const negative = intPart.startsWith("-");
87024
+ if (negative) {
87025
+ intPart = intPart.slice(1);
87026
+ }
87027
+ if (intPart.length < pattern.intDigits) {
87028
+ intPart = intPart.padStart(pattern.intDigits, "0");
87029
+ }
87030
+ if (pattern.intDigits === 0 && intPart === "0" && fracPart !== void 0) {
87031
+ intPart = "";
87032
+ }
87033
+ if (pattern.grouped) {
87034
+ intPart = group(intPart);
87035
+ }
87036
+ const number = fracPart === void 0 ? intPart : `${intPart}.${fracPart}`;
87037
+ return `${negative ? "-" : ""}${pattern.prefix}${number}${pattern.suffix}`;
87038
+ }
87039
+ function formatChartNumber(value, formatCode) {
87040
+ if (!Number.isFinite(value)) {
87041
+ return void 0;
87042
+ }
87043
+ const code = (formatCode ?? "").trim();
87044
+ if (GENERAL.has(code.toLowerCase())) {
87045
+ return void 0;
87046
+ }
87047
+ if (/(?:^|[^\\"])(?:yy|mm?m|dd?|hh|ss)/iu.test(code) && !/[0#?]/u.test(code)) {
87048
+ return void 0;
87049
+ }
87050
+ const { code: section, forcePositive } = sectionFor(value, sections(code));
87051
+ const pattern = parsePattern(section);
87052
+ if (!pattern) {
87053
+ return void 0;
87054
+ }
87055
+ try {
87056
+ return applyPattern(value, pattern, forcePositive);
87057
+ } catch {
87058
+ return void 0;
87059
+ }
87060
+ }
86703
87061
  var ACCENT1 = "#4472C4";
86704
87062
  var ACCENT2 = "#ED7D31";
86705
87063
  var ACCENT3 = "#A5A5A5";
@@ -86830,12 +87188,11 @@ function computeValueRange(series) {
86830
87188
  if (allValues.length === 0) {
86831
87189
  return { min: 0, max: 1, span: 1 };
86832
87190
  }
86833
- const dataMin = Math.min(...allValues);
86834
- const dataMax = Math.max(...allValues);
86835
- const min = Math.min(dataMin, 0);
86836
- const max = Math.max(dataMax, 0);
86837
- const span = Math.max(max - min, 1);
86838
- return { min, max, span };
87191
+ const { min, max, majorUnit } = niceValueAxisBounds(
87192
+ Math.min(...allValues),
87193
+ Math.max(...allValues)
87194
+ );
87195
+ return { min, max, span: Math.max(max - min, Number.EPSILON), majorUnit };
86839
87196
  }
86840
87197
  function valueToY(val2, range, topY, bottomY) {
86841
87198
  const usable = bottomY - topY;
@@ -86851,7 +87208,11 @@ function valueToY(val2, range, topY, bottomY) {
86851
87208
  }
86852
87209
  return range.reverseOrder ? topY + ratio * usable : bottomY - ratio * usable;
86853
87210
  }
86854
- function formatAxisValue(val2) {
87211
+ function formatAxisValue(val2, formatCode) {
87212
+ const formatted = formatChartNumber(val2, formatCode);
87213
+ if (formatted !== void 0) {
87214
+ return formatted;
87215
+ }
86855
87216
  if (Math.abs(val2) >= 1e6) {
86856
87217
  return `${(val2 / 1e6).toFixed(1)}M`;
86857
87218
  }
@@ -86907,6 +87268,19 @@ function computeLayout(elementWidth, elementHeight, style, hasAxes, legendPos, o
86907
87268
  svgHeight
86908
87269
  };
86909
87270
  }
87271
+ var DEFAULT_CHART_AREA_FILL = "#0f172a11";
87272
+ function resolve(fill, fallback) {
87273
+ if (fill === "none") {
87274
+ return void 0;
87275
+ }
87276
+ return fill ?? fallback;
87277
+ }
87278
+ function chartAreaFill(chartData) {
87279
+ return resolve(chartData?.style?.chartAreaFill, DEFAULT_CHART_AREA_FILL);
87280
+ }
87281
+ function plotAreaFill(chartData) {
87282
+ return resolve(chartData?.style?.plotAreaFill, void 0);
87283
+ }
86910
87284
  var LOG_EXPONENT_TOLERANCE = 1e-12;
86911
87285
  function computeLogValueRange(series, logBase) {
86912
87286
  const allValues = series.flatMap((item) => item.values).filter((value) => value > 0);
@@ -86935,6 +87309,7 @@ function computeValueRangeForAxis(series, axis) {
86935
87309
  const validMax = typeof axis?.max === "number" && Number.isFinite(axis.max) && (!logBase || axis.max > 0) ? axis.max : void 0;
86936
87310
  const min = validMin ?? automatic.min;
86937
87311
  let max = validMax ?? automatic.max;
87312
+ const majorUnit = validMin === void 0 && validMax === void 0 ? automatic.majorUnit : void 0;
86938
87313
  if (max <= min) {
86939
87314
  max = logBase ? min * logBase : min + 1;
86940
87315
  }
@@ -86943,6 +87318,7 @@ function computeValueRangeForAxis(series, axis) {
86943
87318
  min,
86944
87319
  max,
86945
87320
  span: Math.max(span, Number.EPSILON),
87321
+ ...majorUnit !== void 0 ? { majorUnit } : {},
86946
87322
  ...logBase ? { logScale: true, logBase } : {},
86947
87323
  ...axis?.orientation === "maxMin" ? { reverseOrder: true } : {}
86948
87324
  };
@@ -86982,6 +87358,10 @@ function generateAxisTicks(range, axis, defaultIntervals) {
86982
87358
  if (explicit.length > 0) {
86983
87359
  return explicit;
86984
87360
  }
87361
+ const automatic = generateIntervalTicks(range, range.majorUnit ?? 0);
87362
+ if (automatic.length > 0) {
87363
+ return automatic;
87364
+ }
86985
87365
  return Array.from(
86986
87366
  { length: defaultIntervals + 1 },
86987
87367
  (_, index) => range.min + range.span / defaultIntervals * index
@@ -87550,7 +87930,7 @@ function formatTick(val2, axis) {
87550
87930
  if (axis?.displayUnits) {
87551
87931
  return formatAxisValueWithUnits(val2, axis);
87552
87932
  }
87553
- return formatAxisValue2(val2);
87933
+ return formatAxisValue2(val2, axis?.numFmt?.formatCode);
87554
87934
  }
87555
87935
  function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft) {
87556
87936
  const gridlines = [];
@@ -87747,7 +88127,11 @@ function hasRicherAxisFeatures(chartData) {
87747
88127
  return Boolean(
87748
88128
  chartData.dataTable || chartData.axes?.some(
87749
88129
  (axis) => axis.crosses !== void 0 || axis.crossesAt !== void 0 || axis.crossBetween !== void 0 || axis.axisType === "valAx" && Boolean(
87750
- axis.logScale || axis.displayUnits || axis.axPos === "r" || axis.orientation === "maxMin" || axis.majorUnit !== void 0 || axis.minorUnit !== void 0 || axis.minorGridlines || axis.majorTickMark !== void 0 || axis.minorTickMark !== void 0 || axis.tickLblPos !== void 0
88130
+ axis.logScale || axis.displayUnits || // A `c:numFmt` is only honoured on the `buildPrimaryAxis`
88131
+ // path; the fast path has no axis to read it from. The two
88132
+ // agree tick-for-tick when no log scale or display unit is
88133
+ // in play, so routing a formatted axis here costs nothing.
88134
+ axis.numFmt?.formatCode || axis.axPos === "r" || axis.orientation === "maxMin" || axis.majorUnit !== void 0 || axis.minorUnit !== void 0 || axis.minorGridlines || axis.majorTickMark !== void 0 || axis.minorTickMark !== void 0 || axis.tickLblPos !== void 0
87751
88135
  )
87752
88136
  )
87753
88137
  );
@@ -87857,7 +88241,7 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
87857
88241
  kind: "text",
87858
88242
  x: x + singleBarWidth / 2,
87859
88243
  y: val2 >= 0 ? y - 4 : y + h + 10,
87860
- text: formatAxisValue2(val2),
88244
+ text: formatAxisValue2(val2, series[si].numberFormat),
87861
88245
  fontSize: 7,
87862
88246
  fill: "#334155",
87863
88247
  textAnchor: "middle"
@@ -87962,7 +88346,7 @@ function pushClusteredStackedLabels(series, sourceIndices2, catCount, layout, ra
87962
88346
  kind: "text",
87963
88347
  x,
87964
88348
  y: labelY,
87965
- text: formatAxisValue2(val2),
88349
+ text: formatAxisValue2(val2, series[si].numberFormat),
87966
88350
  fontSize: 7,
87967
88351
  fill: "#334155",
87968
88352
  textAnchor: "middle"
@@ -88248,7 +88632,7 @@ function buildLines(chartData, catCount, layout, primaryRange, secondaryRange, s
88248
88632
  kind: "text",
88249
88633
  x: pt.x,
88250
88634
  y: pt.y - 7,
88251
- text: formatAxisValue2(val2),
88635
+ text: formatAxisValue2(val2, series.numberFormat),
88252
88636
  fontSize: 7,
88253
88637
  fill: "#334155",
88254
88638
  textAnchor: "middle"
@@ -88320,7 +88704,7 @@ function buildAreas(chartData, catCount, layout, range, sourceIndices2, xPositio
88320
88704
  kind: "text",
88321
88705
  x: pt.x,
88322
88706
  y: pt.y - 6,
88323
- text: formatAxisValue2(val2),
88707
+ text: formatAxisValue2(val2, series.numberFormat),
88324
88708
  fontSize: 7,
88325
88709
  fill: "#334155",
88326
88710
  textAnchor: "middle"
@@ -88365,7 +88749,7 @@ function buildScatter(chartData, layout, range) {
88365
88749
  kind: "text",
88366
88750
  x: dot.cx,
88367
88751
  y: dot.cy - 6,
88368
- text: formatAxisValue2(val2),
88752
+ text: formatAxisValue2(val2, series.numberFormat),
88369
88753
  fontSize: 7,
88370
88754
  fill: "#334155",
88371
88755
  textAnchor: "middle"
@@ -88412,7 +88796,7 @@ function buildBubbles(chartData, layout, range) {
88412
88796
  kind: "text",
88413
88797
  x: dot.cx,
88414
88798
  y: dot.cy - 10,
88415
- text: formatAxisValue2(val2),
88799
+ text: formatAxisValue2(val2, series.numberFormat),
88416
88800
  fontSize: 7,
88417
88801
  fill: "#334155",
88418
88802
  textAnchor: "middle"
@@ -88566,18 +88950,18 @@ function buildMultiLevelCategoryLabels(categoryLabels, categoryLevels, sourceInd
88566
88950
  const bandHeight = Math.max(axis?.fontSize ?? 8, 8) + 4;
88567
88951
  return levels.flatMap((level, levelIndex) => {
88568
88952
  const values = sourceIndices2.map((sourceIndex) => level[sourceIndex] ?? "");
88569
- return groupedLabels(values).flatMap((group) => {
88570
- if (!group.text || group.start % skip !== 0) {
88953
+ return groupedLabels(values).flatMap((group2) => {
88954
+ if (!group2.text || group2.start % skip !== 0) {
88571
88955
  return [];
88572
88956
  }
88573
- const startX = categoryX2(group.start, sourceIndices2.length, layout, spacing);
88574
- const endX = categoryX2(group.end, sourceIndices2.length, layout, spacing);
88957
+ const startX = categoryX2(group2.start, sourceIndices2.length, layout, spacing);
88958
+ const endX = categoryX2(group2.end, sourceIndices2.length, layout, spacing);
88575
88959
  return [
88576
88960
  {
88577
88961
  kind: "text",
88578
88962
  x: (startX + endX) / 2,
88579
88963
  y: labelY + direction * (offset + levelIndex * bandHeight),
88580
- text: group.text,
88964
+ text: group2.text,
88581
88965
  textAnchor,
88582
88966
  ...chartAxisTextStyle(axis)
88583
88967
  }
@@ -89822,7 +90206,7 @@ function buildComboViewModel(element, chartData, categoryLabels) {
89822
90206
  kind: "text",
89823
90207
  x: point.x,
89824
90208
  y: point.y - 7,
89825
- text: formatAxisValue2(point.value),
90209
+ text: formatAxisValue2(point.value, series.numberFormat),
89826
90210
  fontSize: 7,
89827
90211
  fill: "#334155",
89828
90212
  textAnchor: "middle"
@@ -89877,7 +90261,7 @@ function appendBarLabels(series, chartData, layout, catCount, range, sourceIndic
89877
90261
  kind: "text",
89878
90262
  x: xPositions?.[displayIndex] ?? layout.plotLeft + groupWidth * displayIndex + offset + barWidth / 2,
89879
90263
  y: value >= 0 ? Math.min(zeroY, valueY) - 4 : Math.max(zeroY, valueY) + 10,
89880
- text: formatAxisValue2(value),
90264
+ text: formatAxisValue2(value, series.numberFormat),
89881
90265
  fontSize: 7,
89882
90266
  fill: "#334155",
89883
90267
  textAnchor: "middle"
@@ -90914,7 +91298,7 @@ function isOutsidePosition(position2) {
90914
91298
  return position2 === "outEnd" || position2 === "bestFit";
90915
91299
  }
90916
91300
  function buildPieDataLabels(params) {
90917
- const { slices, values, cx, cy, outerR, position: position2, showLeaderLines } = params;
91301
+ const { slices, values, cx, cy, outerR, position: position2, showLeaderLines, numberFormat } = params;
90918
91302
  const outside = isOutsidePosition(position2);
90919
91303
  const labels = [];
90920
91304
  const leaderLines = [];
@@ -90928,7 +91312,7 @@ function buildPieDataLabels(params) {
90928
91312
  kind: "text",
90929
91313
  x: slice.labelX,
90930
91314
  y: slice.labelY,
90931
- text: formatAxisValue2(val2),
91315
+ text: formatAxisValue2(val2, numberFormat),
90932
91316
  fontSize: 8,
90933
91317
  fill: "#ffffff",
90934
91318
  textAnchor: "middle",
@@ -90948,7 +91332,7 @@ function buildPieDataLabels(params) {
90948
91332
  kind: "text",
90949
91333
  x: labelX + (cos >= 0 ? 2 : -2),
90950
91334
  y: labelY,
90951
- text: formatAxisValue2(val2),
91335
+ text: formatAxisValue2(val2, numberFormat),
90952
91336
  fontSize: 8,
90953
91337
  fill: "#334155",
90954
91338
  textAnchor: anchor,
@@ -92217,10 +92601,8 @@ function computeValueRange2(series) {
92217
92601
  if (dataMin === Number.POSITIVE_INFINITY) {
92218
92602
  return { min: 0, max: 1, span: 1 };
92219
92603
  }
92220
- const min = Math.min(dataMin, 0);
92221
- const max = Math.max(dataMax, 0);
92222
- const span = Math.max(max - min, 1);
92223
- return { min, max, span };
92604
+ const { min, max, majorUnit } = niceValueAxisBounds(dataMin, dataMax);
92605
+ return { min, max, span: Math.max(max - min, Number.EPSILON), majorUnit };
92224
92606
  }
92225
92607
  function computeStackedValueRange(series, catCount) {
92226
92608
  let maxSum = 0;
@@ -92239,10 +92621,8 @@ function computeStackedValueRange(series, catCount) {
92239
92621
  maxSum = Math.max(maxSum, pos2);
92240
92622
  minSum = Math.min(minSum, neg);
92241
92623
  }
92242
- const min = Math.min(minSum, 0);
92243
- const max = Math.max(maxSum, 0);
92244
- const span = Math.max(max - min, 1);
92245
- return { min, max, span };
92624
+ const { min, max, majorUnit } = niceValueAxisBounds(Math.min(minSum, 0), Math.max(maxSum, 0));
92625
+ return { min, max, span: Math.max(max - min, Number.EPSILON), majorUnit };
92246
92626
  }
92247
92627
  function valueToY2(val2, range, topY, bottomY) {
92248
92628
  const usable = bottomY - topY;
@@ -92258,7 +92638,11 @@ function valueToY2(val2, range, topY, bottomY) {
92258
92638
  }
92259
92639
  return range.reverseOrder ? topY + ratio * usable : bottomY - ratio * usable;
92260
92640
  }
92261
- function formatAxisValue2(val2) {
92641
+ function formatAxisValue2(val2, formatCode) {
92642
+ const formatted = formatChartNumber(val2, formatCode);
92643
+ if (formatted !== void 0) {
92644
+ return formatted;
92645
+ }
92262
92646
  if (Math.abs(val2) >= 1e6) {
92263
92647
  return `${(val2 / 1e6).toFixed(1)}M`;
92264
92648
  }
@@ -92320,11 +92704,23 @@ var GRIDLINE_COLOR2 = "#e2e8f0";
92320
92704
  var AXIS_LABEL_COLOR = "#64748b";
92321
92705
  var ZERO_LINE_COLOR = "#94a3b8";
92322
92706
  var TICK_COUNT2 = 5;
92707
+ function axisTickValues(range) {
92708
+ const unit = range.majorUnit;
92709
+ if (unit !== void 0 && Number.isFinite(unit) && unit > 0 && !range.logScale) {
92710
+ const steps = Math.round((range.max - range.min) / unit);
92711
+ if (steps >= 1 && steps <= 100) {
92712
+ return Array.from({ length: steps + 1 }, (_unused, index) => range.min + unit * index);
92713
+ }
92714
+ }
92715
+ return Array.from(
92716
+ { length: TICK_COUNT2 + 1 },
92717
+ (_unused, index) => range.min + range.span / TICK_COUNT2 * index
92718
+ );
92719
+ }
92323
92720
  function buildGridlinesAndLabels(range, layout) {
92324
92721
  const gridlines = [];
92325
92722
  const axisLabels = [];
92326
- for (let i = 0; i <= TICK_COUNT2; i++) {
92327
- const val2 = range.min + range.span / TICK_COUNT2 * i;
92723
+ for (const val2 of axisTickValues(range)) {
92328
92724
  const y = valueToY2(val2, range, layout.plotTop, layout.plotBottom);
92329
92725
  gridlines.push({
92330
92726
  kind: "line",
@@ -92642,13 +93038,26 @@ function buildChartViewModel(element) {
92642
93038
  const longestLen = chartData.series.reduce((m, s) => Math.max(m, s.values.length), 0);
92643
93039
  const categoryLabels = chartData.categories.length > 0 ? chartData.categories : Array.from({ length: longestLen }, (_, i) => String(i + 1));
92644
93040
  if (chartType === "ofPie") {
92645
- return withUserShapeOverlay(buildOfPieViewModel(element, chartData, categoryLabels), chartData);
93041
+ return withChartAreaFill(
93042
+ withUserShapeOverlay(buildOfPieViewModel(element, chartData, categoryLabels), chartData),
93043
+ chartData
93044
+ );
92646
93045
  }
92647
93046
  const flat = buildFlatViewModel(element, chartData, categoryLabels, kind);
92648
93047
  if (is3DChartType(chartType)) {
92649
- return withUserShapeOverlay(applyChart3DDepth(flat, chartType, chartData.view3D), chartData);
93048
+ return withChartAreaFill(
93049
+ withUserShapeOverlay(applyChart3DDepth(flat, chartType, chartData.view3D), chartData),
93050
+ chartData
93051
+ );
92650
93052
  }
92651
- return withUserShapeOverlay(flat, chartData);
93053
+ return withChartAreaFill(withUserShapeOverlay(flat, chartData), chartData);
93054
+ }
93055
+ function withChartAreaFill(vm, chartData) {
93056
+ return {
93057
+ ...vm,
93058
+ areaFill: chartAreaFill(chartData),
93059
+ plotFill: plotAreaFill(chartData)
93060
+ };
92652
93061
  }
92653
93062
  function withUserShapeOverlay(vm, chartData) {
92654
93063
  const overlay = buildChartUserShapeOverlay(chartData.userShapes, vm.svgWidth, vm.svgHeight);
@@ -92709,6 +93118,8 @@ function buildFallbackViewModel(width, height, label) {
92709
93118
  return {
92710
93119
  svgWidth,
92711
93120
  svgHeight,
93121
+ // No chart data to read a fill from, so the historical wash stands.
93122
+ areaFill: DEFAULT_CHART_AREA_FILL,
92712
93123
  title: void 0,
92713
93124
  titleX: svgWidth / 2,
92714
93125
  titleY: 14,
@@ -92780,7 +93191,8 @@ function buildPieViewModel(element, chartData, categoryLabels, isDoughnut) {
92780
93191
  cy,
92781
93192
  outerR,
92782
93193
  position: chartData.style.dataLabels?.position,
92783
- showLeaderLines: chartData.style.dataLabels?.showLeaderLines
93194
+ showLeaderLines: chartData.style.dataLabels?.showLeaderLines,
93195
+ numberFormat: chartData.series[0]?.numberFormat
92784
93196
  });
92785
93197
  dataLabels.push(...labelResult.labels);
92786
93198
  primitives.push(...labelResult.leaderLines);
@@ -92899,7 +93311,7 @@ function buildRadarViewModel(element, chartData, categoryLabels) {
92899
93311
  kind: "text",
92900
93312
  x: p.x,
92901
93313
  y: p.y - 8,
92902
- text: formatAxisValue2(val2),
93314
+ text: formatAxisValue2(val2, series.numberFormat),
92903
93315
  fontSize: 7,
92904
93316
  fill: "#334155",
92905
93317
  textAnchor: "middle"
@@ -93949,8 +94361,8 @@ function finalizeClickGroup(steps, options) {
93949
94361
  maxEnd = end;
93950
94362
  }
93951
94363
  }
93952
- const group = { steps, totalDurationMs: maxEnd };
93953
- return group;
94364
+ const group2 = { steps, totalDurationMs: maxEnd };
94365
+ return group2;
93954
94366
  }
93955
94367
  var CLICK_EVENTS = /* @__PURE__ */ new Set(["onClick", "onNext"]);
93956
94368
  var HOVER_EVENTS = /* @__PURE__ */ new Set(["onMouseOver"]);
@@ -93969,6 +94381,9 @@ function normalizeDelay(delay) {
93969
94381
  }
93970
94382
  return { ms: delay, indefinite: false };
93971
94383
  }
94384
+ function isInteractiveTrigger(trigger) {
94385
+ return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
94386
+ }
93972
94387
  function classifyCondition(cond) {
93973
94388
  const evt = cond.event;
93974
94389
  if (evt && CLICK_EVENTS.has(evt)) {
@@ -93988,7 +94403,8 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
93988
94403
  delayMs: 0,
93989
94404
  hasClickAlternative: false,
93990
94405
  hasHoverAlternative: false,
93991
- indefinite: false
94406
+ indefinite: false,
94407
+ requiresInteraction: isInteractiveTrigger(fallbackTrigger)
93992
94408
  };
93993
94409
  if (!conditions || conditions.length === 0) {
93994
94410
  return base;
@@ -94033,6 +94449,7 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
94033
94449
  base.indefinite = indefinite;
94034
94450
  base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
94035
94451
  base.dependsOnEvent = timenode.event;
94452
+ base.requiresInteraction = false;
94036
94453
  return base;
94037
94454
  }
94038
94455
  if (delayCond && (delayCond.delay ?? 0) !== 0) {
@@ -94040,19 +94457,23 @@ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
94040
94457
  base.trigger = clickCond ? "onClick" : "afterDelay";
94041
94458
  base.delayMs = ms;
94042
94459
  base.indefinite = indefinite;
94460
+ base.requiresInteraction = indefinite;
94043
94461
  return base;
94044
94462
  }
94045
94463
  if (clickCond) {
94046
94464
  base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
94465
+ base.requiresInteraction = true;
94047
94466
  return base;
94048
94467
  }
94049
94468
  if (hoverCond) {
94050
94469
  base.trigger = "onHover";
94470
+ base.requiresInteraction = true;
94051
94471
  return base;
94052
94472
  }
94053
94473
  if (delayCond) {
94054
94474
  base.trigger = fallbackTrigger;
94055
94475
  base.delayMs = 0;
94476
+ base.requiresInteraction = false;
94056
94477
  }
94057
94478
  return base;
94058
94479
  }
@@ -94391,7 +94812,7 @@ function parseMediaCommand(commandString) {
94391
94812
  if (lower === "stop" || lower === "stopmedia") {
94392
94813
  return { verb: "stop" };
94393
94814
  }
94394
- if (lower === "toggleplay") {
94815
+ if (lower === "toggleplay" || lower === "togglepause") {
94395
94816
  return { verb: "togglePlay" };
94396
94817
  }
94397
94818
  return void 0;
@@ -94515,15 +94936,15 @@ function buildTimeline(nativeAnimations) {
94515
94936
  const isFirstAnimation = clickGroups.length === 0 && currentGroup.length === 0;
94516
94937
  if (isOnClick || isFirstAnimation) {
94517
94938
  if (currentGroup.length > 0) {
94518
- const group = finalizeClickGroup(currentGroup);
94939
+ const group2 = finalizeClickGroup(currentGroup);
94519
94940
  if (currentGroupAutoStart || !currentGroupIsClick && clickGroups.length > 0) {
94520
- group.autoAdvance = true;
94941
+ group2.autoAdvance = true;
94521
94942
  }
94522
- clickGroups.push(group);
94943
+ clickGroups.push(group2);
94523
94944
  }
94524
94945
  currentGroup = [];
94525
94946
  currentGroupIsClick = isOnClick || isFirstAnimation;
94526
- currentGroupAutoStart = !isOnClick && singleAnim.groupAutoStart === true;
94947
+ currentGroupAutoStart = singleAnim.groupAutoStart === true && !effective.requiresInteraction;
94527
94948
  subGroupIndex = singleAnim.parGroupIndex;
94528
94949
  subGroupStartMs = 0;
94529
94950
  }
@@ -94563,15 +94984,15 @@ function buildTimeline(nativeAnimations) {
94563
94984
  }
94564
94985
  }
94565
94986
  if (currentGroup.length > 0) {
94566
- const group = finalizeClickGroup(currentGroup);
94987
+ const group2 = finalizeClickGroup(currentGroup);
94567
94988
  if (currentGroupAutoStart || !currentGroupIsClick && clickGroups.length > 0) {
94568
- group.autoAdvance = true;
94989
+ group2.autoAdvance = true;
94569
94990
  }
94570
- clickGroups.push(group);
94991
+ clickGroups.push(group2);
94571
94992
  }
94572
- for (const group of clickGroups) {
94573
- if (group.autoAdvance) {
94574
- group.autoAdvanceDelayMs = 0;
94993
+ for (const group2 of clickGroups) {
94994
+ if (group2.autoAdvance) {
94995
+ group2.autoAdvanceDelayMs = 0;
94575
94996
  }
94576
94997
  }
94577
94998
  const interactiveSequences = buildSequenceGroups(
@@ -94628,25 +95049,26 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94628
95049
  for (const anim of anims) {
94629
95050
  let effect = resolveEffect(anim);
94630
95051
  const dynamic = effect ? void 0 : buildDynamicKeyframe(anim, dynamicUid++);
94631
- if (!effect && !dynamic) {
95052
+ const isCommand = !effect && !dynamic && isMediaCommandAnimation(anim);
95053
+ if (!effect && !dynamic && !isCommand) {
94632
95054
  effect = fallbackEffectForClass(anim.presetClass);
94633
95055
  if (!effect) {
94634
95056
  continue;
94635
95057
  }
94636
95058
  }
94637
- const keyframe = effect ? cssKeyframeName(effect) : dynamic.keyframeName;
95059
+ const keyframe = isCommand ? "" : effect ? cssKeyframeName(effect) : dynamic.keyframeName;
94638
95060
  if (effect) {
94639
95061
  neededKeyframes.add(effect);
94640
95062
  }
94641
95063
  if (dynamic) {
94642
95064
  dynamicBlocks.push(dynamic.css);
94643
95065
  }
94644
- const elementId = anim.targetId ?? "";
95066
+ const elementId = isCommand ? "" : anim.targetId ?? "";
94645
95067
  const seqTrigger = anim.trigger ?? "onShapeClick";
94646
- const duration = anim.durationMs ?? defaultDuration(anim.presetClass);
95068
+ const duration = isCommand ? 0 : anim.durationMs ?? defaultDuration(anim.presetClass);
94647
95069
  const animDelay = Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0);
94648
95070
  const triggerDelay = 0;
94649
- const presetClass = anim.presetClass ?? "entr";
95071
+ const presetClass = isCommand ? "emph" : anim.presetClass ?? "entr";
94650
95072
  const fill = fillModeForClass(anim.presetClass);
94651
95073
  const iterCount = anim.repeatCount ?? 1;
94652
95074
  const direction = anim.autoReverse ? "alternate" : "normal";
@@ -94670,7 +95092,7 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94670
95092
  }
94671
95093
  const iterStr = iterCount === Infinity ? "infinite" : String(iterCount);
94672
95094
  const easing = cssEasingForAnimation(anim);
94673
- const cssAnimation = `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
95095
+ const cssAnimation = isCommand ? "" : `${keyframe} ${duration}ms ${easing} ${delayMs}ms ${iterStr} ${direction} ${fill}`;
94674
95096
  seqGroup.push({
94675
95097
  elementId,
94676
95098
  cssAnimation,
@@ -94682,8 +95104,9 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
94682
95104
  presetClass,
94683
95105
  soundPath: anim.soundPath,
94684
95106
  stopSound: anim.stopSound,
94685
- build: resolveStepBuildDescriptor(anim),
94686
- colorTargets: stepColorTargets(anim)
95107
+ command: isCommand ? buildStepCommand(anim) : void 0,
95108
+ build: isCommand ? void 0 : resolveStepBuildDescriptor(anim),
95109
+ colorTargets: isCommand ? void 0 : stepColorTargets(anim)
94687
95110
  });
94688
95111
  }
94689
95112
  if (seqGroup.length > 0) {
@@ -94797,9 +95220,9 @@ var TimelineEngine = class _TimelineEngine {
94797
95220
  return null;
94798
95221
  }
94799
95222
  this.currentGroupIndex++;
94800
- const group = this.timeline.clickGroups[this.currentGroupIndex];
94801
- this.applyGroupSteps(group);
94802
- return group;
95223
+ const group2 = this.timeline.clickGroups[this.currentGroupIndex];
95224
+ this.applyGroupSteps(group2);
95225
+ return group2;
94803
95226
  }
94804
95227
  /**
94805
95228
  * Peek at the next click-group without advancing.
@@ -94911,9 +95334,9 @@ var TimelineEngine = class _TimelineEngine {
94911
95334
  return null;
94912
95335
  }
94913
95336
  this.interactiveGroupIndexes.set(triggerShapeId, nextIdx);
94914
- const group = groups[nextIdx];
94915
- this.applyGroupSteps(group);
94916
- return group;
95337
+ const group2 = groups[nextIdx];
95338
+ this.applyGroupSteps(group2);
95339
+ return group2;
94917
95340
  }
94918
95341
  /**
94919
95342
  * Advance the hover sequence for a given trigger shape.
@@ -94930,9 +95353,9 @@ var TimelineEngine = class _TimelineEngine {
94930
95353
  return null;
94931
95354
  }
94932
95355
  this.hoverGroupIndexes.set(triggerShapeId, nextIdx);
94933
- const group = groups[nextIdx];
94934
- this.applyGroupSteps(group);
94935
- return group;
95356
+ const group2 = groups[nextIdx];
95357
+ this.applyGroupSteps(group2);
95358
+ return group2;
94936
95359
  }
94937
95360
  /**
94938
95361
  * Reset the hover sequence for a given trigger shape so it can replay
@@ -94954,8 +95377,8 @@ var TimelineEngine = class _TimelineEngine {
94954
95377
  */
94955
95378
  completeAll() {
94956
95379
  this.reset();
94957
- for (const group of this.timeline.clickGroups) {
94958
- for (const step of group.steps) {
95380
+ for (const group2 of this.timeline.clickGroups) {
95381
+ for (const step of group2.steps) {
94959
95382
  if (step.build || step.colorTargets) {
94960
95383
  this.activeSteps.set(step.elementId, step);
94961
95384
  }
@@ -94984,8 +95407,8 @@ var TimelineEngine = class _TimelineEngine {
94984
95407
  /**
94985
95408
  * Apply a group's steps to the internal tracking state.
94986
95409
  */
94987
- applyGroupSteps(group) {
94988
- for (const step of group.steps) {
95410
+ applyGroupSteps(group2) {
95411
+ for (const step of group2.steps) {
94989
95412
  this.activeAnimations.set(step.elementId, step.cssAnimation);
94990
95413
  if (step.build || step.colorTargets) {
94991
95414
  this.activeSteps.set(step.elementId, step);
@@ -95558,9 +95981,9 @@ var PresentationAnimationController = class _PresentationAnimationController {
95558
95981
  * binding the group needs a requestAnimationFrame reveal loop; an empty result
95559
95982
  * means ordinary discrete click-advance is enough.
95560
95983
  */
95561
- static collectBuildStepIds(group) {
95984
+ static collectBuildStepIds(group2) {
95562
95985
  const ids = [];
95563
- for (const step of group.steps) {
95986
+ for (const step of group2.steps) {
95564
95987
  if (step.build) {
95565
95988
  ids.push(step.elementId);
95566
95989
  }
@@ -95627,8 +96050,8 @@ function findMediaElementByElementId(targetId, root) {
95627
96050
  }
95628
96051
  return void 0;
95629
96052
  }
95630
- function runMediaCommand(command, resolve) {
95631
- const el = resolve(command.targetId);
96053
+ function runMediaCommand(command, resolve2) {
96054
+ const el = resolve2(command.targetId);
95632
96055
  if (!el) {
95633
96056
  return false;
95634
96057
  }
@@ -96431,10 +96854,10 @@ function collectSections(entry2, tableData, pos2) {
96431
96854
  const isBottom = rowIndex === rowCount - 1;
96432
96855
  const isLeft = cellIndex === 0;
96433
96856
  const isRight = cellIndex === columnCount - 1;
96434
- const sections = [];
96857
+ const sections2 = [];
96435
96858
  const push2 = (borders, regionTop, regionBottom, regionLeft, regionRight) => {
96436
96859
  if (borders) {
96437
- sections.push({ borders, regionTop, regionBottom, regionLeft, regionRight });
96860
+ sections2.push({ borders, regionTop, regionBottom, regionLeft, regionRight });
96438
96861
  }
96439
96862
  };
96440
96863
  push2(entry2.wholeTblBorders, isTop, isBottom, isLeft, isRight);
@@ -96474,19 +96897,19 @@ function collectSections(entry2, tableData, pos2) {
96474
96897
  if (tableData.lastCol && isRight) {
96475
96898
  push2(entry2.lastColBorders, isTop, isBottom, true, true);
96476
96899
  }
96477
- return sections;
96900
+ return sections2;
96478
96901
  }
96479
- function resolveStyleDiagonalBorders(entry2, tableData, pos2, resolve) {
96902
+ function resolveStyleDiagonalBorders(entry2, tableData, pos2, resolve2) {
96480
96903
  if (!entry2) {
96481
96904
  return void 0;
96482
96905
  }
96483
- const sections = collectSections(entry2, tableData, pos2);
96484
- if (sections.length === 0) {
96906
+ const sections2 = collectSections(entry2, tableData, pos2);
96907
+ if (sections2.length === 0) {
96485
96908
  return void 0;
96486
96909
  }
96487
96910
  let tl2br;
96488
96911
  let bl2tr;
96489
- for (const section of sections) {
96912
+ for (const section of sections2) {
96490
96913
  if (section.borders.tl2br) {
96491
96914
  tl2br = section.borders.tl2br;
96492
96915
  }
@@ -96497,12 +96920,12 @@ function resolveStyleDiagonalBorders(entry2, tableData, pos2, resolve) {
96497
96920
  const info = {};
96498
96921
  let applied = false;
96499
96922
  if (tl2br && !tl2br.noFill) {
96500
- info.diagDownColor = tl2br.color ?? resolve(tl2br.fill) ?? "#000000";
96923
+ info.diagDownColor = tl2br.color ?? resolve2(tl2br.fill) ?? "#000000";
96501
96924
  info.diagDownWidth = tl2br.width ?? 1;
96502
96925
  applied = true;
96503
96926
  }
96504
96927
  if (bl2tr && !bl2tr.noFill) {
96505
- info.diagUpColor = bl2tr.color ?? resolve(bl2tr.fill) ?? "#000000";
96928
+ info.diagUpColor = bl2tr.color ?? resolve2(bl2tr.fill) ?? "#000000";
96506
96929
  info.diagUpWidth = bl2tr.width ?? 1;
96507
96930
  applied = true;
96508
96931
  }
@@ -97909,7 +98332,7 @@ function groupElements(elements, ids, groupId) {
97909
98332
  x: el.x - groupX,
97910
98333
  y: el.y - groupY
97911
98334
  }));
97912
- const group = {
98335
+ const group2 = {
97913
98336
  type: "group",
97914
98337
  id: groupId,
97915
98338
  name: "Group",
@@ -97928,7 +98351,7 @@ function groupElements(elements, ids, groupId) {
97928
98351
  }
97929
98352
  const result = [
97930
98353
  ...remaining.slice(0, adjustedIndex),
97931
- group,
98354
+ group2,
97932
98355
  ...remaining.slice(adjustedIndex)
97933
98356
  ];
97934
98357
  return { elements: result, groupId };
@@ -98160,38 +98583,38 @@ function resolveSlideId(slide, index) {
98160
98583
  const cSld = rawXml?.["p:sld"];
98161
98584
  return String(cSld?.["@_id"] || slide?.slideNumber || index + 1);
98162
98585
  }
98163
- function groupSlidesBySection(sections, slides) {
98586
+ function groupSlidesBySection(sections2, slides) {
98164
98587
  if (slides.length === 0) {
98165
98588
  return [];
98166
98589
  }
98167
- if (sections.length === 0) {
98590
+ if (sections2.length === 0) {
98168
98591
  return [
98169
98592
  { section: void 0, slides: [...slides], slideIndexes: slides.map((_slide, i) => i) }
98170
98593
  ];
98171
98594
  }
98172
- const sectionById = new Map(sections.map((section) => [section.id, section]));
98595
+ const sectionById = new Map(sections2.map((section) => [section.id, section]));
98173
98596
  const grouped = /* @__PURE__ */ new Map();
98174
98597
  const ungrouped = {
98175
98598
  section: void 0,
98176
98599
  slides: [],
98177
98600
  slideIndexes: []
98178
98601
  };
98179
- for (const section of sections) {
98602
+ for (const section of sections2) {
98180
98603
  grouped.set(section.id, { section, slides: [], slideIndexes: [] });
98181
98604
  }
98182
98605
  slides.forEach((slide, index) => {
98183
- const group = slide.sectionId ? grouped.get(slide.sectionId) : void 0;
98184
- const target = group && sectionById.has(slide.sectionId ?? "") ? group : ungrouped;
98606
+ const group2 = slide.sectionId ? grouped.get(slide.sectionId) : void 0;
98607
+ const target = group2 && sectionById.has(slide.sectionId ?? "") ? group2 : ungrouped;
98185
98608
  target.slides.push(slide);
98186
98609
  target.slideIndexes.push(index);
98187
98610
  });
98188
- const result = sections.map((section) => grouped.get(section.id)).filter((group) => group.slides.length > 0);
98611
+ const result = sections2.map((section) => grouped.get(section.id)).filter((group2) => group2.slides.length > 0);
98189
98612
  if (ungrouped.slides.length > 0) {
98190
98613
  result.push(ungrouped);
98191
98614
  }
98192
98615
  return result;
98193
98616
  }
98194
- function addSection(sections, slides, name, afterSlideIndex, idGenerator = generateSectionId) {
98617
+ function addSection(sections2, slides, name, afterSlideIndex, idGenerator = generateSectionId) {
98195
98618
  const newId = idGenerator();
98196
98619
  const slideAtIndex = slides[afterSlideIndex];
98197
98620
  const currentSectionId = slideAtIndex?.sectionId;
@@ -98206,9 +98629,9 @@ function addSection(sections, slides, name, afterSlideIndex, idGenerator = gener
98206
98629
  const nextSlides = slides.map(
98207
98630
  (s, i) => claimedSlideIndexes.includes(i) ? { ...s, sectionId: newId, sectionName: name } : s
98208
98631
  );
98209
- const insertIndex = currentSectionId !== void 0 ? sections.findIndex((sec) => sec.id === currentSectionId) + 1 : sections.length;
98632
+ const insertIndex = currentSectionId !== void 0 ? sections2.findIndex((sec) => sec.id === currentSectionId) + 1 : sections2.length;
98210
98633
  const newSectionSlideIds = claimedSlideIndexes.map((i) => resolveSlideId(slides[i], i));
98211
- const updated = sections.map(
98634
+ const updated = sections2.map(
98212
98635
  (sec) => sec.id === currentSectionId ? { ...sec, slideIds: sec.slideIds.filter((sid) => !newSectionSlideIds.includes(sid)) } : sec
98213
98636
  );
98214
98637
  const newSection = { id: newId, name, slideIds: newSectionSlideIds };
@@ -98216,20 +98639,20 @@ function addSection(sections, slides, name, afterSlideIndex, idGenerator = gener
98216
98639
  nextSections.splice(insertIndex, 0, newSection);
98217
98640
  return { sections: nextSections, slides: nextSlides };
98218
98641
  }
98219
- function renameSection(sections, slides, sectionId, newName) {
98642
+ function renameSection(sections2, slides, sectionId, newName) {
98220
98643
  return {
98221
- sections: sections.map((sec) => sec.id === sectionId ? { ...sec, name: newName } : sec),
98644
+ sections: sections2.map((sec) => sec.id === sectionId ? { ...sec, name: newName } : sec),
98222
98645
  slides: slides.map((s) => s.sectionId === sectionId ? { ...s, sectionName: newName } : s)
98223
98646
  };
98224
98647
  }
98225
- function deleteSection(sections, slides, sectionId) {
98226
- const idx = sections.findIndex((sec) => sec.id === sectionId);
98648
+ function deleteSection(sections2, slides, sectionId) {
98649
+ const idx = sections2.findIndex((sec) => sec.id === sectionId);
98227
98650
  if (idx === -1) {
98228
- return { sections, slides };
98651
+ return { sections: sections2, slides };
98229
98652
  }
98230
- const deletedSection = sections[idx];
98231
- const prevSection = idx > 0 ? sections[idx - 1] : void 0;
98232
- const filtered = sections.filter((sec) => sec.id !== sectionId);
98653
+ const deletedSection = sections2[idx];
98654
+ const prevSection = idx > 0 ? sections2[idx - 1] : void 0;
98655
+ const filtered = sections2.filter((sec) => sec.id !== sectionId);
98233
98656
  const nextSections = prevSection !== void 0 ? filtered.map(
98234
98657
  (sec) => sec.id === prevSection.id ? { ...sec, slideIds: [...sec.slideIds, ...deletedSection.slideIds] } : sec
98235
98658
  ) : filtered;
@@ -98244,34 +98667,34 @@ function deleteSection(sections, slides, sectionId) {
98244
98667
  });
98245
98668
  return { sections: nextSections, slides: nextSlides };
98246
98669
  }
98247
- function moveSectionUp(sections, sectionId) {
98248
- const idx = sections.findIndex((sec) => sec.id === sectionId);
98670
+ function moveSectionUp(sections2, sectionId) {
98671
+ const idx = sections2.findIndex((sec) => sec.id === sectionId);
98249
98672
  if (idx <= 0) {
98250
- return sections;
98673
+ return sections2;
98251
98674
  }
98252
- const next = [...sections];
98675
+ const next = [...sections2];
98253
98676
  [next[idx - 1], next[idx]] = [next[idx], next[idx - 1]];
98254
98677
  return next;
98255
98678
  }
98256
- function moveSectionDown(sections, sectionId) {
98257
- const idx = sections.findIndex((sec) => sec.id === sectionId);
98258
- if (idx === -1 || idx >= sections.length - 1) {
98259
- return sections;
98679
+ function moveSectionDown(sections2, sectionId) {
98680
+ const idx = sections2.findIndex((sec) => sec.id === sectionId);
98681
+ if (idx === -1 || idx >= sections2.length - 1) {
98682
+ return sections2;
98260
98683
  }
98261
- const next = [...sections];
98684
+ const next = [...sections2];
98262
98685
  [next[idx], next[idx + 1]] = [next[idx + 1], next[idx]];
98263
98686
  return next;
98264
98687
  }
98265
- function moveSlidesToSection(sections, slides, slideIndexes, targetSectionId) {
98266
- const targetSection = sections.find((sec) => sec.id === targetSectionId);
98688
+ function moveSlidesToSection(sections2, slides, slideIndexes, targetSectionId) {
98689
+ const targetSection = sections2.find((sec) => sec.id === targetSectionId);
98267
98690
  if (!targetSection) {
98268
- return { sections, slides };
98691
+ return { sections: sections2, slides };
98269
98692
  }
98270
98693
  const nextSlides = slides.map(
98271
98694
  (s, i) => slideIndexes.includes(i) ? { ...s, sectionId: targetSectionId, sectionName: targetSection.name } : s
98272
98695
  );
98273
98696
  const movedSlideIds = slideIndexes.map((i) => resolveSlideId(slides[i], i));
98274
- const nextSections = sections.map((sec) => {
98697
+ const nextSections = sections2.map((sec) => {
98275
98698
  if (sec.id === targetSectionId) {
98276
98699
  return {
98277
98700
  ...sec,
@@ -98846,7 +99269,7 @@ function buildTextBlockStyle(element, options = {}) {
98846
99269
  style.unicodeBidi = "plaintext";
98847
99270
  }
98848
99271
  style.fontSize = ts?.fontSize || DEFAULT_TEXT_FONT_SIZE;
98849
- style.fontFamily = ts?.fontFamily || DEFAULT_FONT_FAMILY;
99272
+ style.fontFamily = ts?.fontFamily ? getSubstituteFontFamily(ts.fontFamily, parsePanoseString(ts.latinFontPanose)) : DEFAULT_FONT_FAMILY;
98850
99273
  style.fontWeight = ts?.bold ? 700 : 400;
98851
99274
  style.fontStyle = ts?.italic ? "italic" : "normal";
98852
99275
  style.textDecorationLine = decorations.length > 0 ? decorations.join(" ") : "none";
@@ -99900,8 +100323,8 @@ function toAbsolute(child22, offsetX, offsetY) {
99900
100323
  function sameBox(a, b) {
99901
100324
  return Math.abs(a.x - b.x) <= 0.5 && Math.abs(a.y - b.y) <= 0.5 && Math.abs(a.width - b.width) <= 0.5 && Math.abs(a.height - b.height) <= 0.5;
99902
100325
  }
99903
- function correspondingGroup(group, candidates) {
99904
- const morphName = getElementMorphName(group);
100326
+ function correspondingGroup(group2, candidates) {
100327
+ const morphName = getElementMorphName(group2);
99905
100328
  return candidates.find((candidate) => {
99906
100329
  if (candidate.type !== "group") {
99907
100330
  return false;
@@ -99909,10 +100332,10 @@ function correspondingGroup(group, candidates) {
99909
100332
  if (morphName !== void 0 && getElementMorphName(candidate) === morphName) {
99910
100333
  return true;
99911
100334
  }
99912
- if (group.name && candidate.name === group.name) {
100335
+ if (group2.name && candidate.name === group2.name) {
99913
100336
  return true;
99914
100337
  }
99915
- return sameBox(group, candidate);
100338
+ return sameBox(group2, candidate);
99916
100339
  });
99917
100340
  }
99918
100341
  function flattenMorphElements(elements, counterpart, offsetX = 0, offsetY = 0) {
@@ -106304,8 +106727,8 @@ async function loadOrbitControlsCtor() {
106304
106727
  }
106305
106728
  }
106306
106729
  function loadGltf(loader, url) {
106307
- return new Promise((resolve, reject) => {
106308
- loader.load(url, resolve, void 0, reject);
106730
+ return new Promise((resolve2, reject) => {
106731
+ loader.load(url, resolve2, void 0, reject);
106309
106732
  });
106310
106733
  }
106311
106734
  function centerAndFit(three, root) {
@@ -106772,9 +107195,9 @@ function isExportAbortError(err) {
106772
107195
  }
106773
107196
  var PPTX_OPEN_ACCEPT = ".pptx,.ppsx,.pptm,.potx";
106774
107197
  function openFilePicker(options = {}) {
106775
- return new Promise((resolve) => {
107198
+ return new Promise((resolve2) => {
106776
107199
  if (typeof document === "undefined") {
106777
- resolve(null);
107200
+ resolve2(null);
106778
107201
  return;
106779
107202
  }
106780
107203
  const input = document.createElement("input");
@@ -106790,7 +107213,7 @@ function openFilePicker(options = {}) {
106790
107213
  }
106791
107214
  settled = true;
106792
107215
  input.remove();
106793
- resolve(file);
107216
+ resolve2(file);
106794
107217
  };
106795
107218
  input.addEventListener("change", () => finish(input.files?.[0] ?? null));
106796
107219
  input.addEventListener("cancel", () => finish(null));
@@ -106816,12 +107239,6 @@ function mobileSlideCounter(currentIndex, total) {
106816
107239
  }
106817
107240
  return `${currentIndex + 1} / ${total}`;
106818
107241
  }
106819
- function isFirstSlide(currentIndex) {
106820
- return currentIndex <= 0;
106821
- }
106822
- function isLastSlide(currentIndex, total) {
106823
- return currentIndex >= total - 1;
106824
- }
106825
107242
  function pad2(value) {
106826
107243
  return String(value).padStart(2, "0");
106827
107244
  }
@@ -107363,7 +107780,7 @@ async function swapPresentationWindows(presenter, audience) {
107363
107780
  }
107364
107781
  }
107365
107782
  function openDeckDb() {
107366
- return new Promise((resolve, reject) => {
107783
+ return new Promise((resolve2, reject) => {
107367
107784
  const request = indexedDB.open(DB_NAME, DB_VERSION);
107368
107785
  request.onupgradeneeded = () => {
107369
107786
  const db = request.result;
@@ -107371,13 +107788,13 @@ function openDeckDb() {
107371
107788
  db.createObjectStore(STORE_NAME);
107372
107789
  }
107373
107790
  };
107374
- request.onsuccess = () => resolve(request.result);
107791
+ request.onsuccess = () => resolve2(request.result);
107375
107792
  request.onerror = () => reject(request.error);
107376
107793
  });
107377
107794
  }
107378
107795
  async function storePresentationDeck(sessionId, content) {
107379
107796
  const db = await openDeckDb();
107380
- return new Promise((resolve, reject) => {
107797
+ return new Promise((resolve2, reject) => {
107381
107798
  const tx = db.transaction(STORE_NAME, "readwrite");
107382
107799
  const bytes = content instanceof Uint8Array ? content : new Uint8Array(content);
107383
107800
  tx.objectStore(STORE_NAME).put(
@@ -107386,7 +107803,7 @@ async function storePresentationDeck(sessionId, content) {
107386
107803
  );
107387
107804
  tx.oncomplete = () => {
107388
107805
  db.close();
107389
- resolve();
107806
+ resolve2();
107390
107807
  };
107391
107808
  tx.onerror = () => {
107392
107809
  db.close();
@@ -107397,17 +107814,17 @@ async function storePresentationDeck(sessionId, content) {
107397
107814
  async function loadPresentationDeck(sessionId) {
107398
107815
  try {
107399
107816
  const db = await openDeckDb();
107400
- return await new Promise((resolve, reject) => {
107817
+ return await new Promise((resolve2, reject) => {
107401
107818
  const request = db.transaction(STORE_NAME, "readonly").objectStore(STORE_NAME).get(sessionId);
107402
107819
  request.onsuccess = () => {
107403
107820
  db.close();
107404
107821
  const record = request.result;
107405
107822
  if (!record || Date.now() - record.createdAt > MAX_DECK_AGE_MS) {
107406
- resolve(null);
107823
+ resolve2(null);
107407
107824
  return;
107408
107825
  }
107409
107826
  const raw = record.bytes;
107410
- resolve(
107827
+ resolve2(
107411
107828
  raw instanceof Uint8Array ? raw : raw instanceof ArrayBuffer ? new Uint8Array(raw) : null
107412
107829
  );
107413
107830
  };
@@ -107423,16 +107840,16 @@ async function loadPresentationDeck(sessionId) {
107423
107840
  async function clearPresentationDeck(sessionId) {
107424
107841
  try {
107425
107842
  const db = await openDeckDb();
107426
- await new Promise((resolve) => {
107843
+ await new Promise((resolve2) => {
107427
107844
  const tx = db.transaction(STORE_NAME, "readwrite");
107428
107845
  tx.objectStore(STORE_NAME).delete(sessionId);
107429
107846
  tx.oncomplete = () => {
107430
107847
  db.close();
107431
- resolve();
107848
+ resolve2();
107432
107849
  };
107433
107850
  tx.onerror = () => {
107434
107851
  db.close();
107435
- resolve();
107852
+ resolve2();
107436
107853
  };
107437
107854
  });
107438
107855
  } catch {
@@ -107444,7 +107861,7 @@ var STORE_NAME2 = "content";
107444
107861
  var CONTENT_KEY = "pptx-bytes";
107445
107862
  var MAX_CONTENT_AGE_MS = 5 * 60 * 1e3;
107446
107863
  function openDb() {
107447
- return new Promise((resolve, reject) => {
107864
+ return new Promise((resolve2, reject) => {
107448
107865
  const request = indexedDB.open(DB_NAME2, DB_VERSION2);
107449
107866
  request.onupgradeneeded = () => {
107450
107867
  const db = request.result;
@@ -107452,7 +107869,7 @@ function openDb() {
107452
107869
  db.createObjectStore(STORE_NAME2);
107453
107870
  }
107454
107871
  };
107455
- request.onsuccess = () => resolve(request.result);
107872
+ request.onsuccess = () => resolve2(request.result);
107456
107873
  request.onerror = () => reject(request.error);
107457
107874
  });
107458
107875
  }
@@ -107461,7 +107878,7 @@ async function storeAudienceContent(content, sessionId) {
107461
107878
  return storePresentationDeck(sessionId, content);
107462
107879
  }
107463
107880
  const db = await openDb();
107464
- return new Promise((resolve, reject) => {
107881
+ return new Promise((resolve2, reject) => {
107465
107882
  const tx = db.transaction(STORE_NAME2, "readwrite");
107466
107883
  const store = tx.objectStore(STORE_NAME2);
107467
107884
  const bytes = content instanceof Uint8Array ? content : new Uint8Array(content);
@@ -107469,7 +107886,7 @@ async function storeAudienceContent(content, sessionId) {
107469
107886
  store.put(record, CONTENT_KEY);
107470
107887
  tx.oncomplete = () => {
107471
107888
  db.close();
107472
- resolve();
107889
+ resolve2();
107473
107890
  };
107474
107891
  tx.onerror = () => {
107475
107892
  db.close();
@@ -107483,7 +107900,7 @@ async function loadAudienceContent(sessionId) {
107483
107900
  }
107484
107901
  try {
107485
107902
  const db = await openDb();
107486
- return new Promise((resolve, reject) => {
107903
+ return new Promise((resolve2, reject) => {
107487
107904
  const tx = db.transaction(STORE_NAME2, "readonly");
107488
107905
  const store = tx.objectStore(STORE_NAME2);
107489
107906
  const request = store.get(CONTENT_KEY);
@@ -107494,20 +107911,20 @@ async function loadAudienceContent(sessionId) {
107494
107911
  const record = result;
107495
107912
  const age = Date.now() - record.createdAt;
107496
107913
  if (age > MAX_CONTENT_AGE_MS) {
107497
- resolve(null);
107914
+ resolve2(null);
107498
107915
  return;
107499
107916
  }
107500
107917
  const raw = record.bytes;
107501
107918
  if (raw instanceof Uint8Array) {
107502
- resolve(raw);
107919
+ resolve2(raw);
107503
107920
  } else if (raw instanceof ArrayBuffer) {
107504
- resolve(new Uint8Array(raw));
107921
+ resolve2(new Uint8Array(raw));
107505
107922
  } else {
107506
- resolve(null);
107923
+ resolve2(null);
107507
107924
  }
107508
107925
  return;
107509
107926
  }
107510
- resolve(null);
107927
+ resolve2(null);
107511
107928
  };
107512
107929
  request.onerror = () => {
107513
107930
  db.close();
@@ -107524,17 +107941,17 @@ async function clearAudienceContent(sessionId) {
107524
107941
  }
107525
107942
  try {
107526
107943
  const db = await openDb();
107527
- return new Promise((resolve) => {
107944
+ return new Promise((resolve2) => {
107528
107945
  const tx = db.transaction(STORE_NAME2, "readwrite");
107529
107946
  const store = tx.objectStore(STORE_NAME2);
107530
107947
  store.delete(CONTENT_KEY);
107531
107948
  tx.oncomplete = () => {
107532
107949
  db.close();
107533
- resolve();
107950
+ resolve2();
107534
107951
  };
107535
107952
  tx.onerror = () => {
107536
107953
  db.close();
107537
- resolve();
107954
+ resolve2();
107538
107955
  };
107539
107956
  });
107540
107957
  } catch {
@@ -107692,6 +108109,149 @@ var PRESENT_TOOLBAR_CLASSES = {
107692
108109
  /** Underline showing a tool's current colour. */
107693
108110
  swatchBar: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-3 h-0.5 rounded-full"
107694
108111
  };
108112
+ var PRESENTER_CONSOLE_CONTROLS = [
108113
+ {
108114
+ id: "timer-toggle",
108115
+ kind: "button",
108116
+ labelKey: "pptx.presenter.toggleTimer",
108117
+ icon: "circle-pause",
108118
+ activeIcon: "circle-play"
108119
+ },
108120
+ { id: "timer-reset", kind: "button", labelKey: "pptx.presenter.resetTimer", icon: "rotate-ccw" },
108121
+ { id: "divider-timer", kind: "divider" },
108122
+ {
108123
+ id: "all-slides",
108124
+ kind: "button",
108125
+ labelKey: "pptx.presenter.seeAllSlides",
108126
+ icon: "grid-2x2"
108127
+ },
108128
+ { id: "zoom-in", kind: "button", labelKey: "pptx.presenter.zoomIn", icon: "zoom-in" },
108129
+ { id: "zoom-out", kind: "button", labelKey: "pptx.presenter.zoomOut", icon: "zoom-out" },
108130
+ { id: "zoom-reset", kind: "button", labelKey: "pptx.presenter.resetZoom", icon: "scan" },
108131
+ { id: "divider-zoom", kind: "divider" },
108132
+ {
108133
+ id: "laser",
108134
+ kind: "toggle",
108135
+ labelKey: "pptx.presentation.laserPointer",
108136
+ icon: "mouse-pointer-2"
108137
+ },
108138
+ { id: "pen", kind: "toggle", labelKey: "pptx.presentation.pen", icon: "pen-tool" },
108139
+ {
108140
+ id: "highlighter",
108141
+ kind: "toggle",
108142
+ labelKey: "pptx.presentation.highlighter",
108143
+ icon: "highlighter"
108144
+ },
108145
+ { id: "eraser", kind: "toggle", labelKey: "pptx.presentation.eraser", icon: "eraser" },
108146
+ { id: "divider-tools", kind: "divider" },
108147
+ { id: "blackout-black", kind: "toggle", labelKey: "pptx.presenter.blackScreen", glyph: "B" },
108148
+ { id: "blackout-white", kind: "toggle", labelKey: "pptx.presenter.whiteScreen", glyph: "W" },
108149
+ {
108150
+ id: "captions",
108151
+ kind: "toggle",
108152
+ labelKey: "pptx.slideShow.subtitlesTooltip",
108153
+ icon: "captions"
108154
+ },
108155
+ { id: "spacer", kind: "spacer" },
108156
+ {
108157
+ id: "audience",
108158
+ kind: "toggle",
108159
+ labelKey: "pptx.presenter.openAudienceWindow",
108160
+ activeLabelKey: "pptx.presenter.closeAudienceWindow",
108161
+ icon: "monitor",
108162
+ activeIcon: "monitor-off"
108163
+ },
108164
+ {
108165
+ id: "swap-displays",
108166
+ kind: "button",
108167
+ labelKey: "pptx.presenter.swapDisplays",
108168
+ icon: "arrow-left-right"
108169
+ },
108170
+ { id: "end", kind: "button", labelKey: "pptx.presenter.endPresentation", icon: "x" }
108171
+ ];
108172
+ PRESENTER_CONSOLE_CONTROLS.map(
108173
+ (control) => control.id
108174
+ );
108175
+ PRESENTER_CONSOLE_CONTROLS.flatMap(
108176
+ (control) => control.labelKey === void 0 ? [] : [control.labelKey]
108177
+ );
108178
+ var PRESENTER_NAVIGATOR_LABEL_KEYS = {
108179
+ title: "pptx.presenter.slideNavigator",
108180
+ subtitle: "pptx.presenter.seeAllSlides",
108181
+ close: "pptx.presenter.closeNavigator"
108182
+ };
108183
+ function presenterNextDisabled() {
108184
+ return false;
108185
+ }
108186
+ function presenterPrevDisabled(currentIndex) {
108187
+ return currentIndex <= 0;
108188
+ }
108189
+ var PRESENTER_TIMER_SEGMENT_MS = 5 * 60 * 1e3;
108190
+ function presenterTimerProgress(elapsedMs) {
108191
+ const elapsed = Math.max(0, elapsedMs);
108192
+ return {
108193
+ percent: Math.min(
108194
+ 100,
108195
+ elapsed % PRESENTER_TIMER_SEGMENT_MS / PRESENTER_TIMER_SEGMENT_MS * 100
108196
+ ),
108197
+ segment: Math.floor(elapsed / PRESENTER_TIMER_SEGMENT_MS)
108198
+ };
108199
+ }
108200
+ var PRESENTER_CONSOLE_CLASSES = {
108201
+ /** The console root, laid over the show stage. */
108202
+ root: "absolute inset-0 z-50 flex flex-col bg-card text-foreground",
108203
+ /** The control strip across the top. */
108204
+ strip: "flex flex-wrap items-center gap-1 border-b border-border bg-card px-3 py-2",
108205
+ /** A strip control, inactive. */
108206
+ control: "inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors bg-muted text-foreground hover:bg-accent",
108207
+ /** A strip control, active. */
108208
+ controlActive: "inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors bg-primary text-primary-foreground",
108209
+ /** Vertical hairline between strip groups. */
108210
+ divider: "mx-1 h-6 w-px bg-border",
108211
+ /** Flexible gap pushing the trailing group right. */
108212
+ spacer: "flex-1",
108213
+ /** The body row: current-slide pane plus rail. */
108214
+ body: "flex flex-1 min-h-0",
108215
+ /** The current-slide pane. */
108216
+ main: "relative flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden",
108217
+ /** The right-hand rail. */
108218
+ rail: "flex flex-[3] min-w-[260px] max-w-[440px] flex-col border-l border-border bg-background",
108219
+ /** Rail section heading (Current Time / Next Slide / Speaker Notes). */
108220
+ railHeading: "text-[10px] uppercase tracking-wider text-muted-foreground",
108221
+ /** Timer progress bar track. */
108222
+ progressTrack: "h-1.5 w-full bg-muted/60 flex-shrink-0",
108223
+ /** Timer progress bar fill. */
108224
+ progressFill: "h-full bg-primary transition-[width] duration-1000 ease-linear",
108225
+ /** The "all slides" navigator overlay. */
108226
+ navigator: "absolute inset-0 z-[120] overflow-auto bg-card p-6",
108227
+ /** The navigator's tile grid. */
108228
+ navigatorGrid: "grid gap-5 [grid-template-columns:repeat(auto-fill,minmax(220px,1fr))]"
108229
+ };
108230
+ var AUDIENCE_FULLSCREEN_BOUNCE_MS = 1e3;
108231
+ function createPresenterShowGuard(options) {
108232
+ const graceMs = options?.graceMs ?? AUDIENCE_FULLSCREEN_BOUNCE_MS;
108233
+ let armedAt;
108234
+ const stillArmed = (now) => armedAt !== void 0 && now - armedAt >= 0 && now - armedAt <= graceMs;
108235
+ return {
108236
+ expectAudienceBounce(now = Date.now()) {
108237
+ armedAt = now;
108238
+ },
108239
+ classifyFullscreenExit(now = Date.now()) {
108240
+ if (!stillArmed(now)) {
108241
+ armedAt = void 0;
108242
+ return "end-show";
108243
+ }
108244
+ armedAt = void 0;
108245
+ return "restore-show";
108246
+ },
108247
+ isExpectingBounce(now = Date.now()) {
108248
+ return stillArmed(now);
108249
+ },
108250
+ disarm() {
108251
+ armedAt = void 0;
108252
+ }
108253
+ };
108254
+ }
107695
108255
  function createPresentationKeyBuffer() {
107696
108256
  return { digits: "" };
107697
108257
  }
@@ -107946,19 +108506,19 @@ function groupElementParagraphs(element) {
107946
108506
  }
107947
108507
  return groups;
107948
108508
  }
107949
- function paragraphGroupText(group) {
107950
- return group.content.map((segment) => segment.isLineBreak ? " " : segment.text).join("");
108509
+ function paragraphGroupText(group2) {
108510
+ return group2.content.map((segment) => segment.isLineBreak ? " " : segment.text).join("");
107951
108511
  }
107952
- function paragraphGroupLevel(group) {
107953
- const first = group.marker ?? group.content[0];
108512
+ function paragraphGroupLevel(group2) {
108513
+ const first = group2.marker ?? group2.content[0];
107954
108514
  const level = first?.paragraphLevel;
107955
108515
  return typeof level === "number" && level > 0 ? Math.min(level, MAX_PARAGRAPH_LEVEL) : 0;
107956
108516
  }
107957
108517
  function readElementParagraphs(element) {
107958
108518
  const groups = groupElementParagraphs(element);
107959
- const paragraphs = groups.map((group) => ({
107960
- text: paragraphGroupText(group),
107961
- level: paragraphGroupLevel(group)
108519
+ const paragraphs = groups.map((group2) => ({
108520
+ text: paragraphGroupText(group2),
108521
+ level: paragraphGroupLevel(group2)
107962
108522
  }));
107963
108523
  let last = paragraphs.length - 1;
107964
108524
  while (last >= 0 && paragraphs[last].text.length === 0) {
@@ -108073,11 +108633,11 @@ function withLevel(segments, level) {
108073
108633
  return next;
108074
108634
  });
108075
108635
  }
108076
- function rebuildParagraph(group, donor, text2, elementStyle) {
108077
- if (group && paragraphGroupText(group) === text2) {
108078
- return [...group.marker ? [group.marker] : [], ...group.content];
108636
+ function rebuildParagraph(group2, donor, text2, elementStyle) {
108637
+ if (group2 && paragraphGroupText(group2) === text2) {
108638
+ return [...group2.marker ? [group2.marker] : [], ...group2.content];
108079
108639
  }
108080
- const source = group ?? donor;
108640
+ const source = group2 ?? donor;
108081
108641
  const marker = source?.marker ? [source.marker] : [];
108082
108642
  const content = remapTextToSegments(text2, source?.content, elementStyle);
108083
108643
  return [...marker, ...content];
@@ -108860,7 +109420,7 @@ function replacePixels(data, fromColor, toColor, threshold, toTransparent) {
108860
109420
  }
108861
109421
  var DEFAULT_COLOR_CHANGE_TOLERANCE = 12;
108862
109422
  function applyColorChange(imageDataUrl, fromHex, toHex22, tolerancePct = DEFAULT_COLOR_CHANGE_TOLERANCE, toTransparent = false) {
108863
- return new Promise((resolve, reject) => {
109423
+ return new Promise((resolve2, reject) => {
108864
109424
  const fromColor = parseHexToRgb(fromHex);
108865
109425
  const toColor = parseHexToRgb(toHex22);
108866
109426
  if (!fromColor || !toColor) {
@@ -108888,7 +109448,7 @@ function applyColorChange(imageDataUrl, fromHex, toHex22, tolerancePct = DEFAULT
108888
109448
  const threshold = toleranceToThreshold(tolerancePct);
108889
109449
  replacePixels(imageData.data, fromColor, toColor, threshold, toTransparent);
108890
109450
  ctx.putImageData(imageData, 0, 0);
108891
- resolve({
109451
+ resolve2({
108892
109452
  dataUrl: canvas.toDataURL("image/png"),
108893
109453
  width: w,
108894
109454
  height: h
@@ -108939,7 +109499,7 @@ function mapDuotonePixels(data, shadow, highlight) {
108939
109499
  }
108940
109500
  }
108941
109501
  function applyDuotone(imageDataUrl, shadowHex, highlightHex) {
108942
- return new Promise((resolve, reject) => {
109502
+ return new Promise((resolve2, reject) => {
108943
109503
  const shadow = parseHexToRgb(shadowHex);
108944
109504
  const highlight = parseHexToRgb(highlightHex);
108945
109505
  if (!shadow || !highlight) {
@@ -108966,7 +109526,7 @@ function applyDuotone(imageDataUrl, shadowHex, highlightHex) {
108966
109526
  const imageData = ctx.getImageData(0, 0, w, h);
108967
109527
  mapDuotonePixels(imageData.data, shadow, highlight);
108968
109528
  ctx.putImageData(imageData, 0, 0);
108969
- resolve({
109529
+ resolve2({
108970
109530
  dataUrl: canvas.toDataURL("image/png"),
108971
109531
  width: w,
108972
109532
  height: h
@@ -109340,6 +109900,129 @@ function isElementActionable(element, options = {}) {
109340
109900
  }
109341
109901
  return element.type === "zoom" && hasZoomHandler;
109342
109902
  }
109903
+ var LINK_TOOLTIP_HOST_CLASS = "pptx-link-host";
109904
+ var LINK_TOOLTIP_CLASS = "pptx-link-tooltip";
109905
+ var LINK_TOOLTIP_PANEL_CLASS = "pptx-link-tooltip-panel";
109906
+ var LINK_TOOLTIP_LABEL_CLASS = "pptx-link-tooltip-label";
109907
+ var LINK_TOOLTIP_HINT_CLASS = "pptx-link-tooltip-hint";
109908
+ var ACTION_INDICATOR_CLASS = "pptx-action-indicator";
109909
+ var ACTION_INDICATOR_ICON_PATH = "M13 2L3 14h9l-1 8 10-12h-9l1-8z";
109910
+ var ACTION_AFFORDANCE_CSS = `
109911
+ .${ACTION_INDICATOR_CLASS} {
109912
+ position: absolute;
109913
+ top: -4px;
109914
+ right: -4px;
109915
+ z-index: 20;
109916
+ display: flex;
109917
+ width: 16px;
109918
+ height: 16px;
109919
+ align-items: center;
109920
+ justify-content: center;
109921
+ border-radius: 9999px;
109922
+ background: #f59e0b;
109923
+ /* Left pointer-interactive on purpose: the badge's native title attribute is
109924
+ the only place the deck's screen tip is readable, and a title on a
109925
+ pointer-transparent node never fires. Clicks still reach the element
109926
+ underneath by bubbling, so nothing is swallowed. */
109927
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
109928
+ }
109929
+ .${ACTION_INDICATOR_CLASS} svg {
109930
+ width: 10px;
109931
+ height: 10px;
109932
+ color: #fff;
109933
+ }
109934
+ .${LINK_TOOLTIP_CLASS} {
109935
+ position: absolute;
109936
+ top: 100%;
109937
+ left: 4px;
109938
+ z-index: 9999;
109939
+ max-width: 16rem;
109940
+ margin-top: 4px;
109941
+ opacity: 0;
109942
+ transition: opacity 150ms;
109943
+ pointer-events: none;
109944
+ font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
109945
+ text-align: left;
109946
+ }
109947
+ .${LINK_TOOLTIP_HOST_CLASS}:hover > .${LINK_TOOLTIP_CLASS} {
109948
+ opacity: 1;
109949
+ }
109950
+ .${LINK_TOOLTIP_PANEL_CLASS} {
109951
+ border: 1px solid var(--pptx-border, #374151);
109952
+ border-radius: 0.25rem;
109953
+ background: var(--pptx-popover, #111827);
109954
+ padding: 6px 10px;
109955
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
109956
+ }
109957
+ .${LINK_TOOLTIP_LABEL_CLASS} {
109958
+ overflow: hidden;
109959
+ color: var(--pptx-foreground, #f3f4f6);
109960
+ font-size: 12px;
109961
+ font-weight: 400;
109962
+ font-style: normal;
109963
+ line-height: 16px;
109964
+ letter-spacing: normal;
109965
+ text-decoration: none;
109966
+ text-overflow: ellipsis;
109967
+ text-transform: none;
109968
+ white-space: nowrap;
109969
+ }
109970
+ .${LINK_TOOLTIP_HINT_CLASS} {
109971
+ margin-top: 2px;
109972
+ color: var(--pptx-muted-foreground, #9ca3af);
109973
+ font-size: 10px;
109974
+ font-weight: 400;
109975
+ font-style: normal;
109976
+ line-height: 12px;
109977
+ letter-spacing: normal;
109978
+ text-decoration: none;
109979
+ text-transform: none;
109980
+ }
109981
+ `;
109982
+ var AFFORDANCE_STYLE_ELEMENT_ID = "pptx-action-affordance-styles";
109983
+ function ensureActionAffordanceStyles(doc) {
109984
+ const target = doc ?? (typeof document === "undefined" ? void 0 : document);
109985
+ if (!target || target.getElementById(AFFORDANCE_STYLE_ELEMENT_ID)) {
109986
+ return;
109987
+ }
109988
+ const style = target.createElement("style");
109989
+ style.id = AFFORDANCE_STYLE_ELEMENT_ID;
109990
+ style.textContent = ACTION_AFFORDANCE_CSS;
109991
+ (target.head ?? target.documentElement).appendChild(style);
109992
+ }
109993
+ function actionAffordanceLabels(translate) {
109994
+ return {
109995
+ hasAction: translate("pptx.element.hasAction"),
109996
+ link: translate("pptx.element.linkFallback"),
109997
+ followLink: translate("pptx.linkTooltip.followLink"),
109998
+ presentationMode: translate("pptx.linkTooltip.presentationMode")
109999
+ };
110000
+ }
110001
+ var NO_AFFORDANCE = Object.freeze({
110002
+ showIndicator: false,
110003
+ indicatorTitle: "",
110004
+ showLinkTooltip: false,
110005
+ linkTooltipLabel: "",
110006
+ linkTooltipHint: ""
110007
+ });
110008
+ function resolveElementActionAffordance(element, context) {
110009
+ const { canInteract, presenting = false, labels } = context;
110010
+ const click = element.actionClick;
110011
+ const hover = element.actionHover;
110012
+ if (!canInteract || presenting || !click && !hover) {
110013
+ return NO_AFFORDANCE;
110014
+ }
110015
+ const hasUrl = Boolean(click?.url);
110016
+ return {
110017
+ showIndicator: true,
110018
+ indicatorTitle: click?.tooltip || hover?.tooltip || labels.hasAction,
110019
+ // The tooltip names a CLICK destination, so a hover-only action gets the
110020
+ // badge but no popover: there is nothing to follow and no key to press.
110021
+ showLinkTooltip: Boolean(click),
110022
+ linkTooltipLabel: click?.tooltip || click?.url || click?.action || labels.link,
110023
+ linkTooltipHint: hasUrl ? labels.followLink : labels.presentationMode
110024
+ };
110025
+ }
109343
110026
  var ELEMENT_ACTION_TYPE_OPTIONS = [
109344
110027
  { value: "none", labelKey: "pptx.hyperlink.actionNone" },
109345
110028
  { value: "url", labelKey: "pptx.action.gotoUrl" },
@@ -109828,6 +110511,19 @@ function rebuildDrawingShapesIfCleared(smartArtData, layout, palette, style, ele
109828
110511
  drawingShapes: reflowToDrawingShapes(layoutResult, smartArtData.nodes)
109829
110512
  };
109830
110513
  }
110514
+ function mediaPlaybackAttributes(source) {
110515
+ return {
110516
+ loop: source.loop === true,
110517
+ volume: Math.max(0, Math.min(1, source.volume ?? 1)),
110518
+ playbackRate: Math.max(0.25, Math.min(4, source.playbackSpeed ?? 1))
110519
+ };
110520
+ }
110521
+ function mediaTransportVisible(surface) {
110522
+ if (surface.presenting || surface.preview) {
110523
+ return false;
110524
+ }
110525
+ return surface.canvasTransport;
110526
+ }
109831
110527
  function buildSummaryZoomView(element, lookup) {
109832
110528
  if (element.zoomType !== "summary" || !element.summaryTargets?.length) {
109833
110529
  return void 0;
@@ -110919,7 +111615,7 @@ var AUTOSAVE_DB_NAME = "pptx-viewer-autosave";
110919
111615
  var AUTOSAVE_DB_VERSION = 1;
110920
111616
  var AUTOSAVE_STORE_NAME = "recoveryVersions";
110921
111617
  function openAutosaveDb() {
110922
- return new Promise((resolve, reject) => {
111618
+ return new Promise((resolve2, reject) => {
110923
111619
  const req = indexedDB.open(AUTOSAVE_DB_NAME, AUTOSAVE_DB_VERSION);
110924
111620
  req.onupgradeneeded = () => {
110925
111621
  const db = req.result;
@@ -110927,13 +111623,13 @@ function openAutosaveDb() {
110927
111623
  db.createObjectStore(AUTOSAVE_STORE_NAME, { keyPath: "key" });
110928
111624
  }
110929
111625
  };
110930
- req.onsuccess = () => resolve(req.result);
111626
+ req.onsuccess = () => resolve2(req.result);
110931
111627
  req.onerror = () => reject(req.error);
110932
111628
  });
110933
111629
  }
110934
111630
  async function deleteOldestAutosaveEntry() {
110935
111631
  const db = await openAutosaveDb();
110936
- return new Promise((resolve) => {
111632
+ return new Promise((resolve2) => {
110937
111633
  try {
110938
111634
  const tx = db.transaction(AUTOSAVE_STORE_NAME, "readwrite");
110939
111635
  const store = tx.objectStore(AUTOSAVE_STORE_NAME);
@@ -110955,24 +111651,24 @@ async function deleteOldestAutosaveEntry() {
110955
111651
  };
110956
111652
  tx.oncomplete = () => {
110957
111653
  db.close();
110958
- resolve(oldestKey !== null);
111654
+ resolve2(oldestKey !== null);
110959
111655
  };
110960
111656
  tx.onerror = () => {
110961
111657
  db.close();
110962
- resolve(false);
111658
+ resolve2(false);
110963
111659
  };
110964
111660
  } catch {
110965
111661
  try {
110966
111662
  db.close();
110967
111663
  } catch {
110968
111664
  }
110969
- resolve(false);
111665
+ resolve2(false);
110970
111666
  }
110971
111667
  });
110972
111668
  }
110973
111669
  function putAutosaveRecord(filePath, data) {
110974
111670
  return openAutosaveDb().then(
110975
- (db) => new Promise((resolve, reject) => {
111671
+ (db) => new Promise((resolve2, reject) => {
110976
111672
  const tx = db.transaction(AUTOSAVE_STORE_NAME, "readwrite");
110977
111673
  const store = tx.objectStore(AUTOSAVE_STORE_NAME);
110978
111674
  store.put({
@@ -110983,7 +111679,7 @@ function putAutosaveRecord(filePath, data) {
110983
111679
  });
110984
111680
  tx.oncomplete = () => {
110985
111681
  db.close();
110986
- resolve(true);
111682
+ resolve2(true);
110987
111683
  };
110988
111684
  tx.onerror = () => {
110989
111685
  db.close();
@@ -110994,23 +111690,23 @@ function putAutosaveRecord(filePath, data) {
110994
111690
  }
110995
111691
  async function getAutosaveSnapshot(filePath) {
110996
111692
  const db = await openAutosaveDb();
110997
- return new Promise((resolve) => {
111693
+ return new Promise((resolve2) => {
110998
111694
  const tx = db.transaction(AUTOSAVE_STORE_NAME, "readonly");
110999
111695
  const store = tx.objectStore(AUTOSAVE_STORE_NAME);
111000
111696
  const req = store.get(filePath);
111001
111697
  req.onsuccess = () => {
111002
111698
  db.close();
111003
- resolve(req.result);
111699
+ resolve2(req.result);
111004
111700
  };
111005
111701
  req.onerror = () => {
111006
111702
  db.close();
111007
- resolve(void 0);
111703
+ resolve2(void 0);
111008
111704
  };
111009
111705
  });
111010
111706
  }
111011
111707
  async function listAutosaveSnapshots() {
111012
111708
  const db = await openAutosaveDb();
111013
- return new Promise((resolve) => {
111709
+ return new Promise((resolve2) => {
111014
111710
  const results = [];
111015
111711
  try {
111016
111712
  const tx = db.transaction(AUTOSAVE_STORE_NAME, "readonly");
@@ -111026,42 +111722,42 @@ async function listAutosaveSnapshots() {
111026
111722
  };
111027
111723
  tx.oncomplete = () => {
111028
111724
  db.close();
111029
- resolve(results);
111725
+ resolve2(results);
111030
111726
  };
111031
111727
  tx.onerror = () => {
111032
111728
  db.close();
111033
- resolve([]);
111729
+ resolve2([]);
111034
111730
  };
111035
111731
  } catch {
111036
111732
  try {
111037
111733
  db.close();
111038
111734
  } catch {
111039
111735
  }
111040
- resolve([]);
111736
+ resolve2([]);
111041
111737
  }
111042
111738
  });
111043
111739
  }
111044
111740
  async function deleteAutosaveSnapshot(filePath) {
111045
111741
  const db = await openAutosaveDb();
111046
- return new Promise((resolve) => {
111742
+ return new Promise((resolve2) => {
111047
111743
  try {
111048
111744
  const tx = db.transaction(AUTOSAVE_STORE_NAME, "readwrite");
111049
111745
  const store = tx.objectStore(AUTOSAVE_STORE_NAME);
111050
111746
  store.delete(filePath);
111051
111747
  tx.oncomplete = () => {
111052
111748
  db.close();
111053
- resolve(true);
111749
+ resolve2(true);
111054
111750
  };
111055
111751
  tx.onerror = () => {
111056
111752
  db.close();
111057
- resolve(false);
111753
+ resolve2(false);
111058
111754
  };
111059
111755
  } catch {
111060
111756
  try {
111061
111757
  db.close();
111062
111758
  } catch {
111063
111759
  }
111064
- resolve(false);
111760
+ resolve2(false);
111065
111761
  }
111066
111762
  });
111067
111763
  }
@@ -111894,17 +112590,17 @@ function shouldConfirmExternalHyperlink(options, href) {
111894
112590
  }
111895
112591
  return /^https?:/i.test(href);
111896
112592
  }
111897
- function toggle(group, key, labelKey, extra) {
111898
- return { kind: "toggle", group, key, labelKey, ...extra };
112593
+ function toggle(group2, key, labelKey, extra) {
112594
+ return { kind: "toggle", group: group2, key, labelKey, ...extra };
111899
112595
  }
111900
- function select(group, key, labelKey, choiceList) {
111901
- return { kind: "select", group, key, labelKey, choices: choiceList };
112596
+ function select(group2, key, labelKey, choiceList) {
112597
+ return { kind: "select", group: group2, key, labelKey, choices: choiceList };
111902
112598
  }
111903
- function numberControl(group, key, labelKey, min, max, unitKey) {
111904
- return { kind: "number", group, key, labelKey, min, max, unitKey };
112599
+ function numberControl(group2, key, labelKey, min, max, unitKey) {
112600
+ return { kind: "number", group: group2, key, labelKey, min, max, unitKey };
111905
112601
  }
111906
- function textControl(group, key, labelKey) {
111907
- return { kind: "text", group, key, labelKey, maxLength: 64 };
112602
+ function textControl(group2, key, labelKey) {
112603
+ return { kind: "text", group: group2, key, labelKey, maxLength: 64 };
111908
112604
  }
111909
112605
  function choices(prefix, values) {
111910
112606
  return values.map((value) => ({ value, labelKey: `${prefix}.${value}` }));
@@ -112386,17 +113082,17 @@ function createViewerOptionsStore(init) {
112386
113082
  return {
112387
113083
  getOptions: () => options,
112388
113084
  setOptions: (next) => commit(cloneOptions(next)),
112389
- setValue: (group, key, value) => {
112390
- const defaults = DEFAULT_VIEWER_OPTIONS[group];
113085
+ setValue: (group2, key, value) => {
113086
+ const defaults = DEFAULT_VIEWER_OPTIONS[group2];
112391
113087
  if (!(key in defaults) || typeof defaults[key] !== typeof value) {
112392
113088
  return;
112393
113089
  }
112394
113090
  const next = cloneOptions(options);
112395
- next[group][key] = value;
113091
+ next[group2][key] = value;
112396
113092
  commit(next);
112397
113093
  },
112398
- getValue: (group, key) => {
112399
- const record = options[group];
113094
+ getValue: (group2, key) => {
113095
+ const record = options[group2];
112400
113096
  const value = record[key];
112401
113097
  return typeof value === "boolean" || typeof value === "number" || typeof value === "string" ? value : void 0;
112402
113098
  },
@@ -112418,14 +113114,14 @@ function createViewerOptionsStore(init) {
112418
113114
  next.quickAccess.commandIds = [...commandIds];
112419
113115
  commit(next);
112420
113116
  },
112421
- reset: (group) => {
112422
- if (!group) {
113117
+ reset: (group2) => {
113118
+ if (!group2) {
112423
113119
  commit(cloneOptions(DEFAULT_VIEWER_OPTIONS));
112424
113120
  return;
112425
113121
  }
112426
113122
  const next = cloneOptions(options);
112427
113123
  const defaults = cloneOptions(DEFAULT_VIEWER_OPTIONS);
112428
- next[group] = defaults[group];
113124
+ next[group2] = defaults[group2];
112429
113125
  commit(next);
112430
113126
  },
112431
113127
  subscribe: (listener) => {
@@ -113375,7 +114071,7 @@ var VAR_DEPENDENT_PROPERTIES = [
113375
114071
  function resolveCustomProperties(root) {
113376
114072
  const elements = root.querySelectorAll("*");
113377
114073
  const view = root.ownerDocument?.defaultView ?? window;
113378
- const resolve = (el) => {
114074
+ const resolve2 = (el) => {
113379
114075
  const htmlEl = el;
113380
114076
  if (!htmlEl.style) {
113381
114077
  return;
@@ -113391,8 +114087,8 @@ function resolveCustomProperties(root) {
113391
114087
  }
113392
114088
  }
113393
114089
  };
113394
- resolve(root);
113395
- elements.forEach(resolve);
114090
+ resolve2(root);
114091
+ elements.forEach(resolve2);
113396
114092
  }
113397
114093
  function preprocessCssForCapture(root, options = {}) {
113398
114094
  const {
@@ -113430,9 +114126,9 @@ async function blobUrlToDataUrl(blobUrl) {
113430
114126
  try {
113431
114127
  const response = await fetch(blobUrl);
113432
114128
  const blob = await response.blob();
113433
- return await new Promise((resolve, reject) => {
114129
+ return await new Promise((resolve2, reject) => {
113434
114130
  const reader = new FileReader();
113435
- reader.onloadend = () => resolve(reader.result);
114131
+ reader.onloadend = () => resolve2(reader.result);
113436
114132
  reader.onerror = reject;
113437
114133
  reader.readAsDataURL(blob);
113438
114134
  });
@@ -113551,7 +114247,7 @@ var COMPLEX_COLOR_PROPERTIES = [
113551
114247
  ];
113552
114248
  function resolveUnsupportedColours(root) {
113553
114249
  const elements = root.querySelectorAll("*");
113554
- const resolve = (el) => {
114250
+ const resolve2 = (el) => {
113555
114251
  const htmlEl = el;
113556
114252
  if (!htmlEl.style) {
113557
114253
  return;
@@ -113581,8 +114277,8 @@ function resolveUnsupportedColours(root) {
113581
114277
  }
113582
114278
  }
113583
114279
  };
113584
- resolve(root);
113585
- elements.forEach(resolve);
114280
+ resolve2(root);
114281
+ elements.forEach(resolve2);
113586
114282
  }
113587
114283
  function resolveRootCustomProperties(doc) {
113588
114284
  const targets = [doc.documentElement, doc.body];
@@ -114098,4 +114794,4 @@ function segmentFrameCount(durationMs, fps) {
114098
114794
  * `<p:extLst>` (optional)
114099
114795
  */
114100
114796
 
114101
- export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PEN_COLORS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, animationEffectLabel, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, hiddenSlideCue, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapOutlineKey, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, runPresentationAction, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };
114797
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PEN_COLORS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, animationEffectLabel, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartAreaFill, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, hiddenSlideCue, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isImageLikeElement, isInkElement, isKeyboardOpen, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapOutlineKey, mapPresentationKey, mayLeaveSlideShow, mediaPlaybackAttributes, mediaTransportVisible, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveElementActionAffordance, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, runPresentationAction, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };