pptx-react-viewer 3.15.0 → 3.16.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 (143) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{AiChatPanel-TBIAQSZ7.mjs → AiChatPanel-FAAO6JYZ.mjs} +3 -3
  3. package/dist/AiChatPanel-FAAO6JYZ.mjs.br +0 -0
  4. package/dist/AiChatPanel-FAAO6JYZ.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-7CWOJ3PS.js → AiChatPanel-WSH2K7T4.js} +24 -24
  6. package/dist/AiChatPanel-WSH2K7T4.js.br +0 -0
  7. package/dist/AiChatPanel-WSH2K7T4.js.gz +0 -0
  8. package/dist/{Area3DChartScene-6FFBYPHF.mjs → Area3DChartScene-LGLVVQEB.mjs} +1 -1
  9. package/dist/Area3DChartScene-LGLVVQEB.mjs.br +0 -0
  10. package/dist/Area3DChartScene-LGLVVQEB.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-ZJYR6K66.js → Area3DChartScene-PTKML4PN.js} +2 -2
  12. package/dist/Area3DChartScene-PTKML4PN.js.br +0 -0
  13. package/dist/Area3DChartScene-PTKML4PN.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-42MWINQX.mjs → Bar3DChartScene-HCP7MA3A.mjs} +1 -1
  15. package/dist/Bar3DChartScene-HCP7MA3A.mjs.br +0 -0
  16. package/dist/Bar3DChartScene-HCP7MA3A.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-JP3BXEZW.js → Bar3DChartScene-UXC4LE44.js} +2 -2
  18. package/dist/Bar3DChartScene-UXC4LE44.js.br +0 -0
  19. package/dist/Bar3DChartScene-UXC4LE44.js.gz +0 -0
  20. package/dist/{Line3DChartScene-YVCSJMWK.mjs → Line3DChartScene-JF54KXMH.mjs} +1 -1
  21. package/dist/Line3DChartScene-JF54KXMH.mjs.br +0 -0
  22. package/dist/Line3DChartScene-JF54KXMH.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-JK3AELXZ.js → Line3DChartScene-Z2EVGX4C.js} +2 -2
  24. package/dist/Line3DChartScene-Z2EVGX4C.js.br +0 -0
  25. package/dist/Line3DChartScene-Z2EVGX4C.js.gz +0 -0
  26. package/dist/{Model3DScene-OXWSYHHK.mjs → Model3DScene-YWQBX477.mjs} +1 -1
  27. package/dist/Model3DScene-YWQBX477.mjs.br +0 -0
  28. package/dist/Model3DScene-YWQBX477.mjs.gz +0 -0
  29. package/dist/{Model3DScene-N6UIMN7T.js → Model3DScene-ZBOF56VV.js} +2 -2
  30. package/dist/Model3DScene-ZBOF56VV.js.br +0 -0
  31. package/dist/Model3DScene-ZBOF56VV.js.gz +0 -0
  32. package/dist/{PieChart3DScene-XK4ETZJC.mjs → PieChart3DScene-4TRQ4V3M.mjs} +1 -1
  33. package/dist/PieChart3DScene-4TRQ4V3M.mjs.br +0 -0
  34. package/dist/PieChart3DScene-4TRQ4V3M.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-Q2Z3ECL4.js → PieChart3DScene-JPQTAS34.js} +2 -2
  36. package/dist/PieChart3DScene-JPQTAS34.js.br +0 -0
  37. package/dist/PieChart3DScene-JPQTAS34.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-KNWMKMOL.mjs → SurfaceChart3DScene-N76RNCUY.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-N76RNCUY.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-N76RNCUY.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-ULBUIF7T.js → SurfaceChart3DScene-P3LX35OP.js} +2 -2
  42. package/dist/SurfaceChart3DScene-P3LX35OP.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-P3LX35OP.js.gz +0 -0
  44. package/dist/{chunk-6547ZWC7.mjs → chunk-6B7A5JNM.mjs} +12 -12
  45. package/dist/chunk-6B7A5JNM.mjs.br +0 -0
  46. package/dist/chunk-6B7A5JNM.mjs.gz +0 -0
  47. package/dist/{chunk-AT4BJKON.mjs → chunk-A6UVUZUX.mjs} +1 -1
  48. package/dist/chunk-A6UVUZUX.mjs.br +0 -0
  49. package/dist/chunk-A6UVUZUX.mjs.gz +0 -0
  50. package/dist/{chunk-C4Q4WYAJ.mjs → chunk-BNR6YPW5.mjs} +12 -34
  51. package/dist/chunk-BNR6YPW5.mjs.br +0 -0
  52. package/dist/chunk-BNR6YPW5.mjs.gz +0 -0
  53. package/dist/{chunk-J7Q7AGN7.mjs → chunk-ERCY52HH.mjs} +1 -1
  54. package/dist/chunk-ERCY52HH.mjs.br +0 -0
  55. package/dist/chunk-ERCY52HH.mjs.gz +0 -0
  56. package/dist/{chunk-5KAMDV37.js → chunk-L2MOKP3E.js} +1057 -375
  57. package/dist/chunk-L2MOKP3E.js.br +0 -0
  58. package/dist/chunk-L2MOKP3E.js.gz +0 -0
  59. package/dist/{chunk-YNTZCMRI.mjs → chunk-QVEPXTUB.mjs} +1056 -371
  60. package/dist/chunk-QVEPXTUB.mjs.br +0 -0
  61. package/dist/chunk-QVEPXTUB.mjs.gz +0 -0
  62. package/dist/{chunk-LAB7WX2N.js → chunk-TJ4L42RA.js} +456 -478
  63. package/dist/chunk-TJ4L42RA.js.br +0 -0
  64. package/dist/chunk-TJ4L42RA.js.gz +0 -0
  65. package/dist/{chunk-GLY4OPMY.js → chunk-W5W75MFP.js} +167 -167
  66. package/dist/chunk-W5W75MFP.js.br +0 -0
  67. package/dist/chunk-W5W75MFP.js.gz +0 -0
  68. package/dist/{chunk-Q6CSZ7VM.js → chunk-WYGPSCMS.js} +1289 -1289
  69. package/dist/chunk-WYGPSCMS.js.br +0 -0
  70. package/dist/chunk-WYGPSCMS.js.gz +0 -0
  71. package/dist/{chunk-VVJTEFGP.js → chunk-Y2UFUL7P.js} +5 -5
  72. package/dist/chunk-Y2UFUL7P.js.br +0 -0
  73. package/dist/chunk-Y2UFUL7P.js.gz +0 -0
  74. package/dist/index.d.ts +2 -0
  75. package/dist/index.js +45 -45
  76. package/dist/index.js.br +0 -0
  77. package/dist/index.js.gz +0 -0
  78. package/dist/index.mjs +5 -5
  79. package/dist/index.mjs.br +0 -0
  80. package/dist/index.mjs.gz +0 -0
  81. package/dist/internals.d.ts +2 -0
  82. package/dist/internals.js +78 -78
  83. package/dist/internals.js.br +0 -0
  84. package/dist/internals.js.gz +0 -0
  85. package/dist/internals.mjs +3 -3
  86. package/dist/internals.mjs.br +0 -0
  87. package/dist/internals.mjs.gz +0 -0
  88. package/dist/viewer/index.d.ts +2 -0
  89. package/dist/viewer/index.js +26 -26
  90. package/dist/viewer/index.js.br +0 -0
  91. package/dist/viewer/index.js.gz +0 -0
  92. package/dist/viewer/index.mjs +5 -5
  93. package/dist/viewer/index.mjs.br +0 -0
  94. package/dist/viewer/index.mjs.gz +0 -0
  95. package/package.json +1 -1
  96. package/dist/AiChatPanel-7CWOJ3PS.js.br +0 -0
  97. package/dist/AiChatPanel-7CWOJ3PS.js.gz +0 -0
  98. package/dist/AiChatPanel-TBIAQSZ7.mjs.br +0 -0
  99. package/dist/AiChatPanel-TBIAQSZ7.mjs.gz +0 -0
  100. package/dist/Area3DChartScene-6FFBYPHF.mjs.br +0 -0
  101. package/dist/Area3DChartScene-6FFBYPHF.mjs.gz +0 -0
  102. package/dist/Area3DChartScene-ZJYR6K66.js.br +0 -0
  103. package/dist/Area3DChartScene-ZJYR6K66.js.gz +0 -0
  104. package/dist/Bar3DChartScene-42MWINQX.mjs.br +0 -0
  105. package/dist/Bar3DChartScene-42MWINQX.mjs.gz +0 -0
  106. package/dist/Bar3DChartScene-JP3BXEZW.js.br +0 -0
  107. package/dist/Bar3DChartScene-JP3BXEZW.js.gz +0 -0
  108. package/dist/Line3DChartScene-JK3AELXZ.js.br +0 -0
  109. package/dist/Line3DChartScene-JK3AELXZ.js.gz +0 -0
  110. package/dist/Line3DChartScene-YVCSJMWK.mjs.br +0 -0
  111. package/dist/Line3DChartScene-YVCSJMWK.mjs.gz +0 -0
  112. package/dist/Model3DScene-N6UIMN7T.js.br +0 -0
  113. package/dist/Model3DScene-N6UIMN7T.js.gz +0 -0
  114. package/dist/Model3DScene-OXWSYHHK.mjs.br +0 -0
  115. package/dist/Model3DScene-OXWSYHHK.mjs.gz +0 -0
  116. package/dist/PieChart3DScene-Q2Z3ECL4.js.br +0 -0
  117. package/dist/PieChart3DScene-Q2Z3ECL4.js.gz +0 -0
  118. package/dist/PieChart3DScene-XK4ETZJC.mjs.br +0 -0
  119. package/dist/PieChart3DScene-XK4ETZJC.mjs.gz +0 -0
  120. package/dist/SurfaceChart3DScene-KNWMKMOL.mjs.br +0 -0
  121. package/dist/SurfaceChart3DScene-KNWMKMOL.mjs.gz +0 -0
  122. package/dist/SurfaceChart3DScene-ULBUIF7T.js.br +0 -0
  123. package/dist/SurfaceChart3DScene-ULBUIF7T.js.gz +0 -0
  124. package/dist/chunk-5KAMDV37.js.br +0 -0
  125. package/dist/chunk-5KAMDV37.js.gz +0 -0
  126. package/dist/chunk-6547ZWC7.mjs.br +0 -0
  127. package/dist/chunk-6547ZWC7.mjs.gz +0 -0
  128. package/dist/chunk-AT4BJKON.mjs.br +0 -0
  129. package/dist/chunk-AT4BJKON.mjs.gz +0 -0
  130. package/dist/chunk-C4Q4WYAJ.mjs.br +0 -0
  131. package/dist/chunk-C4Q4WYAJ.mjs.gz +0 -0
  132. package/dist/chunk-GLY4OPMY.js.br +0 -0
  133. package/dist/chunk-GLY4OPMY.js.gz +0 -0
  134. package/dist/chunk-J7Q7AGN7.mjs.br +0 -0
  135. package/dist/chunk-J7Q7AGN7.mjs.gz +0 -0
  136. package/dist/chunk-LAB7WX2N.js.br +0 -0
  137. package/dist/chunk-LAB7WX2N.js.gz +0 -0
  138. package/dist/chunk-Q6CSZ7VM.js.br +0 -0
  139. package/dist/chunk-Q6CSZ7VM.js.gz +0 -0
  140. package/dist/chunk-VVJTEFGP.js.br +0 -0
  141. package/dist/chunk-VVJTEFGP.js.gz +0 -0
  142. package/dist/chunk-YNTZCMRI.mjs.br +0 -0
  143. package/dist/chunk-YNTZCMRI.mjs.gz +0 -0
@@ -27567,20 +27567,20 @@ function ensureCell(sheetData, ref) {
27567
27567
  }
27568
27568
  sheetData["row"] = rows;
27569
27569
  }
27570
- const cells = toArray(row["c"]);
27571
- let cell = cells.find((c) => String(c["@_r"] ?? "") === ref);
27570
+ const cells2 = toArray(row["c"]);
27571
+ let cell = cells2.find((c) => String(c["@_r"] ?? "") === ref);
27572
27572
  if (!cell) {
27573
27573
  cell = { "@_r": ref };
27574
- const insertAt3 = cells.findIndex((c) => {
27574
+ const insertAt3 = cells2.findIndex((c) => {
27575
27575
  const existingAddress = parseCellAddress(String(c["@_r"] ?? ""));
27576
27576
  return existingAddress !== void 0 && existingAddress.col > address.col;
27577
27577
  });
27578
27578
  if (insertAt3 < 0) {
27579
- cells.push(cell);
27579
+ cells2.push(cell);
27580
27580
  } else {
27581
- cells.splice(insertAt3, 0, cell);
27581
+ cells2.splice(insertAt3, 0, cell);
27582
27582
  }
27583
- row["c"] = cells;
27583
+ row["c"] = cells2;
27584
27584
  }
27585
27585
  return cell;
27586
27586
  }
@@ -28448,6 +28448,9 @@ async function writeOleDocumentParagraphEdit(docxBytes, paragraphIndex, text22)
28448
28448
  };
28449
28449
  const pPr = xmlChild(paragraph, "w:pPr");
28450
28450
  for (const key2 of Object.keys(paragraph)) {
28451
+ if (key2 === "__proto__" || key2 === "constructor" || key2 === "prototype") {
28452
+ continue;
28453
+ }
28451
28454
  delete paragraph[key2];
28452
28455
  }
28453
28456
  if (pPr) {
@@ -33231,7 +33234,7 @@ var init_smartart_layout_interpreter_choose_composite = __esm({
33231
33234
  init_smartart_layout_interpreter_choose_branch();
33232
33235
  }
33233
33236
  });
