@superdoc-dev/cli 0.3.0-next.3 → 0.3.0-next.4

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 (2) hide show
  1. package/dist/index.js +677 -604
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -131315,7 +131315,7 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
131315
131315
  init_remark_gfm_z_sDF4ss_es();
131316
131316
  });
131317
131317
 
131318
- // ../../packages/superdoc/dist/chunks/src-DT75iyuq.es.js
131318
+ // ../../packages/superdoc/dist/chunks/src-CcGVOrgc.es.js
131319
131319
  function deleteProps(obj, propOrProps) {
131320
131320
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
131321
131321
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -139169,9 +139169,17 @@ function extractColumns(elements) {
139169
139169
  const cols = elements.find((el) => el?.name === "w:cols");
139170
139170
  if (!cols?.attributes)
139171
139171
  return;
139172
+ const count = parseColumnCount(cols.attributes["w:num"]);
139173
+ const equalWidthRaw = cols.attributes["w:equalWidth"];
139174
+ const equalWidth = equalWidthRaw === "0" || equalWidthRaw === 0 || equalWidthRaw === false ? false : equalWidthRaw === "1" || equalWidthRaw === 1 || equalWidthRaw === true ? true : undefined;
139175
+ const columnChildren = Array.isArray(cols.elements) ? cols.elements.filter((child) => child?.name === "w:col") : [];
139176
+ const gapInches = parseColumnGap(cols.attributes["w:space"] ?? columnChildren.find((child) => child?.attributes?.["w:space"] != null)?.attributes?.["w:space"]);
139177
+ const widths = columnChildren.map((child) => Number(child.attributes?.["w:w"])).filter((widthTwips) => Number.isFinite(widthTwips) && widthTwips > 0).map((widthTwips) => widthTwips / 1440 * PX_PER_INCH$2);
139172
139178
  return {
139173
- count: parseColumnCount(cols.attributes["w:num"]),
139174
- gap: parseColumnGap(cols.attributes["w:space"]) * PX_PER_INCH$2
139179
+ count,
139180
+ gap: gapInches * PX_PER_INCH$2,
139181
+ ...widths.length > 0 ? { widths } : {},
139182
+ ...equalWidth !== undefined ? { equalWidth } : {}
139175
139183
  };
139176
139184
  }
139177
139185
  function extractVerticalAlign(elements) {
@@ -139222,6 +139230,512 @@ function extractSectionData(para) {
139222
139230
  vAlign
139223
139231
  };
139224
139232
  }
139233
+ function computeTabStops$1(context) {
139234
+ const { explicitStops, defaultTabInterval, paragraphIndent } = context;
139235
+ const leftIndent = paragraphIndent.left ?? 0;
139236
+ const hanging = paragraphIndent.hanging ?? 0;
139237
+ const effectiveMinIndent = Math.max(0, leftIndent - hanging);
139238
+ const clearPositions = explicitStops.filter((stop) => stop.val === "clear").map((stop) => stop.pos);
139239
+ const filteredExplicitStops = explicitStops.filter((stop) => stop.val !== "clear").filter((stop) => stop.pos >= effectiveMinIndent);
139240
+ const maxExplicit = filteredExplicitStops.reduce((max$2, stop) => Math.max(max$2, stop.pos), 0);
139241
+ const hasExplicit = filteredExplicitStops.length > 0;
139242
+ const stops = [...filteredExplicitStops];
139243
+ const defaultStart = hasExplicit ? Math.max(maxExplicit, leftIndent) : 0;
139244
+ let pos = defaultStart;
139245
+ const targetLimit = Math.max(defaultStart, leftIndent) + 14400;
139246
+ while (pos < targetLimit) {
139247
+ pos += defaultTabInterval;
139248
+ const hasExplicitStop = filteredExplicitStops.some((s2) => Math.abs(s2.pos - pos) < 20);
139249
+ const hasClearStop = clearPositions.some((clearPos) => Math.abs(clearPos - pos) < 20);
139250
+ if (!hasExplicitStop && !hasClearStop && pos >= leftIndent)
139251
+ stops.push({
139252
+ val: "start",
139253
+ pos,
139254
+ leader: "none"
139255
+ });
139256
+ }
139257
+ return stops.sort((a2, b$1) => a2.pos - b$1.pos);
139258
+ }
139259
+ function layoutWithTabs(runs2, stops, lineWidth, options = {}) {
139260
+ const result = [];
139261
+ let currentX = 0;
139262
+ let currentStopIndex = 0;
139263
+ let pendingDecimalStop;
139264
+ let pendingCenterStop;
139265
+ let pendingEndStop;
139266
+ const decimalSeparator = options.decimalSeparator ?? ".";
139267
+ for (const entry of runs2) {
139268
+ const { run: run2, width, isTab } = entry;
139269
+ if (isTab) {
139270
+ while (currentStopIndex < stops.length && stops[currentStopIndex].pos <= currentX)
139271
+ currentStopIndex++;
139272
+ if (currentStopIndex < stops.length) {
139273
+ const stop = stops[currentStopIndex];
139274
+ result.push({
139275
+ run: run2,
139276
+ x: currentX,
139277
+ width: 0,
139278
+ tabStop: stop
139279
+ });
139280
+ currentX = stop.pos;
139281
+ pendingDecimalStop = stop.val === "decimal" ? stop : undefined;
139282
+ pendingCenterStop = stop.val === "center" ? stop : undefined;
139283
+ pendingEndStop = stop.val === "end" ? stop : undefined;
139284
+ currentStopIndex++;
139285
+ } else {
139286
+ result.push({
139287
+ run: run2,
139288
+ x: currentX,
139289
+ width
139290
+ });
139291
+ currentX += width;
139292
+ pendingDecimalStop = undefined;
139293
+ pendingCenterStop = undefined;
139294
+ pendingEndStop = undefined;
139295
+ }
139296
+ } else {
139297
+ if (pendingDecimalStop) {
139298
+ currentX = computeDecimalAlignedX(entry, pendingDecimalStop, options, decimalSeparator);
139299
+ pendingDecimalStop = undefined;
139300
+ } else if (pendingCenterStop) {
139301
+ currentX = computeCenterAlignedX(entry, pendingCenterStop);
139302
+ pendingCenterStop = undefined;
139303
+ } else if (pendingEndStop) {
139304
+ currentX = computeEndAlignedX(entry, pendingEndStop);
139305
+ pendingEndStop = undefined;
139306
+ }
139307
+ result.push({
139308
+ run: run2,
139309
+ x: currentX,
139310
+ width
139311
+ });
139312
+ currentX += width;
139313
+ }
139314
+ }
139315
+ return result;
139316
+ }
139317
+ function computeDecimalAlignedX(entry, stop, options, separator) {
139318
+ const text5 = entry.text ?? "";
139319
+ const decimalIndex = text5.indexOf(separator);
139320
+ if (decimalIndex <= 0)
139321
+ return stop.pos;
139322
+ const beforeText = text5.slice(0, decimalIndex);
139323
+ let beforeWidth;
139324
+ if (options.measureTextWidth)
139325
+ beforeWidth = options.measureTextWidth(entry.run, beforeText);
139326
+ else if (text5.length > 0)
139327
+ beforeWidth = entry.width * decimalIndex / text5.length;
139328
+ else
139329
+ beforeWidth = 0;
139330
+ const targetX = stop.pos - beforeWidth;
139331
+ return targetX < 0 ? 0 : targetX;
139332
+ }
139333
+ function computeCenterAlignedX(entry, stop) {
139334
+ const width = entry.width;
139335
+ const targetX = stop.pos - width / 2;
139336
+ return targetX < 0 ? 0 : targetX;
139337
+ }
139338
+ function computeEndAlignedX(entry, stop) {
139339
+ const width = entry.width;
139340
+ const targetX = stop.pos - width;
139341
+ return targetX < 0 ? 0 : targetX;
139342
+ }
139343
+ function calculateTabWidth(params$1) {
139344
+ const { currentX, tabStops, paragraphWidth, defaultTabDistance: defaultTabDistance$1, defaultLineLength: defaultLineLength$1, followingText = "", measureText: measureText$1, decimalSeparator = "." } = params$1;
139345
+ const nextStop = tabStops.find((stop) => stop.val !== "clear" && stop.pos > currentX);
139346
+ const fallbackWidth = () => {
139347
+ let tabWidth = defaultTabDistance$1 - currentX % defaultLineLength$1 % defaultTabDistance$1;
139348
+ if (tabWidth <= 0)
139349
+ tabWidth = defaultTabDistance$1;
139350
+ return {
139351
+ width: tabWidth,
139352
+ alignment: "default",
139353
+ tabStopPosUsed: "default"
139354
+ };
139355
+ };
139356
+ if (!nextStop)
139357
+ return fallbackWidth();
139358
+ let width = Math.min(nextStop.pos, paragraphWidth) - currentX;
139359
+ const alignment$1 = nextStop.val;
139360
+ if (alignment$1 === "bar")
139361
+ return {
139362
+ width: 0,
139363
+ leader: nextStop.leader,
139364
+ alignment: alignment$1,
139365
+ tabStopPosUsed: nextStop.pos
139366
+ };
139367
+ if (alignment$1 === "center" || alignment$1 === "end") {
139368
+ const textWidth = measureText$1 ? measureText$1(followingText) : 0;
139369
+ if (alignment$1 === "center")
139370
+ width -= textWidth / 2;
139371
+ else
139372
+ width -= textWidth;
139373
+ } else if (alignment$1 === "decimal") {
139374
+ const decimalIndex = followingText.indexOf(decimalSeparator);
139375
+ if (decimalIndex >= 0) {
139376
+ const before = followingText.slice(0, decimalIndex);
139377
+ const beforeWidth = measureText$1 ? measureText$1(before) : 0;
139378
+ width -= beforeWidth;
139379
+ }
139380
+ }
139381
+ if (width < 1)
139382
+ return fallbackWidth();
139383
+ return {
139384
+ width,
139385
+ leader: nextStop.leader,
139386
+ alignment: alignment$1,
139387
+ tabStopPosUsed: nextStop.pos
139388
+ };
139389
+ }
139390
+ function resolveColumnWidths(columns, availableWidth) {
139391
+ const width = availableWidth / columns.length;
139392
+ return columns.map(() => width);
139393
+ }
139394
+ function measureRowHeights(cells, _columnWidths) {
139395
+ return cells.map(() => 20);
139396
+ }
139397
+ function effectiveTableCellSpacing(spacing, isBoundary, padding) {
139398
+ if (typeof spacing !== "number" || spacing <= 0)
139399
+ return 0;
139400
+ return isBoundary ? Math.max(0, spacing - padding) : spacing;
139401
+ }
139402
+ function shouldApplyJustify(params$1) {
139403
+ const { alignment: alignment$1, hasExplicitPositioning, isLastLineOfParagraph, paragraphEndsWithLineBreak, skipJustifyOverride } = params$1;
139404
+ if (alignment$1 !== "justify" && alignment$1 !== "both")
139405
+ return false;
139406
+ if (skipJustifyOverride === true)
139407
+ return false;
139408
+ if (hasExplicitPositioning)
139409
+ return false;
139410
+ if (isLastLineOfParagraph && !paragraphEndsWithLineBreak)
139411
+ return false;
139412
+ return true;
139413
+ }
139414
+ function calculateJustifySpacing(params$1) {
139415
+ const { lineWidth, availableWidth, spaceCount, shouldJustify } = params$1;
139416
+ if (!shouldJustify)
139417
+ return 0;
139418
+ if (spaceCount <= 0)
139419
+ return 0;
139420
+ return (availableWidth - lineWidth) / spaceCount;
139421
+ }
139422
+ function parseInsetClipPathForScale(clipPath) {
139423
+ const m$1 = clipPath.trim().match(/^inset\(\s*(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s*\)$/);
139424
+ if (!m$1)
139425
+ return null;
139426
+ const top$1 = Number(m$1[1]);
139427
+ const right$1 = Number(m$1[2]);
139428
+ const bottom$1 = Number(m$1[3]);
139429
+ const left$1 = Number(m$1[4]);
139430
+ if (![
139431
+ top$1,
139432
+ right$1,
139433
+ bottom$1,
139434
+ left$1
139435
+ ].every(Number.isFinite))
139436
+ return null;
139437
+ const visibleW = 100 - left$1 - right$1;
139438
+ const visibleH = 100 - top$1 - bottom$1;
139439
+ if (visibleW <= 0 || visibleH <= 0)
139440
+ return null;
139441
+ const scaleX = 100 / visibleW;
139442
+ const scaleY = 100 / visibleH;
139443
+ return {
139444
+ scaleX,
139445
+ scaleY,
139446
+ translateX: -left$1 * scaleX,
139447
+ translateY: -top$1 * scaleY
139448
+ };
139449
+ }
139450
+ function formatInsetClipPathTransform(clipPath) {
139451
+ const scale = parseInsetClipPathForScale(clipPath);
139452
+ if (!scale)
139453
+ return;
139454
+ return `transform-origin: 0 0; transform: translate(${scale.translateX}%, ${scale.translateY}%) scale(${scale.scaleX}, ${scale.scaleY});`;
139455
+ }
139456
+ function computeLinePmRange$1(block, line) {
139457
+ if (!line)
139458
+ return {};
139459
+ if (block.kind !== "paragraph")
139460
+ return {};
139461
+ let pmStart;
139462
+ let pmEnd;
139463
+ for (let runIndex = line.fromRun;runIndex <= line.toRun; runIndex += 1) {
139464
+ const run2 = block.runs[runIndex];
139465
+ if (!run2)
139466
+ continue;
139467
+ const runPmStart = coercePmStart(run2);
139468
+ if (runPmStart == null)
139469
+ continue;
139470
+ if (isAtomicRunKind(run2.kind) || isImageLikeRun(run2)) {
139471
+ const runPmEnd = coercePmEnd(run2) ?? runPmStart + 1;
139472
+ if (pmStart == null)
139473
+ pmStart = runPmStart;
139474
+ pmEnd = runPmEnd;
139475
+ continue;
139476
+ }
139477
+ const runLength = coerceRunText(run2).length;
139478
+ const isFirstRun = runIndex === line.fromRun;
139479
+ const isLastRun = runIndex === line.toRun;
139480
+ const startOffset = isFirstRun ? line.fromChar : 0;
139481
+ const endOffset = isLastRun ? line.toChar : runLength;
139482
+ const sliceStart = runPmStart + startOffset;
139483
+ const sliceEnd = runPmStart + endOffset;
139484
+ if (pmStart == null)
139485
+ pmStart = sliceStart;
139486
+ pmEnd = sliceEnd;
139487
+ }
139488
+ return {
139489
+ pmStart,
139490
+ pmEnd
139491
+ };
139492
+ }
139493
+ function computeFragmentPmRange$1(block, lines, fromLine, toLine) {
139494
+ let pmStart;
139495
+ let pmEnd;
139496
+ for (let index2 = fromLine;index2 < toLine; index2 += 1) {
139497
+ const line = lines[index2];
139498
+ if (!line)
139499
+ continue;
139500
+ const range = computeLinePmRange$1(block, line);
139501
+ if (range.pmStart != null && pmStart == null)
139502
+ pmStart = range.pmStart;
139503
+ if (range.pmEnd != null)
139504
+ pmEnd = range.pmEnd;
139505
+ }
139506
+ return {
139507
+ pmStart,
139508
+ pmEnd
139509
+ };
139510
+ }
139511
+ function widthsEqual(a2, b$1) {
139512
+ if (!a2 && !b$1)
139513
+ return true;
139514
+ if (!a2 || !b$1)
139515
+ return false;
139516
+ if (a2.length !== b$1.length)
139517
+ return false;
139518
+ for (let i$1 = 0;i$1 < a2.length; i$1 += 1)
139519
+ if (a2[i$1] !== b$1[i$1])
139520
+ return false;
139521
+ return true;
139522
+ }
139523
+ function cloneColumnLayout(columns) {
139524
+ return columns ? {
139525
+ count: columns.count,
139526
+ gap: columns.gap,
139527
+ ...Array.isArray(columns.widths) ? { widths: [...columns.widths] } : {},
139528
+ ...columns.equalWidth !== undefined ? { equalWidth: columns.equalWidth } : {}
139529
+ } : {
139530
+ count: 1,
139531
+ gap: 0
139532
+ };
139533
+ }
139534
+ function normalizeColumnLayout(input2, contentWidth, epsilon = 0.0001) {
139535
+ const rawCount = input2 && Number.isFinite(input2.count) ? Math.floor(input2.count) : 1;
139536
+ const count = Math.max(1, rawCount || 1);
139537
+ const gap = Math.max(0, input2?.gap ?? 0);
139538
+ const availableWidth = contentWidth - gap * (count - 1);
139539
+ const explicitWidths = Array.isArray(input2?.widths) && input2.widths.length > 0 ? input2.widths.filter((width$1) => typeof width$1 === "number" && Number.isFinite(width$1) && width$1 > 0) : [];
139540
+ let widths = explicitWidths.length > 0 ? explicitWidths.slice(0, count) : Array.from({ length: count }, () => availableWidth > 0 ? availableWidth / count : contentWidth);
139541
+ if (widths.length < count) {
139542
+ const remaining = Math.max(0, availableWidth - widths.reduce((sum, width$1) => sum + width$1, 0));
139543
+ const fallbackWidth = count - widths.length > 0 ? remaining / (count - widths.length) : 0;
139544
+ widths.push(...Array.from({ length: count - widths.length }, () => fallbackWidth));
139545
+ }
139546
+ const totalExplicitWidth = widths.reduce((sum, width$1) => sum + width$1, 0);
139547
+ if (availableWidth > 0 && totalExplicitWidth > 0) {
139548
+ const scale = availableWidth / totalExplicitWidth;
139549
+ widths = widths.map((width$1) => Math.max(1, width$1 * scale));
139550
+ }
139551
+ const width = widths.reduce((max$2, value) => Math.max(max$2, value), 0);
139552
+ if (!Number.isFinite(width) || width <= epsilon)
139553
+ return {
139554
+ count: 1,
139555
+ gap: 0,
139556
+ width: Math.max(0, contentWidth)
139557
+ };
139558
+ return {
139559
+ count,
139560
+ gap,
139561
+ ...widths.length > 0 ? { widths } : {},
139562
+ ...input2?.equalWidth !== undefined ? { equalWidth: input2.equalWidth } : {},
139563
+ width
139564
+ };
139565
+ }
139566
+ function resolveSpacingIndent(style2, numbering) {
139567
+ const spacing = {
139568
+ before: style2.spacing?.before ?? 0,
139569
+ after: style2.spacing?.after ?? 0,
139570
+ line: style2.spacing?.line ?? 12,
139571
+ lineRule: style2.spacing?.lineRule ?? "auto"
139572
+ };
139573
+ let indent2 = {
139574
+ left: style2.indent?.left ?? 0,
139575
+ right: style2.indent?.right ?? 0,
139576
+ firstLine: style2.indent?.firstLine ?? 0,
139577
+ hanging: style2.indent?.hanging ?? 0
139578
+ };
139579
+ if (numbering?.indent)
139580
+ indent2 = {
139581
+ ...indent2,
139582
+ left: numbering.indent.left ?? indent2.left,
139583
+ hanging: numbering.indent.hanging ?? indent2.hanging
139584
+ };
139585
+ return {
139586
+ spacing,
139587
+ indent: indent2
139588
+ };
139589
+ }
139590
+ function formatListLabel(level, indices) {
139591
+ const { format, text: template, start: start$1 } = level;
139592
+ if (format === "bullet" || format === "custom")
139593
+ return {
139594
+ text: template,
139595
+ width: estimateTextWidth(template)
139596
+ };
139597
+ let result = template;
139598
+ for (let i$1 = 0;i$1 < indices.length; i$1++) {
139599
+ const placeholder = `%${i$1 + 1}`;
139600
+ if (result.includes(placeholder)) {
139601
+ const formattedNum = formatNumber(indices[i$1] + start$1 - 1, format);
139602
+ result = result.replace(placeholder, formattedNum);
139603
+ }
139604
+ }
139605
+ return {
139606
+ text: result,
139607
+ width: estimateTextWidth(result)
139608
+ };
139609
+ }
139610
+ function computeListIndent(level) {
139611
+ const { indent: indent2 } = level;
139612
+ return {
139613
+ labelWidth: Math.abs(indent2.hanging),
139614
+ hangingIndent: indent2.hanging,
139615
+ firstLineIndent: indent2.left - Math.abs(indent2.hanging)
139616
+ };
139617
+ }
139618
+ function formatNumber(num, format) {
139619
+ switch (format) {
139620
+ case "decimal":
139621
+ return num.toString();
139622
+ case "lowerLetter":
139623
+ return toLetter(num, false);
139624
+ case "upperLetter":
139625
+ return toLetter(num, true);
139626
+ case "lowerRoman":
139627
+ return toRoman(num).toLowerCase();
139628
+ case "upperRoman":
139629
+ return toRoman(num);
139630
+ default:
139631
+ return num.toString();
139632
+ }
139633
+ }
139634
+ function toLetter(num, uppercase) {
139635
+ let result = "";
139636
+ let n = num;
139637
+ while (n > 0) {
139638
+ const remainder = (n - 1) % 26;
139639
+ result = String.fromCharCode((uppercase ? 65 : 97) + remainder) + result;
139640
+ n = Math.floor((n - 1) / 26);
139641
+ }
139642
+ return result || (uppercase ? "A" : "a");
139643
+ }
139644
+ function toRoman(num) {
139645
+ const lookup3 = [
139646
+ [1000, "M"],
139647
+ [900, "CM"],
139648
+ [500, "D"],
139649
+ [400, "CD"],
139650
+ [100, "C"],
139651
+ [90, "XC"],
139652
+ [50, "L"],
139653
+ [40, "XL"],
139654
+ [10, "X"],
139655
+ [9, "IX"],
139656
+ [5, "V"],
139657
+ [4, "IV"],
139658
+ [1, "I"]
139659
+ ];
139660
+ let result = "";
139661
+ let remaining = num;
139662
+ for (const [value, numeral] of lookup3)
139663
+ while (remaining >= value) {
139664
+ result += numeral;
139665
+ remaining -= value;
139666
+ }
139667
+ return result;
139668
+ }
139669
+ function estimateTextWidth(text5) {
139670
+ return text5.length * 7;
139671
+ }
139672
+ function scaleWrapPolygon(ooxml, imageRect) {
139673
+ if (!ooxml || ooxml.length === 0)
139674
+ return [];
139675
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
139676
+ for (const [x, y$1] of ooxml) {
139677
+ minX = Math.min(minX, x);
139678
+ minY = Math.min(minY, y$1);
139679
+ maxX = Math.max(maxX, x);
139680
+ maxY = Math.max(maxY, y$1);
139681
+ }
139682
+ const ooxmlWidth = maxX - minX;
139683
+ const ooxmlHeight = maxY - minY;
139684
+ if (ooxmlWidth === 0 || ooxmlHeight === 0)
139685
+ return [];
139686
+ const scaleX = imageRect.width / ooxmlWidth;
139687
+ const scaleY = imageRect.height / ooxmlHeight;
139688
+ return ooxml.map(([x, y$1]) => [imageRect.x + (x - minX) * scaleX, imageRect.y + (y$1 - minY) * scaleY]);
139689
+ }
139690
+ function computeWrapExclusion(image2, lineY, lineHeight) {
139691
+ const { rect, wrap: wrap4 } = image2;
139692
+ const top$1 = rect.y - (wrap4.distTop ?? 0);
139693
+ const bottom$1 = rect.y + rect.height + (wrap4.distBottom ?? 0);
139694
+ const left$1 = rect.x - (wrap4.distLeft ?? 0);
139695
+ const right$1 = rect.x + rect.width + (wrap4.distRight ?? 0);
139696
+ if (lineY + lineHeight <= top$1 || lineY >= bottom$1)
139697
+ return null;
139698
+ switch (wrap4.type) {
139699
+ case "None":
139700
+ return null;
139701
+ case "TopAndBottom":
139702
+ return null;
139703
+ case "Square":
139704
+ return {
139705
+ left: left$1,
139706
+ right: right$1
139707
+ };
139708
+ case "Tight":
139709
+ case "Through": {
139710
+ if (!wrap4.polygon || wrap4.polygon.length === 0)
139711
+ return {
139712
+ left: left$1,
139713
+ right: right$1
139714
+ };
139715
+ const polygon = wrap4.polygon;
139716
+ const midY = lineY + lineHeight / 2;
139717
+ let polyLeft = Infinity;
139718
+ let polyRight = -Infinity;
139719
+ for (let i$1 = 0;i$1 < polygon.length; i$1++) {
139720
+ const [x1, y1] = polygon[i$1];
139721
+ const [x2, y2] = polygon[(i$1 + 1) % polygon.length];
139722
+ if (midY >= Math.min(y1, y2) && midY <= Math.max(y1, y2)) {
139723
+ const x = x1 + (midY - y1) / (y2 - y1) * (x2 - x1);
139724
+ polyLeft = Math.min(polyLeft, x);
139725
+ polyRight = Math.max(polyRight, x);
139726
+ }
139727
+ }
139728
+ if (polyLeft === Infinity || polyRight === -Infinity)
139729
+ return null;
139730
+ return {
139731
+ left: polyLeft - (wrap4.distLeft ?? 0),
139732
+ right: polyRight + (wrap4.distRight ?? 0)
139733
+ };
139734
+ }
139735
+ default:
139736
+ return null;
139737
+ }
139738
+ }
139225
139739
  function isSectPrElement(value) {
139226
139740
  return typeof value === "object" && value !== null && value.type === "element" && value.name === "w:sectPr";
139227
139741
  }
@@ -167633,457 +168147,6 @@ function preferFullRestoredWhenPartial(current, previousRanges, doc$2, docSize)
167633
168147
  return current;
167634
168148
  return currentSpan.from >= restoredSpan.from && currentSpan.to <= restoredSpan.to && restoredSpan.to - restoredSpan.from > currentSpan.to - currentSpan.from ? restored : current;
167635
168149
  }
167636
- function computeTabStops$1(context) {
167637
- const { explicitStops, defaultTabInterval, paragraphIndent } = context;
167638
- const leftIndent = paragraphIndent.left ?? 0;
167639
- const hanging = paragraphIndent.hanging ?? 0;
167640
- const effectiveMinIndent = Math.max(0, leftIndent - hanging);
167641
- const clearPositions = explicitStops.filter((stop) => stop.val === "clear").map((stop) => stop.pos);
167642
- const filteredExplicitStops = explicitStops.filter((stop) => stop.val !== "clear").filter((stop) => stop.pos >= effectiveMinIndent);
167643
- const maxExplicit = filteredExplicitStops.reduce((max$2, stop) => Math.max(max$2, stop.pos), 0);
167644
- const hasExplicit = filteredExplicitStops.length > 0;
167645
- const stops = [...filteredExplicitStops];
167646
- const defaultStart = hasExplicit ? Math.max(maxExplicit, leftIndent) : 0;
167647
- let pos = defaultStart;
167648
- const targetLimit = Math.max(defaultStart, leftIndent) + 14400;
167649
- while (pos < targetLimit) {
167650
- pos += defaultTabInterval;
167651
- const hasExplicitStop = filteredExplicitStops.some((s2) => Math.abs(s2.pos - pos) < 20);
167652
- const hasClearStop = clearPositions.some((clearPos) => Math.abs(clearPos - pos) < 20);
167653
- if (!hasExplicitStop && !hasClearStop && pos >= leftIndent)
167654
- stops.push({
167655
- val: "start",
167656
- pos,
167657
- leader: "none"
167658
- });
167659
- }
167660
- return stops.sort((a2, b$1) => a2.pos - b$1.pos);
167661
- }
167662
- function layoutWithTabs(runs2, stops, lineWidth, options = {}) {
167663
- const result = [];
167664
- let currentX = 0;
167665
- let currentStopIndex = 0;
167666
- let pendingDecimalStop;
167667
- let pendingCenterStop;
167668
- let pendingEndStop;
167669
- const decimalSeparator = options.decimalSeparator ?? ".";
167670
- for (const entry of runs2) {
167671
- const { run: run2, width, isTab } = entry;
167672
- if (isTab) {
167673
- while (currentStopIndex < stops.length && stops[currentStopIndex].pos <= currentX)
167674
- currentStopIndex++;
167675
- if (currentStopIndex < stops.length) {
167676
- const stop = stops[currentStopIndex];
167677
- result.push({
167678
- run: run2,
167679
- x: currentX,
167680
- width: 0,
167681
- tabStop: stop
167682
- });
167683
- currentX = stop.pos;
167684
- pendingDecimalStop = stop.val === "decimal" ? stop : undefined;
167685
- pendingCenterStop = stop.val === "center" ? stop : undefined;
167686
- pendingEndStop = stop.val === "end" ? stop : undefined;
167687
- currentStopIndex++;
167688
- } else {
167689
- result.push({
167690
- run: run2,
167691
- x: currentX,
167692
- width
167693
- });
167694
- currentX += width;
167695
- pendingDecimalStop = undefined;
167696
- pendingCenterStop = undefined;
167697
- pendingEndStop = undefined;
167698
- }
167699
- } else {
167700
- if (pendingDecimalStop) {
167701
- currentX = computeDecimalAlignedX(entry, pendingDecimalStop, options, decimalSeparator);
167702
- pendingDecimalStop = undefined;
167703
- } else if (pendingCenterStop) {
167704
- currentX = computeCenterAlignedX(entry, pendingCenterStop);
167705
- pendingCenterStop = undefined;
167706
- } else if (pendingEndStop) {
167707
- currentX = computeEndAlignedX(entry, pendingEndStop);
167708
- pendingEndStop = undefined;
167709
- }
167710
- result.push({
167711
- run: run2,
167712
- x: currentX,
167713
- width
167714
- });
167715
- currentX += width;
167716
- }
167717
- }
167718
- return result;
167719
- }
167720
- function computeDecimalAlignedX(entry, stop, options, separator) {
167721
- const text5 = entry.text ?? "";
167722
- const decimalIndex = text5.indexOf(separator);
167723
- if (decimalIndex <= 0)
167724
- return stop.pos;
167725
- const beforeText = text5.slice(0, decimalIndex);
167726
- let beforeWidth;
167727
- if (options.measureTextWidth)
167728
- beforeWidth = options.measureTextWidth(entry.run, beforeText);
167729
- else if (text5.length > 0)
167730
- beforeWidth = entry.width * decimalIndex / text5.length;
167731
- else
167732
- beforeWidth = 0;
167733
- const targetX = stop.pos - beforeWidth;
167734
- return targetX < 0 ? 0 : targetX;
167735
- }
167736
- function computeCenterAlignedX(entry, stop) {
167737
- const width = entry.width;
167738
- const targetX = stop.pos - width / 2;
167739
- return targetX < 0 ? 0 : targetX;
167740
- }
167741
- function computeEndAlignedX(entry, stop) {
167742
- const width = entry.width;
167743
- const targetX = stop.pos - width;
167744
- return targetX < 0 ? 0 : targetX;
167745
- }
167746
- function calculateTabWidth(params$1) {
167747
- const { currentX, tabStops, paragraphWidth, defaultTabDistance: defaultTabDistance$1, defaultLineLength: defaultLineLength$1, followingText = "", measureText: measureText$1, decimalSeparator = "." } = params$1;
167748
- const nextStop = tabStops.find((stop) => stop.val !== "clear" && stop.pos > currentX);
167749
- const fallbackWidth = () => {
167750
- let tabWidth = defaultTabDistance$1 - currentX % defaultLineLength$1 % defaultTabDistance$1;
167751
- if (tabWidth <= 0)
167752
- tabWidth = defaultTabDistance$1;
167753
- return {
167754
- width: tabWidth,
167755
- alignment: "default",
167756
- tabStopPosUsed: "default"
167757
- };
167758
- };
167759
- if (!nextStop)
167760
- return fallbackWidth();
167761
- let width = Math.min(nextStop.pos, paragraphWidth) - currentX;
167762
- const alignment$1 = nextStop.val;
167763
- if (alignment$1 === "bar")
167764
- return {
167765
- width: 0,
167766
- leader: nextStop.leader,
167767
- alignment: alignment$1,
167768
- tabStopPosUsed: nextStop.pos
167769
- };
167770
- if (alignment$1 === "center" || alignment$1 === "end") {
167771
- const textWidth = measureText$1 ? measureText$1(followingText) : 0;
167772
- if (alignment$1 === "center")
167773
- width -= textWidth / 2;
167774
- else
167775
- width -= textWidth;
167776
- } else if (alignment$1 === "decimal") {
167777
- const decimalIndex = followingText.indexOf(decimalSeparator);
167778
- if (decimalIndex >= 0) {
167779
- const before = followingText.slice(0, decimalIndex);
167780
- const beforeWidth = measureText$1 ? measureText$1(before) : 0;
167781
- width -= beforeWidth;
167782
- }
167783
- }
167784
- if (width < 1)
167785
- return fallbackWidth();
167786
- return {
167787
- width,
167788
- leader: nextStop.leader,
167789
- alignment: alignment$1,
167790
- tabStopPosUsed: nextStop.pos
167791
- };
167792
- }
167793
- function resolveColumnWidths(columns, availableWidth) {
167794
- const width = availableWidth / columns.length;
167795
- return columns.map(() => width);
167796
- }
167797
- function measureRowHeights(cells, _columnWidths) {
167798
- return cells.map(() => 20);
167799
- }
167800
- function effectiveTableCellSpacing(spacing, isBoundary, padding) {
167801
- if (typeof spacing !== "number" || spacing <= 0)
167802
- return 0;
167803
- return isBoundary ? Math.max(0, spacing - padding) : spacing;
167804
- }
167805
- function shouldApplyJustify(params$1) {
167806
- const { alignment: alignment$1, hasExplicitPositioning, isLastLineOfParagraph, paragraphEndsWithLineBreak, skipJustifyOverride } = params$1;
167807
- if (alignment$1 !== "justify" && alignment$1 !== "both")
167808
- return false;
167809
- if (skipJustifyOverride === true)
167810
- return false;
167811
- if (hasExplicitPositioning)
167812
- return false;
167813
- if (isLastLineOfParagraph && !paragraphEndsWithLineBreak)
167814
- return false;
167815
- return true;
167816
- }
167817
- function calculateJustifySpacing(params$1) {
167818
- const { lineWidth, availableWidth, spaceCount, shouldJustify } = params$1;
167819
- if (!shouldJustify)
167820
- return 0;
167821
- if (spaceCount <= 0)
167822
- return 0;
167823
- return (availableWidth - lineWidth) / spaceCount;
167824
- }
167825
- function parseInsetClipPathForScale(clipPath) {
167826
- const m$1 = clipPath.trim().match(/^inset\(\s*(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s+(\d+(?:\.\d+)?|\.\d+)%\s*\)$/);
167827
- if (!m$1)
167828
- return null;
167829
- const top$1 = Number(m$1[1]);
167830
- const right$1 = Number(m$1[2]);
167831
- const bottom$1 = Number(m$1[3]);
167832
- const left$1 = Number(m$1[4]);
167833
- if (![
167834
- top$1,
167835
- right$1,
167836
- bottom$1,
167837
- left$1
167838
- ].every(Number.isFinite))
167839
- return null;
167840
- const visibleW = 100 - left$1 - right$1;
167841
- const visibleH = 100 - top$1 - bottom$1;
167842
- if (visibleW <= 0 || visibleH <= 0)
167843
- return null;
167844
- const scaleX = 100 / visibleW;
167845
- const scaleY = 100 / visibleH;
167846
- return {
167847
- scaleX,
167848
- scaleY,
167849
- translateX: -left$1 * scaleX,
167850
- translateY: -top$1 * scaleY
167851
- };
167852
- }
167853
- function formatInsetClipPathTransform(clipPath) {
167854
- const scale = parseInsetClipPathForScale(clipPath);
167855
- if (!scale)
167856
- return;
167857
- return `transform-origin: 0 0; transform: translate(${scale.translateX}%, ${scale.translateY}%) scale(${scale.scaleX}, ${scale.scaleY});`;
167858
- }
167859
- function computeLinePmRange$1(block, line) {
167860
- if (!line)
167861
- return {};
167862
- if (block.kind !== "paragraph")
167863
- return {};
167864
- let pmStart;
167865
- let pmEnd;
167866
- for (let runIndex = line.fromRun;runIndex <= line.toRun; runIndex += 1) {
167867
- const run2 = block.runs[runIndex];
167868
- if (!run2)
167869
- continue;
167870
- const runPmStart = coercePmStart(run2);
167871
- if (runPmStart == null)
167872
- continue;
167873
- if (isAtomicRunKind(run2.kind) || isImageLikeRun(run2)) {
167874
- const runPmEnd = coercePmEnd(run2) ?? runPmStart + 1;
167875
- if (pmStart == null)
167876
- pmStart = runPmStart;
167877
- pmEnd = runPmEnd;
167878
- continue;
167879
- }
167880
- const runLength = coerceRunText(run2).length;
167881
- const isFirstRun = runIndex === line.fromRun;
167882
- const isLastRun = runIndex === line.toRun;
167883
- const startOffset = isFirstRun ? line.fromChar : 0;
167884
- const endOffset = isLastRun ? line.toChar : runLength;
167885
- const sliceStart = runPmStart + startOffset;
167886
- const sliceEnd = runPmStart + endOffset;
167887
- if (pmStart == null)
167888
- pmStart = sliceStart;
167889
- pmEnd = sliceEnd;
167890
- }
167891
- return {
167892
- pmStart,
167893
- pmEnd
167894
- };
167895
- }
167896
- function computeFragmentPmRange$1(block, lines, fromLine, toLine) {
167897
- let pmStart;
167898
- let pmEnd;
167899
- for (let index2 = fromLine;index2 < toLine; index2 += 1) {
167900
- const line = lines[index2];
167901
- if (!line)
167902
- continue;
167903
- const range = computeLinePmRange$1(block, line);
167904
- if (range.pmStart != null && pmStart == null)
167905
- pmStart = range.pmStart;
167906
- if (range.pmEnd != null)
167907
- pmEnd = range.pmEnd;
167908
- }
167909
- return {
167910
- pmStart,
167911
- pmEnd
167912
- };
167913
- }
167914
- function resolveSpacingIndent(style2, numbering) {
167915
- const spacing = {
167916
- before: style2.spacing?.before ?? 0,
167917
- after: style2.spacing?.after ?? 0,
167918
- line: style2.spacing?.line ?? 12,
167919
- lineRule: style2.spacing?.lineRule ?? "auto"
167920
- };
167921
- let indent2 = {
167922
- left: style2.indent?.left ?? 0,
167923
- right: style2.indent?.right ?? 0,
167924
- firstLine: style2.indent?.firstLine ?? 0,
167925
- hanging: style2.indent?.hanging ?? 0
167926
- };
167927
- if (numbering?.indent)
167928
- indent2 = {
167929
- ...indent2,
167930
- left: numbering.indent.left ?? indent2.left,
167931
- hanging: numbering.indent.hanging ?? indent2.hanging
167932
- };
167933
- return {
167934
- spacing,
167935
- indent: indent2
167936
- };
167937
- }
167938
- function formatListLabel(level, indices) {
167939
- const { format, text: template, start: start$1 } = level;
167940
- if (format === "bullet" || format === "custom")
167941
- return {
167942
- text: template,
167943
- width: estimateTextWidth(template)
167944
- };
167945
- let result = template;
167946
- for (let i$1 = 0;i$1 < indices.length; i$1++) {
167947
- const placeholder = `%${i$1 + 1}`;
167948
- if (result.includes(placeholder)) {
167949
- const formattedNum = formatNumber(indices[i$1] + start$1 - 1, format);
167950
- result = result.replace(placeholder, formattedNum);
167951
- }
167952
- }
167953
- return {
167954
- text: result,
167955
- width: estimateTextWidth(result)
167956
- };
167957
- }
167958
- function computeListIndent(level) {
167959
- const { indent: indent2 } = level;
167960
- return {
167961
- labelWidth: Math.abs(indent2.hanging),
167962
- hangingIndent: indent2.hanging,
167963
- firstLineIndent: indent2.left - Math.abs(indent2.hanging)
167964
- };
167965
- }
167966
- function formatNumber(num, format) {
167967
- switch (format) {
167968
- case "decimal":
167969
- return num.toString();
167970
- case "lowerLetter":
167971
- return toLetter(num, false);
167972
- case "upperLetter":
167973
- return toLetter(num, true);
167974
- case "lowerRoman":
167975
- return toRoman(num).toLowerCase();
167976
- case "upperRoman":
167977
- return toRoman(num);
167978
- default:
167979
- return num.toString();
167980
- }
167981
- }
167982
- function toLetter(num, uppercase) {
167983
- let result = "";
167984
- let n = num;
167985
- while (n > 0) {
167986
- const remainder = (n - 1) % 26;
167987
- result = String.fromCharCode((uppercase ? 65 : 97) + remainder) + result;
167988
- n = Math.floor((n - 1) / 26);
167989
- }
167990
- return result || (uppercase ? "A" : "a");
167991
- }
167992
- function toRoman(num) {
167993
- const lookup3 = [
167994
- [1000, "M"],
167995
- [900, "CM"],
167996
- [500, "D"],
167997
- [400, "CD"],
167998
- [100, "C"],
167999
- [90, "XC"],
168000
- [50, "L"],
168001
- [40, "XL"],
168002
- [10, "X"],
168003
- [9, "IX"],
168004
- [5, "V"],
168005
- [4, "IV"],
168006
- [1, "I"]
168007
- ];
168008
- let result = "";
168009
- let remaining = num;
168010
- for (const [value, numeral] of lookup3)
168011
- while (remaining >= value) {
168012
- result += numeral;
168013
- remaining -= value;
168014
- }
168015
- return result;
168016
- }
168017
- function estimateTextWidth(text5) {
168018
- return text5.length * 7;
168019
- }
168020
- function scaleWrapPolygon(ooxml, imageRect) {
168021
- if (!ooxml || ooxml.length === 0)
168022
- return [];
168023
- let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
168024
- for (const [x, y$1] of ooxml) {
168025
- minX = Math.min(minX, x);
168026
- minY = Math.min(minY, y$1);
168027
- maxX = Math.max(maxX, x);
168028
- maxY = Math.max(maxY, y$1);
168029
- }
168030
- const ooxmlWidth = maxX - minX;
168031
- const ooxmlHeight = maxY - minY;
168032
- if (ooxmlWidth === 0 || ooxmlHeight === 0)
168033
- return [];
168034
- const scaleX = imageRect.width / ooxmlWidth;
168035
- const scaleY = imageRect.height / ooxmlHeight;
168036
- return ooxml.map(([x, y$1]) => [imageRect.x + (x - minX) * scaleX, imageRect.y + (y$1 - minY) * scaleY]);
168037
- }
168038
- function computeWrapExclusion(image2, lineY, lineHeight) {
168039
- const { rect, wrap: wrap4 } = image2;
168040
- const top$1 = rect.y - (wrap4.distTop ?? 0);
168041
- const bottom$1 = rect.y + rect.height + (wrap4.distBottom ?? 0);
168042
- const left$1 = rect.x - (wrap4.distLeft ?? 0);
168043
- const right$1 = rect.x + rect.width + (wrap4.distRight ?? 0);
168044
- if (lineY + lineHeight <= top$1 || lineY >= bottom$1)
168045
- return null;
168046
- switch (wrap4.type) {
168047
- case "None":
168048
- return null;
168049
- case "TopAndBottom":
168050
- return null;
168051
- case "Square":
168052
- return {
168053
- left: left$1,
168054
- right: right$1
168055
- };
168056
- case "Tight":
168057
- case "Through": {
168058
- if (!wrap4.polygon || wrap4.polygon.length === 0)
168059
- return {
168060
- left: left$1,
168061
- right: right$1
168062
- };
168063
- const polygon = wrap4.polygon;
168064
- const midY = lineY + lineHeight / 2;
168065
- let polyLeft = Infinity;
168066
- let polyRight = -Infinity;
168067
- for (let i$1 = 0;i$1 < polygon.length; i$1++) {
168068
- const [x1, y1] = polygon[i$1];
168069
- const [x2, y2] = polygon[(i$1 + 1) % polygon.length];
168070
- if (midY >= Math.min(y1, y2) && midY <= Math.max(y1, y2)) {
168071
- const x = x1 + (midY - y1) / (y2 - y1) * (x2 - x1);
168072
- polyLeft = Math.min(polyLeft, x);
168073
- polyRight = Math.max(polyRight, x);
168074
- }
168075
- }
168076
- if (polyLeft === Infinity || polyRight === -Infinity)
168077
- return null;
168078
- return {
168079
- left: polyLeft - (wrap4.distLeft ?? 0),
168080
- right: polyRight + (wrap4.distRight ?? 0)
168081
- };
168082
- }
168083
- default:
168084
- return null;
168085
- }
168086
- }
168087
168150
  function mapWordFamilyFallback(wordFamily) {
168088
168151
  if (!wordFamily)
168089
168152
  return DEFAULT_GENERIC_FALLBACK2;
@@ -170998,7 +171061,7 @@ async function measureParagraphBlock(block, maxWidth) {
170998
171061
  const spaceWidth = shouldIncludeDelimiterSpace ? measureRunWidth(" ", font, ctx$1, run2, wordEndNoSpace) : 0;
170999
171062
  const wordCommitWidth = wordOnlyWidth + spaceWidth;
171000
171063
  const wordEndWithSpace = wordEndNoSpace + (shouldIncludeDelimiterSpace ? 1 : 0);
171001
- if (wordOnlyWidth > (currentLine ? currentLine.maxWidth : getEffectiveWidth(lines.length === 0 ? initialAvailableWidth : contentWidth)) && word$1.length > 1) {
171064
+ if (wordOnlyWidth > (currentLine ? currentLine.maxWidth : getEffectiveWidth(lines.length === 0 ? initialAvailableWidth : contentWidth)) + WIDTH_FUDGE_PX$1 && word$1.length > 1) {
171002
171065
  if (currentLine && currentLine.width > 0 && currentLine.segments && currentLine.segments.length > 0) {
171003
171066
  trimTrailingWrapSpaces(currentLine);
171004
171067
  const metrics = finalizeLineMetrics(currentLine, spacing);
@@ -171015,7 +171078,7 @@ async function measureParagraphBlock(block, maxWidth) {
171015
171078
  const lineMaxWidth = getEffectiveWidth(lines.length === 0 ? initialAvailableWidth : contentWidth);
171016
171079
  const hasTabOnlyLine = currentLine && currentLine.segments && currentLine.segments.length === 0 && currentLine.width > 0;
171017
171080
  const remainingWidthAfterTab = hasTabOnlyLine ? currentLine.maxWidth - currentLine.width : lineMaxWidth;
171018
- const chunks = breakWordIntoChunks(word$1, (hasTabOnlyLine ? Math.max(remainingWidthAfterTab, lineMaxWidth * 0.25) : lineMaxWidth) - WIDTH_FUDGE_PX$1, font, ctx$1, run2, wordStartChar);
171081
+ const chunks = breakWordIntoChunks(word$1, hasTabOnlyLine ? Math.max(remainingWidthAfterTab, lineMaxWidth * 0.25) : lineMaxWidth, font, ctx$1, run2, wordStartChar);
171019
171082
  let chunkCharOffset = wordStartChar;
171020
171083
  for (let chunkIndex = 0;chunkIndex < chunks.length; chunkIndex++) {
171021
171084
  const chunk = chunks[chunkIndex];
@@ -172063,14 +172126,11 @@ function computeNextSectionPropsAtBreak(blocks2) {
172063
172126
  return nextSectionPropsAtBreak;
172064
172127
  }
172065
172128
  function getColumnConfig(blockColumns) {
172066
- return blockColumns ? {
172067
- count: blockColumns.count,
172068
- gap: blockColumns.gap
172069
- } : { ...SINGLE_COLUMN_DEFAULT };
172129
+ return blockColumns ? cloneColumnLayout(blockColumns) : { ...SINGLE_COLUMN_DEFAULT };
172070
172130
  }
172071
172131
  function isColumnConfigChanging(blockColumns, activeColumns) {
172072
172132
  if (blockColumns)
172073
- return blockColumns.count !== activeColumns.count || blockColumns.gap !== activeColumns.gap;
172133
+ return blockColumns.count !== activeColumns.count || blockColumns.gap !== activeColumns.gap || blockColumns.equalWidth !== activeColumns.equalWidth || !widthsEqual(blockColumns.widths, activeColumns.widths);
172074
172134
  return activeColumns.count > 1;
172075
172135
  }
172076
172136
  function scheduleSectionBreak(block, state, baseMargins, maxHeaderContentHeight = 0, maxFooterContentHeight = 0) {
@@ -174072,7 +174132,13 @@ function createPaginator(opts) {
174072
174132
  };
174073
174133
  const columnX = (columnIndex) => {
174074
174134
  const cols = opts.getCurrentColumns();
174075
- return opts.margins.left + columnIndex * (cols.width + cols.gap);
174135
+ const widths = Array.isArray(cols.widths) && cols.widths.length > 0 ? cols.widths : null;
174136
+ if (!widths)
174137
+ return opts.margins.left + columnIndex * (cols.width + cols.gap);
174138
+ let x = opts.margins.left;
174139
+ for (let index2 = 0;index2 < columnIndex; index2 += 1)
174140
+ x += (widths[index2] ?? cols.width) + cols.gap;
174141
+ return x;
174076
174142
  };
174077
174143
  const startNewPage = () => {
174078
174144
  if (opts.onNewPage)
@@ -174259,6 +174325,24 @@ function computeDisplayPageNumber(pages, sections) {
174259
174325
  }
174260
174326
  return result;
174261
174327
  }
174328
+ function shouldSkipBalancing(ctx$1, config2 = DEFAULT_BALANCING_CONFIG) {
174329
+ if (!config2.enabled)
174330
+ return true;
174331
+ if (ctx$1.columnCount <= 1)
174332
+ return true;
174333
+ if (ctx$1.contentBlocks.length === 0)
174334
+ return true;
174335
+ if (ctx$1.contentBlocks.length === 1) {
174336
+ if (!ctx$1.contentBlocks[0].canBreak)
174337
+ return true;
174338
+ }
174339
+ const totalHeight = ctx$1.contentBlocks.reduce((sum, b$1) => sum + b$1.measuredHeight, 0);
174340
+ if (totalHeight < config2.minColumnHeight)
174341
+ return true;
174342
+ if (totalHeight / ctx$1.columnCount < config2.minColumnHeight)
174343
+ return true;
174344
+ return false;
174345
+ }
174262
174346
  function getFragmentHeight$1(fragment2, measureMap) {
174263
174347
  if (fragment2.kind === "para") {
174264
174348
  const measure = measureMap.get(fragment2.blockId);
@@ -174280,7 +174364,7 @@ function getFragmentHeight$1(fragment2, measureMap) {
174280
174364
  }
174281
174365
  return 0;
174282
174366
  }
174283
- function balancePageColumns(fragments, columns, margins, topMargin, measureMap) {
174367
+ function balancePageColumns(fragments, columns, margins, topMargin, availableHeight, measureMap) {
174284
174368
  if (columns.count <= 1 || fragments.length === 0)
174285
174369
  return;
174286
174370
  const columnX = (columnIndex) => {
@@ -174300,10 +174384,26 @@ function balancePageColumns(fragments, columns, margins, topMargin, measureMap)
174300
174384
  });
174301
174385
  const sortedRows = [...rowMap.entries()].sort((a2, b$1) => a2[0] - b$1[0]);
174302
174386
  let totalHeight = 0;
174387
+ const contentBlocks = [];
174303
174388
  for (const [, rowFragments] of sortedRows) {
174304
174389
  const maxHeight = Math.max(...rowFragments.map((f2) => f2.height));
174305
174390
  totalHeight += maxHeight;
174391
+ contentBlocks.push({
174392
+ blockId: rowFragments[0]?.fragment.blockId ?? `row-${contentBlocks.length}`,
174393
+ measuredHeight: maxHeight,
174394
+ canBreak: false,
174395
+ keepWithNext: false,
174396
+ keepTogether: true
174397
+ });
174306
174398
  }
174399
+ if (shouldSkipBalancing({
174400
+ columnCount: columns.count,
174401
+ columnWidth: columns.width,
174402
+ columnGap: columns.gap,
174403
+ availableHeight,
174404
+ contentBlocks
174405
+ }))
174406
+ return;
174307
174407
  const targetHeight = totalHeight / columns.count;
174308
174408
  if (targetHeight < DEFAULT_BALANCING_CONFIG.minColumnHeight)
174309
174409
  return;
@@ -174639,10 +174739,7 @@ function layoutDocument(blocks2, measures, options = {}) {
174639
174739
  h: pageSize.h
174640
174740
  };
174641
174741
  let pendingPageSize = null;
174642
- let activeColumns = options.columns ?? {
174643
- count: 1,
174644
- gap: 0
174645
- };
174742
+ let activeColumns = cloneColumnLayout(options.columns);
174646
174743
  let pendingColumns = null;
174647
174744
  let activeOrientation = null;
174648
174745
  let pendingOrientation = null;
@@ -174706,16 +174803,10 @@ function layoutDocument(blocks2, measures, options = {}) {
174706
174803
  next2.pendingRightMargin = rightMargin;
174707
174804
  }
174708
174805
  if (block.columns) {
174709
- next2.activeColumns = {
174710
- count: block.columns.count,
174711
- gap: block.columns.gap
174712
- };
174806
+ next2.activeColumns = cloneColumnLayout(block.columns);
174713
174807
  next2.pendingColumns = null;
174714
174808
  } else {
174715
- next2.activeColumns = {
174716
- count: 1,
174717
- gap: 0
174718
- };
174809
+ next2.activeColumns = cloneColumnLayout(undefined);
174719
174810
  next2.pendingColumns = null;
174720
174811
  }
174721
174812
  if (block.headerRefs || block.footerRefs) {
@@ -174782,7 +174873,7 @@ function layoutDocument(blocks2, measures, options = {}) {
174782
174873
  if (block.orientation)
174783
174874
  next2.pendingOrientation = block.orientation;
174784
174875
  const sectionType = block.type ?? "continuous";
174785
- const isColumnsChanging = block.columns && (block.columns.count !== next2.activeColumns.count || block.columns.gap !== next2.activeColumns.gap) || !block.columns && next2.activeColumns.count > 1;
174876
+ const isColumnsChanging = block.columns && (block.columns.count !== next2.activeColumns.count || block.columns.gap !== next2.activeColumns.gap || block.columns.equalWidth !== next2.activeColumns.equalWidth || !widthsEqual(block.columns.widths, next2.activeColumns.widths)) || !block.columns && next2.activeColumns.count > 1;
174786
174877
  const sectionIndexRaw = block.attrs?.sectionIndex;
174787
174878
  const metadataIndex = typeof sectionIndexRaw === "number" ? sectionIndexRaw : Number(sectionIndexRaw ?? NaN);
174788
174879
  if (Number.isFinite(metadataIndex))
@@ -174799,13 +174890,7 @@ function layoutDocument(blocks2, measures, options = {}) {
174799
174890
  });
174800
174891
  layoutLog(`[Layout] Compat fallback: Scheduled pendingSectionRefs:`, pendingSectionRefs);
174801
174892
  }
174802
- const getColumnConfig$1 = () => block.columns ? {
174803
- count: block.columns.count,
174804
- gap: block.columns.gap
174805
- } : {
174806
- count: 1,
174807
- gap: 0
174808
- };
174893
+ const getColumnConfig$1 = () => cloneColumnLayout(block.columns);
174809
174894
  if (block.attrs?.requirePageBoundary) {
174810
174895
  next2.pendingColumns = getColumnConfig$1();
174811
174896
  return {
@@ -175081,21 +175166,21 @@ function layoutDocument(blocks2, measures, options = {}) {
175081
175166
  const state = states[states.length - 1] ?? null;
175082
175167
  const colsConfig = state ? getActiveColumnsForState(state) : activeColumns;
175083
175168
  const constraintIndex = state ? state.activeConstraintIndex : -1;
175084
- if (cachedColumnsState.state === state && cachedColumnsState.constraintIndex === constraintIndex && cachedColumnsState.contentWidth === currentContentWidth && cachedColumnsState.colsConfig?.count === colsConfig.count && cachedColumnsState.colsConfig?.gap === colsConfig.gap && cachedColumnsState.normalized)
175169
+ if (cachedColumnsState.state === state && cachedColumnsState.constraintIndex === constraintIndex && cachedColumnsState.contentWidth === currentContentWidth && cachedColumnsState.colsConfig?.count === colsConfig.count && cachedColumnsState.colsConfig?.gap === colsConfig.gap && cachedColumnsState.colsConfig?.equalWidth === colsConfig.equalWidth && widthsEqual(cachedColumnsState.colsConfig?.widths, colsConfig.widths) && cachedColumnsState.normalized)
175085
175170
  return cachedColumnsState.normalized;
175086
175171
  const normalized = normalizeColumns(colsConfig, currentContentWidth);
175087
175172
  cachedColumnsState = {
175088
175173
  state,
175089
175174
  constraintIndex,
175090
175175
  contentWidth: currentContentWidth,
175091
- colsConfig: {
175092
- count: colsConfig.count,
175093
- gap: colsConfig.gap
175094
- },
175176
+ colsConfig: cloneColumnLayout(colsConfig),
175095
175177
  normalized
175096
175178
  };
175097
175179
  return normalized;
175098
175180
  };
175181
+ const getCurrentColumnWidth = () => {
175182
+ return getColumnWidthAt(getCurrentColumns(), (states[states.length - 1] ?? null)?.columnIndex ?? 0);
175183
+ };
175099
175184
  const columnX = paginator.columnX;
175100
175185
  const advanceColumn = paginator.advanceColumn;
175101
175186
  const startMidPageRegion = (state, newColumns) => {
@@ -175110,7 +175195,7 @@ function layoutDocument(blocks2, measures, options = {}) {
175110
175195
  layoutLog(` OLD activeColumns: ${JSON.stringify(activeColumns)}`);
175111
175196
  layoutLog(` NEW activeColumns: ${JSON.stringify(newColumns)}`);
175112
175197
  layoutLog(` Current page: ${state.page.number}, cursorY: ${state.cursorY}`);
175113
- activeColumns = newColumns;
175198
+ activeColumns = cloneColumnLayout(newColumns);
175114
175199
  cachedColumnsState.state = null;
175115
175200
  const contentWidth = activePageSize.w - (activeLeftMargin + activeRightMargin);
175116
175201
  floatManager.setLayoutContext(normalizeColumns(activeColumns, contentWidth), {
@@ -175412,7 +175497,7 @@ function layoutDocument(blocks2, measures, options = {}) {
175412
175497
  layoutParagraphBlock({
175413
175498
  block,
175414
175499
  measure,
175415
- columnWidth: getCurrentColumns().width,
175500
+ columnWidth: getCurrentColumnWidth(),
175416
175501
  ensurePage: paginator.ensurePage,
175417
175502
  advanceColumn: paginator.advanceColumn,
175418
175503
  columnX,
@@ -175433,7 +175518,7 @@ function layoutDocument(blocks2, measures, options = {}) {
175433
175518
  } : undefined);
175434
175519
  if (tablesForPara) {
175435
175520
  const state = paginator.ensurePage();
175436
- const columnWidthForTable = getCurrentColumns().width;
175521
+ const columnWidthForTable = getCurrentColumnWidth();
175437
175522
  let tableBottomY = state.cursorY;
175438
175523
  for (const { block: tableBlock, measure: tableMeasure } of tablesForPara) {
175439
175524
  if (placedAnchoredTableIds.has(tableBlock.id))
@@ -175474,7 +175559,7 @@ function layoutDocument(blocks2, measures, options = {}) {
175474
175559
  else if (relativeFrom === "margin")
175475
175560
  maxWidth = activePageSize.w - (activeLeftMargin + activeRightMargin);
175476
175561
  else
175477
- maxWidth = cols.width;
175562
+ maxWidth = getColumnWidthAt(cols, state.columnIndex);
175478
175563
  const aspectRatio = imgMeasure.width > 0 && imgMeasure.height > 0 ? imgMeasure.width / imgMeasure.height : 1;
175479
175564
  const minWidth = 20;
175480
175565
  const minHeight = minWidth / aspectRatio;
@@ -175566,7 +175651,7 @@ function layoutDocument(blocks2, measures, options = {}) {
175566
175651
  layoutTableBlock({
175567
175652
  block,
175568
175653
  measure,
175569
- columnWidth: getCurrentColumns().width,
175654
+ columnWidth: getCurrentColumnWidth(),
175570
175655
  ensurePage: paginator.ensurePage,
175571
175656
  advanceColumn: paginator.advanceColumn,
175572
175657
  columnX
@@ -175641,16 +175726,23 @@ function layoutDocument(blocks2, measures, options = {}) {
175641
175726
  const normalizedCols = normalizeColumns(activeColumns, contentWidth);
175642
175727
  const measureMap = /* @__PURE__ */ new Map;
175643
175728
  const blockSectionMap = /* @__PURE__ */ new Map;
175729
+ const sectionColumnsMap = /* @__PURE__ */ new Map;
175644
175730
  blocks2.forEach((block, idx) => {
175645
175731
  const measure = measures[idx];
175646
175732
  if (measure)
175647
175733
  measureMap.set(block.id, measure);
175648
175734
  const sectionIdx = block.attrs?.sectionIndex;
175649
- if (typeof sectionIdx === "number")
175735
+ if (typeof sectionIdx === "number") {
175650
175736
  blockSectionMap.set(block.id, sectionIdx);
175737
+ if (block.kind === "sectionBreak" && block.columns)
175738
+ sectionColumnsMap.set(sectionIdx, cloneColumnLayout(block.columns));
175739
+ }
175651
175740
  });
175652
175741
  for (const page of pages)
175653
175742
  if (page === pages[pages.length - 1] && page.fragments.length > 0) {
175743
+ const finalSectionColumns = sectionColumnsMap.get(activeSectionIndex) ?? activeColumns;
175744
+ if (finalSectionColumns?.equalWidth === false && Array.isArray(finalSectionColumns.widths) && finalSectionColumns.widths.length > 0)
175745
+ continue;
175654
175746
  if (new Set(page.fragments.map((f2) => Math.round(f2.x))).size > 1)
175655
175747
  continue;
175656
175748
  if (new Set(page.fragments.map((f2) => Math.round(f2.width))).size > 1)
@@ -175664,8 +175756,10 @@ function layoutDocument(blocks2, measures, options = {}) {
175664
175756
  const fragmentsToBalance = fragmentSections.size > 1 ? page.fragments.filter((f2) => {
175665
175757
  return blockSectionMap.get(f2.blockId) === activeSectionIndex;
175666
175758
  }) : page.fragments;
175667
- if (fragmentsToBalance.length > 0)
175668
- balancePageColumns(fragmentsToBalance, normalizedCols, { left: activeLeftMargin }, activeTopMargin, measureMap);
175759
+ if (fragmentsToBalance.length > 0) {
175760
+ const availableHeight = pageSize.h - activeBottomMargin - activeTopMargin;
175761
+ balancePageColumns(fragmentsToBalance, normalizedCols, { left: activeLeftMargin }, activeTopMargin, availableHeight, measureMap);
175762
+ }
175669
175763
  }
175670
175764
  }
175671
175765
  return {
@@ -175773,21 +175867,7 @@ function layoutHeaderFooter(blocks2, measures, constraints) {
175773
175867
  };
175774
175868
  }
175775
175869
  function normalizeColumns(input2, contentWidth) {
175776
- const rawCount = Number.isFinite(input2?.count) ? Math.floor(input2.count) : 1;
175777
- const count = Math.max(1, rawCount || 1);
175778
- const gap = Math.max(0, input2?.gap ?? 0);
175779
- const width = (contentWidth - gap * (count - 1)) / count;
175780
- if (width <= COLUMN_EPSILON$1)
175781
- return {
175782
- count: 1,
175783
- gap: 0,
175784
- width: contentWidth
175785
- };
175786
- return {
175787
- count,
175788
- gap,
175789
- width
175790
- };
175870
+ return normalizeColumnLayout(input2, contentWidth, COLUMN_EPSILON$1);
175791
175871
  }
175792
175872
  function resolveClipPath(value) {
175793
175873
  if (typeof value !== "string")
@@ -180987,6 +181067,12 @@ function remeasureParagraph(block, maxWidth, firstLineIndent = 0) {
180987
181067
  }
180988
181068
  const w = measureRunSliceWidth(run2, c, c + 1);
180989
181069
  if (width + w > effectiveMaxWidth - WIDTH_FUDGE_PX && width > 0) {
181070
+ if (lastBreakRun < 0 && width + w <= effectiveMaxWidth + WIDTH_FUDGE_PX) {
181071
+ width += w;
181072
+ endRun = r$1;
181073
+ endChar = c + 1;
181074
+ continue;
181075
+ }
180990
181076
  if (lastBreakRun >= 0) {
180991
181077
  endRun = lastBreakRun;
180992
181078
  endChar = lastBreakChar;
@@ -181999,15 +182085,10 @@ function computePerSectionConstraints(options, blocks2) {
181999
182085
  bottom: normalizeMargin(options.margins?.bottom, DEFAULT_MARGINS$1.bottom),
182000
182086
  left: normalizeMargin(options.margins?.left, DEFAULT_MARGINS$1.left)
182001
182087
  };
182002
- const computeColumnWidth = (contentWidth, columns) => {
182003
- if (!columns || columns.count <= 1)
182004
- return contentWidth;
182005
- return (contentWidth - Math.max(0, columns.gap ?? 0) * (columns.count - 1)) / columns.count;
182006
- };
182007
182088
  const defaultContentWidth = pageSize.w - (defaultMargins.left + defaultMargins.right);
182008
182089
  const defaultContentHeight = pageSize.h - (defaultMargins.top + defaultMargins.bottom);
182009
182090
  let current = {
182010
- maxWidth: computeColumnWidth(defaultContentWidth, options.columns),
182091
+ maxWidth: resolveMaxColumnWidth(defaultContentWidth, options.columns),
182011
182092
  maxHeight: defaultContentHeight
182012
182093
  };
182013
182094
  const result = [];
@@ -182025,7 +182106,7 @@ function computePerSectionConstraints(options, blocks2) {
182025
182106
  const contentHeight = sectionPageSize.h - (sectionMargins.top + sectionMargins.bottom);
182026
182107
  if (contentWidth > 0 && contentHeight > 0)
182027
182108
  current = {
182028
- maxWidth: computeColumnWidth(contentWidth, sb.columns ?? options.columns),
182109
+ maxWidth: resolveMaxColumnWidth(contentWidth, ooXmlSectionColumns(sb.columns)),
182029
182110
  maxHeight: contentHeight
182030
182111
  };
182031
182112
  }
@@ -182055,12 +182136,7 @@ function resolveMeasurementConstraints(options, blocks2) {
182055
182136
  };
182056
182137
  const baseContentWidth = pageSize.w - (margins.left + margins.right);
182057
182138
  const baseContentHeight = pageSize.h - (margins.top + margins.bottom);
182058
- const computeColumnWidth = (contentWidth, columns) => {
182059
- if (!columns || columns.count <= 1)
182060
- return contentWidth;
182061
- return (contentWidth - Math.max(0, columns.gap ?? 0) * (columns.count - 1)) / columns.count;
182062
- };
182063
- let measurementWidth = computeColumnWidth(baseContentWidth, options.columns);
182139
+ let measurementWidth = resolveMaxColumnWidth(baseContentWidth, options.columns);
182064
182140
  let measurementHeight = baseContentHeight;
182065
182141
  if (blocks2 && blocks2.length > 0)
182066
182142
  for (const block of blocks2) {
@@ -182077,7 +182153,7 @@ function resolveMeasurementConstraints(options, blocks2) {
182077
182153
  const contentHeight = sectionPageSize.h - (sectionMargins.top + sectionMargins.bottom);
182078
182154
  if (contentWidth <= 0 || contentHeight <= 0)
182079
182155
  continue;
182080
- const columnWidth = computeColumnWidth(contentWidth, block.columns ?? options.columns);
182156
+ const columnWidth = resolveMaxColumnWidth(contentWidth, ooXmlSectionColumns(block.columns));
182081
182157
  if (columnWidth > measurementWidth)
182082
182158
  measurementWidth = columnWidth;
182083
182159
  if (contentHeight > measurementHeight)
@@ -198578,7 +198654,26 @@ var Node$13 = class Node$14 {
198578
198654
  console.warn("Failed to initialize developer tools:", error);
198579
198655
  }
198580
198656
  }
198581
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART = "word/settings.xml", TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS$1 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, DOCUMENT_RELS_PATH$1 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN$1, FOOTER_FILE_PATTERN$1, HISTORY_UNSAFE_OPS, IGNORED_ATTRIBUTE_KEYS, TRACK_CHANGE_MARK_NAMES, TRACK_CHANGE_IGNORED_ATTRIBUTE_KEYS, SIMILARITY_THRESHOLD = 0.65, MIN_LENGTH_FOR_SIMILARITY = 4, COMMENT_ATTRS_DIFF_IGNORED_KEYS, setNestedValue = (target, path2, value) => {
198657
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,UEsDBBQAAAAIAAAAIQAykW9XXgEAAKUFAAATABwAW0NvbnRlbnRfVHlwZXNdLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1lMtqwzAQRfeF/oPRNthKuiilxMmij2UbaPoBijRORPVCmrz+vuM4NaWkMeSxMcgz994zQsxwvLEmW0FM2ruSDYo+y8BJr7Sbl+xz+po/sCyhcEoY76BkW0hsPLq9GU63AVJGapdKtkAMj5wnuQArUuEDOKpUPlqBdIxzHoT8EnPgd/3+PZfeITjMsfZgo+EzVGJpMHvZ0O+GJIJJLHtqGuuskokQjJYCqc5XTv1JyfcJBSl3PWmhQ+pRA+MHE+rK/wF73TtdTdQKsomI+CYsdfG1j4orL5eWlMVxmwOcvqq0hFZfu4XoJaREd25N0Vas0K7XxeGWdgaRlJcHaa07IRJuDaTLEzS+3fGASIJrAOydOxHWMPu4GsUv806QinKnYmbg8hitdScE0hqA5js4m2NncyySOifRh0RrJZ4w9s/eqNU5DRwgoj7+6tpEsj57PqhXkgJ1IJvvluzoG1BLAwQKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAcAGRvY1Byb3BzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhACEYr1llAQAAxQIAABAAHABkb2NQcm9wcy9hcHAueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ1STU/DMAy9I/Efqt63dBwmNHlBaAhx4GPSCpyjxG0j0iRKson9e5wVSoEbOdnP9st7TuDqvTfFAUPUzq7LxbwqC7TSKW3bdflc384uyyImYZUwzuK6PGIsr/j5GWyD8xiSxlgQhY3rskvJrxiLssNexDmVLVUaF3qRKA0tc02jJd44ue/RJnZRVUuG7wmtQjXzI2E5MK4O6b+kysmsL77UR098HGrsvREJ+WOeNHPlUg9sRKF2SZha98grgscEtqLFyBfAhgBeXVAx9wwBbDoRhEy0vwxOMrj23mgpEu2VP2gZXHRNKp5OYos8DWzaAmRgh3IfdDpmqmkK99ri6YIhIFVBtEH47gROMthJYXBD1nkjTERg3wBsXO+FJTo2RsT3Fp997W7yFj5HfoITi686dTsvJP4yO8FhRygqUj8KGAG4o8cIJrPTrG1RffX8LeT1vQy/ki+W84rOaV9fGLkevwv/AFBLAwQUAAAACAAAACEACvOn+GYBAADtAgAAEQAcAGRvY1Byb3BzL2NvcmUueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ2SXU+DMBSG7038D6T3UGBqDAGWTLMrZ0yc0XhX27Otjn6k7cb27y0wmMRdeXc+nvP29G3z6UFUwR6M5UoWKIliFICkinG5LtDbch7eo8A6IhmplIQCHcGiaXl9lVOdUWXgxSgNxnGwgVeSNqO6QBvndIaxpRsQxEaekL65UkYQ51OzxprQLVkDTuP4DgtwhBFHcCMY6kERnSQZHST1zlStAKMYKhAgncVJlOAz68AIe3Gg7fwiBXdHDRfRvjnQB8sHsK7rqJ60qN8/wR+Lp9f2qiGXjVcUUJkzmjnuKihzfA59ZHdf30BdVx4SH1MDxClTPnO6DWZgJKlapq83jm/hWCvDrJ8eZR5jYKnh2vl37LRHBU9XxLqFf9gVBzY7jo/5224mDOx58y/KtCWGND+Z3K0GLPDmZJ2Vfed98vC4nKMyjdObMEnD5G6Zpll8m8XxZ7PdaP4sKE4L/FuxF+gMGn/Q8gdQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAYAHABfcmVscy9VVAkAA4Yc7WiHHO1odXgLAAEE9QEAAAQUAAAAUEsDBBQAAAAIAAAAIQAekRq36QAAAE4CAAALABwAX3JlbHMvLnJlbHNVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAArZLBasMwDEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wFQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAHAB3b3JkL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAHAB3b3JkL2ZvbnRUYWJsZS54bWxVVAkAA54c7WieHO1odXgLAAEE9QEAAAQUAAAAvZPBbqMwEIbvlfoOlu8NhpA0RSFV222kvexh1T6AY0ywFtvI44Tk7dcYiBSyuy3tqiCEGf75mPnHLO8PskR7bkBoleJwQjDiiulMqG2KX1/WNwuMwFKV0VIrnuIjB3y/ur5a1kmulQXk8hUkkqW4sLZKggBYwSWFia64ci9zbSS17tFsA0nNr111w7SsqBUbUQp7DCJC5vj6CrmjZZn3oHSeC8a/abaTXFkPCQwvHVYrKEQFZ8j6Pcham6wymnEA170sW6ikQp2zwviCJgUzGnRuJ663rjbPc4yQ+JUsB5TZOEr0Z8qc8cM40KIDBS7zAiaycbD5CSayIexjZQ0p2W4UJ5r2FTW3Jn0IhMxmxThmP8GgyaWWFhSKCywf1+/sxDxKNwgkWfJ9q7Shm9KR3CZDbosgD0btZJobaieO+j6Qdwiv2mK6nxLViaLSUV6E5IB+8Br91JKqXtZJK6o08NCp97RMMWkanZMpmZHYXZFbxTg4T2EFNcDtKYUMBTmVojz2743/6kBSCcuKXrGnRjQdD0Ugtk6ygw1J8TMhJHper3EbCVP85CK3i9ljF4maSvxx10WmpwhpIsxz/GPYcpjnnDT915dB6+Bf/HzSOyO4aRx908tb59+d97TxMv60l1Jn3PzbzFwcePYRJ+PpVzv54MZevunho9uPsfewPT/rIdQC4P/sx4evdrFfwuo3UEsDBBQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABwAd29yZC9kb2N1bWVudC54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAApZZbb9sgFMffJ+07WH5v8S1OYjWttGab+jCpWrcPQIDEqAYsILd9+h3s+LJ5qxz3CXPg/PjDORxz93AShXdg2nAlV354G/gek0RRLncr/+ePLzcL3zMWS4oLJdnKPzPjP9x//HB3zKgie8Gk9QAhTXYsycrPrS0zhAzJmcDmVnCilVFbe0uUQGq75YSho9IURUEYVF+lVoQZA+s9YnnAxr/gyGkcjWp8BGcHTBDJsbbs1DHCqyEztESLISiaAIIdRuEQFV+NSpFTNQAlk0CgakCaTSP9Y3PpNFI0JM2nkeIhaTGNNEgnMUxwVTIJg1ulBbbQ1TsksH7dlzcALrHlG15wewZmkDYYzOXrBEXg1RJETK8mzJFQlBUxbShq5e+1zC7+N62/k57V/pem9WDFuGVhuSViJ1sY2/jqMWdXu68vhaU6NaRZAeeopMl52VYHMZUGg3kDObx1AAdR+G1lC0detf+VtnUdhg44Rv4ldqKolb9NDIMR0XSI1mOMhD/XbJQIyOBu4UlH0zvccGTxaQDRAJASNvJn0TAWFwYi3e12HD7yWjWctOVw2uNME9MD0P1ViChudLjGufdYhlqaX4drYoScL7Y4xybvE9l1G5y1uLPonXe5e9+l+qrVvuxo/H20p668HuV1GwzSvyNYmveJeclxCVVXkOxpJ5XGmwIUwVXz4LZ4VQS8Ol1d49U3wGti7VUJ5Lmq5d/DO22j6Nm1JQwkWYk1foI0T8JlmqTz0K+s8Jezzhoks+VivpyBNYM3If0OJkiveD3/1JqetTPGYZA8fm6Na7bF+8IOpz/3JiMnwzBin/VYfiV89/ILBqFihVGUBG4iJHQ4W8A3qid8w45oFRTWMKmnaL7LbdfdKGuV6PoF2/ZGc4Ypg3XnUdXdKmV73d3eVt3LckQVBqymxITVcyozvIe/aheSrOCSPXNLQGWcVqOo2Xf1WUcEdU/o+99QSwMEFAAAAAgAAAAhAMrnZYorBAAAvgwAABEAHAB3b3JkL3NldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1V22PmzgQ/n7S/QfE58uG1ySLmq3yervV5lqVre6zAZNYa2Nkm03T0/33GwwO9BZVSav9hJln5pnxeGYM795/ZdR6wUISXsxt98axLVykPCPFfm5/edqOZrYlFSoyRHmB5/YJS/v93e+/vTtGEisFatICikJGLJ3bB6XKaDyW6QEzJG94iQsAcy4YUvAq9mOGxHNVjlLOSqRIQihRp7HnOBO7peFzuxJF1FKMGEkFlzxXtUnE85ykuH0YC3GJ38ZkzdOK4UJpj2OBKcTAC3kgpTRs7GfZADwYkpcfbeKFUaN3dJ0LtnvkIjtbXBJebVAKnmIp4YAYNQGSonMcvCI6+74B3+0WNRWYu45e9SMPryPwXhFMUvz1Oo5ZyzEGyz4Pya7jmZx5SNbj+blgegRZdRWF55s46kdt3uOSmcoO19GZMxrXtkihA5KHPiO+boPhme7EunxLekkFNtAjSQQSp375sTR62BdcoIRCOFCGFlSSpaOzmqOsH1ZTHZbJg6WTa9/B1PnGObOOUYlFCq0HI8tz7HENQMHzPFZIAVEkS0ypnmEpxQj8HqO9QAymj5FomwznqKLqCSWx4iUovSDY3tRQpgckUKqwiEuUAtuKF0pwavQy/hdXK5hkAhqttdBzrVvFzYwEiwIx2PB3c2/HM1xHVgly+cnYxrsb9l3+3xGHmS5Ihp/qRMfqRPEWgo/JN7wosg+VVAQY9fT7hQh+FAAuas8foTSeTiXeYqQqSNMbOdMnsaWk3BEhuHgoMqiNN3NG8hwLcECg1nZQPkTwo87zPUYZXKVv5LeS+G9Qhs70n6Asn5dcKc7uT+UBcv1rJ6nrfdwvX/ggyKRZfOZcnVVhbPnr6bKJtEYvQXzXCVabQWTibN1hm0XgO/4gsnLXbjCMhLPlaggJboOJuxhCJqG3CcIhZLH0Zv5sCFku3Wk4iKxW/srfDiIbZz28n83Km04HY9vees7tpj2d9kxYVH9qfBJmVTe2xRqLFWKJIMja1R8j41ojEc9LUhg8wTClcR+Jq8SAo1EDSIYo3UKJGcBp5BmR5Rrnek13SOw73lZDDEphyn44c9VTG4s/Ba/KBj0KVDYNa1TcIGgtSaEeCTNyWSWxsSrgXulBVZF9fBE6T116jpGCBtCD7xHpRtK6uBh9idtGoyKumwTvUFk2vZbs3blNyf6g3Lo9FLxl8M2qX5K912KexrwG0y8orXcG2u2ik3lG1tPzjczvZIGRBZ0sNLKwk02MbFLLDjBdBVx1z9D2ZlnLc04pP+LsvsNficwlmBI48fjEku5uu2kwSiTMoRKuQcWFwf7QmBtEGU8f6vs6aOT+YhGuF860gUN9fSo9qiC1n3G+RBJnLWZMw8b0n8nEmbjuajYKZpvb0WYaBKOZu7wdTafO1PW3rufPnH/bPjA/Hnf/AVBLAwQUAAAACAAAACEA24Vsw30EAACXHQAAEgAcAHdvcmQvbnVtYmVyaW5nLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAADNmc1u4zYQx+8F+g6CgB4Tifq2sM4iySZFFttF0U3RMy3RlhB+CBRlx9d9mT5CH2tfoaRkyXLkxJIctz4pJjk/zQxnyL+dDx+fCdaWiOcpo1MdXJq6hmjE4pQupvqfj/cXga7lAtIYYkbRVF+jXP949fNPH1YhLcgMcblQkwyah6ssmuqJEFloGHmUIALzS5JGnOVsLi4jRgw2n6cRMlaMx4ZlArP8K+MsQnkuObeQLmGub3DRcz9azOFKGiugY0QJ5AI9bxlgMMQ1JkbQBVkjQDJCC3RR9mCUZyivOiBnFEh61SG540h7gvPGkawuyR9HsrukYBypU06kW+AsQ1ROzhknUMiPfGEQyJ+K7EKCMyjSWYpTsZZM06sxMKVPIzySVg2B2PFggm8QFiNsxzWFTfWC03Bjf9HYK9fDyn7zaCwQ7vda+bqJgZ4FzkVty/vkrjL/xKKCICrKrBkcYZlHRvMkzZrTgYylycmkhizfSsCSYL052UDPVnvtaPtUbcMW2Mf9zd4RXHn+NhGYPXZTIRqLPi7svrP2hMgK3r54VGpayQU9D58aYHUAXoR6XhY1I9gwjGjb3YqT9myrmuM1nDRuccY50wLExSCEZdd+qIcyb7HyWMTJMFy9R4ayhQImME/aRDQsQLfBrUkr39niuKb6lbMi29LS42gP2+N1RYcFaHovdzDLj3PmWwIzeeqSKHxYUMbhDEuPZKtpslu0cge0qlzVQ6s6QKv3WisLSFOnln4lhRqc5YLDSHwtiLbz6UFWuxR8khlyJFUeV4OVprueC8RvOIJPaomi0Fy9LVxCeQUAD1jejenrhpohBRbpF7RE+HGdoXpNsp7xNP5NzWE1V60VJMP1Chfc3Tp3ZlDN4KWaSOWjcioUGZb3remYE9M0QelD6WPjRGUnZeg9aQZnBcZINMRHeQfVUz++/9OMf47qUYzmm+XZ71w9UqrCVMNT3bdKTxJIF6Ugtj1TrTWaxXzzuGdU5Cq5eZTKOvy2JjOGS9NrmbedgZRKcIzmUGZmAyspRunYy0yATibsckTeZ/JSXCK14ujMsKF5AY4zLjG3rOAp4tpXtGpl58VolHcXDsua1cma+/5Z+/H976F5s4A3Lm9/ydXqO1neytru2LAE2Xsa7AQJGtxwVhD83x3nnGXHyTycdce5Z9pxjj3yCH/vjvPOtONcc+RR/n4d559lx7n+yLP6P+q44Ew7znNGHuHHd5yxo24PSl8wRvq6gW8C++b6OOl7d+c5wL91+kjf+57bGKMoJRDv3cdfwOU7a9+echVMRhYlZivEvyAh92J/RNbgiA6p1p5aEtwcE9IfjEC6PyJ7X0Q8XSQDBCUIeoTUVX/3I0N6s+acwTt0SP71VGynKzp3cEiHhFtPOXWyovOGF11HU/Uquq4AOknR+YN36JAC6ilaTld0wfCQDmiXnoriZEU3GV50HVnxStF1NQAt737auvPVD2dhXJQ/q5WDMlTHn3jWy5/LHpprv34X3cO09jGdwHWB7wDwOhO0mUbrH6pX/wJQSwMEFAAAAAgAAAAhAL5+dmJWAQAA0AMAABQAHAB3b3JkL3dlYlNldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAACd01FvwiAQAOD3JfsPhHelumlMYzVZFpe9LEu2/QAKV0sGXAO46n79aLWuiy92T0DLfbnjYLneG02+wHmFNqOTcUIJWIFS2W1GP943owUlPnAruUYLGT2Ap+vV7c2yTmvI3yCEuNOTqFifGpHRMoQqZcyLEgz3Y6zAxp8FOsNDXLotM9x97qqRQFPxoHKlVTiwaZLM6Ylx1yhYFErAI4qdARvaeOZARxGtL1XlO62+RqvRycqhAO9jPUYfPcOVPTOT+wvIKOHQYxHGsZhTRi0VwydJOzP6F5gNA6YXwFzAfpixOBksRvYdJYc587OjZM/5XzI9QO4GEdO7Lo9maMJ7lpdBlsO4rkesieWBl9yXfRGGFTg7cwfTnLcR6fPWouO5jlK8QSReAtLC5NiFZiDHxpKuBNKeC13FJ4ZVUEZ9wwbdg8Pag2PNZ6411q8vT3HB/rzD1Q9QSwMEFAAAAAgAAAAhAD+v4WZfDwAADaYAAA8AHAB3b3JkL3N0eWxlcy54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA3Z1tc9s2Esff38x9B45e9V6ksp5lT92O7STnzCWpWzvX1xAJWaj5oCOpOO6nPwB8EKUlKC64UdRMZlqL4v4I4L+7xIIU+dMvXwLf+czjREThZW/w41nP4aEbeSJ8vOx9enj7at5zkpSFHvOjkF/2XnjS++Xnf/7jp+eLJH3xeeJIQJhcBO5lb5Wm64t+P3FXPGDJj9Gah/LLZRQHLJUf48d+wOKnzfqVGwVrloqF8EX60h+enU17OSZuQ4mWS+Hy15G7CXiYavt+zH1JjMJkJdZJQXtuQ3uOYm8dRy5PEtnpwM94ARNhiRmMASgQbhwl0TL9UXYmb5FGSfPBmf4r8LeACQ4wBICpy7/gGPOc0ZeWVY7wcJxpyRFehWPXmArA26AQw1HRDvU/ZV5hJV7qrXC4QqO+smUpW7FkVSVyXAcnJe4lUOMduBfvHsMoZgtfkqQHOdIJHA12MhXU/5xMWKfogqPHpfezjC4vcl/zJdv4aaI+xndx/jH/pP/3NgrTxHm+YIkrxGXvKhZMDvHzBWdJepUI9iBbLg8fCNmS26swEerLlfqjsrObXPYeRCBD+SN/dn6PAhY6P1xH3otzc/+vXl8d6InHodzzM/Mve8NsU/JXuWFcbLlJ9rf5LHwstvHw1af7ausqmxbCk01i8av7K204GF/44pGlm1g2S33ShCwRxd6N7Db/km5k++XO/Xw8+vujtC4/ZXvtDalMGDJ93GdZTH7Ll+8j94l796n84rJ31ss2fnp3F4solpnqsnd+nm+854G4FZ7Hw8qO4Up4/I8VDz8l3Ntu/+2tzjb5BjfahPLv0WyqZfYT780Xl69V7pLfhkzp9VEZaG02Yntwbf6/AjbIB7jOfsWZSuDOYB9xjkYMlUVS6W09c7PX9wH6QKNjHWh8rANNjnWg6bEONDvWgebHOtD51z6QCD2Z3wf1hwHUQxxDNKI5hmBDcwyxhOYYQgXNMUQCmmNwdDTH4MdojsFNEZw0ck1eWHH2kcHbm7mHzxF23MOnBDvu4TOAHfdwwrfjHs7vdtzD6dyOezh723EPJ2s8N5tqOe9kmIVp5yhbRlEaRil31PS0M42FkqWrWhqeOunxmKSTBJgss+Un4s40l+nPhz1k0u18nqqCzomWzlI8quKkc8N5+Jn70Zo7zPMkjxAYc1k+GUbExqdjvuQxD11O6dh0UF+E3Ak3wYLAN9fskYzFQ494+AoiSVIoHZpt0pUKEkHg1AFz44hgzsLI8sN7kXQfKwVxrje+z4lYH2lcTLO61wYa07000JjulYHGdC8MKppRDVFOIxqpnEY0YDmNaNwy/6Qat5xGNG45jWjcclr3cXsQqc/3Zx2D9mt3N36UUCS8e/EY6vXTzqR8zdS5YzF7jNl65ahl54MzLfRx9JLzA8U5rSRRzeu1i6hVZxFuug/oDo0quEoeUXiVPKIAK3ndQ+yDnCarCdotTT1zv1mktUHbviq4Z/4mm9B2jzaWdvewbQC8FXFCFgb1WAIP/qims7dEU71tK7s3bMvqHlb7WYm0eTmSoJV+5D7RpOHblzWPZVn21Jn0NvL96Jl7dMT7NI4yX6uG/HDYOuTfBOsVS0QCEO1P9cUdDM4Htu7coTufiZBGtzevAiZ8h24Gcfvw4b3zEK1VmakGhgZ4HaVpFJAx85XAH/7gi3/RNPBKFsHhC1Fvr4iWhzTsRhCcZDJS5BGR5DRThILkHKp5/+Evi4jFHg3tLubZTUMpJyLes2DtU8WWzIvPMv8QzIY0778sFmpdiCqoHkhglWXDZLP4k7vdU93HyCFZGfp1k+r1Rz3V7X61dwfXfZqwg+s+RdBqytOD8l+Czu7gund2B0fV2RufJYkwXkK15lF1t+BR97d78ZfzIj+KlxufbgALINkIFkCyIYz8TRAmlD3WPMIOax51fwldRvMIluQ079+x8MjE0DAqJTSMSgYNo9JAw0gF6H6HTgXW/TadCqz7vToZjGgKUIFR+Rnp6Z/oKk8FRuVnGkblZxpG5WcaRuVno9cOXy7lJJjuFFNBUvlcBUl3oglTHqyjmMUvRMg3Pn9kBAukGe0ujpbq1yRRmN3ETTGd3SxSysl2hqMS+Q++IGuaYlG2i2BFlPl+FBGtrW1PONpy9961Q2b65xydm3DnM5evIt/jsaFPjfXy/Zq5Ai6dtr9Y8l48rlLnflWu9lcx07ODlkXBvmN2+IB1Yz4dNl5m8sQmKBoKf0wxHbU3HgLj8WHj7Uxix3LS0hIec3rYcjtL3rGctbSEx5y3tBwBy6Z4eM3ip1pHmDX5T1njGZxv1nhhvjCuPWyTI5WWdS44a/KinVBxrlxXXS2A6rSLGbN9u+Ax22OiyEzBhJOZ0jquzIimAPudfxZJ7Rr1gevf5d0TIO+PW2fO3zZRCi5TD9v/qOudnDiFCXdqOaP2F652sox5HFunGzOidd4xI1onIDOiVSYymqNSkpnSOjeZEa2TlBmBzlbwjIDLVtAel62gvU22ghSbbNVhFmBGtJ4OmBHoQIUIdKB2mCmYEahABeZWgQop6ECFCHSgQgQ6UOEEDBeo0B4XqNDeJlAhxSZQIQUdqBCBDlSIQAcqRKADFSLQgWo5tzeaWwUqpKADFSLQgQoR6EAddwxUaI8LVGhvE6iQYhOokIIOVIhABypEoAMVItCBChHoQIUIVKACc6tAhRR0oEIEOlAhAh2ok46BCu1xgQrtbQIVUmwCFVLQgQoR6ECFCHSgQgQ6UCECHagQgQpUYG4VqJCCDlSIQAcqRKADddoxUKE9LlChvU2gQopNoEIKOlAhAh2oEIEOVIhABypEoAMVIlCBCsytAhVS0IEKEehAhYgm/8wvUZpusx/gVz2Nd+wjfueTNer36k+5d9ZQ26OKVplZ7X+LcB1FT07tDw9Ho/YQsfBFpJeoDZfVq9wZ+sLnrzfNv/Bp8RiPtl3Jfwuhr5kC+LitJVhTGTe5fNUSFHnjJk+vWoJZ57gp+1YtwWlw3JR0dVwWN6XI0xEwbkozFeOBwbwpW1fM4RA35eiKIRzhpsxcMYQD3JSPK4YTRyXnfetJy3GalveXAkKTO1YIMzOhyS2hVsa1/daimQlt1TMT2spoJqD0NGLwwppRaIXNKDupYZhhpbYPVDMBKzUkWEkNMPZSQ5S11BBlJzVMjFipIQErtX1yNhOspAYYe6khylpqiLKTGp7KsFJDAlZqSMBK3fGEbMTYSw1R1lJDlJ3UcHKHlRoSsFJDAlZqSLCSGmDspYYoa6khyk5qUCWjpYYErNSQgJUaEqykBhh7qSHKWmqIapJar6LYV0sVc9wkrGKIOyFXDHHJuWJoUS1VrC2rpQrBslqCWtlVS1XR7Kqlqnp21VJVRrtqCehpVy3VCmtXLdUqbFctmaXGVUt1UtsHql21VCc1rloySo2rlhqlxlVLjVLjqiWz1LhqqU5qXLVUJ7V9crarloxS46qlRqlx1VKj1LhqySw1rlqqkxpXLdVJjauW6qTueEK2q5YapcZVS41S46ols9S4aqlOaly1VCc1rlqqkxpXLRmlxlVLjVLjqqVGqXHVkllqXLVUJzWuWqqTGlct1UmNq5aMUuOqpUapcdVSo9S4aumDNBEEj4C6D1icOnTPi7tlySpl3R9O+CmMeRL5n7nn0Hb1PaqX/eed118ptn6dn9w/lWOmnoBe+bmSlz0BNgfqHd955WuqlLFqiZO/5yvfrBucX67NjqgNDxyqhOfXigcAv325lT7Cgsle/RrWHTxUD0as2a4cotheHOZmxeLs262rFvuc7/fl+SJO1Avcsq/Pzoaj0evZdbbXOns12xPn64/y+P3ig9SHJ/pTkv2AVpov1DPF5AiMpvq3V2yZ8viyN8+jNsqe2vT+s18eKZcuP0btW+CKV76xPyuvfNt/H5z68k2+TX2vXwlXa+kmaWXztfBE1jhXRXnZrrfj2VT7ht5ZZ4DLHtPxv92sbkpR9xm8zQjbF8gVF5urL5AbF30tXu1m4zxDo/MMKZ1n2MJ5tmGZ7bcTlF/ZvQYt3WvwfbrXaAjdK9vW0b1GRvcaUbrX6Dtxr2Gzex1yomO4ynAOXSXb1tFVxkZXGVO6yvjEXWVe9ZSx0VNGX8dTRPbfm4TEbzp6xMToERNKj5h8Hx4xPs3c0dEHpkYfmFL6wPTEfcAs++ToiWByrv7tO4F609LWBR6EeoPv1ZTAA2ZGD5hResDsb+sB0yME/pE1nxs1n1NqPj8pzaGys6PH9nCm/rXR+TXFnO/cqPM5pc7nJ67z/AgRTK+sKweVufkD1Q3rX/mLkcon++jXIu1rbnh7kkGvQTu9zO1O1SpsQ5v1Km3jwl3+sHaTQ7X2qHThZ1LLP96FyqGe83fYZy31vrBeseMN9/0PLNs7Wpt39fkyzb4dnM1rvl9kr4Qw2sf62oER0N9tTL/shHm8s5dE5j9qMa6T6keGweHOHiXWcaRb+rC7SeTQ6OXe/fbtrIHut/K2WG51tnlmL3HVxoEpXQ0OpCpz8vle1qO6LHciJR02SjokknSIO/t8/wp3WXFEKjxqVHhEpPDoayn8d1/0Q6o1blRrTKTW+NTUOvbCG1KVSaMqEyJVJqemysnpMG3UYUqkw/TUdDjqahRSklmjJDMiSWanJslpiTBvFGFOJML81EQ46koOUpLzRknOiSQ5PzVJvslyWvZgi/2xzrZSrKNpUtMi2iAv2FBrZNtF7r0L4656fcWXdMP8/En6jctjxyyBtk3W3XpV9PuJx+XgbifLZXqcwunzhDgRbiWqdYOu4VbxJbP6p1m2Hl+z+iAtX6K9L1D5BUWoFrDGaB1YRGu4CbI/hA/vhyq/BDE9mB64Je+bTECAVwwm36Lm3RHL5BZdQ3fXvczecOJzxq8sWX3MZq8B2Fcm20oRrZrUFKpDmztrD92ANige3venW3BUEcvj2khtmGSOz9S/NhpS18PbgasVp2vMVBQ2a3IwYI46cvUOrC6fbN+rsT9We6/dOOTRcChGYwv3FPpSl7pQpZ6R12LO19Jdyk7nD44rn2a3323wuDuco9R4BOqEetg7jnifVT4W9Ylu920oFAmverimvDeyKSjW117lAqneL5GelL9X+y91j5yTZUeuJ61OPuyW6+PlpdSvfKT+tmeHfhgxKjJ7NcbmU90afWU3+0SS/L/peijwo0bX7Xo62AmSAx57cnHfmCO3z9Y0DeB2j65Zsrjmh8qSi+yo+WglMqn4N2xNM3ZgSjmpH9Hir+Tn/wNQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL3RoZW1lL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAHAB3b3JkL3RoZW1lL3RoZW1lMS54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA7VlPb9s2FL8P2HcgdHf1x5IsBXUL/23XJm3RpB16ZGRaYkyJAkknMYoCQ3vaZcCAbthlwG47DMMKrMCKXfZhCrTYug8xSnZs0abatE23AksMxCL5e48/vvf4+ExdvHycEnCIGMc0axv2BcsAKIvoCGdx27izN2wEBuACZiNIaIbaxgxx4/KlTz+5CLdEglIEpHzGt2DbSITIt0yTR7Ib8gs0R5kcG1OWQiGbLDZHDB5JvSkxHcvyzRTizAAZTKXam+MxjhDYK1Qal06UD4j8lwledESE7UbljFWJEjua2MUXn/EeYeAQkrYh5xnRoz10LAxAIBdyoG1Y5Z9hXrpoLoWIqJGtyA3Lv4XcQmA0cUo5Fu8vBa2BE7j2Ur8z17+JGwTFZ6mvBMAokiu1N7C251uBs8BWQPNHje6wZTdVfEV/c1N/6HcdV8E3V3h3c43DcND3FLy7wnsb+I7ldMOmgvdWeH8D7w46LWeg4EtQQnA22UT7rSDwF+glZEzJVS089H2r1V/AVyizEl1z+UzUxVoKDygbSkDpXChwBsQsR2MYSVwnF5SDPuY5gTMD5DCjXHZbjm3LwHMtZ/kpLQ63EKxIz7sivtFV8AE8YjgXbeOa1GpUIC+ePXv+8Onzh789f/To+cNfwDaOE6GRuwqzuCr36sev//7+C/DXrz+8evyNHs+r+Jc/f/ny9z9ep14otL598vLpkxffffXnT4818A6D+1X4Hk4RBzfQEbhNU7lAzQRon72dxF4CcVWik8UcZrCQ0aAHIlHQN2aQQA2ui1Q73mUyXeiAV6YHCuHdhE0F1gCvJ6kC3KGUdCnTrul6MVfVCtMs1k/OplXcbQgPdXP31rw8mOYy7rFOZS9BCs1bRLocxihDAhRjdIKQRuwexopdd3DEKKdjAe5h0IVYa5I9vC/0QldxKv0y0xGU/lZss3MXdCnRqe+jQxUp9wYkOpWIKGa8AqcCplrGMCVV5DYUiY7k7oxFisG5kJ6OEaFgMEKc62RusplC9zqUeUvr9h0yS1UkE3iiQ25DSqvIPp30EpjmWs44S6rYz/hEhigEt6jQkqDqDina0g8wq3X3XYzE2+3tOzIN6QOkGJky3ZZAVN2PMzKGSKe8w1IlxXYY1kZHdxorob2NEIFHcIQQuPOZDk9zqid9LZFZ5SrS2eYaVGO1aGeIy1qpKG40jsVcCdldFNMaPjuztcQzg1kKWZ3mGxM1ZAb7TG5GXbySaKKkUsyKTasncZOn8FRabyVQCauizfXxOmPZ2+4xKXPwDjLorWVkYj+1bfYgQfqA2YMYbOvSrRSZ6kWK7VSKTbVyY3XTrtxgrhU9Kc7eUAH9N5XPB6t5zr7aqUso6zVOHW69sulRNsIff2HTh9PsFpJnyXldc17X/B/rmrr9fF7NnFcz59XMv1bNrAoYs3rZU2pJa29+xpiQXTEjaJuXpQ+Xe380lJ1loxRaXjTliXxcTKfgYgbLZ8Co+ByLZDeBuZzGLmeI+UJ1zEFOuSyfjFrdZfE1TXfoaHGPZ5/cbUoBKFb9lrfsl6WamPf6rdVF6FJ92Yp5lYBXKj09icpkKommhkSreToStnVWLEINi8B+HQuz4hV5OAFYXIt77pyRDDcZ0qPCT3P5E++euafrjKku29EsL3TPzNMKiUq4qSQqYZjIw2O9+4x9HYZ6VztaGq3gQ/ja3MwNJFNb4EjuuaYn1UQwbxtj+bNJPqa51MeLTAVJnLWNSCwM/S6ZJWdc9CFP5rByaL7+FAvEAMGpjPWqG0i24mY7LevjJRdaH5/lzHUno/EYRaKmZ9WUY3Ml2tH3BBcNOpWkd5PREdgnU3YbSkN5Lbsw4AhzsbTmCLNKcK+suJauFltReQO02qKQ5AlcnCjVZD6Hl89LOpV1lEzXV2XqTLgfD8/i1H2z0FrSrDlAWrVZ7MMd8hVWTT0rT5vrwsB6/Snx/gdChVqgp9bUU6s7O86wIKhM59fYzan15nueButRa1bqyrK18XKb7h/IyO/LanVKBJ9fkB3L8rt38lpyngnK3pPscizAlOG2cd/yOm7P8XoNK/AGDbfpWo3A6zQbHc9r2gPPtvpd54E0ikhS25vPPZQ/9sls8e6+7N94f5+elNoXIpqatKyDzVK4fH9vO/Xv7wGWlrnvO8OwGXb9RtjsDBtuvxs0wp7fbfT9Xqs/7Pe8IBw+MMBhCXY7zZ7rD4KGb/d6Dde3CvpB2Gi5jtNxW51g4HYeLGwtV37yfWLektelfwBQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL19yZWxzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhALO+ix3+AAAAtgMAABwAHAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAMw0M4SiBztaHV4CwABBPUBAAAEFAAAAK2TzWrDMBCE74W+g9h7LTttQwmRcymBXFv3AWR7/UP1Y6RNWr99RUoShwbTg44zYme+hdV6860VO6DzvTUCsiQFhqaydW9aAR/F9uEFmCdpaqmsQQEjetjk93frN1SSwpDv+sGzkGK8gI5oWHHuqw619Ikd0ISXxjotKUjX8kFWn7JFvkjTJXfTDMivMtmuFuB29SOwYhzwP9m2afoKX22112joRgX3SBQ28yFTuhZJwMlJQhbw2wiLqAg0KpwCHPVcfRaz3ux1iS5sfCE4W3MQy5gQFGbxAnCUv2Y2x/Ack6GxhgpZqgnH2ZqDeIoJ8YXl+5+TnJgnEH712/IfUEsBAh4DFAAAAAgAAAAhADKRb1deAQAApQUAABMAGAAAAAAAAQAAAKSBAAAAAFtDb250ZW50X1R5cGVzXS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGrAQAAZG9jUHJvcHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhACEYr1llAQAAxQIAABAAGAAAAAAAAQAAAKSB7gEAAGRvY1Byb3BzL2FwcC54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEACvOn+GYBAADtAgAAEQAYAAAAAAABAAAApIGdAwAAZG9jUHJvcHMvY29yZS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFOBQAAX3JlbHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAB6RGrfpAAAATgIAAAsAGAAAAAAAAQAAAKSBjgUAAF9yZWxzLy5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BvAYAAHdvcmQvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAGAAAAAAAAQAAAKSB+wYAAHdvcmQvZm9udFRhYmxlLnhtbFVUBQADnhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABgAAAAAAAEAAACkgVcJAAB3b3JkL2RvY3VtZW50LnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDK52WKKwQAAL4MAAARABgAAAAAAAEAAACkgXcMAAB3b3JkL3NldHRpbmdzLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDbhWzDfQQAAJcdAAASABgAAAAAAAEAAACkge0QAAB3b3JkL251bWJlcmluZy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAvn52YlYBAADQAwAAFAAYAAAAAAABAAAApIG2FQAAd29yZC93ZWJTZXR0aW5ncy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAP6/hZl8PAAANpgAADwAYAAAAAAABAAAApIFaFwAAd29yZC9zdHlsZXMueG1sVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BAicAAHdvcmQvdGhlbWUvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAGAAAAAAAAQAAAKSBRycAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJNkTVsAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQTEuAAB3b3JkL19yZWxzL1VUBQADhhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCzvosd/gAAALYDAAAcABgAAAAAAAEAAACkgXYuAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAARABEAqQUAAMovAAAAAA==`, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, OOXML_PCT_DIVISOR = 5000, SPACE_CHARS, isAtomicRunKind = (kind) => kind === "image" || kind === "lineBreak" || kind === "break" || kind === "tab" || kind === "fieldAnnotation", isImageLikeRun = (run2) => {
198658
+ if (!run2 || typeof run2 !== "object")
198659
+ return false;
198660
+ return typeof run2.src === "string";
198661
+ }, coerceRunText = (run2) => {
198662
+ if (!run2 || typeof run2 !== "object")
198663
+ return "";
198664
+ const candidate = run2.text;
198665
+ return typeof candidate === "string" ? candidate : "";
198666
+ }, coercePmStart = (run2) => {
198667
+ if (!run2 || typeof run2 !== "object")
198668
+ return;
198669
+ const candidate = run2.pmStart;
198670
+ return typeof candidate === "number" ? candidate : undefined;
198671
+ }, coercePmEnd = (run2) => {
198672
+ if (!run2 || typeof run2 !== "object")
198673
+ return;
198674
+ const candidate = run2.pmEnd;
198675
+ return typeof candidate === "number" ? candidate : undefined;
198676
+ }, engines_exports, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART = "word/settings.xml", TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS$1 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, DOCUMENT_RELS_PATH$1 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN$1, FOOTER_FILE_PATTERN$1, HISTORY_UNSAFE_OPS, IGNORED_ATTRIBUTE_KEYS, TRACK_CHANGE_MARK_NAMES, TRACK_CHANGE_IGNORED_ATTRIBUTE_KEYS, SIMILARITY_THRESHOLD = 0.65, MIN_LENGTH_FOR_SIMILARITY = 4, COMMENT_ATTRS_DIFF_IGNORED_KEYS, setNestedValue = (target, path2, value) => {
198582
198677
  if (!path2.includes(".")) {
198583
198678
  target[path2] = value;
198584
198679
  return;
@@ -200825,26 +200920,7 @@ var Node$13 = class Node$14 {
200825
200920
  if (epoch < minKeptFromEpoch)
200826
200921
  this.#mapsByFromEpoch.delete(epoch);
200827
200922
  }
200828
- }, OOXML_PCT_DIVISOR = 5000, SPACE_CHARS, isAtomicRunKind = (kind) => kind === "image" || kind === "lineBreak" || kind === "break" || kind === "tab" || kind === "fieldAnnotation", isImageLikeRun = (run2) => {
200829
- if (!run2 || typeof run2 !== "object")
200830
- return false;
200831
- return typeof run2.src === "string";
200832
- }, coerceRunText = (run2) => {
200833
- if (!run2 || typeof run2 !== "object")
200834
- return "";
200835
- const candidate = run2.text;
200836
- return typeof candidate === "string" ? candidate : "";
200837
- }, coercePmStart = (run2) => {
200838
- if (!run2 || typeof run2 !== "object")
200839
- return;
200840
- const candidate = run2.pmStart;
200841
- return typeof candidate === "number" ? candidate : undefined;
200842
- }, coercePmEnd = (run2) => {
200843
- if (!run2 || typeof run2 !== "object")
200844
- return;
200845
- const candidate = run2.pmEnd;
200846
- return typeof candidate === "number" ? candidate : undefined;
200847
- }, engines_exports, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
200923
+ }, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
200848
200924
  if (!str.includes('"') && !str.includes("'"))
200849
200925
  return str.split(delimiter).map((p$12) => p$12.trim()).filter(Boolean);
200850
200926
  const parts = [];
@@ -201979,7 +202055,11 @@ var Node$13 = class Node$14 {
201979
202055
  if (!Number.isFinite(value) || value < 0)
201980
202056
  return 0;
201981
202057
  return value;
201982
- }, COLUMN_MIN_WIDTH_PX = 25, COLUMN_MAX_WIDTH_PX = 200, ROW_MIN_HEIGHT_PX = 10, MIN_PARTIAL_ROW_HEIGHT = 20, ROW_HEIGHT_EPSILON = 0.1, DEFAULT_BALANCING_CONFIG, DEFAULT_PARAGRAPH_LINE_HEIGHT_PX = 20, SEMANTIC_PAGE_HEIGHT_PX = 1e6, DEFAULT_PAGE_SIZE$2, DEFAULT_MARGINS$2, COLUMN_EPSILON$1 = 0.0001, PAGE_START_EPSILON = 0.0001, asBoolean = (value) => {
202058
+ }, COLUMN_MIN_WIDTH_PX = 25, COLUMN_MAX_WIDTH_PX = 200, ROW_MIN_HEIGHT_PX = 10, MIN_PARTIAL_ROW_HEIGHT = 20, ROW_HEIGHT_EPSILON = 0.1, DEFAULT_BALANCING_CONFIG, getColumnWidthAt = (columns, columnIndex) => {
202059
+ if (Array.isArray(columns.widths) && columns.widths.length > 0)
202060
+ return columns.widths[Math.max(0, Math.min(columnIndex, columns.widths.length - 1))] ?? columns.width;
202061
+ return columns.width;
202062
+ }, DEFAULT_PARAGRAPH_LINE_HEIGHT_PX = 20, SEMANTIC_PAGE_HEIGHT_PX = 1e6, DEFAULT_PAGE_SIZE$2, DEFAULT_MARGINS$2, COLUMN_EPSILON$1 = 0.0001, PAGE_START_EPSILON = 0.0001, asBoolean = (value) => {
201983
202063
  if (value === true || value === 1)
201984
202064
  return true;
201985
202065
  if (typeof value === "string") {
@@ -208070,43 +208150,26 @@ var Node$13 = class Node$14 {
208070
208150
  if (layout.pages.length > 0)
208071
208151
  return layout.pages.length - 1;
208072
208152
  return null;
208073
- }, footnoteColumnKey = (pageIndex, columnIndex) => `${pageIndex}:${columnIndex}`, COLUMN_EPSILON = 0.01, normalizeColumnsForFootnotes = (input2, contentWidth) => {
208074
- const rawCount = Number.isFinite(input2?.count) ? Math.floor(input2.count) : 1;
208075
- const count = Math.max(1, rawCount || 1);
208076
- const gap = Math.max(0, input2?.gap ?? 0);
208077
- const width = (contentWidth - gap * (count - 1)) / count;
208078
- if (!Number.isFinite(width) || width <= COLUMN_EPSILON)
208079
- return {
208080
- count: 1,
208081
- gap: 0,
208082
- width: Math.max(0, contentWidth)
208083
- };
208084
- return {
208085
- count,
208086
- gap,
208087
- width
208088
- };
208089
- }, resolveSectionColumnsByIndex = (options, blocks2) => {
208153
+ }, footnoteColumnKey = (pageIndex, columnIndex) => `${pageIndex}:${columnIndex}`, COLUMN_EPSILON = 0.01, resolveMaxColumnWidth = (contentWidth, columns) => {
208154
+ if (!columns || columns.count <= 1)
208155
+ return contentWidth;
208156
+ return normalizeColumnsForFootnotes(columns, contentWidth).width;
208157
+ }, normalizeColumnsForFootnotes = (input2, contentWidth) => {
208158
+ return normalizeColumnLayout(input2, contentWidth, COLUMN_EPSILON);
208159
+ }, ooXmlSectionColumns = (columns) => cloneColumnLayout(columns), resolveSectionColumnsByIndex = (options, blocks2) => {
208090
208160
  const result = /* @__PURE__ */ new Map;
208091
- let activeColumns = options.columns ?? {
208092
- count: 1,
208093
- gap: 0
208094
- };
208161
+ let activeColumns = cloneColumnLayout(options.columns);
208095
208162
  if (blocks2 && blocks2.length > 0)
208096
208163
  for (const block of blocks2) {
208097
208164
  if (block.kind !== "sectionBreak")
208098
208165
  continue;
208099
208166
  const sectionIndexRaw = block.attrs?.sectionIndex;
208100
208167
  const sectionIndex = typeof sectionIndexRaw === "number" && Number.isFinite(sectionIndexRaw) ? sectionIndexRaw : result.size;
208101
- if (block.columns)
208102
- activeColumns = {
208103
- count: block.columns.count,
208104
- gap: block.columns.gap
208105
- };
208106
- result.set(sectionIndex, { ...activeColumns });
208168
+ activeColumns = ooXmlSectionColumns(block.columns);
208169
+ result.set(sectionIndex, cloneColumnLayout(activeColumns));
208107
208170
  }
208108
208171
  if (result.size === 0)
208109
- result.set(0, { ...activeColumns });
208172
+ result.set(0, cloneColumnLayout(activeColumns));
208110
208173
  return result;
208111
208174
  }, resolvePageColumns = (layout, options, blocks2) => {
208112
208175
  const sectionColumns = resolveSectionColumnsByIndex(options, blocks2);
@@ -208152,9 +208215,23 @@ var Node$13 = class Node$14 {
208152
208215
  if (columns && columns.count > 1 && page) {
208153
208216
  const fragment2 = findFragmentForPos(page, ref$1.pos);
208154
208217
  if (fragment2 && typeof fragment2.x === "number") {
208155
- const columnStride = columns.width + columns.gap;
208156
- const rawIndex = columnStride > 0 ? Math.floor((fragment2.x - columns.left) / columnStride) : 0;
208157
- columnIndex = Math.max(0, Math.min(columns.count - 1, rawIndex));
208218
+ const widths = Array.isArray(columns.widths) && columns.widths.length > 0 ? columns.widths : undefined;
208219
+ if (widths) {
208220
+ let cursorX = columns.left;
208221
+ for (let index2 = 0;index2 < columns.count; index2 += 1) {
208222
+ const columnWidth = widths[index2] ?? columns.width;
208223
+ if (fragment2.x < cursorX + columnWidth + columns.gap / 2) {
208224
+ columnIndex = index2;
208225
+ break;
208226
+ }
208227
+ cursorX += columnWidth + columns.gap;
208228
+ columnIndex = Math.min(columns.count - 1, index2 + 1);
208229
+ }
208230
+ } else {
208231
+ const columnStride = columns.width + columns.gap;
208232
+ const rawIndex = columnStride > 0 ? Math.floor((fragment2.x - columns.left) / columnStride) : 0;
208233
+ columnIndex = Math.max(0, Math.min(columns.count - 1, rawIndex));
208234
+ }
208158
208235
  }
208159
208236
  }
208160
208237
  const key$1 = footnoteColumnKey(pageIndex, columnIndex);
@@ -208180,10 +208257,7 @@ var Node$13 = class Node$14 {
208180
208257
  left: normalizeMargin(options.margins?.left, DEFAULT_MARGINS$1.left)
208181
208258
  };
208182
208259
  let width = pageSize.w - (margins.left + margins.right);
208183
- let activeColumns = options.columns ?? {
208184
- count: 1,
208185
- gap: 0
208186
- };
208260
+ let activeColumns = cloneColumnLayout(options.columns);
208187
208261
  let activePageSize = pageSize;
208188
208262
  let activeMargins = { ...margins };
208189
208263
  const resolveColumnWidth = () => {
@@ -208200,11 +208274,7 @@ var Node$13 = class Node$14 {
208200
208274
  right: normalizeMargin(block.margins?.right, activeMargins.right),
208201
208275
  left: normalizeMargin(block.margins?.left, activeMargins.left)
208202
208276
  };
208203
- if (block.columns)
208204
- activeColumns = {
208205
- count: block.columns.count,
208206
- gap: block.columns.gap
208207
- };
208277
+ activeColumns = ooXmlSectionColumns(block.columns);
208208
208278
  const w = resolveColumnWidth();
208209
208279
  if (w > 0 && w < width)
208210
208280
  width = w;
@@ -217670,7 +217740,7 @@ var Node$13 = class Node$14 {
217670
217740
  return false;
217671
217741
  return Boolean(checker(attrs));
217672
217742
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
217673
- var init_src_DT75iyuq_es = __esm(() => {
217743
+ var init_src_CcGVOrgc_es = __esm(() => {
217674
217744
  init_rolldown_runtime_B2q5OVn9_es();
217675
217745
  init_SuperConverter_C2Sw7Q5Z_es();
217676
217746
  init_jszip_ChlR43oI_es();
@@ -225757,6 +225827,20 @@ function print() { __p += __j.call(arguments, '') }
225757
225827
  }({});
225758
225828
  DEFAULT_PARAGRAPH_SECTION_TYPE = SectionType.NEXT_PAGE;
225759
225829
  DEFAULT_BODY_SECTION_TYPE = SectionType.CONTINUOUS;
225830
+ SPACE_CHARS = new Set([" ", " "]);
225831
+ engines_exports = /* @__PURE__ */ __export2({
225832
+ OOXML_PCT_DIVISOR: () => OOXML_PCT_DIVISOR,
225833
+ calculateTabWidth: () => calculateTabWidth,
225834
+ computeListIndent: () => computeListIndent,
225835
+ computeTabStops: () => computeTabStops$1,
225836
+ computeWrapExclusion: () => computeWrapExclusion,
225837
+ formatListLabel: () => formatListLabel,
225838
+ layoutWithTabs: () => layoutWithTabs,
225839
+ measureRowHeights: () => measureRowHeights,
225840
+ resolveColumnWidths: () => resolveColumnWidths,
225841
+ resolveSpacingIndent: () => resolveSpacingIndent,
225842
+ scaleWrapPolygon: () => scaleWrapPolygon
225843
+ }, 1);
225760
225844
  COMMENT_MARK_NAME = CommentMarkName;
225761
225845
  SUPPORTED_INLINE_TYPES = new Set([
225762
225846
  "run",
@@ -229520,20 +229604,6 @@ function print() { __p += __j.call(arguments, '') }
229520
229604
  "search",
229521
229605
  "yjs-cursor"
229522
229606
  ];
229523
- SPACE_CHARS = new Set([" ", " "]);
229524
- engines_exports = /* @__PURE__ */ __export2({
229525
- OOXML_PCT_DIVISOR: () => OOXML_PCT_DIVISOR,
229526
- calculateTabWidth: () => calculateTabWidth,
229527
- computeListIndent: () => computeListIndent,
229528
- computeTabStops: () => computeTabStops$1,
229529
- computeWrapExclusion: () => computeWrapExclusion,
229530
- formatListLabel: () => formatListLabel,
229531
- layoutWithTabs: () => layoutWithTabs,
229532
- measureRowHeights: () => measureRowHeights,
229533
- resolveColumnWidths: () => resolveColumnWidths,
229534
- resolveSpacingIndent: () => resolveSpacingIndent,
229535
- scaleWrapPolygon: () => scaleWrapPolygon
229536
- }, 1);
229537
229607
  FONT_FAMILY_FALLBACKS2 = Object.freeze({
229538
229608
  swiss: "Arial, sans-serif",
229539
229609
  roman: "Times New Roman, serif",
@@ -239388,7 +239458,10 @@ function print() { __p += __j.call(arguments, '') }
239388
239458
  ...firstSection?.margins?.header != null ? { header: firstSection.margins.header } : {},
239389
239459
  ...firstSection?.margins?.footer != null ? { footer: firstSection.margins.footer } : {}
239390
239460
  };
239391
- const columns = firstSection?.columns ?? defaults2.columns;
239461
+ const columns = firstSection ? firstSection.columns ?? {
239462
+ count: 1,
239463
+ gap: 0
239464
+ } : defaults2.columns;
239392
239465
  this.#layoutOptions.pageSize = pageSize;
239393
239466
  this.#layoutOptions.margins = margins;
239394
239467
  const flowMode = this.#layoutOptions.flowMode ?? "paginated";
@@ -251763,7 +251836,7 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
251763
251836
 
251764
251837
  // ../../packages/superdoc/dist/super-editor.es.js
251765
251838
  var init_super_editor_es = __esm(() => {
251766
- init_src_DT75iyuq_es();
251839
+ init_src_CcGVOrgc_es();
251767
251840
  init_SuperConverter_C2Sw7Q5Z_es();
251768
251841
  init_jszip_ChlR43oI_es();
251769
251842
  init_xml_js_BtmJ6bNs_es();