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

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 +691 -604
  2. package/package.json +8 -8
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-BQ8I1JWL.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)
@@ -189746,6 +189822,13 @@ function scrollToElement(targetElement, options = {
189746
189822
  behavior: options.behavior
189747
189823
  });
189748
189824
  }
189825
+ function getParagraphFontFamilyFromProperties(paragraphProps, convertedXml = {}) {
189826
+ const fontFamilyProps = paragraphProps?.runProperties?.fontFamily;
189827
+ if (!fontFamilyProps)
189828
+ return null;
189829
+ const [markDef] = encodeMarksFromRPr({ fontFamily: fontFamilyProps }, convertedXml);
189830
+ return markDef?.attrs?.fontFamily ?? null;
189831
+ }
189749
189832
  var Node$13 = class Node$14 {
189750
189833
  constructor(config2) {
189751
189834
  this.type = "node";
@@ -198578,7 +198661,26 @@ var Node$13 = class Node$14 {
198578
198661
  console.warn("Failed to initialize developer tools:", error);
198579
198662
  }
198580
198663
  }
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) => {
198664
+ }, 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, OOXML_PCT_DIVISOR = 5000, SPACE_CHARS, isAtomicRunKind = (kind) => kind === "image" || kind === "lineBreak" || kind === "break" || kind === "tab" || kind === "fieldAnnotation", isImageLikeRun = (run2) => {
198665
+ if (!run2 || typeof run2 !== "object")
198666
+ return false;
198667
+ return typeof run2.src === "string";
198668
+ }, coerceRunText = (run2) => {
198669
+ if (!run2 || typeof run2 !== "object")
198670
+ return "";
198671
+ const candidate = run2.text;
198672
+ return typeof candidate === "string" ? candidate : "";
198673
+ }, coercePmStart = (run2) => {
198674
+ if (!run2 || typeof run2 !== "object")
198675
+ return;
198676
+ const candidate = run2.pmStart;
198677
+ return typeof candidate === "number" ? candidate : undefined;
198678
+ }, coercePmEnd = (run2) => {
198679
+ if (!run2 || typeof run2 !== "object")
198680
+ return;
198681
+ const candidate = run2.pmEnd;
198682
+ return typeof candidate === "number" ? candidate : undefined;
198683
+ }, 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
198684
  if (!path2.includes(".")) {
198583
198685
  target[path2] = value;
198584
198686
  return;
@@ -200825,26 +200927,7 @@ var Node$13 = class Node$14 {
200825
200927
  if (epoch < minKeptFromEpoch)
200826
200928
  this.#mapsByFromEpoch.delete(epoch);
200827
200929
  }
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) => {
200930
+ }, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
200848
200931
  if (!str.includes('"') && !str.includes("'"))
200849
200932
  return str.split(delimiter).map((p$12) => p$12.trim()).filter(Boolean);
200850
200933
  const parts = [];
@@ -201979,7 +202062,11 @@ var Node$13 = class Node$14 {
201979
202062
  if (!Number.isFinite(value) || value < 0)
201980
202063
  return 0;
201981
202064
  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) => {
202065
+ }, 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) => {
202066
+ if (Array.isArray(columns.widths) && columns.widths.length > 0)
202067
+ return columns.widths[Math.max(0, Math.min(columnIndex, columns.widths.length - 1))] ?? columns.width;
202068
+ return columns.width;
202069
+ }, 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
202070
  if (value === true || value === 1)
201984
202071
  return true;
201985
202072
  if (typeof value === "string") {
@@ -208070,43 +208157,26 @@ var Node$13 = class Node$14 {
208070
208157
  if (layout.pages.length > 0)
208071
208158
  return layout.pages.length - 1;
208072
208159
  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) => {
208160
+ }, footnoteColumnKey = (pageIndex, columnIndex) => `${pageIndex}:${columnIndex}`, COLUMN_EPSILON = 0.01, resolveMaxColumnWidth = (contentWidth, columns) => {
208161
+ if (!columns || columns.count <= 1)
208162
+ return contentWidth;
208163
+ return normalizeColumnsForFootnotes(columns, contentWidth).width;
208164
+ }, normalizeColumnsForFootnotes = (input2, contentWidth) => {
208165
+ return normalizeColumnLayout(input2, contentWidth, COLUMN_EPSILON);
208166
+ }, ooXmlSectionColumns = (columns) => cloneColumnLayout(columns), resolveSectionColumnsByIndex = (options, blocks2) => {
208090
208167
  const result = /* @__PURE__ */ new Map;
208091
- let activeColumns = options.columns ?? {
208092
- count: 1,
208093
- gap: 0
208094
- };
208168
+ let activeColumns = cloneColumnLayout(options.columns);
208095
208169
  if (blocks2 && blocks2.length > 0)
208096
208170
  for (const block of blocks2) {
208097
208171
  if (block.kind !== "sectionBreak")
208098
208172
  continue;
208099
208173
  const sectionIndexRaw = block.attrs?.sectionIndex;
208100
208174
  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 });
208175
+ activeColumns = ooXmlSectionColumns(block.columns);
208176
+ result.set(sectionIndex, cloneColumnLayout(activeColumns));
208107
208177
  }