33234
- function branchAlg(raw, nodeCount, context) {
33237
+ function branchAlg(raw, nodeCount, context, allowedTypes = CHOOSE_ALG_TYPES) {
33235
33238
  if (!raw) {
33236
33239
  return void 0;
33237
33240
  }
@@ -33255,7 +33258,7 @@ function branchAlg(raw, nodeCount, context) {
33255
33258
  if (name === "alg") {
33256
33259
  for (const candidate of Array.isArray(entry2) ? entry2 : [entry2]) {
33257
33260
  const type = candidate && typeof candidate === "object" ? String(candidate["@_type"] ?? "") : "";
33258
- if (CHOOSE_ALG_TYPES.has(type)) {
33261
+ if (allowedTypes.has(type)) {
33259
33262
  found = { type, raw: candidate };
33260
33263
  return;
33261
33264
  }
@@ -33336,6 +33339,24 @@ function chooseAlgorithm(node, nodeCount, context = {}) {
33336
33339
  }
33337
33340
  return void 0;
33338
33341
  }
33342
+ function chooseAlgorithmOfType(node, nodeCount, allowedTypes, context = {}) {
33343
+ if (!node.choose || node.choose.length === 0) {
33344
+ return void 0;
33345
+ }
33346
+ for (const choose of node.choose) {
33347
+ const found = branchAlg(
33348
+ activeBranch(choose, nodeCount, context),
33349
+ nodeCount,
33350
+ context,
33351
+ allowedTypes
33352
+ );
33353
+ if (found) {
33354
+ const parameters = parseBranchAlgParams(found.raw);
33355
+ return { type: found.type, ...parameters ? { parameters } : {} };
33356
+ }
33357
+ }
33358
+ return void 0;
33359
+ }
33339
33360
  var CHOOSE_ALG_TYPES;
33340
33361
  var init_smartart_layout_interpreter_choose_algorithm = __esm({
33341
33362
  "src/core/utils/smartart-layout-interpreter-choose-algorithm.ts"() {
@@ -34425,6 +34446,41 @@ var init_smartart_constraint_declared_by = __esm({
34425
34446
  init_smartart_constraint_solver();
34426
34447
  }
34427
34448
  });
34449
+ function readAlgorithmAspectRatio(node) {
34450
+ const raw = node?.algorithm?.parameters?.find((param) => param.type === "ar")?.value;
34451
+ if (raw === void 0) {
34452
+ return void 0;
34453
+ }
34454
+ const ar = Number.parseFloat(raw);
34455
+ return Number.isFinite(ar) && ar > 0 ? ar : void 0;
34456
+ }
34457
+ function fitAspectRatioBox(box, ar) {
34458
+ if (ar === void 0 || box.height <= 0 || box.width <= 0) {
34459
+ return box;
34460
+ }
34461
+ const boxAr = box.width / box.height;
34462
+ if (boxAr > ar) {
34463
+ return { width: box.height * ar, height: box.height };
34464
+ }
34465
+ if (boxAr < ar) {
34466
+ return { width: box.width, height: box.width / ar };
34467
+ }
34468
+ return box;
34469
+ }
34470
+ function isUserSizeHubRole(role, index) {
34471
+ for (const entries of index.entries.values()) {
34472
+ for (const { constraint } of entries) {
34473
+ if (constraint.type === "userS" && constraint.referenceForName === role) {
34474
+ return true;
34475
+ }
34476
+ }
34477
+ }
34478
+ return false;
34479
+ }
34480
+ var init_smartart_layout_interpreter_composite_aspect = __esm({
34481
+ "src/core/utils/smartart-layout-interpreter-composite-aspect.ts"() {
34482
+ }
34483
+ });
34428
34484
  function finiteFactor(value) {
34429
34485
  return typeof value === "number" && Number.isFinite(value) && value > 0;
34430
34486
  }
@@ -34442,7 +34498,8 @@ function resolveHubToNodeRatioViaUserSize(ringItem, arrangerConstraints, index,
34442
34498
  if (userSizeDecl) {
34443
34499
  return {
34444
34500
  hubName: userSizeDecl.referenceForName,
34445
- factor: userSizeDecl.factor
34501
+ factor: userSizeDecl.factor,
34502
+ viaUserSize: true
34446
34503
  };
34447
34504
  }
34448
34505
  if (index && declaringRoleChain && declaringRoleChain.length > 0) {
@@ -34455,15 +34512,27 @@ function resolveHubToNodeRatioViaUserSize(ringItem, arrangerConstraints, index,
34455
34512
  if (ancestorDecl) {
34456
34513
  return {
34457
34514
  hubName: ancestorDecl.constraint.referenceForName,
34458
- factor: ancestorDecl.constraint.factor
34515
+ factor: ancestorDecl.constraint.factor,
34516
+ viaUserSize: true
34459
34517
  };
34460
34518
  }
34461
34519
  }
34462
34520
  return void 0;
34463
34521
  }
34522
+ function resolveViaUserSizeNodeWidthPx(ratio, index, box, sizeBox) {
34523
+ const hubW = resolveConstraint(index, ratio.hubName, "w");
34524
+ if (hubW === void 0) {
34525
+ return void 0;
34526
+ }
34527
+ const hubExtent = isUserSizeHubRole(ratio.hubName, index) ? sizeBox.width : box.width;
34528
+ const side = ratio.factor * hubW * hubExtent;
34529
+ return side > 0 ? side : void 0;
34530
+ }
34464
34531
  var init_smartart_layout_interpreter_cycle_hub_ratio_usersize = __esm({
34465
34532
  "src/core/utils/smartart-layout-interpreter-cycle-hub-ratio-usersize.ts"() {
34466
34533
  init_smartart_constraint_declared_by();
34534
+ init_smartart_constraint_solver();
34535
+ init_smartart_layout_interpreter_composite_aspect();
34467
34536
  }
34468
34537
  });
34469
34538
  function resolveHubToNodeRatio(ringItem, arrangerConstraints, index, arrangerRuleCandidates, satelliteCount, declaringRoleChain) {
@@ -34508,12 +34577,12 @@ function resolveHubGapRatio(itemName, hubRatio, arrangerConstraints) {
34508
34577
  return void 0;
34509
34578
  }
34510
34579
  const sp = (arrangerConstraints ?? []).find(
34511
- (c) => c.type === "sp" && typeof c.factor === "number" && typeof c.referenceForName === "string"
34580
+ (c) => c.type === "sp" && typeof c.factor === "number"
34512
34581
  );
34513
34582
  if (!sp || typeof sp.factor !== "number") {
34514
34583
  return void 0;
34515
34584
  }
34516
- if (sp.referenceForName === itemName) {
34585
+ if (sp.referenceForName === void 0 || sp.referenceForName === itemName) {
34517
34586
  return sp.factor;
34518
34587
  }
34519
34588
  if (sp.referenceForName === hubRatio.hubName) {
@@ -36168,6 +36237,20 @@ var init_smartart_layout_interpreter_cycle_fontfit = __esm({
36168
36237
  init_smartart_layout_item_font_tier();
36169
36238
  }
36170
36239
  });
36240
+ function resolveHubExpansion(nodes, plan, hubAlreadyStripped, hubRatio, hubGapRatio, absoluteHubGapPx, index, box, sizeBox) {
36241
+ const hasHub = !hubAlreadyStripped && (!hubRatio || hubRatio.viaUserSize === true) && algorithmParam(plan.node, "ctrShpMap") === "fNode" && nodes.length > 0;
36242
+ const hubNode = hasHub ? nodes[0] : void 0;
36243
+ const ringNodes = hasHub ? nodes.slice(1) : nodes;
36244
+ const hubGeometry = hubRatio && (hubGapRatio !== void 0 || absoluteHubGapPx !== void 0) ? { factor: hubRatio.viaUserSize ? 1 : hubRatio.factor, gapRatio: hubGapRatio ?? 0 } : void 0;
36245
+ const knownNodeWidthPx = ringNodes.length === 1 && hubRatio?.viaUserSize ? resolveViaUserSizeNodeWidthPx(hubRatio, index, box, sizeBox ?? box) : void 0;
36246
+ return { hasHub, hubNode, ringNodes, hubGeometry, knownNodeWidthPx };
36247
+ }
36248
+ var init_smartart_layout_interpreter_cycle_hub_detect = __esm({
36249
+ "src/core/utils/smartart-layout-interpreter-cycle-hub-detect.ts"() {
36250
+ init_smartart_layout_interpreter_cycle_hub_ratio_usersize();
36251
+ init_smartart_layout_interpreter_model();
36252
+ }
36253
+ });
36171
36254
  function computeRingBulgeBounds(xs, ys, halfW, halfH, sibTransBulgeRatio) {
36172
36255
  const minX = Math.min(...xs) - halfW;
36173
36256
  const maxX = Math.max(...xs) + halfW;
@@ -36191,6 +36274,32 @@ var init_smartart_layout_interpreter_cycle_ring_bulge = __esm({
36191
36274
  "src/core/utils/smartart-layout-interpreter-cycle-ring-bulge.ts"() {
36192
36275
  }
36193
36276
  });
36277
+ function nestedHubSatelliteRingLayout(stAngDeg, heightOverWidth, box, hubGeometry, nodeWidthPx) {
36278
+ const boxCentre = { x: box.width / 2, y: box.height / 2 };
36279
+ const halfH = Math.max(0.01, heightOverWidth) / 2;
36280
+ const hubHalfWidthNat = 0.5 / Math.max(1e-6, hubGeometry.factor);
36281
+ const r0Nat = hubHalfWidthNat + Math.max(0, hubGeometry.gapRatio) + 0.5;
36282
+ const angleRad = (stAngDeg - 90) * DEG_TO_RAD2;
36283
+ const r0Px = r0Nat * nodeWidthPx;
36284
+ const satellite = {
36285
+ x: boxCentre.x + r0Px * Math.cos(angleRad),
36286
+ y: boxCentre.y + r0Px * Math.sin(angleRad)
36287
+ };
36288
+ return {
36289
+ centers: [satellite],
36290
+ nodeWidth: nodeWidthPx,
36291
+ nodeHeight: nodeWidthPx * Math.max(0.01, heightOverWidth),
36292
+ hubCenter: boxCentre,
36293
+ hubHalfWidth: hubHalfWidthNat * nodeWidthPx,
36294
+ hubHalfHeight: hubHalfWidthNat * (halfH / 0.5) * nodeWidthPx
36295
+ };
36296
+ }
36297
+ var DEG_TO_RAD2;
36298
+ var init_smartart_layout_interpreter_cycle_ring_nested_hub = __esm({
36299
+ "src/core/utils/smartart-layout-interpreter-cycle-ring-nested-hub.ts"() {
36300
+ DEG_TO_RAD2 = Math.PI / 180;
36301
+ }
36302
+ });
36194
36303
  function resolveRingAxisOffset(dimension, boundSize, scale2, values) {
36195
36304
  const span = Math.max(1e-9, Math.max(...values) - Math.min(...values));
36196
36305
  const epsilon = span * TIE_EPSILON_FRACTION;
@@ -36238,14 +36347,23 @@ function degenerateRingLayout(n, heightOverWidth, box) {
36238
36347
  }
36239
36348
  return void 0;
36240
36349
  }
36241
- function ringLayoutForGapFactor(n, stAngDeg, spanDeg, gapFactor, heightOverWidth, box, hubGeometry, sibTransBulgeRatio) {
36350
+ function ringLayoutForGapFactor(n, stAngDeg, spanDeg, gapFactor, heightOverWidth, box, hubGeometry, sibTransBulgeRatio, knownNodeWidthPx) {
36351
+ if (n === 1 && hubGeometry && knownNodeWidthPx !== void 0 && knownNodeWidthPx > 0) {
36352
+ return nestedHubSatelliteRingLayout(
36353
+ stAngDeg,
36354
+ heightOverWidth,
36355
+ box,
36356
+ hubGeometry,
36357
+ knownNodeWidthPx
36358
+ );
36359
+ }
36242
36360
  const degenerate = degenerateRingLayout(n, heightOverWidth, box);
36243
36361
  if (degenerate) {
36244
36362
  return degenerate;
36245
36363
  }
36246
36364
  const full = Math.abs(spanDeg) >= 360;
36247
36365
  const step = full ? spanDeg / n : spanDeg / (n - 1);
36248
- const halfStepRad = Math.abs(step) * DEG_TO_RAD2 / 2;
36366
+ const halfStepRad = Math.abs(step) * DEG_TO_RAD3 / 2;
36249
36367
  const clampedGap = Math.max(0, gapFactor);
36250
36368
  const sinHalf = Math.sin(halfStepRad);
36251
36369
  let r0 = sinHalf > 1e-6 ? (1 + clampedGap) / (2 * sinHalf) : 0;
@@ -36255,7 +36373,7 @@ function ringLayoutForGapFactor(n, stAngDeg, spanDeg, gapFactor, heightOverWidth
36255
36373
  r0 = Math.max(r0, r0Hub);
36256
36374
  }
36257
36375
  const natural = Array.from({ length: n }, (_, i2) => {
36258
- const angleRad = (stAngDeg + i2 * step - 90) * DEG_TO_RAD2;
36376
+ const angleRad = (stAngDeg + i2 * step - 90) * DEG_TO_RAD3;
36259
36377
  return { x: r0 * Math.cos(angleRad), y: r0 * Math.sin(angleRad) };
36260
36378
  });
36261
36379
  const halfW = 0.5;
@@ -36283,10 +36401,13 @@ function ringLayoutForGapFactor(n, stAngDeg, spanDeg, gapFactor, heightOverWidth
36283
36401
  hubHalfHeight: naturalHubRadius * scaleY
36284
36402
  };
36285
36403
  }
36286
- function computeCycleRingLayout(n, stAngDeg, spanDeg, minGapRatio, heightOverWidth, box, absoluteGapPx, hubGeometry, absoluteHubGapPx, sibTransBulgeRatio) {
36287
- const degenerate = degenerateRingLayout(n, heightOverWidth, box);
36288
- if (degenerate) {
36289
- return degenerate;
36404
+ function computeCycleRingLayout(n, stAngDeg, spanDeg, minGapRatio, heightOverWidth, box, absoluteGapPx, hubGeometry, absoluteHubGapPx, sibTransBulgeRatio, knownNodeWidthPx) {
36405
+ const nestedHubSatellite = n === 1 && hubGeometry && knownNodeWidthPx !== void 0 && knownNodeWidthPx > 0;
36406
+ if (!nestedHubSatellite) {
36407
+ const degenerate = degenerateRingLayout(n, heightOverWidth, box);
36408
+ if (degenerate) {
36409
+ return degenerate;
36410
+ }
36290
36411
  }
36291
36412
  const needsGapIteration = absoluteGapPx !== void 0 && absoluteGapPx > 0;
36292
36413
  const needsHubGapIteration = absoluteHubGapPx !== void 0 && absoluteHubGapPx > 0 && hubGeometry !== void 0;
@@ -36299,7 +36420,8 @@ function computeCycleRingLayout(n, stAngDeg, spanDeg, minGapRatio, heightOverWid
36299
36420
  heightOverWidth,
36300
36421
  box,
36301
36422
  hubGeometry,
36302
- sibTransBulgeRatio
36423
+ sibTransBulgeRatio,
36424
+ knownNodeWidthPx
36303
36425
  );
36304
36426
  }
36305
36427
  let gapFactor = minGapRatio;
@@ -36338,15 +36460,16 @@ function computeCycleRingLayout(n, stAngDeg, spanDeg, minGapRatio, heightOverWid
36338
36460
  sibTransBulgeRatio
36339
36461
  );
36340
36462
  }
36341
- var DEG_TO_RAD2;
36463
+ var DEG_TO_RAD3;
36342
36464
  var init_smartart_layout_interpreter_cycle_ring = __esm({
36343
36465
  "src/core/utils/smartart-layout-interpreter-cycle-ring.ts"() {
36344
36466
  init_smartart_layout_interpreter_cycle_ring_bulge();
36467
+ init_smartart_layout_interpreter_cycle_ring_nested_hub();
36345
36468
  init_smartart_layout_interpreter_cycle_ring_offset();
36346
- DEG_TO_RAD2 = Math.PI / 180;
36469
+ DEG_TO_RAD3 = Math.PI / 180;
36347
36470
  }
36348
36471
  });
36349
- function arrangeCycle(plan, nodes, box, palette, style, elementId, index = EMPTY_CONSTRAINT_INDEX, hubAlreadyStripped = false, childrenOf, fontName, declaringRoleChain) {
36472
+ function arrangeCycle(plan, nodes, box, palette, style, elementId, index = EMPTY_CONSTRAINT_INDEX, hubAlreadyStripped = false, childrenOf, fontName, declaringRoleChain, sizeBox) {
36350
36473
  const { width: w, height: h2 } = box;
36351
36474
  const ctx = styleContext(style);
36352
36475
  const {
@@ -36363,13 +36486,20 @@ function arrangeCycle(plan, nodes, box, palette, style, elementId, index = EMPTY
36363
36486
  hubAlreadyStripped ? nodes.length : void 0,
36364
36487
  declaringRoleChain
36365
36488
  );
36366
- const hasHub = !hubAlreadyStripped && !hubRatio && algorithmParam(plan.node, "ctrShpMap") === "fNode" && nodes.length > 0;
36367
- const hubNode = hasHub ? nodes[0] : void 0;
36368
- const ringNodes = hasHub ? nodes.slice(1) : nodes;
36489
+ const { hubNode, ringNodes, hubGeometry, knownNodeWidthPx } = resolveHubExpansion(
36490
+ nodes,
36491
+ plan,
36492
+ hubAlreadyStripped,
36493
+ hubRatio,
36494
+ hubGapRatio,
36495
+ absoluteHubGapPx,
36496
+ index,
36497
+ box,
36498
+ sizeBox
36499
+ );
36369
36500
  const n = ringNodes.length;
36370
36501
  const startDeg = numericParam(plan.node, "stAng", 0);
36371
36502
  const spanDeg = numericParam(plan.node, "spanAng", 360);
36372
- const hubGeometry = hubRatio && (hubGapRatio !== void 0 || absoluteHubGapPx !== void 0) ? { factor: hubRatio.factor, gapRatio: hubGapRatio ?? 0 } : void 0;
36373
36503
  const ring = computeCycleRingLayout(
36374
36504
  n,
36375
36505
  startDeg,
@@ -36380,7 +36510,8 @@ function arrangeCycle(plan, nodes, box, palette, style, elementId, index = EMPTY
36380
36510
  absoluteGapPx,
36381
36511
  hubGeometry,
36382
36512
  absoluteHubGapPx,
36383
- sibTransBulgeRatio
36513
+ sibTransBulgeRatio,
36514
+ knownNodeWidthPx
36384
36515
  );
36385
36516
  const full = Math.abs(spanDeg) >= 360;
36386
36517
  const connectorCount = n > 0 ? full ? n : Math.max(0, n - 1) : 0;
@@ -36449,6 +36580,7 @@ var init_smartart_layout_interpreter_cycle = __esm({
36449
36580
  init_smartart_layout_interpreter_cycle_constraints();
36450
36581
  init_smartart_layout_interpreter_cycle_extension();
36451
36582
  init_smartart_layout_interpreter_cycle_fontfit();
36583
+ init_smartart_layout_interpreter_cycle_hub_detect();
36452
36584
  init_smartart_layout_interpreter_cycle_ring();
36453
36585
  init_smartart_layout_interpreter_model();
36454
36586
  init_smartart_layout_interpreter_render();
@@ -37509,18 +37641,18 @@ function arrangeSnake(plan, nodes, box, palette, style, elementId, index = EMPTY
37509
37641
  naturalAspect,
37510
37642
  cornerInset
37511
37643
  );
37512
- const cells = nodes.map((_node, i2) => snakeCell(i2, dims, flowDir, sameDir, grDir));
37644
+ const cells2 = nodes.map((_node, i2) => snakeCell(i2, dims, flowDir, sameDir, grDir));
37513
37645
  const centerIncompleteLines = algorithmParam(plan.node, "off") === "ctr";
37514
37646
  const fullLineCount = flowDir === "row" ? dims.cols : dims.rows;
37515
37647
  const lineCounts = /* @__PURE__ */ new Map();
37516
37648
  if (centerIncompleteLines) {
37517
- for (const cell of cells) {
37649
+ for (const cell of cells2) {
37518
37650
  const key2 = flowDir === "row" ? cell.row : cell.col;
37519
37651
  lineCounts.set(key2, (lineCounts.get(key2) ?? 0) + 1);
37520
37652
  }
37521
37653
  }
37522
37654
  const renderedNodes = nodes.map((node, i2) => {
37523
- const { col, row } = cells[i2];
37655
+ const { col, row } = cells2[i2];
37524
37656
  let x = INSET + col * (cellW + gapX);
37525
37657
  let y = INSET + row * (cellH + gapY);
37526
37658
  if (centerIncompleteLines) {
@@ -37806,41 +37938,6 @@ var init_smartart_layout_interpreter_aux = __esm({
37806
37938
  INSET2 = 6;
37807
37939
  }
37808
37940
  });
37809
- function readAlgorithmAspectRatio(node) {
37810
- const raw = node?.algorithm?.parameters?.find((param) => param.type === "ar")?.value;
37811
- if (raw === void 0) {
37812
- return void 0;
37813
- }
37814
- const ar = Number.parseFloat(raw);
37815
- return Number.isFinite(ar) && ar > 0 ? ar : void 0;
37816
- }
37817
- function fitAspectRatioBox(box, ar) {
37818
- if (ar === void 0 || box.height <= 0 || box.width <= 0) {
37819
- return box;
37820
- }
37821
- const boxAr = box.width / box.height;
37822
- if (boxAr > ar) {
37823
- return { width: box.height * ar, height: box.height };
37824
- }
37825
- if (boxAr < ar) {
37826
- return { width: box.width, height: box.width / ar };
37827
- }
37828
- return box;
37829
- }
37830
- function isUserSizeHubRole(role, index) {
37831
- for (const entries of index.entries.values()) {
37832
- for (const { constraint } of entries) {
37833
- if (constraint.type === "userS" && constraint.referenceForName === role) {
37834
- return true;
37835
- }
37836
- }
37837
- }
37838
- return false;
37839
- }
37840
- var init_smartart_layout_interpreter_composite_aspect = __esm({
37841
- "src/core/utils/smartart-layout-interpreter-composite-aspect.ts"() {
37842
- }
37843
- });
37844
37941
  function resolveOrigin(node, flat) {
37845
37942
  const origin = node.forEachOrigin;
37846
37943
  if (!origin?.axis || origin.axis.length === 0) {
@@ -38527,6 +38624,36 @@ var init_smartart_hierarchy_pitch = __esm({
38527
38624
  GENERATION_MARGIN_RATIO = 0.1675;
38528
38625
  }
38529
38626
  });
38627
+ function isSquareHeightConstraint(constraints) {
38628
+ const h2 = findConstraint(constraints, "h");
38629
+ return h2?.referenceType === "w" && h2.factor === void 0 && h2.value === void 0 && h2.referenceForName === void 0;
38630
+ }
38631
+ function resolveUserSizeItemBoxPx(wrapper, index, box, sizeBox, declaringRoleChain) {
38632
+ for (const template of wrapper.children ?? []) {
38633
+ if (!isSquareHeightConstraint(template.constraints)) {
38634
+ continue;
38635
+ }
38636
+ const ratio = resolveHubToNodeRatioViaUserSize(
38637
+ template,
38638
+ wrapper.constraints,
38639
+ index,
38640
+ declaringRoleChain
38641
+ );
38642
+ if (!ratio) {
38643
+ continue;
38644
+ }
38645
+ const hubRatio = resolveConstraint(index, ratio.hubName, "w");
38646
+ if (hubRatio === void 0) {
38647
+ continue;
38648
+ }
38649
+ const hubExtent = isUserSizeHubRole(ratio.hubName, index) ? sizeBox.width : box.width;
38650
+ const side = ratio.factor * hubRatio * hubExtent;
38651
+ if (side > 0) {
38652
+ return { width: side, height: side };
38653
+ }
38654
+ }
38655
+ return void 0;
38656
+ }
38530
38657
  function childAxisSpec(template, childCount) {
38531
38658
  const axis = template.presentationOf?.axis;
38532
38659
  if (!axis || axis.length === 0) {
@@ -38566,7 +38693,7 @@ function collectChildRepeaterItems(wrapper, anchorChildren) {
38566
38693
  items.sort((a, b) => a.position - b.position);
38567
38694
  return items;
38568
38695
  }
38569
- function renderChildRepeaterSlot(wrapperSlot, anchor, anchorIndex, box, absX, absY, childrenOf, ctx) {
38696
+ function renderChildRepeaterSlot(wrapperSlot, anchor, anchorIndex, box, absX, absY, childrenOf, ctx, sizingCtx) {
38570
38697
  const anchorChildren = childrenOf.get(anchor.id) ?? [];
38571
38698
  const items = collectChildRepeaterItems(wrapperSlot.node, anchorChildren);
38572
38699
  if (items.length === 0) {
@@ -38574,15 +38701,27 @@ function renderChildRepeaterSlot(wrapperSlot, anchor, anchorIndex, box, absX, ab
38574
38701
  }
38575
38702
  const rect22 = resolveSlot(wrapperSlot.dims, box, absX, absY);
38576
38703
  const columnWidth = rect22.width / items.length;
38704
+ const userSize = sizingCtx ? resolveUserSizeItemBoxPx(
38705
+ wrapperSlot.node,
38706
+ sizingCtx.index,
38707
+ box,
38708
+ sizingCtx.sizeBox,
38709
+ sizingCtx.declaringRoleChain
38710
+ ) : void 0;
38577
38711
  return items.map((item, i2) => {
38578
38712
  const folded = item.fold ? smartArtDescendantsWithText(item.child, childrenOf) : [];
38713
+ const columnX = rect22.x + columnWidth * i2;
38714
+ const width = userSize ? Math.min(userSize.width, columnWidth) : columnWidth;
38715
+ const height = userSize ? Math.min(userSize.height, rect22.height) : rect22.height;
38716
+ const x = userSize ? columnX + (columnWidth - width) / 2 : columnX;
38717
+ const y = userSize ? rect22.y + (rect22.height - height) / 2 : rect22.y;
38579
38718
  const rendered = {
38580
38719
  ...rectNode({
38581
38720
  key: `${ctx.elementId}-comp-child-${item.child.id}-${anchorIndex}-${i2}`,
38582
- x: rect22.x + columnWidth * i2,
38583
- y: rect22.y,
38584
- width: columnWidth,
38585
- height: rect22.height,
38721
+ x,
38722
+ y,
38723
+ width,
38724
+ height,
38586
38725
  node: item.child,
38587
38726
  index: i2,
38588
38727
  total: items.length,
@@ -38597,8 +38736,12 @@ function renderChildRepeaterSlot(wrapperSlot, anchor, anchorIndex, box, absX, ab
38597
38736
  }
38598
38737
  var init_smartart_layout_interpreter_composite_children = __esm({
38599
38738
  "src/core/utils/smartart-layout-interpreter-composite-children.ts"() {
38739
+ init_smartart_constraint_solver();
38600
38740
  init_smartart_layout_interpreter_axis_range();
38741
+ init_smartart_layout_interpreter_composite_aspect();
38601
38742
  init_smartart_layout_interpreter_composite_slots();
38743
+ init_smartart_layout_interpreter_constraints();
38744
+ init_smartart_layout_interpreter_cycle_hub_ratio_usersize();
38602
38745
  init_smartart_layout_interpreter_render();
38603
38746
  init_smartart_node_tree_axis();
38604
38747
  }
@@ -38612,7 +38755,7 @@ function resolveNestedCycleAnchor(wrapper, anchor, childrenOf) {
38612
38755
  const resolved = items[0].child;
38613
38756
  return (childrenOf.get(resolved.id)?.length ?? 0) > 0 ? resolved : void 0;
38614
38757
  }
38615
- function arrangeNestedCycleSlot(wrapperSlot, anchor, box, absX, absY, childrenOf, nodeCount, flat, presLayoutVars, index, palette, style, elementId, fontName, declaringRoleChain) {
38758
+ function arrangeNestedCycleSlot(wrapperSlot, anchor, box, absX, absY, childrenOf, nodeCount, flat, presLayoutVars, index, palette, style, elementId, fontName, declaringRoleChain, sizeBox) {
38616
38759
  const wrapper = wrapperSlot.node;
38617
38760
  const nestedAnchor = resolveNestedCycleAnchor(wrapper, anchor, childrenOf);
38618
38761
  if (!nestedAnchor) {
@@ -38640,11 +38783,12 @@ function arrangeNestedCycleSlot(wrapperSlot, anchor, box, absX, absY, childrenOf
38640
38783
  false,
38641
38784
  childrenOf,
38642
38785
  fontName,
38643
- declaringRoleChain
38786
+ declaringRoleChain,
38787
+ sizeBox
38644
38788
  );
38645
38789
  return translateResult(result, rect22.x, rect22.y).nodes;
38646
38790
  }
38647
- function renderChildRepeaterOrNestedCycle(wrapperSlot, anchor, anchorIndex, box, absX, absY, childrenOf, flat, presLayoutVars, index, ctx, fontName, declaringRoleChain) {
38791
+ function renderChildRepeaterOrNestedCycle(wrapperSlot, anchor, anchorIndex, box, absX, absY, childrenOf, flat, presLayoutVars, index, ctx, fontName, declaringRoleChain, sizeBox) {
38648
38792
  const nested = arrangeNestedCycleSlot(
38649
38793
  wrapperSlot,
38650
38794
  anchor,
@@ -38660,9 +38804,24 @@ function renderChildRepeaterOrNestedCycle(wrapperSlot, anchor, anchorIndex, box,
38660
38804
  ctx.style,
38661
38805
  ctx.elementId,
38662
38806
  fontName,
38663
- declaringRoleChain
38807
+ declaringRoleChain,
38808
+ sizeBox
38809
+ );
38810
+ if (nested) {
38811
+ return nested;
38812
+ }
38813
+ const sizingCtx = declaringRoleChain && sizeBox ? { index, sizeBox, declaringRoleChain } : void 0;
38814
+ return renderChildRepeaterSlot(
38815
+ wrapperSlot,
38816
+ anchor,
38817
+ anchorIndex,
38818
+ box,
38819
+ absX,
38820
+ absY,
38821
+ childrenOf,
38822
+ ctx,
38823
+ sizingCtx
38664
38824
  );
38665
- return nested ?? renderChildRepeaterSlot(wrapperSlot, anchor, anchorIndex, box, absX, absY, childrenOf, ctx);
38666
38825
  }
38667
38826
  var init_smartart_layout_interpreter_composite_nested_cycle = __esm({
38668
38827
  "src/core/utils/smartart-layout-interpreter-composite-nested-cycle.ts"() {
@@ -38851,7 +39010,7 @@ var init_smartart_layout_interpreter_composite_render = __esm({
38851
39010
  function slotsWithAxis(slotted, axis) {
38852
39011
  return slotted.filter((slot) => slot.node.presentationOf?.axis?.[0] === axis);
38853
39012
  }
38854
- function arrangeByPresentationOf(slotted, allChildren, nodes, flat, box, absX, absY, childrenOf, ctx, fontCtx, index, presLayoutVars, declaringRoleChain) {
39013
+ function arrangeByPresentationOf(slotted, allChildren, nodes, flat, box, absX, absY, childrenOf, ctx, fontCtx, index, presLayoutVars, declaringRoleChain, sizeBox) {
38855
39014
  const selfSlots = slotsWithAxis(slotted, "self");
38856
39015
  if (selfSlots.length === 0) {
38857
39016
  return void 0;
@@ -38892,7 +39051,8 @@ function arrangeByPresentationOf(slotted, allChildren, nodes, flat, box, absX, a
38892
39051
  index,
38893
39052
  ctx,
38894
39053
  fontCtx?.fontName,
38895
- declaringRoleChain
39054
+ declaringRoleChain,
39055
+ sizeBox
38896
39056
  )
38897
39057
  );
38898
39058
  }
@@ -38941,7 +39101,8 @@ function arrangeComposite(plan, nodes, box, palette, style, elementId, index = E
38941
39101
  fontCtx,
38942
39102
  index,
38943
39103
  presLayoutVars,
38944
- [declaringRole]
39104
+ [declaringRole],
39105
+ sizeBox
38945
39106
  ) ?? arrangeByChooseAwareSlots(plan.node, flat, box, index, ctx, fontCtx) ?? arrangeByOrder(slotted, nodes, box, absX, absY, ctx, fontCtx);
38946
39107
  return {
38947
39108
  nodes: renderedNodes,
@@ -39310,12 +39471,13 @@ function computeHierarchyAxisPitches(effectiveBox, orientation, boxW, boxH, tota
39310
39471
  const fanWidth = tailedPitch ? effectiveBox.width - (cascadeReserveOffsetPx ?? hangShape.maxHangDepth * HIER_TAIL_OFFSET_RATIO * boxW) : effectiveBox.width;
39311
39472
  const hangHeightRatio = orientation.hangHeightRatio ?? HANG_HEIGHT_RATIO;
39312
39473
  const fanHeight = tailedPitch ? effectiveBox.height - hangShape.maxHangRows * (1 + hangHeightRatio) * boxH : effectiveBox.height;
39474
+ const fanSibSpRatio = tailedPitch && orientation.transposed ? orientation.sibSpRatio + hangShape.maxHangDepth * HIER_TAIL_OFFSET_RATIO * (totalLeaves > 0 ? hangShape.hangingColumns / totalLeaves : 0) : orientation.sibSpRatio;
39313
39475
  const xPitch = compositeFanPitch(
39314
39476
  fanWidth,
39315
39477
  boxW,
39316
39478
  orientation.compositeWidthFactor,
39317
39479
  orientation.cardOffsetXRatio,
39318
- orientation.sibSpRatio,
39480
+ fanSibSpRatio,
39319
39481
  totalLeaves
39320
39482
  );
39321
39483
  const fixedGenerationGapRatio = orientation.transposed ? void 0 : tailedPitch ? orientation.generationGapRatio : orientation.compositeGenerationGapRatio;
@@ -39445,16 +39607,17 @@ var init_smartart_hierarchy_dispatch_lindir = __esm({
39445
39607
  init_smartart_layout_interpreter_choose_algorithm();
39446
39608
  }
39447
39609
  });
39448
- function collectScoped(node, crossedHierChild, out) {
39610
+ function collectScoped(node, crossedHierChild, out, nodeCount, presLayoutVars) {
39449
39611
  if (!node) {
39450
39612
  return;
39451
39613
  }
39452
- if (node.algorithm?.type === "tx" && node.shape) {
39614
+ const effectiveType = node.algorithm?.type ?? (node.choose ? chooseAlgorithmOfType(node, nodeCount, TX_ALG_TYPES, { presLayoutVars })?.type : void 0);
39615
+ if (effectiveType === "tx" && node.shape) {
39453
39616
  out.push({ node, descendantScope: crossedHierChild });
39454
39617
  }
39455
39618
  const nextCrossed = crossedHierChild || node.algorithm?.type === "hierChild";
39456
39619
  for (const child262 of node.children ?? []) {
39457
- collectScoped(child262, nextCrossed, out);
39620
+ collectScoped(child262, nextCrossed, out, nodeCount, presLayoutVars);
39458
39621
  }
39459
39622
  }
39460
39623
  function resolvedSize(index, name) {
@@ -39465,14 +39628,14 @@ function resolvedSize(index, name) {
39465
39628
  }
39466
39629
  return { w, h: h2 };
39467
39630
  }
39468
- function resolveHierarchyGenerationTemplates(algorithmNode, index) {
39631
+ function resolveHierarchyGenerationTemplates(algorithmNode, index, nodeCount, presLayoutVars) {
39469
39632
  if (!algorithmNode) {
39470
39633
  return void 0;
39471
39634
  }
39472
39635
  const fallbackNode = resolveHierarchyItemNode(algorithmNode);
39473
39636
  const scoped = [];
39474
39637
  for (const child262 of algorithmNode.children ?? []) {
39475
- collectScoped(child262, false, scoped);
39638
+ collectScoped(child262, false, scoped, nodeCount, presLayoutVars);
39476
39639
  }
39477
39640
  const rootScoped = scoped.filter((c) => !c.descendantScope);
39478
39641
  const descendantScoped = scoped.filter((c) => c.descendantScope);
@@ -39500,10 +39663,13 @@ function resolveHierarchyGenerationTemplates(algorithmNode, index) {
39500
39663
  root: { node: rootMatch.node, name: rootMatch.node.name, widthFactor, heightFactor }
39501
39664
  };
39502
39665
  }
39666
+ var TX_ALG_TYPES;
39503
39667
  var init_smartart_hierarchy_generation_templates = __esm({
39504
39668
  "src/core/utils/smartart-hierarchy-generation-templates.ts"() {
39505
39669
  init_smartart_constraint_solver();
39506
39670
  init_smartart_hierarchy_item_template();
39671
+ init_smartart_layout_interpreter_choose_algorithm();
39672
+ TX_ALG_TYPES = /* @__PURE__ */ new Set(["tx"]);
39507
39673
  }
39508
39674
  });
39509
39675
  function resolveCornerHangPlan(algorithmNode, nodeCount, presLayoutVars, index) {
@@ -39518,7 +39684,12 @@ function resolveCornerHangPlan(algorithmNode, nodeCount, presLayoutVars, index)
39518
39684
  if (!linDir || !VERTICAL_LIN_DIR.has(linDir)) {
39519
39685
  return void 0;
39520
39686
  }
39521
- const templates = resolveHierarchyGenerationTemplates(algorithmNode, index);
39687
+ const templates = resolveHierarchyGenerationTemplates(
39688
+ algorithmNode,
39689
+ index,
39690
+ nodeCount,
39691
+ presLayoutVars
39692
+ );
39522
39693
  if (!templates?.root) {
39523
39694
  return void 0;
39524
39695
  }
@@ -39749,6 +39920,188 @@ var init_smartart_hierarchy_fold_depth = __esm({
39749
39920
  "src/core/utils/smartart-hierarchy-fold-depth.ts"() {
39750
39921
  }
39751
39922
  });
39923
+ function resolveSibSpRatio(algorithmNode) {
39924
+ const constraints = algorithmNode.allConstraints ?? algorithmNode.constraints ?? [];
39925
+ const sibSp = constraints.find((c) => c.type === "sibSp" && typeof c.factor === "number");
39926
+ return sibSp?.factor ?? DEFAULT_SIB_SP_RATIO;
39927
+ }
39928
+ function resolveFannedHangGeometry(algorithmNode, index, nodeCount, presLayoutVars, branchCount, box) {
39929
+ if (!algorithmNode || branchCount < 1) {
39930
+ return void 0;
39931
+ }
39932
+ const templates = resolveHierarchyGenerationTemplates(
39933
+ algorithmNode,
39934
+ index,
39935
+ nodeCount,
39936
+ presLayoutVars
39937
+ );
39938
+ if (!templates?.root) {
39939
+ return void 0;
39940
+ }
39941
+ const rootW_ = resolveConstraint(index, templates.root.name, "w");
39942
+ const rootH_ = resolveConstraint(index, templates.root.name, "h");
39943
+ if (rootW_ === void 0 || rootH_ === void 0 || !(rootW_ > 0) || !(rootH_ > 0)) {
39944
+ return void 0;
39945
+ }
39946
+ const rootAspect = rootW_ / rootH_;
39947
+ if (!(rootAspect > 0)) {
39948
+ return void 0;
39949
+ }
39950
+ const sibSpRatio = resolveSibSpRatio(algorithmNode);
39951
+ const rootW = box.width / (branchCount + (branchCount - 1) * sibSpRatio);
39952
+ const rootH = rootW / rootAspect;
39953
+ if (!(rootW > 0) || !(rootH > 0)) {
39954
+ return void 0;
39955
+ }
39956
+ const heightFactor = templates.root.heightFactor;
39957
+ const descH = heightFactor > 0 ? rootH / heightFactor : rootH;
39958
+ const descWidthFraction = resolveConstraint(index, templates.descendant.name, "w");
39959
+ const descW = (descWidthFraction !== void 0 && descWidthFraction > 0 && descWidthFraction <= 1.5 ? descWidthFraction : DEFAULT_DESC_WIDTH_FRACTION) * rootW;
39960
+ const chAlign = resolveHierarchyDispatchChAlign(algorithmNode, nodeCount, presLayoutVars);
39961
+ const linDir = algorithmNode.algorithm?.parameters?.find((p) => p.type === "linDir")?.value;
39962
+ return {
39963
+ rootW,
39964
+ rootH,
39965
+ descW,
39966
+ descH,
39967
+ gap: sibSpRatio * rootW,
39968
+ side: chAlign === "r" ? "right" : "left",
39969
+ reversed: linDir === "fromR"
39970
+ };
39971
+ }
39972
+ var DEFAULT_SIB_SP_RATIO;
39973
+ var DEFAULT_DESC_WIDTH_FRACTION;
39974
+ var init_smartart_hierarchy_fanned_hang_geometry = __esm({
39975
+ "src/core/utils/smartart-hierarchy-fanned-hang-geometry.ts"() {
39976
+ init_smartart_constraint_solver();
39977
+ init_smartart_hierarchy_dispatch_lindir();
39978
+ init_smartart_hierarchy_generation_templates();
39979
+ DEFAULT_SIB_SP_RATIO = 0.05;
39980
+ DEFAULT_DESC_WIDTH_FRACTION = 0.85;
39981
+ }
39982
+ });
39983
+ function resolveHierarchyItemFontSizePx(nodes, algorithmNode, index, boxW, boxH, fontName) {
39984
+ if (!algorithmNode) {
39985
+ return void 0;
39986
+ }
39987
+ const textNodes = nodes.filter((node) => node.text && node.text.trim().length > 0);
39988
+ if (textNodes.length === 0) {
39989
+ return void 0;
39990
+ }
39991
+ const plan = { node: algorithmNode };
39992
+ const { rootSizePx } = resolveTieredItemFontSize(
39993
+ plan,
39994
+ index,
39995
+ textNodes.map((node) => ({
39996
+ rootText: node.text,
39997
+ descendantTexts: [],
39998
+ width: boxW,
39999
+ height: boxH
40000
+ })),
40001
+ fontName,
40002
+ void 0,
40003
+ 0,
40004
+ algorithmNode
40005
+ );
40006
+ return rootSizePx;
40007
+ }
40008
+ var init_smartart_layout_interpreter_hierarchy_fontfit = __esm({
40009
+ "src/core/utils/smartart-layout-interpreter-hierarchy-fontfit.ts"() {
40010
+ init_smartart_layout_item_font_tier();
40011
+ }
40012
+ });
40013
+ function placeDescendantColumn(hc, node, edgeX, side, y, descW, descH, stackGapPx, parentId, parentCenterX, parentBottom) {
40014
+ const x = side === "right" ? edgeX - descW : edgeX;
40015
+ pushNode(hc, node.node, x, y, descW, descH);
40016
+ elbowConnector(hc, parentId, parentCenterX, parentBottom, x + descW / 2, y, node.node.id);
40017
+ let nextY = y + descH + stackGapPx;
40018
+ for (const child262 of node.children) {
40019
+ nextY = placeDescendantColumn(
40020
+ hc,
40021
+ child262,
40022
+ edgeX,
40023
+ side,
40024
+ nextY,
40025
+ descW,
40026
+ descH,
40027
+ stackGapPx,
40028
+ node.node.id,
40029
+ x + descW / 2,
40030
+ y + descH
40031
+ );
40032
+ }
40033
+ return nextY;
40034
+ }
40035
+ function arrangeFannedHangingForest(nodes, box, palette, style, elementId, roots, itemShape, connectorLabels, algorithmNode, index, fontName, presLayoutVars, orgChart) {
40036
+ if (orgChart) {
40037
+ return void 0;
40038
+ }
40039
+ const geometry = resolveFannedHangGeometry(
40040
+ algorithmNode,
40041
+ index,
40042
+ nodes.length,
40043
+ presLayoutVars,
40044
+ roots.length,
40045
+ box
40046
+ );
40047
+ if (!geometry) {
40048
+ return void 0;
40049
+ }
40050
+ const { rootW, rootH, descW, descH, gap, side, reversed } = geometry;
40051
+ const hc = baseContext(
40052
+ nodes.length,
40053
+ elementId,
40054
+ palette,
40055
+ style,
40056
+ descW,
40057
+ descH,
40058
+ connectorLabels,
40059
+ itemShape,
40060
+ resolveHierarchyItemFontSizePx(nodes, algorithmNode, index, descW, descH, fontName)
40061
+ );
40062
+ const rootChildGap = ROOT_CHILD_GAP_RATIO * descH;
40063
+ const branchCount = roots.length;
40064
+ roots.forEach((root, i2) => {
40065
+ const columnIndex = reversed ? branchCount - 1 - i2 : i2;
40066
+ const branchX = columnIndex * (rootW + gap);
40067
+ pushNode(hc, root.node, branchX, 0, rootW, rootH);
40068
+ const edgeX = side === "right" ? branchX + rootW : branchX;
40069
+ let y = rootH + rootChildGap;
40070
+ for (const child262 of root.children) {
40071
+ y = placeDescendantColumn(
40072
+ hc,
40073
+ child262,
40074
+ edgeX,
40075
+ side,
40076
+ y,
40077
+ descW,
40078
+ descH,
40079
+ DESCENDANT_STACK_GAP_RATIO * descH,
40080
+ root.node.id,
40081
+ branchX + rootW / 2,
40082
+ rootH
40083
+ );
40084
+ }
40085
+ });
40086
+ return {
40087
+ nodes: hc.nodes,
40088
+ connectors: hc.connectors,
40089
+ shadowFilter: hc.ctx.shadow,
40090
+ viewBox: `0 0 ${box.width} ${box.height}`,
40091
+ family: "hierarchy"
40092
+ };
40093
+ }
40094
+ var ROOT_CHILD_GAP_RATIO;
40095
+ var DESCENDANT_STACK_GAP_RATIO;
40096
+ var init_smartart_hierarchy_fanned_hang = __esm({
40097
+ "src/core/utils/smartart-hierarchy-fanned-hang.ts"() {
40098
+ init_smartart_hierarchy_fanned_hang_geometry();
40099
+ init_smartart_hierarchy_shared();
40100
+ init_smartart_layout_interpreter_hierarchy_fontfit();
40101
+ ROOT_CHILD_GAP_RATIO = 0.98;
40102
+ DESCENDANT_STACK_GAP_RATIO = 0;
40103
+ }
40104
+ });
39752
40105
  function placeAssistants(hc, x, parentBottom, assistants, options, cursor) {
39753
40106
  for (const assistant of assistants) {
39754
40107
  const y = cursor.y;
@@ -39808,7 +40161,7 @@ function resolveRowGapRatio(constraints, descendantName) {
39808
40161
  );
39809
40162
  return sibSp?.factor;
39810
40163
  }
39811
- function fitHangingBox(algorithmNode, index, w, h2, rows) {
40164
+ function fitHangingBox(algorithmNode, index, w, h2, rows, nodeCount, presLayoutVars) {
39812
40165
  const fallbackBoxH = Math.min(h2 * FALLBACK_BOX_H_RATIO, FALLBACK_BOX_H_MAX);
39813
40166
  const fallback = {
39814
40167
  boxW: Math.min(w * FALLBACK_BOX_W_RATIO, FALLBACK_BOX_W_MAX),
@@ -39818,7 +40171,12 @@ function fitHangingBox(algorithmNode, index, w, h2, rows) {
39818
40171
  if (!algorithmNode || rows < 1) {
39819
40172
  return fallback;
39820
40173
  }
39821
- const templates = resolveHierarchyGenerationTemplates(algorithmNode, index);
40174
+ const templates = resolveHierarchyGenerationTemplates(
40175
+ algorithmNode,
40176
+ index,
40177
+ nodeCount,
40178
+ presLayoutVars
40179
+ );
39822
40180
  if (!templates) {
39823
40181
  return fallback;
39824
40182
  }
@@ -39889,41 +40247,11 @@ var init_smartart_hierarchy_hanging_fold = __esm({
39889
40247
  init_smartart_hierarchy_orgchart_tree();
39890
40248
  }
39891
40249
  });
39892
- function resolveHierarchyItemFontSizePx(nodes, algorithmNode, index, boxW, boxH, fontName) {
39893
- if (!algorithmNode) {
39894
- return void 0;
39895
- }
39896
- const textNodes = nodes.filter((node) => node.text && node.text.trim().length > 0);
39897
- if (textNodes.length === 0) {
39898
- return void 0;
39899
- }
39900
- const plan = { node: algorithmNode };
39901
- const { rootSizePx } = resolveTieredItemFontSize(
39902
- plan,
39903
- index,
39904
- textNodes.map((node) => ({
39905
- rootText: node.text,
39906
- descendantTexts: [],
39907
- width: boxW,
39908
- height: boxH
39909
- })),
39910
- fontName,
39911
- void 0,
39912
- 0,
39913
- algorithmNode
39914
- );
39915
- return rootSizePx;
39916
- }
39917
- var init_smartart_layout_interpreter_hierarchy_fontfit = __esm({
39918
- "src/core/utils/smartart-layout-interpreter-hierarchy-fontfit.ts"() {
39919
- init_smartart_layout_item_font_tier();
39920
- }
39921
- });
39922
- function arrangeFullyHangingTree(nodes, box, palette, style, elementId, roots, itemShape, connectorLabels, algorithmNode, index, fontName, linDir, orgChart, cornerSide) {
40250
+ function arrangeFullyHangingTree(nodes, box, palette, style, elementId, roots, itemShape, connectorLabels, algorithmNode, index, fontName, linDir, orgChart, presLayoutVars, cornerSide) {
39923
40251
  const { width: w, height: h2 } = box;
39924
40252
  const foldDeeperGenerations = algorithmNode ? hierarchyLeafFoldsDescendants(algorithmNode) : false;
39925
40253
  const rows = countHangingRows(roots, orgChart, foldDeeperGenerations);
39926
- const fit = fitHangingBox(algorithmNode, index, w, h2, rows);
40254
+ const fit = fitHangingBox(algorithmNode, index, w, h2, rows, nodes.length, presLayoutVars);
39927
40255
  const { boxW, boxH, vGap } = fit;
39928
40256
  const indent = boxW * 0.35;
39929
40257
  const hc = baseContext(
@@ -39979,6 +40307,51 @@ var init_smartart_hierarchy_hanging_arrange = __esm({
39979
40307
  HANGING_MODE_INSET = 6;
39980
40308
  }
39981
40309
  });
40310
+ function dispatchHangingMode(nodes, box, palette, style, elementId, roots, itemShape, connectorLabels, algorithmNode, index, fontName, presLayoutVars, orgChart, cornerPlan) {
40311
+ if (roots.length > 1) {
40312
+ const fanned = arrangeFannedHangingForest(
40313
+ nodes,
40314
+ box,
40315
+ palette,
40316
+ style,
40317
+ elementId,
40318
+ roots,
40319
+ itemShape,
40320
+ connectorLabels,
40321
+ algorithmNode,
40322
+ index,
40323
+ fontName,
40324
+ presLayoutVars,
40325
+ orgChart
40326
+ );
40327
+ if (fanned) {
40328
+ return fanned;
40329
+ }
40330
+ }
40331
+ return arrangeFullyHangingTree(
40332
+ nodes,
40333
+ box,
40334
+ palette,
40335
+ style,
40336
+ elementId,
40337
+ roots,
40338
+ itemShape,
40339
+ connectorLabels,
40340
+ algorithmNode,
40341
+ index,
40342
+ fontName,
40343
+ cornerPlan?.linDir,
40344
+ orgChart,
40345
+ presLayoutVars,
40346
+ cornerPlan?.side
40347
+ );
40348
+ }
40349
+ var init_smartart_hierarchy_hang_dispatch = __esm({
40350
+ "src/core/utils/smartart-hierarchy-hang-dispatch.ts"() {
40351
+ init_smartart_hierarchy_fanned_hang();
40352
+ init_smartart_hierarchy_hanging_arrange();
40353
+ }
40354
+ });
39982
40355
  function findCompositeDescendant(node) {
39983
40356
  if (!node) {
39984
40357
  return void 0;
@@ -40335,7 +40708,7 @@ function resolveHierarchyOrientation(algorithmNode, index, mode = "std", itemSha
40335
40708
  index,
40336
40709
  roleOf(algorithmNode),
40337
40710
  ["sibSp"],
40338
- DEFAULT_SIB_SP_RATIO,
40711
+ DEFAULT_SIB_SP_RATIO2,
40339
40712
  algorithmNode?.rules
40340
40713
  );
40341
40714
  if (sibSpReferencesHeight || tailedTransposed) {
@@ -40399,7 +40772,7 @@ function resolveHierarchyOrientation(algorithmNode, index, mode = "std", itemSha
40399
40772
  cardOffsetXRatio: compositeChild?.offsetXRatio ?? 0
40400
40773
  };
40401
40774
  }
40402
- var DEFAULT_SIB_SP_RATIO;
40775
+ var DEFAULT_SIB_SP_RATIO2;
40403
40776
  var OUTER_MARGIN_X_RATIO;
40404
40777
  var OUTER_MARGIN_Y_RATIO;
40405
40778
  var init_smartart_hierarchy_orientation = __esm({
@@ -40415,7 +40788,7 @@ var init_smartart_hierarchy_orientation = __esm({
40415
40788
  init_smartart_hierarchy_transpose();
40416
40789
  init_smartart_hierarchy_fit_item_box();
40417
40790
  init_smartart_hierarchy_child_order();
40418
- DEFAULT_SIB_SP_RATIO = 0.1;
40791
+ DEFAULT_SIB_SP_RATIO2 = 0.1;
40419
40792
  OUTER_MARGIN_X_RATIO = 0.0491;
40420
40793
  OUTER_MARGIN_Y_RATIO = 0.0707;
40421
40794
  }
@@ -40841,7 +41214,7 @@ function arrangeHierarchy(nodes, box, palette, style, elementId, presLayoutVars,
40841
41214
  const mode = branchMode(presLayoutVars, cornerPlan?.linDir);
40842
41215
  const itemShape = algorithmNode ? findHierarchyItemShape(algorithmNode) : void 0;
40843
41216
  if (mode === "hanging") {
40844
- return arrangeFullyHangingTree(
41217
+ return dispatchHangingMode(
40845
41218
  nodes,
40846
41219
  box,
40847
41220
  palette,
@@ -40853,9 +41226,9 @@ function arrangeHierarchy(nodes, box, palette, style, elementId, presLayoutVars,
40853
41226
  algorithmNode,
40854
41227
  index,
40855
41228
  fontName,
40856
- cornerPlan?.linDir,
41229
+ presLayoutVars,
40857
41230
  orgChart,
40858
- cornerPlan?.side
41231
+ cornerPlan
40859
41232
  );
40860
41233
  }
40861
41234
  const { orientation, swapAxes, effectiveBox } = resolveHierarchyEffectiveOrientation(
@@ -40965,7 +41338,7 @@ var init_smartart_layout_interpreter_hierarchy = __esm({
40965
41338
  init_smartart_hierarchy_fan_aware_width();
40966
41339
  init_smartart_hierarchy_fold_depth();
40967
41340
  init_smartart_hierarchy_hang_depth();
40968
- init_smartart_hierarchy_hanging_arrange();
41341
+ init_smartart_hierarchy_hang_dispatch();
40969
41342
  init_smartart_hierarchy_orgchart_tree();
40970
41343
  init_smartart_hierarchy_orientation();
40971
41344
  init_smartart_hierarchy_orientation_resolve();
@@ -46524,16 +46897,29 @@ function parseChartUniqueId(node, localName28) {
46524
46897
  const val2 = uniqueIdNode?.["@_val"];
46525
46898
  return typeof val2 === "string" && val2.length > 0 ? val2 : void 0;
46526
46899
  }
46900
+ function randomBytes(length) {
46901
+ const cryptoObj = typeof crypto === "undefined" ? void 0 : crypto;
46902
+ if (cryptoObj && typeof cryptoObj.getRandomValues === "function") {
46903
+ return cryptoObj.getRandomValues(new Uint8Array(length));
46904
+ }
46905
+ const bytes = new Uint8Array(length);
46906
+ for (let i2 = 0; i2 < length; i2++) {
46907
+ bytes[i2] = Math.floor(Math.random() * 256);
46908
+ }
46909
+ return bytes;
46910
+ }
46527
46911
  function randomHex(length) {
46912
+ const bytes = randomBytes(Math.ceil(length / 2));
46528
46913
  let out = "";
46529
- for (let i2 = 0; i2 < length; i2++) {
46530
- out += Math.floor(Math.random() * 16).toString(16);
46914
+ for (const b of bytes) {
46915
+ out += b.toString(16).padStart(2, "0");
46531
46916
  }
46532
- return out;
46917
+ return out.slice(0, length);
46533
46918
  }
46534
46919
  function generateChartUniqueId() {
46535
46920
  const cryptoObj = typeof crypto === "undefined" ? void 0 : crypto;
46536
- const uuid = cryptoObj && typeof cryptoObj.randomUUID === "function" ? cryptoObj.randomUUID() : `${randomHex(8)}-${randomHex(4)}-4${randomHex(3)}-${(8 + Math.floor(Math.random() * 4)).toString(16)}${randomHex(3)}-${randomHex(12)}`;
46921
+ const variantNibble = (8 + randomBytes(1)[0] % 4).toString(16);
46922
+ const uuid = cryptoObj && typeof cryptoObj.randomUUID === "function" ? cryptoObj.randomUUID() : `${randomHex(8)}-${randomHex(4)}-4${randomHex(3)}-${variantNibble}${randomHex(3)}-${randomHex(12)}`;
46537
46923
  return `{${uuid.toUpperCase()}}`;
46538
46924
  }
46539
46925
  function buildChartUniqueIdExtLst(uniqueId) {
@@ -49293,7 +49679,7 @@ function parseWorksheetCells(xml) {
49293
49679
  return [];
49294
49680
  }
49295
49681
  const rows = getChildArray(sheetData, "row");
49296
- const cells = [];
49682
+ const cells2 = [];
49297
49683
  for (const row of rows) {
49298
49684
  const cellNodes = getChildArray(row, "c");
49299
49685
  for (const cell of cellNodes) {
@@ -49307,7 +49693,7 @@ function parseWorksheetCells(xml) {
49307
49693
  if (rawValue === void 0) {
49308
49694
  continue;
49309
49695
  }
49310
- cells.push({
49696
+ cells2.push({
49311
49697
  col,
49312
49698
  row: rowIdx,
49313
49699
  type: cellType,
@@ -49315,7 +49701,7 @@ function parseWorksheetCells(xml) {
49315
49701
  });
49316
49702
  }
49317
49703
  }
49318
- return cells;
49704
+ return cells2;
49319
49705
  }
49320
49706
  function findByLocalName2(obj, localName28) {
49321
49707
  for (const key2 of Object.keys(obj)) {
@@ -49416,13 +49802,13 @@ async function parseEmbeddedXlsx(xlsxData) {
49416
49802
  }
49417
49803
  const sheet1Xml = await sheet1File.async("string");
49418
49804
  const parsedSheet = xmlParser.parse(sheet1Xml);
49419
- const cells = parseWorksheetCells(parsedSheet);
49420
- if (cells.length === 0) {
49805
+ const cells2 = parseWorksheetCells(parsedSheet);
49806
+ if (cells2.length === 0) {
49421
49807
  return void 0;
49422
49808
  }
49423
49809
  let maxRow = 0;
49424
49810
  let maxCol = 0;
49425
- for (const cell of cells) {
49811
+ for (const cell of cells2) {
49426
49812
  if (cell.row > maxRow) {
49427
49813
  maxRow = cell.row;
49428
49814
  }
@@ -49434,7 +49820,7 @@ async function parseEmbeddedXlsx(xlsxData) {
49434
49820
  for (let r = 0; r <= maxRow; r++) {
49435
49821
  grid[r] = Array.from({ length: maxCol + 1 }).fill(void 0);
49436
49822
  }
49437
- for (const cell of cells) {
49823
+ for (const cell of cells2) {
49438
49824
  grid[cell.row][cell.col] = resolveCellValue(cell, sharedStrings);
49439
49825
  }
49440
49826
  if (maxRow === 0 && maxCol === 0) {
@@ -67376,11 +67762,11 @@ function annotateParagraphSiblingOrder(xml, parsed) {
67376
67762
  }
67377
67763
  }
67378
67764
  }
67379
- function paragraphContentEntries(paragraph, contentTags, ensureArray20) {
67765
+ function paragraphContentEntries(paragraph, contentTags) {
67380
67766
  const order = childOrder2.get(paragraph);
67381
67767
  if (!order) {
67382
67768
  const entries2 = Object.keys(paragraph).flatMap(
67383
- (key2) => contentTags.has(key2) ? ensureArray20(paragraph[key2]).map((item) => [key2, item]) : []
67769
+ (key2) => contentTags.has(key2) ? ensureItems(paragraph[key2]).map((item) => [key2, item]) : []
67384
67770
  );
67385
67771
  return { entries: entries2, authored: false };
67386
67772
  }
@@ -67392,7 +67778,7 @@ function paragraphContentEntries(paragraph, contentTags, ensureArray20) {
67392
67778
  if (!contentTags.has(tag)) {
67393
67779
  continue;
67394
67780
  }
67395
- const item = ensureArray20(paragraph[tag])[index];
67781
+ const item = ensureItems(paragraph[tag])[index];
67396
67782
  if (item !== void 0) {
67397
67783
  entries.push([tag, item]);
67398
67784
  }
@@ -67458,29 +67844,29 @@ function extractTableCellTextRuns(tableCell, context) {
67458
67844
  return void 0;
67459
67845
  }
67460
67846
  const runs = [];
67461
- let textRunCount = 0;
67847
+ let contentRunCount = 0;
67462
67848
  paragraphs.forEach((paragraph, paragraphIndex) => {
67463
67849
  if (paragraphIndex > 0) {
67464
67850
  runs.push({ text: "", isParagraphBreak: true });
67465
67851
  }
67466
- const { entries } = paragraphContentEntries(
67467
- paragraph,
67468
- CELL_CONTENT_TAGS,
67469
- (value) => context.ensureArray(value)
67470
- );
67852
+ const { entries } = paragraphContentEntries(paragraph, CELL_CONTENT_TAGS);
67471
67853
  for (const [tag, item] of entries) {
67472
67854
  if (tag === "a:br") {
67473
67855
  runs.push({ text: "", isLineBreak: true });
67856
+ contentRunCount++;
67474
67857
  continue;
67475
67858
  }
67476
67859
  const node = item;
67477
67860
  const run = { text: String(node?.["a:t"] ?? "") };
67861
+ if (tag === "a:fld") {
67862
+ run.isField = true;
67863
+ }
67478
67864
  applyRunProperties(run, node?.["a:rPr"], context);
67479
67865
  runs.push(run);
67480
- textRunCount++;
67866
+ contentRunCount++;
67481
67867
  }
67482
67868
  });
67483
- return textRunCount > 0 ? runs : void 0;
67869
+ return contentRunCount > 0 ? runs : void 0;
67484
67870
  }
67485
67871
  var CELL_CONTENT_TAGS;
67486
67872
  var init_table_cell_runs = __esm({
@@ -99938,6 +100324,149 @@ var init_save_table_merge_helpers = __esm({
99938
100324
  ];
99939
100325
  }
99940
100326
  });
100327
+ function runTag(run) {
100328
+ return run.isLineBreak ? "a:br" : run.isField ? "a:fld" : "a:r";
100329
+ }
100330
+ function supportsOrder(paragraph, tags) {
100331
+ for (const [key2, value] of Object.entries(paragraph)) {
100332
+ if (key2.startsWith("@_") || key2 === "a:pPr" || key2 === "a:endParaRPr") {
100333
+ continue;
100334
+ }
100335
+ if (key2 === "#text" && String(value).trim() === "") {
100336
+ continue;
100337
+ }
100338
+ if (!CONTENT_TAGS.has(key2)) {
100339
+ return false;
100340
+ }
100341
+ }
100342
+ return [...CONTENT_TAGS].every(
100343
+ (tag) => tags.filter((candidate) => candidate === tag).length === ensureItems(paragraph[tag]).length
100344
+ );
100345
+ }
100346
+ function matchesParagraph(paragraph, runs) {
100347
+ if (!supportsOrder(paragraph, runs.map(runTag))) {
100348
+ return false;
100349
+ }
100350
+ const consumed = /* @__PURE__ */ new Map();
100351
+ for (const run of runs) {
100352
+ const tag = runTag(run);
100353
+ const index = consumed.get(tag) ?? 0;
100354
+ const node = ensureItems(paragraph[tag])[index];
100355
+ if (node === void 0) {
100356
+ return false;
100357
+ }
100358
+ if (tag !== "a:br" && (!isXmlObject3(node) || String(node["a:t"] ?? "") !== run.text)) {
100359
+ return false;
100360
+ }
100361
+ consumed.set(tag, index + 1);
100362
+ }
100363
+ return true;
100364
+ }
100365
+ function recordTableParagraphOrder(xmlCell, textRuns) {
100366
+ const txBody = xmlCell["a:txBody"];
100367
+ const paragraphs = isXmlObject3(txBody) ? ensureItems(txBody["a:p"]) : [];
100368
+ for (const paragraph of paragraphs) {
100369
+ if (isXmlObject3(paragraph)) {
100370
+ paragraphOrders.delete(paragraph);
100371
+ }
100372
+ }
100373
+ if (!textRuns) {
100374
+ return;
100375
+ }
100376
+ const runsByParagraph = [[]];
100377
+ for (const run of textRuns) {
100378
+ if (run.isParagraphBreak) {
100379
+ runsByParagraph.push([]);
100380
+ } else {
100381
+ runsByParagraph.at(-1).push(run);
100382
+ }
100383
+ }
100384
+ if (runsByParagraph.length !== paragraphs.length) {
100385
+ return;
100386
+ }
100387
+ paragraphs.forEach((paragraph, index) => {
100388
+ const runs = runsByParagraph[index];
100389
+ const tags = runs.map(runTag);
100390
+ if (isXmlObject3(paragraph) && !isGroupedByTag(tags) && matchesParagraph(paragraph, runs)) {
100391
+ paragraphOrders.set(paragraph, tags);
100392
+ }
100393
+ });
100394
+ }
100395
+ function orderedParagraph(paragraph, tags) {
100396
+ const result = {};
100397
+ for (const [key2, value] of Object.entries(paragraph)) {
100398
+ if (!CONTENT_TAGS.has(key2) && key2 !== "a:pPr" && key2 !== "a:endParaRPr") {
100399
+ setOwnXmlProperty(result, key2, value);
100400
+ }
100401
+ }
100402
+ if (paragraph["a:pPr"] !== void 0) {
100403
+ result["a:pPr"] = paragraph["a:pPr"];
100404
+ }
100405
+ const consumed = /* @__PURE__ */ new Map();
100406
+ assignOrderedXmlChildren(
100407
+ result,
100408
+ tags.map((tag) => {
100409
+ const index = consumed.get(tag) ?? 0;
100410
+ consumed.set(tag, index + 1);
100411
+ return { tag, node: ensureItems(paragraph[tag])[index] };
100412
+ })
100413
+ );
100414
+ if (paragraph["a:endParaRPr"] !== void 0) {
100415
+ result["a:endParaRPr"] = paragraph["a:endParaRPr"];
100416
+ }
100417
+ return result;
100418
+ }
100419
+ function withOrderedTableParagraphs(value, insideTable = false) {
100420
+ if (Array.isArray(value)) {
100421
+ let result2 = value;
100422
+ value.forEach((item, index) => {
100423
+ const next = withOrderedTableParagraphs(item, insideTable);
100424
+ if (next !== item) {
100425
+ if (result2 === value) {
100426
+ result2 = [...value];
100427
+ }
100428
+ result2[index] = next;
100429
+ }
100430
+ });
100431
+ return result2;
100432
+ }
100433
+ if (!isXmlObject3(value)) {
100434
+ return value;
100435
+ }
100436
+ let result = value;
100437
+ for (const [key2, item] of Object.entries(value)) {
100438
+ if (key2.startsWith("@_") || key2 === "#text") {
100439
+ continue;
100440
+ }
100441
+ const next = withOrderedTableParagraphs(item, insideTable || key2 === "a:tbl");
100442
+ if (next !== item) {
100443
+ if (result === value) {
100444
+ result = { ...value };
100445
+ }
100446
+ setOwnXmlProperty(result, key2, next);
100447
+ }
100448
+ }
100449
+ let tags = paragraphOrders.get(value);
100450
+ if (!tags && insideTable) {
100451
+ const { entries, authored } = paragraphContentEntries(value, CONTENT_TAGS);
100452
+ const sourceTags = entries.map(([tag]) => tag);
100453
+ if (authored && supportsOrder(value, sourceTags)) {
100454
+ tags = sourceTags;
100455
+ }
100456
+ }
100457
+ return tags ? orderedParagraph(result, tags) : result;
100458
+ }
100459
+ var CONTENT_TAGS;
100460
+ var paragraphOrders;
100461
+ var init_table_paragraph_save_order = __esm({
100462
+ "src/core/core/runtime/table-paragraph-save-order.ts"() {
100463
+ init_ordered_xml_children();
100464
+ init_paragraph_sibling_order();
100465
+ init_xml_child_scan();
100466
+ CONTENT_TAGS = /* @__PURE__ */ new Set(["a:r", "a:br", "a:fld"]);
100467
+ paragraphOrders = /* @__PURE__ */ new WeakMap();
100468
+ }
100469
+ });
99941
100470
  function ensureArray19(value) {
99942
100471
  if (value === void 0 || value === null) {
99943
100472
  return [];
@@ -99958,6 +100487,13 @@ function createDefaultXmlCell() {
99958
100487
  "a:tcPr": {}
99959
100488
  };
99960
100489
  }
100490
+ function createDefaultXmlRow(colCount, heightEmu) {
100491
+ const cells2 = Array.from({ length: colCount }, () => createDefaultXmlCell());
100492
+ return {
100493
+ "@_h": String(DEFAULT_ROW_HEIGHT_EMU),
100494
+ "a:tc": cells2.length === 1 ? cells2[0] : cells2
100495
+ };
100496
+ }
99961
100497
  function getTblFromRawXml(rawXml) {
99962
100498
  const graphicData = rawXml["a:graphic"]?.["a:graphicData"];
99963
100499
  return graphicData?.["a:tbl"];
@@ -100156,6 +100692,157 @@ var init_table_create_xml = __esm({
100156
100692
  init_table_style_defaults();
100157
100693
  }
100158
100694
  });
100695
+ function cells(row) {
100696
+ return ensureArray19(row["a:tc"]);
100697
+ }
100698
+ function promoteTextBody(source, next, removed, survivor, axis) {
100699
+ const span = axis === "row" ? "rowSpan" : "gridSpan";
100700
+ const continuation = axis === "row" ? "vMerge" : "hMerge";
100701
+ if (!source?.text || !next || !removed || !survivor || source[continuation] || (source[span] ?? 1) <= 1 || next[continuation] || (next[span] ?? 1) !== (source[span] ?? 1) - 1) {
100702
+ return;
100703
+ }
100704
+ if (removed["a:txBody"] !== void 0) {
100705
+ survivor["a:txBody"] = removed["a:txBody"];
100706
+ }
100707
+ }
100708
+ function applyTableStructureEditXml(table2, source, next, edit) {
100709
+ const rows = ensureArray19(table2["a:tr"]);
100710
+ const grid = table2["a:tblGrid"];
100711
+ const columns = ensureArray19(grid?.["a:gridCol"]);
100712
+ const { axis, action, index } = edit;
100713
+ if (axis !== "row" && axis !== "column" || action !== "insert" && action !== "delete") {
100714
+ return false;
100715
+ }
100716
+ const count = axis === "row" ? rows.length : columns.length;
100717
+ const delta = action === "insert" ? 1 : -1;
100718
+ if (!grid || !Number.isInteger(index) || index < 0 || index > count - (action === "delete" ? 1 : 0) || action === "delete" && count <= 1 || next.rows.length !== rows.length + (axis === "row" ? delta : 0) || next.columnWidths.length !== columns.length + (axis === "column" ? delta : 0)) {
100719
+ return false;
100720
+ }
100721
+ if (axis === "row") {
100722
+ if (action === "insert") {
100723
+ rows.splice(index, 0, createDefaultXmlRow(columns.length));
100724
+ } else {
100725
+ const removedCells = cells(rows[index]);
100726
+ const nextCells = rows[index + 1] ? cells(rows[index + 1]) : [];
100727
+ removedCells.forEach(
100728
+ (removed, column) => promoteTextBody(
100729
+ source?.rows[index]?.cells[column],
100730
+ next.rows[index]?.cells[column],
100731
+ removed,
100732
+ nextCells[column],
100733
+ axis
100734
+ )
100735
+ );
100736
+ rows.splice(index, 1);
100737
+ }
100738
+ table2["a:tr"] = rows.length === 1 ? rows[0] : rows;
100739
+ } else {
100740
+ if (action === "insert") {
100741
+ columns.splice(index, 0, { "@_w": "0" });
100742
+ } else {
100743
+ columns.splice(index, 1);
100744
+ }
100745
+ grid["a:gridCol"] = columns.length === 1 ? columns[0] : columns;
100746
+ rows.forEach((row, rowIndex) => {
100747
+ const rowCells = cells(row);
100748
+ if (action === "insert") {
100749
+ rowCells.splice(index, 0, createDefaultXmlCell());
100750
+ } else {
100751
+ promoteTextBody(
100752
+ source?.rows[rowIndex]?.cells[index],
100753
+ next.rows[rowIndex]?.cells[index],
100754
+ rowCells[index],
100755
+ rowCells[index + 1],
100756
+ axis
100757
+ );
100758
+ rowCells.splice(index, 1);
100759
+ }
100760
+ row["a:tc"] = rowCells.length === 1 ? rowCells[0] : rowCells;
100761
+ });
100762
+ }
100763
+ return true;
100764
+ }
100765
+ var init_table_structure_edit_xml = __esm({
100766
+ "src/core/core/runtime/table-structure-edit-xml.ts"() {
100767
+ init_table_structural_helpers();
100768
+ }
100769
+ });
100770
+ function createDefaultRebuildXmlCell() {
100771
+ return {
100772
+ "a:txBody": {
100773
+ "a:bodyPr": {},
100774
+ "a:lstStyle": {},
100775
+ "a:p": {
100776
+ "a:endParaRPr": { "@_lang": "en-US" }
100777
+ }
100778
+ },
100779
+ "a:tcPr": {}
100780
+ };
100781
+ }
100782
+ function rebuildTableStructureInRawXml(element, tableData, edit) {
100783
+ if (!element.rawXml) {
100784
+ return void 0;
100785
+ }
100786
+ const newRawXml = structuredClone(element.rawXml);
100787
+ const table2 = getTblFromRawXml(newRawXml);
100788
+ if (!table2) {
100789
+ return void 0;
100790
+ }
100791
+ const existingGridCols = ensureArray19(
100792
+ table2["a:tblGrid"]?.["a:gridCol"]
100793
+ );
100794
+ const totalWidthEmu = existingGridCols.reduce((sum, col) => {
100795
+ return sum + (parseInt(String(col?.["@_w"] || "0"), 10) || 0);
100796
+ }, 0) || 9144e3;
100797
+ const appliedEdit = edit ? applyTableStructureEditXml(
100798
+ table2,
100799
+ element.type === "table" ? element.tableData : void 0,
100800
+ tableData,
100801
+ edit
100802
+ ) : false;
100803
+ const alignedGridCols = ensureArray19(
100804
+ table2["a:tblGrid"]?.["a:gridCol"]
100805
+ );
100806
+ const newGridCols = tableData.columnWidths.map((w, index) => ({
100807
+ ...appliedEdit ? alignedGridCols[index] : {},
100808
+ "@_w": String(Math.round(w * totalWidthEmu))
100809
+ }));
100810
+ if (!table2["a:tblGrid"]) {
100811
+ table2["a:tblGrid"] = {};
100812
+ }
100813
+ table2["a:tblGrid"]["a:gridCol"] = newGridCols.length === 1 ? newGridCols[0] : newGridCols;
100814
+ const existingXmlRows = ensureArray19(table2["a:tr"]);
100815
+ const newXmlRows = tableData.rows.map((dataRow, ri) => {
100816
+ const existingRow = ri < existingXmlRows.length ? existingXmlRows[ri] : void 0;
100817
+ const existingCells = existingRow ? ensureArray19(existingRow["a:tc"]) : [];
100818
+ const heightEmu = dataRow.height ? Math.round(dataRow.height * EMU_PER_PX) : existingRow?.["@_h"] ? parseInt(String(existingRow["@_h"]), 10) : DEFAULT_ROW_HEIGHT_EMU;
100819
+ const newXmlCells = dataRow.cells.map((cell, ci) => {
100820
+ let xmlCell;
100821
+ if (ci < existingCells.length) {
100822
+ xmlCell = existingCells[ci];
100823
+ } else {
100824
+ xmlCell = createDefaultRebuildXmlCell();
100825
+ }
100826
+ serializeCellMergeAttributes(xmlCell, cell);
100827
+ return xmlCell;
100828
+ });
100829
+ return {
100830
+ ...appliedEdit ? existingRow : {},
100831
+ "@_h": String(heightEmu),
100832
+ "a:tc": newXmlCells.length === 1 ? newXmlCells[0] : newXmlCells
100833
+ };
100834
+ });
100835
+ table2["a:tr"] = newXmlRows.length === 1 ? newXmlRows[0] : newXmlRows;
100836
+ return newRawXml;
100837
+ }
100838
+ var init_table_structure_rawxml = __esm({
100839
+ "src/core/core/runtime/table-structure-rawxml.ts"() {
100840
+ init_constants();
100841
+ init_save_table_merge_helpers();
100842
+ init_table_structural_helpers();
100843
+ init_table_structure_edit_xml();
100844
+ }
100845
+ });
100159
100846
  function updateCellTextInRawXml(element, rowIndex, colIndex, text22) {
100160
100847
  if (!element.rawXml) {
100161
100848
  return void 0;
@@ -100169,12 +100856,12 @@ function updateCellTextInRawXml(element, rowIndex, colIndex, text22) {
100169
100856
  if (rowIndex < 0 || rowIndex >= rows.length) {
100170
100857
  return void 0;
100171
100858
  }
100172
- const cells = ensureArray19(rows[rowIndex]["a:tc"]);
100173
- if (colIndex < 0 || colIndex >= cells.length) {
100859
+ const cells2 = ensureArray19(rows[rowIndex]["a:tc"]);
100860
+ if (colIndex < 0 || colIndex >= cells2.length) {
100174
100861
  return void 0;
100175
100862
  }
100176
- cells[colIndex]["a:txBody"] = rebuildCellTextBody(
100177
- cells[colIndex]["a:txBody"],
100863
+ cells2[colIndex]["a:txBody"] = rebuildCellTextBody(
100864
+ cells2[colIndex]["a:txBody"],
100178
100865
  text22
100179
100866
  );
100180
100867
  return newRawXml;
@@ -100219,11 +100906,11 @@ function updateCellTextStyleInRawXml(element, rowIndex, colIndex, styleUpdates)
100219
100906
  if (rowIndex < 0 || rowIndex >= rows.length) {
100220
100907
  return void 0;
100221
100908
  }
100222
- const cells = ensureArray19(rows[rowIndex]["a:tc"]);
100223
- if (colIndex < 0 || colIndex >= cells.length) {
100909
+ const cells2 = ensureArray19(rows[rowIndex]["a:tc"]);
100910
+ if (colIndex < 0 || colIndex >= cells2.length) {
100224
100911
  return void 0;
100225
100912
  }
100226
- const cell = cells[colIndex];
100913
+ const cell = cells2[colIndex];
100227
100914
  const txBody = cell["a:txBody"];
100228
100915
  if (!txBody) {
100229
100916
  return void 0;
@@ -100354,87 +101041,11 @@ function updateMergeAttrsInRawXml(element, tableData) {
100354
101041
  }
100355
101042
  return newRawXml;
100356
101043
  }
100357
- function createDefaultRebuildXmlCell() {
100358
- return {
100359
- "a:txBody": {
100360
- "a:bodyPr": {},
100361
- "a:lstStyle": {},
100362
- "a:p": {
100363
- "a:endParaRPr": { "@_lang": "en-US" }
100364
- }
100365
- },
100366
- "a:tcPr": {}
100367
- };
100368
- }
100369
- function rebuildTableStructureInRawXml(element, tableData) {
100370
- if (!element.rawXml) {
100371
- return void 0;
100372
- }
100373
- const newRawXml = structuredClone(element.rawXml);
100374
- const table2 = getTblFromRawXml(newRawXml);
100375
- if (!table2) {
100376
- return void 0;
100377
- }
100378
- const existingGridCols = ensureArray19(
100379
- table2["a:tblGrid"]?.["a:gridCol"]
100380
- );
100381
- const totalWidthEmu = existingGridCols.reduce((sum, col) => {
100382
- return sum + (parseInt(String(col?.["@_w"] || "0"), 10) || 0);
100383
- }, 0) || 9144e3;
100384
- const newGridCols = tableData.columnWidths.map((w) => ({
100385
- "@_w": String(Math.round(w * totalWidthEmu))
100386
- }));
100387
- if (!table2["a:tblGrid"]) {
100388
- table2["a:tblGrid"] = {};
100389
- }
100390
- table2["a:tblGrid"]["a:gridCol"] = newGridCols.length === 1 ? newGridCols[0] : newGridCols;
100391
- const existingXmlRows = ensureArray19(table2["a:tr"]);
100392
- const newXmlRows = tableData.rows.map((dataRow, ri) => {
100393
- const existingRow = ri < existingXmlRows.length ? existingXmlRows[ri] : void 0;
100394
- const existingCells = existingRow ? ensureArray19(existingRow["a:tc"]) : [];
100395
- const heightEmu = dataRow.height ? Math.round(dataRow.height * EMU_PER_PX) : existingRow?.["@_h"] ? parseInt(String(existingRow["@_h"]), 10) : DEFAULT_ROW_HEIGHT_EMU;
100396
- const newXmlCells = dataRow.cells.map((cell, ci) => {
100397
- let xmlCell;
100398
- if (ci < existingCells.length) {
100399
- xmlCell = structuredClone(existingCells[ci]);
100400
- } else {
100401
- xmlCell = createDefaultRebuildXmlCell();
100402
- }
100403
- if (cell.gridSpan !== void 0 && cell.gridSpan > 1) {
100404
- xmlCell["@_gridSpan"] = String(cell.gridSpan);
100405
- } else {
100406
- delete xmlCell["@_gridSpan"];
100407
- }
100408
- if (cell.rowSpan !== void 0 && cell.rowSpan > 1) {
100409
- xmlCell["@_rowSpan"] = String(cell.rowSpan);
100410
- } else {
100411
- delete xmlCell["@_rowSpan"];
100412
- }
100413
- if (cell.hMerge) {
100414
- xmlCell["@_hMerge"] = "1";
100415
- } else {
100416
- delete xmlCell["@_hMerge"];
100417
- }
100418
- if (cell.vMerge) {
100419
- xmlCell["@_vMerge"] = "1";
100420
- } else {
100421
- delete xmlCell["@_vMerge"];
100422
- }
100423
- return xmlCell;
100424
- });
100425
- return {
100426
- "@_h": String(heightEmu),
100427
- "a:tc": newXmlCells.length === 1 ? newXmlCells[0] : newXmlCells
100428
- };
100429
- });
100430
- table2["a:tr"] = newXmlRows.length === 1 ? newXmlRows[0] : newXmlRows;
100431
- return newRawXml;
100432
- }
100433
101044
  var init_table_cell_rawxml_ops = __esm({
100434
101045
  "src/core/core/runtime/table-cell-rawxml-ops.ts"() {
100435
- init_constants();
100436
101046
  init_xml_access();
100437
101047
  init_table_structural_helpers();
101048
+ init_table_structure_rawxml();
100438
101049
  }
100439
101050
  });
100440
101051
  var init_table_structural_ops = __esm({
@@ -100665,6 +101276,7 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
100665
101276
  init_chart_part_family_switch();
100666
101277
  init_PptxHandlerRuntimeChartUserShapes();
100667
101278
  init_save_table_merge_helpers();
101279
+ init_table_paragraph_save_order();
100668
101280
  init_table_structural_ops();
100669
101281
  init_table_tblpr_save();
100670
101282
  CHART_DATA_DISPLAY_OPTIONS_EXT_URI = "{56B9EC1D-385E-4148-901F-78D8002777C0}";
@@ -100742,6 +101354,7 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
100742
101354
  this.writeTableCellStyle(xmlCell, cell.style);
100743
101355
  }
100744
101356
  serializeCellExtraAttributes(xmlCell, cell.extraAttributes);
101357
+ recordTableParagraphOrder(xmlCell, cell.textRuns);
100745
101358
  }
100746
101359
  }
100747
101360
  } catch (e) {
@@ -102418,6 +103031,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102418
103031
  init_smartart_save_chrome();
102419
103032
  init_smartart_save_geometry();
102420
103033
  init_smartart_xml_builders();
103034
+ init_table_paragraph_save_order();
102421
103035
  PptxHandlerRuntime25 = class _PptxHandlerRuntime extends PptxHandlerRuntime24 {
102422
103036
  /** Pending SmartArt data updates to process during save. */
102423
103037
  pendingSmartArtUpdates;
@@ -102694,7 +103308,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102694
103308
  );
102695
103309
  root["p:cSld"] = cSld;
102696
103310
  data["p:notesMaster"] = root;
102697
- this.zip.file(notesMaster.path, this.builder.build(data));
103311
+ this.zip.file(notesMaster.path, this.builder.build(withOrderedTableParagraphs(data)));
102698
103312
  } catch (e) {
102699
103313
  console.warn("Failed to save notes master changes:", e);
102700
103314
  }
@@ -102729,7 +103343,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102729
103343
  );
102730
103344
  root["p:cSld"] = cSld;
102731
103345
  data["p:handoutMaster"] = root;
102732
- this.zip.file(handoutMaster.path, this.builder.build(data));
103346
+ this.zip.file(handoutMaster.path, this.builder.build(withOrderedTableParagraphs(data)));
102733
103347
  } catch (e) {
102734
103348
  console.warn("Failed to save handout master changes:", e);
102735
103349
  }
@@ -106976,7 +107590,7 @@ function buildOrderedSlideXml(options) {
106976
107590
  }
106977
107591
  }
106978
107592
  nextSlide = orderSlideRootChildren(nextSlide, getLocalName2);
106979
- return { ...xmlObj, "p:sld": nextSlide };
107593
+ return withOrderedTableParagraphs({ ...xmlObj, "p:sld": nextSlide });
106980
107594
  }
106981
107595
  var ALTERNATE_CONTENT_TAG;
106982
107596
  var UNRANKED;
@@ -106988,6 +107602,7 @@ var init_slide_save_xml_order = __esm({
106988
107602
  "src/core/core/runtime/slide-save-xml-order.ts"() {
106989
107603
  init_utils();
106990
107604
  init_ordered_xml_children();
107605
+ init_table_paragraph_save_order();
106991
107606
  ALTERNATE_CONTENT_TAG = "mc:AlternateContent";
106992
107607
  UNRANKED = Number.MAX_SAFE_INTEGER;
106993
107608
  COLLECTOR_KEYS = [
@@ -108482,12 +109097,12 @@ function orderedTemplatePartXml(options) {
108482
109097
  const rebuilt = positionsByRuntime.get(runtime)?.get(partPath);
108483
109098
  const ordered4 = rebuilt ? orderShapeTreeChildren(rewrapped, (node) => rebuilt.get(node), getLocalName2) : orderContainer(rewrapped, sourceXml ? scanSpTreeDocumentOrder(sourceXml) : [], getLocalName2);
108484
109099
  if (ordered4 === spTree) {
108485
- return xmlObj;
109100
+ return withOrderedTableParagraphs(xmlObj);
108486
109101
  }
108487
109102
  const nextRoot = { ...root, "p:cSld": { ...commonSlideData, "p:spTree": ordered4 } };
108488
109103
  const nextPart = { ...xmlObj };
108489
109104
  setOwnXmlProperty(nextPart, rootTag2, nextRoot);
108490
- return nextPart;
109105
+ return withOrderedTableParagraphs(nextPart);
108491
109106
  }
108492
109107
  var ALTERNATE_CONTENT_TAG3;
108493
109108
  var positionsByRuntime;
@@ -108497,6 +109112,7 @@ var init_template_sp_tree_order = __esm({
108497
109112
  init_ordered_xml_children();
108498
109113
  init_slide_save_xml_order();
108499
109114
  init_sp_tree_document_order_scan();
109115
+ init_table_paragraph_save_order();
108500
109116
  ALTERNATE_CONTENT_TAG3 = "mc:AlternateContent";
108501
109117
  positionsByRuntime = /* @__PURE__ */ new WeakMap();
108502
109118
  }
@@ -112490,11 +113106,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
112490
113106
  processField(f6);
112491
113107
  }
112492
113108
  };
112493
- const { entries, authored } = paragraphContentEntries(
112494
- p,
112495
- PARAGRAPH_CONTENT_TAGS,
112496
- (value) => this.ensureArray(value)
112497
- );
113109
+ const { entries, authored } = paragraphContentEntries(p, PARAGRAPH_CONTENT_TAGS);
112498
113110
  const runCount = this.ensureArray(p["a:r"]).length;
112499
113111
  const breakCount = this.ensureArray(p["a:br"]).length;
112500
113112
  const insertCollapsedBreaks = !authored && runCount > 1 && breakCount > 0;
@@ -136241,8 +136853,8 @@ var ChartElementProcessor = class {
136241
136853
  widths[widths.length - 1] = Math.max(widths[widths.length - 1], pct2.length);
136242
136854
  }
136243
136855
  }
136244
- const formatRow = (cells) => {
136245
- const padded = cells.map((cell, index) => cell.padEnd(widths[index]));
136856
+ const formatRow = (cells2) => {
136857
+ const padded = cells2.map((cell, index) => cell.padEnd(widths[index]));
136246
136858
  return `| ${padded.join(" | ")} |`;
136247
136859
  };
136248
136860
  const separator = `| ${widths.map((width) => "-".repeat(width)).join(" | ")} |`;
@@ -136802,7 +137414,7 @@ var TableElementProcessor = class {
136802
137414
  const row = tableData.rows[ri];
136803
137415
  const isHeader = ri === 0 && tableData.firstRowHeader !== false;
136804
137416
  const tag = isHeader ? "th" : "td";
136805
- const cells = [];
137417
+ const cells2 = [];
136806
137418
  let ci = 0;
136807
137419
  for (const cell of row.cells) {
136808
137420
  while (this.isOccupied(rowSpanOccupancy, ri, ci)) {
@@ -136823,11 +137435,11 @@ var TableElementProcessor = class {
136823
137435
  }
136824
137436
  const attrs3 = this.buildCellAttrs(cell, gridSpan, rowSpan, isHeader);
136825
137437
  const content = this.renderCellContent(cell);
136826
- cells.push(`<${tag}${attrs3}>${content}</${tag}>`);
137438
+ cells2.push(`<${tag}${attrs3}>${content}</${tag}>`);
136827
137439
  ci += gridSpan;
136828
137440
  }
136829
- if (cells.length > 0) {
136830
- htmlRows.push(`<tr>${cells.join("")}</tr>`);
137441
+ if (cells2.length > 0) {
137442
+ htmlRows.push(`<tr>${cells2.join("")}</tr>`);
136831
137443
  }
136832
137444
  }
136833
137445
  if (htmlRows.length === 0) {
@@ -137043,14 +137655,14 @@ ${htmlRows.join("\n")}
137043
137655
  const mdRows = [];
137044
137656
  const hasHeader = tableData.firstRowHeader !== false;
137045
137657
  for (let ri = 0; ri < rows.length; ri++) {
137046
- const cells = rows[ri].cells.map((cell) => {
137658
+ const cells2 = rows[ri].cells.map((cell) => {
137047
137659
  const text22 = this.getCellFormattedText(cell);
137048
137660
  return this.escapeMarkdownTableCell(text22);
137049
137661
  });
137050
- while (cells.length < columnCount) {
137051
- cells.push("");
137662
+ while (cells2.length < columnCount) {
137663
+ cells2.push("");
137052
137664
  }
137053
- mdRows.push(`| ${cells.join(" | ")} |`);
137665
+ mdRows.push(`| ${cells2.join(" | ")} |`);
137054
137666
  if (ri === 0 && hasHeader) {
137055
137667
  const divider = Array.from({ length: columnCount }, () => "---");
137056
137668
  mdRows.push(`| ${divider.join(" | ")} |`);
@@ -138371,8 +138983,8 @@ var OmmlLatexConverter = class {
138371
138983
  return null;
138372
138984
  }
138373
138985
  const rows = this.toRecordArray(m["m:mr"]).map((row) => {
138374
- const cells = this.toRecordArray(row["m:e"]).map((entry2) => this.renderNode(entry2).trim()).filter((entry2) => entry2.length > 0);
138375
- return cells.join(" & ");
138986
+ const cells2 = this.toRecordArray(row["m:e"]).map((entry2) => this.renderNode(entry2).trim()).filter((entry2) => entry2.length > 0);
138987
+ return cells2.join(" & ");
138376
138988
  }).filter((row) => row.length > 0);
138377
138989
  if (rows.length === 0) {
138378
138990
  return null;
@@ -143822,6 +144434,60 @@ var NOMINAL_ENVELOPE_BAND = {
143822
144434
  top: TOP_MARGIN,
143823
144435
  bottom: BOTTOM_MARGIN
143824
144436
  };
144437
+ var measureCtx;
144438
+ function getMeasureCtx() {
144439
+ if (measureCtx !== void 0) {
144440
+ return measureCtx;
144441
+ }
144442
+ if (typeof document === "undefined") {
144443
+ measureCtx = null;
144444
+ return null;
144445
+ }
144446
+ measureCtx = document.createElement("canvas").getContext("2d");
144447
+ return measureCtx;
144448
+ }
144449
+ function toCanvasFont(font) {
144450
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144451
+ const family = font.fontFamily || DEFAULT_FONT_FAMILY2;
144452
+ return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family}`;
144453
+ }
144454
+ function measureGlyphAdvances(text22, font) {
144455
+ const chars = [...text22];
144456
+ const ctx = getMeasureCtx();
144457
+ if (!ctx) {
144458
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144459
+ return chars.map(() => size * 0.55);
144460
+ }
144461
+ ctx.font = toCanvasFont(font);
144462
+ const advances = [];
144463
+ let previous = 0;
144464
+ let prefix = "";
144465
+ for (const char of chars) {
144466
+ prefix += char;
144467
+ const width = ctx.measureText(prefix).width;
144468
+ advances.push(Math.max(0, width - previous));
144469
+ previous = width;
144470
+ }
144471
+ return advances;
144472
+ }
144473
+ function measureLineAscent(segments) {
144474
+ const ctx = getMeasureCtx();
144475
+ if (!ctx) {
144476
+ return void 0;
144477
+ }
144478
+ let maxAscent = 0;
144479
+ for (const segment of segments) {
144480
+ if (!segment.text) {
144481
+ continue;
144482
+ }
144483
+ ctx.font = toCanvasFont(segment.font);
144484
+ const ascent = ctx.measureText(segment.text).actualBoundingBoxAscent;
144485
+ if (Number.isFinite(ascent) && ascent > maxAscent) {
144486
+ maxAscent = ascent;
144487
+ }
144488
+ }
144489
+ return maxAscent > 0 ? maxAscent : void 0;
144490
+ }
143825
144491
  function sliceBand(top, bottom, index, count) {
143826
144492
  const span = bottom - top;
143827
144493
  return {
@@ -143829,11 +144495,31 @@ function sliceBand(top, bottom, index, count) {
143829
144495
  bottom: top + (index + 1) / count * span
143830
144496
  };
143831
144497
  }
143832
- function edgeBandAt(preset, u, adj, adj2, height, lineIndex, lineCount) {
144498
+ function deformedBandAt(preset, u, adj, adj2, height) {
143833
144499
  const curve = envelopeCurveAt(preset, u, adj, adj2);
143834
- const bandTop = (curve?.top ?? NOMINAL_ENVELOPE_BAND.top) * height;
143835
- const bandBottom = (curve?.bottom ?? NOMINAL_ENVELOPE_BAND.bottom) * height;
143836
- return sliceBand(bandTop, bandBottom, lineIndex, lineCount);
144500
+ return {
144501
+ top: (curve?.top ?? NOMINAL_ENVELOPE_BAND.top) * height,
144502
+ bottom: (curve?.bottom ?? NOMINAL_ENVELOPE_BAND.bottom) * height
144503
+ };
144504
+ }
144505
+ var ROW_BOUNDARY_REFERENCE_U = 0.5;
144506
+ function edgeBandAt(preset, u, adj, adj2, height, lineIndex, lineCount) {
144507
+ const actual = deformedBandAt(preset, u, adj, adj2, height);
144508
+ if (lineCount <= 1) {
144509
+ return sliceBand(actual.top, actual.bottom, 0, 1);
144510
+ }
144511
+ const reference = deformedBandAt(preset, ROW_BOUNDARY_REFERENCE_U, adj, adj2, height);
144512
+ const fixedSlice = sliceBand(reference.top, reference.bottom, lineIndex, lineCount);
144513
+ const isFirstRow = lineIndex <= 0;
144514
+ const isLastRow = lineIndex >= lineCount - 1;
144515
+ const flatTop = NOMINAL_ENVELOPE_BAND.top * height;
144516
+ const flatBottom = NOMINAL_ENVELOPE_BAND.bottom * height;
144517
+ const dampedOuterTop = flatTop + (actual.top - flatTop) / lineCount;
144518
+ const dampedOuterBottom = flatBottom + (actual.bottom - flatBottom) / lineCount;
144519
+ return {
144520
+ top: isFirstRow ? dampedOuterTop : fixedSlice.top,
144521
+ bottom: isLastRow ? dampedOuterBottom : fixedSlice.bottom
144522
+ };
143837
144523
  }
143838
144524
  function glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom) {
143839
144525
  const nominalSpan = nomBottom - nomTop;
@@ -143846,6 +144532,34 @@ function glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom) {
143846
144532
  const f6 = grandMean - b * meanX - d * meanY;
143847
144533
  return `matrix(1 ${b} 0 ${d} 0 ${f6})`;
143848
144534
  }
144535
+ function scaleOutlineCommandsX(commands, originX, scale2) {
144536
+ if (scale2 === 1) {
144537
+ return commands;
144538
+ }
144539
+ const sx = (x) => originX + (x - originX) * scale2;
144540
+ return commands.map((cmd) => {
144541
+ switch (cmd.type) {
144542
+ case "M":
144543
+ case "L":
144544
+ return { type: cmd.type, x: sx(cmd.x), y: cmd.y };
144545
+ case "Q":
144546
+ return { type: "Q", x1: sx(cmd.x1), y1: cmd.y1, x: sx(cmd.x), y: cmd.y };
144547
+ case "C":
144548
+ return {
144549
+ type: "C",
144550
+ x1: sx(cmd.x1),
144551
+ y1: cmd.y1,
144552
+ x2: sx(cmd.x2),
144553
+ y2: cmd.y2,
144554
+ x: sx(cmd.x),
144555
+ y: cmd.y
144556
+ };
144557
+ case "Z":
144558
+ default:
144559
+ return cmd;
144560
+ }
144561
+ });
144562
+ }
143849
144563
  function mapYThroughEnvelopeBand(y, nomTop, nomBottom, edgeTop, edgeBottom) {
143850
144564
  const nominalSpan = nomBottom - nomTop;
143851
144565
  if (nominalSpan <= 0) {
@@ -143975,75 +144689,16 @@ function buildGlyphSlices(preset, x0, x1, u0, u1, adj, adj2, height, lineIndex,
143975
144689
  const sliceX1 = x0 + (x1 - x0) * (i2 + 1) / n;
143976
144690
  const sliceU0 = u0 + (u1 - u0) * i2 / n;
143977
144691
  const sliceU1 = u0 + (u1 - u0) * (i2 + 1) / n;
144692
+ const e0 = edgeAt(sliceU0);
144693
+ const e1 = edgeAt(sliceU1);
143978
144694
  slices.push({
143979
144695
  clipX0: sliceX0 - (i2 === 0 ? 0 : SEAM_OVERLAP_PX),
143980
144696
  clipX1: sliceX1 + (i2 === n - 1 ? 0 : SEAM_OVERLAP_PX),
143981
- transform: glyphEnvelopeMatrix(
143982
- sliceX0,
143983
- sliceX1,
143984
- edgeAt(sliceU0),
143985
- edgeAt(sliceU1),
143986
- nomTop,
143987
- nomBottom
143988
- )
144697
+ transform: glyphEnvelopeMatrix(sliceX0, sliceX1, e0, e1, nomTop, nomBottom)
143989
144698
  });
143990
144699
  }
143991
144700
  return slices;
143992
144701
  }
143993
- var measureCtx;
143994
- function getMeasureCtx() {
143995
- if (measureCtx !== void 0) {
143996
- return measureCtx;
143997
- }
143998
- if (typeof document === "undefined") {
143999
- measureCtx = null;
144000
- return null;
144001
- }
144002
- measureCtx = document.createElement("canvas").getContext("2d");
144003
- return measureCtx;
144004
- }
144005
- function toCanvasFont(font) {
144006
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144007
- const family = font.fontFamily || DEFAULT_FONT_FAMILY2;
144008
- return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family}`;
144009
- }
144010
- function measureGlyphAdvances(text22, font) {
144011
- const chars = [...text22];
144012
- const ctx = getMeasureCtx();
144013
- if (!ctx) {
144014
- const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144015
- return chars.map(() => size * 0.55);
144016
- }
144017
- ctx.font = toCanvasFont(font);
144018
- const advances = [];
144019
- let previous = 0;
144020
- let prefix = "";
144021
- for (const char of chars) {
144022
- prefix += char;
144023
- const width = ctx.measureText(prefix).width;
144024
- advances.push(Math.max(0, width - previous));
144025
- previous = width;
144026
- }
144027
- return advances;
144028
- }
144029
- function measureLineAscent(segments) {
144030
- const ctx = getMeasureCtx();
144031
- if (!ctx) {
144032
- return void 0;
144033
- }
144034
- let maxAscent = 0;
144035
- for (const segment of segments) {
144036
- if (!segment.text) {
144037
- continue;
144038
- }
144039
- ctx.font = toCanvasFont(segment.font);
144040
- const ascent = ctx.measureText(segment.text).actualBoundingBoxAscent;
144041
- if (Number.isFinite(ascent) && ascent > maxAscent) {
144042
- maxAscent = ascent;
144043
- }
144044
- }
144045
- return maxAscent > 0 ? maxAscent : void 0;
144046
- }
144047
144702
  function startX(align, width, lineWidth) {
144048
144703
  if (align === "right") {
144049
144704
  return width - lineWidth;
@@ -144072,20 +144727,25 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144072
144727
  );
144073
144728
  const realAscent = measureLineAscent(segments);
144074
144729
  const nomTop = realAscent !== void 0 ? Math.max(fixedBandTop, nomBottom - realAscent) : fixedBandTop;
144730
+ const isCanFamily = preset === "textCanUp" || preset === "textCanDown";
144731
+ const stretch = width > 0 && lineWidth > 0 ? width / lineWidth : 1;
144732
+ const shapeScale = isCanFamily ? 1 : stretch;
144075
144733
  const placements = [];
144076
- let x = startX(align, width, lineWidth);
144734
+ let x = lineWidth > 0 ? 0 : startX(align, width, lineWidth);
144077
144735
  segments.forEach((segment, segIdx) => {
144078
144736
  const chars = [...segment.text];
144079
144737
  const advances = perSegmentAdvances[segIdx];
144080
144738
  chars.forEach((char, i2) => {
144081
- const glyphWidth = advances[i2] ?? 0;
144739
+ const naturalGlyphWidth = advances[i2] ?? 0;
144740
+ const pitch = naturalGlyphWidth * stretch;
144082
144741
  const x0 = x;
144083
- const x1 = x + glyphWidth;
144742
+ const x1 = x0 + naturalGlyphWidth;
144084
144743
  const u0 = width > 0 ? x0 / width : 0.5;
144085
144744
  const u1 = width > 0 ? x1 / width : 0.5;
144086
144745
  const edge0 = edgeBandAt(preset, u0, adj, adj2, height, safeLineIndex, safeLineCount);
144087
144746
  const edge1 = edgeBandAt(preset, u1, adj, adj2, height, safeLineIndex, safeLineCount);
144088
- const outlineCommands = getGlyphOutline?.(char, segment.font, x, nomBottom);
144747
+ const rawOutline = getGlyphOutline?.(char, segment.font, x0, nomBottom);
144748
+ const outlineCommands = rawOutline ? scaleOutlineCommandsX(rawOutline, x0, shapeScale) : void 0;
144089
144749
  const outlinePath = outlineCommands ? buildWarpedGlyphOutlinePathD(
144090
144750
  outlineCommands,
144091
144751
  preset,
@@ -144102,7 +144762,7 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144102
144762
  placements.push({
144103
144763
  char,
144104
144764
  segmentIndex: segment.segmentIndex,
144105
- x,
144765
+ x: x0,
144106
144766
  y: nomBottom,
144107
144767
  transform: glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom),
144108
144768
  slices: sliceCount > 1 ? buildGlyphSlices(
@@ -144122,7 +144782,7 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144122
144782
  ) : void 0,
144123
144783
  outlinePath
144124
144784
  });
144125
- x += glyphWidth;
144785
+ x += pitch;
144126
144786
  });
144127
144787
  });
144128
144788
  return placements;
@@ -146738,9 +147398,9 @@ function convertMatrix(node, cc) {
146738
147398
  const rows = ensureArray6(node["m:mr"]);
146739
147399
  const tableRows = [];
146740
147400
  for (const row of rows) {
146741
- const cells = ensureArray6(row["m:e"]);
147401
+ const cells2 = ensureArray6(row["m:e"]);
146742
147402
  const tdParts = [];
146743
- for (const cell of cells) {
147403
+ for (const cell of cells2) {
146744
147404
  tdParts.push(`<mtd><mrow>${cc(cell)}</mrow></mtd>`);
146745
147405
  }
146746
147406
  tableRows.push(`<mtr>${tdParts.join("")}</mtr>`);
@@ -147465,16 +148125,16 @@ function parseEnvBody(ctx) {
147465
148125
  function buildMatrix(ctx, rows) {
147466
148126
  return {
147467
148127
  "m:m": {
147468
- "m:mr": rows.map((cells) => ({
147469
- "m:e": cells.map((cell) => ctx.wrapE(cell))
148128
+ "m:mr": rows.map((cells2) => ({
148129
+ "m:e": cells2.map((cell) => ctx.wrapE(cell))
147470
148130
  }))
147471
148131
  }
147472
148132
  };
147473
148133
  }
147474
148134
  function buildEqArr(ctx, rows) {
147475
- const lines = rows.map((cells) => {
148135
+ const lines = rows.map((cells2) => {
147476
148136
  const nodes = [];
147477
- cells.forEach((cell, index) => {
148137
+ cells2.forEach((cell, index) => {
147478
148138
  if (index > 0) {
147479
148139
  nodes.push(ctx.makeRun("&"));
147480
148140
  }
@@ -154312,13 +154972,13 @@ function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
154312
154972
  const projH = maxSY - minSY;
154313
154973
  const offsetX = layout.plotLeft + layout.plotWidth / 2 - (minSX + projW / 2);
154314
154974
  const offsetY = layout.plotTop + layout.plotHeight / 2 - (minSY + projH / 2);
154315
- const cells = [];
154975
+ const cells2 = [];
154316
154976
  for (let r = 0; r < rows; r++) {
154317
154977
  for (let c = 0; c < cols; c++) {
154318
- cells.push({ row: r, col: c, depth: r + c });
154978
+ cells2.push({ row: r, col: c, depth: r + c });
154319
154979
  }
154320
154980
  }
154321
- cells.sort((a, b) => a.depth - b.depth);
154981
+ cells2.sort((a, b) => a.depth - b.depth);
154322
154982
  const primitives = [];
154323
154983
  primitives.push(
154324
154984
  ...buildSurfaceWallPanels(cols, rows, cellSize, zScale, offsetX, offsetY, {
@@ -154327,7 +154987,7 @@ function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
154327
154987
  backWall: chartData.backWall
154328
154988
  })
154329
154989
  );
154330
- for (const { row, col } of cells) {
154990
+ for (const { row, col } of cells2) {
154331
154991
  const corners = [
154332
154992
  [col, row],
154333
154993
  [col + 1, row],
@@ -167664,15 +168324,15 @@ function setCellText(element, rowIndex, colIndex, text22) {
167664
168324
  });
167665
168325
  return { ...element, tableData: { ...tableData, rows } };
167666
168326
  }
167667
- function computeBoundingRect(cells) {
167668
- if (cells.length === 0) {
168327
+ function computeBoundingRect(cells2) {
168328
+ if (cells2.length === 0) {
167669
168329
  return void 0;
167670
168330
  }
167671
- let startRow = cells[0].row;
167672
- let startCol = cells[0].col;
167673
- let endRow = cells[0].row;
167674
- let endCol = cells[0].col;
167675
- for (const { row, col } of cells) {
168331
+ let startRow = cells2[0].row;
168332
+ let startCol = cells2[0].col;
168333
+ let endRow = cells2[0].row;
168334
+ let endCol = cells2[0].col;
168335
+ for (const { row, col } of cells2) {
167676
168336
  if (row < startRow) {
167677
168337
  startRow = row;
167678
168338
  }
@@ -167758,8 +168418,8 @@ function expandRectForExistingMerges(rect22, tableData) {
167758
168418
  }
167759
168419
  return { startRow, startCol, endRow, endCol };
167760
168420
  }
167761
- function mergeCells(cells, tableData) {
167762
- const rawRect = computeBoundingRect(cells);
168421
+ function mergeCells(cells2, tableData) {
168422
+ const rawRect = computeBoundingRect(cells2);
167763
168423
  if (!rawRect) {
167764
168424
  return tableData;
167765
168425
  }
@@ -167949,7 +168609,7 @@ function deleteTableRow(tableData, rowIdx) {
167949
168609
  }
167950
168610
  const removedRow = tableData.rows[rowIdx];
167951
168611
  const adjustedRows = [...tableData.rows];
167952
- const updateCellRowSpan = (cells, colIdx, newRowSpan) => cells.map((cc, ci) => ci === colIdx ? { ...cc, rowSpan: newRowSpan } : cc);
168612
+ const updateCellRowSpan = (cells2, colIdx, newRowSpan) => cells2.map((cc, ci) => ci === colIdx ? { ...cc, rowSpan: newRowSpan } : cc);
167953
168613
  for (let c = 0; c < removedRow.cells.length; c++) {
167954
168614
  const cell = removedRow.cells[c];
167955
168615
  if (cell.vMerge) {
@@ -167984,6 +168644,7 @@ function deleteTableRow(tableData, rowIdx) {
167984
168644
  return {
167985
168645
  ...cc,
167986
168646
  text: cell.text || cc.text,
168647
+ textRuns: cell.text ? cell.textRuns : cc.textRuns,
167987
168648
  style: cc.style || cell.style,
167988
168649
  rowSpan: newRs > 1 ? newRs : void 0,
167989
168650
  vMerge: void 0,
@@ -168083,6 +168744,7 @@ function deleteTableColumn(tableData, colIdx) {
168083
168744
  adjustedCells[nextColIdx] = {
168084
168745
  ...nextCell,
168085
168746
  text: cell.text || nextCell.text,
168747
+ textRuns: cell.text ? cell.textRuns : nextCell.textRuns,
168086
168748
  style: nextCell.style || cell.style,
168087
168749
  gridSpan: gs - 1 > 1 ? gs - 1 : void 0,
168088
168750
  hMerge: void 0,
@@ -168122,7 +168784,7 @@ function buildTableDataGrid(element) {
168122
168784
  canRemoveColumn: colCount > 1
168123
168785
  };
168124
168786
  }
168125
- function withTableData(element, transform6) {
168787
+ function withTableData(element, transform6, edit) {
168126
168788
  const tableData = element.tableData;
168127
168789
  if (!tableData) {
168128
168790
  return element;
@@ -168133,7 +168795,7 @@ function withTableData(element, transform6) {
168133
168795
  }
168134
168796
  const updated = { ...element, tableData: next };
168135
168797
  if (element.rawXml) {
168136
- const rawXml = rebuildTableStructureInRawXml(element, next);
168798
+ const rawXml = rebuildTableStructureInRawXml(element, next, edit);
168137
168799
  if (rawXml) {
168138
168800
  updated.rawXml = rawXml;
168139
168801
  }
@@ -168149,16 +168811,32 @@ function setTableElementCellText(element, rowIndex, colIndex, text22) {
168149
168811
  return rawXml ? { ...updated, rawXml } : updated;
168150
168812
  }
168151
168813
  function insertTableElementRow(element, rowIdx, position2) {
168152
- return withTableData(element, (data) => insertTableRow(data, rowIdx, position2));
168814
+ return withTableData(element, (data) => insertTableRow(data, rowIdx, position2), {
168815
+ axis: "row",
168816
+ action: "insert",
168817
+ index: position2 === "above" ? rowIdx : rowIdx + 1
168818
+ });
168153
168819
  }
168154
168820
  function removeTableElementRow(element, rowIdx) {
168155
- return withTableData(element, (data) => deleteTableRow(data, rowIdx));
168821
+ return withTableData(element, (data) => deleteTableRow(data, rowIdx), {
168822
+ axis: "row",
168823
+ action: "delete",
168824
+ index: rowIdx
168825
+ });
168156
168826
  }
168157
168827
  function insertTableElementColumn(element, colIdx, position2) {
168158
- return withTableData(element, (data) => insertTableColumn(data, colIdx, position2));
168828
+ return withTableData(element, (data) => insertTableColumn(data, colIdx, position2), {
168829
+ axis: "column",
168830
+ action: "insert",
168831
+ index: position2 === "left" ? colIdx : colIdx + 1
168832
+ });
168159
168833
  }
168160
168834
  function removeTableElementColumn(element, colIdx) {
168161
- return withTableData(element, (data) => deleteTableColumn(data, colIdx));
168835
+ return withTableData(element, (data) => deleteTableColumn(data, colIdx), {
168836
+ axis: "column",
168837
+ action: "delete",
168838
+ index: colIdx
168839
+ });
168162
168840
  }
168163
168841
  function appendTableElementRow(element) {
168164
168842
  const rowCount = element.tableData?.rows.length ?? 0;
@@ -168637,7 +169315,7 @@ function distributeElements(elements, axis, options) {
168637
169315
  }
168638
169316
  return result;
168639
169317
  }
168640
- var DEG_TO_RAD3 = Math.PI / 180;
169318
+ var DEG_TO_RAD4 = Math.PI / 180;
168641
169319
  function rotationOf(box) {
168642
169320
  return box.rotation ?? 0;
168643
169321
  }
@@ -168645,7 +169323,7 @@ function rotateDelta(dx, dy, rotationDeg) {
168645
169323
  if (!rotationDeg) {
168646
169324
  return { x: dx, y: dy };
168647
169325
  }
168648
- const rad = -rotationDeg * DEG_TO_RAD3;
169326
+ const rad = -rotationDeg * DEG_TO_RAD4;
168649
169327
  const cos = Math.cos(rad);
168650
169328
  const sin = Math.sin(rad);
168651
169329
  return {
@@ -168975,7 +169653,7 @@ function computeShadeToTitleFillToRect(title, slideWidthPx, slideHeightPx) {
168975
169653
  b: clampUnit3(1 - (title.y + title.height) / slideHeightPx)
168976
169654
  };
168977
169655
  }
168978
- var GRADIENT_STOP_TOKEN = /(rgba?\([^)]*\)|#[0-9a-fA-F]{3,8})\s+(-?[\d.]+)%/gu;
169656
+ var GRADIENT_STOP_TOKEN = /(rgba?\([^()]*\)|#[0-9a-fA-F]{3,8})\s+(-?[\d.]+)%/gu;
168979
169657
  function toHexChannel2(value) {
168980
169658
  return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0");
168981
169659
  }
@@ -169166,7 +169844,7 @@ function newTableElement(rows = 3, cols = 3, x = DEFAULT_X, y = TABLE_DEFAULT_Y)
169166
169844
  const columnWidths = Array.from({ length: cols }).fill(colWidth);
169167
169845
  const tableRows = Array.from({ length: rows }, (_, rowIdx) => {
169168
169846
  const isHeader = rowIdx === 0;
169169
- const cells = Array.from({ length: cols }, (__, colIdx) => ({
169847
+ const cells2 = Array.from({ length: cols }, (__, colIdx) => ({
169170
169848
  text: isHeader ? `Header ${colIdx + 1}` : "",
169171
169849
  style: {
169172
169850
  borderTopWidth: 1,
@@ -169184,7 +169862,7 @@ function newTableElement(rows = 3, cols = 3, x = DEFAULT_X, y = TABLE_DEFAULT_Y)
169184
169862
  } : {}
169185
169863
  }
169186
169864
  }));
169187
- return { cells, height: isHeader ? 40 : 36 };
169865
+ return { cells: cells2, height: isHeader ? 40 : 36 };
169188
169866
  });
169189
169867
  return {
169190
169868
  type: "table",
@@ -184260,7 +184938,7 @@ var TRANSITION_DIR_GRID_POSITIONS = {
184260
184938
  rd: [2, 2]
184261
184939
  };
184262
184940
  function buildDirectionGrid(directions) {
184263
- const cells = [
184941
+ const cells2 = [
184264
184942
  [null, null, null],
184265
184943
  [null, null, null],
184266
184944
  [null, null, null]
@@ -184268,10 +184946,10 @@ function buildDirectionGrid(directions) {
184268
184946
  for (const dir of directions) {
184269
184947
  const pos2 = TRANSITION_DIR_GRID_POSITIONS[dir];
184270
184948
  if (pos2) {
184271
- cells[pos2[0]][pos2[1]] = dir;
184949
+ cells2[pos2[0]][pos2[1]] = dir;
184272
184950
  }
184273
184951
  }
184274
- return cells;
184952
+ return cells2;
184275
184953
  }
184276
184954
  function mergeSlideTransition(current, changes) {
184277
184955
  return { type: "none", ...current, ...changes };
@@ -199599,12 +200277,12 @@ async function fetchTextIfCrossOriginSafe(url) {
199599
200277
  return null;
199600
200278
  }
199601
200279
  }
199602
- var FONT_FACE_URL_PATTERN = /url\(\s*["']?([^"')]+)["']?\s*\)/gu;
200280
+ var FONT_FACE_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^"')\s]+))\s*\)/gu;
199603
200281
  async function inlineFontFaceUrls(css, fetchDataUrl) {
199604
200282
  const urls = /* @__PURE__ */ new Set();
199605
200283
  for (const match of css.matchAll(FONT_FACE_URL_PATTERN)) {
199606
- const raw = match[1];
199607
- if (raw.startsWith("http:") || raw.startsWith("https:")) {
200284
+ const raw = match[1] ?? match[2] ?? match[3];
200285
+ if (raw && (raw.startsWith("http:") || raw.startsWith("https:"))) {
199608
200286
  urls.add(raw);
199609
200287
  }
199610
200288
  }
@@ -199664,9 +200342,13 @@ async function fetchAsDataUrl(url) {
199664
200342
  return null;
199665
200343
  }
199666
200344
  }
200345
+ var CSS_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^"')\s]+))\s*\)/u;
199667
200346
  function extractCssUrl(value) {
199668
- const match = /url\(\s*["']?([^"')]+)["']?\s*\)/u.exec(value);
199669
- return match ? match[1] : null;
200347
+ const match = CSS_URL_PATTERN.exec(value);
200348
+ if (!match) {
200349
+ return null;
200350
+ }
200351
+ return match[1] ?? match[2] ?? match[3] ?? null;
199670
200352
  }
199671
200353
  function needsEmbedding(url) {
199672
200354
  return url.startsWith("blob:") || url.startsWith("http:") || url.startsWith("https:");
@@ -200136,13 +200818,13 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200136
200818
  const printableWidth = page.width - page.marginLeft - page.marginRight;
200137
200819
  const printableHeight = page.height - page.marginTop - page.marginBottom;
200138
200820
  const isThreePerPage = slidesPerPage === 3;
200139
- const cells = [];
200821
+ const cells2 = [];
200140
200822
  if (isThreePerPage) {
200141
200823
  const slideAreaWidth = printableWidth * THREE_PER_PAGE_SLIDE_FRACTION;
200142
200824
  const cellHeight = (printableHeight - CELL_GAP * (grid.rows - 1)) / grid.rows;
200143
200825
  for (let row = 0; row < grid.rows; row++) {
200144
200826
  const slideIdx = startSlideIndex + row;
200145
- cells.push({
200827
+ cells2.push({
200146
200828
  slideIndex: slideIdx < totalSlides ? slideIdx : -1,
200147
200829
  row,
200148
200830
  col: 0,
@@ -200159,7 +200841,7 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200159
200841
  for (let row = 0; row < grid.rows; row++) {
200160
200842
  for (let col = 0; col < grid.columns; col++) {
200161
200843
  const slideIdx = startSlideIndex + cellIndex;
200162
- cells.push({
200844
+ cells2.push({
200163
200845
  slideIndex: slideIdx < totalSlides ? slideIdx : -1,
200164
200846
  row,
200165
200847
  col,
@@ -200174,7 +200856,7 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200174
200856
  }
200175
200857
  return {
200176
200858
  pageIndex,
200177
- cells,
200859
+ cells: cells2,
200178
200860
  hasNoteLines: isThreePerPage
200179
200861
  };
200180
200862
  }
@@ -201927,6 +202609,9 @@ function groupTilesByRow(tiles) {
201927
202609
  const rowCount = tiles.reduce((max, t) => Math.max(max, t.row), 0) + 1;
201928
202610
  const rows = Array.from({ length: rowCount }, () => []);
201929
202611
  for (const tile of tiles) {
202612
+ if (!Number.isInteger(tile.row) || !Number.isInteger(tile.col) || tile.row < 0 || tile.col < 0) {
202613
+ continue;
202614
+ }
201930
202615
  rows[tile.row][tile.col] = tile;
201931
202616
  }
201932
202617
  return rows;
@@ -202153,4 +202838,4 @@ async function rasterResultToPngBlob(result) {
202153
202838
  * `<p:extLst>` (optional)
202154
202839
  */
202155
202840
 
202156
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_TYPE_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, 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_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_OPTIONS, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptAutosaveRecovery, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChartPartHighlight, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, attachPresentationVisibilityPause, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildAreaChart3DDataForElement, buildBarActions, buildBarChart3DDataForElement, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildGlyphEnvelope, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLineChart3DDataForElement, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPieChart3DDataForElement, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSurfaceChart3DDataForElement, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectCoherent3DOffNodeIds, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createInitialPresentationSnapshot, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, cursorForTool, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementIdSelector, elementLockTogglePatch, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelection, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, insertCommentMention, insertTableColumn, insertTableRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountAreaChart3D, mountBarChart3D, mountLineChart3D, mountModel3D, mountPieChart3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, restoreFilteredSeries, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, seedRecentColors, segmentFrameCount, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartPointValue, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs };
202841
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_TYPE_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, 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_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_OPTIONS, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptAutosaveRecovery, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChartPartHighlight, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, attachPresentationVisibilityPause, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildAreaChart3DDataForElement, buildBarActions, buildBarChart3DDataForElement, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildGlyphEnvelope, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLineChart3DDataForElement, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPieChart3DDataForElement, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSurfaceChart3DDataForElement, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectCoherent3DOffNodeIds, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createInitialPresentationSnapshot, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, cursorForTool, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementIdSelector, elementLockTogglePatch, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelection, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountAreaChart3D, mountBarChart3D, mountLineChart3D, mountModel3D, mountPieChart3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, restoreFilteredSeries, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, seedRecentColors, segmentFrameCount, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartPointValue, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs };