@superdoc-dev/cli 0.16.0-next.26 → 0.16.0-next.28

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 +2119 -291
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -10805,7 +10805,10 @@ var init_schemas = __esm(() => {
10805
10805
  "sectionDefaults"
10806
10806
  ]
10807
10807
  };
10808
- const scopeReportSchema = objectSchema({ scope: scopeEnum, part: { type: "string" }, detail: { type: "string" } }, ["scope", "part"]);
10808
+ const scopeReportSchema = objectSchema({ scope: scopeEnum, part: { type: "string" }, detail: { type: "string" } }, [
10809
+ "scope",
10810
+ "part"
10811
+ ]);
10809
10812
  const scopeSkipSchema = objectSchema({
10810
10813
  scope: { type: "string" },
10811
10814
  part: { type: "string" },
@@ -68345,7 +68348,7 @@ var init_remark_gfm_BhnWr3yf_es = __esm(() => {
68345
68348
  emptyOptions2 = {};
68346
68349
  });
68347
68350
 
68348
- // ../../packages/superdoc/dist/chunks/SuperConverter-DBsJeu9t.es.js
68351
+ // ../../packages/superdoc/dist/chunks/SuperConverter-D2zNnC50.es.js
68349
68352
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
68350
68353
  const fieldValue = extension$1.config[field];
68351
68354
  if (typeof fieldValue === "function")
@@ -76839,8 +76842,8 @@ function createBorderPropertyHandler(xmlName, sdName = null) {
76839
76842
  createAttributeHandler("w:themeColor"),
76840
76843
  createAttributeHandler("w:themeTint"),
76841
76844
  createAttributeHandler("w:themeShade"),
76842
- createAttributeHandler("w:sz", "size", parseInteger, integerToString),
76843
- createAttributeHandler("w:space", null, parseInteger, integerToString),
76845
+ createAttributeHandler("w:sz", "size", parseInteger$1, integerToString),
76846
+ createAttributeHandler("w:space", null, parseInteger$1, integerToString),
76844
76847
  createAttributeHandler("w:shadow", null, parseBoolean, booleanToString),
76845
76848
  createAttributeHandler("w:frame", null, parseBoolean, booleanToString)
76846
76849
  ],
@@ -77045,7 +77048,7 @@ function readAttr(attributes, key) {
77045
77048
  return attributes?.[`w14:${key}`] ?? attributes?.[`w:${key}`];
77046
77049
  }
77047
77050
  function encodeStylisticSet(node3) {
77048
- const id2 = parseInteger(readAttr(node3?.attributes, "id"));
77051
+ const id2 = parseInteger$1(readAttr(node3?.attributes, "id"));
77049
77052
  if (id2 == null)
77050
77053
  return;
77051
77054
  const valRaw = readAttr(node3?.attributes, "val");
@@ -78370,11 +78373,25 @@ function widthsEqual(a, b) {
78370
78373
  return false;
78371
78374
  return true;
78372
78375
  }
78376
+ function usableExplicitWidths(input) {
78377
+ if (!input || input.equalWidth !== false || !Array.isArray(input.widths))
78378
+ return [];
78379
+ return input.widths.filter((width) => typeof width === "number" && Number.isFinite(width) && width > 0);
78380
+ }
78381
+ function resolveColumnMode(input) {
78382
+ return usableExplicitWidths(input).length > 0 ? "explicit" : "equal";
78383
+ }
78384
+ function resolveColumnCount(input) {
78385
+ const rawCount = input && Number.isFinite(input.count) ? Math.max(1, Math.floor(input.count)) : 1;
78386
+ const explicit = usableExplicitWidths(input);
78387
+ return explicit.length > 0 ? Math.min(rawCount, explicit.length) : rawCount;
78388
+ }
78373
78389
  function cloneColumnLayout(columns) {
78374
78390
  return columns ? {
78375
78391
  count: columns.count,
78376
78392
  gap: columns.gap,
78377
78393
  ...Array.isArray(columns.widths) ? { widths: [...columns.widths] } : {},
78394
+ ...Array.isArray(columns.gaps) ? { gaps: [...columns.gaps] } : {},
78378
78395
  ...columns.equalWidth !== undefined ? { equalWidth: columns.equalWidth } : {},
78379
78396
  ...columns.withSeparator !== undefined ? { withSeparator: columns.withSeparator } : {}
78380
78397
  } : {
@@ -78382,13 +78399,45 @@ function cloneColumnLayout(columns) {
78382
78399
  gap: 0
78383
78400
  };
78384
78401
  }
78402
+ function resolveColumnLayout(input) {
78403
+ const count2 = resolveColumnCount(input);
78404
+ const resolved = cloneColumnLayout(input);
78405
+ resolved.count = count2;
78406
+ if (resolveColumnMode(input) === "explicit") {
78407
+ if (Array.isArray(resolved.widths))
78408
+ resolved.widths = resolved.widths.slice(0, count2);
78409
+ if (Array.isArray(resolved.gaps))
78410
+ resolved.gaps = resolved.gaps.slice(0, Math.max(0, count2 - 1));
78411
+ } else {
78412
+ delete resolved.widths;
78413
+ delete resolved.gaps;
78414
+ }
78415
+ return resolved;
78416
+ }
78417
+ function buildColumnGeometry(widths, gap, withSeparator) {
78418
+ const geometry = [];
78419
+ let x = 0;
78420
+ for (let i$1 = 0;i$1 < widths.length; i$1 += 1) {
78421
+ const width = widths[i$1];
78422
+ const isLast = i$1 === widths.length - 1;
78423
+ const gapAfter = isLast ? 0 : gap;
78424
+ const col = {
78425
+ index: i$1,
78426
+ x,
78427
+ width,
78428
+ gapAfter
78429
+ };
78430
+ if (withSeparator && !isLast)
78431
+ col.separatorX = x + width + gap / 2;
78432
+ geometry.push(col);
78433
+ x += width + gapAfter;
78434
+ }
78435
+ return geometry;
78436
+ }
78385
78437
  function normalizeColumnLayout(input, contentWidth, epsilon = 0.0001) {
78386
- const rawCount = input && Number.isFinite(input.count) ? Math.floor(input.count) : 1;
78387
- let count2 = Math.max(1, rawCount || 1);
78438
+ const count2 = resolveColumnCount(input);
78388
78439
  const gap = Math.max(0, input?.gap ?? 0);
78389
- const explicitWidths = input?.equalWidth === false && Array.isArray(input?.widths) && input.widths.length > 0 ? input.widths.filter((width$1) => typeof width$1 === "number" && Number.isFinite(width$1) && width$1 > 0) : [];
78390
- if (explicitWidths.length > 0 && explicitWidths.length < count2)
78391
- count2 = explicitWidths.length;
78440
+ const explicitWidths = usableExplicitWidths(input);
78392
78441
  const availableWidth = contentWidth - gap * (count2 - 1);
78393
78442
  let widths = explicitWidths.length > 0 ? explicitWidths.slice(0, count2) : Array.from({ length: count2 }, () => availableWidth > 0 ? availableWidth / count2 : contentWidth);
78394
78443
  if (widths.length < count2) {
@@ -78418,6 +78467,45 @@ function normalizeColumnLayout(input, contentWidth, epsilon = 0.0001) {
78418
78467
  width
78419
78468
  };
78420
78469
  }
78470
+ function getColumnGeometry(normalized) {
78471
+ return buildColumnGeometry(Array.isArray(normalized.widths) && normalized.widths.length > 0 ? normalized.widths : [normalized.width], normalized.gap, Boolean(normalized.withSeparator));
78472
+ }
78473
+ function clampColumnIndex(geometry, index2) {
78474
+ if (geometry.length === 0)
78475
+ return 0;
78476
+ return Math.max(0, Math.min(index2, geometry.length - 1));
78477
+ }
78478
+ function getColumnWidth(geometry, index2) {
78479
+ return geometry[clampColumnIndex(geometry, index2)]?.width ?? 0;
78480
+ }
78481
+ function getColumnX(geometry, index2, originX = 0) {
78482
+ return originX + (geometry[clampColumnIndex(geometry, index2)]?.x ?? 0);
78483
+ }
78484
+ function getColumnSeparatorPositions(geometry, originX = 0) {
78485
+ return geometry.filter((col) => typeof col.separatorX === "number").map((col) => originX + col.separatorX);
78486
+ }
78487
+ function columnRenderLayoutsEqual(a, b) {
78488
+ if (!a && !b)
78489
+ return true;
78490
+ if (!a || !b)
78491
+ return false;
78492
+ const mode = resolveColumnMode(a);
78493
+ if (mode !== resolveColumnMode(b))
78494
+ return false;
78495
+ if (resolveColumnCount(a) !== resolveColumnCount(b))
78496
+ return false;
78497
+ if ((a.gap ?? 0) !== (b.gap ?? 0))
78498
+ return false;
78499
+ if (Boolean(a.withSeparator) !== Boolean(b.withSeparator))
78500
+ return false;
78501
+ if (mode === "explicit") {
78502
+ const ra = resolveColumnLayout(a);
78503
+ const rb = resolveColumnLayout(b);
78504
+ if (!widthsEqual(ra.widths, rb.widths))
78505
+ return false;
78506
+ }
78507
+ return true;
78508
+ }
78421
78509
  function getIdlessSdtContainerKey(metadata) {
78422
78510
  const existingKey = idlessSdtContainerKeys.get(metadata);
78423
78511
  if (existingKey)
@@ -78524,6 +78612,21 @@ function toUpperLetter$1(value) {
78524
78612
  const repeatCount = Math.floor((normalized - 1) / 26) + 1;
78525
78613
  return String.fromCharCode(65 + index2).repeat(repeatCount);
78526
78614
  }
78615
+ function toOrdinal(value) {
78616
+ const remainder = value % 100;
78617
+ if (remainder >= 11 && remainder <= 13)
78618
+ return `${value}th`;
78619
+ switch (value % 10) {
78620
+ case 1:
78621
+ return `${value}st`;
78622
+ case 2:
78623
+ return `${value}nd`;
78624
+ case 3:
78625
+ return `${value}rd`;
78626
+ default:
78627
+ return `${value}th`;
78628
+ }
78629
+ }
78527
78630
  function formatPageNumber(pageNumber, format) {
78528
78631
  const value = Math.max(1, Math.trunc(Number.isFinite(pageNumber) ? pageNumber : 1));
78529
78632
  switch (format) {
@@ -78537,12 +78640,16 @@ function formatPageNumber(pageNumber, format) {
78537
78640
  return toUpperLetter$1(value).toLowerCase();
78538
78641
  case "numberInDash":
78539
78642
  return `- ${value} -`;
78643
+ case "ordinal":
78644
+ return toOrdinal(value);
78540
78645
  case "decimal":
78541
78646
  default:
78542
78647
  return String(value);
78543
78648
  }
78544
78649
  }
78545
- function formatPageNumberFieldValue$1(pageNumber, fieldFormat) {
78650
+ function formatPageNumberFieldValue(pageNumber, fieldFormat) {
78651
+ if (fieldFormat?.numericPicture)
78652
+ return formatIntegerWithNumericPicture(Math.max(1, Math.trunc(Number.isFinite(pageNumber) ? pageNumber : 1)), fieldFormat.numericPicture);
78546
78653
  const format = fieldFormat?.format ?? "decimal";
78547
78654
  const formatted = formatPageNumber(pageNumber, format);
78548
78655
  return fieldFormat?.zeroPadding && format === "decimal" ? formatted.padStart(fieldFormat.zeroPadding, "0") : formatted;
@@ -78574,6 +78681,373 @@ function formatSectionPageNumberText(args2) {
78574
78681
  chapterSeparator: args2.chapterSeparator
78575
78682
  });
78576
78683
  }
78684
+ function formatIntegerWithNumericPicture(value, picture) {
78685
+ const integerValue = Math.trunc(Number.isFinite(value) ? value : 0);
78686
+ const sections = splitPictureSections(typeof picture === "string" && picture.length > 0 ? picture : "0");
78687
+ const hasExplicitNegativeSection = integerValue < 0 && sections[1] != null;
78688
+ const section = integerValue > 0 ? sections[0] : integerValue < 0 ? sections[1] ?? sections[0] : sections[2] ?? sections[0];
78689
+ return formatNumericPictureSection(Math.abs(integerValue), integerValue < 0, section ?? "0", hasExplicitNegativeSection);
78690
+ }
78691
+ function splitPictureSections(picture) {
78692
+ const sections = [];
78693
+ let current = "";
78694
+ let inQuote = false;
78695
+ for (let index2 = 0;index2 < picture.length; index2 += 1) {
78696
+ const char = picture[index2];
78697
+ if (char === "'") {
78698
+ inQuote = !inQuote;
78699
+ current += char;
78700
+ continue;
78701
+ }
78702
+ if (char === ";" && !inQuote) {
78703
+ sections.push(current);
78704
+ current = "";
78705
+ continue;
78706
+ }
78707
+ current += char;
78708
+ }
78709
+ sections.push(current);
78710
+ return sections;
78711
+ }
78712
+ function tokenizePicture(section) {
78713
+ const tokens = [];
78714
+ for (let index2 = 0;index2 < section.length; index2 += 1) {
78715
+ const char = section[index2];
78716
+ if (char === "'") {
78717
+ let literal = "";
78718
+ index2 += 1;
78719
+ while (index2 < section.length && section[index2] !== "'") {
78720
+ literal += section[index2];
78721
+ index2 += 1;
78722
+ }
78723
+ tokens.push({
78724
+ kind: "literal",
78725
+ value: literal
78726
+ });
78727
+ continue;
78728
+ }
78729
+ if (char === "0" || char === "#" || char === "x" || char === "," || char === "." || char === "+" || char === "-")
78730
+ tokens.push({
78731
+ kind: "placeholder",
78732
+ value: char
78733
+ });
78734
+ else
78735
+ tokens.push({
78736
+ kind: "literal",
78737
+ value: char
78738
+ });
78739
+ }
78740
+ return tokens;
78741
+ }
78742
+ function formatNumericPictureSection(value, isNegative, section, suppressDefaultNegative = false) {
78743
+ const tokens = tokenizePicture(section);
78744
+ const decimalIndex = tokens.findIndex((token) => token.kind === "placeholder" && token.value === ".");
78745
+ const integerTokens = decimalIndex >= 0 ? tokens.slice(0, decimalIndex) : tokens;
78746
+ const fractionalTokens = decimalIndex >= 0 ? tokens.slice(decimalIndex + 1) : [];
78747
+ const integerPart = formatIntegerPictureTokens(value, isNegative, integerTokens, suppressDefaultNegative);
78748
+ const fractionalPart = formatFractionalPictureTokens(fractionalTokens);
78749
+ return fractionalTokens.length > 0 ? `${integerPart}.${fractionalPart}` : integerPart;
78750
+ }
78751
+ function formatIntegerPictureTokens(value, isNegative, tokens, suppressDefaultNegative) {
78752
+ let xIndex = -1;
78753
+ for (let index2 = tokens.length - 1;index2 >= 0; index2 -= 1) {
78754
+ const token = tokens[index2];
78755
+ if (token.kind === "placeholder" && token.value === "x") {
78756
+ xIndex = index2;
78757
+ break;
78758
+ }
78759
+ }
78760
+ const activeTokens = xIndex >= 0 ? tokens.slice(xIndex + 1) : tokens;
78761
+ const placeholderCount = activeTokens.filter((token) => token.kind === "placeholder" && (token.value === "0" || token.value === "#")).length;
78762
+ const rawDigits = String(value);
78763
+ const digits = xIndex >= 0 && placeholderCount > 0 ? rawDigits.slice(-placeholderCount) : rawDigits;
78764
+ let digitIndex = digits.length - 1;
78765
+ let output = "";
78766
+ let signSlot = null;
78767
+ const hasGrouping = activeTokens.some((token) => token.kind === "placeholder" && token.value === ",");
78768
+ for (let index2 = activeTokens.length - 1;index2 >= 0; index2 -= 1) {
78769
+ const token = activeTokens[index2];
78770
+ if (token.kind === "literal") {
78771
+ output = token.value + output;
78772
+ continue;
78773
+ }
78774
+ switch (token.value) {
78775
+ case "0":
78776
+ output = (digitIndex >= 0 ? digits[digitIndex] : "0") + output;
78777
+ digitIndex -= 1;
78778
+ break;
78779
+ case "#":
78780
+ if (digitIndex >= 0) {
78781
+ output = digits[digitIndex] + output;
78782
+ digitIndex -= 1;
78783
+ }
78784
+ break;
78785
+ case "+":
78786
+ case "-":
78787
+ signSlot = token.value;
78788
+ break;
78789
+ case ",":
78790
+ case "x":
78791
+ case ".":
78792
+ break;
78793
+ }
78794
+ }
78795
+ if (placeholderCount > 0 && xIndex < 0 && digitIndex >= 0)
78796
+ output = digits.slice(0, digitIndex + 1) + output;
78797
+ if (hasGrouping)
78798
+ output = applyGrouping(output);
78799
+ if (signSlot === "+")
78800
+ output = `${isNegative ? "-" : "+"}${output}`;
78801
+ else if (signSlot === "-")
78802
+ output = `${isNegative ? "-" : " "}${output}`;
78803
+ else if (isNegative && !suppressDefaultNegative)
78804
+ output = `-${output}`;
78805
+ return output;
78806
+ }
78807
+ function formatFractionalPictureTokens(tokens) {
78808
+ let output = "";
78809
+ for (const token of tokens) {
78810
+ if (token.kind === "literal") {
78811
+ output += token.value;
78812
+ continue;
78813
+ }
78814
+ if (token.value === "0")
78815
+ output += "0";
78816
+ else if (token.value !== "#")
78817
+ output += token.value;
78818
+ }
78819
+ return output;
78820
+ }
78821
+ function applyGrouping(value) {
78822
+ const match = value.match(/^([^0-9]*)([0-9]+)(.*)$/);
78823
+ if (!match)
78824
+ return value;
78825
+ return `${match[1]}${match[2].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}${match[3]}`;
78826
+ }
78827
+ function buildPageRefAnchorMap(bookmarks, layout, blocks = [], measures = []) {
78828
+ const anchors = /* @__PURE__ */ new Map;
78829
+ if (bookmarks.size === 0)
78830
+ return anchors;
78831
+ const blockById = /* @__PURE__ */ new Map;
78832
+ const measureById = /* @__PURE__ */ new Map;
78833
+ for (const block of blocks)
78834
+ blockById.set(block.id, block);
78835
+ for (let index2 = 0;index2 < blocks.length; index2 += 1) {
78836
+ const block = blocks[index2];
78837
+ const measure = measures[index2];
78838
+ if (block && measure)
78839
+ measureById.set(block.id, measure);
78840
+ }
78841
+ for (const [bookmarkName, pmPosition] of bookmarks) {
78842
+ const location2 = findPageRefLocation(pmPosition, layout, blockById, measureById);
78843
+ if (location2)
78844
+ anchors.set(bookmarkName, {
78845
+ ...location2,
78846
+ pmPosition
78847
+ });
78848
+ }
78849
+ return anchors;
78850
+ }
78851
+ function findPageRefLocation(pmPosition, layout, blockById, measureById) {
78852
+ let nextLocation = null;
78853
+ let nextDistance = Number.POSITIVE_INFINITY;
78854
+ let hasPriorVisibleRange = false;
78855
+ for (const page of layout.pages)
78856
+ for (const fragment2 of page.fragments) {
78857
+ if (fragmentContainsPosition(fragment2, pmPosition))
78858
+ return pageRefLocationFromPage(page, pmPosition);
78859
+ const block = blockById.get(fragment2.blockId);
78860
+ if (fragment2.kind === "para" && block?.kind === "paragraph" && blockContainsPosition(block, pmPosition))
78861
+ return pageRefLocationFromPage(page, pmPosition);
78862
+ if (fragment2.kind === "table" && block?.kind === "table" && tableContainsPosition(block, fragment2, pmPosition, measureById.get(fragment2.blockId)))
78863
+ return pageRefLocationFromPage(page, pmPosition);
78864
+ if (fragment2.kind === "list-item" && block?.kind === "list" && listItemContainsPosition(block, fragment2.itemId, pmPosition))
78865
+ return pageRefLocationFromPage(page, pmPosition);
78866
+ const fragmentRange = fragmentPositionRange(fragment2, block);
78867
+ if (fragmentRange?.end != null && fragmentRange.end <= pmPosition)
78868
+ hasPriorVisibleRange = true;
78869
+ const fragmentStart = fragmentRange?.start ?? null;
78870
+ if (fragmentStart != null && fragmentStart > pmPosition) {
78871
+ const distance2 = fragmentStart - pmPosition;
78872
+ if ((!hasPriorVisibleRange || distance2 <= MAX_BOOKMARK_MARKER_LEAD_DISTANCE) && distance2 < nextDistance) {
78873
+ nextDistance = distance2;
78874
+ nextLocation = pageRefLocationFromPage(page, pmPosition);
78875
+ }
78876
+ }
78877
+ }
78878
+ return nextLocation;
78879
+ }
78880
+ function pageRefLocationFromPage(page, pmPosition) {
78881
+ const displayNumber = Math.max(1, page.displayNumber ?? page.effectivePageNumber ?? page.number);
78882
+ return {
78883
+ physicalPage: page.number,
78884
+ displayNumber,
78885
+ displayText: page.numberText ?? String(displayNumber),
78886
+ pageFormat: page.pageNumberFormat,
78887
+ chapterNumberText: page.pageNumberChapterText,
78888
+ chapterSeparator: page.pageNumberChapterSeparator,
78889
+ sectionIndex: page.sectionIndex,
78890
+ pmPosition
78891
+ };
78892
+ }
78893
+ function fragmentContainsPosition(fragment2, pmPosition) {
78894
+ const range = fragment2;
78895
+ return range.pmStart != null && range.pmEnd != null && pmPosition >= range.pmStart && pmPosition < range.pmEnd;
78896
+ }
78897
+ function blockContainsPosition(block, pmPosition) {
78898
+ const range = runRange(block.runs);
78899
+ return range != null && pmPosition >= range.start && pmPosition < range.end;
78900
+ }
78901
+ function tableContainsPosition(block, fragment2, pmPosition, measure) {
78902
+ const fromRow = Math.max(0, fragment2.fromRow);
78903
+ const toRow = Math.min(block.rows.length, fragment2.toRow);
78904
+ const tableMeasure = measure?.kind === "table" ? measure : undefined;
78905
+ for (let rowIndex = fromRow;rowIndex < toRow; rowIndex += 1) {
78906
+ const row = block.rows[rowIndex];
78907
+ if (!row)
78908
+ continue;
78909
+ const isPartialRow = fragment2.partialRow?.rowIndex === rowIndex;
78910
+ for (let cellIndex = 0;cellIndex < row.cells.length; cellIndex += 1) {
78911
+ const cell = row.cells[cellIndex];
78912
+ if (!cell)
78913
+ continue;
78914
+ if (isPartialRow && tableMeasure) {
78915
+ const cellMeasure = tableMeasure.rows[rowIndex]?.cells[cellIndex];
78916
+ if (cellContainsPositionInLineRange(cell, cellMeasure, fragment2.partialRow, cellIndex, pmPosition))
78917
+ return true;
78918
+ continue;
78919
+ }
78920
+ const blocks = cell.blocks ?? (cell.paragraph ? [cell.paragraph] : []);
78921
+ for (const childBlock of blocks) {
78922
+ if (childBlock.kind === "paragraph" && blockContainsPosition(childBlock, pmPosition))
78923
+ return true;
78924
+ if (childBlock.kind === "table" && tableBlockContainsPosition(childBlock, pmPosition))
78925
+ return true;
78926
+ }
78927
+ }
78928
+ }
78929
+ return false;
78930
+ }
78931
+ function cellContainsPositionInLineRange(cell, cellMeasure, partialRow, cellIndex, pmPosition) {
78932
+ if (!cellMeasure)
78933
+ return false;
78934
+ const totalLines = getCellTotalLines(cellMeasure);
78935
+ const rawFromLine = partialRow.fromLineByCell[cellIndex];
78936
+ const rawToLine = partialRow.toLineByCell[cellIndex];
78937
+ const fromLine = typeof rawFromLine === "number" && rawFromLine >= 0 ? Math.min(rawFromLine, totalLines) : 0;
78938
+ const toLine = typeof rawToLine === "number" ? Math.max(0, Math.min(rawToLine === -1 ? totalLines : rawToLine, totalLines)) : totalLines;
78939
+ const range = computeCellLineRange(cell, cellMeasure, fromLine, Math.max(fromLine, toLine));
78940
+ return range != null && pmPosition >= range.start && pmPosition < range.end;
78941
+ }
78942
+ function computeCellLineRange(cell, cellMeasure, fromLine, toLine) {
78943
+ let start = Number.POSITIVE_INFINITY;
78944
+ let end = Number.NEGATIVE_INFINITY;
78945
+ const blocks = cell.blocks ?? (cell.paragraph ? [cell.paragraph] : []);
78946
+ const measures = cellMeasure.blocks ?? (cellMeasure.paragraph ? [cellMeasure.paragraph] : []);
78947
+ const blockCount = Math.min(blocks.length, measures.length);
78948
+ let lineOffset = 0;
78949
+ for (let blockIndex = 0;blockIndex < blockCount; blockIndex += 1) {
78950
+ const childBlock = blocks[blockIndex];
78951
+ const childMeasure = measures[blockIndex];
78952
+ const lineCount = getBlockLineCount(childMeasure);
78953
+ const blockFromLine = Math.max(fromLine, lineOffset) - lineOffset;
78954
+ const blockToLine = Math.min(toLine, lineOffset + lineCount) - lineOffset;
78955
+ if (childBlock?.kind === "paragraph" && childMeasure?.kind === "paragraph" && blockFromLine < blockToLine) {
78956
+ const range = computeFragmentPmRange(childBlock, childMeasure.lines, blockFromLine, blockToLine);
78957
+ if (range.pmStart != null)
78958
+ start = Math.min(start, range.pmStart);
78959
+ if (range.pmEnd != null)
78960
+ end = Math.max(end, range.pmEnd);
78961
+ }
78962
+ lineOffset += lineCount;
78963
+ }
78964
+ return Number.isFinite(start) && Number.isFinite(end) && start < end ? {
78965
+ start,
78966
+ end
78967
+ } : null;
78968
+ }
78969
+ function getCellTotalLines(cellMeasure) {
78970
+ return (cellMeasure.blocks ?? (cellMeasure.paragraph ? [cellMeasure.paragraph] : [])).reduce((total, measure) => total + getBlockLineCount(measure), 0);
78971
+ }
78972
+ function getBlockLineCount(measure) {
78973
+ if (!measure)
78974
+ return 0;
78975
+ if (measure.kind === "paragraph")
78976
+ return measure.lines.length;
78977
+ if (measure.kind === "table")
78978
+ return measure.rows.length;
78979
+ return 1;
78980
+ }
78981
+ function tableBlockContainsPosition(block, pmPosition) {
78982
+ for (const row of block.rows)
78983
+ for (const cell of row.cells) {
78984
+ const blocks = cell.blocks ?? (cell.paragraph ? [cell.paragraph] : []);
78985
+ for (const childBlock of blocks) {
78986
+ if (childBlock.kind === "paragraph" && blockContainsPosition(childBlock, pmPosition))
78987
+ return true;
78988
+ if (childBlock.kind === "table" && tableBlockContainsPosition(childBlock, pmPosition))
78989
+ return true;
78990
+ }
78991
+ }
78992
+ return false;
78993
+ }
78994
+ function fragmentPositionRange(fragment2, block) {
78995
+ const fullRange = fragment2;
78996
+ if (fullRange.pmStart != null && fullRange.pmEnd != null)
78997
+ return {
78998
+ start: fullRange.pmStart,
78999
+ end: fullRange.pmEnd
79000
+ };
79001
+ if (block?.kind === "paragraph")
79002
+ return runRange(block.runs);
79003
+ if (block?.kind === "table")
79004
+ return tableRunRange(block);
79005
+ if (fragment2.kind === "list-item" && block?.kind === "list")
79006
+ return listItemRunRange(block, fragment2.itemId);
79007
+ return null;
79008
+ }
79009
+ function listItemContainsPosition(block, itemId, pmPosition) {
79010
+ const range = listItemRunRange(block, itemId);
79011
+ return range != null && pmPosition >= range.start && pmPosition < range.end;
79012
+ }
79013
+ function listItemRunRange(block, itemId) {
79014
+ const item = block.items.find((candidate) => candidate.id === itemId);
79015
+ return item ? runRange(item.paragraph.runs) : null;
79016
+ }
79017
+ function tableRunRange(block) {
79018
+ let start = Number.POSITIVE_INFINITY;
79019
+ let end = Number.NEGATIVE_INFINITY;
79020
+ for (const row of block.rows)
79021
+ for (const cell of row.cells) {
79022
+ const blocks = cell.blocks ?? (cell.paragraph ? [cell.paragraph] : []);
79023
+ for (const childBlock of blocks) {
79024
+ const range = childBlock.kind === "paragraph" ? runRange(childBlock.runs) : childBlock.kind === "table" ? tableRunRange(childBlock) : null;
79025
+ if (!range)
79026
+ continue;
79027
+ start = Math.min(start, range.start);
79028
+ end = Math.max(end, range.end);
79029
+ }
79030
+ }
79031
+ return Number.isFinite(start) && Number.isFinite(end) && start < end ? {
79032
+ start,
79033
+ end
79034
+ } : null;
79035
+ }
79036
+ function runRange(runs) {
79037
+ let start = Number.POSITIVE_INFINITY;
79038
+ let end = Number.NEGATIVE_INFINITY;
79039
+ for (const run$1 of runs) {
79040
+ const range = run$1;
79041
+ if (range.pmStart != null)
79042
+ start = Math.min(start, range.pmStart);
79043
+ if (range.pmEnd != null)
79044
+ end = Math.max(end, range.pmEnd);
79045
+ }
79046
+ return Number.isFinite(start) && Number.isFinite(end) && start < end ? {
79047
+ start,
79048
+ end
79049
+ } : null;
79050
+ }
78577
79051
  function resolveSpacingIndent(style, numbering) {
78578
79052
  const spacing = {
78579
79053
  before: style.spacing?.before ?? 0,
@@ -82963,11 +83437,12 @@ function convertTiffToPng(data) {
82963
83437
  }
82964
83438
  }
82965
83439
  function parsePageNumberFieldSwitches(instruction, fieldType) {
82966
- const normalizedInstruction = typeof instruction === "string" ? instruction.trim().replace(/\s+/g, " ") : fieldType;
83440
+ const switchInstruction = typeof instruction === "string" ? instruction.trim() : fieldType;
83441
+ const normalizedInstruction = normalizeInstructionWhitespace(switchInstruction);
82967
83442
  const result = {};
82968
83443
  if (normalizedInstruction && normalizedInstruction !== fieldType)
82969
83444
  result.instruction = normalizedInstruction;
82970
- for (const match of normalizedInstruction.matchAll(/\\\*\s+("[^"]+"|\S+)/g)) {
83445
+ for (const match of switchInstruction.matchAll(/\\\*\s+("[^"]+"|\S+)/g)) {
82971
83446
  const rawValue = unquote(match[1]);
82972
83447
  const mapped = GENERAL_FORMATS.get(rawValue) ?? CASE_INSENSITIVE_GENERAL_FORMATS.get(rawValue.toLowerCase());
82973
83448
  if (mapped) {
@@ -82975,25 +83450,55 @@ function parsePageNumberFieldSwitches(instruction, fieldType) {
82975
83450
  break;
82976
83451
  }
82977
83452
  }
82978
- for (const match of normalizedInstruction.matchAll(/\\#\s+("[^"]+"|\S+)/g)) {
83453
+ for (const match of switchInstruction.matchAll(/\\#\s+("[^"]+"|\S+)/g)) {
82979
83454
  const picture = unquote(match[1]);
83455
+ if (!picture)
83456
+ continue;
82980
83457
  if (/^0+$/.test(picture)) {
82981
83458
  result.pageNumberFormat ??= "decimal";
82982
83459
  result.pageNumberZeroPadding = picture.length;
82983
- break;
82984
- }
83460
+ } else
83461
+ result.pageNumberNumericPicture = picture;
83462
+ break;
82985
83463
  }
82986
83464
  return result;
82987
83465
  }
82988
- function formatPageNumberFieldValue(pageNumber, attrs = {}) {
82989
- return formatPageNumberFieldValue$1(pageNumber, {
83466
+ function formatPageNumberFieldValue$1(pageNumber, attrs = {}) {
83467
+ return formatPageNumberFieldValue(pageNumber, {
82990
83468
  format: attrs.pageNumberFormat || "decimal",
82991
- zeroPadding: attrs.pageNumberZeroPadding ?? undefined
83469
+ zeroPadding: attrs.pageNumberZeroPadding ?? undefined,
83470
+ numericPicture: attrs.pageNumberNumericPicture ?? undefined
82992
83471
  });
82993
83472
  }
82994
83473
  function unquote(value) {
82995
83474
  return value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value;
82996
83475
  }
83476
+ function normalizeInstructionWhitespace(instruction) {
83477
+ let normalized = "";
83478
+ let inQuote = false;
83479
+ let pendingSpace = false;
83480
+ for (const char of instruction) {
83481
+ if (char === '"') {
83482
+ if (pendingSpace && normalized.length > 0) {
83483
+ normalized += " ";
83484
+ pendingSpace = false;
83485
+ }
83486
+ normalized += char;
83487
+ inQuote = !inQuote;
83488
+ continue;
83489
+ }
83490
+ if (!inQuote && /\s/.test(char)) {
83491
+ pendingSpace = true;
83492
+ continue;
83493
+ }
83494
+ if (pendingSpace && normalized.length > 0) {
83495
+ normalized += " ";
83496
+ pendingSpace = false;
83497
+ }
83498
+ normalized += char;
83499
+ }
83500
+ return normalized;
83501
+ }
82997
83502
  function preProcessPageInstruction(nodesToCombine, instrText = "PAGE", options = {}) {
82998
83503
  const fieldRunRPr = options.fieldRunRPr ?? null;
82999
83504
  const normalizedInstruction = typeof instrText === "string" && instrText.trim() ? instrText.trim().replace(/\s+/g, " ") : "PAGE";
@@ -83091,11 +83596,123 @@ function extractCachedText$1(nodes) {
83091
83596
  }
83092
83597
  return texts.join("");
83093
83598
  }
83599
+ function parsePageRefInstruction(instruction) {
83600
+ const rawInstruction = typeof instruction === "string" ? instruction.trim() : "";
83601
+ const tokens = tokenizeInstruction$1(rawInstruction);
83602
+ const result = {
83603
+ instruction: rawInstruction,
83604
+ bookmarkId: "",
83605
+ hasHyperlinkSwitch: false,
83606
+ hasRelativePositionSwitch: false,
83607
+ rawSwitches: []
83608
+ };
83609
+ if (!tokens.length || !/^PAGEREF$/i.test(tokens[0].value))
83610
+ return result;
83611
+ for (let index2 = 1;index2 < tokens.length; index2 += 1) {
83612
+ const token = tokens[index2].value;
83613
+ if (!token)
83614
+ continue;
83615
+ if (token.startsWith("\\")) {
83616
+ const normalized = token.toLowerCase();
83617
+ if (normalized === "\\h") {
83618
+ result.hasHyperlinkSwitch = true;
83619
+ result.rawSwitches.push({ switch: token });
83620
+ continue;
83621
+ }
83622
+ if (normalized === "\\p") {
83623
+ result.hasRelativePositionSwitch = true;
83624
+ result.rawSwitches.push({ switch: token });
83625
+ continue;
83626
+ }
83627
+ if (token === "\\*") {
83628
+ const value = tokens[index2 + 1]?.value;
83629
+ if (value != null) {
83630
+ result.rawSwitches.push({
83631
+ switch: token,
83632
+ value
83633
+ });
83634
+ applyGeneralFormat$1(result, value);
83635
+ index2 += 1;
83636
+ } else
83637
+ result.rawSwitches.push({ switch: token });
83638
+ continue;
83639
+ }
83640
+ if (token === "\\#") {
83641
+ const value = tokens[index2 + 1]?.value;
83642
+ if (value != null) {
83643
+ result.rawSwitches.push({
83644
+ switch: token,
83645
+ value
83646
+ });
83647
+ result.numericPictureFormat = { picture: value };
83648
+ if (/^0+$/.test(value))
83649
+ result.pageNumberFieldFormat = {
83650
+ ...result.pageNumberFieldFormat ?? {},
83651
+ zeroPadding: value.length
83652
+ };
83653
+ index2 += 1;
83654
+ } else
83655
+ result.rawSwitches.push({ switch: token });
83656
+ continue;
83657
+ }
83658
+ result.rawSwitches.push({ switch: token });
83659
+ continue;
83660
+ }
83661
+ if (!result.bookmarkId)
83662
+ result.bookmarkId = token;
83663
+ }
83664
+ return result;
83665
+ }
83666
+ function tokenizeInstruction$1(instruction) {
83667
+ const tokens = [];
83668
+ for (const match of instruction.matchAll(TOKEN_PATTERN$1))
83669
+ tokens.push({ value: unescapeQuotedToken$1(match[1] ?? match[2] ?? match[0]) });
83670
+ return tokens;
83671
+ }
83672
+ function unescapeQuotedToken$1(value) {
83673
+ return value.replace(/\\(["'\\])/g, "$1");
83674
+ }
83675
+ function applyGeneralFormat$1(result, value) {
83676
+ const normalized = value.toLowerCase();
83677
+ if (normalized === "charformat") {
83678
+ result.fieldResultFormat = "charformat";
83679
+ return;
83680
+ }
83681
+ if (normalized === "mergeformat") {
83682
+ result.fieldResultFormat = "mergeformat";
83683
+ return;
83684
+ }
83685
+ const mapped = GENERAL_FORMATS.get(value) ?? CASE_INSENSITIVE_GENERAL_FORMATS.get(normalized);
83686
+ if (mapped)
83687
+ result.pageNumberFieldFormat = {
83688
+ ...result.pageNumberFieldFormat ?? {},
83689
+ format: mapped
83690
+ };
83691
+ else
83692
+ result.unsupportedGeneralFormat = value;
83693
+ }
83094
83694
  function preProcessPageRefInstruction(nodesToCombine, instrText, options = {}) {
83695
+ const parsed = parsePageRefInstruction(instrText);
83696
+ const instructionTokens = options.instructionTokens ?? null;
83697
+ const firstInstrTextRunRPr = options.firstInstrTextRunRPr ?? null;
83698
+ const fieldRunProperties = parsed.fieldResultFormat === "charformat" && firstInstrTextRunRPr ? translator$133.encode({
83699
+ ...options.docx ? { docx: options.docx } : {},
83700
+ nodes: [firstInstrTextRunRPr]
83701
+ }) : null;
83095
83702
  return [{
83096
83703
  name: "sd:pageReference",
83097
83704
  type: "element",
83098
- attributes: { instruction: instrText },
83705
+ attributes: {
83706
+ instruction: parsed.instruction,
83707
+ ...instructionTokens?.length ? { instructionTokens } : {},
83708
+ ...parsed.bookmarkId ? { bookmarkId: parsed.bookmarkId } : {},
83709
+ ...parsed.hasHyperlinkSwitch ? { hasHyperlinkSwitch: true } : {},
83710
+ ...parsed.hasRelativePositionSwitch ? { hasRelativePositionSwitch: true } : {},
83711
+ ...parsed.pageNumberFieldFormat ? { pageNumberFieldFormat: parsed.pageNumberFieldFormat } : {},
83712
+ ...parsed.numericPictureFormat ? { numericPictureFormat: parsed.numericPictureFormat } : {},
83713
+ ...parsed.fieldResultFormat ? { fieldResultFormat: parsed.fieldResultFormat } : {},
83714
+ ...fieldRunProperties ? { fieldRunProperties } : {}
83715
+ },
83099
83716
  elements: nodesToCombine
83100
83717
  }];
83101
83718
  }
@@ -83340,8 +83957,10 @@ function scanFieldSequence(nodes, beginIndex) {
83340
83957
  const node3 = nodes[i$1];
83341
83958
  const fldType = node3.elements?.find((el) => el.name === "w:fldChar")?.attributes?.["w:fldCharType"];
83342
83959
  const instrTextEl = node3.elements?.find((el) => el.name === "w:instrText");
83343
- if (instrTextEl)
83344
- instrText += (instrTextEl.elements?.[0]?.text || "") + " ";
83960
+ if (instrTextEl) {
83961
+ const fragment2 = instrTextEl.elements?.[0]?.text || "";
83962
+ instrText += shouldInsertSwitchBoundarySpace(instrText, fragment2) ? ` ${fragment2}` : fragment2;
83963
+ }
83345
83964
  if (!fieldRunRPr || separateIndex === -1 && fldType !== "end") {
83346
83965
  const rPrNode = node3.elements?.find((el) => el.name === "w:rPr");
83347
83966
  if (rPrNode && hasSignificantStyling(rPrNode))
@@ -83365,6 +83984,9 @@ function scanFieldSequence(nodes, beginIndex) {
83365
83984
  endIndex
83366
83985
  };
83367
83986
  }
83987
+ function shouldInsertSwitchBoundarySpace(existingInstruction, nextFragment) {
83988
+ return /\w$/.test(existingInstruction) && /^\\/.test(nextFragment) || /(^|\s)\\[#*]$/.test(existingInstruction) && /^\S/.test(nextFragment);
83989
+ }
83368
83990
  function getHeaderFooterFieldPreprocessor(fieldType) {
83369
83991
  switch (fieldType) {
83370
83992
  case "PAGE":
@@ -98835,22 +99457,201 @@ function parseTaInstruction(instruction) {
98835
99457
  };
98836
99458
  }
98837
99459
  function parseSeqInstruction(instruction) {
98838
- const parts = instruction.trim().split(/\s+/);
98839
- const identifier = parts[1] || "";
98840
- let format = "ARABIC";
98841
- let restartLevel = null;
98842
- for (let i$1 = 2;i$1 < parts.length; i$1++)
98843
- if (parts[i$1] === "\\*" && parts[i$1 + 1]) {
98844
- format = parts[i$1 + 1];
98845
- i$1++;
98846
- } else if (parts[i$1] === "\\s" && parts[i$1 + 1]) {
98847
- restartLevel = parseInt(parts[i$1 + 1], 10) || null;
98848
- i$1++;
99460
+ const rawInstruction = typeof instruction === "string" ? instruction : "";
99461
+ const tokens = tokenizeInstruction(rawInstruction);
99462
+ const result = createEmptyParse(rawInstruction, tokens[0]?.value ?? "");
99463
+ if (extractFieldKeyword(rawInstruction) !== "SEQ")
99464
+ return result;
99465
+ let sawSwitch = false;
99466
+ for (let index2 = 1;index2 < tokens.length; index2 += 1) {
99467
+ const token = tokens[index2].value;
99468
+ if (!token)
99469
+ continue;
99470
+ if (token.startsWith("\\")) {
99471
+ sawSwitch = true;
99472
+ const attachedValueSwitch = parseAttachedNumericSwitch(token);
99473
+ const normalized = (attachedValueSwitch?.switchToken ?? token).toLowerCase();
99474
+ if (normalized === "\\n") {
99475
+ result.sequenceMode = "next";
99476
+ continue;
99477
+ }
99478
+ if (normalized === "\\c") {
99479
+ result.sequenceMode = "current";
99480
+ continue;
99481
+ }
99482
+ if (normalized === "\\h") {
99483
+ result.hideResult = true;
99484
+ continue;
99485
+ }
99486
+ if (normalized === "\\r") {
99487
+ const value$1 = attachedValueSwitch?.value ?? tokens[index2 + 1]?.value;
99488
+ if (value$1 != null && (attachedValueSwitch || !value$1.startsWith("\\"))) {
99489
+ const parsed = parseInteger(value$1);
99490
+ if (parsed != null)
99491
+ result.restartNumber = parsed;
99492
+ if (!attachedValueSwitch)
99493
+ index2 += 1;
99494
+ }
99495
+ continue;
99496
+ }
99497
+ if (normalized === "\\s") {
99498
+ const value$1 = attachedValueSwitch?.value ?? tokens[index2 + 1]?.value;
99499
+ if (value$1 != null && (attachedValueSwitch || !value$1.startsWith("\\"))) {
99500
+ const parsed = parseInteger(value$1);
99501
+ if (parsed != null && parsed >= 1 && parsed <= 9)
99502
+ result.restartLevel = parsed;
99503
+ if (!attachedValueSwitch)
99504
+ index2 += 1;
99505
+ }
99506
+ continue;
99507
+ }
99508
+ const attachedGeneralFormat = parseAttachedGeneralFormatSwitch(token);
99509
+ if (normalized === "\\*" || attachedGeneralFormat != null) {
99510
+ const value$1 = attachedGeneralFormat ?? tokens[index2 + 1]?.value;
99511
+ if (value$1 != null && (attachedGeneralFormat != null || !value$1.startsWith("\\"))) {
99512
+ result.format = value$1;
99513
+ result.hasGeneralFormat = true;
99514
+ applyGeneralFormat(result, value$1);
99515
+ if (attachedGeneralFormat == null)
99516
+ index2 += 1;
99517
+ } else
99518
+ result.unknownSwitches.push(token);
99519
+ continue;
99520
+ }
99521
+ const attachedNumericPicture = parseAttachedNumericPictureSwitch(token);
99522
+ if (normalized === "\\#" || attachedNumericPicture != null) {
99523
+ const value$1 = attachedNumericPicture ?? tokens[index2 + 1]?.value;
99524
+ if (value$1 != null && (attachedNumericPicture != null || !value$1.startsWith("\\"))) {
99525
+ if (result.numericPictureFormat == null)
99526
+ result.numericPictureFormat = { picture: value$1 };
99527
+ else
99528
+ result.unknownSwitches.push(token, value$1);
99529
+ if (attachedNumericPicture == null)
99530
+ index2 += 1;
99531
+ } else
99532
+ result.unknownSwitches.push(token);
99533
+ continue;
99534
+ }
99535
+ result.unknownSwitches.push(token);
99536
+ const value = tokens[index2 + 1]?.value;
99537
+ if (value != null && !value.startsWith("\\")) {
99538
+ result.unknownSwitches.push(value);
99539
+ index2 += 1;
99540
+ }
99541
+ continue;
99542
+ }
99543
+ if (!result.identifier) {
99544
+ result.identifier = normalizeSeqIdentifier(token);
99545
+ continue;
98849
99546
  }
99547
+ if (!sawSwitch && !result.fieldArgument)
99548
+ result.fieldArgument = token;
99549
+ }
99550
+ return result;
99551
+ }
99552
+ function isSeqInstruction(instruction) {
99553
+ return extractFieldKeyword(instruction) === "SEQ";
99554
+ }
99555
+ function normalizeSeqIdentifier(identifier) {
99556
+ return typeof identifier === "string" ? identifier.trim() : "";
99557
+ }
99558
+ function sequenceFieldAttrsFromParsed(parsed) {
98850
99559
  return {
98851
- identifier,
98852
- format,
98853
- restartLevel
99560
+ identifier: parsed.identifier,
99561
+ fieldArgument: parsed.fieldArgument,
99562
+ sequenceMode: parsed.sequenceMode,
99563
+ hideResult: parsed.hideResult,
99564
+ restartNumber: parsed.restartNumber,
99565
+ restartLevel: parsed.restartLevel,
99566
+ format: parsed.hasGeneralFormat ? parsed.format : "ARABIC",
99567
+ hasGeneralFormat: parsed.hasGeneralFormat,
99568
+ pageNumberFieldFormat: parsed.pageNumberFieldFormat ?? null,
99569
+ numericPictureFormat: parsed.numericPictureFormat
99570
+ };
99571
+ }
99572
+ function tokenizeInstruction(instruction) {
99573
+ const tokens = [];
99574
+ for (const match of instruction.matchAll(TOKEN_PATTERN))
99575
+ tokens.push({ value: match[1] !== undefined ? unescapeQuotedToken(match[1]) : match[0] });
99576
+ return tokens;
99577
+ }
99578
+ function createEmptyParse(instruction, keyword) {
99579
+ return {
99580
+ instruction,
99581
+ keyword,
99582
+ identifier: "",
99583
+ fieldArgument: "",
99584
+ sequenceMode: "next",
99585
+ hideResult: false,
99586
+ restartNumber: null,
99587
+ restartLevel: null,
99588
+ format: "Arabic",
99589
+ numericPictureFormat: null,
99590
+ hasGeneralFormat: false,
99591
+ unknownSwitches: []
99592
+ };
99593
+ }
99594
+ function parseInteger(value) {
99595
+ const number = Number(value);
99596
+ if (!Number.isFinite(number) || !Number.isInteger(number))
99597
+ return null;
99598
+ return Math.trunc(number);
99599
+ }
99600
+ function parseAttachedNumericSwitch(token) {
99601
+ const match = /^\\([rRsS])([+-]?\d+(?:\.\d+)?)$/.exec(token);
99602
+ if (!match)
99603
+ return null;
99604
+ return {
99605
+ switchToken: `\\${match[1]}`,
99606
+ value: match[2]
99607
+ };
99608
+ }
99609
+ function parseAttachedGeneralFormatSwitch(token) {
99610
+ return normalizeAttachedSwitchValue(/^\\\*(\S+)$/.exec(token)?.[1]);
99611
+ }
99612
+ function parseAttachedNumericPictureSwitch(token) {
99613
+ return normalizeAttachedSwitchValue(/^\\#(\S+)$/.exec(token)?.[1]);
99614
+ }
99615
+ function normalizeAttachedSwitchValue(value) {
99616
+ if (value == null)
99617
+ return null;
99618
+ if (value.startsWith('"') && value.endsWith('"'))
99619
+ return unescapeQuotedToken(value.slice(1, -1));
99620
+ return value;
99621
+ }
99622
+ function applyGeneralFormat(result, value) {
99623
+ const mapped = GENERAL_FORMATS.get(value) ?? CASE_INSENSITIVE_GENERAL_FORMATS.get(value.toLowerCase());
99624
+ if (mapped)
99625
+ result.pageNumberFieldFormat = { format: mapped };
99626
+ }
99627
+ function unescapeQuotedToken(value) {
99628
+ return value.replace(/\\(["\\])/g, "$1");
99629
+ }
99630
+ function buildResultContentNodes(params3, outputMarks) {
99631
+ const { node: node3 } = params3;
99632
+ const resolvedNumber = node3.attrs?.resolvedNumber;
99633
+ if (node3.attrs?.resolvedNumberIsCurrent === true)
99634
+ return typeof resolvedNumber === "string" && resolvedNumber.length > 0 ? [buildResolvedNumberRun(resolvedNumber, outputMarks)] : [];
99635
+ if (Array.isArray(node3.content) && node3.content.length > 0)
99636
+ return node3.content.flatMap((n) => exportSchemaToJson({
99637
+ ...params3,
99638
+ node: n
99639
+ }));
99640
+ return typeof resolvedNumber === "string" && resolvedNumber.length > 0 ? [buildResolvedNumberRun(resolvedNumber, outputMarks)] : [];
99641
+ }
99642
+ function buildResolvedNumberRun(text$2, outputMarks) {
99643
+ return {
99644
+ name: "w:r",
99645
+ elements: [{
99646
+ name: "w:rPr",
99647
+ elements: outputMarks
99648
+ }, {
99649
+ name: "w:t",
99650
+ elements: [{
99651
+ type: "text",
99652
+ text: text$2
99653
+ }]
99654
+ }]
98854
99655
  };
98855
99656
  }
98856
99657
  function extractResolvedText(content$2) {
@@ -98976,14 +99777,16 @@ function getPageNumberFieldAttrs(node3) {
98976
99777
  attrs.pageNumberFormat = node3.attributes.pageNumberFormat;
98977
99778
  if (node3.attributes?.pageNumberZeroPadding != null)
98978
99779
  attrs.pageNumberZeroPadding = Number(node3.attributes.pageNumberZeroPadding);
99780
+ if (node3.attributes?.pageNumberNumericPicture)
99781
+ attrs.pageNumberNumericPicture = node3.attributes.pageNumberNumericPicture;
98979
99782
  return attrs;
98980
99783
  }
98981
99784
  function resolveCachedPageCount(params3, node3) {
98982
99785
  const cacheMap = params3.statFieldCacheMap;
98983
99786
  if (cacheMap?.has?.("NUMPAGES")) {
98984
99787
  const pageCount = Number(cacheMap.get("NUMPAGES"));
98985
- if (node3.attrs?.pageNumberFormat || node3.attrs?.pageNumberZeroPadding)
98986
- return formatPageNumberFieldValue(pageCount, node3.attrs);
99788
+ if (node3.attrs?.pageNumberFormat || node3.attrs?.pageNumberZeroPadding || node3.attrs?.pageNumberNumericPicture)
99789
+ return formatPageNumberFieldValue$1(pageCount, node3.attrs);
98987
99790
  return String(cacheMap.get("NUMPAGES"));
98988
99791
  }
98989
99792
  if (node3.attrs?.resolvedText)
@@ -101902,16 +102705,26 @@ function extractColumns(elements) {
101902
102705
  const equalWidth = equalWidthRaw === "0" || equalWidthRaw === 0 || equalWidthRaw === false ? false : equalWidthRaw === "1" || equalWidthRaw === 1 || equalWidthRaw === true ? true : undefined;
101903
102706
  const columnChildren = Array.isArray(cols.elements) ? cols.elements.filter((child) => child?.name === "w:col") : [];
101904
102707
  const isExplicit = equalWidth === false;
101905
- const firstChildSpace = columnChildren.find((child) => child?.attributes?.["w:space"] != null)?.attributes?.["w:space"];
101906
- const gapInches = parseColumnGap(isExplicit ? firstChildSpace ?? 0 : cols.attributes["w:space"]);
101907
- const widths = columnChildren.map((child) => Number(child.attributes?.["w:w"])).filter((widthTwips) => Number.isFinite(widthTwips) && widthTwips > 0).map((widthTwips) => widthTwips / 1440 * PX_PER_INCH$1);
101908
- if (isExplicit && widths.length > 0)
101909
- count2 = Math.min(count2, widths.length);
102708
+ const toPx = (twips) => twips / TWIPS_PER_INCH$2 * PX_PER_INCH$1;
102709
+ const columnRecords = columnChildren.map((child) => {
102710
+ const widthTwips = Number(child.attributes?.["w:w"]);
102711
+ const spaceTwips = Number(child.attributes?.["w:space"]);
102712
+ return {
102713
+ widthTwips,
102714
+ spaceTwips: Number.isFinite(spaceTwips) && spaceTwips > 0 ? spaceTwips : 0
102715
+ };
102716
+ }).filter((record) => Number.isFinite(record.widthTwips) && record.widthTwips > 0);
102717
+ if (isExplicit && columnRecords.length > 0)
102718
+ count2 = Math.min(count2, columnRecords.length);
102719
+ const widths = columnRecords.slice(0, count2).map((record) => toPx(record.widthTwips));
102720
+ const gaps = columnRecords.slice(0, Math.max(0, count2 - 1)).map((record) => toPx(record.spaceTwips));
102721
+ const gapPx = isExplicit ? toPx(columnRecords[0]?.spaceTwips ?? 0) : parseColumnGap(cols.attributes["w:space"]) * PX_PER_INCH$1;
101910
102722
  return {
101911
102723
  count: count2,
101912
- gap: gapInches * PX_PER_INCH$1,
102724
+ gap: gapPx,
101913
102725
  withSeparator,
101914
102726
  ...isExplicit && widths.length > 0 ? { widths } : {},
102727
+ ...isExplicit && gaps.length > 0 ? { gaps } : {},
101915
102728
  ...equalWidth !== undefined ? { equalWidth } : {}
101916
102729
  };
101917
102730
  }
@@ -102790,6 +103603,64 @@ function normalizeTextInsets(value) {
102790
103603
  left
102791
103604
  };
102792
103605
  }
103606
+ function isValidHeadingLevel(value) {
103607
+ return Number.isInteger(value) && value >= 1 && value <= 9;
103608
+ }
103609
+ function normalizeRestartLevel(value) {
103610
+ return isValidHeadingLevel(value) ? value : null;
103611
+ }
103612
+ function normalizeRestartNumber(value) {
103613
+ return Number.isFinite(value) && Number.isInteger(value) ? Math.trunc(value) : null;
103614
+ }
103615
+ function hasFieldArgument(field) {
103616
+ return typeof field?.fieldArgument === "string" && field.fieldArgument.trim().length > 0;
103617
+ }
103618
+ function formatSeqValue(value, field) {
103619
+ const picture = field?.numericPictureFormat?.picture;
103620
+ if (picture)
103621
+ return formatIntegerWithNumericPicture(value, picture);
103622
+ if (field?.pageNumberFieldFormat)
103623
+ return formatPageNumberFieldValue(value, field.pageNumberFieldFormat);
103624
+ return String(value);
103625
+ }
103626
+ function resolveSequenceFieldTokens(blocks) {
103627
+ const evaluator = new SequenceFieldEvaluator;
103628
+ for (const block of blocks)
103629
+ resolveBlock$1(block, evaluator);
103630
+ }
103631
+ function resolveBlock$1(block, evaluator) {
103632
+ if (block.kind === "paragraph") {
103633
+ resolveParagraph(block, evaluator);
103634
+ return;
103635
+ }
103636
+ if (block.kind === "table") {
103637
+ resolveTable2(block, evaluator);
103638
+ return;
103639
+ }
103640
+ if (block.kind === "list")
103641
+ resolveList(block, evaluator);
103642
+ }
103643
+ function resolveParagraph(block, evaluator) {
103644
+ evaluator.enterParagraph({ paragraphHeadingLevel: block.attrs?.headingLevel });
103645
+ for (const run$1 of block.runs)
103646
+ resolveRun(run$1, evaluator);
103647
+ }
103648
+ function resolveTable2(block, evaluator) {
103649
+ for (const row of block.rows)
103650
+ for (const cell of row.cells) {
103651
+ const childBlocks = cell.blocks ?? (cell.paragraph ? [cell.paragraph] : []);
103652
+ for (const childBlock of childBlocks)
103653
+ resolveBlock$1(childBlock, evaluator);
103654
+ }
103655
+ }
103656
+ function resolveList(block, evaluator) {
103657
+ for (const item of block.items)
103658
+ resolveParagraph(item.paragraph, evaluator);
103659
+ }
103660
+ function resolveRun(run$1, evaluator) {
103661
+ if ("token" in run$1 && run$1.token === "seq" && run$1.seqMetadata)
103662
+ run$1.text = evaluator.evaluateField(run$1.seqMetadata).text;
103663
+ }
102793
103664
  function shiftBlockPositions(block, delta) {
102794
103665
  if (block.kind === "paragraph") {
102795
103666
  const paragraphBlock = block;
@@ -103064,11 +103935,13 @@ function getPageNumberFieldFormat(attrs) {
103064
103935
  return;
103065
103936
  const format = typeof attrs.pageNumberFormat === "string" ? attrs.pageNumberFormat : undefined;
103066
103937
  const zeroPadding = typeof attrs.pageNumberZeroPadding === "number" && Number.isFinite(attrs.pageNumberZeroPadding) ? attrs.pageNumberZeroPadding : undefined;
103067
- if (!format && !zeroPadding)
103938
+ const numericPicture = typeof attrs.pageNumberNumericPicture === "string" && attrs.pageNumberNumericPicture.length > 0 ? attrs.pageNumberNumericPicture : undefined;
103939
+ if (!format && !zeroPadding && !numericPicture)
103068
103940
  return;
103069
103941
  return {
103070
103942
  ...format ? { format } : {},
103071
- ...zeroPadding ? { zeroPadding } : {}
103943
+ ...zeroPadding != null ? { zeroPadding } : {},
103944
+ ...numericPicture ? { numericPicture } : {}
103072
103945
  };
103073
103946
  }
103074
103947
  function textNodeToRun({ node: node3, positions, storyKey, defaultFont, defaultSize, inheritedMarks = [], sdtMetadata, hyperlinkConfig = DEFAULT_HYPERLINK_CONFIG, themeColors, enableComments, runProperties, inlineRunProperties, converterContext }) {
@@ -104033,10 +104906,17 @@ function pageReferenceNodeToBlock(params3) {
104033
104906
  const instruction = getNodeInstruction(node3) || "";
104034
104907
  const nodeAttrs = typeof node3.attrs === "object" && node3.attrs !== null ? node3.attrs : {};
104035
104908
  const mergedMarks = [...Array.isArray(nodeAttrs.marksAsAttrs) ? nodeAttrs.marksAsAttrs : [], ...inheritedMarks ?? []];
104036
- const bookmarkMatch = instruction.match(/PAGEREF\s+"?([^"\s\\]+)"?/i);
104037
- const bookmarkId = bookmarkMatch ? bookmarkMatch[1] : "";
104909
+ const parsed = parsePageRefInstruction(instruction);
104910
+ const bookmarkId = readStringAttr(nodeAttrs.bookmarkId) || parsed.bookmarkId;
104911
+ const hasHyperlinkSwitch = readBooleanAttr(nodeAttrs.hasHyperlinkSwitch) || parsed.hasHyperlinkSwitch;
104912
+ const hasRelativePositionSwitch = readBooleanAttr(nodeAttrs.hasRelativePositionSwitch) || parsed.hasRelativePositionSwitch;
104913
+ const pageNumberFieldFormat = readObjectAttr$1(nodeAttrs.pageNumberFieldFormat) ?? parsed.pageNumberFieldFormat;
104914
+ const numericPictureFormat = readObjectAttr$1(nodeAttrs.numericPictureFormat) ?? parsed.numericPictureFormat;
104915
+ const attrFieldResultFormat = readStringAttr(nodeAttrs.fieldResultFormat);
104916
+ const fieldResultFormat = attrFieldResultFormat === "charformat" || attrFieldResultFormat === "mergeformat" ? attrFieldResultFormat : parsed.fieldResultFormat;
104038
104917
  let runProperties = {};
104039
104918
  if (bookmarkId) {
104919
+ const fieldRunProperties = readObjectAttr$1(nodeAttrs.fieldRunProperties);
104040
104920
  let fallbackText = "??";
104041
104921
  if (Array.isArray(node3.content) && node3.content.length > 0) {
104042
104922
  const extractText = (n) => {
@@ -104050,6 +104930,10 @@ function pageReferenceNodeToBlock(params3) {
104050
104930
  };
104051
104931
  fallbackText = node3.content.map(extractText).join("").trim() || "??";
104052
104932
  }
104933
+ if (fieldResultFormat === "charformat" && fieldRunProperties)
104934
+ runProperties = fieldRunProperties;
104935
+ else if (Object.keys(runProperties).length === 0 && fieldRunProperties)
104936
+ runProperties = fieldRunProperties;
104053
104937
  const pageRefPos = positions.get(node3);
104054
104938
  const resolvedRunProperties = resolveRunProperties(converterContext, runProperties, paragraphProperties, null, false, false);
104055
104939
  const tokenRun = textNodeToRun({
@@ -104069,9 +104953,13 @@ function pageReferenceNodeToBlock(params3) {
104069
104953
  tokenRun.token = "pageReference";
104070
104954
  tokenRun.pageRefMetadata = {
104071
104955
  bookmarkId,
104072
- instruction
104956
+ instruction,
104957
+ ...hasRelativePositionSwitch ? { relativePosition: true } : {},
104958
+ ...pageNumberFieldFormat ? { pageNumberFieldFormat } : {},
104959
+ ...numericPictureFormat ? { numericPictureFormat } : {},
104960
+ ...fieldResultFormat ? { fieldResultFormat } : {}
104073
104961
  };
104074
- if (/\\h\b/i.test(instruction)) {
104962
+ if (hasHyperlinkSwitch) {
104075
104963
  const synthesized = buildFlowRunLink({ anchor: bookmarkId });
104076
104964
  if (synthesized)
104077
104965
  tokenRun.link = tokenRun.link ? {
@@ -104086,6 +104974,15 @@ function pageReferenceNodeToBlock(params3) {
104086
104974
  } else if (Array.isArray(node3.content))
104087
104975
  node3.content.forEach((child) => visitNode(child, mergedMarks, sdtMetadata, runProperties, false, parentInlineRunProperties));
104088
104976
  }
104977
+ function readStringAttr(value) {
104978
+ return typeof value === "string" ? value : "";
104979
+ }
104980
+ function readBooleanAttr(value) {
104981
+ return typeof value === "boolean" ? value : undefined;
104982
+ }
104983
+ function readObjectAttr$1(value) {
104984
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
104985
+ }
104089
104986
  function fieldAnnotationNodeToRun({ node: node3, positions }) {
104090
104987
  const fieldMetadata = resolveNodeSdtMetadata(node3, "fieldAnnotation");
104091
104988
  let contentText;
@@ -104439,15 +105336,31 @@ function crossReferenceNodeToRun(params3) {
104439
105336
  }
104440
105337
  function sequenceFieldNodeToRun(params3) {
104441
105338
  const { node: node3, positions, sdtMetadata } = params3;
104442
- const resolvedNumber = (node3.attrs ?? {}).resolvedNumber || "0";
105339
+ const attrs = node3.attrs ?? {};
105340
+ const cachedText = typeof attrs.resolvedNumber === "string" ? attrs.resolvedNumber : "";
104443
105341
  const run$1 = textNodeToRun({
104444
105342
  ...params3,
104445
105343
  node: {
104446
105344
  type: "text",
104447
- text: resolvedNumber,
105345
+ text: cachedText || "1",
104448
105346
  marks: [...node3.marks ?? []]
104449
105347
  }
104450
105348
  });
105349
+ run$1.token = "seq";
105350
+ run$1.seqMetadata = {
105351
+ identifier: String(attrs.identifier ?? ""),
105352
+ instruction: String(attrs.instruction ?? ""),
105353
+ fieldArgument: String(attrs.fieldArgument ?? ""),
105354
+ sequenceMode: attrs.sequenceMode === "current" ? "current" : "next",
105355
+ hideResult: attrs.hideResult === true,
105356
+ restartNumber: typeof attrs.restartNumber === "number" ? attrs.restartNumber : null,
105357
+ restartLevel: typeof attrs.restartLevel === "number" ? attrs.restartLevel : null,
105358
+ format: typeof attrs.format === "string" ? attrs.format : undefined,
105359
+ hasGeneralFormat: attrs.hasGeneralFormat === true,
105360
+ pageNumberFieldFormat: readObjectAttr(attrs.pageNumberFieldFormat),
105361
+ numericPictureFormat: readObjectAttr(attrs.numericPictureFormat),
105362
+ cachedText
105363
+ };
104451
105364
  const pos = positions.get(node3);
104452
105365
  if (pos) {
104453
105366
  run$1.pmStart = pos.start;
@@ -104457,6 +105370,9 @@ function sequenceFieldNodeToRun(params3) {
104457
105370
  run$1.sdt = sdtMetadata;
104458
105371
  return run$1;
104459
105372
  }
105373
+ function readObjectAttr(value) {
105374
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
105375
+ }
104460
105376
  function documentStatFieldNodeToRun(params3) {
104461
105377
  const { node: node3, positions, sdtMetadata } = params3;
104462
105378
  const attrs = node3.attrs ?? {};
@@ -105718,6 +106634,7 @@ function toFlowBlocks(pmDoc, options) {
105718
106634
  });
105719
106635
  const mergedBlocks = mergeFusedParagraphs(mergeDropCapParagraphs(hydrateImageBlocks(blocks, options?.mediaFiles)));
105720
106636
  stampTrackedChangeColors(mergedBlocks, options?.resolveTrackedChangeColor);
106637
+ resolveSequenceFieldTokens(mergedBlocks);
105721
106638
  flowBlockCache?.commit();
105722
106639
  return {
105723
106640
  blocks: mergedBlocks,
@@ -107363,6 +108280,20 @@ function pxToInches(value) {
107363
108280
  return;
107364
108281
  return value / PIXELS_PER_INCH;
107365
108282
  }
108283
+ function toSectionPageNumbering(numbering) {
108284
+ if (!numbering)
108285
+ return;
108286
+ const format = SECTION_PAGE_NUMBER_FORMATS.includes(numbering.format) ? numbering.format : undefined;
108287
+ const result = {
108288
+ start: numbering.start,
108289
+ format,
108290
+ chapterStyle: numbering.chapterStyle,
108291
+ chapterSeparator: numbering.chapterSeparator
108292
+ };
108293
+ if (result.start === undefined && result.format === undefined && result.chapterStyle === undefined && result.chapterSeparator === undefined)
108294
+ return;
108295
+ return result;
108296
+ }
107366
108297
  function buildSectionId(index2) {
107367
108298
  return `section-${index2}`;
107368
108299
  }
@@ -107539,7 +108470,7 @@ function sectionRangeToSectionDomain(range, address2, oddEvenHeadersFooters) {
107539
108470
  headerFooterMargins: hasHeaderFooterMargins ? headerFooterMargins : undefined,
107540
108471
  columns: hasColumns ? columns : undefined,
107541
108472
  lineNumbering: parsedLineNumbering,
107542
- pageNumbering: range.numbering ?? parsedPageNumbering,
108473
+ pageNumbering: toSectionPageNumbering(range.numbering) ?? parsedPageNumbering,
107543
108474
  titlePage: range.titlePg,
107544
108475
  oddEvenHeadersFooters,
107545
108476
  verticalAlign: range.vAlign ?? parsedVerticalAlign,
@@ -113529,7 +114460,7 @@ var isRegExp = (value) => {
113529
114460
  consumed: 1
113530
114461
  };
113531
114462
  }
113532
- }), createSingleIntegerPropertyHandler = (xmlName, sdName = null) => createSingleAttrPropertyHandler(xmlName, sdName, "w:val", parseInteger, integerToString), UNSUPPORTED_TABLE_IDENTITY_ATTRS, parseMeasurementValue = (value, type) => {
114463
+ }), createSingleIntegerPropertyHandler = (xmlName, sdName = null) => createSingleAttrPropertyHandler(xmlName, sdName, "w:val", parseInteger$1, integerToString), UNSUPPORTED_TABLE_IDENTITY_ATTRS, parseMeasurementValue = (value, type) => {
113533
114464
  if (value == null)
113534
114465
  return;
113535
114466
  const strValue = String(value);
@@ -113553,19 +114484,19 @@ var isRegExp = (value) => {
113553
114484
  encode: (attributes) => transformEncode(attributes[xmlName]),
113554
114485
  decode: (attributes) => transformDecode(attributes[sdName])
113555
114486
  };
113556
- }, createIntegerAttributeHandler = (xmlName, sdName = null) => createAttributeHandler(xmlName, sdName, parseInteger, integerToString), createBooleanAttributeHandler = (xmlName, sdName = null) => createAttributeHandler(xmlName, sdName, parseBoolean, booleanToString), parseBoolean = (value) => value != null ? [
114487
+ }, createIntegerAttributeHandler = (xmlName, sdName = null) => createAttributeHandler(xmlName, sdName, parseInteger$1, integerToString), createBooleanAttributeHandler = (xmlName, sdName = null) => createAttributeHandler(xmlName, sdName, parseBoolean, booleanToString), parseBoolean = (value) => value != null ? [
113557
114488
  "1",
113558
114489
  "true",
113559
114490
  "on",
113560
114491
  1,
113561
114492
  true
113562
- ].includes(value) : undefined, booleanToString = (value) => value != null ? value ? "1" : "0" : undefined, parseInteger = (value) => {
114493
+ ].includes(value) : undefined, booleanToString = (value) => value != null ? value ? "1" : "0" : undefined, parseInteger$1 = (value) => {
113563
114494
  if (value == null)
113564
114495
  return;
113565
114496
  const intValue = parseInt(value, 10);
113566
114497
  return isNaN(intValue) ? undefined : intValue;
113567
114498
  }, integerToString = (value) => {
113568
- const intValue = parseInteger(value);
114499
+ const intValue = parseInteger$1(value);
113569
114500
  return intValue != null ? String(intValue) : undefined;
113570
114501
  }, translator$46, translator$50, translator$48, translator$79, encode$73 = (attributes) => attributes?.["w:val"], decode$75 = (attrs) => attrs?.underline, attrConfig$29, encode$72 = (attributes) => attributes?.["w:color"], decode$74 = (attrs) => attrs?.color, attrConfig$30, encode$71 = (attributes) => attributes?.["w:themeColor"], decode$73 = (attrs) => attrs?.themeColor, attrConfig$31, encode$70 = (attributes) => attributes?.["w:themeTint"], decode$72 = (attrs) => attrs?.themeTint, attrConfig$32, encode$69 = (attributes) => attributes?.["w:themeShade"], decode$71 = (attrs) => attrs?.themeShade, attributes_default$7, XML_NODE_NAME$41 = "w:u", SD_ATTR_KEY$3 = "underline", encode$68 = (params3, encodedAttrs = {}) => {
113571
114502
  const { nodes } = params3;
@@ -114030,7 +114961,7 @@ var isRegExp = (value) => {
114030
114961
  }, stampTrackedChangeColors = (blocks, resolve2) => {
114031
114962
  for (const block of blocks)
114032
114963
  stampBlockTrackedChangeColors(block, resolve2);
114033
- }, idlessSdtContainerKeys, nextIdlessSdtContainerKey = 0, engines_exports, EMPTY_SDT_PLACEHOLDER_TEXT = "Click or tap here to enter text", FONT_SLOT_THEME_PAIRS, TABLE_STYLE_ID_TABLE_GRID = "TableGrid", TABLE_FALLBACK_BORDER, TABLE_FALLBACK_BORDERS, TABLE_FALLBACK_CELL_PADDING, DEFAULT_TBL_LOOK, CNF_STYLE_MAP, TABLE_STYLE_PRECEDENCE, getToCssFontFamily = () => {
114964
+ }, idlessSdtContainerKeys, nextIdlessSdtContainerKey = 0, MAX_BOOKMARK_MARKER_LEAD_DISTANCE = 3, engines_exports, EMPTY_SDT_PLACEHOLDER_TEXT = "Click or tap here to enter text", FONT_SLOT_THEME_PAIRS, TABLE_STYLE_ID_TABLE_GRID = "TableGrid", TABLE_FALLBACK_BORDER, TABLE_FALLBACK_BORDERS, TABLE_FALLBACK_CELL_PADDING, DEFAULT_TBL_LOOK, CNF_STYLE_MAP, TABLE_STYLE_PRECEDENCE, getToCssFontFamily = () => {
114034
114965
  return SuperConverter.toCssFontFamily;
114035
114966
  }, getSpacingStyle = (spacing, isListItem$1) => {
114036
114967
  let { before: before2, after: after2, line, lineRule, beforeAutospacing, afterAutospacing } = spacing;
@@ -119694,8 +120625,7 @@ var isRegExp = (value) => {
119694
120625
  domEnvironment$1 = env || null;
119695
120626
  }, MM_ANISOTROPIC = 8, EMF_SIGNATURE = 1179469088, EMF_PLUS_SIGNATURE = 726027589, EMR_COMMENT = 70, EMF_PLUS_OBJECT = 16392, EMF_PLUS_OBJECT_TYPE_IMAGE = 5, EMF_PLUS_IMAGE_TYPE_BITMAP = 1, EMF_PLUS_BITMAP_TYPE_PIXEL = 0, EMF_PLUS_BITMAP_TYPE_COMPRESSED = 1, EMF_PLUS_PIXEL_FORMAT_INDEXED_FLAG = 65536, EMF_PLUS_PIXEL_FORMAT_24BPP_RGB = 137224, EMF_PLUS_PIXEL_FORMAT_32BPP_RGB = 139273, EMF_PLUS_PIXEL_FORMAT_32BPP_ARGB = 2498570, EMF_PLUS_PIXEL_FORMAT_32BPP_PARGB = 925707, MAX_PIXEL_BITMAP_PIXELS = 1e8, base64ToArrayBuffer, require_common, require_trees, require_adler32, require_crc32, require_messages, require_deflate$1, require_strings, require_zstream, require_deflate, require_inffast, require_inftrees, require_inflate$1, require_constants2, require_gzheader, require_inflate, require_pako, import_UTIF, domEnvironment = null, MAX_PIXEL_COUNT = 1e8, setTiffDomEnvironment = (env) => {
119696
120627
  domEnvironment = env || null;
119697
- }, GENERAL_FORMATS, CASE_INSENSITIVE_GENERAL_FORMATS, getInstructionPreProcessor = (instruction) => {
119698
- const rawInstructionType = String(instruction ?? "").trim().split(/\s+/)[0];
120628
+ }, GENERAL_FORMATS, CASE_INSENSITIVE_GENERAL_FORMATS, TOKEN_PATTERN$1, getInstructionPreProcessor = (instruction) => {
119699
120629
  switch (extractFieldKeyword(instruction)) {
119700
120630
  case "PAGE":
119701
120631
  return preProcessPageInstruction;
@@ -119725,8 +120655,6 @@ var isRegExp = (value) => {
119725
120655
  case "STYLEREF":
119726
120656
  return preProcessStylerefInstruction;
119727
120657
  case "SEQ":
119728
- if (rawInstructionType !== "SEQ")
119729
- return null;
119730
120658
  return preProcessSeqInstruction;
119731
120659
  case "CITATION":
119732
120660
  return preProcessCitationInstruction;
@@ -119744,6 +120672,8 @@ var isRegExp = (value) => {
119744
120672
  let collectedNodesStack = [];
119745
120673
  let rawCollectedNodesStack = [];
119746
120674
  let fieldRunRPrStack = [];
120675
+ let firstInstrTextRunRPrStack = [];
120676
+ let firstInstrTextRunSeenStack = [];
119747
120677
  let currentFieldStack = [];
119748
120678
  let unpairedEnd = null;
119749
120679
  let unpairedEndPreserveRaw = null;
@@ -119754,10 +120684,12 @@ var isRegExp = (value) => {
119754
120684
  const collectedNodes = collectedNodesStack.pop().filter((n) => n !== null);
119755
120685
  const rawCollectedNodes = rawCollectedNodesStack.pop().filter((n) => n !== null);
119756
120686
  const fieldRunRPr = fieldRunRPrStack.pop() ?? null;
120687
+ const firstInstrTextRunRPr = firstInstrTextRunRPrStack.pop() ?? null;
120688
+ firstInstrTextRunSeenStack.pop();
119757
120689
  const currentField = currentFieldStack.pop();
119758
120690
  let outputNodes = rawCollectedNodes;
119759
120691
  if (!currentField.preserveRaw) {
119760
- const combinedResult = _processCombinedNodesForFldChar(collectedNodes, currentField.instrText.trim(), docx, currentField.instructionTokens, fieldRunRPr);
120692
+ const combinedResult = _processCombinedNodesForFldChar(collectedNodes, currentField.instrText.trim(), docx, currentField.instructionTokens, fieldRunRPr, firstInstrTextRunRPr);
119761
120693
  outputNodes = combinedResult.handled ? combinedResult.nodes : rawCollectedNodes;
119762
120694
  } else if (currentField.preserveRawConstructive)
119763
120695
  applyConstructiveFieldInterpretation(outputNodes, currentField.instrText.trim(), docx);
@@ -119819,6 +120751,8 @@ var isRegExp = (value) => {
119819
120751
  rawNodeSourceTokens.set(rawNode, rawSourceToken);
119820
120752
  capturedRawNodes.add(rawNode);
119821
120753
  fieldRunRPrStack.push(extractFieldRunRPr(node3));
120754
+ firstInstrTextRunRPrStack.push(null);
120755
+ firstInstrTextRunSeenStack.push(false);
119822
120756
  currentFieldStack.push({
119823
120757
  instrText: "",
119824
120758
  instructionTokens: [],
@@ -119835,6 +120769,10 @@ var isRegExp = (value) => {
119835
120769
  const fieldRunRPr = extractFieldRunRPr(node3);
119836
120770
  if (fieldRunRPr)
119837
120771
  fieldRunRPrStack[fieldRunRPrStack.length - 1] = fieldRunRPr;
120772
+ if (instrTextEl && !firstInstrTextRunSeenStack[firstInstrTextRunSeenStack.length - 1]) {
120773
+ firstInstrTextRunSeenStack[firstInstrTextRunSeenStack.length - 1] = true;
120774
+ firstInstrTextRunRPrStack[firstInstrTextRunRPrStack.length - 1] = fieldRunRPr;
120775
+ }
119838
120776
  currentField.instructionTokens.push(...instructionTokens);
119839
120777
  const instrTextValue = instrTextEl?.elements?.[0]?.text;
119840
120778
  if (instrTextValue != null)
@@ -119933,14 +120871,15 @@ var isRegExp = (value) => {
119933
120871
  unpairedEnd,
119934
120872
  unpairedEndPreserveRaw
119935
120873
  };
119936
- }, _processCombinedNodesForFldChar = (nodesToCombine = [], instrText, docx, instructionTokens, fieldRunRPr) => {
120874
+ }, _processCombinedNodesForFldChar = (nodesToCombine = [], instrText, docx, instructionTokens, fieldRunRPr, firstInstrTextRunRPr) => {
119937
120875
  const instructionPreProcessor = getInstructionPreProcessor(instrText);
119938
120876
  if (instructionPreProcessor)
119939
120877
  return {
119940
120878
  nodes: instructionPreProcessor(nodesToCombine, instrText, {
119941
120879
  docx,
119942
120880
  instructionTokens,
119943
- fieldRunRPr
120881
+ fieldRunRPr,
120882
+ firstInstrTextRunRPr
119944
120883
  }),
119945
120884
  handled: true
119946
120885
  };
@@ -125310,11 +126249,11 @@ var isRegExp = (value) => {
125310
126249
  }, decode$29 = (attrs) => {
125311
126250
  return attrs.ed;
125312
126251
  }, attrConfig$8, encode$28 = (attributes) => {
125313
- return parseInteger(attributes["w:colFirst"]);
126252
+ return parseInteger$1(attributes["w:colFirst"]);
125314
126253
  }, decode$28 = (attrs) => {
125315
126254
  return integerToString(attrs.colFirst);
125316
126255
  }, attrConfig$9, encode$27 = (attributes) => {
125317
- return parseInteger(attributes["w:colLast"]);
126256
+ return parseInteger$1(attributes["w:colLast"]);
125318
126257
  }, decode$27 = (attrs) => {
125319
126258
  return integerToString(attrs.colLast);
125320
126259
  }, attributes_default$3, XML_NODE_NAME$20 = "w:permStart", SD_NODE_NAME$20, encode$26 = (params3, encodedAttrs = {}) => {
@@ -125353,7 +126292,44 @@ var isRegExp = (value) => {
125353
126292
  if (decodedAttrs && Object.keys(decodedAttrs).length)
125354
126293
  result.attributes = decodedAttrs;
125355
126294
  return result;
125356
- }, config$20, translator$16, XML_NODE_NAME$18 = "sd:pageReference", SD_NODE_NAME$18 = "pageReference", encode$22 = (params3) => {
126295
+ }, config$20, translator$16, buildInstructionElements = (instruction, instructionTokens) => {
126296
+ const tokens = Array.isArray(instructionTokens) ? instructionTokens : [];
126297
+ if (tokens.length > 0)
126298
+ return tokens.map((tokenLike) => {
126299
+ if (typeof tokenLike === "string")
126300
+ return {
126301
+ name: "w:instrText",
126302
+ attributes: { "xml:space": "preserve" },
126303
+ elements: [{
126304
+ type: "text",
126305
+ text: tokenLike
126306
+ }]
126307
+ };
126308
+ const token = tokenLike;
126309
+ if (token?.type === "tab")
126310
+ return {
126311
+ name: "w:tab",
126312
+ elements: []
126313
+ };
126314
+ const text$2 = token?.text ?? "";
126315
+ return {
126316
+ name: "w:instrText",
126317
+ attributes: { "xml:space": "preserve" },
126318
+ elements: [{
126319
+ type: "text",
126320
+ text: text$2
126321
+ }]
126322
+ };
126323
+ });
126324
+ return [{
126325
+ name: "w:instrText",
126326
+ attributes: { "xml:space": "preserve" },
126327
+ elements: [{
126328
+ type: "text",
126329
+ text: instruction ?? ""
126330
+ }]
126331
+ }];
126332
+ }, XML_NODE_NAME$18 = "sd:pageReference", SD_NODE_NAME$18 = "pageReference", encode$22 = (params3) => {
125357
126333
  const { nodes = [], nodeListHandler } = params3 || {};
125358
126334
  const node3 = nodes[0];
125359
126335
  const processedText = nodeListHandler.handler({
@@ -125364,7 +126340,15 @@ var isRegExp = (value) => {
125364
126340
  type: "pageReference",
125365
126341
  attrs: {
125366
126342
  instruction: node3.attributes?.instruction || "",
125367
- marksAsAttrs: node3.marks || []
126343
+ marksAsAttrs: node3.marks || [],
126344
+ ...node3.attributes?.instructionTokens ? { instructionTokens: node3.attributes.instructionTokens } : {},
126345
+ ...node3.attributes?.bookmarkId ? { bookmarkId: node3.attributes.bookmarkId } : {},
126346
+ ...node3.attributes?.hasHyperlinkSwitch ? { hasHyperlinkSwitch: true } : {},
126347
+ ...node3.attributes?.hasRelativePositionSwitch ? { hasRelativePositionSwitch: true } : {},
126348
+ ...node3.attributes?.pageNumberFieldFormat ? { pageNumberFieldFormat: node3.attributes.pageNumberFieldFormat } : {},
126349
+ ...node3.attributes?.numericPictureFormat ? { numericPictureFormat: node3.attributes.numericPictureFormat } : {},
126350
+ ...node3.attributes?.fieldResultFormat ? { fieldResultFormat: node3.attributes.fieldResultFormat } : {},
126351
+ ...node3.attributes?.fieldRunProperties ? { fieldRunProperties: node3.attributes.fieldRunProperties } : {}
125368
126352
  },
125369
126353
  content: processedText
125370
126354
  };
@@ -125375,6 +126359,8 @@ var isRegExp = (value) => {
125375
126359
  ...params3,
125376
126360
  node: n
125377
126361
  }));
126362
+ const instructionElements = buildInstructionElements(node3.attrs?.instruction, node3.attrs?.instructionTokens);
126363
+ const instructionRunProperties = resolveInstructionRunProperties(params3, outputMarks);
125378
126364
  return [
125379
126365
  {
125380
126366
  name: "w:r",
@@ -125390,15 +126376,8 @@ var isRegExp = (value) => {
125390
126376
  name: "w:r",
125391
126377
  elements: [{
125392
126378
  name: "w:rPr",
125393
- elements: outputMarks
125394
- }, {
125395
- name: "w:instrText",
125396
- attributes: { "xml:space": "preserve" },
125397
- elements: [{
125398
- type: "text",
125399
- text: `${node3.attrs.instruction}`
125400
- }]
125401
- }]
126379
+ elements: instructionRunProperties
126380
+ }, ...instructionElements]
125402
126381
  },
125403
126382
  {
125404
126383
  name: "w:r",
@@ -125422,44 +126401,17 @@ var isRegExp = (value) => {
125422
126401
  }]
125423
126402
  }
125424
126403
  ];
125425
- }, config$19, translator$17, buildInstructionElements = (instruction, instructionTokens) => {
125426
- const tokens = Array.isArray(instructionTokens) ? instructionTokens : [];
125427
- if (tokens.length > 0)
125428
- return tokens.map((tokenLike) => {
125429
- if (typeof tokenLike === "string")
125430
- return {
125431
- name: "w:instrText",
125432
- attributes: { "xml:space": "preserve" },
125433
- elements: [{
125434
- type: "text",
125435
- text: tokenLike
125436
- }]
125437
- };
125438
- const token = tokenLike;
125439
- if (token?.type === "tab")
125440
- return {
125441
- name: "w:tab",
125442
- elements: []
125443
- };
125444
- const text$2 = token?.text ?? "";
125445
- return {
125446
- name: "w:instrText",
125447
- attributes: { "xml:space": "preserve" },
125448
- elements: [{
125449
- type: "text",
125450
- text: text$2
125451
- }]
125452
- };
125453
- });
125454
- return [{
125455
- name: "w:instrText",
125456
- attributes: { "xml:space": "preserve" },
125457
- elements: [{
125458
- type: "text",
125459
- text: instruction ?? ""
125460
- }]
125461
- }];
125462
- }, XML_NODE_NAME$17 = "sd:crossReference", SD_NODE_NAME$17 = "crossReference", encode$21 = (params3) => {
126404
+ }, resolveInstructionRunProperties = (params3, outputMarks) => {
126405
+ const { node: node3 } = params3;
126406
+ const fieldRunProperties = node3.attrs?.fieldRunProperties;
126407
+ if (!(node3.attrs?.fieldResultFormat === "charformat" && fieldRunProperties && typeof fieldRunProperties === "object" && !Array.isArray(fieldRunProperties) && Object.keys(fieldRunProperties).length > 0))
126408
+ return outputMarks;
126409
+ const fieldRunPropertiesNode = translator$133.decode({
126410
+ ...params3,
126411
+ node: { attrs: { runProperties: fieldRunProperties } }
126412
+ });
126413
+ return Array.isArray(fieldRunPropertiesNode?.elements) ? fieldRunPropertiesNode.elements : outputMarks;
126414
+ }, config$19, translator$17, XML_NODE_NAME$17 = "sd:crossReference", SD_NODE_NAME$17 = "crossReference", encode$21 = (params3) => {
125463
126415
  const { nodes = [], nodeListHandler } = params3 || {};
125464
126416
  const node3 = nodes[0];
125465
126417
  const processedText = nodeListHandler.handler({
@@ -125703,7 +126655,7 @@ var isRegExp = (value) => {
125703
126655
  ...params3,
125704
126656
  node: n
125705
126657
  })), buildInstructionElements(node3.attrs?.instruction, node3.attrs?.instructionTokens), node3.attrs?.wrapperParagraphProperties ?? null);
125706
- }, config$14, translator$22, XML_NODE_NAME$12 = "sd:sequenceField", SD_NODE_NAME$12 = "sequenceField", encode$16 = (params3) => {
126658
+ }, config$14, translator$22, TOKEN_PATTERN, XML_NODE_NAME$12 = "sd:sequenceField", SD_NODE_NAME$12 = "sequenceField", encode$16 = (params3) => {
125707
126659
  const { nodes = [], nodeListHandler } = params3 || {};
125708
126660
  const node3 = nodes[0];
125709
126661
  const processedText = nodeListHandler.handler({
@@ -125711,16 +126663,15 @@ var isRegExp = (value) => {
125711
126663
  nodes: node3.elements || []
125712
126664
  });
125713
126665
  const instruction = node3.attributes?.instruction || "";
125714
- const { identifier, format, restartLevel } = parseSeqInstruction(instruction);
126666
+ const parsedAttrs = sequenceFieldAttrsFromParsed(parseSeqInstruction(instruction));
125715
126667
  return {
125716
126668
  type: SD_NODE_NAME$12,
125717
126669
  attrs: {
125718
126670
  instruction,
125719
126671
  instructionTokens: node3.attributes?.instructionTokens || null,
125720
- identifier,
125721
- format,
125722
- restartLevel,
126672
+ ...parsedAttrs,
125723
126673
  resolvedNumber: extractResolvedText(processedText),
126674
+ resolvedNumberIsCurrent: false,
125724
126675
  marksAsAttrs: node3.marks || []
125725
126676
  },
125726
126677
  content: processedText
@@ -125728,10 +126679,7 @@ var isRegExp = (value) => {
125728
126679
  }, decode$16 = (params3) => {
125729
126680
  const { node: node3 } = params3;
125730
126681
  const outputMarks = processOutputMarks(node3.attrs?.marksAsAttrs || []);
125731
- const contentNodes = (node3.content ?? []).flatMap((n) => exportSchemaToJson({
125732
- ...params3,
125733
- node: n
125734
- }));
126682
+ const contentNodes = buildResultContentNodes(params3, outputMarks);
125735
126683
  const instructionElements = buildInstructionElements(node3.attrs?.instruction, node3.attrs?.instructionTokens);
125736
126684
  return [
125737
126685
  {
@@ -126671,7 +127619,7 @@ var isRegExp = (value) => {
126671
127619
  }),
126672
127620
  consumed: 1
126673
127621
  };
126674
- }, alternateChoiceHandler, autoPageHandlerEntity, autoTotalPageCountEntity, sectionPageCountEntity, documentStatFieldHandlerEntity, pageReferenceEntity, crossReferenceEntity, handlePictNode = (params3) => {
127622
+ }, alternateChoiceHandler, autoPageHandlerEntity, autoTotalPageCountEntity, sectionPageCountEntity, documentStatFieldHandlerEntity, pageReferenceEntity, crossReferenceEntity, sequenceFieldEntity, handlePictNode = (params3) => {
126675
127623
  const { nodes } = params3;
126676
127624
  if (!Array.isArray(nodes) || nodes.length === 0 || nodes[0]?.name !== "w:pict")
126677
127625
  return {
@@ -127584,6 +128532,7 @@ var isRegExp = (value) => {
127584
128532
  documentStatFieldHandlerEntity,
127585
128533
  pageReferenceEntity,
127586
128534
  crossReferenceEntity,
128535
+ sequenceFieldEntity,
127587
128536
  permStartHandlerEntity,
127588
128537
  permEndHandlerEntity,
127589
128538
  mathNodeHandlerEntity,
@@ -128951,6 +129900,83 @@ var isRegExp = (value) => {
128951
129900
  width: typeof maybe.width === "string" && LINE_END_SIZES.has(maybe.width) ? maybe.width : undefined,
128952
129901
  length: typeof maybe.length === "string" && LINE_END_SIZES.has(maybe.length) ? maybe.length : undefined
128953
129902
  };
129903
+ }, SequenceFieldEvaluator = class {
129904
+ constructor(options = {}) {
129905
+ this.counters = new Map(options.initialCounters ?? []);
129906
+ this.headingSerialsByLevel = /* @__PURE__ */ new Map;
129907
+ this.lastResetSerialByIdentifierLevel = /* @__PURE__ */ new Map;
129908
+ }
129909
+ enterParagraph(context = {}) {
129910
+ const level = context.paragraphHeadingLevel;
129911
+ if (!isValidHeadingLevel(level))
129912
+ return;
129913
+ this.headingSerialsByLevel.set(level, (this.headingSerialsByLevel.get(level) ?? 0) + 1);
129914
+ for (let deeperLevel = level + 1;deeperLevel <= 9; deeperLevel += 1)
129915
+ this.headingSerialsByLevel.delete(deeperLevel);
129916
+ }
129917
+ evaluateField(field) {
129918
+ const identifier = normalizeSeqIdentifier(field?.identifier);
129919
+ const cachedText = typeof field?.cachedText === "string" ? field.cachedText : "";
129920
+ if (!identifier)
129921
+ return {
129922
+ value: null,
129923
+ text: cachedText,
129924
+ hidden: false
129925
+ };
129926
+ if (hasFieldArgument(field)) {
129927
+ if (cachedText)
129928
+ return {
129929
+ value: null,
129930
+ text: cachedText,
129931
+ hidden: false
129932
+ };
129933
+ if (!this.counters.has(identifier))
129934
+ return {
129935
+ value: null,
129936
+ text: "",
129937
+ hidden: false
129938
+ };
129939
+ const value$1 = this.counters.get(identifier);
129940
+ return {
129941
+ value: value$1,
129942
+ text: formatSeqValue(value$1, field),
129943
+ hidden: false
129944
+ };
129945
+ }
129946
+ const restartLevel = normalizeRestartLevel(field?.restartLevel);
129947
+ if (restartLevel != null) {
129948
+ const key = `${identifier}|${restartLevel}`;
129949
+ const serial = this.headingSerialsByLevel.get(restartLevel) ?? 0;
129950
+ const previousSerial = this.lastResetSerialByIdentifierLevel.get(key);
129951
+ if (previousSerial === undefined || serial !== previousSerial) {
129952
+ this.counters.set(identifier, 0);
129953
+ this.lastResetSerialByIdentifierLevel.set(key, serial);
129954
+ }
129955
+ }
129956
+ const restartNumber = normalizeRestartNumber(field?.restartNumber);
129957
+ let value;
129958
+ if (restartNumber != null) {
129959
+ this.counters.set(identifier, restartNumber);
129960
+ value = restartNumber;
129961
+ } else if (field?.sequenceMode === "current") {
129962
+ if (!this.counters.has(identifier))
129963
+ return {
129964
+ value: 0,
129965
+ text: cachedText,
129966
+ hidden: false
129967
+ };
129968
+ value = this.counters.get(identifier);
129969
+ } else {
129970
+ value = (this.counters.get(identifier) ?? 0) + 1;
129971
+ this.counters.set(identifier, value);
129972
+ }
129973
+ const hidden = Boolean(field?.hideResult && !field.hasGeneralFormat && !field.numericPictureFormat);
129974
+ return {
129975
+ value,
129976
+ text: hidden ? "" : formatSeqValue(value, field),
129977
+ hidden
129978
+ };
129979
+ }
128954
129980
  }, getNodeRevision = (node3) => {
128955
129981
  const attrs = node3?.attrs;
128956
129982
  if (!attrs)
@@ -129516,6 +130542,10 @@ var isRegExp = (value) => {
129516
130542
  const styleOutlineLevel = styleDefinition?.paragraphProperties?.outlineLvl;
129517
130543
  if (typeof styleOutlineLevel === "number" && Number.isInteger(styleOutlineLevel))
129518
130544
  return normalizeHeadingLevel(styleOutlineLevel + 1);
130545
+ }, resolveParagraphHeadingLevel = (paragraphProperties, converterContext) => {
130546
+ const properties = paragraphProperties ?? {};
130547
+ const resolvedParagraphProperties = converterContext ? resolveParagraphProperties(converterContext, properties, converterContext.tableInfo) : properties;
130548
+ return resolveHeadingLevel(resolvedParagraphProperties.styleId, resolvedParagraphProperties, converterContext);
129519
130549
  }, TRACKED_CHANGE_KEYS, hasExplicitParagraphRunProperties = (paragraphProperties) => {
129520
130550
  if (paragraphProperties?.runProperties == null)
129521
130551
  return false;
@@ -131618,7 +132648,7 @@ var isRegExp = (value) => {
131618
132648
  return;
131619
132649
  updateGhostListMarkerOffsets(node3, paragraphBlocks, context);
131620
132650
  applyGhostListMarkerOffsets(node3, paragraphBlocks, context);
131621
- }, INLINE_CONVERTERS_REGISTRY, SHAPE_CONVERTERS_REGISTRY, JUSTIFICATION_TO_ALIGN, DEFAULT_FONT = "Times New Roman", DEFAULT_SIZE2, nodeHandlers, converters, CommentMarkName = "commentMark", LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, FALLBACK_PREFIX, UUID_LIKE_PATTERN, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, PAGE_NUMBER_CHAPTER_SEPARATOR_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH = 96, SETTINGS_PART_PATH = "word/settings.xml", VALID_EDIT_MODES, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "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, FOOTER_FILE_PATTERN, SOURCE_HEADER_FOOTER_LOCAL = "header-footer-sync:local", HEADER_PATTERN, FOOTER_PATTERN, DEFAULT_HDR_FTR_ATTRS, HEADER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", VALID_VARIANTS, FOOTNOTES_PART_ID = "word/footnotes.xml", ENDNOTES_PART_ID = "word/endnotes.xml", FOOTNOTES_CONFIG, ENDNOTES_CONFIG, NOTES_XMLNS, footnotesPartDescriptor, endnotesPartDescriptor, storeByEditor, liveSessionsByHost, cacheByHost, hostStoreSyncedKeys, BODY_LOCATOR, findMarkPosition = (doc$2, pos, markName) => {
132651
+ }, INLINE_CONVERTERS_REGISTRY, SHAPE_CONVERTERS_REGISTRY, JUSTIFICATION_TO_ALIGN, DEFAULT_FONT = "Times New Roman", DEFAULT_SIZE2, nodeHandlers, converters, CommentMarkName = "commentMark", LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, FALLBACK_PREFIX, UUID_LIKE_PATTERN, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, PAGE_NUMBER_CHAPTER_SEPARATOR_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH = 96, SECTION_PAGE_NUMBER_FORMATS, SETTINGS_PART_PATH = "word/settings.xml", VALID_EDIT_MODES, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "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, FOOTER_FILE_PATTERN, SOURCE_HEADER_FOOTER_LOCAL = "header-footer-sync:local", HEADER_PATTERN, FOOTER_PATTERN, DEFAULT_HDR_FTR_ATTRS, HEADER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", VALID_VARIANTS, FOOTNOTES_PART_ID = "word/footnotes.xml", ENDNOTES_PART_ID = "word/endnotes.xml", FOOTNOTES_CONFIG, ENDNOTES_CONFIG, NOTES_XMLNS, footnotesPartDescriptor, endnotesPartDescriptor, storeByEditor, liveSessionsByHost, cacheByHost, hostStoreSyncedKeys, BODY_LOCATOR, findMarkPosition = (doc$2, pos, markName) => {
131622
132652
  const $pos = doc$2.resolve(pos);
131623
132653
  const parent = $pos.parent;
131624
132654
  const start = parent.childAfter($pos.parentOffset);
@@ -131723,7 +132753,7 @@ var isRegExp = (value) => {
131723
132753
  state.kern = kernNode.attributes["w:val"];
131724
132754
  }
131725
132755
  }, SuperConverter;
131726
- var init_SuperConverter_DBsJeu9t_es = __esm(() => {
132756
+ var init_SuperConverter_D2zNnC50_es = __esm(() => {
131727
132757
  init_rolldown_runtime_Bg48TavK_es();
131728
132758
  init_jszip_C49i9kUs_es();
131729
132759
  init_xml_js_CqGKpaft_es();
@@ -148190,7 +149220,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
148190
149220
  translator$114
148191
149221
  ];
148192
149222
  translator$116 = NodeTranslator.from(createNestedPropertiesTranslator("w:numPr", "numberingProperties", propertyTranslators$15));
148193
- translator$121 = NodeTranslator.from(createSingleAttrPropertyHandler("w:outlineLvl", "outlineLvl", "w:val", parseInteger, integerToString));
149223
+ translator$121 = NodeTranslator.from(createSingleAttrPropertyHandler("w:outlineLvl", "outlineLvl", "w:val", parseInteger$1, integerToString));
148194
149224
  translator$122 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:overflowPunct"));
148195
149225
  translator$49 = NodeTranslator.from(createBorderPropertyHandler("w:bar"));
148196
149226
  translator$213 = NodeTranslator.from(createBorderPropertyHandler("w:between"));
@@ -148497,7 +149527,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
148497
149527
  };
148498
149528
  translator$6 = NodeTranslator.from(config$32);
148499
149529
  translator$186 = NodeTranslator.from(createMeasurementPropertyHandler("w:tcW", "cellWidth"));
148500
- translator$73 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridSpan", null, "w:val", (v) => parseInteger(v) ?? undefined, (v) => integerToString(v)));
149530
+ translator$73 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridSpan", null, "w:val", (v) => parseInteger$1(v) ?? undefined, (v) => integerToString(v)));
148501
149531
  translator$181 = NodeTranslator.from(createSingleAttrPropertyHandler("w:vMerge", null, "w:val", (val) => !val ? "continue" : val));
148502
149532
  translator$67 = NodeTranslator.from(createBorderPropertyHandler("w:end"));
148503
149533
  translator$206 = NodeTranslator.from(createMeasurementPropertyHandler("w:end", "marginEnd"));
@@ -148611,8 +149641,8 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
148611
149641
  encode: ({ nodes }) => ["1", "true"].includes(nodes[0].attributes?.["w:val"] ?? "1"),
148612
149642
  decode: ({ node: node3 }) => node3.attrs?.cantSplit ? { attributes: {} } : undefined
148613
149643
  });
148614
- translator$70 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridAfter", null, "w:val", (v) => parseInteger(v) ?? undefined, (v) => integerToString(v)));
148615
- translator$71 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridBefore", null, "w:val", (v) => parseInteger(v) ?? undefined, (v) => integerToString(v)));
149644
+ translator$70 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridAfter", null, "w:val", (v) => parseInteger$1(v) ?? undefined, (v) => integerToString(v)));
149645
+ translator$71 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridBefore", null, "w:val", (v) => parseInteger$1(v) ?? undefined, (v) => integerToString(v)));
148616
149646
  translator$76 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:hidden"));
148617
149647
  translator$159 = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "tableCellSpacing"));
148618
149648
  translator$162 = NodeTranslator.from({
@@ -160526,9 +161556,11 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
160526
161556
  ["ROMAN", "upperRoman"],
160527
161557
  ["alphabetic", "lowerLetter"],
160528
161558
  ["ALPHABETIC", "upperLetter"],
160529
- ["ArabicDash", "numberInDash"]
161559
+ ["ArabicDash", "numberInDash"],
161560
+ ["Ordinal", "ordinal"]
160530
161561
  ]);
160531
161562
  CASE_INSENSITIVE_GENERAL_FORMATS = new Map([["arabic", "decimal"], ["arabicdash", "numberInDash"]]);
161563
+ TOKEN_PATTERN$1 = /"((?:[^"\\]|\\.)*)"|'((?:[^'\\]|\\.)*)'|\\[#*]|\\[^\s]+|[^\s]+/g;
160532
161564
  TRACK_CHANGE_ELEMENT_NAMES = new Set([
160533
161565
  "w:del",
160534
161566
  "w:ins",
@@ -167890,7 +168922,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
167890
168922
  "w:bottomFromText",
167891
168923
  "w:tblpX",
167892
168924
  "w:tblpY"
167893
- ].map((attr) => createAttributeHandler(attr, null, parseInteger, integerToString)).concat([
168925
+ ].map((attr) => createAttributeHandler(attr, null, parseInteger$1, integerToString)).concat([
167894
168926
  "w:horzAnchor",
167895
168927
  "w:vertAnchor",
167896
168928
  "w:tblpXSpec",
@@ -167963,7 +168995,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
167963
168995
  translator$204 = NodeTranslator.from(createNestedPropertiesTranslator("w:tblStylePr", "tableStyleProperties", propertyTranslators$2, {}, attributeHandlers$1));
167964
168996
  DEFAULT_CONTENT_WIDTH_TWIPS = 12240 - 2 * 1440;
167965
168997
  MIN_COLUMN_WIDTH_TWIPS = pixelsToTwips(10);
167966
- translator$72 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridCol", "col", "w:w", parseInteger, integerToString));
168998
+ translator$72 = NodeTranslator.from(createSingleAttrPropertyHandler("w:gridCol", "col", "w:w", parseInteger$1, integerToString));
167967
168999
  cellMinWidth = pixelsToTwips(10);
167968
169000
  config$25 = {
167969
169001
  xmlName: XML_NODE_NAME$25,
@@ -168199,6 +169231,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
168199
169231
  decode: decode$17
168200
169232
  };
168201
169233
  translator$22 = NodeTranslator.from(config$14);
169234
+ TOKEN_PATTERN = /"((?:[^"\\]|\\.)*)"|\\[#*](?=\s|$)|\\[^\s]+|[^\s]+/g;
168202
169235
  config$13 = {
168203
169236
  xmlName: XML_NODE_NAME$12,
168204
169237
  sdNodeOrKeyName: SD_NODE_NAME$12,
@@ -168893,6 +169926,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
168893
169926
  documentStatFieldHandlerEntity = generateV2HandlerEntity("documentStatFieldHandler", translator$30);
168894
169927
  pageReferenceEntity = generateV2HandlerEntity("pageReferenceNodeHandler", translator$17);
168895
169928
  crossReferenceEntity = generateV2HandlerEntity("crossReferenceNodeHandler", translator$18);
169929
+ sequenceFieldEntity = generateV2HandlerEntity("sequenceFieldNodeHandler", translator$23);
168896
169930
  pictNodeHandlerEntity = {
168897
169931
  handlerName: "handlePictNode",
168898
169932
  handler: handlePictNode
@@ -169523,6 +170557,14 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
169523
170557
  "both"
169524
170558
  ];
169525
170559
  readSectPrHeaderFooterRefs = readSectPrRefsByKind;
170560
+ SECTION_PAGE_NUMBER_FORMATS = [
170561
+ "decimal",
170562
+ "lowerLetter",
170563
+ "upperLetter",
170564
+ "lowerRoman",
170565
+ "upperRoman",
170566
+ "numberInDash"
170567
+ ];
169526
170568
  VALID_EDIT_MODES = new Set([
169527
170569
  "readOnly",
169528
170570
  "comments",
@@ -170758,7 +171800,7 @@ var init_SuperConverter_DBsJeu9t_es = __esm(() => {
170758
171800
  };
170759
171801
  });
170760
171802
 
170761
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-BiY_0zZP.es.js
171803
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-COmoIa5Q.es.js
170762
171804
  function parseSizeUnit(val = "0") {
170763
171805
  const length3 = val.toString() || "0";
170764
171806
  const value = Number.parseFloat(length3);
@@ -181091,8 +182133,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, normalizeActorId = (value) => {
181091
182133
  }
181092
182134
  };
181093
182135
  };
181094
- var init_create_headless_toolbar_BiY_0zZP_es = __esm(() => {
181095
- init_SuperConverter_DBsJeu9t_es();
182136
+ var init_create_headless_toolbar_COmoIa5Q_es = __esm(() => {
182137
+ init_SuperConverter_D2zNnC50_es();
181096
182138
  init_uuid_qzgm05fK_es();
181097
182139
  init_constants_D9qj59G2_es();
181098
182140
  init_dist_B8HfvhaK_es();
@@ -230255,7 +231297,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
230255
231297
  init_remark_gfm_BhnWr3yf_es();
230256
231298
  });
230257
231299
 
230258
- // ../../packages/superdoc/dist/chunks/src-DYT7-l3i.es.js
231300
+ // ../../packages/superdoc/dist/chunks/src-eTZqPcFn.es.js
230259
231301
  function deleteProps(obj, propOrProps) {
230260
231302
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
230261
231303
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -235236,7 +236278,7 @@ function tableStartFromCell($cell) {
235236
236278
  return $cell.before(d) + 1;
235237
236279
  return null;
235238
236280
  }
235239
- function resolveTable2(tr, tablePos, tableNode) {
236281
+ function resolveTable3(tr, tablePos, tableNode) {
235240
236282
  if (tableNode && tableNode.type && tableNode.type.name === "table")
235241
236283
  return tableNode;
235242
236284
  if (typeof tablePos === "number") {
@@ -236277,8 +237319,10 @@ function createTextElement2(textContent$1, textAlign, width, height, options = {
236277
237319
  chapterSeparator: pageNumberChapterSeparator
236278
237320
  });
236279
237321
  }
236280
- if (part.fieldType === "NUMPAGES")
236281
- return totalPages != null ? String(totalPages) : "1";
237322
+ if (part.fieldType === "NUMPAGES") {
237323
+ const count2 = totalPages ?? 1;
237324
+ return part.pageNumberFormat ? formatPageNumber(count2, part.pageNumberFormat) : String(count2);
237325
+ }
236282
237326
  if (part.fieldType === "SECTIONPAGES") {
236283
237327
  if (sectionPageCount == null)
236284
237328
  return part.text ?? "1";
@@ -236494,7 +237538,7 @@ function findAllFields(doc$12) {
236494
237538
  const counter = blockOccurrenceCounters.get(blockId) ?? 0;
236495
237539
  blockOccurrenceCounters.set(blockId, counter + 1);
236496
237540
  const fieldType = extractFieldType$1(instruction);
236497
- const resolvedText = node3.attrs?.resolvedText ?? "";
237541
+ const resolvedText = node3.type.name === "sequenceField" ? node3.attrs?.resolvedNumber ?? "" : node3.attrs?.resolvedText ?? "";
236498
237542
  results.push({
236499
237543
  pos,
236500
237544
  blockId,
@@ -236579,12 +237623,130 @@ function resolveSectionPageCountFieldValue(editor, node3) {
236579
237623
  const pageNumberFormat = typeof node3.attrs?.pageNumberFormat === "string" && node3.attrs.pageNumberFormat ? node3.attrs.pageNumberFormat : undefined;
236580
237624
  const pageNumberZeroPadding = typeof node3.attrs?.pageNumberZeroPadding === "number" && Number.isFinite(node3.attrs.pageNumberZeroPadding) ? node3.attrs.pageNumberZeroPadding : undefined;
236581
237625
  if (pageNumberFormat || pageNumberZeroPadding != null)
236582
- return formatPageNumberFieldValue$1(Number(sectionPageCount) || 1, {
237626
+ return formatPageNumberFieldValue(Number(sectionPageCount) || 1, {
236583
237627
  ...pageNumberFormat ? { format: pageNumberFormat } : {},
236584
237628
  ...pageNumberZeroPadding != null ? { zeroPadding: pageNumberZeroPadding } : {}
236585
237629
  });
236586
237630
  return String(sectionPageCount);
236587
237631
  }
237632
+ function updateSequenceFieldsInTransaction(args$1) {
237633
+ const { tr, scope = { kind: "all" }, converterContext } = args$1;
237634
+ const sequenceFieldType = args$1.schema.nodes.sequenceField;
237635
+ if (!sequenceFieldType)
237636
+ return {
237637
+ changed: false,
237638
+ updated: 0
237639
+ };
237640
+ const evaluator = new SequenceFieldEvaluator;
237641
+ let changed = false;
237642
+ let updated = 0;
237643
+ tr.doc.descendants((node3, pos) => {
237644
+ if (node3.type.name === "paragraph") {
237645
+ evaluator.enterParagraph({ paragraphHeadingLevel: resolveNodeHeadingLevel(node3, converterContext) });
237646
+ return true;
237647
+ }
237648
+ if (node3.type !== sequenceFieldType)
237649
+ return true;
237650
+ const nextAttrs = buildEvaluatedSequenceAttrs(node3);
237651
+ const evaluation = evaluator.evaluateField({
237652
+ identifier: nextAttrs.identifier,
237653
+ instruction: nextAttrs.instruction,
237654
+ fieldArgument: nextAttrs.fieldArgument,
237655
+ sequenceMode: nextAttrs.sequenceMode,
237656
+ hideResult: nextAttrs.hideResult,
237657
+ restartNumber: nextAttrs.restartNumber,
237658
+ restartLevel: nextAttrs.restartLevel,
237659
+ format: nextAttrs.format,
237660
+ hasGeneralFormat: nextAttrs.hasGeneralFormat,
237661
+ pageNumberFieldFormat: nextAttrs.pageNumberFieldFormat,
237662
+ numericPictureFormat: nextAttrs.numericPictureFormat,
237663
+ cachedText: typeof node3.attrs.resolvedNumber === "string" ? node3.attrs.resolvedNumber : ""
237664
+ });
237665
+ if (!shouldWriteSequenceField(node3, pos, scope, nextAttrs.identifier))
237666
+ return true;
237667
+ nextAttrs.resolvedNumber = evaluation.text;
237668
+ nextAttrs.resolvedNumberIsCurrent = true;
237669
+ if (!attrsEqual(node3.attrs, nextAttrs)) {
237670
+ tr.setNodeMarkup(resolveCurrentTransactionPos(tr, pos, node3), undefined, nextAttrs);
237671
+ changed = true;
237672
+ }
237673
+ updated += 1;
237674
+ return true;
237675
+ });
237676
+ return {
237677
+ changed,
237678
+ updated
237679
+ };
237680
+ }
237681
+ function getSequenceFieldUpdaterConverterContext(editor) {
237682
+ const converter = editor?.converter;
237683
+ if (!converter?.translatedLinkedStyles)
237684
+ return;
237685
+ return {
237686
+ translatedLinkedStyles: converter.translatedLinkedStyles,
237687
+ translatedNumbering: converter.translatedNumbering ?? {},
237688
+ docx: converter.docx
237689
+ };
237690
+ }
237691
+ function resolveNodeHeadingLevel(node3, converterContext) {
237692
+ const paragraphProperties = node3.attrs?.paragraphProperties;
237693
+ if (converterContext)
237694
+ return resolveParagraphHeadingLevel(isRecord$3(paragraphProperties) ? paragraphProperties : undefined, converterContext);
237695
+ }
237696
+ function buildEvaluatedSequenceAttrs(node3) {
237697
+ const instruction = typeof node3.attrs.instruction === "string" ? node3.attrs.instruction : "";
237698
+ const parsedAttrs = sequenceFieldAttrsFromParsed(parseSeqInstruction(instruction));
237699
+ return {
237700
+ ...node3.attrs,
237701
+ instruction,
237702
+ ...parsedAttrs,
237703
+ identifier: parsedAttrs.identifier || readStringAttr2(node3, "identifier")
237704
+ };
237705
+ }
237706
+ function shouldWriteSequenceField(node3, pos, scope, identifier) {
237707
+ if (scope.kind === "all")
237708
+ return true;
237709
+ if (scope.kind === "range") {
237710
+ const end$1 = pos + node3.nodeSize;
237711
+ return pos < scope.to && end$1 > scope.from;
237712
+ }
237713
+ return normalizeSeqIdentifier(identifier) === normalizeSeqIdentifier(scope.identifier);
237714
+ }
237715
+ function readStringAttr2(node3, key2) {
237716
+ const value = node3.attrs?.[key2];
237717
+ return typeof value === "string" ? value : "";
237718
+ }
237719
+ function attrsEqual(left$1, right$1) {
237720
+ const keys$1 = new Set([...Object.keys(left$1), ...Object.keys(right$1)]);
237721
+ for (const key2 of keys$1)
237722
+ if (!valuesEqual(left$1[key2], right$1[key2]))
237723
+ return false;
237724
+ return true;
237725
+ }
237726
+ function valuesEqual(left$1, right$1) {
237727
+ if (Object.is(left$1, right$1))
237728
+ return true;
237729
+ if (!isRecord$3(left$1) || !isRecord$3(right$1))
237730
+ return false;
237731
+ const keys$1 = new Set([...Object.keys(left$1), ...Object.keys(right$1)]);
237732
+ for (const key2 of keys$1)
237733
+ if (!valuesEqual(left$1[key2], right$1[key2]))
237734
+ return false;
237735
+ return true;
237736
+ }
237737
+ function resolveCurrentTransactionPos(tr, pos, node3) {
237738
+ if (tr.doc.nodeAt(pos)?.type === node3.type)
237739
+ return pos;
237740
+ return tr.mapping.map(pos);
237741
+ }
237742
+ function isRecord$3(value) {
237743
+ return value !== null && typeof value === "object" && !Array.isArray(value);
237744
+ }
237745
+ function resolveTotalPageNumberFieldValue(stats, node3) {
237746
+ if (stats.pages == null)
237747
+ return null;
237748
+ return formatPageNumberFieldValue(stats.pages, getPageNumberFieldFormat(node3.attrs));
237749
+ }
236588
237750
  function createCascadeToggleCommands({ markName, setCommand, unsetCommand, toggleCommand, negationAttrs, isNegation, extendEmptyMarkRange } = {}) {
236589
237751
  if (!markName)
236590
237752
  throw new Error("createCascadeToggleCommands requires a markName");
@@ -266119,7 +267281,7 @@ function isCaptionParagraph(node3) {
266119
267281
  const seqField = findSeqField(node3);
266120
267282
  if (!seqField)
266121
267283
  return false;
266122
- return (seqField.attrs?.instruction ?? "").trim().startsWith("SEQ ");
267284
+ return isSeqInstruction(seqField.attrs?.instruction ?? "");
266123
267285
  }
266124
267286
  function findSeqField(node3) {
266125
267287
  let seqNode = null;
@@ -266271,14 +267433,17 @@ function captionsInsertWrapper(editor, input2, options) {
266271
267433
  const children = [];
266272
267434
  const schema = editor.schema;
266273
267435
  children.push(schema.text(`${label} `));
266274
- if (schema.nodes.sequenceField)
267436
+ if (schema.nodes.sequenceField) {
267437
+ const instruction = `SEQ ${label} \\* ARABIC`;
267438
+ const parsed = parseSeqInstruction(instruction);
266275
267439
  children.push(schema.nodes.sequenceField.create({
266276
- instruction: `SEQ ${label} \\* ARABIC`,
266277
- identifier: label,
266278
- format: "ARABIC",
267440
+ instruction,
267441
+ ...sequenceFieldAttrsFromParsed(parsed),
266279
267442
  resolvedNumber: "",
267443
+ resolvedNumberIsCurrent: false,
266280
267444
  sdBlockId: `seq-${Date.now()}`
266281
267445
  }));
267446
+ }
266282
267447
  if (input2.text) {
266283
267448
  const captionContent = buildTextWithTabs(schema, `: ${input2.text}`, undefined);
266284
267449
  if (captionContent instanceof Fragment)
@@ -266289,6 +267454,15 @@ function captionsInsertWrapper(editor, input2, options) {
266289
267454
  const captionParagraph = schema.nodes.paragraph.create(buildCaptionParagraphAttrs(nodeId), children);
266290
267455
  const { tr } = editor.state;
266291
267456
  tr.insert(pos, captionParagraph);
267457
+ updateSequenceFieldsInTransaction({
267458
+ tr,
267459
+ schema,
267460
+ scope: {
267461
+ kind: "identifier",
267462
+ identifier: label
267463
+ },
267464
+ converterContext: getSequenceFieldUpdaterConverterContext(editor)
267465
+ });
266292
267466
  editor.dispatch(tr);
266293
267467
  clearIndexCache(editor);
266294
267468
  return true;
@@ -266365,18 +267539,29 @@ function captionsConfigureWrapper(editor, input2, options) {
266365
267539
  return true;
266366
267540
  const format = CAPTION_FORMAT_TO_OOXML[input2.format ?? "decimal"] ?? "ARABIC";
266367
267541
  const newInstruction = `SEQ ${input2.label} \\* ${format}`;
266368
- if (node3.attrs.instruction === newInstruction && node3.attrs.format === format)
267542
+ const parsedAttrs = sequenceFieldAttrsFromParsed(parseSeqInstruction(newInstruction));
267543
+ if (node3.attrs.instruction === newInstruction && node3.attrs.format === format && JSON.stringify(node3.attrs.pageNumberFieldFormat) === JSON.stringify(parsedAttrs.pageNumberFieldFormat))
266369
267544
  return true;
266370
267545
  tr.setNodeMarkup(tr.mapping.map(pos), undefined, {
266371
267546
  ...node3.attrs,
266372
267547
  instruction: newInstruction,
266373
- format
267548
+ ...parsedAttrs,
267549
+ resolvedNumberIsCurrent: false
266374
267550
  });
266375
267551
  changed = true;
266376
267552
  return true;
266377
267553
  });
266378
267554
  if (!changed)
266379
267555
  return false;
267556
+ updateSequenceFieldsInTransaction({
267557
+ tr,
267558
+ schema: editor.schema,
267559
+ scope: {
267560
+ kind: "identifier",
267561
+ identifier: input2.label
267562
+ },
267563
+ converterContext: getSequenceFieldUpdaterConverterContext(editor)
267564
+ });
266380
267565
  editor.dispatch(tr);
266381
267566
  clearIndexCache(editor);
266382
267567
  return true;
@@ -266437,7 +267622,7 @@ function fieldsInsertWrapper(editor, input2, options) {
266437
267622
  if (DOCUMENT_STAT_FIELD_TYPES.has(fieldType))
266438
267623
  return insertDocumentStatField(editor, input2, resolved, options);
266439
267624
  if (fieldType === "NUMPAGES")
266440
- return insertNumPagesField(editor, resolved, options);
267625
+ return insertNumPagesField(editor, input2, resolved, options);
266441
267626
  if (fieldType === "SECTIONPAGES")
266442
267627
  return insertSectionPagesField(editor, input2, resolved, options);
266443
267628
  return insertRawField(editor, input2, resolved, options);
@@ -266463,14 +267648,15 @@ function insertDocumentStatField(editor, input2, resolved, options) {
266463
267648
  return fieldFailure("NO_OP", "Insert produced no change.");
266464
267649
  return fieldSuccess(computeFieldAddress(editor.state.doc, resolved.from));
266465
267650
  }
266466
- function insertNumPagesField(editor, resolved, options) {
267651
+ function insertNumPagesField(editor, input2, resolved, options) {
266467
267652
  if (!Boolean(editor.options?.isHeaderOrFooter))
266468
267653
  return fieldFailure("INVALID_INPUT", "fields.insert: NUMPAGES insertion is only supported in headers/footers.");
266469
267654
  const nodeType = editor.schema.nodes["total-page-number"];
266470
267655
  if (!nodeType)
266471
267656
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "fields.insert: total-page-number node type not in schema.");
267657
+ const parsedInstruction = parsePageNumberFieldSwitches(input2.instruction, "NUMPAGES");
266472
267658
  if (!receiptApplied$2(executeDomainCommand(editor, () => {
266473
- const node3 = nodeType.create({});
267659
+ const node3 = nodeType.create(parsedInstruction);
266474
267660
  const { tr } = editor.state;
266475
267661
  tr.insert(resolved.from, node3);
266476
267662
  editor.dispatch(tr);
@@ -266513,7 +267699,14 @@ function insertRawField(editor, input2, resolved, options) {
266513
267699
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "fields.insert: sequenceField node type not in schema.");
266514
267700
  if (!receiptApplied$2(executeDomainCommand(editor, () => {
266515
267701
  const fieldType = extractFieldType(input2.instruction);
266516
- const node3 = fieldNodeType.create({
267702
+ const parsed = isSeqInstruction(input2.instruction) ? parseSeqInstruction(input2.instruction) : null;
267703
+ const node3 = fieldNodeType.create(parsed ? {
267704
+ instruction: input2.instruction,
267705
+ ...sequenceFieldAttrsFromParsed(parsed),
267706
+ resolvedNumber: "",
267707
+ resolvedNumberIsCurrent: false,
267708
+ sdBlockId: `field-${Date.now()}`
267709
+ } : {
266517
267710
  instruction: input2.instruction,
266518
267711
  identifier: fieldType,
266519
267712
  format: "ARABIC",
@@ -266522,6 +267715,16 @@ function insertRawField(editor, input2, resolved, options) {
266522
267715
  });
266523
267716
  const { tr } = editor.state;
266524
267717
  tr.insert(resolved.from, node3);
267718
+ if (parsed)
267719
+ updateSequenceFieldsInTransaction({
267720
+ tr,
267721
+ schema: editor.schema,
267722
+ scope: {
267723
+ kind: "identifier",
267724
+ identifier: parsed.identifier
267725
+ },
267726
+ converterContext: getSequenceFieldUpdaterConverterContext(editor)
267727
+ });
266525
267728
  editor.dispatch(tr);
266526
267729
  clearIndexCache(editor);
266527
267730
  return true;
@@ -266549,6 +267752,8 @@ function fieldsRebuildWrapper(editor, input2, options) {
266549
267752
  return rebuildTotalPageNumber(editor, resolved, address2, options);
266550
267753
  if (node3.type.name === "section-page-count")
266551
267754
  return rebuildSectionPageCount(editor, resolved, address2, options);
267755
+ if (node3.type.name === "sequenceField" && isSeqInstruction(node3.attrs?.instruction ?? ""))
267756
+ return rebuildSequenceFields(editor, address2, options);
266552
267757
  if (!receiptApplied$2(executeDomainCommand(editor, () => {
266553
267758
  const { tr } = editor.state;
266554
267759
  const currentNode = tr.doc.nodeAt(resolved.pos);
@@ -266565,6 +267770,22 @@ function fieldsRebuildWrapper(editor, input2, options) {
266565
267770
  return fieldFailure("NO_OP", "Rebuild produced no change.");
266566
267771
  return fieldSuccess(address2);
266567
267772
  }
267773
+ function rebuildSequenceFields(editor, address2, options) {
267774
+ executeDomainCommand(editor, () => {
267775
+ const { tr } = editor.state;
267776
+ if (updateSequenceFieldsInTransaction({
267777
+ tr,
267778
+ schema: editor.schema,
267779
+ scope: { kind: "all" },
267780
+ converterContext: getSequenceFieldUpdaterConverterContext(editor)
267781
+ }).changed) {
267782
+ editor.dispatch(tr);
267783
+ clearIndexCache(editor);
267784
+ }
267785
+ return true;
267786
+ }, { expectedRevision: options?.expectedRevision });
267787
+ return fieldSuccess(address2);
267788
+ }
266568
267789
  function rebuildDocumentStatField(editor, resolved, address2, options) {
266569
267790
  const stats = getWordStatistics(resolveMainBodyEditor(editor));
266570
267791
  const node3 = editor.state.doc.nodeAt(resolved.pos);
@@ -266591,7 +267812,10 @@ function rebuildTotalPageNumber(editor, resolved, address2, options) {
266591
267812
  const stats = getWordStatistics(resolveMainBodyEditor(editor));
266592
267813
  if (stats.pages == null)
266593
267814
  return fieldSuccess(address2);
266594
- const freshValue = String(stats.pages);
267815
+ const node3 = editor.state.doc.nodeAt(resolved.pos);
267816
+ if (!node3)
267817
+ return fieldFailure("TARGET_NOT_FOUND", "Node not found.");
267818
+ const freshValue = formatPageNumberFieldValue(stats.pages, getPageNumberFieldFormat(node3.attrs));
266595
267819
  if (!receiptApplied$2(executeDomainCommand(editor, () => {
266596
267820
  const { tr } = editor.state;
266597
267821
  const currentNode = tr.doc.nodeAt(resolved.pos);
@@ -270539,6 +271763,20 @@ function isSettled(status) {
270539
271763
  function normalizeFamilyKey$2(family$1) {
270540
271764
  return family$1.trim().replace(/^["']|["']$/g, "").toLowerCase();
270541
271765
  }
271766
+ function deriveBundledSubstitutes() {
271767
+ const substitutes = {};
271768
+ for (const row2 of SUBSTITUTION_EVIDENCE)
271769
+ if (row2.policyAction === "substitute" && row2.physicalFamily)
271770
+ substitutes[normalizeFamilyKey$2(row2.logicalFamily)] = row2.physicalFamily;
271771
+ return Object.freeze(substitutes);
271772
+ }
271773
+ function deriveCategoryFallbacks() {
271774
+ const fallbacks = {};
271775
+ for (const row2 of SUBSTITUTION_EVIDENCE)
271776
+ if (row2.policyAction === "category_fallback" && row2.physicalFamily)
271777
+ fallbacks[normalizeFamilyKey$2(row2.logicalFamily)] = row2.physicalFamily;
271778
+ return Object.freeze(fallbacks);
271779
+ }
270542
271780
  function stripFamilyQuotes(family$1) {
270543
271781
  return family$1.trim().replace(/^["']|["']$/g, "");
270544
271782
  }
@@ -270660,7 +271898,7 @@ function buildFontReport(logicalFamilies, registry2, resolver2) {
270660
271898
  reason,
270661
271899
  loadStatus,
270662
271900
  exportFamily: logical,
270663
- missing: isSettled(loadStatus) && loadStatus !== "loaded"
271901
+ missing: reason === "category_fallback" || isSettled(loadStatus) && loadStatus !== "loaded"
270664
271902
  });
270665
271903
  }
270666
271904
  return report;
@@ -270686,7 +271924,7 @@ function buildFaceReport(usedFaces, registry2, resolver2) {
270686
271924
  weight,
270687
271925
  style: style2
270688
271926
  });
270689
- const missing = reason === "fallback_face_absent" || isSettled(loadStatus) && loadStatus !== "loaded";
271927
+ const missing = reason === "fallback_face_absent" || reason === "category_fallback" || isSettled(loadStatus) && loadStatus !== "loaded";
270690
271928
  report.push({
270691
271929
  logicalFamily,
270692
271930
  physicalFamily,
@@ -271860,6 +273098,30 @@ function resolveDrawingItem(fragment2, fragmentIndex, pageIndex, blockMap) {
271860
273098
  item.pmEnd = fragment2.pmEnd;
271861
273099
  return item;
271862
273100
  }
273101
+ function resolvePageRefText(args$1) {
273102
+ const formattedTargetPageText = formatTargetPageText(args$1.target, args$1.metadata);
273103
+ if (!args$1.metadata.relativePosition)
273104
+ return formattedTargetPageText;
273105
+ if (args$1.sourcePage !== args$1.target.physicalPage)
273106
+ return `on page ${formattedTargetPageText}`;
273107
+ return args$1.target.pmPosition != null && args$1.sourcePmPosition != null && args$1.target.pmPosition < args$1.sourcePmPosition ? "above" : "below";
273108
+ }
273109
+ function formatTargetPageText(target, metadata) {
273110
+ const displayNumber = Math.max(1, Math.trunc(Number.isFinite(target.displayNumber) ? target.displayNumber : 1));
273111
+ if (metadata.numericPictureFormat)
273112
+ return formatChapterPageNumberText({
273113
+ pageComponent: formatIntegerWithNumericPicture(displayNumber, metadata.numericPictureFormat.picture),
273114
+ chapterNumberText: target.chapterNumberText,
273115
+ chapterSeparator: target.chapterSeparator
273116
+ });
273117
+ if (metadata.pageNumberFieldFormat)
273118
+ return formatChapterPageNumberText({
273119
+ pageComponent: formatPageNumberFieldValue(displayNumber, metadata.pageNumberFieldFormat),
273120
+ chapterNumberText: target.chapterNumberText,
273121
+ chapterSeparator: target.chapterSeparator
273122
+ });
273123
+ return target.displayText;
273124
+ }
271863
273125
  function buildBlockMap(blocks2, measures) {
271864
273126
  const map$12 = /* @__PURE__ */ new Map;
271865
273127
  for (let i4 = 0;i4 < blocks2.length; i4++)
@@ -271869,6 +273131,257 @@ function buildBlockMap(blocks2, measures) {
271869
273131
  });
271870
273132
  return map$12;
271871
273133
  }
273134
+ function resolveParagraphPageRefs(fragment2, block, measure, context) {
273135
+ const runTexts = collectResolvedPageRefRunTexts(block, context);
273136
+ if (runTexts.size === 0)
273137
+ return {
273138
+ block,
273139
+ fragment: fragment2,
273140
+ changed: false
273141
+ };
273142
+ const nextRuns = resolvePageRefRuns(block, runTexts);
273143
+ const nextLines = (fragment2.lines ?? measure.lines.slice(fragment2.fromLine, fragment2.toLine)).map((line) => adjustLineForResolvedPageRefs(line, runTexts));
273144
+ return {
273145
+ block: {
273146
+ ...block,
273147
+ runs: nextRuns
273148
+ },
273149
+ fragment: {
273150
+ ...fragment2,
273151
+ lines: nextLines
273152
+ },
273153
+ changed: true
273154
+ };
273155
+ }
273156
+ function resolveParagraphPageRefBlock(block, measure, context) {
273157
+ const runTexts = collectResolvedPageRefRunTexts(block, context);
273158
+ if (runTexts.size === 0)
273159
+ return {
273160
+ block,
273161
+ changed: false
273162
+ };
273163
+ return {
273164
+ block: {
273165
+ ...block,
273166
+ runs: resolvePageRefRuns(block, runTexts)
273167
+ },
273168
+ measure: measure ? {
273169
+ ...measure,
273170
+ lines: measure.lines.map((line) => adjustLineForResolvedPageRefs(line, runTexts))
273171
+ } : undefined,
273172
+ changed: true
273173
+ };
273174
+ }
273175
+ function collectResolvedPageRefRunTexts(block, context) {
273176
+ const runTexts = /* @__PURE__ */ new Map;
273177
+ if (!context?.anchorMap?.size)
273178
+ return runTexts;
273179
+ block.runs.forEach((run2, index2) => {
273180
+ if (!isPageReferenceTextRun(run2))
273181
+ return;
273182
+ const target = context.anchorMap?.get(run2.pageRefMetadata.bookmarkId);
273183
+ if (!target)
273184
+ return;
273185
+ const resolvedText = resolvePageRefText({
273186
+ sourcePage: context.sourcePage,
273187
+ sourcePmPosition: run2.pmStart,
273188
+ target,
273189
+ metadata: run2.pageRefMetadata
273190
+ });
273191
+ if (resolvedText !== run2.text)
273192
+ runTexts.set(index2, {
273193
+ text: resolvedText,
273194
+ originalLength: run2.text.length
273195
+ });
273196
+ });
273197
+ return runTexts;
273198
+ }
273199
+ function resolvePageRefRuns(block, runTexts) {
273200
+ return block.runs.map((run2, index2) => runTexts.has(index2) && isTextRun$5(run2) ? {
273201
+ ...run2,
273202
+ text: runTexts.get(index2).text
273203
+ } : run2);
273204
+ }
273205
+ function resolveTablePageRefs(block, measure, context) {
273206
+ if (!context?.anchorMap?.size)
273207
+ return {
273208
+ block,
273209
+ changed: false
273210
+ };
273211
+ let changed = false;
273212
+ let measureChanged = false;
273213
+ const measureRows = measure?.rows.slice();
273214
+ const rows = block.rows.map((row2, rowIndex) => {
273215
+ let rowChanged = false;
273216
+ const measureRow = measureRows?.[rowIndex];
273217
+ const measureCells = measureRow?.cells.slice();
273218
+ const cells = row2.cells.map((cell2, cellIndex) => {
273219
+ let cellChanged = false;
273220
+ let nextParagraph = cell2.paragraph;
273221
+ let nextCellMeasure = measureCells?.[cellIndex];
273222
+ if (cell2.paragraph) {
273223
+ const resolved = resolveParagraphPageRefBlock(cell2.paragraph, nextCellMeasure?.paragraph, context);
273224
+ nextParagraph = resolved.block;
273225
+ if (resolved.measure && nextCellMeasure)
273226
+ nextCellMeasure = {
273227
+ ...nextCellMeasure,
273228
+ paragraph: resolved.measure
273229
+ };
273230
+ cellChanged ||= resolved.changed;
273231
+ }
273232
+ let nextBlocks = cell2.blocks;
273233
+ let nextBlockMeasures = nextCellMeasure?.blocks;
273234
+ if (cell2.blocks)
273235
+ nextBlocks = cell2.blocks.map((childBlock, childIndex) => {
273236
+ const childMeasure = nextBlockMeasures?.[childIndex];
273237
+ if (childBlock.kind === "paragraph") {
273238
+ const resolved = resolveParagraphPageRefBlock(childBlock, childMeasure?.kind === "paragraph" ? childMeasure : undefined, context);
273239
+ if (resolved.measure && nextBlockMeasures) {
273240
+ nextBlockMeasures = nextBlockMeasures.slice();
273241
+ nextBlockMeasures[childIndex] = resolved.measure;
273242
+ }
273243
+ cellChanged ||= resolved.changed;
273244
+ return resolved.block;
273245
+ }
273246
+ if (childBlock.kind === "table") {
273247
+ const resolved = resolveTablePageRefs(childBlock, childMeasure?.kind === "table" ? childMeasure : undefined, context);
273248
+ if (resolved.measure && nextBlockMeasures) {
273249
+ nextBlockMeasures = nextBlockMeasures.slice();
273250
+ nextBlockMeasures[childIndex] = resolved.measure;
273251
+ }
273252
+ cellChanged ||= resolved.changed;
273253
+ return resolved.block;
273254
+ }
273255
+ return childBlock;
273256
+ });
273257
+ if (!cellChanged)
273258
+ return cell2;
273259
+ rowChanged = true;
273260
+ if (nextCellMeasure && measureCells) {
273261
+ if (nextBlockMeasures && nextBlockMeasures !== nextCellMeasure.blocks)
273262
+ nextCellMeasure = {
273263
+ ...nextCellMeasure,
273264
+ blocks: nextBlockMeasures
273265
+ };
273266
+ measureCells[cellIndex] = nextCellMeasure;
273267
+ measureChanged = true;
273268
+ }
273269
+ return {
273270
+ ...cell2,
273271
+ ...nextParagraph ? { paragraph: nextParagraph } : {},
273272
+ ...nextBlocks ? { blocks: nextBlocks } : {}
273273
+ };
273274
+ });
273275
+ if (!rowChanged)
273276
+ return row2;
273277
+ changed = true;
273278
+ if (measureRow && measureCells && measureCells !== measureRow.cells)
273279
+ measureRows[rowIndex] = {
273280
+ ...measureRow,
273281
+ cells: measureCells
273282
+ };
273283
+ return {
273284
+ ...row2,
273285
+ cells
273286
+ };
273287
+ });
273288
+ return changed ? {
273289
+ block: {
273290
+ ...block,
273291
+ rows
273292
+ },
273293
+ measure: measure && measureChanged && measureRows ? {
273294
+ ...measure,
273295
+ rows: measureRows
273296
+ } : measure,
273297
+ changed: true
273298
+ } : {
273299
+ block,
273300
+ changed: false
273301
+ };
273302
+ }
273303
+ function resolveListItemPageRefs(block, itemId, measure, context) {
273304
+ if (!context?.anchorMap?.size)
273305
+ return {
273306
+ block,
273307
+ changed: false
273308
+ };
273309
+ let changed = false;
273310
+ let measureChanged = false;
273311
+ const measureItems = measure?.items.slice();
273312
+ const items = block.items.map((item) => {
273313
+ if (item.id !== itemId)
273314
+ return item;
273315
+ const itemMeasureIndex = measureItems?.findIndex((candidate) => candidate.itemId === itemId) ?? -1;
273316
+ const itemMeasure = itemMeasureIndex >= 0 ? measureItems?.[itemMeasureIndex] : undefined;
273317
+ const resolved = resolveParagraphPageRefBlock(item.paragraph, itemMeasure?.paragraph, context);
273318
+ if (!resolved.changed)
273319
+ return item;
273320
+ if (resolved.measure && itemMeasure && measureItems) {
273321
+ measureItems[itemMeasureIndex] = {
273322
+ ...itemMeasure,
273323
+ paragraph: resolved.measure
273324
+ };
273325
+ measureChanged = true;
273326
+ }
273327
+ changed = true;
273328
+ return {
273329
+ ...item,
273330
+ paragraph: resolved.block
273331
+ };
273332
+ });
273333
+ return changed ? {
273334
+ block: {
273335
+ ...block,
273336
+ items
273337
+ },
273338
+ measure: measure && measureChanged && measureItems ? {
273339
+ ...measure,
273340
+ items: measureItems
273341
+ } : measure,
273342
+ changed: true
273343
+ } : {
273344
+ block,
273345
+ changed: false
273346
+ };
273347
+ }
273348
+ function isTextRun$5(run2) {
273349
+ return (run2.kind === "text" || run2.kind === undefined) && "text" in run2;
273350
+ }
273351
+ function isPageReferenceTextRun(run2) {
273352
+ return isTextRun$5(run2) && run2.token === "pageReference" && run2.pageRefMetadata != null;
273353
+ }
273354
+ function adjustLineForResolvedPageRefs(line, runTexts) {
273355
+ let changed = false;
273356
+ const nextLine = { ...line };
273357
+ for (const [runIndex, resolved] of runTexts) {
273358
+ if (runIndex < line.fromRun || runIndex > line.toRun)
273359
+ continue;
273360
+ changed = true;
273361
+ if (line.fromRun === runIndex)
273362
+ nextLine.fromChar = clampResolvedRunBoundary(line.fromChar, resolved);
273363
+ if (line.toRun === runIndex)
273364
+ nextLine.toChar = clampResolvedRunBoundary(line.toChar, resolved);
273365
+ }
273366
+ if (line.segments?.length)
273367
+ nextLine.segments = line.segments.map((segment) => {
273368
+ const resolved = runTexts.get(segment.runIndex);
273369
+ if (resolved == null)
273370
+ return segment;
273371
+ changed = true;
273372
+ return {
273373
+ ...segment,
273374
+ fromChar: clampResolvedRunBoundary(segment.fromChar, resolved),
273375
+ toChar: clampResolvedRunBoundary(segment.toChar, resolved)
273376
+ };
273377
+ });
273378
+ return changed ? nextLine : line;
273379
+ }
273380
+ function clampResolvedRunBoundary(offset$1, resolved) {
273381
+ if (offset$1 === resolved.originalLength)
273382
+ return resolved.text.length;
273383
+ return Math.min(offset$1, resolved.text.length);
273384
+ }
271872
273385
  function sumLineHeights$2(lines, from$1, to) {
271873
273386
  let total = 0;
271874
273387
  for (let i4 = from$1;i4 < to && i4 < lines.length; i4++)
@@ -271923,13 +273436,16 @@ function resolveFragmentId(fragment2) {
271923
273436
  }
271924
273437
  }
271925
273438
  }
271926
- function resolveParagraphContentIfApplicable(fragment2, blockMap) {
273439
+ function resolveParagraphContentIfApplicable(fragment2, blockMap, pageRefContext) {
271927
273440
  if (fragment2.kind !== "para")
271928
273441
  return;
271929
273442
  const entry = blockMap.get(fragment2.blockId);
271930
273443
  if (!entry || entry.block.kind !== "paragraph" || entry.measure.kind !== "paragraph")
271931
273444
  return;
271932
- return resolveParagraphContent(fragment2, entry.block, entry.measure);
273445
+ const paragraphBlock = entry.block;
273446
+ const paragraphMeasure = entry.measure;
273447
+ const resolvedPageRefs = resolveParagraphPageRefs(fragment2, paragraphBlock, paragraphMeasure, pageRefContext);
273448
+ return resolveParagraphContent(resolvedPageRefs.fragment, resolvedPageRefs.block, paragraphMeasure);
271933
273449
  }
271934
273450
  function resolveFragmentParagraphBorders(fragment2, blockMap) {
271935
273451
  const entry = blockMap.get(fragment2.blockId);
@@ -271964,11 +273480,14 @@ function computeBlockVersion(blockId, blockMap, cache$2, fontSignature = "") {
271964
273480
  cache$2.set(blockId, "missing");
271965
273481
  return "missing";
271966
273482
  }
271967
- const version$1 = deriveBlockVersion(entry.block);
271968
- const versioned = fontSignature ? `${fontSignature}|${version$1}` : version$1;
273483
+ const versioned = deriveFontAwareBlockVersion(entry.block, fontSignature);
271969
273484
  cache$2.set(blockId, versioned);
271970
273485
  return versioned;
271971
273486
  }
273487
+ function deriveFontAwareBlockVersion(block, fontSignature = "") {
273488
+ const version$1 = deriveBlockVersion(block);
273489
+ return fontSignature ? `${fontSignature}|${version$1}` : version$1;
273490
+ }
271972
273491
  function applyPaintVersions(item, visualVersion) {
271973
273492
  const evidenceVersion = sourceAnchorSignature(item.sourceAnchor);
271974
273493
  item.version = visualVersion;
@@ -271978,19 +273497,25 @@ function applyPaintVersions(item, visualVersion) {
271978
273497
  } else
271979
273498
  item.paintCacheVersion = visualVersion;
271980
273499
  }
271981
- function resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, blockVersionCache, story, fontSignature = "") {
273500
+ function resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, blockVersionCache, story, fontSignature = "", pageRefContext) {
271982
273501
  const sdtContainerKey = resolveFragmentSdtContainerKey(fragment2, blockMap);
271983
273502
  const version$1 = fragmentSignature(fragment2, computeBlockVersion(fragment2.blockId, blockMap, blockVersionCache, fontSignature));
271984
273503
  const layoutSourceIdentity = resolveFragmentLayoutIdentity(fragment2, story);
271985
273504
  switch (fragment2.kind) {
271986
273505
  case "table": {
271987
273506
  const item = resolveTableItem(fragment2, fragmentIndex, pageIndex, blockMap);
273507
+ const tablePageRefs = resolveTablePageRefs(item.block, item.measure, pageRefContext);
273508
+ if (tablePageRefs.changed) {
273509
+ item.block = tablePageRefs.block;
273510
+ if (tablePageRefs.measure)
273511
+ item.measure = tablePageRefs.measure;
273512
+ }
271988
273513
  if (sdtContainerKey != null)
271989
273514
  item.sdtContainerKey = sdtContainerKey;
271990
273515
  if (fragment2.sourceAnchor != null)
271991
273516
  item.sourceAnchor = fragment2.sourceAnchor;
271992
273517
  item.layoutSourceIdentity = layoutSourceIdentity;
271993
- applyPaintVersions(item, version$1);
273518
+ applyPaintVersions(item, tablePageRefs.changed ? fragmentSignature(fragment2, deriveFontAwareBlockVersion(tablePageRefs.block, fontSignature)) : version$1);
271994
273519
  return item;
271995
273520
  }
271996
273521
  case "image": {
@@ -272014,6 +273539,10 @@ function resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, bloc
272014
273539
  return item;
272015
273540
  }
272016
273541
  default: {
273542
+ const entry = blockMap.get(fragment2.blockId);
273543
+ const paragraphPageRefs = fragment2.kind === "para" && entry?.block.kind === "paragraph" && entry.measure.kind === "paragraph" ? resolveParagraphPageRefs(fragment2, entry.block, entry.measure, pageRefContext) : null;
273544
+ const listPageRefs = fragment2.kind === "list-item" && entry?.block.kind === "list" ? resolveListItemPageRefs(entry.block, fragment2.itemId, entry.measure.kind === "list" ? entry.measure : undefined, pageRefContext) : null;
273545
+ const itemVersion = paragraphPageRefs?.changed ? fragmentSignature(paragraphPageRefs.fragment, deriveFontAwareBlockVersion(paragraphPageRefs.block, fontSignature)) : listPageRefs?.changed ? fragmentSignature(fragment2, deriveFontAwareBlockVersion(listPageRefs.block, fontSignature)) : version$1;
272017
273546
  const item = {
272018
273547
  kind: "fragment",
272019
273548
  id: resolveFragmentId(fragment2),
@@ -272027,25 +273556,24 @@ function resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, bloc
272027
273556
  fragment: fragment2,
272028
273557
  blockId: fragment2.blockId,
272029
273558
  fragmentIndex,
272030
- content: resolveParagraphContentIfApplicable(fragment2, blockMap),
273559
+ content: paragraphPageRefs ? resolveParagraphContent(paragraphPageRefs.fragment, paragraphPageRefs.block, entry.measure) : resolveParagraphContentIfApplicable(fragment2, blockMap, pageRefContext),
272031
273560
  layoutSourceIdentity
272032
273561
  };
272033
273562
  if (sdtContainerKey != null)
272034
273563
  item.sdtContainerKey = sdtContainerKey;
272035
273564
  if (fragment2.sourceAnchor != null)
272036
273565
  item.sourceAnchor = fragment2.sourceAnchor;
272037
- const entry = blockMap.get(fragment2.blockId);
272038
273566
  if (entry) {
272039
273567
  if (fragment2.kind === "para" && entry.block.kind === "paragraph" && entry.measure.kind === "paragraph") {
272040
- item.block = entry.block;
273568
+ item.block = paragraphPageRefs?.block ?? entry.block;
272041
273569
  item.measure = entry.measure;
272042
273570
  if (item.sourceAnchor == null)
272043
273571
  item.sourceAnchor = entry.block.sourceAnchor;
272044
273572
  } else if (fragment2.kind === "list-item" && entry.block.kind === "list" && entry.measure.kind === "list") {
272045
- const listBlock = entry.block;
273573
+ const listBlock = listPageRefs?.block ?? entry.block;
272046
273574
  const listItem2 = listBlock.items.find((candidate) => candidate.id === fragment2.itemId);
272047
273575
  item.block = listBlock;
272048
- item.measure = entry.measure;
273576
+ item.measure = listPageRefs?.measure ?? entry.measure;
272049
273577
  if (item.sourceAnchor == null)
272050
273578
  item.sourceAnchor = listItem2?.sourceAnchor ?? listItem2?.paragraph.sourceAnchor ?? listBlock.sourceAnchor;
272051
273579
  }
@@ -272076,16 +273604,17 @@ function resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, bloc
272076
273604
  if (listItem2.markerWidth != null)
272077
273605
  item.markerWidth = listItem2.markerWidth;
272078
273606
  }
272079
- applyPaintVersions(item, version$1);
273607
+ applyPaintVersions(item, itemVersion);
272080
273608
  return item;
272081
273609
  }
272082
273610
  }
272083
273611
  }
272084
273612
  function resolveLayout(input2) {
272085
- const { layout, flowMode, blocks: blocks2, measures } = input2;
273613
+ const { layout, flowMode, blocks: blocks2, measures, bookmarks } = input2;
272086
273614
  const fontSignature = input2.fontSignature ?? "";
272087
273615
  const blockMap = buildBlockMap(blocks2, measures);
272088
273616
  const blockVersionCache = /* @__PURE__ */ new Map;
273617
+ const pageRefAnchorMap = bookmarks?.size ? buildPageRefAnchorMap(bookmarks, layout, blocks2, measures) : undefined;
272089
273618
  const pages = layout.pages.map((page, pageIndex) => ({
272090
273619
  id: `page-${pageIndex}`,
272091
273620
  index: pageIndex,
@@ -272094,7 +273623,10 @@ function resolveLayout(input2) {
272094
273623
  number: page.number,
272095
273624
  width: page.size?.w ?? layout.pageSize.w,
272096
273625
  height: page.size?.h ?? layout.pageSize.h,
272097
- items: page.fragments.map((fragment2, fragmentIndex) => resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, blockVersionCache, undefined, fontSignature)),
273626
+ items: page.fragments.map((fragment2, fragmentIndex) => resolveFragmentItem(fragment2, fragmentIndex, pageIndex, blockMap, blockVersionCache, undefined, fontSignature, pageRefAnchorMap ? {
273627
+ sourcePage: page.number,
273628
+ anchorMap: pageRefAnchorMap
273629
+ } : undefined)),
272098
273630
  margins: page.margins,
272099
273631
  footnoteReserved: page.footnoteReserved,
272100
273632
  displayNumber: page.displayNumber,
@@ -272399,8 +273931,8 @@ function getColumnConfig(blockColumns) {
272399
273931
  }
272400
273932
  function isColumnConfigChanging(blockColumns, activeColumns) {
272401
273933
  if (blockColumns)
272402
- return blockColumns.count !== activeColumns.count || blockColumns.gap !== activeColumns.gap || Boolean(blockColumns.withSeparator) !== Boolean(activeColumns.withSeparator) || blockColumns.equalWidth !== activeColumns.equalWidth || !widthsEqual(blockColumns.widths, activeColumns.widths);
272403
- return activeColumns.count > 1 || Boolean(activeColumns.withSeparator);
273934
+ return !columnRenderLayoutsEqual(blockColumns, activeColumns);
273935
+ return resolveColumnCount(activeColumns) > 1 || Boolean(activeColumns.withSeparator);
272404
273936
  }
272405
273937
  function scheduleSectionBreak(block, state, baseMargins, maxHeaderContentHeight = 0, maxFooterContentHeight = 0) {
272406
273938
  const next2 = { ...state };
@@ -272731,7 +274263,7 @@ function layoutParagraphBlock(ctx$1, anchors) {
272731
274263
  const anchorX = entry.block.anchor ? resolveAnchoredGraphicX(entry.block.anchor, state.columnIndex, anchors.columns, entry.measure.width, {
272732
274264
  left: anchors.pageMargins.left,
272733
274265
  right: anchors.pageMargins.right
272734
- }, anchors.pageWidth) : columnX(state.columnIndex);
274266
+ }, anchors.pageWidth) : columnX(state);
272735
274267
  const pmRange = extractBlockPmRange(entry.block);
272736
274268
  if (entry.block.kind === "image" && entry.measure.kind === "image") {
272737
274269
  const pageContentHeight = Math.max(0, state.contentBottom - state.topMargin);
@@ -272807,7 +274339,7 @@ function layoutParagraphBlock(ctx$1, anchors) {
272807
274339
  if (state.cursorY >= state.contentBottom)
272808
274340
  state = advanceColumn(state);
272809
274341
  const fragmentWidth = lines.reduce((max$2, line) => Math.max(max$2, line.width ?? 0), 0) || columnWidth;
272810
- let x = columnX(state.columnIndex);
274342
+ let x = columnX(state);
272811
274343
  if (frame.xAlign === "right")
272812
274344
  x += columnWidth - fragmentWidth;
272813
274345
  else if (frame.xAlign === "center")
@@ -273016,9 +274548,9 @@ function layoutParagraphBlock(ctx$1, anchors) {
273016
274548
  state.footnoteAnchorsThisPage.push(a2);
273017
274549
  }
273018
274550
  }
273019
- const floatAdjustedX = columnX(state.columnIndex) + offsetX;
274551
+ const floatAdjustedX = columnX(state) + offsetX;
273020
274552
  const adjustedX = didRemeasureForFloats ? floatAdjustedX + Math.max(negativeLeftIndent, 0) : floatAdjustedX + negativeLeftIndent;
273021
- const columnRight = columnX(state.columnIndex) + columnWidth;
274553
+ const columnRight = columnX(state) + columnWidth;
273022
274554
  let adjustedWidth = didRemeasureForFloats ? effectiveColumnWidth : effectiveColumnWidth - negativeLeftIndent - negativeRightIndent;
273023
274555
  if (didRemeasureForFloats)
273024
274556
  adjustedWidth = Math.min(adjustedWidth, Math.max(1, columnRight - adjustedX));
@@ -273055,9 +274587,9 @@ function layoutParagraphBlock(ctx$1, anchors) {
273055
274587
  if (lines[i4].width > maxLineWidth)
273056
274588
  maxLineWidth = lines[i4].width;
273057
274589
  if (floatAlignment === "right")
273058
- fragment2.x = columnX(state.columnIndex) + offsetX + (effectiveColumnWidth - maxLineWidth);
274590
+ fragment2.x = columnX(state) + offsetX + (effectiveColumnWidth - maxLineWidth);
273059
274591
  else if (floatAlignment === "center")
273060
- fragment2.x = columnX(state.columnIndex) + offsetX + (effectiveColumnWidth - maxLineWidth) / 2;
274592
+ fragment2.x = columnX(state) + offsetX + (effectiveColumnWidth - maxLineWidth) / 2;
273061
274593
  }
273062
274594
  state.page.fragments.push(fragment2);
273063
274595
  state.cursorY += borderExpansion.top + fragmentHeight + borderExpansion.bottom;
@@ -273125,7 +274657,7 @@ function layoutImageBlock({ block, measure, columns, ensurePage, advanceColumn,
273125
274657
  const fragment2 = {
273126
274658
  kind: "image",
273127
274659
  blockId: block.id,
273128
- x: columnX(state.columnIndex) + marginLeft,
274660
+ x: columnX(state) + marginLeft,
273129
274661
  y: state.cursorY + marginTop,
273130
274662
  width,
273131
274663
  height,
@@ -273171,7 +274703,7 @@ function layoutDrawingBlock({ block, measure, columns, ensurePage, advanceColumn
273171
274703
  if (state.cursorY + requiredHeight > state.contentBottom && state.cursorY > state.topMargin)
273172
274704
  state = advanceColumn(state);
273173
274705
  const pmRange = extractBlockPmRange(block);
273174
- let x = columnX(state.columnIndex) + marginLeft + indentLeft;
274706
+ let x = columnX(state) + marginLeft + indentLeft;
273175
274707
  if (isInlineShapeGroup && inlineParagraphAlignment) {
273176
274708
  const pIndentLeft = typeof attrs?.paragraphIndentLeft === "number" ? attrs.paragraphIndentLeft : 0;
273177
274709
  const pIndentRight = typeof attrs?.paragraphIndentRight === "number" ? attrs.paragraphIndentRight : 0;
@@ -273681,7 +275213,7 @@ function getCellPadding(cellIdx, blockRow) {
273681
275213
  right: padding.right ?? 4
273682
275214
  };
273683
275215
  }
273684
- function getCellTotalLines(cell2) {
275216
+ function getCellTotalLines2(cell2) {
273685
275217
  return getCellLines(cell2).length;
273686
275218
  }
273687
275219
  function getRowContentHeight(blockRow, rowMeasure) {
@@ -273767,7 +275299,7 @@ function computeTableFragmentPmRange(block, measure, fromRow, toRow, partialRow)
273767
275299
  const cellMeasure = rowMeasure.cells[cellIndex];
273768
275300
  if (!cell2 || !cellMeasure)
273769
275301
  continue;
273770
- const totalLines = getCellTotalLines(cellMeasure);
275302
+ const totalLines = getCellTotalLines2(cellMeasure);
273771
275303
  let fromLine = 0;
273772
275304
  let toLine = totalLines;
273773
275305
  if (isPartial) {
@@ -273845,7 +275377,7 @@ function computePartialRow(rowIndex, blockRow, measure, availableHeight, fromLin
273845
275377
  const madeProgress = toLineByCell.some((cutLine, idx) => cutLine > (startLines[idx] || 0));
273846
275378
  const isFirstPart = startLines.every((l) => l === 0);
273847
275379
  const isLastPart = toLineByCell.every((cutLine, idx) => {
273848
- return cutLine >= getCellTotalLines(row2.cells[idx]);
275380
+ return cutLine >= getCellTotalLines2(row2.cells[idx]);
273849
275381
  }) || !madeProgress;
273850
275382
  if (actualPartialHeight === 0 && isFirstPart)
273851
275383
  actualPartialHeight = maxPaddingTotal;
@@ -273950,7 +275482,7 @@ function layoutMonolithicTable(context) {
273950
275482
  state = context.advanceColumn(state);
273951
275483
  state = context.ensurePage();
273952
275484
  const height = Math.min(context.measure.totalHeight, state.contentBottom - state.cursorY);
273953
- const baseX = context.columnX(state.columnIndex);
275485
+ const baseX = context.columnX(state);
273954
275486
  const baseWidth = Math.max(0, context.measure.totalWidth || context.columnWidth);
273955
275487
  const { x, width } = resolveTableFrame(baseX, context.columnWidth, baseWidth, context.block.attrs);
273956
275488
  const columnWidths = rescaleColumnWidths(context.measure.columnWidths, context.measure.totalWidth, width);
@@ -274030,7 +275562,7 @@ function layoutTableBlock({ block, measure, columnWidth, ensurePage, advanceColu
274030
275562
  let pendingPartialRow = null;
274031
275563
  if (block.rows.length === 0 && measure.totalHeight > 0) {
274032
275564
  const height = Math.min(measure.totalHeight, state.contentBottom - state.cursorY);
274033
- const { x, width } = resolveTableFrame(columnX(state.columnIndex), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
275565
+ const { x, width } = resolveTableFrame(columnX(state), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
274034
275566
  const columnWidths = rescaleColumnWidths(measure.columnWidths, measure.totalWidth, width);
274035
275567
  const metadata = generateFragmentMetadata(measure, block, 0, 0, 0, columnWidths);
274036
275568
  const fragment2 = {
@@ -274094,14 +275626,14 @@ function layoutTableBlock({ block, measure, columnWidth, ensurePage, advanceColu
274094
275626
  const continuationPartialRow = computePartialRow(rowIndex, block.rows[rowIndex], measure, availableForBody, fromLineByCell, fullPageHeightForBody);
274095
275627
  const madeProgress = continuationPartialRow.toLineByCell.some((toLine, idx) => toLine > (fromLineByCell[idx] || 0));
274096
275628
  const hasRemainingLinesAfterContinuation = continuationPartialRow.toLineByCell.some((toLine, idx) => {
274097
- return toLine < getCellTotalLines(measure.rows[rowIndex].cells[idx]);
275629
+ return toLine < getCellTotalLines2(measure.rows[rowIndex].cells[idx]);
274098
275630
  });
274099
275631
  const hadRemainingLinesBefore = fromLineByCell.some((fromLine, idx) => {
274100
- return fromLine < getCellTotalLines(measure.rows[rowIndex].cells[idx]);
275632
+ return fromLine < getCellTotalLines2(measure.rows[rowIndex].cells[idx]);
274101
275633
  });
274102
275634
  const fragmentHeight$1 = computeFragmentHeight(measure, rowIndex, rowIndex + 1, repeatHeaderCount, borderCollapse, continuationPartialRow);
274103
275635
  if (fragmentHeight$1 > 0 && madeProgress) {
274104
- const { x: x$1, width: width$1 } = resolveTableFrame(columnX(state.columnIndex), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
275636
+ const { x: x$1, width: width$1 } = resolveTableFrame(columnX(state), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
274105
275637
  const scaledWidths$1 = rescaleColumnWidths(measure.columnWidths, measure.totalWidth, width$1);
274106
275638
  const fragment$1 = {
274107
275639
  kind: "table",
@@ -274158,7 +275690,7 @@ function layoutTableBlock({ block, measure, columnWidth, ensurePage, advanceColu
274158
275690
  }
274159
275691
  const forcedEndRow = bodyStartRow + 1;
274160
275692
  const fragmentHeight$1 = computeFragmentHeight(measure, bodyStartRow, forcedEndRow, repeatHeaderCount, borderCollapse, forcedPartialRow);
274161
- const { x: x$1, width: width$1 } = resolveTableFrame(columnX(state.columnIndex), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
275693
+ const { x: x$1, width: width$1 } = resolveTableFrame(columnX(state), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
274162
275694
  const scaledWidths$1 = rescaleColumnWidths(measure.columnWidths, measure.totalWidth, width$1);
274163
275695
  const fragment$1 = {
274164
275696
  kind: "table",
@@ -274188,7 +275720,7 @@ function layoutTableBlock({ block, measure, columnWidth, ensurePage, advanceColu
274188
275720
  continue;
274189
275721
  }
274190
275722
  const fragmentHeight = computeFragmentHeight(measure, bodyStartRow, endRow, repeatHeaderCount, borderCollapse, partialRow);
274191
- const { x, width } = resolveTableFrame(columnX(state.columnIndex), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
275723
+ const { x, width } = resolveTableFrame(columnX(state), columnWidth, Math.max(0, measure.totalWidth || columnWidth), block.attrs);
274192
275724
  const scaledWidths = rescaleColumnWidths(measure.columnWidths, measure.totalWidth, width);
274193
275725
  const fragment2 = {
274194
275726
  kind: "table",
@@ -274415,16 +275947,6 @@ function createPaginator(opts) {
274415
275947
  return state.constraintBoundaries[state.activeConstraintIndex].columns;
274416
275948
  return opts.getActiveColumns();
274417
275949
  };
274418
- const columnX = (columnIndex) => {
274419
- const cols = opts.getCurrentColumns();
274420
- const widths = Array.isArray(cols.widths) && cols.widths.length > 0 ? cols.widths : null;
274421
- if (!widths)
274422
- return opts.margins.left + columnIndex * (cols.width + cols.gap);
274423
- let x = opts.margins.left;
274424
- for (let index2 = 0;index2 < columnIndex; index2 += 1)
274425
- x += (widths[index2] ?? cols.width) + cols.gap;
274426
- return x;
274427
- };
274428
275950
  const startNewPage = () => {
274429
275951
  if (opts.onNewPage)
274430
275952
  opts.onNewPage(undefined);
@@ -274479,7 +276001,7 @@ function createPaginator(opts) {
274479
276001
  };
274480
276002
  const advanceColumn = (state) => {
274481
276003
  const activeCols = getActiveColumnsForState(state);
274482
- if (state.columnIndex < activeCols.count - 1) {
276004
+ if (state.columnIndex < resolveColumnCount(activeCols) - 1) {
274483
276005
  state.maxCursorY = Math.max(state.maxCursorY, state.cursorY);
274484
276006
  state.columnIndex += 1;
274485
276007
  if (state.activeConstraintIndex >= 0 && state.constraintBoundaries[state.activeConstraintIndex])
@@ -274504,7 +276026,6 @@ function createPaginator(opts) {
274504
276026
  startNewPage,
274505
276027
  ensurePage,
274506
276028
  advanceColumn,
274507
- columnX,
274508
276029
  getActiveColumnsForState,
274509
276030
  getPageByNumber,
274510
276031
  pruneTrailingEmptyPages
@@ -275152,7 +276673,7 @@ function cloneBlockWithResolvedTokens(block, displayPageInfo, totalPagesStr, tot
275152
276673
  if ("token" in run2 && run2.token) {
275153
276674
  if (run2.token === "pageNumber") {
275154
276675
  const resolvedText = run2.pageNumberFieldFormat ? formatChapterPageNumberText({
275155
- pageComponent: formatPageNumberFieldValue$1(displayPageInfo.displayNumber, run2.pageNumberFieldFormat),
276676
+ pageComponent: formatPageNumberFieldValue(displayPageInfo.displayNumber, run2.pageNumberFieldFormat),
275156
276677
  chapterNumberText: displayPageInfo.chapterNumberText,
275157
276678
  chapterSeparator: displayPageInfo.chapterSeparator
275158
276679
  }) : displayPageInfo.chapterNumberText ? formatSectionPageNumberText({
@@ -275167,14 +276688,14 @@ function cloneBlockWithResolvedTokens(block, displayPageInfo, totalPagesStr, tot
275167
276688
  text: resolvedText
275168
276689
  };
275169
276690
  } else if (run2.token === "totalPageCount") {
275170
- const resolvedText = run2.pageNumberFieldFormat ? formatPageNumberFieldValue$1(totalPages, run2.pageNumberFieldFormat) : totalPagesStr;
276691
+ const resolvedText = run2.pageNumberFieldFormat ? formatPageNumberFieldValue(totalPages, run2.pageNumberFieldFormat) : totalPagesStr;
275171
276692
  changed ||= run2.text !== resolvedText;
275172
276693
  return {
275173
276694
  ...run2,
275174
276695
  text: resolvedText
275175
276696
  };
275176
276697
  } else if (run2.token === "sectionPageCount") {
275177
- const resolvedText = run2.pageNumberFieldFormat ? formatPageNumberFieldValue$1(sectionPageCount, run2.pageNumberFieldFormat) : String(sectionPageCount);
276698
+ const resolvedText = run2.pageNumberFieldFormat ? formatPageNumberFieldValue(sectionPageCount, run2.pageNumberFieldFormat) : String(sectionPageCount);
275178
276699
  changed ||= run2.text !== resolvedText;
275179
276700
  return {
275180
276701
  ...run2,
@@ -275599,7 +277120,7 @@ function layoutDocument(blocks2, measures, options = {}) {
275599
277120
  if (block.orientation)
275600
277121
  next2.pendingOrientation = block.orientation;
275601
277122
  const sectionType = block.type ?? "continuous";
275602
- const isColumnsChanging = block.columns && (block.columns.count !== next2.activeColumns.count || block.columns.gap !== next2.activeColumns.gap || Boolean(block.columns.withSeparator) !== Boolean(next2.activeColumns.withSeparator) || block.columns.equalWidth !== next2.activeColumns.equalWidth || !widthsEqual(block.columns.widths, next2.activeColumns.widths)) || !block.columns && (next2.activeColumns.count > 1 || Boolean(next2.activeColumns.withSeparator));
277123
+ const isColumnsChanging = block.columns && !columnRenderLayoutsEqual(block.columns, next2.activeColumns) || !block.columns && (resolveColumnCount(next2.activeColumns) > 1 || Boolean(next2.activeColumns.withSeparator));
275603
277124
  const sectionIndexRaw = block.attrs?.sectionIndex;
275604
277125
  const metadataIndex = typeof sectionIndexRaw === "number" ? sectionIndexRaw : Number(sectionIndexRaw ?? NaN);
275605
277126
  if (Number.isFinite(metadataIndex))
@@ -275688,8 +277209,8 @@ function layoutDocument(blocks2, measures, options = {}) {
275688
277209
  page.size = pageSizeOverride;
275689
277210
  if (activeOrientation)
275690
277211
  page.orientation = activeOrientation;
275691
- if (activeColumns.count > 1)
275692
- page.columns = cloneColumnLayout(activeColumns);
277212
+ if (resolveColumnCount(activeColumns) > 1)
277213
+ page.columns = resolveColumnLayout(activeColumns);
275693
277214
  if (activeVAlign && activeVAlign !== "top") {
275694
277215
  page.vAlign = activeVAlign;
275695
277216
  page.baseMargins = {
@@ -275909,7 +277430,6 @@ function layoutDocument(blocks2, measures, options = {}) {
275909
277430
  getActivePageSize: () => activePageSize,
275910
277431
  getDefaultPageSize: () => pageSize,
275911
277432
  getActiveColumns: () => activeColumns,
275912
- getCurrentColumns: () => getCurrentColumns(),
275913
277433
  createPage,
275914
277434
  onNewPage: (state) => {
275915
277435
  if (!state) {
@@ -276063,7 +277583,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276063
277583
  const state = states[states.length - 1] ?? null;
276064
277584
  const colsConfig = state ? getActiveColumnsForState(state) : activeColumns;
276065
277585
  const constraintIndex = state ? state.activeConstraintIndex : -1;
276066
- 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)
277586
+ if (cachedColumnsState.state === state && cachedColumnsState.constraintIndex === constraintIndex && cachedColumnsState.contentWidth === currentContentWidth && columnRenderLayoutsEqual(cachedColumnsState.colsConfig ?? undefined, colsConfig) && cachedColumnsState.normalized)
276067
277587
  return cachedColumnsState.normalized;
276068
277588
  const normalized = normalizeColumns(colsConfig, currentContentWidth);
276069
277589
  cachedColumnsState = {
@@ -276075,10 +277595,19 @@ function layoutDocument(blocks2, measures, options = {}) {
276075
277595
  };
276076
277596
  return normalized;
276077
277597
  };
277598
+ const getColumnGeometryForState = (state) => {
277599
+ return getColumnGeometry(normalizeColumns(state.activeConstraintIndex >= 0 && state.constraintBoundaries[state.activeConstraintIndex] ? state.constraintBoundaries[state.activeConstraintIndex].columns : state.page.columns ?? {
277600
+ count: 1,
277601
+ gap: 0
277602
+ }, (state.page.size?.w ?? pageSize.w) - ((state.page.margins?.left ?? activeLeftMargin) + (state.page.margins?.right ?? activeRightMargin))));
277603
+ };
277604
+ const columnWidthForState = (state, columnIndex = state.columnIndex) => getColumnWidth(getColumnGeometryForState(state), columnIndex);
277605
+ const columnXForState = (state, columnIndex = state.columnIndex) => getColumnX(getColumnGeometryForState(state), columnIndex, state.page.margins?.left ?? activeLeftMargin);
276078
277606
  const getCurrentColumnWidth = () => {
276079
- return getColumnWidthAt(getCurrentColumns(), (states[states.length - 1] ?? null)?.columnIndex ?? 0);
277607
+ const state = states[states.length - 1] ?? null;
277608
+ return state ? columnWidthForState(state) : getColumnWidthAt(getCurrentColumns(), 0);
276080
277609
  };
276081
- const columnX = paginator.columnX;
277610
+ const columnX = columnXForState;
276082
277611
  const advanceColumn = paginator.advanceColumn;
276083
277612
  const startMidPageRegion = (state, newColumns) => {
276084
277613
  const regionStartY = Math.max(state.cursorY, state.maxCursorY);
@@ -276346,7 +277875,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276346
277875
  }
276347
277876
  }
276348
277877
  const endingSectionColumns = endingSectionIndex !== null ? sectionColumnsMap.get(endingSectionIndex) : undefined;
276349
- const willBalance = endingSectionIndex !== null && !!endingSectionColumns && endingSectionColumns.count > 1 && !sectionHasExplicitColumnBreak.has(endingSectionIndex);
277878
+ const willBalance = endingSectionIndex !== null && !!endingSectionColumns && resolveColumnCount(endingSectionColumns) > 1 && !sectionHasExplicitColumnBreak.has(endingSectionIndex);
276350
277879
  let balanceResult = null;
276351
277880
  if (willBalance) {
276352
277881
  const activeRegionTop = state.constraintBoundaries[state.constraintBoundaries.length - 1]?.y ?? activeTopMargin;
@@ -276377,7 +277906,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276377
277906
  alreadyBalancedSections.add(endingSectionIndex);
276378
277907
  }
276379
277908
  }
276380
- if (balanceResult === null && columnIndexBefore >= newColumns.count)
277909
+ if (balanceResult === null && columnIndexBefore >= resolveColumnCount(newColumns))
276381
277910
  state = paginator.startNewPage();
276382
277911
  startMidPageRegion(state, newColumns);
276383
277912
  }
@@ -276532,7 +278061,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276532
278061
  const offsetV = tableBlock.anchor?.offsetV ?? 0;
276533
278062
  const anchorY = Math.max(anchorParagraphTopY, nextStackY) + offsetV;
276534
278063
  floatManager.registerTable(tableBlock, tableMeasure, anchorY, state.columnIndex, state.page.number);
276535
- const tableFragment = createAnchoredTableFragment(tableBlock, tableMeasure, tableBlock.anchor?.offsetH ?? columnX(state.columnIndex), anchorY);
278064
+ const tableFragment = createAnchoredTableFragment(tableBlock, tableMeasure, tableBlock.anchor?.offsetH ?? columnX(state), anchorY);
276536
278065
  state.page.fragments.push(tableFragment);
276537
278066
  placedAnchoredTableIds.add(tableBlock.id);
276538
278067
  if ((tableBlock.wrap?.type ?? "None") !== "None") {
@@ -276565,7 +278094,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276565
278094
  else if (relativeFrom === "margin")
276566
278095
  maxWidth = activePageSize.w - (activeLeftMargin + activeRightMargin);
276567
278096
  else
276568
- maxWidth = getColumnWidthAt(cols, state.columnIndex);
278097
+ maxWidth = columnWidthForState(state);
276569
278098
  const aspectRatio = imgMeasure.width > 0 && imgMeasure.height > 0 ? imgMeasure.width / imgMeasure.height : 1;
276570
278099
  const minWidth = 20;
276571
278100
  const minHeight = minWidth / aspectRatio;
@@ -276680,7 +278209,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276680
278209
  throw new Error(`layoutDocument: expected columnBreak measure for block ${block.id}`);
276681
278210
  const state = paginator.ensurePage();
276682
278211
  const activeCols = getActiveColumnsForState(state);
276683
- if (state.columnIndex < activeCols.count - 1)
278212
+ if (state.columnIndex < resolveColumnCount(activeCols) - 1)
276684
278213
  advanceColumn(state);
276685
278214
  else
276686
278215
  paginator.startNewPage();
@@ -276704,7 +278233,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276704
278233
  if (columnWidthForTable > 0 && totalWidth >= columnWidthForTable * 0.99)
276705
278234
  continue;
276706
278235
  const anchorY = resolveParagraphlessAnchoredTableY(tableBlock, tableMeasure, state);
276707
- const anchorX = tableBlock.anchor?.offsetH ?? columnX(state.columnIndex);
278236
+ const anchorX = tableBlock.anchor?.offsetH ?? columnX(state);
276708
278237
  floatManager.registerTable(tableBlock, tableMeasure, anchorY, state.columnIndex, state.page.number);
276709
278238
  state.page.fragments.push(createAnchoredTableFragment(tableBlock, tableMeasure, anchorX, anchorY));
276710
278239
  placedAnchoredTableIds.add(tableBlock.id);
@@ -276752,13 +278281,13 @@ function layoutDocument(blocks2, measures, options = {}) {
276752
278281
  fragment2.y += yOffset;
276753
278282
  }
276754
278283
  const FALLBACK_SECTION_IDX = -1;
276755
- if (sectionColumnsMap.size === 0 && !documentHasAnySectionBreak && activeColumns.count > 1 && !documentHasExplicitColumnBreak) {
278284
+ if (sectionColumnsMap.size === 0 && !documentHasAnySectionBreak && resolveColumnCount(activeColumns) > 1 && !documentHasExplicitColumnBreak) {
276756
278285
  sectionColumnsMap.set(FALLBACK_SECTION_IDX, cloneColumnLayout(activeColumns));
276757
278286
  for (const block of blocks2)
276758
278287
  blockSectionMap.set(block.id, FALLBACK_SECTION_IDX);
276759
278288
  }
276760
278289
  for (const [sectionIdx, sectionCols] of sectionColumnsMap) {
276761
- if (sectionCols.count <= 1)
278290
+ if (resolveColumnCount(sectionCols) <= 1)
276762
278291
  continue;
276763
278292
  if (sectionHasExplicitColumnBreak.has(sectionIdx))
276764
278293
  continue;
@@ -276840,7 +278369,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276840
278369
  regions.push({
276841
278370
  yStart: start$1.y,
276842
278371
  yEnd: end$1 ? end$1.y : state.contentBottom,
276843
- columns: start$1.columns
278372
+ columns: resolveColumnLayout(start$1.columns)
276844
278373
  });
276845
278374
  }
276846
278375
  state.page.columnRegions = regions;
@@ -276857,7 +278386,7 @@ function layoutDocument(blocks2, measures, options = {}) {
276857
278386
  pageSize,
276858
278387
  pages,
276859
278388
  ...options.documentBackground ? { documentBackground: options.documentBackground } : {},
276860
- columns: activeColumns.count > 1 ? cloneColumnLayout(activeColumns) : undefined
278389
+ columns: resolveColumnCount(activeColumns) > 1 ? resolveColumnLayout(activeColumns) : undefined
276861
278390
  };
276862
278391
  }
276863
278392
  function computeFragmentBottom(fragment2, block, measure) {
@@ -277437,7 +278966,7 @@ function resolveHeaderFooterTokens(blocks2, pageNumber, totalPages, pageNumberTe
277437
278966
  if ("token" in run2 && run2.token) {
277438
278967
  if (run2.token === "pageNumber")
277439
278968
  run2.text = run2.pageNumberFieldFormat ? formatChapterPageNumberText({
277440
- pageComponent: formatPageNumberFieldValue$1(displayNumber, run2.pageNumberFieldFormat),
278969
+ pageComponent: formatPageNumberFieldValue(displayNumber, run2.pageNumberFieldFormat),
277441
278970
  chapterNumberText,
277442
278971
  chapterSeparator
277443
278972
  }) : chapterNumberText ? formatSectionPageNumberText({
@@ -277447,9 +278976,9 @@ function resolveHeaderFooterTokens(blocks2, pageNumber, totalPages, pageNumberTe
277447
278976
  chapterSeparator
277448
278977
  }) : pageNumberStr;
277449
278978
  else if (run2.token === "totalPageCount")
277450
- run2.text = run2.pageNumberFieldFormat ? formatPageNumberFieldValue$1(totalPages, run2.pageNumberFieldFormat) : totalPagesStr;
278979
+ run2.text = run2.pageNumberFieldFormat ? formatPageNumberFieldValue(totalPages, run2.pageNumberFieldFormat) : totalPagesStr;
277451
278980
  else if (run2.token === "sectionPageCount")
277452
- run2.text = run2.pageNumberFieldFormat ? formatPageNumberFieldValue$1(sectionPageCountNumber, run2.pageNumberFieldFormat) : sectionPageCountStr;
278981
+ run2.text = run2.pageNumberFieldFormat ? formatPageNumberFieldValue(sectionPageCountNumber, run2.pageNumberFieldFormat) : sectionPageCountStr;
277453
278982
  }
277454
278983
  });
277455
278984
  }
@@ -277594,7 +279123,7 @@ function canUseDigitBucketingForVariant(blocks2, docTotalPages, pageResolver) {
277594
279123
  const renderedBucketForPage = (pageNumber) => {
277595
279124
  const pageInfo = pageResolver(pageNumber);
277596
279125
  const renderedText = strategy.kind === "fieldFormat" ? Number.isFinite(pageInfo.displayNumber) ? formatChapterPageNumberText({
277597
- pageComponent: formatPageNumberFieldValue$1(pageInfo.displayNumber ?? pageNumber, strategy.fieldFormat),
279126
+ pageComponent: formatPageNumberFieldValue(pageInfo.displayNumber ?? pageNumber, strategy.fieldFormat),
277598
279127
  chapterNumberText: pageInfo.chapterNumberText,
277599
279128
  chapterSeparator: pageInfo.chapterSeparator
277600
279129
  }) : null : pageInfo.displayText;
@@ -287388,6 +288917,10 @@ async function measureParagraphBlock(block, maxWidth, fontContext) {
287388
288917
  }
287389
288918
  lastFontSize = run2.fontSize;
287390
288919
  hasSeenTextRun = true;
288920
+ if (run2.text === "") {
288921
+ pendingRunSpacing = 0;
288922
+ continue;
288923
+ }
287391
288924
  const { font } = buildFontString(run2, fontContext);
287392
288925
  const tabSegments = run2.text.split("\t");
287393
288926
  let charPosInRun = 0;
@@ -296916,7 +298449,7 @@ var Node$13 = class Node$14 {
296916
298449
  }
296917
298450
  case "total-page-number":
296918
298451
  return {
296919
- text: editor.options.totalPageCount || editor.options.parentEditor?.currentTotalPages || "1",
298452
+ text: formatPageNumberFieldValue(Number(editor.options.totalPageCount || editor.options.parentEditor?.currentTotalPages || 1) || 1, getPageNumberFieldFormat(node3?.attrs)),
296920
298453
  className: "sd-editor-auto-total-pages",
296921
298454
  dataId: "auto-total-pages",
296922
298455
  ariaLabel: "Total page count node"
@@ -296927,7 +298460,7 @@ var Node$13 = class Node$14 {
296927
298460
  const pageNumberFormat = typeof node3?.attrs?.pageNumberFormat === "string" ? node3.attrs.pageNumberFormat : undefined;
296928
298461
  const pageNumberZeroPadding = typeof node3?.attrs?.pageNumberZeroPadding === "number" && Number.isFinite(node3.attrs.pageNumberZeroPadding) ? node3.attrs.pageNumberZeroPadding : undefined;
296929
298462
  return {
296930
- text: sectionPageCount != null ? pageNumberFormat || pageNumberZeroPadding != null ? formatPageNumberFieldValue$1(Number(sectionPageCount) || 1, {
298463
+ text: sectionPageCount != null ? pageNumberFormat || pageNumberZeroPadding != null ? formatPageNumberFieldValue(Number(sectionPageCount) || 1, {
296931
298464
  ...pageNumberFormat ? { format: pageNumberFormat } : {},
296932
298465
  ...pageNumberZeroPadding != null ? { zeroPadding: pageNumberZeroPadding } : {}
296933
298466
  }) : sectionPageCount : cachedText,
@@ -310374,7 +311907,7 @@ menclose::after {
310374
311907
  const minReadablePx = getMinimumReadableTextStartPx(markerContentEndPx, gutterWidthPx);
310375
311908
  return Math.max(nextTabStopPx, minReadablePx);
310376
311909
  }
310377
- }, SETTLED_STATUSES, BUNDLED_SUBSTITUTES, FontResolver = class {
311910
+ }, SETTLED_STATUSES, SUBSTITUTION_EVIDENCE, BUNDLED_SUBSTITUTES, CATEGORY_FALLBACKS, FontResolver = class {
310378
311911
  #overrides = /* @__PURE__ */ new Map;
310379
311912
  #version = 0;
310380
311913
  #cachedSignature = null;
@@ -310432,6 +311965,12 @@ menclose::after {
310432
311965
  physical: bundled,
310433
311966
  reason: "bundled_substitute"
310434
311967
  };
311968
+ const category = CATEGORY_FALLBACKS[key2];
311969
+ if (category)
311970
+ return {
311971
+ physical: category,
311972
+ reason: "category_fallback"
311973
+ };
310435
311974
  return {
310436
311975
  physical: bareFamily,
310437
311976
  reason: "as_requested"
@@ -310456,6 +311995,12 @@ menclose::after {
310456
311995
  physical: bundled,
310457
311996
  reason: "bundled_substitute"
310458
311997
  };
311998
+ const category = CATEGORY_FALLBACKS[key2];
311999
+ if (category && hasFace(category, face.weight, face.style))
312000
+ return {
312001
+ physical: category,
312002
+ reason: "category_fallback"
312003
+ };
310459
312004
  if (override || bundled)
310460
312005
  return {
310461
312006
  physical: primary,
@@ -310501,8 +312046,8 @@ menclose::after {
310501
312046
  const parts = splitStack(cssFontFamily);
310502
312047
  if (parts.length === 0)
310503
312048
  return cssFontFamily;
310504
- const { physical, reason } = this.#resolveFaceLadder(parts[0], face, hasFace);
310505
- if (reason === "custom_mapping" || reason === "bundled_substitute")
312049
+ const { physical } = this.#resolveFaceLadder(parts[0], face, hasFace);
312050
+ if (normalizeFamilyKey$2(physical) !== normalizeFamilyKey$2(parts[0]))
310506
312051
  return [physical, ...parts.slice(1)].join(", ");
310507
312052
  return cssFontFamily;
310508
312053
  }
@@ -313137,7 +314682,7 @@ menclose::after {
313137
314682
  if (runToken === "pageNumber") {
313138
314683
  if (run2.pageNumberFieldFormat)
313139
314684
  return formatChapterPageNumberText({
313140
- pageComponent: formatPageNumberFieldValue$1(context.displayPageNumber ?? context.pageNumber, run2.pageNumberFieldFormat),
314685
+ pageComponent: formatPageNumberFieldValue(context.displayPageNumber ?? context.pageNumber, run2.pageNumberFieldFormat),
313141
314686
  chapterNumberText: context.pageNumberChapterText,
313142
314687
  chapterSeparator: context.pageNumberChapterSeparator
313143
314688
  });
@@ -313152,7 +314697,7 @@ menclose::after {
313152
314697
  }
313153
314698
  if (runToken === "totalPageCount") {
313154
314699
  if (run2.pageNumberFieldFormat)
313155
- return formatPageNumberFieldValue$1(context.totalPages || 1, run2.pageNumberFieldFormat);
314700
+ return formatPageNumberFieldValue(context.totalPages || 1, run2.pageNumberFieldFormat);
313156
314701
  return context.totalPages ? String(context.totalPages) : run2.text ?? "";
313157
314702
  }
313158
314703
  if (runToken === "sectionPageCount") {
@@ -313160,7 +314705,7 @@ menclose::after {
313160
314705
  if (sectionPageCount == null)
313161
314706
  return run2.text ?? "";
313162
314707
  if (run2.pageNumberFieldFormat)
313163
- return formatPageNumberFieldValue$1(sectionPageCount, run2.pageNumberFieldFormat);
314708
+ return formatPageNumberFieldValue(sectionPageCount, run2.pageNumberFieldFormat);
313164
314709
  return String(sectionPageCount);
313165
314710
  }
313166
314711
  return run2.text ?? "";
@@ -314082,7 +315627,7 @@ menclose::after {
314082
315627
  break;
314083
315628
  }
314084
315629
  return merged;
314085
- }, isTextRun$5 = (run2) => (run2.kind === "text" || run2.kind === undefined) && ("text" in run2), isOverlaySafeRunKind = (run2) => {
315630
+ }, isTextRun$6 = (run2) => (run2.kind === "text" || run2.kind === undefined) && ("text" in run2), isOverlaySafeRunKind = (run2) => {
314086
315631
  const kind = run2.kind ?? "text";
314087
315632
  return kind === "text" || kind === "tab" || kind === "lineBreak" || kind === "break";
314088
315633
  }, shouldUseLineUnderlineOverlay = (runsForLine) => runsForLine.every(isOverlaySafeRunKind) && runsForLine.some((run2) => run2.kind === "tab" && canPaintUnderlineOverlay(run2)), cloneRunWithoutUnderline = (run2) => ({
@@ -314107,7 +315652,7 @@ menclose::after {
314107
315652
  const segments = segmentsByRun.get(runIndex);
314108
315653
  if (segments?.length)
314109
315654
  return segments.reduce((sum, segment) => {
314110
- const text5 = isTextRun$5(run2) ? (run2.text ?? "").slice(segment.fromChar, segment.toChar) : "";
315655
+ const text5 = isTextRun$6(run2) ? (run2.text ?? "").slice(segment.fromChar, segment.toChar) : "";
314111
315656
  return sum + segment.width + spacingPerSpace * countSpaces$1(text5);
314112
315657
  }, 0);
314113
315658
  if ("width" in run2 && typeof run2.width === "number")
@@ -315540,29 +317085,17 @@ menclose::after {
315540
317085
  }
315541
317086
  }
315542
317087
  getColumnSeparatorPositions(columns, leftMargin, contentWidth) {
315543
- if (!(Array.isArray(columns.widths) && columns.widths.length > 0)) {
315544
- const equalWidth = (contentWidth - columns.gap * (columns.count - 1)) / columns.count;
315545
- if (equalWidth <= 1)
317088
+ const normalized = normalizeColumnLayout(columns, contentWidth);
317089
+ if (resolveColumnMode(columns) === "equal") {
317090
+ if ((contentWidth - columns.gap * (normalized.count - 1)) / normalized.count <= 1)
315546
317091
  return [];
315547
- const separatorPositions$1 = [];
315548
- for (let index2 = 0;index2 < columns.count - 1; index2 += 1)
315549
- separatorPositions$1.push(leftMargin + (index2 + 1) * equalWidth + index2 * columns.gap + columns.gap / 2);
315550
- return separatorPositions$1;
315551
317092
  }
315552
- const normalizedColumns = normalizeColumnLayout(columns, contentWidth);
315553
- if (normalizedColumns.count <= 1)
317093
+ const geometry = getColumnGeometry(normalized);
317094
+ if (geometry.length <= 1)
315554
317095
  return [];
315555
- const columnWidths = normalizedColumns.widths ?? Array.from({ length: normalizedColumns.count }, () => normalizedColumns.width);
315556
- if (columnWidths.some((columnWidth) => columnWidth <= 1))
317096
+ if (geometry.some((column) => column.width <= 1))
315557
317097
  return [];
315558
- const separatorPositions = [];
315559
- let cursorX = leftMargin;
315560
- for (let index2 = 0;index2 < normalizedColumns.count - 1; index2 += 1) {
315561
- const currentColumnWidth = columnWidths[index2] ?? normalizedColumns.width;
315562
- separatorPositions.push(cursorX + currentColumnWidth + normalizedColumns.gap / 2);
315563
- cursorX += currentColumnWidth + normalizedColumns.gap;
315564
- }
315565
- return separatorPositions;
317098
+ return getColumnSeparatorPositions(geometry, leftMargin);
315566
317099
  }
315567
317100
  renderDecorationsForPage(pageEl, page, pageIndex) {
315568
317101
  if (this.isSemanticFlow)
@@ -316265,8 +317798,10 @@ menclose::after {
316265
317798
  });
316266
317799
  return context?.pageNumberText ?? String(context?.pageNumber ?? 1);
316267
317800
  }
316268
- if (part.fieldType === "NUMPAGES")
316269
- return String(context?.totalPages ?? 1);
317801
+ if (part.fieldType === "NUMPAGES") {
317802
+ const totalPages = context?.totalPages ?? 1;
317803
+ return part.pageNumberFormat ? formatPageNumber(totalPages, part.pageNumberFormat) : String(totalPages);
317804
+ }
316270
317805
  if (part.fieldType === "SECTIONPAGES") {
316271
317806
  if (context?.sectionPageCount == null)
316272
317807
  return part.text ?? "1";
@@ -326524,13 +328059,13 @@ menclose::after {
326524
328059
  return;
326525
328060
  console.log(...args$1);
326526
328061
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions, TRACKED_MARK_NAMES;
326527
- var init_src_DYT7_l3i_es = __esm(() => {
328062
+ var init_src_eTZqPcFn_es = __esm(() => {
326528
328063
  init_rolldown_runtime_Bg48TavK_es();
326529
- init_SuperConverter_DBsJeu9t_es();
328064
+ init_SuperConverter_D2zNnC50_es();
326530
328065
  init_jszip_C49i9kUs_es();
326531
328066
  init_xml_js_CqGKpaft_es();
326532
328067
  init_uuid_qzgm05fK_es();
326533
- init_create_headless_toolbar_BiY_0zZP_es();
328068
+ init_create_headless_toolbar_COmoIa5Q_es();
326534
328069
  init_constants_D9qj59G2_es();
326535
328070
  init_dist_B8HfvhaK_es();
326536
328071
  init_unified_Dsuw2be5_es();
@@ -331014,7 +332549,7 @@ ${err.toString()}`);
331014
332549
  if (typeof tablePos !== "number" && !tableNode || !Array.isArray(valueRows) || !valueRows.length)
331015
332550
  return false;
331016
332551
  return chain().command(({ tr, dispatch }) => {
331017
- const workingTable = resolveTable2(tr, tablePos, tableNode);
332552
+ const workingTable = resolveTable3(tr, tablePos, tableNode);
331018
332553
  if (!workingTable)
331019
332554
  return false;
331020
332555
  const templateRow = pickTemplateRowForAppend(workingTable, editor.schema);
@@ -333511,6 +335046,10 @@ ${err.toString()}`);
333511
335046
  default: null,
333512
335047
  rendered: false
333513
335048
  },
335049
+ pageNumberNumericPicture: {
335050
+ default: null,
335051
+ rendered: false
335052
+ },
333514
335053
  importedCachedText: {
333515
335054
  default: null,
333516
335055
  rendered: false
@@ -333671,6 +335210,38 @@ ${err.toString()}`);
333671
335210
  instruction: {
333672
335211
  default: "",
333673
335212
  rendered: false
335213
+ },
335214
+ instructionTokens: {
335215
+ default: null,
335216
+ rendered: false
335217
+ },
335218
+ bookmarkId: {
335219
+ default: "",
335220
+ rendered: false
335221
+ },
335222
+ hasHyperlinkSwitch: {
335223
+ default: false,
335224
+ rendered: false
335225
+ },
335226
+ hasRelativePositionSwitch: {
335227
+ default: false,
335228
+ rendered: false
335229
+ },
335230
+ pageNumberFieldFormat: {
335231
+ default: null,
335232
+ rendered: false
335233
+ },
335234
+ numericPictureFormat: {
335235
+ default: null,
335236
+ rendered: false
335237
+ },
335238
+ fieldResultFormat: {
335239
+ default: null,
335240
+ rendered: false
335241
+ },
335242
+ fieldRunProperties: {
335243
+ default: null,
335244
+ rendered: false
333674
335245
  }
333675
335246
  };
333676
335247
  },
@@ -337236,6 +338807,22 @@ ${err.toString()}`);
337236
338807
  default: "",
337237
338808
  rendered: false
337238
338809
  },
338810
+ fieldArgument: {
338811
+ default: "",
338812
+ rendered: false
338813
+ },
338814
+ sequenceMode: {
338815
+ default: "next",
338816
+ rendered: false
338817
+ },
338818
+ hideResult: {
338819
+ default: false,
338820
+ rendered: false
338821
+ },
338822
+ restartNumber: {
338823
+ default: null,
338824
+ rendered: false
338825
+ },
337239
338826
  format: {
337240
338827
  default: "ARABIC",
337241
338828
  rendered: false
@@ -337244,10 +338831,26 @@ ${err.toString()}`);
337244
338831
  default: null,
337245
338832
  rendered: false
337246
338833
  },
338834
+ hasGeneralFormat: {
338835
+ default: false,
338836
+ rendered: false
338837
+ },
338838
+ pageNumberFieldFormat: {
338839
+ default: null,
338840
+ rendered: false
338841
+ },
338842
+ numericPictureFormat: {
338843
+ default: null,
338844
+ rendered: false
338845
+ },
337247
338846
  resolvedNumber: {
337248
338847
  default: "",
337249
338848
  rendered: false
337250
338849
  },
338850
+ resolvedNumberIsCurrent: {
338851
+ default: false,
338852
+ rendered: false
338853
+ },
337251
338854
  sdBlockId: {
337252
338855
  default: null,
337253
338856
  rendered: false
@@ -337262,7 +338865,7 @@ ${err.toString()}`);
337262
338865
  return [{ tag: 'span[data-id="sequence-field"]' }];
337263
338866
  },
337264
338867
  renderDOM({ node: node3, htmlAttributes }) {
337265
- const text5 = node3.attrs.resolvedNumber || "0";
338868
+ const text5 = node3.attrs.resolvedNumber || "";
337266
338869
  return [
337267
338870
  "span",
337268
338871
  Attribute2.mergeAttributes(this.options.htmlAttributes, htmlAttributes),
@@ -337332,7 +338935,8 @@ ${err.toString()}`);
337332
338935
  SYNTHETIC_FIELD_NODE_TYPES = {
337333
338936
  "total-page-number": {
337334
338937
  fieldType: "NUMPAGES",
337335
- instruction: "NUMPAGES"
338938
+ instruction: "NUMPAGES",
338939
+ resolveInstruction: (node3) => typeof node3.attrs?.instruction === "string" && node3.attrs.instruction.trim() ? node3.attrs.instruction : "NUMPAGES"
337336
338940
  },
337337
338941
  "section-page-count": {
337338
338942
  fieldType: "SECTIONPAGES",
@@ -337351,6 +338955,7 @@ ${err.toString()}`);
337351
338955
  addCommands() {
337352
338956
  return { updateFieldsInSelection: () => ({ editor, state, tr: outerTr, dispatch }) => {
337353
338957
  const { from: from$1, to } = state.selection;
338958
+ const selectionHadSeq = findFieldsInRange(state.doc, from$1, to).some((field) => field.fieldType === "SEQ");
337354
338959
  let tocPathRan = false;
337355
338960
  if (editor?.doc?.toc?.update) {
337356
338961
  const tocTargets = findAllTocNodes(state.doc).map((toc) => toc.commandNodeId).filter((id2) => typeof id2 === "string" && id2);
@@ -337381,22 +338986,27 @@ ${err.toString()}`);
337381
338986
  tocPathRan = true;
337382
338987
  }
337383
338988
  }
337384
- const updatable = findFieldsInRange(state.doc, from$1, to).filter((f2) => UPDATABLE_FIELD_TYPES.has(f2.fieldType));
337385
- if (updatable.length === 0)
338989
+ const activeState = tocPathRan && editor?.state?.doc ? editor.state : state;
338990
+ const activeDoc = activeState.doc ?? state.doc;
338991
+ const activeSchema = activeState.schema ?? state.schema;
338992
+ const fields = findFieldsInRange(activeDoc, Math.min(from$1, activeDoc.content.size), to >= state.doc.content.size ? activeDoc.content.size : Math.min(to, activeDoc.content.size));
338993
+ const updatable = fields.filter((f2) => UPDATABLE_FIELD_TYPES.has(f2.fieldType));
338994
+ const hasSeqSelection = selectionHadSeq || fields.some((field) => field.fieldType === "SEQ");
338995
+ if (updatable.length === 0 && !hasSeqSelection)
337386
338996
  return tocPathRan;
337387
338997
  const stats = getWordStatistics(resolveMainBodyEditor(editor));
337388
- const tr = state.tr;
338998
+ const tr = activeState.tr;
337389
338999
  let changed = false;
337390
339000
  const sorted = [...updatable].sort((a2, b$1) => b$1.pos - a2.pos);
337391
339001
  for (const field of sorted) {
337392
339002
  const node3 = tr.doc.nodeAt(field.pos);
337393
339003
  if (!node3)
337394
339004
  continue;
337395
- const freshValue = field.fieldType === "SECTIONPAGES" ? resolveSectionPageCountFieldValue(editor, node3) : resolveDocumentStatFieldValue(field.fieldType, stats);
339005
+ const freshValue = field.fieldType === "SECTIONPAGES" ? resolveSectionPageCountFieldValue(editor, node3) : field.fieldType === "NUMPAGES" && node3.type.name === "total-page-number" ? resolveTotalPageNumberFieldValue(stats, node3) : resolveDocumentStatFieldValue(field.fieldType, stats);
337396
339006
  if (freshValue == null)
337397
339007
  continue;
337398
339008
  if (node3.type.name === "total-page-number" || node3.type.name === "section-page-count") {
337399
- const textChild = freshValue ? state.schema.text(freshValue) : null;
339009
+ const textChild = freshValue ? activeSchema.text(freshValue) : null;
337400
339010
  const newNode = node3.type.create({
337401
339011
  ...node3.attrs,
337402
339012
  resolvedText: freshValue
@@ -337413,6 +339023,15 @@ ${err.toString()}`);
337413
339023
  changed = true;
337414
339024
  }
337415
339025
  }
339026
+ if (hasSeqSelection) {
339027
+ const result = updateSequenceFieldsInTransaction({
339028
+ tr,
339029
+ schema: activeSchema,
339030
+ scope: { kind: "all" },
339031
+ converterContext: getSequenceFieldUpdaterConverterContext(editor)
339032
+ });
339033
+ changed = changed || result.changed;
339034
+ }
337416
339035
  if (!changed)
337417
339036
  return tocPathRan;
337418
339037
  if (dispatch)
@@ -353440,14 +355059,209 @@ function print() { __p += __j.call(arguments, '') }
353440
355059
  "timed_out",
353441
355060
  "fallback_used"
353442
355061
  ];
353443
- BUNDLED_SUBSTITUTES = Object.freeze({
353444
- calibri: "Carlito",
353445
- cambria: "Caladea",
353446
- arial: "Liberation Sans",
353447
- "times new roman": "Liberation Serif",
353448
- "courier new": "Liberation Mono",
353449
- helvetica: "Liberation Sans"
353450
- });
355062
+ SUBSTITUTION_EVIDENCE = Object.freeze([
355063
+ {
355064
+ evidenceId: "calibri",
355065
+ logicalFamily: "Calibri",
355066
+ physicalFamily: "Carlito",
355067
+ verdict: "metric_safe",
355068
+ faces: {
355069
+ regular: true,
355070
+ bold: true,
355071
+ italic: true,
355072
+ boldItalic: true
355073
+ },
355074
+ advance: {
355075
+ meanDelta: 0,
355076
+ maxDelta: 0
355077
+ },
355078
+ gates: {
355079
+ static: "pass",
355080
+ metric: "pass",
355081
+ layout: "pass",
355082
+ ship: "pass"
355083
+ },
355084
+ policyAction: "substitute",
355085
+ measurementRefs: ["calibri__carlito#analytic_advance#2026-06-03", "calibri__carlito#face_aggregate#2026-06-03"],
355086
+ candidateLicense: "OFL-1.1",
355087
+ exportRule: "preserve_original_name"
355088
+ },
355089
+ {
355090
+ evidenceId: "cambria",
355091
+ logicalFamily: "Cambria",
355092
+ physicalFamily: "Caladea",
355093
+ verdict: "visual_only",
355094
+ faceVerdicts: {
355095
+ regular: "metric_safe",
355096
+ bold: "metric_safe",
355097
+ italic: "metric_safe",
355098
+ boldItalic: "visual_only"
355099
+ },
355100
+ glyphExceptions: [{
355101
+ slot: "boldItalic",
355102
+ codepoint: 96,
355103
+ advanceDelta: 0.231,
355104
+ note: "Caladea Bold Italic grave accent (U+0060) advance diverges ~23% from Cambria; lines containing it reflow."
355105
+ }],
355106
+ faces: {
355107
+ regular: true,
355108
+ bold: true,
355109
+ italic: true,
355110
+ boldItalic: true
355111
+ },
355112
+ advance: {
355113
+ meanDelta: 0.0002378,
355114
+ maxDelta: 0.2310758
355115
+ },
355116
+ gates: {
355117
+ static: "pass",
355118
+ metric: "pass",
355119
+ layout: "not_run",
355120
+ ship: "pass"
355121
+ },
355122
+ policyAction: "substitute",
355123
+ measurementRefs: [
355124
+ "cambria_regular__caladea#regular#w400#d2f6cad3#analytic_advance#2026-06-04",
355125
+ "cambria_bold__caladea#bold#w700#74eda4fc#analytic_advance#2026-06-04",
355126
+ "cambria_italic__caladea#italic#w400#9c968bf6#analytic_advance#2026-06-04",
355127
+ "cambria_boldItalic__caladea#boldItalic#w700#f47a35ad#analytic_advance#2026-06-04"
355128
+ ],
355129
+ candidateLicense: "Apache-2.0",
355130
+ exportRule: "preserve_original_name"
355131
+ },
355132
+ {
355133
+ evidenceId: "arial",
355134
+ logicalFamily: "Arial",
355135
+ physicalFamily: "Liberation Sans",
355136
+ verdict: "metric_safe",
355137
+ faces: {
355138
+ regular: true,
355139
+ bold: true,
355140
+ italic: true,
355141
+ boldItalic: true
355142
+ },
355143
+ advance: {
355144
+ meanDelta: 0,
355145
+ maxDelta: 0
355146
+ },
355147
+ gates: {
355148
+ static: "pass",
355149
+ metric: "pass",
355150
+ layout: "not_run",
355151
+ ship: "pass"
355152
+ },
355153
+ policyAction: "substitute",
355154
+ measurementRefs: ["arial__liberation-sans#analytic_advance#2026-06-03"],
355155
+ candidateLicense: "OFL-1.1",
355156
+ exportRule: "preserve_original_name"
355157
+ },
355158
+ {
355159
+ evidenceId: "times-new-roman",
355160
+ logicalFamily: "Times New Roman",
355161
+ physicalFamily: "Liberation Serif",
355162
+ verdict: "metric_safe",
355163
+ faces: {
355164
+ regular: true,
355165
+ bold: true,
355166
+ italic: true,
355167
+ boldItalic: true
355168
+ },
355169
+ advance: {
355170
+ meanDelta: 0,
355171
+ maxDelta: 0
355172
+ },
355173
+ gates: {
355174
+ static: "pass",
355175
+ metric: "pass",
355176
+ layout: "not_run",
355177
+ ship: "pass"
355178
+ },
355179
+ policyAction: "substitute",
355180
+ measurementRefs: ["times-new-roman__liberation-serif#analytic_advance#2026-06-03"],
355181
+ candidateLicense: "OFL-1.1",
355182
+ exportRule: "preserve_original_name"
355183
+ },
355184
+ {
355185
+ evidenceId: "courier-new",
355186
+ logicalFamily: "Courier New",
355187
+ physicalFamily: "Liberation Mono",
355188
+ verdict: "metric_safe",
355189
+ faces: {
355190
+ regular: true,
355191
+ bold: true,
355192
+ italic: true,
355193
+ boldItalic: true
355194
+ },
355195
+ advance: {
355196
+ meanDelta: 0,
355197
+ maxDelta: 0
355198
+ },
355199
+ gates: {
355200
+ static: "pass",
355201
+ metric: "pass",
355202
+ layout: "not_run",
355203
+ ship: "pass"
355204
+ },
355205
+ policyAction: "substitute",
355206
+ measurementRefs: ["courier-new__liberation-mono#analytic_advance#2026-06-03"],
355207
+ candidateLicense: "OFL-1.1",
355208
+ exportRule: "preserve_original_name"
355209
+ },
355210
+ {
355211
+ evidenceId: "helvetica",
355212
+ logicalFamily: "Helvetica",
355213
+ physicalFamily: "Liberation Sans",
355214
+ verdict: "metric_safe",
355215
+ faces: {
355216
+ regular: true,
355217
+ bold: true,
355218
+ italic: true,
355219
+ boldItalic: true
355220
+ },
355221
+ advance: {
355222
+ meanDelta: 0,
355223
+ maxDelta: 0
355224
+ },
355225
+ gates: {
355226
+ static: "not_run",
355227
+ metric: "pass",
355228
+ layout: "not_run",
355229
+ ship: "fail"
355230
+ },
355231
+ policyAction: "substitute",
355232
+ measurementRefs: ["helvetica__liberation-sans#analytic_advance#2026-06-03"],
355233
+ candidateLicense: "OFL-1.1",
355234
+ exportRule: "preserve_original_name"
355235
+ },
355236
+ {
355237
+ evidenceId: "calibri-light",
355238
+ logicalFamily: "Calibri Light",
355239
+ physicalFamily: "Carlito",
355240
+ verdict: "visual_only",
355241
+ faces: {
355242
+ regular: false,
355243
+ bold: false,
355244
+ italic: false,
355245
+ boldItalic: false
355246
+ },
355247
+ advance: {
355248
+ meanDelta: 0.0148,
355249
+ maxDelta: 0.066
355250
+ },
355251
+ gates: {
355252
+ static: "not_run",
355253
+ metric: "fail",
355254
+ layout: "not_run",
355255
+ ship: "fail"
355256
+ },
355257
+ policyAction: "category_fallback",
355258
+ measurementRefs: ["calibri-light__carlito#analytic_advance#2026-06-05"],
355259
+ candidateLicense: "OFL-1.1",
355260
+ exportRule: "preserve_original_name"
355261
+ }
355262
+ ]);
355263
+ BUNDLED_SUBSTITUTES = deriveBundledSubstitutes();
355264
+ CATEGORY_FALLBACKS = deriveCategoryFallbacks();
353451
355265
  defaultResolver = new FontResolver;
353452
355266
  DEFAULT_FONT_MEASURE_CONTEXT = Object.freeze({
353453
355267
  resolvePhysical: (cssFontFamily, _face) => resolvePhysicalFamily(cssFontFamily),
@@ -354143,7 +355957,7 @@ function print() { __p += __j.call(arguments, '') }
354143
355957
  const currentPageNumber = Number(opts.currentPageDisplayNumber || opts.currentPageNumber || 1);
354144
355958
  const chapterNumberText = typeof opts.currentPageChapterNumberText === "string" ? opts.currentPageChapterNumberText : undefined;
354145
355959
  const chapterSeparator = typeof opts.currentPageChapterSeparator === "string" ? opts.currentPageChapterSeparator : undefined;
354146
- const totalPages = String(opts.totalPageCount || parentEditor?.currentTotalPages || "1");
355960
+ const totalPages = Number(opts.totalPageCount || parentEditor?.currentTotalPages || 1) || 1;
354147
355961
  const sectionPages = opts.sectionPageCount;
354148
355962
  const pageNumberEls = container.querySelectorAll('[data-id="auto-page-number"]');
354149
355963
  const totalPagesEls = container.querySelectorAll('[data-id="auto-total-pages"]');
@@ -354160,8 +355974,9 @@ function print() { __p += __j.call(arguments, '') }
354160
355974
  el.textContent = text5;
354161
355975
  });
354162
355976
  totalPagesEls.forEach((el) => {
354163
- if (el.textContent !== totalPages)
354164
- el.textContent = totalPages;
355977
+ const text5 = formatPageNumberFieldValue(totalPages, this.#getPageNumberFieldFormatForDomNode(editor, el));
355978
+ if (el.textContent !== text5)
355979
+ el.textContent = text5;
354165
355980
  });
354166
355981
  sectionPagesEls.forEach((el) => {
354167
355982
  if (sectionPages == null)
@@ -354185,6 +356000,17 @@ function print() { __p += __j.call(arguments, '') }
354185
356000
  return null;
354186
356001
  }
354187
356002
  }
356003
+ #getPageNumberFieldFormatForDomNode(editor, el) {
356004
+ try {
356005
+ const view = editor.view;
356006
+ if (!view)
356007
+ return;
356008
+ const pos = view.posAtDOM(el, 0);
356009
+ return getPageNumberFieldFormat(editor.state.doc.nodeAt(pos)?.attrs);
356010
+ } catch {
356011
+ return;
356012
+ }
356013
+ }
354188
356014
  getEditor(descriptor) {
354189
356015
  if (!descriptor?.id)
354190
356016
  return null;
@@ -356223,7 +358049,8 @@ function print() { __p += __j.call(arguments, '') }
356223
358049
  flowMode: this.#layoutOptions.flowMode ?? "paginated",
356224
358050
  blocks: blocks2,
356225
358051
  measures,
356226
- fontSignature: this.#layoutFontSignature
358052
+ fontSignature: this.#layoutFontSignature,
358053
+ bookmarks: this.#layoutState.bookmarks
356227
358054
  });
356228
358055
  const isSemanticFlow = this.#layoutOptions.flowMode === "semantic";
356229
358056
  this.#ensurePainter();
@@ -358499,7 +360326,8 @@ function print() { __p += __j.call(arguments, '') }
358499
360326
  flowMode: this.#layoutOptions.flowMode ?? "paginated",
358500
360327
  blocks: bodyBlocksForPaint,
358501
360328
  measures: bodyMeasuresForPaint,
358502
- fontSignature
360329
+ fontSignature,
360330
+ bookmarks
358503
360331
  });
358504
360332
  headerLayouts = result.headers;
358505
360333
  footerLayouts = result.footers;
@@ -361275,11 +363103,11 @@ function print() { __p += __j.call(arguments, '') }
361275
363103
  ]);
361276
363104
  });
361277
363105
 
361278
- // ../../packages/superdoc/dist/chunks/create-super-doc-ui-k5vyPmpN.es.js
363106
+ // ../../packages/superdoc/dist/chunks/create-super-doc-ui-BOYlxpy0.es.js
361279
363107
  var MOD_ALIASES, ALT_ALIASES, CTRL_ALIASES, SHIFT_ALIASES, BUILTIN_CONTEXT_MENU_GROUPS, BUILTIN_GROUP_ORDER, RESERVED_PROXY_PROPERTY_NAMES, ALL_TOOLBAR_COMMAND_IDS, EMPTY_ACTIVE_IDS;
361280
- var init_create_super_doc_ui_k5vyPmpN_es = __esm(() => {
361281
- init_SuperConverter_DBsJeu9t_es();
361282
- init_create_headless_toolbar_BiY_0zZP_es();
363108
+ var init_create_super_doc_ui_BOYlxpy0_es = __esm(() => {
363109
+ init_SuperConverter_D2zNnC50_es();
363110
+ init_create_headless_toolbar_COmoIa5Q_es();
361283
363111
  MOD_ALIASES = new Set([
361284
363112
  "Mod",
361285
363113
  "Meta",
@@ -361321,16 +363149,16 @@ var init_zipper_yaJVJ4z9_es = __esm(() => {
361321
363149
 
361322
363150
  // ../../packages/superdoc/dist/super-editor.es.js
361323
363151
  var init_super_editor_es = __esm(() => {
361324
- init_src_DYT7_l3i_es();
361325
- init_SuperConverter_DBsJeu9t_es();
363152
+ init_src_eTZqPcFn_es();
363153
+ init_SuperConverter_D2zNnC50_es();
361326
363154
  init_jszip_C49i9kUs_es();
361327
363155
  init_xml_js_CqGKpaft_es();
361328
- init_create_headless_toolbar_BiY_0zZP_es();
363156
+ init_create_headless_toolbar_COmoIa5Q_es();
361329
363157
  init_constants_D9qj59G2_es();
361330
363158
  init_dist_B8HfvhaK_es();
361331
363159
  init_unified_Dsuw2be5_es();
361332
363160
  init_DocxZipper_Bu2Fhqkw_es();
361333
- init_create_super_doc_ui_k5vyPmpN_es();
363161
+ init_create_super_doc_ui_BOYlxpy0_es();
361334
363162
  init_ui_C5PAS9hY_es();
361335
363163
  init_eventemitter3_BnGqBE_Q_es();
361336
363164
  init_errors_CNaD6vcg_es();