208108
208178
  if (result.size === 0)
208109
- result.set(0, { ...activeColumns });
208179
+ result.set(0, cloneColumnLayout(activeColumns));
208110
208180
  return result;
208111
208181
  }, resolvePageColumns = (layout, options, blocks2) => {
208112
208182
  const sectionColumns = resolveSectionColumnsByIndex(options, blocks2);
@@ -208152,9 +208222,23 @@ var Node$13 = class Node$14 {
208152
208222
  if (columns && columns.count > 1 && page) {
208153
208223
  const fragment2 = findFragmentForPos(page, ref$1.pos);
208154
208224
  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));
208225
+ const widths = Array.isArray(columns.widths) && columns.widths.length > 0 ? columns.widths : undefined;
208226
+ if (widths) {
208227
+ let cursorX = columns.left;
208228
+ for (let index2 = 0;index2 < columns.count; index2 += 1) {
208229
+ const columnWidth = widths[index2] ?? columns.width;
208230
+ if (fragment2.x < cursorX + columnWidth + columns.gap / 2) {
208231
+ columnIndex = index2;
208232
+ break;
208233
+ }
208234
+ cursorX += columnWidth + columns.gap;
208235
+ columnIndex = Math.min(columns.count - 1, index2 + 1);
208236
+ }
208237
+ } else {
208238
+ const columnStride = columns.width + columns.gap;
208239
+ const rawIndex = columnStride > 0 ? Math.floor((fragment2.x - columns.left) / columnStride) : 0;
208240
+ columnIndex = Math.max(0, Math.min(columns.count - 1, rawIndex));
208241
+ }
208158
208242
  }
208159
208243
  }
208160
208244
  const key$1 = footnoteColumnKey(pageIndex, columnIndex);
@@ -208180,10 +208264,7 @@ var Node$13 = class Node$14 {
208180
208264
  left: normalizeMargin(options.margins?.left, DEFAULT_MARGINS$1.left)
208181
208265
  };
208182
208266
  let width = pageSize.w - (margins.left + margins.right);
208183
- let activeColumns = options.columns ?? {
208184
- count: 1,
208185
- gap: 0
208186
- };
208267
+ let activeColumns = cloneColumnLayout(options.columns);
208187
208268
  let activePageSize = pageSize;
208188
208269
  let activeMargins = { ...margins };
