pptx-react-viewer 3.15.0 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/{AiChatPanel-7CWOJ3PS.js → AiChatPanel-BUKJCMUY.js} +24 -24
  3. package/dist/AiChatPanel-BUKJCMUY.js.br +0 -0
  4. package/dist/AiChatPanel-BUKJCMUY.js.gz +0 -0
  5. package/dist/{AiChatPanel-TBIAQSZ7.mjs → AiChatPanel-US56QZBD.mjs} +3 -3
  6. package/dist/AiChatPanel-US56QZBD.mjs.br +0 -0
  7. package/dist/AiChatPanel-US56QZBD.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-6FFBYPHF.mjs → Area3DChartScene-6E4QEVTU.mjs} +1 -1
  9. package/dist/Area3DChartScene-6E4QEVTU.mjs.br +0 -0
  10. package/dist/Area3DChartScene-6E4QEVTU.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-ZJYR6K66.js → Area3DChartScene-APGQOK5A.js} +2 -2
  12. package/dist/{Area3DChartScene-ZJYR6K66.js.br → Area3DChartScene-APGQOK5A.js.br} +0 -0
  13. package/dist/Area3DChartScene-APGQOK5A.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-42MWINQX.mjs → Bar3DChartScene-5GRGZFE4.mjs} +1 -1
  15. package/dist/Bar3DChartScene-5GRGZFE4.mjs.br +0 -0
  16. package/dist/Bar3DChartScene-5GRGZFE4.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-JP3BXEZW.js → Bar3DChartScene-F4B5TNJR.js} +2 -2
  18. package/dist/{Bar3DChartScene-JP3BXEZW.js.br → Bar3DChartScene-F4B5TNJR.js.br} +0 -0
  19. package/dist/Bar3DChartScene-F4B5TNJR.js.gz +0 -0
  20. package/dist/{Line3DChartScene-YVCSJMWK.mjs → Line3DChartScene-2VRLE5RI.mjs} +1 -1
  21. package/dist/Line3DChartScene-2VRLE5RI.mjs.br +0 -0
  22. package/dist/Line3DChartScene-2VRLE5RI.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-JK3AELXZ.js → Line3DChartScene-6FUMMX2T.js} +2 -2
  24. package/dist/{Line3DChartScene-JK3AELXZ.js.br → Line3DChartScene-6FUMMX2T.js.br} +0 -0
  25. package/dist/Line3DChartScene-6FUMMX2T.js.gz +0 -0
  26. package/dist/{Model3DScene-N6UIMN7T.js → Model3DScene-2MGI3CB6.js} +2 -2
  27. package/dist/Model3DScene-2MGI3CB6.js.br +0 -0
  28. package/dist/Model3DScene-2MGI3CB6.js.gz +0 -0
  29. package/dist/{Model3DScene-OXWSYHHK.mjs → Model3DScene-TCIKWJ7R.mjs} +1 -1
  30. package/dist/{Model3DScene-OXWSYHHK.mjs.br → Model3DScene-TCIKWJ7R.mjs.br} +0 -0
  31. package/dist/Model3DScene-TCIKWJ7R.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-XK4ETZJC.mjs → PieChart3DScene-O5NZKI4T.mjs} +1 -1
  33. package/dist/{PieChart3DScene-XK4ETZJC.mjs.br → PieChart3DScene-O5NZKI4T.mjs.br} +0 -0
  34. package/dist/PieChart3DScene-O5NZKI4T.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-Q2Z3ECL4.js → PieChart3DScene-OFZEEZRO.js} +2 -2
  36. package/dist/{PieChart3DScene-Q2Z3ECL4.js.br → PieChart3DScene-OFZEEZRO.js.br} +0 -0
  37. package/dist/PieChart3DScene-OFZEEZRO.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-ULBUIF7T.js → SurfaceChart3DScene-EK7KFNUQ.js} +2 -2
  39. package/dist/{SurfaceChart3DScene-ULBUIF7T.js.br → SurfaceChart3DScene-EK7KFNUQ.js.br} +0 -0
  40. package/dist/SurfaceChart3DScene-EK7KFNUQ.js.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-KNWMKMOL.mjs → SurfaceChart3DScene-WXPQGMT3.mjs} +1 -1
  42. package/dist/SurfaceChart3DScene-WXPQGMT3.mjs.br +0 -0
  43. package/dist/SurfaceChart3DScene-WXPQGMT3.mjs.gz +0 -0
  44. package/dist/{chunk-YNTZCMRI.mjs → chunk-2DZJJ3VO.mjs} +1145 -435
  45. package/dist/chunk-2DZJJ3VO.mjs.br +0 -0
  46. package/dist/chunk-2DZJJ3VO.mjs.gz +0 -0
  47. package/dist/{chunk-GLY4OPMY.js → chunk-2J64KPXY.js} +167 -167
  48. package/dist/chunk-2J64KPXY.js.br +0 -0
  49. package/dist/chunk-2J64KPXY.js.gz +0 -0
  50. package/dist/{chunk-C4Q4WYAJ.mjs → chunk-BDQBJ3AM.mjs} +12 -34
  51. package/dist/chunk-BDQBJ3AM.mjs.br +0 -0
  52. package/dist/chunk-BDQBJ3AM.mjs.gz +0 -0
  53. package/dist/{chunk-VVJTEFGP.js → chunk-C553GQRH.js} +5 -5
  54. package/dist/chunk-C553GQRH.js.br +0 -0
  55. package/dist/chunk-C553GQRH.js.gz +0 -0
  56. package/dist/{chunk-Q6CSZ7VM.js → chunk-CPWFKDGB.js} +1292 -1292
  57. package/dist/chunk-CPWFKDGB.js.br +0 -0
  58. package/dist/chunk-CPWFKDGB.js.gz +0 -0
  59. package/dist/{chunk-6547ZWC7.mjs → chunk-GQVOQPNT.mjs} +15 -15
  60. package/dist/chunk-GQVOQPNT.mjs.br +0 -0
  61. package/dist/chunk-GQVOQPNT.mjs.gz +0 -0
  62. package/dist/{chunk-5KAMDV37.js → chunk-LDFWF2KT.js} +1147 -439
  63. package/dist/chunk-LDFWF2KT.js.br +0 -0
  64. package/dist/chunk-LDFWF2KT.js.gz +0 -0
  65. package/dist/{chunk-LAB7WX2N.js → chunk-Q2EGTNCU.js} +456 -478
  66. package/dist/chunk-Q2EGTNCU.js.br +0 -0
  67. package/dist/chunk-Q2EGTNCU.js.gz +0 -0
  68. package/dist/{chunk-AT4BJKON.mjs → chunk-UISMOSNU.mjs} +1 -1
  69. package/dist/chunk-UISMOSNU.mjs.br +0 -0
  70. package/dist/chunk-UISMOSNU.mjs.gz +0 -0
  71. package/dist/{chunk-J7Q7AGN7.mjs → chunk-VK3ASDDP.mjs} +1 -1
  72. package/dist/chunk-VK3ASDDP.mjs.br +0 -0
  73. package/dist/chunk-VK3ASDDP.mjs.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 +2 -2
  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.gz +0 -0
  103. package/dist/Bar3DChartScene-42MWINQX.mjs.br +0 -0
  104. package/dist/Bar3DChartScene-42MWINQX.mjs.gz +0 -0
  105. package/dist/Bar3DChartScene-JP3BXEZW.js.gz +0 -0
  106. package/dist/Line3DChartScene-JK3AELXZ.js.gz +0 -0
  107. package/dist/Line3DChartScene-YVCSJMWK.mjs.br +0 -0
  108. package/dist/Line3DChartScene-YVCSJMWK.mjs.gz +0 -0
  109. package/dist/Model3DScene-N6UIMN7T.js.br +0 -0
  110. package/dist/Model3DScene-N6UIMN7T.js.gz +0 -0
  111. package/dist/Model3DScene-OXWSYHHK.mjs.gz +0 -0
  112. package/dist/PieChart3DScene-Q2Z3ECL4.js.gz +0 -0
  113. package/dist/PieChart3DScene-XK4ETZJC.mjs.gz +0 -0
  114. package/dist/SurfaceChart3DScene-KNWMKMOL.mjs.br +0 -0
  115. package/dist/SurfaceChart3DScene-KNWMKMOL.mjs.gz +0 -0
  116. package/dist/SurfaceChart3DScene-ULBUIF7T.js.gz +0 -0
  117. package/dist/chunk-5KAMDV37.js.br +0 -0
  118. package/dist/chunk-5KAMDV37.js.gz +0 -0
  119. package/dist/chunk-6547ZWC7.mjs.br +0 -0
  120. package/dist/chunk-6547ZWC7.mjs.gz +0 -0
  121. package/dist/chunk-AT4BJKON.mjs.br +0 -0
  122. package/dist/chunk-AT4BJKON.mjs.gz +0 -0
  123. package/dist/chunk-C4Q4WYAJ.mjs.br +0 -0
  124. package/dist/chunk-C4Q4WYAJ.mjs.gz +0 -0
  125. package/dist/chunk-GLY4OPMY.js.br +0 -0
  126. package/dist/chunk-GLY4OPMY.js.gz +0 -0
  127. package/dist/chunk-J7Q7AGN7.mjs.br +0 -0
  128. package/dist/chunk-J7Q7AGN7.mjs.gz +0 -0
  129. package/dist/chunk-LAB7WX2N.js.br +0 -0
  130. package/dist/chunk-LAB7WX2N.js.gz +0 -0
  131. package/dist/chunk-Q6CSZ7VM.js.br +0 -0
  132. package/dist/chunk-Q6CSZ7VM.js.gz +0 -0
  133. package/dist/chunk-VVJTEFGP.js.br +0 -0
  134. package/dist/chunk-VVJTEFGP.js.gz +0 -0
  135. package/dist/chunk-YNTZCMRI.mjs.br +0 -0
  136. 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({
@@ -99438,6 +99824,46 @@ var init_table_cell_save_helpers = __esm({
99438
99824
  init_color_xml_preservation();
99439
99825
  }
99440
99826
  });
99827
+ function ensureArray19(value) {
99828
+ if (value === void 0 || value === null) {
99829
+ return [];
99830
+ }
99831
+ return Array.isArray(value) ? value : [value];
99832
+ }
99833
+ function createDefaultXmlCell() {
99834
+ return {
99835
+ "a:txBody": {
99836
+ "a:bodyPr": {},
99837
+ "a:lstStyle": {},
99838
+ "a:p": {
99839
+ // Match PowerPoint's "Insert Table" default: every paragraph-end
99840
+ // run carries `lang="en-US" dirty="0"`.
99841
+ "a:endParaRPr": { "@_lang": "en-US", "@_dirty": "0" }
99842
+ }
99843
+ },
99844
+ "a:tcPr": {}
99845
+ };
99846
+ }
99847
+ function createDefaultXmlRow(colCount, heightEmu) {
99848
+ const cells2 = Array.from({ length: colCount }, () => createDefaultXmlCell());
99849
+ return {
99850
+ "@_h": String(DEFAULT_ROW_HEIGHT_EMU),
99851
+ "a:tc": cells2.length === 1 ? cells2[0] : cells2
99852
+ };
99853
+ }
99854
+ function getTblFromRawXml(rawXml) {
99855
+ const graphicData = rawXml["a:graphic"]?.["a:graphicData"];
99856
+ return graphicData?.["a:tbl"];
99857
+ }
99858
+ var DEFAULT_ROW_HEIGHT_PX;
99859
+ var DEFAULT_ROW_HEIGHT_EMU;
99860
+ var init_table_structural_helpers = __esm({
99861
+ "src/core/core/runtime/table-structural-helpers.ts"() {
99862
+ init_constants();
99863
+ DEFAULT_ROW_HEIGHT_PX = 40;
99864
+ DEFAULT_ROW_HEIGHT_EMU = DEFAULT_ROW_HEIGHT_PX * EMU_PER_PX;
99865
+ }
99866
+ });
99441
99867
  function flattenCellTxBodyText(txBody, ensureArray20) {
99442
99868
  if (!txBody) {
99443
99869
  return "";
@@ -99458,6 +99884,45 @@ function flattenCellTxBodyText(txBody, ensureArray20) {
99458
99884
  }
99459
99885
  return lines.join("\n");
99460
99886
  }
99887
+ function tableCellTextBodyMatches(txBody, text22, ensureArray20 = xmlArray) {
99888
+ return Boolean(
99889
+ txBody && ensureArray20(txBody["a:p"]).length > 0 && flattenCellTxBodyText(txBody, ensureArray20) === text22
99890
+ );
99891
+ }
99892
+ function rebuildCellTextBody(existingTxBody, text22) {
99893
+ const existingParagraphs = ensureArray19(
99894
+ existingTxBody?.["a:p"]
99895
+ );
99896
+ const firstParagraph = existingParagraphs.length > 0 ? existingParagraphs[0] : void 0;
99897
+ const existingRuns = firstParagraph ? ensureArray19(firstParagraph["a:r"]) : [];
99898
+ const firstRunProps = existingRuns.length > 0 ? existingRuns[0]["a:rPr"] : void 0;
99899
+ const newRun = {};
99900
+ if (firstRunProps !== void 0) {
99901
+ newRun["a:rPr"] = firstRunProps;
99902
+ }
99903
+ newRun["a:t"] = text22;
99904
+ const newParagraph = {};
99905
+ if (firstParagraph?.["a:pPr"] !== void 0) {
99906
+ newParagraph["a:pPr"] = firstParagraph["a:pPr"];
99907
+ }
99908
+ newParagraph["a:r"] = newRun;
99909
+ const newTxBody = {};
99910
+ if (existingTxBody?.["a:bodyPr"] !== void 0) {
99911
+ newTxBody["a:bodyPr"] = existingTxBody["a:bodyPr"];
99912
+ }
99913
+ if (existingTxBody?.["a:lstStyle"] !== void 0) {
99914
+ newTxBody["a:lstStyle"] = existingTxBody["a:lstStyle"];
99915
+ }
99916
+ newTxBody["a:p"] = newParagraph;
99917
+ return newTxBody;
99918
+ }
99919
+ var xmlArray;
99920
+ var init_table_cell_text_xml = __esm({
99921
+ "src/core/core/runtime/table-cell-text-xml.ts"() {
99922
+ init_table_structural_helpers();
99923
+ xmlArray = (value) => ensureArray19(value);
99924
+ }
99925
+ });
99461
99926
  function isRichCellTxBody(txBody, ensureArray20) {
99462
99927
  if (!txBody) {
99463
99928
  return false;
@@ -99488,6 +99953,8 @@ var init_PptxHandlerRuntimeSaveTableStyles = __esm({
99488
99953
  init_xml_reorder();
99489
99954
  init_PptxHandlerRuntimeLayoutSwitching();
99490
99955
  init_table_cell_save_helpers();
99956
+ init_table_cell_text_xml();
99957
+ init_table_cell_text_xml();
99491
99958
  PptxHandlerRuntime22 = class _PptxHandlerRuntime extends PptxHandlerRuntime21 {
99492
99959
  /**
99493
99960
  * Write plain text into a table cell's txBody, preserving
@@ -99496,10 +99963,8 @@ var init_PptxHandlerRuntimeSaveTableStyles = __esm({
99496
99963
  writeTableCellText(xmlCell, text22) {
99497
99964
  const ensureArray20 = this.ensureArray.bind(this);
99498
99965
  const existingTxBody = xmlCell["a:txBody"];
99499
- if (existingTxBody && ensureArray20(existingTxBody["a:p"]).length > 0) {
99500
- if (flattenCellTxBodyText(existingTxBody, ensureArray20) === text22) {
99501
- return;
99502
- }
99966
+ if (tableCellTextBodyMatches(existingTxBody, text22, ensureArray20)) {
99967
+ return;
99503
99968
  }
99504
99969
  if (!xmlCell["a:txBody"]) {
99505
99970
  xmlCell["a:txBody"] = { "a:bodyPr": {}, "a:p": {} };
@@ -99938,37 +100403,147 @@ var init_save_table_merge_helpers = __esm({
99938
100403
  ];
99939
100404
  }
99940
100405
  });
99941
- function ensureArray19(value) {
99942
- if (value === void 0 || value === null) {
99943
- return [];
100406
+ function runTag(run) {
100407
+ return run.isLineBreak ? "a:br" : run.isField ? "a:fld" : "a:r";
100408
+ }
100409
+ function supportsOrder(paragraph, tags) {
100410
+ for (const [key2, value] of Object.entries(paragraph)) {
100411
+ if (key2.startsWith("@_") || key2 === "a:pPr" || key2 === "a:endParaRPr") {
100412
+ continue;
100413
+ }
100414
+ if (key2 === "#text" && String(value).trim() === "") {
100415
+ continue;
100416
+ }
100417
+ if (!CONTENT_TAGS.has(key2)) {
100418
+ return false;
100419
+ }
99944
100420
  }
99945
- return Array.isArray(value) ? value : [value];
100421
+ return [...CONTENT_TAGS].every(
100422
+ (tag) => tags.filter((candidate) => candidate === tag).length === ensureItems(paragraph[tag]).length
100423
+ );
99946
100424
  }
99947
- function createDefaultXmlCell() {
99948
- return {
99949
- "a:txBody": {
99950
- "a:bodyPr": {},
99951
- "a:lstStyle": {},
99952
- "a:p": {
99953
- // Match PowerPoint's "Insert Table" default: every paragraph-end
99954
- // run carries `lang="en-US" dirty="0"`.
99955
- "a:endParaRPr": { "@_lang": "en-US", "@_dirty": "0" }
99956
- }
99957
- },
99958
- "a:tcPr": {}
99959
- };
100425
+ function matchesParagraph(paragraph, runs) {
100426
+ if (!supportsOrder(paragraph, runs.map(runTag))) {
100427
+ return false;
100428
+ }
100429
+ const consumed = /* @__PURE__ */ new Map();
100430
+ for (const run of runs) {
100431
+ const tag = runTag(run);
100432
+ const index = consumed.get(tag) ?? 0;
100433
+ const node = ensureItems(paragraph[tag])[index];
100434
+ if (node === void 0) {
100435
+ return false;
100436
+ }
100437
+ if (tag !== "a:br" && (!isXmlObject3(node) || String(node["a:t"] ?? "") !== run.text)) {
100438
+ return false;
100439
+ }
100440
+ consumed.set(tag, index + 1);
100441
+ }
100442
+ return true;
99960
100443
  }
99961
- function getTblFromRawXml(rawXml) {
99962
- const graphicData = rawXml["a:graphic"]?.["a:graphicData"];
99963
- return graphicData?.["a:tbl"];
100444
+ function recordTableParagraphOrder(xmlCell, textRuns) {
100445
+ const txBody = xmlCell["a:txBody"];
100446
+ const paragraphs = isXmlObject3(txBody) ? ensureItems(txBody["a:p"]) : [];
100447
+ for (const paragraph of paragraphs) {
100448
+ if (isXmlObject3(paragraph)) {
100449
+ paragraphOrders.delete(paragraph);
100450
+ }
100451
+ }
100452
+ if (!textRuns) {
100453
+ return;
100454
+ }
100455
+ const runsByParagraph = [[]];
100456
+ for (const run of textRuns) {
100457
+ if (run.isParagraphBreak) {
100458
+ runsByParagraph.push([]);
100459
+ } else {
100460
+ runsByParagraph.at(-1).push(run);
100461
+ }
100462
+ }
100463
+ if (runsByParagraph.length !== paragraphs.length) {
100464
+ return;
100465
+ }
100466
+ paragraphs.forEach((paragraph, index) => {
100467
+ const runs = runsByParagraph[index];
100468
+ const tags = runs.map(runTag);
100469
+ if (isXmlObject3(paragraph) && !isGroupedByTag(tags) && matchesParagraph(paragraph, runs)) {
100470
+ paragraphOrders.set(paragraph, tags);
100471
+ }
100472
+ });
99964
100473
  }
99965
- var DEFAULT_ROW_HEIGHT_PX;
99966
- var DEFAULT_ROW_HEIGHT_EMU;
99967
- var init_table_structural_helpers = __esm({
99968
- "src/core/core/runtime/table-structural-helpers.ts"() {
99969
- init_constants();
99970
- DEFAULT_ROW_HEIGHT_PX = 40;
99971
- DEFAULT_ROW_HEIGHT_EMU = DEFAULT_ROW_HEIGHT_PX * EMU_PER_PX;
100474
+ function orderedParagraph(paragraph, tags) {
100475
+ const result = {};
100476
+ for (const [key2, value] of Object.entries(paragraph)) {
100477
+ if (!CONTENT_TAGS.has(key2) && key2 !== "a:pPr" && key2 !== "a:endParaRPr") {
100478
+ setOwnXmlProperty(result, key2, value);
100479
+ }
100480
+ }
100481
+ if (paragraph["a:pPr"] !== void 0) {
100482
+ result["a:pPr"] = paragraph["a:pPr"];
100483
+ }
100484
+ const consumed = /* @__PURE__ */ new Map();
100485
+ assignOrderedXmlChildren(
100486
+ result,
100487
+ tags.map((tag) => {
100488
+ const index = consumed.get(tag) ?? 0;
100489
+ consumed.set(tag, index + 1);
100490
+ return { tag, node: ensureItems(paragraph[tag])[index] };
100491
+ })
100492
+ );
100493
+ if (paragraph["a:endParaRPr"] !== void 0) {
100494
+ result["a:endParaRPr"] = paragraph["a:endParaRPr"];
100495
+ }
100496
+ return result;
100497
+ }
100498
+ function withOrderedTableParagraphs(value, insideTable = false) {
100499
+ if (Array.isArray(value)) {
100500
+ let result2 = value;
100501
+ value.forEach((item, index) => {
100502
+ const next = withOrderedTableParagraphs(item, insideTable);
100503
+ if (next !== item) {
100504
+ if (result2 === value) {
100505
+ result2 = [...value];
100506
+ }
100507
+ result2[index] = next;
100508
+ }
100509
+ });
100510
+ return result2;
100511
+ }
100512
+ if (!isXmlObject3(value)) {
100513
+ return value;
100514
+ }
100515
+ let result = value;
100516
+ for (const [key2, item] of Object.entries(value)) {
100517
+ if (key2.startsWith("@_") || key2 === "#text") {
100518
+ continue;
100519
+ }
100520
+ const next = withOrderedTableParagraphs(item, insideTable || key2 === "a:tbl");
100521
+ if (next !== item) {
100522
+ if (result === value) {
100523
+ result = { ...value };
100524
+ }
100525
+ setOwnXmlProperty(result, key2, next);
100526
+ }
100527
+ }
100528
+ let tags = paragraphOrders.get(value);
100529
+ if (!tags && insideTable) {
100530
+ const { entries, authored } = paragraphContentEntries(value, CONTENT_TAGS);
100531
+ const sourceTags = entries.map(([tag]) => tag);
100532
+ if (authored && supportsOrder(value, sourceTags)) {
100533
+ tags = sourceTags;
100534
+ }
100535
+ }
100536
+ return tags ? orderedParagraph(result, tags) : result;
100537
+ }
100538
+ var CONTENT_TAGS;
100539
+ var paragraphOrders;
100540
+ var init_table_paragraph_save_order = __esm({
100541
+ "src/core/core/runtime/table-paragraph-save-order.ts"() {
100542
+ init_ordered_xml_children();
100543
+ init_paragraph_sibling_order();
100544
+ init_xml_child_scan();
100545
+ CONTENT_TAGS = /* @__PURE__ */ new Set(["a:r", "a:br", "a:fld"]);
100546
+ paragraphOrders = /* @__PURE__ */ new WeakMap();
99972
100547
  }
99973
100548
  });
99974
100549
  var init_table_row_ops = __esm({
@@ -100156,6 +100731,157 @@ var init_table_create_xml = __esm({
100156
100731
  init_table_style_defaults();
100157
100732
  }
100158
100733
  });
100734
+ function cells(row) {
100735
+ return ensureArray19(row["a:tc"]);
100736
+ }
100737
+ function promoteTextBody(source, next, removed, survivor, axis) {
100738
+ const span = axis === "row" ? "rowSpan" : "gridSpan";
100739
+ const continuation = axis === "row" ? "vMerge" : "hMerge";
100740
+ if (!source?.text || !next || !removed || !survivor || source[continuation] || (source[span] ?? 1) <= 1 || next[continuation] || (next[span] ?? 1) !== (source[span] ?? 1) - 1) {
100741
+ return;
100742
+ }
100743
+ if (removed["a:txBody"] !== void 0) {
100744
+ survivor["a:txBody"] = removed["a:txBody"];
100745
+ }
100746
+ }
100747
+ function applyTableStructureEditXml(table2, source, next, edit) {
100748
+ const rows = ensureArray19(table2["a:tr"]);
100749
+ const grid = table2["a:tblGrid"];
100750
+ const columns = ensureArray19(grid?.["a:gridCol"]);
100751
+ const { axis, action, index } = edit;
100752
+ if (axis !== "row" && axis !== "column" || action !== "insert" && action !== "delete") {
100753
+ return false;
100754
+ }
100755
+ const count = axis === "row" ? rows.length : columns.length;
100756
+ const delta = action === "insert" ? 1 : -1;
100757
+ 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)) {
100758
+ return false;
100759
+ }
100760
+ if (axis === "row") {
100761
+ if (action === "insert") {
100762
+ rows.splice(index, 0, createDefaultXmlRow(columns.length));
100763
+ } else {
100764
+ const removedCells = cells(rows[index]);
100765
+ const nextCells = rows[index + 1] ? cells(rows[index + 1]) : [];
100766
+ removedCells.forEach(
100767
+ (removed, column) => promoteTextBody(
100768
+ source?.rows[index]?.cells[column],
100769
+ next.rows[index]?.cells[column],
100770
+ removed,
100771
+ nextCells[column],
100772
+ axis
100773
+ )
100774
+ );
100775
+ rows.splice(index, 1);
100776
+ }
100777
+ table2["a:tr"] = rows.length === 1 ? rows[0] : rows;
100778
+ } else {
100779
+ if (action === "insert") {
100780
+ columns.splice(index, 0, { "@_w": "0" });
100781
+ } else {
100782
+ columns.splice(index, 1);
100783
+ }
100784
+ grid["a:gridCol"] = columns.length === 1 ? columns[0] : columns;
100785
+ rows.forEach((row, rowIndex) => {
100786
+ const rowCells = cells(row);
100787
+ if (action === "insert") {
100788
+ rowCells.splice(index, 0, createDefaultXmlCell());
100789
+ } else {
100790
+ promoteTextBody(
100791
+ source?.rows[rowIndex]?.cells[index],
100792
+ next.rows[rowIndex]?.cells[index],
100793
+ rowCells[index],
100794
+ rowCells[index + 1],
100795
+ axis
100796
+ );
100797
+ rowCells.splice(index, 1);
100798
+ }
100799
+ row["a:tc"] = rowCells.length === 1 ? rowCells[0] : rowCells;
100800
+ });
100801
+ }
100802
+ return true;
100803
+ }
100804
+ var init_table_structure_edit_xml = __esm({
100805
+ "src/core/core/runtime/table-structure-edit-xml.ts"() {
100806
+ init_table_structural_helpers();
100807
+ }
100808
+ });
100809
+ function createDefaultRebuildXmlCell() {
100810
+ return {
100811
+ "a:txBody": {
100812
+ "a:bodyPr": {},
100813
+ "a:lstStyle": {},
100814
+ "a:p": {
100815
+ "a:endParaRPr": { "@_lang": "en-US" }
100816
+ }
100817
+ },
100818
+ "a:tcPr": {}
100819
+ };
100820
+ }
100821
+ function rebuildTableStructureInRawXml(element, tableData, edit) {
100822
+ if (!element.rawXml) {
100823
+ return void 0;
100824
+ }
100825
+ const newRawXml = structuredClone(element.rawXml);
100826
+ const table2 = getTblFromRawXml(newRawXml);
100827
+ if (!table2) {
100828
+ return void 0;
100829
+ }
100830
+ const existingGridCols = ensureArray19(
100831
+ table2["a:tblGrid"]?.["a:gridCol"]
100832
+ );
100833
+ const totalWidthEmu = existingGridCols.reduce((sum, col) => {
100834
+ return sum + (parseInt(String(col?.["@_w"] || "0"), 10) || 0);
100835
+ }, 0) || 9144e3;
100836
+ const appliedEdit = edit ? applyTableStructureEditXml(
100837
+ table2,
100838
+ element.type === "table" ? element.tableData : void 0,
100839
+ tableData,
100840
+ edit
100841
+ ) : false;
100842
+ const alignedGridCols = ensureArray19(
100843
+ table2["a:tblGrid"]?.["a:gridCol"]
100844
+ );
100845
+ const newGridCols = tableData.columnWidths.map((w, index) => ({
100846
+ ...appliedEdit ? alignedGridCols[index] : {},
100847
+ "@_w": String(Math.round(w * totalWidthEmu))
100848
+ }));
100849
+ if (!table2["a:tblGrid"]) {
100850
+ table2["a:tblGrid"] = {};
100851
+ }
100852
+ table2["a:tblGrid"]["a:gridCol"] = newGridCols.length === 1 ? newGridCols[0] : newGridCols;
100853
+ const existingXmlRows = ensureArray19(table2["a:tr"]);
100854
+ const newXmlRows = tableData.rows.map((dataRow, ri) => {
100855
+ const existingRow = ri < existingXmlRows.length ? existingXmlRows[ri] : void 0;
100856
+ const existingCells = existingRow ? ensureArray19(existingRow["a:tc"]) : [];
100857
+ const heightEmu = dataRow.height ? Math.round(dataRow.height * EMU_PER_PX) : existingRow?.["@_h"] ? parseInt(String(existingRow["@_h"]), 10) : DEFAULT_ROW_HEIGHT_EMU;
100858
+ const newXmlCells = dataRow.cells.map((cell, ci) => {
100859
+ let xmlCell;
100860
+ if (ci < existingCells.length) {
100861
+ xmlCell = existingCells[ci];
100862
+ } else {
100863
+ xmlCell = createDefaultRebuildXmlCell();
100864
+ }
100865
+ serializeCellMergeAttributes(xmlCell, cell);
100866
+ return xmlCell;
100867
+ });
100868
+ return {
100869
+ ...appliedEdit ? existingRow : {},
100870
+ "@_h": String(heightEmu),
100871
+ "a:tc": newXmlCells.length === 1 ? newXmlCells[0] : newXmlCells
100872
+ };
100873
+ });
100874
+ table2["a:tr"] = newXmlRows.length === 1 ? newXmlRows[0] : newXmlRows;
100875
+ return newRawXml;
100876
+ }
100877
+ var init_table_structure_rawxml = __esm({
100878
+ "src/core/core/runtime/table-structure-rawxml.ts"() {
100879
+ init_constants();
100880
+ init_save_table_merge_helpers();
100881
+ init_table_structural_helpers();
100882
+ init_table_structure_edit_xml();
100883
+ }
100884
+ });
100159
100885
  function updateCellTextInRawXml(element, rowIndex, colIndex, text22) {
100160
100886
  if (!element.rawXml) {
100161
100887
  return void 0;
@@ -100169,43 +100895,16 @@ function updateCellTextInRawXml(element, rowIndex, colIndex, text22) {
100169
100895
  if (rowIndex < 0 || rowIndex >= rows.length) {
100170
100896
  return void 0;
100171
100897
  }
100172
- const cells = ensureArray19(rows[rowIndex]["a:tc"]);
100173
- if (colIndex < 0 || colIndex >= cells.length) {
100898
+ const cells2 = ensureArray19(rows[rowIndex]["a:tc"]);
100899
+ if (colIndex < 0 || colIndex >= cells2.length) {
100174
100900
  return void 0;
100175
100901
  }
100176
- cells[colIndex]["a:txBody"] = rebuildCellTextBody(
100177
- cells[colIndex]["a:txBody"],
100902
+ cells2[colIndex]["a:txBody"] = rebuildCellTextBody(
100903
+ cells2[colIndex]["a:txBody"],
100178
100904
  text22
100179
100905
  );
100180
100906
  return newRawXml;
100181
100907
  }
100182
- function rebuildCellTextBody(existingTxBody, text22) {
100183
- const existingParagraphs = ensureArray19(
100184
- existingTxBody?.["a:p"]
100185
- );
100186
- const firstParagraph = existingParagraphs.length > 0 ? existingParagraphs[0] : void 0;
100187
- const existingRuns = firstParagraph ? ensureArray19(firstParagraph["a:r"]) : [];
100188
- const firstRunProps = existingRuns.length > 0 ? existingRuns[0]["a:rPr"] : void 0;
100189
- const newRun = {};
100190
- if (firstRunProps !== void 0) {
100191
- newRun["a:rPr"] = firstRunProps;
100192
- }
100193
- newRun["a:t"] = text22;
100194
- const newParagraph = {};
100195
- if (firstParagraph?.["a:pPr"] !== void 0) {
100196
- newParagraph["a:pPr"] = firstParagraph["a:pPr"];
100197
- }
100198
- newParagraph["a:r"] = newRun;
100199
- const newTxBody = {};
100200
- if (existingTxBody?.["a:bodyPr"] !== void 0) {
100201
- newTxBody["a:bodyPr"] = existingTxBody["a:bodyPr"];
100202
- }
100203
- if (existingTxBody?.["a:lstStyle"] !== void 0) {
100204
- newTxBody["a:lstStyle"] = existingTxBody["a:lstStyle"];
100205
- }
100206
- newTxBody["a:p"] = newParagraph;
100207
- return newTxBody;
100208
- }
100209
100908
  function updateCellTextStyleInRawXml(element, rowIndex, colIndex, styleUpdates) {
100210
100909
  if (!element.rawXml) {
100211
100910
  return void 0;
@@ -100219,11 +100918,11 @@ function updateCellTextStyleInRawXml(element, rowIndex, colIndex, styleUpdates)
100219
100918
  if (rowIndex < 0 || rowIndex >= rows.length) {
100220
100919
  return void 0;
100221
100920
  }
100222
- const cells = ensureArray19(rows[rowIndex]["a:tc"]);
100223
- if (colIndex < 0 || colIndex >= cells.length) {
100921
+ const cells2 = ensureArray19(rows[rowIndex]["a:tc"]);
100922
+ if (colIndex < 0 || colIndex >= cells2.length) {
100224
100923
  return void 0;
100225
100924
  }
100226
- const cell = cells[colIndex];
100925
+ const cell = cells2[colIndex];
100227
100926
  const txBody = cell["a:txBody"];
100228
100927
  if (!txBody) {
100229
100928
  return void 0;
@@ -100344,97 +101043,20 @@ function updateMergeAttrsInRawXml(element, tableData) {
100344
101043
  } else {
100345
101044
  delete xmlCell["@_vMerge"];
100346
101045
  }
100347
- if (cell.text !== void 0) {
100348
- xmlCell["a:txBody"] = rebuildCellTextBody(
100349
- xmlCell["a:txBody"],
100350
- cell.text
100351
- );
101046
+ const txBody = xmlCell["a:txBody"];
101047
+ if (cell.text !== void 0 && !tableCellTextBodyMatches(txBody, cell.text)) {
101048
+ xmlCell["a:txBody"] = rebuildCellTextBody(txBody, cell.text);
100352
101049
  }
100353
101050
  }
100354
101051
  }
100355
101052
  return newRawXml;
100356
101053
  }
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
101054
  var init_table_cell_rawxml_ops = __esm({
100434
101055
  "src/core/core/runtime/table-cell-rawxml-ops.ts"() {
100435
- init_constants();
100436
101056
  init_xml_access();
101057
+ init_table_cell_text_xml();
100437
101058
  init_table_structural_helpers();
101059
+ init_table_structure_rawxml();
100438
101060
  }
100439
101061
  });
100440
101062
  var init_table_structural_ops = __esm({
@@ -100665,6 +101287,7 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
100665
101287
  init_chart_part_family_switch();
100666
101288
  init_PptxHandlerRuntimeChartUserShapes();
100667
101289
  init_save_table_merge_helpers();
101290
+ init_table_paragraph_save_order();
100668
101291
  init_table_structural_ops();
100669
101292
  init_table_tblpr_save();
100670
101293
  CHART_DATA_DISPLAY_OPTIONS_EXT_URI = "{56B9EC1D-385E-4148-901F-78D8002777C0}";
@@ -100742,6 +101365,7 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
100742
101365
  this.writeTableCellStyle(xmlCell, cell.style);
100743
101366
  }
100744
101367
  serializeCellExtraAttributes(xmlCell, cell.extraAttributes);
101368
+ recordTableParagraphOrder(xmlCell, cell.textRuns);
100745
101369
  }
100746
101370
  }
100747
101371
  } catch (e) {
@@ -102418,6 +103042,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102418
103042
  init_smartart_save_chrome();
102419
103043
  init_smartart_save_geometry();
102420
103044
  init_smartart_xml_builders();
103045
+ init_table_paragraph_save_order();
102421
103046
  PptxHandlerRuntime25 = class _PptxHandlerRuntime extends PptxHandlerRuntime24 {
102422
103047
  /** Pending SmartArt data updates to process during save. */
102423
103048
  pendingSmartArtUpdates;
@@ -102694,7 +103319,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102694
103319
  );
102695
103320
  root["p:cSld"] = cSld;
102696
103321
  data["p:notesMaster"] = root;
102697
- this.zip.file(notesMaster.path, this.builder.build(data));
103322
+ this.zip.file(notesMaster.path, this.builder.build(withOrderedTableParagraphs(data)));
102698
103323
  } catch (e) {
102699
103324
  console.warn("Failed to save notes master changes:", e);
102700
103325
  }
@@ -102729,7 +103354,7 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
102729
103354
  );
102730
103355
  root["p:cSld"] = cSld;
102731
103356
  data["p:handoutMaster"] = root;
102732
- this.zip.file(handoutMaster.path, this.builder.build(data));
103357
+ this.zip.file(handoutMaster.path, this.builder.build(withOrderedTableParagraphs(data)));
102733
103358
  } catch (e) {
102734
103359
  console.warn("Failed to save handout master changes:", e);
102735
103360
  }
@@ -106976,7 +107601,7 @@ function buildOrderedSlideXml(options) {
106976
107601
  }
106977
107602
  }
106978
107603
  nextSlide = orderSlideRootChildren(nextSlide, getLocalName2);
106979
- return { ...xmlObj, "p:sld": nextSlide };
107604
+ return withOrderedTableParagraphs({ ...xmlObj, "p:sld": nextSlide });
106980
107605
  }
106981
107606
  var ALTERNATE_CONTENT_TAG;
106982
107607
  var UNRANKED;
@@ -106988,6 +107613,7 @@ var init_slide_save_xml_order = __esm({
106988
107613
  "src/core/core/runtime/slide-save-xml-order.ts"() {
106989
107614
  init_utils();
106990
107615
  init_ordered_xml_children();
107616
+ init_table_paragraph_save_order();
106991
107617
  ALTERNATE_CONTENT_TAG = "mc:AlternateContent";
106992
107618
  UNRANKED = Number.MAX_SAFE_INTEGER;
106993
107619
  COLLECTOR_KEYS = [
@@ -108482,12 +109108,12 @@ function orderedTemplatePartXml(options) {
108482
109108
  const rebuilt = positionsByRuntime.get(runtime)?.get(partPath);
108483
109109
  const ordered4 = rebuilt ? orderShapeTreeChildren(rewrapped, (node) => rebuilt.get(node), getLocalName2) : orderContainer(rewrapped, sourceXml ? scanSpTreeDocumentOrder(sourceXml) : [], getLocalName2);
108484
109110
  if (ordered4 === spTree) {
108485
- return xmlObj;
109111
+ return withOrderedTableParagraphs(xmlObj);
108486
109112
  }
108487
109113
  const nextRoot = { ...root, "p:cSld": { ...commonSlideData, "p:spTree": ordered4 } };
108488
109114
  const nextPart = { ...xmlObj };
108489
109115
  setOwnXmlProperty(nextPart, rootTag2, nextRoot);
108490
- return nextPart;
109116
+ return withOrderedTableParagraphs(nextPart);
108491
109117
  }
108492
109118
  var ALTERNATE_CONTENT_TAG3;
108493
109119
  var positionsByRuntime;
@@ -108497,6 +109123,7 @@ var init_template_sp_tree_order = __esm({
108497
109123
  init_ordered_xml_children();
108498
109124
  init_slide_save_xml_order();
108499
109125
  init_sp_tree_document_order_scan();
109126
+ init_table_paragraph_save_order();
108500
109127
  ALTERNATE_CONTENT_TAG3 = "mc:AlternateContent";
108501
109128
  positionsByRuntime = /* @__PURE__ */ new WeakMap();
108502
109129
  }
@@ -112490,11 +113117,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
112490
113117
  processField(f6);
112491
113118
  }
112492
113119
  };
112493
- const { entries, authored } = paragraphContentEntries(
112494
- p,
112495
- PARAGRAPH_CONTENT_TAGS,
112496
- (value) => this.ensureArray(value)
112497
- );
113120
+ const { entries, authored } = paragraphContentEntries(p, PARAGRAPH_CONTENT_TAGS);
112498
113121
  const runCount = this.ensureArray(p["a:r"]).length;
112499
113122
  const breakCount = this.ensureArray(p["a:br"]).length;
112500
113123
  const insertCollapsedBreaks = !authored && runCount > 1 && breakCount > 0;
@@ -136241,8 +136864,8 @@ var ChartElementProcessor = class {
136241
136864
  widths[widths.length - 1] = Math.max(widths[widths.length - 1], pct2.length);
136242
136865
  }
136243
136866
  }
136244
- const formatRow = (cells) => {
136245
- const padded = cells.map((cell, index) => cell.padEnd(widths[index]));
136867
+ const formatRow = (cells2) => {
136868
+ const padded = cells2.map((cell, index) => cell.padEnd(widths[index]));
136246
136869
  return `| ${padded.join(" | ")} |`;
136247
136870
  };
136248
136871
  const separator = `| ${widths.map((width) => "-".repeat(width)).join(" | ")} |`;
@@ -136802,7 +137425,7 @@ var TableElementProcessor = class {
136802
137425
  const row = tableData.rows[ri];
136803
137426
  const isHeader = ri === 0 && tableData.firstRowHeader !== false;
136804
137427
  const tag = isHeader ? "th" : "td";
136805
- const cells = [];
137428
+ const cells2 = [];
136806
137429
  let ci = 0;
136807
137430
  for (const cell of row.cells) {
136808
137431
  while (this.isOccupied(rowSpanOccupancy, ri, ci)) {
@@ -136823,11 +137446,11 @@ var TableElementProcessor = class {
136823
137446
  }
136824
137447
  const attrs3 = this.buildCellAttrs(cell, gridSpan, rowSpan, isHeader);
136825
137448
  const content = this.renderCellContent(cell);
136826
- cells.push(`<${tag}${attrs3}>${content}</${tag}>`);
137449
+ cells2.push(`<${tag}${attrs3}>${content}</${tag}>`);
136827
137450
  ci += gridSpan;
136828
137451
  }
136829
- if (cells.length > 0) {
136830
- htmlRows.push(`<tr>${cells.join("")}</tr>`);
137452
+ if (cells2.length > 0) {
137453
+ htmlRows.push(`<tr>${cells2.join("")}</tr>`);
136831
137454
  }
136832
137455
  }
136833
137456
  if (htmlRows.length === 0) {
@@ -137043,14 +137666,14 @@ ${htmlRows.join("\n")}
137043
137666
  const mdRows = [];
137044
137667
  const hasHeader = tableData.firstRowHeader !== false;
137045
137668
  for (let ri = 0; ri < rows.length; ri++) {
137046
- const cells = rows[ri].cells.map((cell) => {
137669
+ const cells2 = rows[ri].cells.map((cell) => {
137047
137670
  const text22 = this.getCellFormattedText(cell);
137048
137671
  return this.escapeMarkdownTableCell(text22);
137049
137672
  });
137050
- while (cells.length < columnCount) {
137051
- cells.push("");
137673
+ while (cells2.length < columnCount) {
137674
+ cells2.push("");
137052
137675
  }
137053
- mdRows.push(`| ${cells.join(" | ")} |`);
137676
+ mdRows.push(`| ${cells2.join(" | ")} |`);
137054
137677
  if (ri === 0 && hasHeader) {
137055
137678
  const divider = Array.from({ length: columnCount }, () => "---");
137056
137679
  mdRows.push(`| ${divider.join(" | ")} |`);
@@ -138371,8 +138994,8 @@ var OmmlLatexConverter = class {
138371
138994
  return null;
138372
138995
  }
138373
138996
  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(" & ");
138997
+ const cells2 = this.toRecordArray(row["m:e"]).map((entry2) => this.renderNode(entry2).trim()).filter((entry2) => entry2.length > 0);
138998
+ return cells2.join(" & ");
138376
138999
  }).filter((row) => row.length > 0);
138377
139000
  if (rows.length === 0) {
138378
139001
  return null;
@@ -143822,6 +144445,60 @@ var NOMINAL_ENVELOPE_BAND = {
143822
144445
  top: TOP_MARGIN,
143823
144446
  bottom: BOTTOM_MARGIN
143824
144447
  };
144448
+ var measureCtx;
144449
+ function getMeasureCtx() {
144450
+ if (measureCtx !== void 0) {
144451
+ return measureCtx;
144452
+ }
144453
+ if (typeof document === "undefined") {
144454
+ measureCtx = null;
144455
+ return null;
144456
+ }
144457
+ measureCtx = document.createElement("canvas").getContext("2d");
144458
+ return measureCtx;
144459
+ }
144460
+ function toCanvasFont(font) {
144461
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144462
+ const family = font.fontFamily || DEFAULT_FONT_FAMILY2;
144463
+ return `${font.italic ? "italic " : ""}${font.bold ? "bold " : ""}${size}px ${family}`;
144464
+ }
144465
+ function measureGlyphAdvances(text22, font) {
144466
+ const chars = [...text22];
144467
+ const ctx = getMeasureCtx();
144468
+ if (!ctx) {
144469
+ const size = font.fontSizePx && font.fontSizePx > 0 ? font.fontSizePx : DEFAULT_TEXT_FONT_SIZE2;
144470
+ return chars.map(() => size * 0.55);
144471
+ }
144472
+ ctx.font = toCanvasFont(font);
144473
+ const advances = [];
144474
+ let previous = 0;
144475
+ let prefix = "";
144476
+ for (const char of chars) {
144477
+ prefix += char;
144478
+ const width = ctx.measureText(prefix).width;
144479
+ advances.push(Math.max(0, width - previous));
144480
+ previous = width;
144481
+ }
144482
+ return advances;
144483
+ }
144484
+ function measureLineAscent(segments) {
144485
+ const ctx = getMeasureCtx();
144486
+ if (!ctx) {
144487
+ return void 0;
144488
+ }
144489
+ let maxAscent = 0;
144490
+ for (const segment of segments) {
144491
+ if (!segment.text) {
144492
+ continue;
144493
+ }
144494
+ ctx.font = toCanvasFont(segment.font);
144495
+ const ascent = ctx.measureText(segment.text).actualBoundingBoxAscent;
144496
+ if (Number.isFinite(ascent) && ascent > maxAscent) {
144497
+ maxAscent = ascent;
144498
+ }
144499
+ }
144500
+ return maxAscent > 0 ? maxAscent : void 0;
144501
+ }
143825
144502
  function sliceBand(top, bottom, index, count) {
143826
144503
  const span = bottom - top;
143827
144504
  return {
@@ -143829,11 +144506,31 @@ function sliceBand(top, bottom, index, count) {
143829
144506
  bottom: top + (index + 1) / count * span
143830
144507
  };
143831
144508
  }
143832
- function edgeBandAt(preset, u, adj, adj2, height, lineIndex, lineCount) {
144509
+ function deformedBandAt(preset, u, adj, adj2, height) {
143833
144510
  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);
144511
+ return {
144512
+ top: (curve?.top ?? NOMINAL_ENVELOPE_BAND.top) * height,
144513
+ bottom: (curve?.bottom ?? NOMINAL_ENVELOPE_BAND.bottom) * height
144514
+ };
144515
+ }
144516
+ var ROW_BOUNDARY_REFERENCE_U = 0.5;
144517
+ function edgeBandAt(preset, u, adj, adj2, height, lineIndex, lineCount) {
144518
+ const actual = deformedBandAt(preset, u, adj, adj2, height);
144519
+ if (lineCount <= 1) {
144520
+ return sliceBand(actual.top, actual.bottom, 0, 1);
144521
+ }
144522
+ const reference = deformedBandAt(preset, ROW_BOUNDARY_REFERENCE_U, adj, adj2, height);
144523
+ const fixedSlice = sliceBand(reference.top, reference.bottom, lineIndex, lineCount);
144524
+ const isFirstRow = lineIndex <= 0;
144525
+ const isLastRow = lineIndex >= lineCount - 1;
144526
+ const flatTop = NOMINAL_ENVELOPE_BAND.top * height;
144527
+ const flatBottom = NOMINAL_ENVELOPE_BAND.bottom * height;
144528
+ const dampedOuterTop = flatTop + (actual.top - flatTop) / lineCount;
144529
+ const dampedOuterBottom = flatBottom + (actual.bottom - flatBottom) / lineCount;
144530
+ return {
144531
+ top: isFirstRow ? dampedOuterTop : fixedSlice.top,
144532
+ bottom: isLastRow ? dampedOuterBottom : fixedSlice.bottom
144533
+ };
143837
144534
  }
143838
144535
  function glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom) {
143839
144536
  const nominalSpan = nomBottom - nomTop;
@@ -143846,6 +144543,34 @@ function glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom) {
143846
144543
  const f6 = grandMean - b * meanX - d * meanY;
143847
144544
  return `matrix(1 ${b} 0 ${d} 0 ${f6})`;
143848
144545
  }
144546
+ function scaleOutlineCommandsX(commands, originX, scale2) {
144547
+ if (scale2 === 1) {
144548
+ return commands;
144549
+ }
144550
+ const sx = (x) => originX + (x - originX) * scale2;
144551
+ return commands.map((cmd) => {
144552
+ switch (cmd.type) {
144553
+ case "M":
144554
+ case "L":
144555
+ return { type: cmd.type, x: sx(cmd.x), y: cmd.y };
144556
+ case "Q":
144557
+ return { type: "Q", x1: sx(cmd.x1), y1: cmd.y1, x: sx(cmd.x), y: cmd.y };
144558
+ case "C":
144559
+ return {
144560
+ type: "C",
144561
+ x1: sx(cmd.x1),
144562
+ y1: cmd.y1,
144563
+ x2: sx(cmd.x2),
144564
+ y2: cmd.y2,
144565
+ x: sx(cmd.x),
144566
+ y: cmd.y
144567
+ };
144568
+ case "Z":
144569
+ default:
144570
+ return cmd;
144571
+ }
144572
+ });
144573
+ }
143849
144574
  function mapYThroughEnvelopeBand(y, nomTop, nomBottom, edgeTop, edgeBottom) {
143850
144575
  const nominalSpan = nomBottom - nomTop;
143851
144576
  if (nominalSpan <= 0) {
@@ -143975,75 +144700,16 @@ function buildGlyphSlices(preset, x0, x1, u0, u1, adj, adj2, height, lineIndex,
143975
144700
  const sliceX1 = x0 + (x1 - x0) * (i2 + 1) / n;
143976
144701
  const sliceU0 = u0 + (u1 - u0) * i2 / n;
143977
144702
  const sliceU1 = u0 + (u1 - u0) * (i2 + 1) / n;
144703
+ const e0 = edgeAt(sliceU0);
144704
+ const e1 = edgeAt(sliceU1);
143978
144705
  slices.push({
143979
144706
  clipX0: sliceX0 - (i2 === 0 ? 0 : SEAM_OVERLAP_PX),
143980
144707
  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
- )
144708
+ transform: glyphEnvelopeMatrix(sliceX0, sliceX1, e0, e1, nomTop, nomBottom)
143989
144709
  });
143990
144710
  }
143991
144711
  return slices;
143992
144712
  }
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
144713
  function startX(align, width, lineWidth) {
144048
144714
  if (align === "right") {
144049
144715
  return width - lineWidth;
@@ -144072,20 +144738,25 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144072
144738
  );
144073
144739
  const realAscent = measureLineAscent(segments);
144074
144740
  const nomTop = realAscent !== void 0 ? Math.max(fixedBandTop, nomBottom - realAscent) : fixedBandTop;
144741
+ const isCanFamily = preset === "textCanUp" || preset === "textCanDown";
144742
+ const stretch = width > 0 && lineWidth > 0 ? width / lineWidth : 1;
144743
+ const shapeScale = isCanFamily ? 1 : stretch;
144075
144744
  const placements = [];
144076
- let x = startX(align, width, lineWidth);
144745
+ let x = lineWidth > 0 ? 0 : startX(align, width, lineWidth);
144077
144746
  segments.forEach((segment, segIdx) => {
144078
144747
  const chars = [...segment.text];
144079
144748
  const advances = perSegmentAdvances[segIdx];
144080
144749
  chars.forEach((char, i2) => {
144081
- const glyphWidth = advances[i2] ?? 0;
144750
+ const naturalGlyphWidth = advances[i2] ?? 0;
144751
+ const pitch = naturalGlyphWidth * stretch;
144082
144752
  const x0 = x;
144083
- const x1 = x + glyphWidth;
144753
+ const x1 = x0 + naturalGlyphWidth;
144084
144754
  const u0 = width > 0 ? x0 / width : 0.5;
144085
144755
  const u1 = width > 0 ? x1 / width : 0.5;
144086
144756
  const edge0 = edgeBandAt(preset, u0, adj, adj2, height, safeLineIndex, safeLineCount);
144087
144757
  const edge1 = edgeBandAt(preset, u1, adj, adj2, height, safeLineIndex, safeLineCount);
144088
- const outlineCommands = getGlyphOutline?.(char, segment.font, x, nomBottom);
144758
+ const rawOutline = getGlyphOutline?.(char, segment.font, x0, nomBottom);
144759
+ const outlineCommands = rawOutline ? scaleOutlineCommandsX(rawOutline, x0, shapeScale) : void 0;
144089
144760
  const outlinePath = outlineCommands ? buildWarpedGlyphOutlinePathD(
144090
144761
  outlineCommands,
144091
144762
  preset,
@@ -144102,7 +144773,7 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144102
144773
  placements.push({
144103
144774
  char,
144104
144775
  segmentIndex: segment.segmentIndex,
144105
- x,
144776
+ x: x0,
144106
144777
  y: nomBottom,
144107
144778
  transform: glyphEnvelopeMatrix(x0, x1, edge0, edge1, nomTop, nomBottom),
144108
144779
  slices: sliceCount > 1 ? buildGlyphSlices(
@@ -144122,7 +144793,7 @@ function buildGlyphEnvelope(preset, segments, width, height, align, adj, adj2, l
144122
144793
  ) : void 0,
144123
144794
  outlinePath
144124
144795
  });
144125
- x += glyphWidth;
144796
+ x += pitch;
144126
144797
  });
144127
144798
  });
144128
144799
  return placements;
@@ -146738,9 +147409,9 @@ function convertMatrix(node, cc) {
146738
147409
  const rows = ensureArray6(node["m:mr"]);
146739
147410
  const tableRows = [];
146740
147411
  for (const row of rows) {
146741
- const cells = ensureArray6(row["m:e"]);
147412
+ const cells2 = ensureArray6(row["m:e"]);
146742
147413
  const tdParts = [];
146743
- for (const cell of cells) {
147414
+ for (const cell of cells2) {
146744
147415
  tdParts.push(`<mtd><mrow>${cc(cell)}</mrow></mtd>`);
146745
147416
  }
146746
147417
  tableRows.push(`<mtr>${tdParts.join("")}</mtr>`);
@@ -147465,16 +148136,16 @@ function parseEnvBody(ctx) {
147465
148136
  function buildMatrix(ctx, rows) {
147466
148137
  return {
147467
148138
  "m:m": {
147468
- "m:mr": rows.map((cells) => ({
147469
- "m:e": cells.map((cell) => ctx.wrapE(cell))
148139
+ "m:mr": rows.map((cells2) => ({
148140
+ "m:e": cells2.map((cell) => ctx.wrapE(cell))
147470
148141
  }))
147471
148142
  }
147472
148143
  };
147473
148144
  }
147474
148145
  function buildEqArr(ctx, rows) {
147475
- const lines = rows.map((cells) => {
148146
+ const lines = rows.map((cells2) => {
147476
148147
  const nodes = [];
147477
- cells.forEach((cell, index) => {
148148
+ cells2.forEach((cell, index) => {
147478
148149
  if (index > 0) {
147479
148150
  nodes.push(ctx.makeRun("&"));
147480
148151
  }
@@ -154312,13 +154983,13 @@ function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
154312
154983
  const projH = maxSY - minSY;
154313
154984
  const offsetX = layout.plotLeft + layout.plotWidth / 2 - (minSX + projW / 2);
154314
154985
  const offsetY = layout.plotTop + layout.plotHeight / 2 - (minSY + projH / 2);
154315
- const cells = [];
154986
+ const cells2 = [];
154316
154987
  for (let r = 0; r < rows; r++) {
154317
154988
  for (let c = 0; c < cols; c++) {
154318
- cells.push({ row: r, col: c, depth: r + c });
154989
+ cells2.push({ row: r, col: c, depth: r + c });
154319
154990
  }
154320
154991
  }
154321
- cells.sort((a, b) => a.depth - b.depth);
154992
+ cells2.sort((a, b) => a.depth - b.depth);
154322
154993
  const primitives = [];
154323
154994
  primitives.push(
154324
154995
  ...buildSurfaceWallPanels(cols, rows, cellSize, zScale, offsetX, offsetY, {
@@ -154327,7 +154998,7 @@ function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
154327
154998
  backWall: chartData.backWall
154328
154999
  })
154329
155000
  );
154330
- for (const { row, col } of cells) {
155001
+ for (const { row, col } of cells2) {
154331
155002
  const corners = [
154332
155003
  [col, row],
154333
155004
  [col + 1, row],
@@ -167664,15 +168335,15 @@ function setCellText(element, rowIndex, colIndex, text22) {
167664
168335
  });
167665
168336
  return { ...element, tableData: { ...tableData, rows } };
167666
168337
  }
167667
- function computeBoundingRect(cells) {
167668
- if (cells.length === 0) {
168338
+ function computeBoundingRect(cells2) {
168339
+ if (cells2.length === 0) {
167669
168340
  return void 0;
167670
168341
  }
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) {
168342
+ let startRow = cells2[0].row;
168343
+ let startCol = cells2[0].col;
168344
+ let endRow = cells2[0].row;
168345
+ let endCol = cells2[0].col;
168346
+ for (const { row, col } of cells2) {
167676
168347
  if (row < startRow) {
167677
168348
  startRow = row;
167678
168349
  }
@@ -167758,8 +168429,8 @@ function expandRectForExistingMerges(rect22, tableData) {
167758
168429
  }
167759
168430
  return { startRow, startCol, endRow, endCol };
167760
168431
  }
167761
- function mergeCells(cells, tableData) {
167762
- const rawRect = computeBoundingRect(cells);
168432
+ function mergeCells(cells2, tableData) {
168433
+ const rawRect = computeBoundingRect(cells2);
167763
168434
  if (!rawRect) {
167764
168435
  return tableData;
167765
168436
  }
@@ -167796,7 +168467,7 @@ function mergeCells(cells, tableData) {
167796
168467
  }
167797
168468
  if (ri === rect22.startRow && ci === rect22.startCol) {
167798
168469
  return {
167799
- ...withCellText(cell, combinedText),
168470
+ ...cell.text === combinedText ? cell : withCellText(cell, combinedText),
167800
168471
  gridSpan: colCount > 1 ? colCount : void 0,
167801
168472
  rowSpan: rowCount > 1 ? rowCount : void 0,
167802
168473
  hMerge: void 0,
@@ -167949,7 +168620,7 @@ function deleteTableRow(tableData, rowIdx) {
167949
168620
  }
167950
168621
  const removedRow = tableData.rows[rowIdx];
167951
168622
  const adjustedRows = [...tableData.rows];
167952
- const updateCellRowSpan = (cells, colIdx, newRowSpan) => cells.map((cc, ci) => ci === colIdx ? { ...cc, rowSpan: newRowSpan } : cc);
168623
+ const updateCellRowSpan = (cells2, colIdx, newRowSpan) => cells2.map((cc, ci) => ci === colIdx ? { ...cc, rowSpan: newRowSpan } : cc);
167953
168624
  for (let c = 0; c < removedRow.cells.length; c++) {
167954
168625
  const cell = removedRow.cells[c];
167955
168626
  if (cell.vMerge) {
@@ -167984,6 +168655,7 @@ function deleteTableRow(tableData, rowIdx) {
167984
168655
  return {
167985
168656
  ...cc,
167986
168657
  text: cell.text || cc.text,
168658
+ textRuns: cell.text ? cell.textRuns : cc.textRuns,
167987
168659
  style: cc.style || cell.style,
167988
168660
  rowSpan: newRs > 1 ? newRs : void 0,
167989
168661
  vMerge: void 0,
@@ -168083,6 +168755,7 @@ function deleteTableColumn(tableData, colIdx) {
168083
168755
  adjustedCells[nextColIdx] = {
168084
168756
  ...nextCell,
168085
168757
  text: cell.text || nextCell.text,
168758
+ textRuns: cell.text ? cell.textRuns : nextCell.textRuns,
168086
168759
  style: nextCell.style || cell.style,
168087
168760
  gridSpan: gs - 1 > 1 ? gs - 1 : void 0,
168088
168761
  hMerge: void 0,
@@ -168122,7 +168795,7 @@ function buildTableDataGrid(element) {
168122
168795
  canRemoveColumn: colCount > 1
168123
168796
  };
168124
168797
  }
168125
- function withTableData(element, transform6) {
168798
+ function withTableData(element, transform6, edit) {
168126
168799
  const tableData = element.tableData;
168127
168800
  if (!tableData) {
168128
168801
  return element;
@@ -168133,7 +168806,7 @@ function withTableData(element, transform6) {
168133
168806
  }
168134
168807
  const updated = { ...element, tableData: next };
168135
168808
  if (element.rawXml) {
168136
- const rawXml = rebuildTableStructureInRawXml(element, next);
168809
+ const rawXml = rebuildTableStructureInRawXml(element, next, edit);
168137
168810
  if (rawXml) {
168138
168811
  updated.rawXml = rawXml;
168139
168812
  }
@@ -168149,16 +168822,32 @@ function setTableElementCellText(element, rowIndex, colIndex, text22) {
168149
168822
  return rawXml ? { ...updated, rawXml } : updated;
168150
168823
  }
168151
168824
  function insertTableElementRow(element, rowIdx, position2) {
168152
- return withTableData(element, (data) => insertTableRow(data, rowIdx, position2));
168825
+ return withTableData(element, (data) => insertTableRow(data, rowIdx, position2), {
168826
+ axis: "row",
168827
+ action: "insert",
168828
+ index: position2 === "above" ? rowIdx : rowIdx + 1
168829
+ });
168153
168830
  }
168154
168831
  function removeTableElementRow(element, rowIdx) {
168155
- return withTableData(element, (data) => deleteTableRow(data, rowIdx));
168832
+ return withTableData(element, (data) => deleteTableRow(data, rowIdx), {
168833
+ axis: "row",
168834
+ action: "delete",
168835
+ index: rowIdx
168836
+ });
168156
168837
  }
168157
168838
  function insertTableElementColumn(element, colIdx, position2) {
168158
- return withTableData(element, (data) => insertTableColumn(data, colIdx, position2));
168839
+ return withTableData(element, (data) => insertTableColumn(data, colIdx, position2), {
168840
+ axis: "column",
168841
+ action: "insert",
168842
+ index: position2 === "left" ? colIdx : colIdx + 1
168843
+ });
168159
168844
  }
168160
168845
  function removeTableElementColumn(element, colIdx) {
168161
- return withTableData(element, (data) => deleteTableColumn(data, colIdx));
168846
+ return withTableData(element, (data) => deleteTableColumn(data, colIdx), {
168847
+ axis: "column",
168848
+ action: "delete",
168849
+ index: colIdx
168850
+ });
168162
168851
  }
168163
168852
  function appendTableElementRow(element) {
168164
168853
  const rowCount = element.tableData?.rows.length ?? 0;
@@ -168637,7 +169326,7 @@ function distributeElements(elements, axis, options) {
168637
169326
  }
168638
169327
  return result;
168639
169328
  }
168640
- var DEG_TO_RAD3 = Math.PI / 180;
169329
+ var DEG_TO_RAD4 = Math.PI / 180;
168641
169330
  function rotationOf(box) {
168642
169331
  return box.rotation ?? 0;
168643
169332
  }
@@ -168645,7 +169334,7 @@ function rotateDelta(dx, dy, rotationDeg) {
168645
169334
  if (!rotationDeg) {
168646
169335
  return { x: dx, y: dy };
168647
169336
  }
168648
- const rad = -rotationDeg * DEG_TO_RAD3;
169337
+ const rad = -rotationDeg * DEG_TO_RAD4;
168649
169338
  const cos = Math.cos(rad);
168650
169339
  const sin = Math.sin(rad);
168651
169340
  return {
@@ -168975,7 +169664,7 @@ function computeShadeToTitleFillToRect(title, slideWidthPx, slideHeightPx) {
168975
169664
  b: clampUnit3(1 - (title.y + title.height) / slideHeightPx)
168976
169665
  };
168977
169666
  }
168978
- var GRADIENT_STOP_TOKEN = /(rgba?\([^)]*\)|#[0-9a-fA-F]{3,8})\s+(-?[\d.]+)%/gu;
169667
+ var GRADIENT_STOP_TOKEN = /(rgba?\([^()]*\)|#[0-9a-fA-F]{3,8})\s+(-?[\d.]+)%/gu;
168979
169668
  function toHexChannel2(value) {
168980
169669
  return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0");
168981
169670
  }
@@ -169166,7 +169855,7 @@ function newTableElement(rows = 3, cols = 3, x = DEFAULT_X, y = TABLE_DEFAULT_Y)
169166
169855
  const columnWidths = Array.from({ length: cols }).fill(colWidth);
169167
169856
  const tableRows = Array.from({ length: rows }, (_, rowIdx) => {
169168
169857
  const isHeader = rowIdx === 0;
169169
- const cells = Array.from({ length: cols }, (__, colIdx) => ({
169858
+ const cells2 = Array.from({ length: cols }, (__, colIdx) => ({
169170
169859
  text: isHeader ? `Header ${colIdx + 1}` : "",
169171
169860
  style: {
169172
169861
  borderTopWidth: 1,
@@ -169184,7 +169873,7 @@ function newTableElement(rows = 3, cols = 3, x = DEFAULT_X, y = TABLE_DEFAULT_Y)
169184
169873
  } : {}
169185
169874
  }
169186
169875
  }));
169187
- return { cells, height: isHeader ? 40 : 36 };
169876
+ return { cells: cells2, height: isHeader ? 40 : 36 };
169188
169877
  });
169189
169878
  return {
169190
169879
  type: "table",
@@ -184260,7 +184949,7 @@ var TRANSITION_DIR_GRID_POSITIONS = {
184260
184949
  rd: [2, 2]
184261
184950
  };
184262
184951
  function buildDirectionGrid(directions) {
184263
- const cells = [
184952
+ const cells2 = [
184264
184953
  [null, null, null],
184265
184954
  [null, null, null],
184266
184955
  [null, null, null]
@@ -184268,10 +184957,10 @@ function buildDirectionGrid(directions) {
184268
184957
  for (const dir of directions) {
184269
184958
  const pos2 = TRANSITION_DIR_GRID_POSITIONS[dir];
184270
184959
  if (pos2) {
184271
- cells[pos2[0]][pos2[1]] = dir;
184960
+ cells2[pos2[0]][pos2[1]] = dir;
184272
184961
  }
184273
184962
  }
184274
- return cells;
184963
+ return cells2;
184275
184964
  }
184276
184965
  function mergeSlideTransition(current, changes) {
184277
184966
  return { type: "none", ...current, ...changes };
@@ -192032,6 +192721,20 @@ function resolveSelectionPaneRename(seed, value) {
192032
192721
  }
192033
192722
  return { name: trimmed };
192034
192723
  }
192724
+ function hasMultipleSelectedTableCells(cells2, tableData) {
192725
+ const selected = /* @__PURE__ */ new Set();
192726
+ for (const { row, col } of cells2 ?? []) {
192727
+ const cell = tableData?.rows[row]?.cells[col];
192728
+ if (tableData && (!cell || cell.hMerge || cell.vMerge)) {
192729
+ continue;
192730
+ }
192731
+ selected.add(`${row},${col}`);
192732
+ if (selected.size > 1) {
192733
+ return true;
192734
+ }
192735
+ }
192736
+ return false;
192737
+ }
192035
192738
  var LABEL_KEYS = {
192036
192739
  copy: "pptx.contextMenu.copy",
192037
192740
  cut: "pptx.contextMenu.cut",
@@ -199599,12 +200302,12 @@ async function fetchTextIfCrossOriginSafe(url) {
199599
200302
  return null;
199600
200303
  }
199601
200304
  }
199602
- var FONT_FACE_URL_PATTERN = /url\(\s*["']?([^"')]+)["']?\s*\)/gu;
200305
+ var FONT_FACE_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^"')\s]+))\s*\)/gu;
199603
200306
  async function inlineFontFaceUrls(css, fetchDataUrl) {
199604
200307
  const urls = /* @__PURE__ */ new Set();
199605
200308
  for (const match of css.matchAll(FONT_FACE_URL_PATTERN)) {
199606
- const raw = match[1];
199607
- if (raw.startsWith("http:") || raw.startsWith("https:")) {
200309
+ const raw = match[1] ?? match[2] ?? match[3];
200310
+ if (raw && (raw.startsWith("http:") || raw.startsWith("https:"))) {
199608
200311
  urls.add(raw);
199609
200312
  }
199610
200313
  }
@@ -199664,9 +200367,13 @@ async function fetchAsDataUrl(url) {
199664
200367
  return null;
199665
200368
  }
199666
200369
  }
200370
+ var CSS_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^"')\s]+))\s*\)/u;
199667
200371
  function extractCssUrl(value) {
199668
- const match = /url\(\s*["']?([^"')]+)["']?\s*\)/u.exec(value);
199669
- return match ? match[1] : null;
200372
+ const match = CSS_URL_PATTERN.exec(value);
200373
+ if (!match) {
200374
+ return null;
200375
+ }
200376
+ return match[1] ?? match[2] ?? match[3] ?? null;
199670
200377
  }
199671
200378
  function needsEmbedding(url) {
199672
200379
  return url.startsWith("blob:") || url.startsWith("http:") || url.startsWith("https:");
@@ -200136,13 +200843,13 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200136
200843
  const printableWidth = page.width - page.marginLeft - page.marginRight;
200137
200844
  const printableHeight = page.height - page.marginTop - page.marginBottom;
200138
200845
  const isThreePerPage = slidesPerPage === 3;
200139
- const cells = [];
200846
+ const cells2 = [];
200140
200847
  if (isThreePerPage) {
200141
200848
  const slideAreaWidth = printableWidth * THREE_PER_PAGE_SLIDE_FRACTION;
200142
200849
  const cellHeight = (printableHeight - CELL_GAP * (grid.rows - 1)) / grid.rows;
200143
200850
  for (let row = 0; row < grid.rows; row++) {
200144
200851
  const slideIdx = startSlideIndex + row;
200145
- cells.push({
200852
+ cells2.push({
200146
200853
  slideIndex: slideIdx < totalSlides ? slideIdx : -1,
200147
200854
  row,
200148
200855
  col: 0,
@@ -200159,7 +200866,7 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200159
200866
  for (let row = 0; row < grid.rows; row++) {
200160
200867
  for (let col = 0; col < grid.columns; col++) {
200161
200868
  const slideIdx = startSlideIndex + cellIndex;
200162
- cells.push({
200869
+ cells2.push({
200163
200870
  slideIndex: slideIdx < totalSlides ? slideIdx : -1,
200164
200871
  row,
200165
200872
  col,
@@ -200174,7 +200881,7 @@ function computePageCells(pageIndex, slidesPerPage, totalSlides, startSlideIndex
200174
200881
  }
200175
200882
  return {
200176
200883
  pageIndex,
200177
- cells,
200884
+ cells: cells2,
200178
200885
  hasNoteLines: isThreePerPage
200179
200886
  };
200180
200887
  }
@@ -201927,6 +202634,9 @@ function groupTilesByRow(tiles) {
201927
202634
  const rowCount = tiles.reduce((max, t) => Math.max(max, t.row), 0) + 1;
201928
202635
  const rows = Array.from({ length: rowCount }, () => []);
201929
202636
  for (const tile of tiles) {
202637
+ if (!Number.isInteger(tile.row) || !Number.isInteger(tile.col) || tile.row < 0 || tile.col < 0) {
202638
+ continue;
202639
+ }
201930
202640
  rows[tile.row][tile.col] = tile;
201931
202641
  }
201932
202642
  return rows;
@@ -202153,4 +202863,4 @@ async function rasterResultToPngBlob(result) {
202153
202863
  * `<p:extLst>` (optional)
202154
202864
  */
202155
202865
 
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 };
202866
+ 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, hasMultipleSelectedTableCells, 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 };