208189
208270
  const resolveColumnWidth = () => {
@@ -208200,11 +208281,7 @@ var Node$13 = class Node$14 {
208200
208281
  right: normalizeMargin(block.margins?.right, activeMargins.right),
208201
208282
  left: normalizeMargin(block.margins?.left, activeMargins.left)
208202
208283
  };
208203
- if (block.columns)
208204
- activeColumns = {
208205
- count: block.columns.count,
208206
- gap: block.columns.gap
208207
- };
208284
+ activeColumns = ooXmlSectionColumns(block.columns);
208208
208285
  const w = resolveColumnWidth();
208209
208286
  if (w > 0 && w < width)
208210
208287
  width = w;
@@ -217670,7 +217747,7 @@ var Node$13 = class Node$14 {
217670
217747
  return false;
217671
217748
  return Boolean(checker(attrs));
217672
217749
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
217673
- var init_src_DT75iyuq_es = __esm(() => {
217750
+ var init_src_BQ8I1JWL_es = __esm(() => {
217674
217751
  init_rolldown_runtime_B2q5OVn9_es();
217675
217752
  init_SuperConverter_C2Sw7Q5Z_es();
217676
217753
  init_jszip_ChlR43oI_es();
@@ -225757,6 +225834,20 @@ function print() { __p += __j.call(arguments, '') }
225757
225834
  }({});
225758
225835
  DEFAULT_PARAGRAPH_SECTION_TYPE = SectionType.NEXT_PAGE;
225759
225836
  DEFAULT_BODY_SECTION_TYPE = SectionType.CONTINUOUS;
225837
+ SPACE_CHARS = new Set([" ", " "]);
225838
+ engines_exports = /* @__PURE__ */ __export2({
225839
+ OOXML_PCT_DIVISOR: () => OOXML_PCT_DIVISOR,
225840
+ calculateTabWidth: () => calculateTabWidth,
225841
+ computeListIndent: () => computeListIndent,
225842
+ computeTabStops: () => computeTabStops$1,
225843
+ computeWrapExclusion: () => computeWrapExclusion,
225844
+ formatListLabel: () => formatListLabel,
225845
+ layoutWithTabs: () => layoutWithTabs,
225846
+ measureRowHeights: () => measureRowHeights,
225847
+ resolveColumnWidths: () => resolveColumnWidths,
225848
+ resolveSpacingIndent: () => resolveSpacingIndent,
225849
+ scaleWrapPolygon: () => scaleWrapPolygon
225850
+ }, 1);
225760
225851
  COMMENT_MARK_NAME = CommentMarkName;
225761
225852
  SUPPORTED_INLINE_TYPES = new Set([
225762
225853
  "run",
@@ -229520,20 +229611,6 @@ function print() { __p += __j.call(arguments, '') }
229520
229611
  "search",
229521
229612
  "yjs-cursor"
229522
229613
  ];
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
229614
  FONT_FAMILY_FALLBACKS2 = Object.freeze({
229538
229615
  swiss: "Arial, sans-serif",
229539
229616
  roman: "Times New Roman, serif",
@@ -239388,7 +239465,10 @@ function print() { __p += __j.call(arguments, '') }
239388
239465
  ...firstSection?.margins?.header != null ? { header: firstSection.margins.header } : {},
239389
239466
  ...firstSection?.margins?.footer != null ? { footer: firstSection.margins.footer } : {}
239390
239467
  };
239391
- const columns = firstSection?.columns ?? defaults2.columns;
239468
+ const columns = firstSection ? firstSection.columns ?? {
239469
+ count: 1,
239470
+ gap: 0
239471
+ } : defaults2.columns;
239392
239472
  this.#layoutOptions.pageSize = pageSize;
239393
239473
  this.#layoutOptions.margins = margins;
239394
239474
  const flowMode = this.#layoutOptions.flowMode ?? "paginated";
@@ -251279,8 +251359,12 @@ function print() { __p += __j.call(arguments, '') }
251279
251359
  const inTable = isInTable(this.activeEditor.state);
251280
251360
  const paragraphParent = findParentNode((n) => n.type.name === "paragraph")(selection);
251281
251361
  const paragraphProps = paragraphParent ? calculateResolvedParagraphProperties(this.activeEditor, paragraphParent.node, state.doc.resolve(paragraphParent.pos)) : null;
251362
+ const selectionIsCollapsed = selection.empty;
251363
+ const paragraphIsEmpty = paragraphParent?.node?.content?.size === 0;
251364
+ const paragraphFontFamily = getParagraphFontFamilyFromProperties(paragraphProps, this.activeEditor?.converter?.convertedXml ?? {});
251282
251365
  this.toolbarItems.forEach((item) => {
251283
251366
  item.resetDisabled();
251367
+ let activatedFromLinkedStyle = false;
251284
251368
  if (item.name.value === "undo")
251285
251369
  item.setDisabled(this.undoDepth === 0);
251286
251370
  if (item.name.value === "redo")
@@ -251317,10 +251401,13 @@ function print() { __p += __j.call(arguments, '') }
251317
251401
  const linkedStylesItem = linkedStyles.definition.styles[markToStyleMap[item.name.value]];
251318
251402
  const value = { [item.name.value]: linkedStylesItem };
251319
251403
  item.activate(value);
251404
+ activatedFromLinkedStyle = true;
251320
251405
  }
251321
251406
  }
251322
251407
  if (item.name.value === "textAlign" && paragraphProps?.justification)
251323
251408
  item.activate({ textAlign: paragraphProps.justification });
251409
+ if (item.name.value === "fontFamily" && selectionIsCollapsed && paragraphIsEmpty && !activeMark && !markNegated && !activatedFromLinkedStyle && paragraphFontFamily)
251410
+ item.activate({ fontFamily: paragraphFontFamily });
251324
251411
  if (item.name.value === "lineHeight")
251325
251412
  if (paragraphProps?.spacing)
251326
251413
  item.selectedValue.value = twipsToLines(paragraphProps.spacing.line);
@@ -251763,7 +251850,7 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
251763
251850
 
251764
251851
  // ../../packages/superdoc/dist/super-editor.es.js
251765
251852
  var init_super_editor_es = __esm(() => {
251766
- init_src_DT75iyuq_es();
251853
+ init_src_BQ8I1JWL_es();
251767
251854
  init_SuperConverter_C2Sw7Q5Z_es();
251768
251855
  init_jszip_ChlR43oI_es();
251769
251856
  init_xml_js_BtmJ6bNs_es();