@superdoc-dev/mcp 0.3.0-next.73 → 0.3.0-next.74

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 +1312 -582
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -51891,7 +51891,7 @@ var init_remark_gfm_BhnWr3yf_es = __esm(() => {
51891
51891
  emptyOptions2 = {};
51892
51892
  });
51893
51893
 
51894
- // ../../packages/superdoc/dist/chunks/SuperConverter-BecdrRIX.es.js
51894
+ // ../../packages/superdoc/dist/chunks/SuperConverter-CcvDw1Yc.es.js
51895
51895
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
51896
51896
  const fieldValue = extension$1.config[field];
51897
51897
  if (typeof fieldValue === "function")
@@ -64449,12 +64449,11 @@ function preProcessPageRefInstruction(nodesToCombine, instrText) {
64449
64449
  elements: nodesToCombine
64450
64450
  }];
64451
64451
  }
64452
- function preProcessHyperlinkInstruction(nodesToCombine, instruction, docx) {
64452
+ function resolveHyperlinkAttributes(instruction, docx) {
64453
64453
  const urlMatch = instruction.match(/HYPERLINK\s+"([^"]+)"/);
64454
- let linkAttributes;
64455
64454
  if (urlMatch && urlMatch.length >= 2) {
64456
64455
  const url2 = urlMatch[1];
64457
- const relationships = docx["word/_rels/document.xml.rels"]?.elements.find((el) => el.name === "Relationships");
64456
+ const relationships = docx?.["word/_rels/document.xml.rels"]?.elements?.find((el) => el.name === "Relationships");
64458
64457
  if (relationships) {
64459
64458
  const rId = "rId" + generateDocxRandomId();
64460
64459
  relationships.elements.push({
@@ -64467,32 +64466,35 @@ function preProcessHyperlinkInstruction(nodesToCombine, instruction, docx) {
64467
64466
  TargetMode: "External"
64468
64467
  }
64469
64468
  });
64470
- linkAttributes = { "r:id": rId };
64471
- } else
64472
- linkAttributes = { "w:anchor": url2 };
64473
- } else {
64474
- const availableSwitches = {
64475
- "w:anchor": /(?:\\)?l "(?<value>[^"]+)"/,
64476
- new_window: /(?:\\n|\n)/,
64477
- "w:tgtFrame": /(?:\\t|\t) "(?<value>[^"]+)"/,
64478
- "w:tooltip": /(?:\\)?o "(?<value>[^"]+)"/
64479
- };
64480
- const parsedSwitches = {};
64481
- for (const [key, pattern] of Object.entries(availableSwitches)) {
64482
- const match = instruction.match(pattern);
64483
- if (match)
64484
- parsedSwitches[key] = match.groups?.value || true;
64485
- }
64486
- if (parsedSwitches.new_window) {
64487
- parsedSwitches["w:tgtFrame"] = "_blank";
64488
- delete parsedSwitches.new_window;
64469
+ return { "r:id": rId };
64489
64470
  }
64490
- linkAttributes = { ...parsedSwitches };
64471
+ return { "w:anchor": url2 };
64491
64472
  }
64473
+ const availableSwitches = {
64474
+ "w:anchor": /(?:\\)?l "(?<value>[^"]+)"/,
64475
+ new_window: /(?:\\n|\n)/,
64476
+ "w:tgtFrame": /(?:\\t|\t) "(?<value>[^"]+)"/,
64477
+ "w:tooltip": /(?:\\)?o "(?<value>[^"]+)"/
64478
+ };
64479
+ const parsedSwitches = {};
64480
+ for (const [key, pattern] of Object.entries(availableSwitches)) {
64481
+ const match = instruction.match(pattern);
64482
+ if (match)
64483
+ parsedSwitches[key] = match.groups?.value || true;
64484
+ }
64485
+ if (parsedSwitches.new_window) {
64486
+ parsedSwitches["w:tgtFrame"] = "_blank";
64487
+ delete parsedSwitches.new_window;
64488
+ }
64489
+ if (Object.keys(parsedSwitches).length === 0)
64490
+ return null;
64491
+ return { ...parsedSwitches };
64492
+ }
64493
+ function preProcessHyperlinkInstruction(nodesToCombine, instruction, docx) {
64492
64494
  return [{
64493
64495
  name: "w:hyperlink",
64494
64496
  type: "element",
64495
- attributes: linkAttributes,
64497
+ attributes: resolveHyperlinkAttributes(instruction, docx) ?? {},
64496
64498
  elements: nodesToCombine
64497
64499
  }];
64498
64500
  }
@@ -65418,6 +65420,29 @@ function extractTextFromTextBox(textBoxContent, bodyPr, params = {}) {
65418
65420
  } else if (el.name === "sd:totalPageNumber") {
65419
65421
  hasText = true;
65420
65422
  appendFieldPart("NUMPAGES", el, paragraphProperties);
65423
+ } else if (el.name === "w:drawing") {
65424
+ const inline = el.elements?.find((child) => child?.name === "wp:inline");
65425
+ if (inline) {
65426
+ const imagePm = handleImageNode(inline, {
65427
+ ...params,
65428
+ nodes: [el]
65429
+ }, false);
65430
+ if (imagePm?.attrs?.src && imagePm.attrs.hidden !== true) {
65431
+ hasText = true;
65432
+ const sizeAttr = imagePm.attrs.size || imagePm.attrs;
65433
+ textParts.push({
65434
+ text: "",
65435
+ formatting,
65436
+ kind: "image",
65437
+ src: imagePm.attrs.src,
65438
+ extension: imagePm.attrs.extension,
65439
+ rId: imagePm.attrs.rId,
65440
+ width: typeof sizeAttr?.width === "number" ? sizeAttr.width : undefined,
65441
+ height: typeof sizeAttr?.height === "number" ? sizeAttr.height : undefined,
65442
+ alt: imagePm.attrs.alt || ""
65443
+ });
65444
+ }
65445
+ }
65421
65446
  }
65422
65447
  });
65423
65448
  return hasText;
@@ -71547,7 +71572,7 @@ function handlePlainTextUrlPaste(editor, view, plainText, detected) {
71547
71572
  rId
71548
71573
  }));
71549
71574
  if (underlineMarkType)
71550
- tr = tr.addMark(from2, to, underlineMarkType.create());
71575
+ tr = tr.addMark(from2, to, underlineMarkType.create({ autoAdded: true }));
71551
71576
  view.dispatch(tr.scrollIntoView());
71552
71577
  return true;
71553
71578
  }
@@ -73407,7 +73432,9 @@ function handleHtmlPaste(html2, editor, source) {
73407
73432
  const { node: paragraphNode } = findParagraphAncestor($from);
73408
73433
  const isInParagraph = paragraphNode !== null;
73409
73434
  const isSingleParagraph = doc$2.childCount === 1 && doc$2.firstChild.type.name === "paragraph";
73410
- if (isInParagraph && isSingleParagraph) {
73435
+ const sourceStyleId = isSingleParagraph ? doc$2.firstChild.attrs?.paragraphProperties?.styleId ?? null : null;
73436
+ const sourceIsHeading = typeof sourceStyleId === "string" && /^Heading[1-9]$/i.test(sourceStyleId);
73437
+ if (isInParagraph && isSingleParagraph && !sourceIsHeading) {
73411
73438
  const paragraphContent = doc$2.firstChild.content;
73412
73439
  const tr = state.tr.replaceSelectionWith(paragraphContent, false);
73413
73440
  normalizePastedLinks(tr, editor);
@@ -96164,7 +96191,7 @@ var isRegExp = (value) => {
96164
96191
  default:
96165
96192
  return null;
96166
96193
  }
96167
- }, TRACK_CHANGE_ELEMENT_NAMES, TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES, isTrackChangeElement = (node2) => TRACK_CHANGE_ELEMENT_NAMES.has(node2?.name), isTranslatedTrackChangeElement = (node2) => TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES.has(node2?.name), SKIP_FIELD_PROCESSING_NODE_NAMES$1, shouldSkipFieldProcessing$1 = (node2) => SKIP_FIELD_PROCESSING_NODE_NAMES$1.has(node2?.name), preProcessNodesForFldChar = (nodes = [], docx) => {
96194
+ }, TRACK_CHANGE_ELEMENT_NAMES, TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES, CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES, isTrackChangeElement = (node2) => TRACK_CHANGE_ELEMENT_NAMES.has(node2?.name), isTranslatedTrackChangeElement = (node2) => TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES.has(node2?.name), isConstructiveTrackChangeElement = (node2) => CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES.has(node2?.name), SKIP_FIELD_PROCESSING_NODE_NAMES$1, shouldSkipFieldProcessing$1 = (node2) => SKIP_FIELD_PROCESSING_NODE_NAMES$1.has(node2?.name), preProcessNodesForFldChar = (nodes = [], docx) => {
96168
96195
  const processedNodes = [];
96169
96196
  let collectedNodesStack = [];
96170
96197
  let rawCollectedNodesStack = [];
@@ -96184,7 +96211,8 @@ var isRegExp = (value) => {
96184
96211
  if (!currentField.preserveRaw) {
96185
96212
  const combinedResult = _processCombinedNodesForFldChar(collectedNodes, currentField.instrText.trim(), docx, currentField.instructionTokens, fieldRunRPr);
96186
96213
  outputNodes = combinedResult.handled ? combinedResult.nodes : rawCollectedNodes;
96187
- }
96214
+ } else if (currentField.preserveRawConstructive)
96215
+ applyConstructiveFieldInterpretation(outputNodes, currentField.instrText.trim(), docx);
96188
96216
  if (collectedNodesStack.length === 0)
96189
96217
  processedNodes.push(...outputNodes);
96190
96218
  else {
@@ -96295,6 +96323,8 @@ var isRegExp = (value) => {
96295
96323
  const fieldInfo = { ...pendingField.fieldInfo };
96296
96324
  if (fieldInfo.preserveRaw || isTrackChangeElement(node2))
96297
96325
  fieldInfo.preserveRaw = true;
96326
+ if (isConstructiveTrackChangeElement(node2))
96327
+ fieldInfo.preserveRawConstructive = true;
96298
96328
  currentFieldStack.push(fieldInfo);
96299
96329
  collectedNodesStack.push([node2]);
96300
96330
  const rawStack = [rawNode];
@@ -96313,6 +96343,8 @@ var isRegExp = (value) => {
96313
96343
  }
96314
96344
  if (shouldPreserveRaw)
96315
96345
  currentFieldStack[currentFieldStack.length - 1].preserveRaw = true;
96346
+ if (isConstructiveTrackChangeElement(node2))
96347
+ currentFieldStack[currentFieldStack.length - 1].preserveRawConstructive = true;
96316
96348
  collectedNodesStack[collectedNodesStack.length - 1].push(node2);
96317
96349
  captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
96318
96350
  finalizeField();
@@ -96366,6 +96398,80 @@ var isRegExp = (value) => {
96366
96398
  nodes: nodesToCombine,
96367
96399
  handled: false
96368
96400
  };
96401
+ }, applyConstructiveFieldInterpretation = (rawNodes, instrText, docx) => {
96402
+ if (instrText.split(" ")[0] !== "HYPERLINK")
96403
+ return;
96404
+ const linkAttributes = resolveHyperlinkAttributes(instrText, docx);
96405
+ if (!linkAttributes)
96406
+ return;
96407
+ let visible = false;
96408
+ const walk = (parent) => {
96409
+ if (!parent || !Array.isArray(parent.elements))
96410
+ return;
96411
+ const next = [];
96412
+ let pendingHyperlinkRuns = null;
96413
+ const flushHyperlink = () => {
96414
+ if (!pendingHyperlinkRuns || pendingHyperlinkRuns.length === 0) {
96415
+ pendingHyperlinkRuns = null;
96416
+ return;
96417
+ }
96418
+ next.push({
96419
+ type: "element",
96420
+ name: "w:hyperlink",
96421
+ attributes: linkAttributes,
96422
+ elements: pendingHyperlinkRuns
96423
+ });
96424
+ pendingHyperlinkRuns = null;
96425
+ };
96426
+ for (const child of parent.elements) {
96427
+ if (!child)
96428
+ continue;
96429
+ if (child.name === "w:p" || child.name === "w:ins" || child.name === "w:moveTo") {
96430
+ flushHyperlink();
96431
+ walk(child);
96432
+ next.push(child);
96433
+ continue;
96434
+ }
96435
+ if (child.name === "w:r") {
96436
+ const fldType = child.elements?.find((el) => el?.name === "w:fldChar")?.attributes?.["w:fldCharType"];
96437
+ if (fldType === "separate") {
96438
+ flushHyperlink();
96439
+ visible = true;
96440
+ next.push(child);
96441
+ continue;
96442
+ }
96443
+ if (fldType === "end") {
96444
+ flushHyperlink();
96445
+ visible = false;
96446
+ next.push(child);
96447
+ continue;
96448
+ }
96449
+ if (fldType === "begin") {
96450
+ flushHyperlink();
96451
+ next.push(child);
96452
+ continue;
96453
+ }
96454
+ if (child.elements?.some((el) => el?.name === "w:instrText")) {
96455
+ flushHyperlink();
96456
+ next.push(child);
96457
+ continue;
96458
+ }
96459
+ if (visible) {
96460
+ if (!pendingHyperlinkRuns)
96461
+ pendingHyperlinkRuns = [];
96462
+ pendingHyperlinkRuns.push(child);
96463
+ continue;
96464
+ }
96465
+ next.push(child);
96466
+ continue;
96467
+ }
96468
+ flushHyperlink();
96469
+ next.push(child);
96470
+ }
96471
+ flushHyperlink();
96472
+ parent.elements = next;
96473
+ };
96474
+ rawNodes.forEach(walk);
96369
96475
  }, extractFieldRunRPr = (node2) => {
96370
96476
  const rPrNode = node2?.elements?.find((el) => el.name === "w:rPr");
96371
96477
  if (!rPrNode?.elements?.length)
@@ -104936,7 +105042,7 @@ var isRegExp = (value) => {
104936
105042
  if (id)
104937
105043
  return trackedChanges.filter(({ mark }) => mark.attrs.id === id);
104938
105044
  return trackedChanges;
104939
- }, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.31.0", collectRunDefaultProperties = (runProps, { allowOverrideTypeface = true, allowOverrideSize = true, themeResolver, state }) => {
105045
+ }, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.32.0", collectRunDefaultProperties = (runProps, { allowOverrideTypeface = true, allowOverrideSize = true, themeResolver, state }) => {
104940
105046
  if (!runProps?.elements?.length || !state)
104941
105047
  return;
104942
105048
  const fontsNode = runProps.elements.find((el) => el.name === "w:rFonts");
@@ -104970,7 +105076,7 @@ var isRegExp = (value) => {
104970
105076
  state.kern = kernNode.attributes["w:val"];
104971
105077
  }
104972
105078
  }, SuperConverter;
104973
- var init_SuperConverter_BecdrRIX_es = __esm(() => {
105079
+ var init_SuperConverter_CcvDw1Yc_es = __esm(() => {
104974
105080
  init_rolldown_runtime_Bg48TavK_es();
104975
105081
  init_jszip_C49i9kUs_es();
104976
105082
  init_xml_js_CqGKpaft_es();
@@ -133114,6 +133220,7 @@ var init_SuperConverter_BecdrRIX_es = __esm(() => {
133114
133220
  "w:moveTo"
133115
133221
  ]);
133116
133222
  TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES = new Set(["w:del", "w:ins"]);
133223
+ CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES = new Set(["w:ins", "w:moveTo"]);
133117
133224
  SKIP_FIELD_PROCESSING_NODE_NAMES$1 = new Set(["w:drawing", "w:pict"]);
133118
133225
  FIELD_CONTROL_ELEMENT_NAMES = new Set(["w:fldChar"]);
133119
133226
  INSTRUCTION_ELEMENT_NAMES = new Set(["w:instrText", "w:tab"]);
@@ -142838,7 +142945,7 @@ var init_SuperConverter_BecdrRIX_es = __esm(() => {
142838
142945
  };
142839
142946
  });
142840
142947
 
142841
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-DCeIAH_W.es.js
142948
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-D5yv7LyN.es.js
142842
142949
  function parseSizeUnit(val = "0") {
142843
142950
  const length = val.toString() || "0";
142844
142951
  const value = Number.parseFloat(length);
@@ -145505,8 +145612,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, Extension = class Extension2 {
145505
145612
  }
145506
145613
  };
145507
145614
  };
145508
- var init_create_headless_toolbar_DCeIAH_W_es = __esm(() => {
145509
- init_SuperConverter_BecdrRIX_es();
145615
+ var init_create_headless_toolbar_D5yv7LyN_es = __esm(() => {
145616
+ init_SuperConverter_CcvDw1Yc_es();
145510
145617
  init_constants_DrU4EASo_es();
145511
145618
  init_dist_B8HfvhaK_es();
145512
145619
  CSS_DIMENSION_REGEX = /[\d-.]+(\w+)$/;
@@ -199725,7 +199832,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
199725
199832
  init_remark_gfm_BhnWr3yf_es();
199726
199833
  });
199727
199834
 
199728
- // ../../packages/superdoc/dist/chunks/src-BLxaw1d3.es.js
199835
+ // ../../packages/superdoc/dist/chunks/src-BpYr_7Wm.es.js
199729
199836
  function deleteProps(obj, propOrProps) {
199730
199837
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
199731
199838
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -200488,7 +200595,7 @@ function prosemirrorToYXmlFragment(doc$12, xmlFragment) {
200488
200595
  }
200489
200596
  function getSuperdocVersion() {
200490
200597
  try {
200491
- return "1.31.0";
200598
+ return "1.32.0";
200492
200599
  } catch {
200493
200600
  return "unknown";
200494
200601
  }
@@ -201597,13 +201704,37 @@ function createStructuredContentLockPlugin() {
201597
201704
  const sdtNodes = STRUCTURED_CONTENT_LOCK_KEY.getState(state);
201598
201705
  if (sdtNodes.length === 0)
201599
201706
  return false;
201707
+ if (from$1 !== to && !(selection instanceof NodeSelection)) {
201708
+ const exactContentSDT = sdtNodes.find((s2) => from$1 === s2.pos + 1 && to === s2.end - 1);
201709
+ if (exactContentSDT) {
201710
+ if (!(exactContentSDT.lockMode === "sdtLocked" || exactContentSDT.lockMode === "sdtContentLocked")) {
201711
+ const tr = state.tr.setSelection(NodeSelection.create(state.doc, exactContentSDT.pos));
201712
+ view.dispatch(tr);
201713
+ if (isCut)
201714
+ return false;
201715
+ event.preventDefault();
201716
+ return true;
201717
+ }
201718
+ }
201719
+ }
201600
201720
  let affectedFrom = from$1;
201601
201721
  let affectedTo = to;
201602
201722
  if (from$1 === to) {
201603
- if (isBackspace && from$1 > 0)
201723
+ if (isBackspace && from$1 > 0) {
201604
201724
  affectedFrom = from$1 - 1;
201605
- else if (isDelete && to < state.doc.content.size)
201725
+ const adjacentSDT = sdtNodes.find((s2) => s2.end === from$1);
201726
+ if (adjacentSDT) {
201727
+ affectedFrom = adjacentSDT.pos;
201728
+ affectedTo = adjacentSDT.end;
201729
+ }
201730
+ } else if (isDelete && to < state.doc.content.size) {
201606
201731
  affectedTo = to + 1;
201732
+ const adjacentSDT = sdtNodes.find((s2) => s2.pos === to);
201733
+ if (adjacentSDT) {
201734
+ affectedFrom = adjacentSDT.pos;
201735
+ affectedTo = adjacentSDT.end;
201736
+ }
201737
+ }
201607
201738
  }
201608
201739
  if (checkLockViolation(sdtNodes, affectedFrom, affectedTo).blocked) {
201609
201740
  event.preventDefault();
@@ -202525,8 +202656,8 @@ function findNearestParagraphWithSectPr(doc$12, pos) {
202525
202656
  });
202526
202657
  return target;
202527
202658
  }
202528
- function calculateNewIndentation(node2, delta) {
202529
- let { indent: indent2 } = getResolvedParagraphProperties(node2);
202659
+ function calculateNewIndentation(node2, delta, resolvedProps) {
202660
+ let { indent: indent2 } = resolvedProps ?? {};
202530
202661
  let { left: left$1 } = indent2 || {};
202531
202662
  const increment2 = ptToTwips(delta * defaultIncrementPoints);
202532
202663
  if (!left$1)
@@ -202537,14 +202668,14 @@ function calculateNewIndentation(node2, delta) {
202537
202668
  left$1 = null;
202538
202669
  return left$1;
202539
202670
  }
202540
- function modifyIndentation(calcFunc) {
202541
- return ({ state, dispatch }) => {
202671
+ function modifyIndentation(calcFunc, { resolveProps = false } = {}) {
202672
+ return ({ editor, state, dispatch }) => {
202542
202673
  const tr = state.tr;
202543
202674
  const { from: from$1, to } = state.selection;
202544
202675
  const results = [];
202545
202676
  state.doc.nodesBetween(from$1, to, (node2, pos) => {
202546
202677
  if (node2.type.name === "paragraph") {
202547
- let left$1 = calcFunc(node2);
202678
+ let left$1 = calcFunc(node2, resolveProps ? getResolvedParagraphProperties(node2) || calculateResolvedParagraphProperties(editor ?? {}, node2, state.doc.resolve(pos)) : undefined);
202548
202679
  if (Number.isNaN(left$1)) {
202549
202680
  results.push(false);
202550
202681
  return false;
@@ -206008,6 +206139,301 @@ function extractFieldType$1(instruction) {
206008
206139
  const firstSpace = trimmed.indexOf(" ");
206009
206140
  return firstSpace > 0 ? trimmed.slice(0, firstSpace).toUpperCase() : trimmed.toUpperCase();
206010
206141
  }
206142
+ function parseLevelRange(value) {
206143
+ const match$1 = value.match(/^(\d+)-(\d+)$/);
206144
+ if (!match$1)
206145
+ return;
206146
+ return {
206147
+ from: parseInt(match$1[1], 10),
206148
+ to: parseInt(match$1[2], 10)
206149
+ };
206150
+ }
206151
+ function parseCustomStyles(value) {
206152
+ const entries = [];
206153
+ const parts = value.split(",");
206154
+ for (let i4 = 0;i4 < parts.length - 1; i4 += 2) {
206155
+ const styleName = parts[i4].trim();
206156
+ const level = parseInt(parts[i4 + 1].trim(), 10);
206157
+ if (styleName && !isNaN(level))
206158
+ entries.push({
206159
+ styleName,
206160
+ level
206161
+ });
206162
+ }
206163
+ return entries;
206164
+ }
206165
+ function deriveIncludePageNumbers(omitRange, outlineLevels) {
206166
+ if (!omitRange)
206167
+ return true;
206168
+ const effectiveRange = outlineLevels ?? {
206169
+ from: 1,
206170
+ to: 9
206171
+ };
206172
+ return !(omitRange.from <= effectiveRange.from && omitRange.to >= effectiveRange.to);
206173
+ }
206174
+ function deriveTabLeader(separator) {
206175
+ if (separator === undefined)
206176
+ return;
206177
+ if (separator === "")
206178
+ return "none";
206179
+ return SEPARATOR_TO_TAB_LEADER[separator];
206180
+ }
206181
+ function parseTocInstruction(instruction) {
206182
+ const source = {};
206183
+ const display = {};
206184
+ const preserved = {};
206185
+ const rawExtensions = [];
206186
+ let match$1;
206187
+ SWITCH_PATTERN$1.lastIndex = 0;
206188
+ while ((match$1 = SWITCH_PATTERN$1.exec(instruction)) !== null) {
206189
+ const switchChar = match$1[1].toLowerCase();
206190
+ const rawArg = match$1[2];
206191
+ const arg = rawArg ?? "";
206192
+ switch (switchChar) {
206193
+ case "o": {
206194
+ const range = parseLevelRange(arg);
206195
+ if (range)
206196
+ source.outlineLevels = range;
206197
+ break;
206198
+ }
206199
+ case "u":
206200
+ source.useAppliedOutlineLevel = true;
206201
+ break;
206202
+ case "f":
206203
+ if (arg)
206204
+ source.tcFieldIdentifier = arg;
206205
+ break;
206206
+ case "l": {
206207
+ const range = parseLevelRange(arg);
206208
+ if (range)
206209
+ source.tcFieldLevels = range;
206210
+ break;
206211
+ }
206212
+ case "h":
206213
+ display.hyperlinks = true;
206214
+ break;
206215
+ case "z":
206216
+ display.hideInWebView = true;
206217
+ break;
206218
+ case "n": {
206219
+ const range = parseLevelRange(arg);
206220
+ if (range)
206221
+ display.omitPageNumberLevels = range;
206222
+ break;
206223
+ }
206224
+ case "p":
206225
+ if (rawArg !== undefined)
206226
+ display.separator = rawArg;
206227
+ break;
206228
+ case "t":
206229
+ if (arg)
206230
+ preserved.customStyles = parseCustomStyles(arg);
206231
+ break;
206232
+ case "b":
206233
+ if (arg)
206234
+ preserved.bookmarkName = arg;
206235
+ break;
206236
+ case "a":
206237
+ if (arg)
206238
+ preserved.captionType = arg;
206239
+ break;
206240
+ case "c":
206241
+ if (arg)
206242
+ preserved.seqFieldIdentifier = arg;
206243
+ break;
206244
+ case "d":
206245
+ if (arg)
206246
+ preserved.chapterSeparator = arg;
206247
+ break;
206248
+ case "s":
206249
+ if (arg)
206250
+ preserved.chapterNumberSource = arg;
206251
+ break;
206252
+ case "w":
206253
+ preserved.preserveTabEntries = true;
206254
+ break;
206255
+ default:
206256
+ rawExtensions.push(arg ? `\\${switchChar} "${arg}"` : `\\${switchChar}`);
206257
+ break;
206258
+ }
206259
+ }
206260
+ if (rawExtensions.length > 0)
206261
+ preserved.rawExtensions = rawExtensions;
206262
+ display.includePageNumbers = deriveIncludePageNumbers(display.omitPageNumberLevels, source.outlineLevels);
206263
+ const tabLeader = deriveTabLeader(display.separator);
206264
+ if (tabLeader !== undefined)
206265
+ display.tabLeader = tabLeader;
206266
+ return {
206267
+ source,
206268
+ display,
206269
+ preserved
206270
+ };
206271
+ }
206272
+ function serializeTocInstruction(config3) {
206273
+ const parts = ["TOC"];
206274
+ const { source, display, preserved } = config3;
206275
+ if (source.outlineLevels)
206276
+ parts.push(`\\o "${source.outlineLevels.from}-${source.outlineLevels.to}"`);
206277
+ if (source.useAppliedOutlineLevel)
206278
+ parts.push("\\u");
206279
+ if (source.tcFieldIdentifier)
206280
+ parts.push(`\\f "${source.tcFieldIdentifier}"`);
206281
+ if (source.tcFieldLevels)
206282
+ parts.push(`\\l "${source.tcFieldLevels.from}-${source.tcFieldLevels.to}"`);
206283
+ if (preserved.customStyles?.length) {
206284
+ const pairs = preserved.customStyles.map((s2) => `${s2.styleName},${s2.level}`).join(",");
206285
+ parts.push(`\\t "${pairs}"`);
206286
+ }
206287
+ if (display.hyperlinks)
206288
+ parts.push("\\h");
206289
+ if (display.hideInWebView)
206290
+ parts.push("\\z");
206291
+ if (display.omitPageNumberLevels)
206292
+ parts.push(`\\n "${display.omitPageNumberLevels.from}-${display.omitPageNumberLevels.to}"`);
206293
+ if (display.separator !== undefined)
206294
+ parts.push(`\\p "${display.separator}"`);
206295
+ if (preserved.captionType)
206296
+ parts.push(`\\a "${preserved.captionType}"`);
206297
+ if (preserved.bookmarkName)
206298
+ parts.push(`\\b "${preserved.bookmarkName}"`);
206299
+ if (preserved.seqFieldIdentifier)
206300
+ parts.push(`\\c "${preserved.seqFieldIdentifier}"`);
206301
+ if (preserved.chapterSeparator)
206302
+ parts.push(`\\d "${preserved.chapterSeparator}"`);
206303
+ if (preserved.chapterNumberSource)
206304
+ parts.push(`\\s "${preserved.chapterNumberSource}"`);
206305
+ if (preserved.preserveTabEntries)
206306
+ parts.push("\\w");
206307
+ if (preserved.rawExtensions?.length)
206308
+ parts.push(...preserved.rawExtensions);
206309
+ return parts.join(" ");
206310
+ }
206311
+ function computeOmitPageNumberRange(source) {
206312
+ return source.outlineLevels ?? {
206313
+ from: 1,
206314
+ to: 9
206315
+ };
206316
+ }
206317
+ function applyTocPatch(existing, patch3) {
206318
+ if (patch3.tabLeader !== undefined && patch3.separator !== undefined)
206319
+ throw new Error("INVALID_INPUT: cannot set both tabLeader and separator in the same patch");
206320
+ if (patch3.includePageNumbers !== undefined && patch3.omitPageNumberLevels !== undefined)
206321
+ throw new Error("INVALID_INPUT: cannot set both includePageNumbers and omitPageNumberLevels in the same patch");
206322
+ const newSource = {
206323
+ ...existing.source,
206324
+ ...patch3.outlineLevels !== undefined && { outlineLevels: patch3.outlineLevels },
206325
+ ...patch3.useAppliedOutlineLevel !== undefined && { useAppliedOutlineLevel: patch3.useAppliedOutlineLevel },
206326
+ ...patch3.tcFieldIdentifier !== undefined && { tcFieldIdentifier: patch3.tcFieldIdentifier },
206327
+ ...patch3.tcFieldLevels !== undefined && { tcFieldLevels: patch3.tcFieldLevels }
206328
+ };
206329
+ const newDisplay = {
206330
+ ...existing.display,
206331
+ ...patch3.hyperlinks !== undefined && { hyperlinks: patch3.hyperlinks },
206332
+ ...patch3.hideInWebView !== undefined && { hideInWebView: patch3.hideInWebView }
206333
+ };
206334
+ if (patch3.includePageNumbers !== undefined) {
206335
+ if (patch3.includePageNumbers)
206336
+ delete newDisplay.omitPageNumberLevels;
206337
+ else
206338
+ newDisplay.omitPageNumberLevels = computeOmitPageNumberRange(newSource);
206339
+ newDisplay.includePageNumbers = patch3.includePageNumbers;
206340
+ } else if (patch3.omitPageNumberLevels !== undefined) {
206341
+ newDisplay.omitPageNumberLevels = patch3.omitPageNumberLevels;
206342
+ newDisplay.includePageNumbers = deriveIncludePageNumbers(patch3.omitPageNumberLevels, newSource.outlineLevels);
206343
+ }
206344
+ if (patch3.tabLeader !== undefined) {
206345
+ if (patch3.tabLeader === "none")
206346
+ newDisplay.separator = "";
206347
+ else
206348
+ newDisplay.separator = TAB_LEADER_TO_SEPARATOR[patch3.tabLeader];
206349
+ newDisplay.tabLeader = patch3.tabLeader;
206350
+ } else if (patch3.separator !== undefined) {
206351
+ newDisplay.separator = patch3.separator;
206352
+ const derived = deriveTabLeader(patch3.separator);
206353
+ if (derived !== undefined)
206354
+ newDisplay.tabLeader = derived;
206355
+ else
206356
+ delete newDisplay.tabLeader;
206357
+ }
206358
+ return {
206359
+ source: newSource,
206360
+ display: newDisplay,
206361
+ preserved: { ...existing.preserved }
206362
+ };
206363
+ }
206364
+ function areTocConfigsEqual(a2, b$1) {
206365
+ return serializeTocInstruction(a2) === serializeTocInstruction(b$1);
206366
+ }
206367
+ function findAllTocNodes(doc$12) {
206368
+ const results = [];
206369
+ doc$12.descendants((node2, pos) => {
206370
+ if (node2.type.name === "tableOfContents") {
206371
+ const sdBlockId = node2.attrs?.sdBlockId;
206372
+ const nodeId = resolvePublicTocNodeId(node2, pos);
206373
+ const commandNodeId = sdBlockId;
206374
+ results.push({
206375
+ node: node2,
206376
+ pos,
206377
+ nodeId,
206378
+ commandNodeId
206379
+ });
206380
+ return false;
206381
+ }
206382
+ return true;
206383
+ });
206384
+ return results;
206385
+ }
206386
+ function resolveTocTarget(doc$12, target) {
206387
+ const found2 = findAllTocNodes(doc$12).find((t) => t.nodeId === target.nodeId || t.commandNodeId === target.nodeId);
206388
+ if (!found2)
206389
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Table of contents with nodeId "${target.nodeId}" not found.`);
206390
+ return found2;
206391
+ }
206392
+ function resolvePostMutationTocId(doc$12, sdBlockId) {
206393
+ return findAllTocNodes(doc$12).find((t) => t.commandNodeId === sdBlockId)?.nodeId ?? sdBlockId;
206394
+ }
206395
+ function extractTocInfo(node2) {
206396
+ const instruction = node2.attrs?.instruction ?? "";
206397
+ const config3 = parseTocInstruction(instruction);
206398
+ const rightAlign = node2.attrs?.rightAlignPageNumbers;
206399
+ return {
206400
+ nodeType: "tableOfContents",
206401
+ kind: "block",
206402
+ properties: {
206403
+ instruction,
206404
+ sourceConfig: config3.source,
206405
+ displayConfig: {
206406
+ ...config3.display,
206407
+ ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
206408
+ },
206409
+ preservedSwitches: config3.preserved,
206410
+ entryCount: node2.childCount
206411
+ }
206412
+ };
206413
+ }
206414
+ function buildTocDiscoveryItem(resolved, evaluatedRevision) {
206415
+ const instruction = resolved.node.attrs?.instruction ?? "";
206416
+ const config3 = parseTocInstruction(instruction);
206417
+ const address = {
206418
+ kind: "block",
206419
+ nodeType: "tableOfContents",
206420
+ nodeId: resolved.nodeId
206421
+ };
206422
+ const handle3 = buildResolvedHandle(resolved.nodeId, "stable", "tableOfContents");
206423
+ const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
206424
+ const domain3 = {
206425
+ address,
206426
+ instruction,
206427
+ sourceConfig: config3.source,
206428
+ displayConfig: {
206429
+ ...config3.display,
206430
+ ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
206431
+ },
206432
+ preserved: config3.preserved,
206433
+ entryCount: resolved.node.childCount
206434
+ };
206435
+ return buildDiscoveryItem(`toc:${resolved.nodeId}:${evaluatedRevision}`, handle3, domain3);
206436
+ }
206011
206437
  function createCascadeToggleCommands({ markName, setCommand, unsetCommand, toggleCommand, negationAttrs, isNegation, extendEmptyMarkRange } = {}) {
206012
206438
  if (!markName)
206013
206439
  throw new Error("createCascadeToggleCommands requires a markName");
@@ -212595,6 +213021,40 @@ function buildSchemaSummary(schema, schemaVersion) {
212595
213021
  function getFirstElementChild(node2) {
212596
213022
  return Array.from(node2.childNodes).find((n) => n.nodeType === Node.ELEMENT_NODE) || null;
212597
213023
  }
213024
+ function wrapHeadingSelectionAsParagraph(slice2, state) {
213025
+ const firstChild = slice2.content.firstChild;
213026
+ if (!firstChild || firstChild.type.name === "paragraph")
213027
+ return slice2;
213028
+ const $from = state.selection.$from;
213029
+ const $to = state.selection.$to;
213030
+ if (!$from || !$to)
213031
+ return slice2;
213032
+ let parentParagraph = null;
213033
+ let parentDepth = -1;
213034
+ for (let depth = $from.depth;depth >= 0; depth--) {
213035
+ const node2 = $from.node(depth);
213036
+ if (node2?.type?.name === "paragraph") {
213037
+ if ($to.depth >= depth && $to.node(depth) === node2) {
213038
+ parentParagraph = node2;
213039
+ parentDepth = depth;
213040
+ }
213041
+ break;
213042
+ }
213043
+ }
213044
+ if (!parentParagraph)
213045
+ return slice2;
213046
+ const startOffset = $from.parentOffset;
213047
+ const endOffset = $to.parentOffset;
213048
+ if (startOffset !== 0 || endOffset !== parentParagraph.content.size)
213049
+ return slice2;
213050
+ if ($from.depth !== parentDepth || $to.depth !== parentDepth)
213051
+ return slice2;
213052
+ const styleId = parentParagraph.attrs?.paragraphProperties?.styleId;
213053
+ if (typeof styleId !== "string" || !HEADING_STYLE_RE.test(styleId))
213054
+ return slice2;
213055
+ const wrapped = parentParagraph.type.create(parentParagraph.attrs, slice2.content, parentParagraph.marks);
213056
+ return new Slice(Fragment.from(wrapped), 0, 0);
213057
+ }
212598
213058
  function closestCopyBlock(node2, root3) {
212599
213059
  let current = node2;
212600
213060
  while (current && current !== root3) {
@@ -212817,228 +213277,6 @@ function buildSelectionClipboardHtml(view, editor) {
212817
213277
  annotateCopiedSectionMetadata(container, view);
212818
213278
  return serializeSelectionAsWordHtml(container) || container.innerHTML || null;
212819
213279
  }
212820
- function parseLevelRange(value) {
212821
- const match$1 = value.match(/^(\d+)-(\d+)$/);
212822
- if (!match$1)
212823
- return;
212824
- return {
212825
- from: parseInt(match$1[1], 10),
212826
- to: parseInt(match$1[2], 10)
212827
- };
212828
- }
212829
- function parseCustomStyles(value) {
212830
- const entries = [];
212831
- const parts = value.split(",");
212832
- for (let i4 = 0;i4 < parts.length - 1; i4 += 2) {
212833
- const styleName = parts[i4].trim();
212834
- const level = parseInt(parts[i4 + 1].trim(), 10);
212835
- if (styleName && !isNaN(level))
212836
- entries.push({
212837
- styleName,
212838
- level
212839
- });
212840
- }
212841
- return entries;
212842
- }
212843
- function deriveIncludePageNumbers(omitRange, outlineLevels) {
212844
- if (!omitRange)
212845
- return true;
212846
- const effectiveRange = outlineLevels ?? {
212847
- from: 1,
212848
- to: 9
212849
- };
212850
- return !(omitRange.from <= effectiveRange.from && omitRange.to >= effectiveRange.to);
212851
- }
212852
- function deriveTabLeader(separator) {
212853
- if (!separator)
212854
- return "none";
212855
- return SEPARATOR_TO_TAB_LEADER[separator];
212856
- }
212857
- function parseTocInstruction(instruction) {
212858
- const source = {};
212859
- const display = {};
212860
- const preserved = {};
212861
- const rawExtensions = [];
212862
- let match$1;
212863
- SWITCH_PATTERN$1.lastIndex = 0;
212864
- while ((match$1 = SWITCH_PATTERN$1.exec(instruction)) !== null) {
212865
- const switchChar = match$1[1].toLowerCase();
212866
- const arg = match$1[2] ?? "";
212867
- switch (switchChar) {
212868
- case "o": {
212869
- const range = parseLevelRange(arg);
212870
- if (range)
212871
- source.outlineLevels = range;
212872
- break;
212873
- }
212874
- case "u":
212875
- source.useAppliedOutlineLevel = true;
212876
- break;
212877
- case "f":
212878
- if (arg)
212879
- source.tcFieldIdentifier = arg;
212880
- break;
212881
- case "l": {
212882
- const range = parseLevelRange(arg);
212883
- if (range)
212884
- source.tcFieldLevels = range;
212885
- break;
212886
- }
212887
- case "h":
212888
- display.hyperlinks = true;
212889
- break;
212890
- case "z":
212891
- display.hideInWebView = true;
212892
- break;
212893
- case "n": {
212894
- const range = parseLevelRange(arg);
212895
- if (range)
212896
- display.omitPageNumberLevels = range;
212897
- break;
212898
- }
212899
- case "p":
212900
- if (arg)
212901
- display.separator = arg;
212902
- break;
212903
- case "t":
212904
- if (arg)
212905
- preserved.customStyles = parseCustomStyles(arg);
212906
- break;
212907
- case "b":
212908
- if (arg)
212909
- preserved.bookmarkName = arg;
212910
- break;
212911
- case "a":
212912
- if (arg)
212913
- preserved.captionType = arg;
212914
- break;
212915
- case "c":
212916
- if (arg)
212917
- preserved.seqFieldIdentifier = arg;
212918
- break;
212919
- case "d":
212920
- if (arg)
212921
- preserved.chapterSeparator = arg;
212922
- break;
212923
- case "s":
212924
- if (arg)
212925
- preserved.chapterNumberSource = arg;
212926
- break;
212927
- case "w":
212928
- preserved.preserveTabEntries = true;
212929
- break;
212930
- default:
212931
- rawExtensions.push(arg ? `\\${switchChar} "${arg}"` : `\\${switchChar}`);
212932
- break;
212933
- }
212934
- }
212935
- if (rawExtensions.length > 0)
212936
- preserved.rawExtensions = rawExtensions;
212937
- display.includePageNumbers = deriveIncludePageNumbers(display.omitPageNumberLevels, source.outlineLevels);
212938
- const tabLeader = deriveTabLeader(display.separator);
212939
- if (tabLeader !== undefined)
212940
- display.tabLeader = tabLeader;
212941
- return {
212942
- source,
212943
- display,
212944
- preserved
212945
- };
212946
- }
212947
- function serializeTocInstruction(config3) {
212948
- const parts = ["TOC"];
212949
- const { source, display, preserved } = config3;
212950
- if (source.outlineLevels)
212951
- parts.push(`\\o "${source.outlineLevels.from}-${source.outlineLevels.to}"`);
212952
- if (source.useAppliedOutlineLevel)
212953
- parts.push("\\u");
212954
- if (source.tcFieldIdentifier)
212955
- parts.push(`\\f "${source.tcFieldIdentifier}"`);
212956
- if (source.tcFieldLevels)
212957
- parts.push(`\\l "${source.tcFieldLevels.from}-${source.tcFieldLevels.to}"`);
212958
- if (preserved.customStyles?.length) {
212959
- const pairs = preserved.customStyles.map((s2) => `${s2.styleName},${s2.level}`).join(",");
212960
- parts.push(`\\t "${pairs}"`);
212961
- }
212962
- if (display.hyperlinks)
212963
- parts.push("\\h");
212964
- if (display.hideInWebView)
212965
- parts.push("\\z");
212966
- if (display.omitPageNumberLevels)
212967
- parts.push(`\\n "${display.omitPageNumberLevels.from}-${display.omitPageNumberLevels.to}"`);
212968
- if (display.separator)
212969
- parts.push(`\\p "${display.separator}"`);
212970
- if (preserved.captionType)
212971
- parts.push(`\\a "${preserved.captionType}"`);
212972
- if (preserved.bookmarkName)
212973
- parts.push(`\\b "${preserved.bookmarkName}"`);
212974
- if (preserved.seqFieldIdentifier)
212975
- parts.push(`\\c "${preserved.seqFieldIdentifier}"`);
212976
- if (preserved.chapterSeparator)
212977
- parts.push(`\\d "${preserved.chapterSeparator}"`);
212978
- if (preserved.chapterNumberSource)
212979
- parts.push(`\\s "${preserved.chapterNumberSource}"`);
212980
- if (preserved.preserveTabEntries)
212981
- parts.push("\\w");
212982
- if (preserved.rawExtensions?.length)
212983
- parts.push(...preserved.rawExtensions);
212984
- return parts.join(" ");
212985
- }
212986
- function computeOmitPageNumberRange(source) {
212987
- return source.outlineLevels ?? {
212988
- from: 1,
212989
- to: 9
212990
- };
212991
- }
212992
- function applyTocPatch(existing, patch3) {
212993
- if (patch3.tabLeader !== undefined && patch3.separator !== undefined)
212994
- throw new Error("INVALID_INPUT: cannot set both tabLeader and separator in the same patch");
212995
- if (patch3.includePageNumbers !== undefined && patch3.omitPageNumberLevels !== undefined)
212996
- throw new Error("INVALID_INPUT: cannot set both includePageNumbers and omitPageNumberLevels in the same patch");
212997
- const newSource = {
212998
- ...existing.source,
212999
- ...patch3.outlineLevels !== undefined && { outlineLevels: patch3.outlineLevels },
213000
- ...patch3.useAppliedOutlineLevel !== undefined && { useAppliedOutlineLevel: patch3.useAppliedOutlineLevel },
213001
- ...patch3.tcFieldIdentifier !== undefined && { tcFieldIdentifier: patch3.tcFieldIdentifier },
213002
- ...patch3.tcFieldLevels !== undefined && { tcFieldLevels: patch3.tcFieldLevels }
213003
- };
213004
- const newDisplay = {
213005
- ...existing.display,
213006
- ...patch3.hyperlinks !== undefined && { hyperlinks: patch3.hyperlinks },
213007
- ...patch3.hideInWebView !== undefined && { hideInWebView: patch3.hideInWebView }
213008
- };
213009
- if (patch3.includePageNumbers !== undefined) {
213010
- if (patch3.includePageNumbers)
213011
- delete newDisplay.omitPageNumberLevels;
213012
- else
213013
- newDisplay.omitPageNumberLevels = computeOmitPageNumberRange(newSource);
213014
- newDisplay.includePageNumbers = patch3.includePageNumbers;
213015
- } else if (patch3.omitPageNumberLevels !== undefined) {
213016
- newDisplay.omitPageNumberLevels = patch3.omitPageNumberLevels;
213017
- newDisplay.includePageNumbers = deriveIncludePageNumbers(patch3.omitPageNumberLevels, newSource.outlineLevels);
213018
- }
213019
- if (patch3.tabLeader !== undefined) {
213020
- if (patch3.tabLeader === "none")
213021
- delete newDisplay.separator;
213022
- else
213023
- newDisplay.separator = TAB_LEADER_TO_SEPARATOR[patch3.tabLeader];
213024
- newDisplay.tabLeader = patch3.tabLeader;
213025
- } else if (patch3.separator !== undefined) {
213026
- newDisplay.separator = patch3.separator;
213027
- const derived = deriveTabLeader(patch3.separator);
213028
- if (derived !== undefined)
213029
- newDisplay.tabLeader = derived;
213030
- else
213031
- delete newDisplay.tabLeader;
213032
- }
213033
- return {
213034
- source: newSource,
213035
- display: newDisplay,
213036
- preserved: { ...existing.preserved }
213037
- };
213038
- }
213039
- function areTocConfigsEqual(a2, b$1) {
213040
- return serializeTocInstruction(a2) === serializeTocInstruction(b$1);
213041
- }
213042
213280
  function projectContentNode(pmNode) {
213043
213281
  return projectBlock(pmNode);
213044
213282
  }
@@ -214861,11 +215099,11 @@ function checkUniformity(runs2) {
214861
215099
  return true;
214862
215100
  const reference$1 = runs2[0].marks;
214863
215101
  for (let i4 = 1;i4 < runs2.length; i4++)
214864
- if (!marksEqual$1(reference$1, runs2[i4].marks))
215102
+ if (!marksEqual$2(reference$1, runs2[i4].marks))
214865
215103
  return false;
214866
215104
  return true;
214867
215105
  }
214868
- function marksEqual$1(a2, b$1) {
215106
+ function marksEqual$2(a2, b$1) {
214869
215107
  if (a2.length !== b$1.length)
214870
215108
  return false;
214871
215109
  for (let i4 = 0;i4 < a2.length; i4++)
@@ -215141,7 +215379,7 @@ function buildInlineRpr(marks) {
215141
215379
  }
215142
215380
  return rpr;
215143
215381
  }
215144
- function marksEqual(a2, b$1) {
215382
+ function marksEqual$1(a2, b$1) {
215145
215383
  if (a2.length !== b$1.length)
215146
215384
  return false;
215147
215385
  for (let i4 = 0;i4 < a2.length; i4++)
@@ -215164,7 +215402,7 @@ function coalesceRuns(runs2) {
215164
215402
  const next2 = sorted[i4];
215165
215403
  if (next2.from >= next2.to)
215166
215404
  continue;
215167
- if (next2.from === current.to && marksEqual(current.marks, next2.marks))
215405
+ if (next2.from === current.to && marksEqual$1(current.marks, next2.marks))
215168
215406
  current = {
215169
215407
  from: current.from,
215170
215408
  to: next2.to,
@@ -232289,76 +232527,6 @@ function wrapServiceCall(fn2) {
232289
232527
  throw error48;
232290
232528
  }
232291
232529
  }
232292
- function findAllTocNodes(doc$12) {
232293
- const results = [];
232294
- doc$12.descendants((node2, pos) => {
232295
- if (node2.type.name === "tableOfContents") {
232296
- const sdBlockId = node2.attrs?.sdBlockId;
232297
- const nodeId = resolvePublicTocNodeId(node2, pos);
232298
- const commandNodeId = sdBlockId;
232299
- results.push({
232300
- node: node2,
232301
- pos,
232302
- nodeId,
232303
- commandNodeId
232304
- });
232305
- return false;
232306
- }
232307
- return true;
232308
- });
232309
- return results;
232310
- }
232311
- function resolveTocTarget(doc$12, target) {
232312
- const found2 = findAllTocNodes(doc$12).find((t) => t.nodeId === target.nodeId || t.commandNodeId === target.nodeId);
232313
- if (!found2)
232314
- throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Table of contents with nodeId "${target.nodeId}" not found.`);
232315
- return found2;
232316
- }
232317
- function resolvePostMutationTocId(doc$12, sdBlockId) {
232318
- return findAllTocNodes(doc$12).find((t) => t.commandNodeId === sdBlockId)?.nodeId ?? sdBlockId;
232319
- }
232320
- function extractTocInfo(node2) {
232321
- const instruction = node2.attrs?.instruction ?? "";
232322
- const config3 = parseTocInstruction(instruction);
232323
- const rightAlign = node2.attrs?.rightAlignPageNumbers;
232324
- return {
232325
- nodeType: "tableOfContents",
232326
- kind: "block",
232327
- properties: {
232328
- instruction,
232329
- sourceConfig: config3.source,
232330
- displayConfig: {
232331
- ...config3.display,
232332
- ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
232333
- },
232334
- preservedSwitches: config3.preserved,
232335
- entryCount: node2.childCount
232336
- }
232337
- };
232338
- }
232339
- function buildTocDiscoveryItem(resolved, evaluatedRevision) {
232340
- const instruction = resolved.node.attrs?.instruction ?? "";
232341
- const config3 = parseTocInstruction(instruction);
232342
- const address = {
232343
- kind: "block",
232344
- nodeType: "tableOfContents",
232345
- nodeId: resolved.nodeId
232346
- };
232347
- const handle3 = buildResolvedHandle(resolved.nodeId, "stable", "tableOfContents");
232348
- const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
232349
- const domain3 = {
232350
- address,
232351
- instruction,
232352
- sourceConfig: config3.source,
232353
- displayConfig: {
232354
- ...config3.display,
232355
- ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
232356
- },
232357
- preserved: config3.preserved,
232358
- entryCount: resolved.node.childCount
232359
- };
232360
- return buildDiscoveryItem(`toc:${resolved.nodeId}:${evaluatedRevision}`, handle3, domain3);
232361
- }
232362
232530
  function extractEntryText(instruction) {
232363
232531
  const withoutPrefix = instruction.replace(/^TC\s+/i, "");
232364
232532
  const quoteMatch = withoutPrefix.match(/^"([^"]*)"/);
@@ -232567,28 +232735,53 @@ function dispatchTransaction$2(editor, tr) {
232567
232735
  else if (typeof editor.view?.dispatch === "function")
232568
232736
  editor.view.dispatch(tr);
232569
232737
  }
232738
+ function sanitizeSourceMark(mark2) {
232739
+ if (!mark2?.type)
232740
+ return null;
232741
+ if (mark2.type === "textStyle") {
232742
+ const attrs = mark2.attrs ?? {};
232743
+ const kept = {};
232744
+ for (const key2 of Object.keys(attrs))
232745
+ if (TEXT_STYLE_ALLOWED_ATTRS.has(key2) && attrs[key2] != null)
232746
+ kept[key2] = attrs[key2];
232747
+ return Object.keys(kept).length > 0 ? {
232748
+ type: "textStyle",
232749
+ attrs: kept
232750
+ } : null;
232751
+ }
232752
+ if (!ALLOWED_SOURCE_MARK_TYPES.has(mark2.type))
232753
+ return null;
232754
+ return mark2.attrs && Object.keys(mark2.attrs).length > 0 ? {
232755
+ type: mark2.type,
232756
+ attrs: { ...mark2.attrs }
232757
+ } : { type: mark2.type };
232758
+ }
232570
232759
  function collectTocSources(doc$12, config3) {
232571
232760
  const sources = [];
232572
232761
  const { outlineLevels, useAppliedOutlineLevel, tcFieldIdentifier, tcFieldLevels } = config3.source;
232573
232762
  const useApplied = useAppliedOutlineLevel ?? false;
232574
232763
  const collectTcFields = tcFieldIdentifier !== undefined || tcFieldLevels !== undefined;
232575
232764
  let currentParagraphSdBlockId;
232576
- doc$12.descendants((node2, _pos) => {
232765
+ doc$12.descendants((node2, pos) => {
232577
232766
  if (node2.type.name === "tableOfContents")
232578
232767
  return false;
232579
232768
  if (node2.type.name === "paragraph") {
232580
232769
  const attrs = node2.attrs;
232581
232770
  const paragraphProps = attrs?.paragraphProperties;
232582
232771
  const styleId = paragraphProps?.styleId;
232583
- const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId;
232772
+ const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId ?? buildFallbackBlockNodeId("paragraph", pos);
232584
232773
  currentParagraphSdBlockId = sdBlockId;
232585
232774
  if (!sdBlockId)
232586
232775
  return true;
232776
+ const text5 = flattenText(node2);
232777
+ if (text5.trim().length === 0)
232778
+ return true;
232587
232779
  if (outlineLevels) {
232588
232780
  const headingLevel = getHeadingLevel(styleId);
232589
232781
  if (headingLevel != null && headingLevel >= outlineLevels.from && headingLevel <= outlineLevels.to) {
232590
232782
  sources.push({
232591
- text: flattenText(node2),
232783
+ text: text5,
232784
+ segments: extractTextSegments(node2),
232592
232785
  level: headingLevel,
232593
232786
  sdBlockId,
232594
232787
  kind: "heading"
@@ -232606,7 +232799,8 @@ function collectTocSources(doc$12, config3) {
232606
232799
  const tocLevel = rawOutlineLevel + 1;
232607
232800
  if (tocLevel >= effectiveLevels.from && tocLevel <= effectiveLevels.to) {
232608
232801
  sources.push({
232609
- text: flattenText(node2),
232802
+ text: text5,
232803
+ segments: extractTextSegments(node2),
232610
232804
  level: tocLevel,
232611
232805
  sdBlockId,
232612
232806
  kind: "appliedOutline"
@@ -232647,50 +232841,91 @@ function flattenText(node2) {
232647
232841
  });
232648
232842
  return text5;
232649
232843
  }
232650
- function buildTocEntryParagraphs(sources, config3) {
232651
- return sources.map((source) => buildEntryParagraph(source, config3));
232844
+ function extractTextSegments(node2) {
232845
+ const segments = [];
232846
+ node2.descendants((child) => {
232847
+ if (!child.isText || !child.text)
232848
+ return true;
232849
+ const marks = [];
232850
+ for (const mark2 of child.marks ?? []) {
232851
+ const raw = { type: mark2.type?.name ?? "" };
232852
+ if (mark2.attrs && Object.keys(mark2.attrs).length > 0)
232853
+ raw.attrs = { ...mark2.attrs };
232854
+ const sanitized = sanitizeSourceMark(raw);
232855
+ if (sanitized)
232856
+ marks.push(sanitized);
232857
+ }
232858
+ const last2 = segments[segments.length - 1];
232859
+ if (last2 && marksEqual(last2.marks, marks))
232860
+ last2.text += child.text;
232861
+ else
232862
+ segments.push(marks.length > 0 ? {
232863
+ text: child.text,
232864
+ marks
232865
+ } : { text: child.text });
232866
+ return true;
232867
+ });
232868
+ return segments;
232869
+ }
232870
+ function marksEqual(a2, b$1) {
232871
+ const aLen = a2?.length ?? 0;
232872
+ if (aLen !== (b$1?.length ?? 0))
232873
+ return false;
232874
+ if (aLen === 0)
232875
+ return true;
232876
+ return JSON.stringify(a2) === JSON.stringify(b$1);
232652
232877
  }
232653
- function buildEntryParagraph(source, config3) {
232654
- const { display } = config3;
232655
- const content3 = [];
232656
- const textNode = {
232657
- type: "text",
232658
- text: source.text || " "
232878
+ function buildTocEntryParagraphs(sources, config3, options = {}) {
232879
+ return sources.map((source) => buildEntryParagraph(source, config3, options));
232880
+ }
232881
+ function asRun(children) {
232882
+ return {
232883
+ type: "run",
232884
+ content: children
232659
232885
  };
232660
- if (display.hyperlinks)
232661
- textNode.marks = [{
232662
- type: "link",
232663
- attrs: {
232664
- anchor: generateTocBookmarkName(source.sdBlockId),
232665
- rId: null,
232666
- history: true
232667
- }
232668
- }];
232669
- content3.push(textNode);
232886
+ }
232887
+ function buildEntryParagraph(source, config3, options = {}) {
232888
+ const { display } = config3;
232889
+ const linkMark = display.hyperlinks ? {
232890
+ type: "link",
232891
+ attrs: {
232892
+ anchor: generateTocBookmarkName(source.sdBlockId),
232893
+ rId: null,
232894
+ history: true
232895
+ }
232896
+ } : undefined;
232897
+ const content3 = [asRun((source.segments && source.segments.length > 0 ? source.segments : [{ text: source.text || " " }]).map((segment) => {
232898
+ const marks = [...(segment.marks ?? []).map((m$1) => sanitizeSourceMark(m$1)).filter((m$1) => m$1 !== null)];
232899
+ if (linkMark)
232900
+ marks.push(linkMark);
232901
+ const node2 = {
232902
+ type: "text",
232903
+ text: segment.text || " "
232904
+ };
232905
+ if (marks.length > 0)
232906
+ node2.marks = marks;
232907
+ return node2;
232908
+ }))];
232670
232909
  const omitRange = display.omitPageNumberLevels;
232671
- const levelOmitted = omitRange && source.level >= omitRange.from && source.level <= omitRange.to;
232672
- const entryOmitted = source.omitPageNumber;
232673
- const omitPageNumber = levelOmitted || entryOmitted;
232910
+ const omitPageNumber = Boolean(omitRange && source.level >= omitRange.from && source.level <= omitRange.to || source.omitPageNumber);
232674
232911
  if (!omitPageNumber) {
232675
- if (display.separator)
232676
- content3.push({
232677
- type: "text",
232678
- text: display.separator
232679
- });
232680
- else
232681
- content3.push({ type: "tab" });
232682
- content3.push({
232912
+ content3.push(asRun([display.separator ? {
232913
+ type: "text",
232914
+ text: display.separator
232915
+ } : { type: "tab" }]));
232916
+ const resolvedPage = options.pageMap?.get(source.sdBlockId);
232917
+ content3.push(asRun([{
232683
232918
  type: "text",
232684
- text: "0",
232919
+ text: resolvedPage != null ? String(resolvedPage) : "0",
232685
232920
  marks: [{ type: "tocPageNumber" }]
232686
- });
232921
+ }]));
232687
232922
  }
232688
232923
  const paragraphProperties = { styleId: `TOC${source.level}` };
232689
232924
  if (display.rightAlignPageNumbers !== false && !omitPageNumber) {
232690
- const leader = display.tabLeader && display.tabLeader !== "none" ? TAB_LEADER_MAP[display.tabLeader] ?? undefined : undefined;
232925
+ const leader = display.tabLeader === "none" ? undefined : display.tabLeader && TAB_LEADER_MAP[display.tabLeader] || "dot";
232691
232926
  paragraphProperties.tabStops = [{ tab: {
232692
232927
  tabType: "right",
232693
- pos: DEFAULT_RIGHT_TAB_POS,
232928
+ pos: options.tabPos ?? DEFAULT_RIGHT_TAB_POS,
232694
232929
  ...leader ? { leader } : {}
232695
232930
  } }];
232696
232931
  }
@@ -232825,6 +233060,50 @@ function withRightAlign(config3, rightAlignPageNumbers) {
232825
233060
  }
232826
233061
  };
232827
233062
  }
233063
+ function stripTocPageNumberFromNode(node2) {
233064
+ if (!node2 || typeof node2 !== "object")
233065
+ return {
233066
+ node: node2,
233067
+ changed: false
233068
+ };
233069
+ const typedNode = node2;
233070
+ let changed = false;
233071
+ let next2 = typedNode;
233072
+ if (Array.isArray(typedNode.marks)) {
233073
+ const filtered = typedNode.marks.filter((mark2) => mark2?.type !== "tocPageNumber");
233074
+ if (filtered.length !== typedNode.marks.length) {
233075
+ changed = true;
233076
+ if (filtered.length === 0) {
233077
+ const { marks: _removed, ...rest } = next2;
233078
+ next2 = rest;
233079
+ } else
233080
+ next2 = {
233081
+ ...next2,
233082
+ marks: filtered
233083
+ };
233084
+ }
233085
+ }
233086
+ if (Array.isArray(typedNode.content)) {
233087
+ let childChanged = false;
233088
+ const nextChildren = typedNode.content.map((child) => {
233089
+ const result = stripTocPageNumberFromNode(child);
233090
+ if (result.changed)
233091
+ childChanged = true;
233092
+ return result.node;
233093
+ });
233094
+ if (childChanged) {
233095
+ changed = true;
233096
+ next2 = {
233097
+ ...next2,
233098
+ content: nextChildren
233099
+ };
233100
+ }
233101
+ }
233102
+ return {
233103
+ node: next2,
233104
+ changed
233105
+ };
233106
+ }
232828
233107
  function sanitizeTocContentForSchema(content3, editor) {
232829
233108
  if (editor.state.schema?.marks?.tocPageNumber)
232830
233109
  return content3;
@@ -232834,24 +233113,10 @@ function sanitizeTocContentForSchema(content3, editor) {
232834
233113
  return paragraph2;
232835
233114
  let changed = false;
232836
233115
  const sanitizedContent = paragraphContent.map((node2) => {
232837
- if (!node2 || typeof node2 !== "object")
232838
- return node2;
232839
- const typedNode = node2;
232840
- const marks = typedNode.marks;
232841
- if (!Array.isArray(marks))
232842
- return node2;
232843
- const filteredMarks = marks.filter((mark2) => mark2?.type !== "tocPageNumber");
232844
- if (filteredMarks.length === marks.length)
232845
- return node2;
232846
- changed = true;
232847
- if (filteredMarks.length === 0) {
232848
- const { marks: _removed, ...rest } = typedNode;
232849
- return rest;
232850
- }
232851
- return {
232852
- ...typedNode,
232853
- marks: filteredMarks
232854
- };
233116
+ const result = stripTocPageNumberFromNode(node2);
233117
+ if (result.changed)
233118
+ changed = true;
233119
+ return result.node;
232855
233120
  });
232856
233121
  return changed ? {
232857
233122
  ...paragraph2,
@@ -232859,14 +233124,50 @@ function sanitizeTocContentForSchema(content3, editor) {
232859
233124
  } : paragraph2;
232860
233125
  });
232861
233126
  }
232862
- function materializeTocContent(doc$12, config3, editor) {
233127
+ function materializeTocContent(doc$12, config3, editor, options = {}) {
232863
233128
  const sources = collectTocSources(doc$12, config3);
232864
- const entryParagraphs = buildTocEntryParagraphs(sources, config3);
233129
+ const entryParagraphs = buildTocEntryParagraphs(sources, config3, options);
232865
233130
  return {
232866
233131
  content: sanitizeTocContentForSchema(entryParagraphs.length > 0 ? entryParagraphs : NO_ENTRIES_PLACEHOLDER, editor),
232867
233132
  sources
232868
233133
  };
232869
233134
  }
233135
+ function findFirstTocEntryParagraph(node2) {
233136
+ let entry;
233137
+ node2.forEach((paragraph2) => {
233138
+ if (entry || paragraph2.type.name !== "paragraph")
233139
+ return;
233140
+ const styleId = paragraph2.attrs?.paragraphProperties?.styleId;
233141
+ if (styleId && TOC_ENTRY_STYLE_RE.test(styleId))
233142
+ entry = paragraph2;
233143
+ });
233144
+ return entry;
233145
+ }
233146
+ function readExistingTocTabPos(node2) {
233147
+ const pos = (findFirstTocEntryParagraph(node2) ?? node2.firstChild ?? undefined)?.attrs?.paragraphProperties?.tabStops?.find((t) => t?.tab?.tabType === "right")?.tab?.pos;
233148
+ return typeof pos === "number" ? pos : undefined;
233149
+ }
233150
+ function readExistingTocTrailingParagraph(node2) {
233151
+ const last2 = node2.lastChild;
233152
+ if (!last2 || last2.type.name !== "paragraph")
233153
+ return;
233154
+ const styleId = last2.attrs?.paragraphProperties?.styleId;
233155
+ if (styleId && TOC_ENTRY_STYLE_RE.test(styleId))
233156
+ return;
233157
+ let hasPrecedingEntry = false;
233158
+ node2.forEach((child) => {
233159
+ if (hasPrecedingEntry || child === last2)
233160
+ return;
233161
+ if (child.type.name !== "paragraph")
233162
+ return;
233163
+ const childStyleId = child.attrs?.paragraphProperties?.styleId;
233164
+ if (childStyleId && TOC_ENTRY_STYLE_RE.test(childStyleId))
233165
+ hasPrecedingEntry = true;
233166
+ });
233167
+ if (!hasPrecedingEntry)
233168
+ return;
233169
+ return typeof last2.toJSON === "function" ? last2.toJSON() : undefined;
233170
+ }
232870
233171
  function tocConfigureWrapper(editor, input2, options) {
232871
233172
  rejectTrackedMode("toc.configure", options);
232872
233173
  const resolved = resolveTocTarget(editor.state.doc, input2.target);
@@ -232875,7 +233176,12 @@ function tocConfigureWrapper(editor, input2, options) {
232875
233176
  const instruction = serializeTocInstruction(patched);
232876
233177
  const rightAlignChanged = input2.patch.rightAlignPageNumbers !== undefined && input2.patch.rightAlignPageNumbers !== resolved.node.attrs?.rightAlignPageNumbers;
232877
233178
  const effectiveRightAlign = input2.patch.rightAlignPageNumbers ?? resolved.node.attrs?.rightAlignPageNumbers;
232878
- const { content: nextContent, sources } = materializeTocContent(editor.state.doc, withRightAlign(patched, effectiveRightAlign), editor);
233179
+ const { content: rebuiltEntries, sources } = materializeTocContent(editor.state.doc, withRightAlign(patched, effectiveRightAlign), editor, {
233180
+ pageMap: getPageMap(editor) ?? undefined,
233181
+ tabPos: readExistingTocTabPos(resolved.node)
233182
+ });
233183
+ const trailing = readExistingTocTrailingParagraph(resolved.node);
233184
+ const nextContent = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
232879
233185
  if (areTocConfigsEqual(currentConfig, patched) && !rightAlignChanged)
232880
233186
  return tocFailure("NO_OP", "Configuration patch produced no change.");
232881
233187
  if (options?.dryRun)
@@ -232921,7 +233227,12 @@ function tocUpdateAll(editor, input2, options) {
232921
233227
  const resolved = resolveTocTarget(editor.state.doc, input2.target);
232922
233228
  const config3 = parseTocInstruction(resolved.node.attrs?.instruction ?? "");
232923
233229
  const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
232924
- const { content: content3, sources } = materializeTocContent(editor.state.doc, withRightAlign(config3, rightAlign), editor);
233230
+ const { content: rebuiltEntries, sources } = materializeTocContent(editor.state.doc, withRightAlign(config3, rightAlign), editor, {
233231
+ pageMap: getPageMap(editor) ?? undefined,
233232
+ tabPos: readExistingTocTabPos(resolved.node)
233233
+ });
233234
+ const trailing = readExistingTocTrailingParagraph(resolved.node);
233235
+ const content3 = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
232925
233236
  if (isTocContentUnchanged(resolved.node, content3))
232926
233237
  return tocFailure("NO_OP", "TOC update produced no change.");
232927
233238
  if (options?.dryRun)
@@ -233000,25 +233311,33 @@ function buildPageNumberUpdatedContent(tocNode, pageMap) {
233000
233311
  }
233001
233312
  const tocSourceId = child.attrs?.tocSourceId;
233002
233313
  const childJson = child.toJSON();
233003
- const content3 = childJson.content ?? [];
233004
233314
  let paragraphChanged = false;
233005
- const updatedContentArray = content3.map((node2) => {
233006
- if (!node2.marks?.some((m$1) => m$1.type === "tocPageNumber"))
233007
- return node2;
233008
- hasPageNumberMarks = true;
233009
- if (!tocSourceId)
233315
+ const visit2 = (node2) => {
233316
+ if (node2.marks?.some((m$1) => m$1.type === "tocPageNumber")) {
233317
+ hasPageNumberMarks = true;
233318
+ if (!tocSourceId)
233319
+ return node2;
233320
+ const pageNumber = pageMap.get(tocSourceId);
233321
+ const newText = pageNumber !== undefined ? String(pageNumber) : "??";
233322
+ if (node2.text !== newText) {
233323
+ paragraphChanged = true;
233324
+ return {
233325
+ ...node2,
233326
+ text: newText
233327
+ };
233328
+ }
233010
233329
  return node2;
233011
- const pageNumber = pageMap.get(tocSourceId);
233012
- const newText = pageNumber !== undefined ? String(pageNumber) : "??";
233013
- if (node2.text !== newText) {
233014
- paragraphChanged = true;
233015
- return {
233016
- ...node2,
233017
- text: newText
233018
- };
233019
233330
  }
233020
- return node2;
233021
- });
233331
+ const nested = node2.content;
233332
+ if (!Array.isArray(nested) || nested.length === 0)
233333
+ return node2;
233334
+ const visited = nested.map(visit2);
233335
+ return visited.some((next2, idx) => next2 !== nested[idx]) ? {
233336
+ ...node2,
233337
+ content: visited
233338
+ } : node2;
233339
+ };
233340
+ const updatedContentArray = (childJson.content ?? []).map(visit2);
233022
233341
  if (paragraphChanged) {
233023
233342
  anyChanged = true;
233024
233343
  updatedContent.push({
@@ -254021,6 +254340,36 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
254021
254340
  }
254022
254341
  if (blk.kind === "drawing") {
254023
254342
  const drawingBlock = blk;
254343
+ if (drawingBlock.drawingKind === "vectorShape") {
254344
+ const parts = drawingBlock.textContent?.parts;
254345
+ if (!parts || parts.length === 0)
254346
+ return blk;
254347
+ let partsChanged = false;
254348
+ const hydratedParts = parts.map((part) => {
254349
+ if (part?.kind !== "image" || !part.src || part.src.startsWith("data:"))
254350
+ return part;
254351
+ const resolvedSrc = resolveImageSrc(part.src, part.rId, undefined, part.extension);
254352
+ if (resolvedSrc) {
254353
+ partsChanged = true;
254354
+ return {
254355
+ ...part,
254356
+ src: resolvedSrc
254357
+ };
254358
+ }
254359
+ return part;
254360
+ });
254361
+ if (partsChanged) {
254362
+ const vectorShapeBlock = drawingBlock;
254363
+ return {
254364
+ ...vectorShapeBlock,
254365
+ textContent: {
254366
+ ...vectorShapeBlock.textContent,
254367
+ parts: hydratedParts
254368
+ }
254369
+ };
254370
+ }
254371
+ return blk;
254372
+ }
254024
254373
  if (drawingBlock.drawingKind !== "shapeGroup")
254025
254374
  return blk;
254026
254375
  const shapeGroupBlock = drawingBlock;
@@ -266867,7 +267216,7 @@ var Node$13 = class Node$14 {
266867
267216
  };
266868
267217
  tr.setNodeMarkup(paraPos, undefined, nextAttrs, paragraph2.marks);
266869
267218
  return true;
266870
- }, defaultIncrementPoints = 36, increaseTextIndent = () => modifyIndentation((node2) => calculateNewIndentation(node2, 1)), decreaseTextIndent = () => modifyIndentation((node2) => calculateNewIndentation(node2, -1)), setTextIndentation = (points) => modifyIndentation(() => ptToTwips(points)), unsetTextIndentation = () => modifyIndentation(() => null), setLineHeight = (lineHeight) => ({ commands: commands$1 }) => {
267219
+ }, defaultIncrementPoints = 36, increaseTextIndent = () => modifyIndentation((node2, resolvedProps) => calculateNewIndentation(node2, 1, resolvedProps), { resolveProps: true }), decreaseTextIndent = () => modifyIndentation((node2, resolvedProps) => calculateNewIndentation(node2, -1, resolvedProps), { resolveProps: true }), setTextIndentation = (points) => modifyIndentation(() => ptToTwips(points)), unsetTextIndentation = () => modifyIndentation(() => null), setLineHeight = (lineHeight) => ({ commands: commands$1 }) => {
266871
267220
  if (!lineHeight)
266872
267221
  return false;
266873
267222
  return commands$1.updateAttributes("paragraph", {
@@ -271387,7 +271736,7 @@ var Node$13 = class Node$14 {
271387
271736
  }), hiddenRender = (type) => ["sd-passthrough", {
271388
271737
  "data-sd-passthrough": type,
271389
271738
  style: "display: none;"
271390
- }], PassthroughBlock, PassthroughInline, IndexEntry, TableOfContentsEntry, CrossReference, SequenceField, DocumentStatField, FIELD_NODE_TYPES, SYNTHETIC_FIELD_NODE_TYPES, UPDATABLE_FIELD_TYPES, FieldUpdate, Citation, Bibliography, AuthorityEntry, TableOfAuthorities, hasExplicitPosition = (position4) => {
271739
+ }], PassthroughBlock, PassthroughInline, IndexEntry, TableOfContentsEntry, CrossReference, SequenceField, DocumentStatField, FIELD_NODE_TYPES, SYNTHETIC_FIELD_NODE_TYPES, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, UPDATABLE_FIELD_TYPES, FieldUpdate, Citation, Bibliography, AuthorityEntry, TableOfAuthorities, hasExplicitPosition = (position4) => {
271391
271740
  if (typeof position4 !== "string")
271392
271741
  return false;
271393
271742
  return normalizeBaselineShift(parseFloat(position4)) != null;
@@ -276190,7 +276539,7 @@ var Node$13 = class Node$14 {
276190
276539
  domAvailabilityCache = false;
276191
276540
  return false;
276192
276541
  }
276193
- }, summaryVersion = "1.31.0", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
276542
+ }, summaryVersion = "1.32.0", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
276194
276543
  const container = document.createElement("div");
276195
276544
  container.innerHTML = html3;
276196
276545
  const result = [];
@@ -276263,7 +276612,7 @@ var Node$13 = class Node$14 {
276263
276612
  }, getLevel = (node2) => {
276264
276613
  const lvl = node2.getAttribute("data-level");
276265
276614
  return lvl ? parseInt(lvl, 10) : 0;
276266
- }, DEFAULT_FALLBACK_MARGIN_INCHES = 1, MIN_MOBILE_SIDE_MARGIN_PX = 10, RESIZE_DEBOUNCE_MS = 150, DEFAULT_LINE_HEIGHT = 1.2, HEADER_FOOTER_LINE_HEIGHT = 1, RUNTIME_COPY_STRIP_SELECTOR, PARAGRAPH_CONTENT_SELECTOR = "span.sd-paragraph-content", BLOCK_COPY_CONTEXT_SELECTOR = "p, div, h1, h2, h3, h4, h5, h6, blockquote, table", WORD_HTML_META = '<meta name="Generator" content="Microsoft Word">', WORD_NUM_FMT_BY_LIST_FMT, ProseMirrorRenderer = class {
276615
+ }, HEADING_STYLE_RE, DEFAULT_FALLBACK_MARGIN_INCHES = 1, MIN_MOBILE_SIDE_MARGIN_PX = 10, RESIZE_DEBOUNCE_MS = 150, DEFAULT_LINE_HEIGHT = 1.2, HEADER_FOOTER_LINE_HEIGHT = 1, RUNTIME_COPY_STRIP_SELECTOR, PARAGRAPH_CONTENT_SELECTOR = "span.sd-paragraph-content", BLOCK_COPY_CONTEXT_SELECTOR = "p, div, h1, h2, h3, h4, h5, h6, blockquote, table", WORD_HTML_META = '<meta name="Generator" content="Microsoft Word">', WORD_NUM_FMT_BY_LIST_FMT, ProseMirrorRenderer = class {
276267
276616
  constructor() {
276268
276617
  this.view = null;
276269
276618
  this.eventListenerCleanups = [];
@@ -276470,7 +276819,7 @@ var Node$13 = class Node$14 {
276470
276819
  let sliceJson = "";
276471
276820
  let mediaJson = "";
276472
276821
  if (from$1 !== to) {
276473
- const slice2 = this.view.state.doc.slice(from$1, to);
276822
+ const slice2 = wrapHeadingSelectionAsParagraph(this.view.state.doc.slice(from$1, to), this.view.state);
276474
276823
  sliceJson = JSON.stringify(slice2.toJSON());
276475
276824
  clipboardData.setData("application/x-superdoc-slice", sliceJson);
276476
276825
  mediaJson = collectReferencedImageMediaForClipboard(sliceJson, editor);
@@ -276516,7 +276865,7 @@ var Node$13 = class Node$14 {
276516
276865
  console.warn("Failed to initialize developer tools:", error48);
276517
276866
  }
276518
276867
  }
276519
- }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, registry2, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES2, FALLBACK_STORE_KEY = "__documentApiComments", TRACKED_CHANGE_ANCHOR_KEY_PREFIX = "tc::", COMMENT_ANCHOR_KEY_PREFIX = "comment::", indexByHost, TrackedChangeIndexImpl = class {
276868
+ }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, registry2, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES2, FALLBACK_STORE_KEY = "__documentApiComments", TRACKED_CHANGE_ANCHOR_KEY_PREFIX = "tc::", COMMENT_ANCHOR_KEY_PREFIX = "comment::", indexByHost, TrackedChangeIndexImpl = class {
276520
276869
  #hostEditor;
276521
276870
  #snapshots = /* @__PURE__ */ new Map;
276522
276871
  #aggregated = null;
@@ -277365,7 +277714,7 @@ var Node$13 = class Node$14 {
277365
277714
  return () => {};
277366
277715
  const handle3 = setInterval(callback, intervalMs);
277367
277716
  return () => clearInterval(handle3);
277368
- }, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SPECIAL_NOTE_TYPES, BOOKMARK_SCAN_REVISION_PREFIX = "bookmark-scan:", SETTINGS_PART, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.31.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
277717
+ }, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", ALLOWED_SOURCE_MARK_TYPES, TEXT_STYLE_ALLOWED_ATTRS, DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TOC_ENTRY_STYLE_RE, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SPECIAL_NOTE_TYPES, BOOKMARK_SCAN_REVISION_PREFIX = "bookmark-scan:", SETTINGS_PART, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.32.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
277369
277718
  const extensionLike = extension2;
277370
277719
  const config3 = extensionLike?.config;
277371
277720
  const ExtensionCtor = extensionLike?.constructor;
@@ -293036,12 +293385,12 @@ menclose::after {
293036
293385
  return;
293037
293386
  console.log(...args$1);
293038
293387
  }, 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;
293039
- var init_src_BLxaw1d3_es = __esm(() => {
293388
+ var init_src_BpYr_7Wm_es = __esm(() => {
293040
293389
  init_rolldown_runtime_Bg48TavK_es();
293041
- init_SuperConverter_BecdrRIX_es();
293390
+ init_SuperConverter_CcvDw1Yc_es();
293042
293391
  init_jszip_C49i9kUs_es();
293043
293392
  init_uuid_qzgm05fK_es();
293044
- init_create_headless_toolbar_DCeIAH_W_es();
293393
+ init_create_headless_toolbar_D5yv7LyN_es();
293045
293394
  init_constants_DrU4EASo_es();
293046
293395
  init_dist_B8HfvhaK_es();
293047
293396
  init_unified_Dsuw2be5_es();
@@ -300266,10 +300615,10 @@ ${err.toString()}`);
300266
300615
  addOptions() {
300267
300616
  return { htmlAttributes: {} };
300268
300617
  },
300269
- parseHTML() {
300618
+ parseDOM() {
300270
300619
  return [{ tag: "span[data-toc-page-number]" }];
300271
300620
  },
300272
- renderHTML() {
300621
+ renderDOM() {
300273
300622
  return [
300274
300623
  "span",
300275
300624
  { "data-toc-page-number": "" },
@@ -303562,6 +303911,33 @@ ${err.toString()}`);
303562
303911
  fieldType: "NUMPAGES",
303563
303912
  instruction: "NUMPAGES"
303564
303913
  } };
303914
+ TAB_LEADER_TO_SEPARATOR = {
303915
+ dot: ".",
303916
+ hyphen: "-",
303917
+ underscore: "_",
303918
+ middleDot: "·"
303919
+ };
303920
+ SEPARATOR_TO_TAB_LEADER = {
303921
+ ".": "dot",
303922
+ "-": "hyphen",
303923
+ _: "underscore",
303924
+ "·": "middleDot"
303925
+ };
303926
+ DEFAULT_TOC_CONFIG = {
303927
+ source: {
303928
+ outlineLevels: {
303929
+ from: 1,
303930
+ to: 3
303931
+ },
303932
+ useAppliedOutlineLevel: true
303933
+ },
303934
+ display: {
303935
+ hyperlinks: true,
303936
+ hideInWebView: true
303937
+ },
303938
+ preserved: {}
303939
+ };
303940
+ SWITCH_PATTERN$1 = /\\([a-z])\s*(?:"([^"]*)")?/gi;
303565
303941
  UPDATABLE_FIELD_TYPES = new Set([
303566
303942
  "NUMWORDS",
303567
303943
  "NUMCHARS",
@@ -303570,11 +303946,41 @@ ${err.toString()}`);
303570
303946
  FieldUpdate = Extension.create({
303571
303947
  name: "fieldUpdate",
303572
303948
  addCommands() {
303573
- return { updateFieldsInSelection: () => ({ editor, state, dispatch }) => {
303949
+ return { updateFieldsInSelection: () => ({ editor, state, tr: outerTr, dispatch }) => {
303574
303950
  const { from: from$1, to } = state.selection;
303951
+ let tocPathRan = false;
303952
+ if (editor?.doc?.toc?.update) {
303953
+ const tocTargets = findAllTocNodes(state.doc).map((toc) => toc.commandNodeId).filter((id2) => typeof id2 === "string" && id2);
303954
+ if (tocTargets.length > 0) {
303955
+ if (!dispatch)
303956
+ return true;
303957
+ const tocStorage = editor.storage?.tableOfContents;
303958
+ const cachedPageMap = tocStorage?.pageMap ?? null;
303959
+ for (const sdBlockId of tocTargets) {
303960
+ if (tocStorage && cachedPageMap) {
303961
+ tocStorage.pageMap = cachedPageMap;
303962
+ tocStorage.pageMapDoc = editor.state.doc;
303963
+ }
303964
+ try {
303965
+ editor.doc.toc.update({
303966
+ target: {
303967
+ kind: "block",
303968
+ nodeType: "tableOfContents",
303969
+ nodeId: sdBlockId
303970
+ },
303971
+ mode: "all"
303972
+ });
303973
+ } catch (error48) {
303974
+ console.warn("[FieldUpdate] toc.update failed for", sdBlockId, error48);
303975
+ }
303976
+ }
303977
+ outerTr?.setMeta?.("preventDispatch", true);
303978
+ tocPathRan = true;
303979
+ }
303980
+ }
303575
303981
  const updatable = findFieldsInRange(state.doc, from$1, to).filter((f2) => UPDATABLE_FIELD_TYPES.has(f2.fieldType));
303576
303982
  if (updatable.length === 0)
303577
- return false;
303983
+ return tocPathRan;
303578
303984
  const stats = getWordStatistics(resolveMainBodyEditor(editor));
303579
303985
  const tr = state.tr;
303580
303986
  let changed = false;
@@ -303605,7 +304011,7 @@ ${err.toString()}`);
303605
304011
  }
303606
304012
  }
303607
304013
  if (!changed)
303608
- return false;
304014
+ return tocPathRan;
303609
304015
  if (dispatch)
303610
304016
  dispatch(tr);
303611
304017
  return true;
@@ -304065,7 +304471,11 @@ ${err.toString()}`);
304065
304471
  underlineColor: { default: null },
304066
304472
  underlineThemeColor: { default: null },
304067
304473
  underlineThemeTint: { default: null },
304068
- underlineThemeShade: { default: null }
304474
+ underlineThemeShade: { default: null },
304475
+ autoAdded: {
304476
+ default: false,
304477
+ rendered: false
304478
+ }
304069
304479
  };
304070
304480
  },
304071
304481
  addCommands() {
@@ -304312,10 +304722,26 @@ ${err.toString()}`);
304312
304722
  }
304313
304723
  if (linkMarkType)
304314
304724
  tr = tr.removeMark(from$1, to, linkMarkType);
304315
- if (underlineMarkType)
304316
- tr = tr.removeMark(from$1, to, underlineMarkType);
304317
- if (underlineMarkType)
304318
- tr = tr.addMark(from$1, to, underlineMarkType.create());
304725
+ if (underlineMarkType) {
304726
+ const rangesMissingUnderline = [];
304727
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304728
+ if (!node2.isText || node2.nodeSize <= 0)
304729
+ return;
304730
+ if (node2.marks.some((mark2) => mark2.type === underlineMarkType))
304731
+ return;
304732
+ const rangeFrom = Math.max(pos, from$1);
304733
+ const rangeTo = Math.min(pos + node2.nodeSize, to);
304734
+ if (rangeFrom >= rangeTo)
304735
+ return;
304736
+ rangesMissingUnderline.push({
304737
+ from: rangeFrom,
304738
+ to: rangeTo
304739
+ });
304740
+ });
304741
+ rangesMissingUnderline.forEach((range) => {
304742
+ tr = tr.addMark(range.from, range.to, underlineMarkType.create({ autoAdded: true }));
304743
+ });
304744
+ }
304319
304745
  let rId = null;
304320
304746
  if (editor.options.mode === "docx") {
304321
304747
  const id2 = addLinkRelationship({
@@ -304336,8 +304762,72 @@ ${err.toString()}`);
304336
304762
  dispatch(tr.scrollIntoView());
304337
304763
  return true;
304338
304764
  },
304339
- unsetLink: () => ({ chain }) => {
304340
- return chain().unsetMark("underline", { extendEmptyMarkRange: true }).unsetColor().unsetMark("link", { extendEmptyMarkRange: true }).run();
304765
+ unsetLink: () => ({ chain, state, editor }) => {
304766
+ const { selection } = state;
304767
+ const linkMarkType = editor.schema.marks.link;
304768
+ const underlineMarkType = editor.schema.marks.underline;
304769
+ let { from: from$1, to } = selection;
304770
+ if (selection.empty && linkMarkType) {
304771
+ const range = getMarkRange(selection.$from, linkMarkType);
304772
+ if (range) {
304773
+ from$1 = range.from;
304774
+ to = range.to;
304775
+ }
304776
+ }
304777
+ return chain().unsetColor().unsetMark("link", { extendEmptyMarkRange: true }).command(({ tr }) => {
304778
+ if (underlineMarkType)
304779
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304780
+ if (!node2.isText)
304781
+ return;
304782
+ node2.marks.forEach((mark2) => {
304783
+ if (mark2.type !== underlineMarkType)
304784
+ return;
304785
+ if (mark2.attrs?.autoAdded !== true)
304786
+ return;
304787
+ tr.removeMark(pos, pos + node2.nodeSize, mark2);
304788
+ });
304789
+ });
304790
+ const textStyleMarkType = tr.doc.type.schema.marks.textStyle;
304791
+ if (textStyleMarkType)
304792
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304793
+ if (!node2.isText)
304794
+ return;
304795
+ node2.marks.forEach((mark2) => {
304796
+ if (mark2.type !== textStyleMarkType)
304797
+ return;
304798
+ if (!TRANSIENT_HYPERLINK_STYLE_IDS.has(mark2.attrs?.styleId))
304799
+ return;
304800
+ const clearedAttrs = {
304801
+ ...mark2.attrs,
304802
+ styleId: null
304803
+ };
304804
+ tr.removeMark(pos, pos + node2.nodeSize, mark2);
304805
+ tr.addMark(pos, pos + node2.nodeSize, textStyleMarkType.create(clearedAttrs));
304806
+ });
304807
+ });
304808
+ const runNodesToUpdate = [];
304809
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304810
+ if (node2.type.name !== "run")
304811
+ return;
304812
+ if (!TRANSIENT_HYPERLINK_STYLE_IDS.has(node2.attrs?.runProperties?.styleId))
304813
+ return;
304814
+ runNodesToUpdate.push({
304815
+ node: node2,
304816
+ pos
304817
+ });
304818
+ });
304819
+ runNodesToUpdate.sort((a2, b$1) => b$1.pos - a2.pos).forEach(({ node: node2, pos }) => {
304820
+ const mappedPos = tr.mapping.map(pos);
304821
+ tr.setNodeMarkup(mappedPos, node2.type, {
304822
+ ...node2.attrs,
304823
+ runProperties: {
304824
+ ...node2.attrs.runProperties,
304825
+ styleId: null
304826
+ }
304827
+ }, node2.marks);
304828
+ });
304829
+ return true;
304830
+ }).run();
304341
304831
  },
304342
304832
  toggleLink: ({ href, text: text5 } = {}) => ({ commands: commands$1 }) => {
304343
304833
  if (!href)
@@ -315512,6 +316002,7 @@ function print() { __p += __j.call(arguments, '') }
315512
316002
  "spanning",
315513
316003
  "code"
315514
316004
  ];
316005
+ HEADING_STYLE_RE = /^Heading[1-9]$/i;
315515
316006
  RUNTIME_COPY_STRIP_SELECTOR = [
315516
316007
  ".list-marker",
315517
316008
  ".sd-editor-tab",
@@ -315526,33 +316017,6 @@ function print() { __p += __j.call(arguments, '') }
315526
316017
  ["bullet", "bullet"]
315527
316018
  ]);
315528
316019
  BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,${BLANK_DOCX_BASE64}`;
315529
- TAB_LEADER_TO_SEPARATOR = {
315530
- dot: ".",
315531
- hyphen: "-",
315532
- underscore: "_",
315533
- middleDot: "·"
315534
- };
315535
- SEPARATOR_TO_TAB_LEADER = {
315536
- ".": "dot",
315537
- "-": "hyphen",
315538
- _: "underscore",
315539
- "·": "middleDot"
315540
- };
315541
- DEFAULT_TOC_CONFIG = {
315542
- source: {
315543
- outlineLevels: {
315544
- from: 1,
315545
- to: 3
315546
- },
315547
- useAppliedOutlineLevel: true
315548
- },
315549
- display: {
315550
- hyperlinks: true,
315551
- hideInWebView: true
315552
- },
315553
- preserved: {}
315554
- };
315555
- SWITCH_PATTERN$1 = /\\([a-z])\s*(?:"([^"]*)")?/gi;
315556
316020
  BULLET_FORMATS$1 = new Set(["bullet"]);
315557
316021
  LOCK_MODE_TO_SDT_LOCK = {
315558
316022
  unlocked: "none",
@@ -317095,6 +317559,15 @@ function print() { __p += __j.call(arguments, '') }
317095
317559
  }
317096
317560
  };
317097
317561
  SWITCH_PATTERN = /\\([a-z])(?:\s*(?:"([^"]*)"|([^\s\\]+)))?/gi;
317562
+ ALLOWED_SOURCE_MARK_TYPES = new Set([
317563
+ "bold",
317564
+ "italic",
317565
+ "underline",
317566
+ "color",
317567
+ "highlight",
317568
+ "fontFamily"
317569
+ ]);
317570
+ TEXT_STYLE_ALLOWED_ATTRS = new Set(["fontFamily"]);
317098
317571
  TAB_LEADER_MAP = {
317099
317572
  dot: "dot",
317100
317573
  hyphen: "hyphen",
@@ -317109,6 +317582,7 @@ function print() { __p += __j.call(arguments, '') }
317109
317582
  text: "No table of contents entries found."
317110
317583
  }]
317111
317584
  }];
317585
+ TOC_ENTRY_STYLE_RE = /^TOC[1-9]$/;
317112
317586
  ALLOWED_WRAP_ATTRS = {
317113
317587
  None: ["behindDoc"],
317114
317588
  Square: [
@@ -321752,6 +322226,17 @@ function print() { __p += __j.call(arguments, '') }
321752
322226
  currentParagraph.style.whiteSpace = "normal";
321753
322227
  if (part.isEmptyParagraph)
321754
322228
  currentParagraph.style.minHeight = "1em";
322229
+ } else if (part.kind === "image" && part.src) {
322230
+ const img2 = this.doc.createElement("img");
322231
+ img2.src = part.src;
322232
+ img2.alt = part.alt ?? "";
322233
+ if (typeof part.width === "number")
322234
+ img2.style.width = `${part.width}px`;
322235
+ if (typeof part.height === "number")
322236
+ img2.style.height = `${part.height}px`;
322237
+ img2.style.display = "inline-block";
322238
+ img2.style.verticalAlign = "bottom";
322239
+ currentParagraph.appendChild(img2);
321755
322240
  } else {
321756
322241
  const span = this.doc.createElement("span");
321757
322242
  span.textContent = this.resolveShapeTextPartText(part, context);
@@ -330744,6 +331229,7 @@ function print() { __p += __j.call(arguments, '') }
330744
331229
  trackChangesAccept: check_solid_default,
330745
331230
  trackChangesReject: xmark_solid_default,
330746
331231
  cellBackground: paint_roller_solid_default,
331232
+ updateTableOfContents: rotate_right_solid_default,
330747
331233
  listRestartNumbering: list_ol_solid_default,
330748
331234
  listContinueNumbering: list_ol_solid_default,
330749
331235
  listDecreaseIndent: outdent_solid_default,
@@ -330774,6 +331260,7 @@ function print() { __p += __j.call(arguments, '') }
330774
331260
  trackChangesAccept: "Accept change",
330775
331261
  trackChangesReject: "Reject change",
330776
331262
  cellBackground: "Cell background",
331263
+ updateTableOfContents: "Update table of contents",
330777
331264
  listRestartNumbering: "Restart numbering",
330778
331265
  listContinueNumbering: "Continue numbering",
330779
331266
  listDecreaseIndent: "Decrease indent",
@@ -330884,11 +331371,11 @@ function print() { __p += __j.call(arguments, '') }
330884
331371
  ];
330885
331372
  });
330886
331373
 
330887
- // ../../packages/superdoc/dist/chunks/create-super-doc-ui-fxrCn5X_.es.js
331374
+ // ../../packages/superdoc/dist/chunks/create-super-doc-ui-CEK13syX.es.js
330888
331375
  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;
330889
- var init_create_super_doc_ui_fxrCn5X__es = __esm(() => {
330890
- init_SuperConverter_BecdrRIX_es();
330891
- init_create_headless_toolbar_DCeIAH_W_es();
331376
+ var init_create_super_doc_ui_CEK13syX_es = __esm(() => {
331377
+ init_SuperConverter_CcvDw1Yc_es();
331378
+ init_create_headless_toolbar_D5yv7LyN_es();
330892
331379
  MOD_ALIASES = new Set([
330893
331380
  "Mod",
330894
331381
  "Meta",
@@ -330930,16 +331417,16 @@ var init_zipper_BxRAi0_5_es = __esm(() => {
330930
331417
 
330931
331418
  // ../../packages/superdoc/dist/super-editor.es.js
330932
331419
  var init_super_editor_es = __esm(() => {
330933
- init_src_BLxaw1d3_es();
330934
- init_SuperConverter_BecdrRIX_es();
331420
+ init_src_BpYr_7Wm_es();
331421
+ init_SuperConverter_CcvDw1Yc_es();
330935
331422
  init_jszip_C49i9kUs_es();
330936
331423
  init_xml_js_CqGKpaft_es();
330937
- init_create_headless_toolbar_DCeIAH_W_es();
331424
+ init_create_headless_toolbar_D5yv7LyN_es();
330938
331425
  init_constants_DrU4EASo_es();
330939
331426
  init_dist_B8HfvhaK_es();
330940
331427
  init_unified_Dsuw2be5_es();
330941
331428
  init_DocxZipper_Dh4RtvcE_es();
330942
- init_create_super_doc_ui_fxrCn5X__es();
331429
+ init_create_super_doc_ui_CEK13syX_es();
330943
331430
  init_ui_CGB3qmy3_es();
330944
331431
  init_eventemitter3_UwU_CLPU_es();
330945
331432
  init_errors_C_DoKMoN_es();
@@ -331330,7 +331817,9 @@ function deriveIncludePageNumbers2(omitRange, outlineLevels) {
331330
331817
  return !fullyCovered;
331331
331818
  }
331332
331819
  function deriveTabLeader2(separator) {
331333
- if (!separator)
331820
+ if (separator === undefined)
331821
+ return;
331822
+ if (separator === "")
331334
331823
  return "none";
331335
331824
  const leader = SEPARATOR_TO_TAB_LEADER2[separator];
331336
331825
  return leader;
@@ -331344,7 +331833,8 @@ function parseTocInstruction2(instruction) {
331344
331833
  SWITCH_PATTERN2.lastIndex = 0;
331345
331834
  while ((match2 = SWITCH_PATTERN2.exec(instruction)) !== null) {
331346
331835
  const switchChar = match2[1].toLowerCase();
331347
- const arg = match2[2] ?? "";
331836
+ const rawArg = match2[2];
331837
+ const arg = rawArg ?? "";
331348
331838
  switch (switchChar) {
331349
331839
  case "o": {
331350
331840
  const range = parseLevelRange2(arg);
@@ -331378,8 +331868,8 @@ function parseTocInstruction2(instruction) {
331378
331868
  break;
331379
331869
  }
331380
331870
  case "p":
331381
- if (arg)
331382
- display.separator = arg;
331871
+ if (rawArg !== undefined)
331872
+ display.separator = rawArg;
331383
331873
  break;
331384
331874
  case "t":
331385
331875
  if (arg)
@@ -331451,7 +331941,7 @@ function serializeTocInstruction2(config3) {
331451
331941
  if (display.omitPageNumberLevels) {
331452
331942
  parts.push(`\\n "${display.omitPageNumberLevels.from}-${display.omitPageNumberLevels.to}"`);
331453
331943
  }
331454
- if (display.separator) {
331944
+ if (display.separator !== undefined) {
331455
331945
  parts.push(`\\p "${display.separator}"`);
331456
331946
  }
331457
331947
  if (preserved.captionType) {
@@ -331512,7 +332002,7 @@ function applyTocPatch2(existing, patch3) {
331512
332002
  }
331513
332003
  if (patch3.tabLeader !== undefined) {
331514
332004
  if (patch3.tabLeader === "none") {
331515
- delete newDisplay.separator;
332005
+ newDisplay.separator = "";
331516
332006
  } else {
331517
332007
  newDisplay.separator = TAB_LEADER_TO_SEPARATOR2[patch3.tabLeader];
331518
332008
  }
@@ -409843,13 +410333,12 @@ function preProcessPageRefInstruction2(nodesToCombine, instrText) {
409843
410333
  }
409844
410334
 
409845
410335
  // ../../packages/super-editor/src/editors/v1/core/super-converter/field-references/fld-preprocessors/hyperlink-preprocessor.js
409846
- function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
410336
+ function resolveHyperlinkAttributes2(instruction, docx) {
409847
410337
  const urlMatch = instruction.match(/HYPERLINK\s+"([^"]+)"/);
409848
- let linkAttributes;
409849
410338
  if (urlMatch && urlMatch.length >= 2) {
409850
410339
  const url2 = urlMatch[1];
409851
- const rels = docx["word/_rels/document.xml.rels"];
409852
- const relationships = rels?.elements.find((el) => el.name === "Relationships");
410340
+ const rels = docx?.["word/_rels/document.xml.rels"];
410341
+ const relationships = rels?.elements?.find((el) => el.name === "Relationships");
409853
410342
  if (relationships) {
409854
410343
  const rId = "rId" + generateDocxRandomId2();
409855
410344
  relationships.elements.push({
@@ -409862,30 +410351,34 @@ function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
409862
410351
  TargetMode: "External"
409863
410352
  }
409864
410353
  });
409865
- linkAttributes = { "r:id": rId };
409866
- } else {
409867
- linkAttributes = { "w:anchor": url2 };
409868
- }
409869
- } else {
409870
- const availableSwitches = {
409871
- "w:anchor": /(?:\\)?l "(?<value>[^"]+)"/,
409872
- new_window: /(?:\\n|\n)/,
409873
- "w:tgtFrame": /(?:\\t|\t) "(?<value>[^"]+)"/,
409874
- "w:tooltip": /(?:\\)?o "(?<value>[^"]+)"/
409875
- };
409876
- const parsedSwitches = {};
409877
- for (const [key2, pattern] of Object.entries(availableSwitches)) {
409878
- const match2 = instruction.match(pattern);
409879
- if (match2) {
409880
- parsedSwitches[key2] = match2.groups?.value || true;
409881
- }
410354
+ return { "r:id": rId };
409882
410355
  }
409883
- if (parsedSwitches.new_window) {
409884
- parsedSwitches["w:tgtFrame"] = "_blank";
409885
- delete parsedSwitches.new_window;
410356
+ return { "w:anchor": url2 };
410357
+ }
410358
+ const availableSwitches = {
410359
+ "w:anchor": /(?:\\)?l "(?<value>[^"]+)"/,
410360
+ new_window: /(?:\\n|\n)/,
410361
+ "w:tgtFrame": /(?:\\t|\t) "(?<value>[^"]+)"/,
410362
+ "w:tooltip": /(?:\\)?o "(?<value>[^"]+)"/
410363
+ };
410364
+ const parsedSwitches = {};
410365
+ for (const [key2, pattern] of Object.entries(availableSwitches)) {
410366
+ const match2 = instruction.match(pattern);
410367
+ if (match2) {
410368
+ parsedSwitches[key2] = match2.groups?.value || true;
409886
410369
  }
409887
- linkAttributes = { ...parsedSwitches };
409888
410370
  }
410371
+ if (parsedSwitches.new_window) {
410372
+ parsedSwitches["w:tgtFrame"] = "_blank";
410373
+ delete parsedSwitches.new_window;
410374
+ }
410375
+ if (Object.keys(parsedSwitches).length === 0) {
410376
+ return null;
410377
+ }
410378
+ return { ...parsedSwitches };
410379
+ }
410380
+ function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
410381
+ const linkAttributes = resolveHyperlinkAttributes2(instruction, docx) ?? {};
409889
410382
  return [
409890
410383
  {
409891
410384
  name: "w:hyperlink",
@@ -410157,10 +410650,11 @@ var init_fld_preprocessors = __esm(() => {
410157
410650
  });
410158
410651
 
410159
410652
  // ../../packages/super-editor/src/editors/v1/core/super-converter/v2/importer/trackChangeElements.js
410160
- var TRACK_CHANGE_ELEMENT_NAMES2, TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2, isTrackChangeElement2 = (node4) => TRACK_CHANGE_ELEMENT_NAMES2.has(node4?.name), isTranslatedTrackChangeElement2 = (node4) => TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2.has(node4?.name);
410653
+ var TRACK_CHANGE_ELEMENT_NAMES2, TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2, CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES2, isTrackChangeElement2 = (node4) => TRACK_CHANGE_ELEMENT_NAMES2.has(node4?.name), isTranslatedTrackChangeElement2 = (node4) => TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2.has(node4?.name), isConstructiveTrackChangeElement2 = (node4) => CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES2.has(node4?.name);
410161
410654
  var init_trackChangeElements = __esm(() => {
410162
410655
  TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:del", "w:ins", "w:moveFrom", "w:moveTo"]);
410163
410656
  TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:del", "w:ins"]);
410657
+ CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:ins", "w:moveTo"]);
410164
410658
  });
410165
410659
 
410166
410660
  // ../../packages/super-editor/src/editors/v1/core/super-converter/field-references/preProcessNodesForFldChar.js
@@ -410184,6 +410678,8 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410184
410678
  if (!currentField.preserveRaw) {
410185
410679
  const combinedResult = _processCombinedNodesForFldChar2(collectedNodes, currentField.instrText.trim(), docx, currentField.instructionTokens, fieldRunRPr);
410186
410680
  outputNodes = combinedResult.handled ? combinedResult.nodes : rawCollectedNodes;
410681
+ } else if (currentField.preserveRawConstructive) {
410682
+ applyConstructiveFieldInterpretation2(outputNodes, currentField.instrText.trim(), docx);
410187
410683
  }
410188
410684
  if (collectedNodesStack.length === 0) {
410189
410685
  processedNodes.push(...outputNodes);
@@ -410303,6 +410799,9 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410303
410799
  if (fieldInfo.preserveRaw || isTrackChangeElement2(node4)) {
410304
410800
  fieldInfo.preserveRaw = true;
410305
410801
  }
410802
+ if (isConstructiveTrackChangeElement2(node4)) {
410803
+ fieldInfo.preserveRawConstructive = true;
410804
+ }
410306
410805
  currentFieldStack.push(fieldInfo);
410307
410806
  collectedNodesStack.push([node4]);
410308
410807
  const rawStack = [rawNode];
@@ -410322,6 +410821,9 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410322
410821
  if (shouldPreserveRaw) {
410323
410822
  currentFieldStack[currentFieldStack.length - 1].preserveRaw = true;
410324
410823
  }
410824
+ if (isConstructiveTrackChangeElement2(node4)) {
410825
+ currentFieldStack[currentFieldStack.length - 1].preserveRawConstructive = true;
410826
+ }
410325
410827
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
410326
410828
  captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
410327
410829
  finalizeField();
@@ -410370,6 +410872,83 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410370
410872
  };
410371
410873
  }
410372
410874
  return { nodes: nodesToCombine, handled: false };
410875
+ }, applyConstructiveFieldInterpretation2 = (rawNodes, instrText, docx) => {
410876
+ const instructionType = instrText.split(" ")[0];
410877
+ if (instructionType !== "HYPERLINK")
410878
+ return;
410879
+ const linkAttributes = resolveHyperlinkAttributes2(instrText, docx);
410880
+ if (!linkAttributes)
410881
+ return;
410882
+ let visible = false;
410883
+ const walk = (parent) => {
410884
+ if (!parent || !Array.isArray(parent.elements))
410885
+ return;
410886
+ const next2 = [];
410887
+ let pendingHyperlinkRuns = null;
410888
+ const flushHyperlink = () => {
410889
+ if (!pendingHyperlinkRuns || pendingHyperlinkRuns.length === 0) {
410890
+ pendingHyperlinkRuns = null;
410891
+ return;
410892
+ }
410893
+ next2.push({
410894
+ type: "element",
410895
+ name: "w:hyperlink",
410896
+ attributes: linkAttributes,
410897
+ elements: pendingHyperlinkRuns
410898
+ });
410899
+ pendingHyperlinkRuns = null;
410900
+ };
410901
+ for (const child of parent.elements) {
410902
+ if (!child)
410903
+ continue;
410904
+ if (child.name === "w:p" || child.name === "w:ins" || child.name === "w:moveTo") {
410905
+ flushHyperlink();
410906
+ walk(child);
410907
+ next2.push(child);
410908
+ continue;
410909
+ }
410910
+ if (child.name === "w:r") {
410911
+ const fldChar = child.elements?.find((el) => el?.name === "w:fldChar");
410912
+ const fldType = fldChar?.attributes?.["w:fldCharType"];
410913
+ if (fldType === "separate") {
410914
+ flushHyperlink();
410915
+ visible = true;
410916
+ next2.push(child);
410917
+ continue;
410918
+ }
410919
+ if (fldType === "end") {
410920
+ flushHyperlink();
410921
+ visible = false;
410922
+ next2.push(child);
410923
+ continue;
410924
+ }
410925
+ if (fldType === "begin") {
410926
+ flushHyperlink();
410927
+ next2.push(child);
410928
+ continue;
410929
+ }
410930
+ const hasInstrText = child.elements?.some((el) => el?.name === "w:instrText");
410931
+ if (hasInstrText) {
410932
+ flushHyperlink();
410933
+ next2.push(child);
410934
+ continue;
410935
+ }
410936
+ if (visible) {
410937
+ if (!pendingHyperlinkRuns)
410938
+ pendingHyperlinkRuns = [];
410939
+ pendingHyperlinkRuns.push(child);
410940
+ continue;
410941
+ }
410942
+ next2.push(child);
410943
+ continue;
410944
+ }
410945
+ flushHyperlink();
410946
+ next2.push(child);
410947
+ }
410948
+ flushHyperlink();
410949
+ parent.elements = next2;
410950
+ };
410951
+ rawNodes.forEach(walk);
410373
410952
  }, extractFieldRunRPr2 = (node4) => {
410374
410953
  const rPrNode = node4?.elements?.find((el) => el.name === "w:rPr");
410375
410954
  if (!rPrNode?.elements?.length) {
@@ -410442,6 +411021,7 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410442
411021
  };
410443
411022
  var init_preProcessNodesForFldChar = __esm(() => {
410444
411023
  init_fld_preprocessors();
411024
+ init_hyperlink_preprocessor();
410445
411025
  init_trackChangeElements();
410446
411026
  SKIP_FIELD_PROCESSING_NODE_NAMES2 = new Set(["w:drawing", "w:pict"]);
410447
411027
  FIELD_CONTROL_ELEMENT_NAMES2 = new Set(["w:fldChar"]);
@@ -411383,6 +411963,26 @@ function extractTextFromTextBox2(textBoxContent, bodyPr, params3 = {}) {
411383
411963
  } else if (el.name === "sd:totalPageNumber") {
411384
411964
  hasText = true;
411385
411965
  appendFieldPart("NUMPAGES", el, paragraphProperties);
411966
+ } else if (el.name === "w:drawing") {
411967
+ const inline = el.elements?.find((child) => child?.name === "wp:inline");
411968
+ if (inline) {
411969
+ const imagePm = handleImageNode3(inline, { ...params3, nodes: [el] }, false);
411970
+ if (imagePm?.attrs?.src && imagePm.attrs.hidden !== true) {
411971
+ hasText = true;
411972
+ const sizeAttr = imagePm.attrs.size || imagePm.attrs;
411973
+ textParts.push({
411974
+ text: "",
411975
+ formatting,
411976
+ kind: "image",
411977
+ src: imagePm.attrs.src,
411978
+ extension: imagePm.attrs.extension,
411979
+ rId: imagePm.attrs.rId,
411980
+ width: typeof sizeAttr?.width === "number" ? sizeAttr.width : undefined,
411981
+ height: typeof sizeAttr?.height === "number" ? sizeAttr.height : undefined,
411982
+ alt: imagePm.attrs.alt || ""
411983
+ });
411984
+ }
411985
+ }
411386
411986
  }
411387
411987
  });
411388
411988
  return hasText;
@@ -453939,27 +454539,46 @@ function dispatchTransaction2(editor, tr) {
453939
454539
  var TOC_BOOKMARK_PREFIX2 = "_Toc";
453940
454540
 
453941
454541
  // ../../packages/super-editor/src/editors/v1/document-api-adapters/helpers/toc-entry-builder.ts
454542
+ function sanitizeSourceMark2(mark2) {
454543
+ if (!mark2?.type)
454544
+ return null;
454545
+ if (mark2.type === "textStyle") {
454546
+ const attrs = mark2.attrs ?? {};
454547
+ const kept = {};
454548
+ for (const key2 of Object.keys(attrs)) {
454549
+ if (TEXT_STYLE_ALLOWED_ATTRS2.has(key2) && attrs[key2] != null)
454550
+ kept[key2] = attrs[key2];
454551
+ }
454552
+ return Object.keys(kept).length > 0 ? { type: "textStyle", attrs: kept } : null;
454553
+ }
454554
+ if (!ALLOWED_SOURCE_MARK_TYPES2.has(mark2.type))
454555
+ return null;
454556
+ return mark2.attrs && Object.keys(mark2.attrs).length > 0 ? { type: mark2.type, attrs: { ...mark2.attrs } } : { type: mark2.type };
454557
+ }
453942
454558
  function collectTocSources2(doc6, config44) {
453943
454559
  const sources = [];
453944
454560
  const { outlineLevels, useAppliedOutlineLevel, tcFieldIdentifier, tcFieldLevels } = config44.source;
453945
454561
  const useApplied = useAppliedOutlineLevel ?? false;
453946
454562
  const collectTcFields = tcFieldIdentifier !== undefined || tcFieldLevels !== undefined;
453947
454563
  let currentParagraphSdBlockId;
453948
- doc6.descendants((node4, _pos) => {
454564
+ doc6.descendants((node4, pos) => {
453949
454565
  if (node4.type.name === "tableOfContents")
453950
454566
  return false;
453951
454567
  if (node4.type.name === "paragraph") {
453952
454568
  const attrs = node4.attrs;
453953
454569
  const paragraphProps = attrs?.paragraphProperties;
453954
454570
  const styleId = paragraphProps?.styleId;
453955
- const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId;
454571
+ const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId ?? buildFallbackBlockNodeId2("paragraph", pos);
453956
454572
  currentParagraphSdBlockId = sdBlockId;
453957
454573
  if (!sdBlockId)
453958
454574
  return true;
454575
+ const text9 = flattenText2(node4);
454576
+ if (text9.trim().length === 0)
454577
+ return true;
453959
454578
  if (outlineLevels) {
453960
454579
  const headingLevel = getHeadingLevel2(styleId);
453961
454580
  if (headingLevel != null && headingLevel >= outlineLevels.from && headingLevel <= outlineLevels.to) {
453962
- sources.push({ text: flattenText2(node4), level: headingLevel, sdBlockId, kind: "heading" });
454581
+ sources.push({ text: text9, segments: extractTextSegments2(node4), level: headingLevel, sdBlockId, kind: "heading" });
453963
454582
  return true;
453964
454583
  }
453965
454584
  }
@@ -453969,7 +454588,13 @@ function collectTocSources2(doc6, config44) {
453969
454588
  if (rawOutlineLevel != null) {
453970
454589
  const tocLevel = rawOutlineLevel + 1;
453971
454590
  if (tocLevel >= effectiveLevels.from && tocLevel <= effectiveLevels.to) {
453972
- sources.push({ text: flattenText2(node4), level: tocLevel, sdBlockId, kind: "appliedOutline" });
454591
+ sources.push({
454592
+ text: text9,
454593
+ segments: extractTextSegments2(node4),
454594
+ level: tocLevel,
454595
+ sdBlockId,
454596
+ kind: "appliedOutline"
454597
+ });
453973
454598
  return true;
453974
454599
  }
453975
454600
  }
@@ -454009,54 +454634,79 @@ function flattenText2(node4) {
454009
454634
  });
454010
454635
  return text9;
454011
454636
  }
454012
- function buildTocEntryParagraphs2(sources, config44) {
454013
- return sources.map((source) => buildEntryParagraph2(source, config44));
454637
+ function extractTextSegments2(node4) {
454638
+ const segments = [];
454639
+ node4.descendants((child) => {
454640
+ if (!child.isText || !child.text)
454641
+ return true;
454642
+ const marks = [];
454643
+ for (const mark2 of child.marks ?? []) {
454644
+ const raw = { type: mark2.type?.name ?? "" };
454645
+ if (mark2.attrs && Object.keys(mark2.attrs).length > 0)
454646
+ raw.attrs = { ...mark2.attrs };
454647
+ const sanitized = sanitizeSourceMark2(raw);
454648
+ if (sanitized)
454649
+ marks.push(sanitized);
454650
+ }
454651
+ const last2 = segments[segments.length - 1];
454652
+ if (last2 && marksEqual4(last2.marks, marks)) {
454653
+ last2.text += child.text;
454654
+ } else {
454655
+ segments.push(marks.length > 0 ? { text: child.text, marks } : { text: child.text });
454656
+ }
454657
+ return true;
454658
+ });
454659
+ return segments;
454660
+ }
454661
+ function marksEqual4(a2, b2) {
454662
+ const aLen = a2?.length ?? 0;
454663
+ const bLen = b2?.length ?? 0;
454664
+ if (aLen !== bLen)
454665
+ return false;
454666
+ if (aLen === 0)
454667
+ return true;
454668
+ return JSON.stringify(a2) === JSON.stringify(b2);
454669
+ }
454670
+ function buildTocEntryParagraphs2(sources, config44, options = {}) {
454671
+ return sources.map((source) => buildEntryParagraph2(source, config44, options));
454014
454672
  }
454015
- function buildEntryParagraph2(source, config44) {
454673
+ function asRun2(children) {
454674
+ return { type: "run", content: children };
454675
+ }
454676
+ function buildEntryParagraph2(source, config44, options = {}) {
454016
454677
  const { display } = config44;
454017
- const content5 = [];
454018
- const textNode = {
454019
- type: "text",
454020
- text: source.text || " "
454021
- };
454022
- if (display.hyperlinks) {
454023
- textNode.marks = [
454024
- {
454025
- type: "link",
454026
- attrs: {
454027
- anchor: generateTocBookmarkName2(source.sdBlockId),
454028
- rId: null,
454029
- history: true
454030
- }
454031
- }
454032
- ];
454033
- }
454034
- content5.push(textNode);
454678
+ const linkMark = display.hyperlinks ? { type: "link", attrs: { anchor: generateTocBookmarkName2(source.sdBlockId), rId: null, history: true } } : undefined;
454679
+ const segments = source.segments && source.segments.length > 0 ? source.segments : [{ text: source.text || " " }];
454680
+ const titleTextNodes = segments.map((segment) => {
454681
+ const sourceMarks = (segment.marks ?? []).map((m2) => sanitizeSourceMark2(m2)).filter((m2) => m2 !== null);
454682
+ const marks = [...sourceMarks];
454683
+ if (linkMark)
454684
+ marks.push(linkMark);
454685
+ const node4 = { type: "text", text: segment.text || " " };
454686
+ if (marks.length > 0)
454687
+ node4.marks = marks;
454688
+ return node4;
454689
+ });
454690
+ const content5 = [asRun2(titleTextNodes)];
454035
454691
  const omitRange = display.omitPageNumberLevels;
454036
- const levelOmitted = omitRange && source.level >= omitRange.from && source.level <= omitRange.to;
454037
- const entryOmitted = source.omitPageNumber;
454038
- const omitPageNumber = levelOmitted || entryOmitted;
454692
+ const omitPageNumber = Boolean(omitRange && source.level >= omitRange.from && source.level <= omitRange.to || source.omitPageNumber);
454039
454693
  if (!omitPageNumber) {
454040
- if (display.separator) {
454041
- content5.push({ type: "text", text: display.separator });
454042
- } else {
454043
- content5.push({ type: "tab" });
454044
- }
454045
- content5.push({
454046
- type: "text",
454047
- text: "0",
454048
- marks: [{ type: "tocPageNumber" }]
454049
- });
454694
+ content5.push(asRun2([display.separator ? { type: "text", text: display.separator } : { type: "tab" }]));
454695
+ const resolvedPage = options.pageMap?.get(source.sdBlockId);
454696
+ content5.push(asRun2([
454697
+ {
454698
+ type: "text",
454699
+ text: resolvedPage != null ? String(resolvedPage) : "0",
454700
+ marks: [{ type: "tocPageNumber" }]
454701
+ }
454702
+ ]));
454050
454703
  }
454051
- const paragraphProperties = {
454052
- styleId: `TOC${source.level}`
454053
- };
454704
+ const paragraphProperties = { styleId: `TOC${source.level}` };
454054
454705
  const rightAlign = display.rightAlignPageNumbers !== false;
454055
454706
  if (rightAlign && !omitPageNumber) {
454056
- const leader = display.tabLeader && display.tabLeader !== "none" ? TAB_LEADER_MAP2[display.tabLeader] ?? undefined : undefined;
454057
- paragraphProperties.tabStops = [
454058
- { tab: { tabType: "right", pos: DEFAULT_RIGHT_TAB_POS2, ...leader ? { leader } : {} } }
454059
- ];
454707
+ const leader = display.tabLeader === "none" ? undefined : display.tabLeader && TAB_LEADER_MAP2[display.tabLeader] || "dot";
454708
+ const pos = options.tabPos ?? DEFAULT_RIGHT_TAB_POS2;
454709
+ paragraphProperties.tabStops = [{ tab: { tabType: "right", pos, ...leader ? { leader } : {} } }];
454060
454710
  }
454061
454711
  return {
454062
454712
  type: "paragraph",
@@ -454068,10 +454718,13 @@ function buildEntryParagraph2(source, config44) {
454068
454718
  content: content5
454069
454719
  };
454070
454720
  }
454071
- var DEFAULT_RIGHT_TAB_POS2 = 9350, TAB_LEADER_MAP2;
454721
+ var ALLOWED_SOURCE_MARK_TYPES2, TEXT_STYLE_ALLOWED_ATTRS2, DEFAULT_RIGHT_TAB_POS2 = 9350, TAB_LEADER_MAP2;
454072
454722
  var init_toc_entry_builder = __esm(() => {
454073
454723
  init_tc_switches();
454074
454724
  init_node_address_resolver();
454725
+ init_deterministic_node_id();
454726
+ ALLOWED_SOURCE_MARK_TYPES2 = new Set(["bold", "italic", "underline", "color", "highlight", "fontFamily"]);
454727
+ TEXT_STYLE_ALLOWED_ATTRS2 = new Set(["fontFamily"]);
454075
454728
  TAB_LEADER_MAP2 = {
454076
454729
  dot: "dot",
454077
454730
  hyphen: "hyphen",
@@ -454184,6 +454837,39 @@ function withRightAlign2(config44, rightAlignPageNumbers) {
454184
454837
  return config44;
454185
454838
  return { ...config44, display: { ...config44.display, rightAlignPageNumbers } };
454186
454839
  }
454840
+ function stripTocPageNumberFromNode2(node4) {
454841
+ if (!node4 || typeof node4 !== "object")
454842
+ return { node: node4, changed: false };
454843
+ const typedNode = node4;
454844
+ let changed = false;
454845
+ let next2 = typedNode;
454846
+ if (Array.isArray(typedNode.marks)) {
454847
+ const filtered = typedNode.marks.filter((mark2) => mark2?.type !== "tocPageNumber");
454848
+ if (filtered.length !== typedNode.marks.length) {
454849
+ changed = true;
454850
+ if (filtered.length === 0) {
454851
+ const { marks: _removed, ...rest } = next2;
454852
+ next2 = rest;
454853
+ } else {
454854
+ next2 = { ...next2, marks: filtered };
454855
+ }
454856
+ }
454857
+ }
454858
+ if (Array.isArray(typedNode.content)) {
454859
+ let childChanged = false;
454860
+ const nextChildren = typedNode.content.map((child) => {
454861
+ const result = stripTocPageNumberFromNode2(child);
454862
+ if (result.changed)
454863
+ childChanged = true;
454864
+ return result.node;
454865
+ });
454866
+ if (childChanged) {
454867
+ changed = true;
454868
+ next2 = { ...next2, content: nextChildren };
454869
+ }
454870
+ }
454871
+ return { node: next2, changed };
454872
+ }
454187
454873
  function sanitizeTocContentForSchema2(content5, editor) {
454188
454874
  if (editor.state.schema?.marks?.tocPageNumber)
454189
454875
  return content5;
@@ -454193,31 +454879,58 @@ function sanitizeTocContentForSchema2(content5, editor) {
454193
454879
  return paragraph4;
454194
454880
  let changed = false;
454195
454881
  const sanitizedContent = paragraphContent.map((node4) => {
454196
- if (!node4 || typeof node4 !== "object")
454197
- return node4;
454198
- const typedNode = node4;
454199
- const marks = typedNode.marks;
454200
- if (!Array.isArray(marks))
454201
- return node4;
454202
- const filteredMarks = marks.filter((mark2) => mark2?.type !== "tocPageNumber");
454203
- if (filteredMarks.length === marks.length)
454204
- return node4;
454205
- changed = true;
454206
- if (filteredMarks.length === 0) {
454207
- const { marks: _removed, ...rest } = typedNode;
454208
- return rest;
454209
- }
454210
- return { ...typedNode, marks: filteredMarks };
454882
+ const result = stripTocPageNumberFromNode2(node4);
454883
+ if (result.changed)
454884
+ changed = true;
454885
+ return result.node;
454211
454886
  });
454212
454887
  return changed ? { ...paragraph4, content: sanitizedContent } : paragraph4;
454213
454888
  });
454214
454889
  }
454215
- function materializeTocContent2(doc6, config44, editor) {
454890
+ function materializeTocContent2(doc6, config44, editor, options = {}) {
454216
454891
  const sources = collectTocSources2(doc6, config44);
454217
- const entryParagraphs = buildTocEntryParagraphs2(sources, config44);
454892
+ const entryParagraphs = buildTocEntryParagraphs2(sources, config44, options);
454218
454893
  const content5 = entryParagraphs.length > 0 ? entryParagraphs : NO_ENTRIES_PLACEHOLDER2;
454219
454894
  return { content: sanitizeTocContentForSchema2(content5, editor), sources };
454220
454895
  }
454896
+ function findFirstTocEntryParagraph2(node4) {
454897
+ let entry;
454898
+ node4.forEach((paragraph4) => {
454899
+ if (entry || paragraph4.type.name !== "paragraph")
454900
+ return;
454901
+ const styleId = paragraph4.attrs?.paragraphProperties?.styleId;
454902
+ if (styleId && TOC_ENTRY_STYLE_RE2.test(styleId))
454903
+ entry = paragraph4;
454904
+ });
454905
+ return entry;
454906
+ }
454907
+ function readExistingTocTabPos2(node4) {
454908
+ const entry = findFirstTocEntryParagraph2(node4) ?? node4.firstChild ?? undefined;
454909
+ const tabStops = entry?.attrs?.paragraphProperties?.tabStops;
454910
+ const pos = tabStops?.find((t) => t?.tab?.tabType === "right")?.tab?.pos;
454911
+ return typeof pos === "number" ? pos : undefined;
454912
+ }
454913
+ function readExistingTocTrailingParagraph2(node4) {
454914
+ const last2 = node4.lastChild;
454915
+ if (!last2 || last2.type.name !== "paragraph")
454916
+ return;
454917
+ const styleId = last2.attrs?.paragraphProperties?.styleId;
454918
+ if (styleId && TOC_ENTRY_STYLE_RE2.test(styleId))
454919
+ return;
454920
+ let hasPrecedingEntry = false;
454921
+ node4.forEach((child) => {
454922
+ if (hasPrecedingEntry || child === last2)
454923
+ return;
454924
+ if (child.type.name !== "paragraph")
454925
+ return;
454926
+ const childStyleId = child.attrs?.paragraphProperties?.styleId;
454927
+ if (childStyleId && TOC_ENTRY_STYLE_RE2.test(childStyleId))
454928
+ hasPrecedingEntry = true;
454929
+ });
454930
+ if (!hasPrecedingEntry)
454931
+ return;
454932
+ return typeof last2.toJSON === "function" ? last2.toJSON() : undefined;
454933
+ }
454221
454934
  function tocConfigureWrapper2(editor, input2, options) {
454222
454935
  rejectTrackedMode2("toc.configure", options);
454223
454936
  const resolved = resolveTocTarget2(editor.state.doc, input2.target);
@@ -454226,7 +454939,12 @@ function tocConfigureWrapper2(editor, input2, options) {
454226
454939
  const instruction = serializeTocInstruction2(patched);
454227
454940
  const rightAlignChanged = input2.patch.rightAlignPageNumbers !== undefined && input2.patch.rightAlignPageNumbers !== resolved.node.attrs?.rightAlignPageNumbers;
454228
454941
  const effectiveRightAlign = input2.patch.rightAlignPageNumbers ?? resolved.node.attrs?.rightAlignPageNumbers;
454229
- const { content: nextContent, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(patched, effectiveRightAlign), editor);
454942
+ const { content: rebuiltEntries, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(patched, effectiveRightAlign), editor, {
454943
+ pageMap: getPageMap2(editor) ?? undefined,
454944
+ tabPos: readExistingTocTabPos2(resolved.node)
454945
+ });
454946
+ const trailing = readExistingTocTrailingParagraph2(resolved.node);
454947
+ const nextContent = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
454230
454948
  if (areTocConfigsEqual2(currentConfig, patched) && !rightAlignChanged) {
454231
454949
  return tocFailure2("NO_OP", "Configuration patch produced no change.");
454232
454950
  }
@@ -454279,7 +454997,12 @@ function tocUpdateAll2(editor, input2, options) {
454279
454997
  const resolved = resolveTocTarget2(editor.state.doc, input2.target);
454280
454998
  const config44 = parseTocInstruction2(resolved.node.attrs?.instruction ?? "");
454281
454999
  const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
454282
- const { content: content5, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(config44, rightAlign), editor);
455000
+ const { content: rebuiltEntries, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(config44, rightAlign), editor, {
455001
+ pageMap: getPageMap2(editor) ?? undefined,
455002
+ tabPos: readExistingTocTabPos2(resolved.node)
455003
+ });
455004
+ const trailing = readExistingTocTrailingParagraph2(resolved.node);
455005
+ const content5 = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
454283
455006
  if (isTocContentUnchanged2(resolved.node, content5)) {
454284
455007
  return tocFailure2("NO_OP", "TOC update produced no change.");
454285
455008
  }
@@ -454369,24 +455092,30 @@ function buildPageNumberUpdatedContent2(tocNode, pageMap) {
454369
455092
  }
454370
455093
  const tocSourceId = child.attrs?.tocSourceId;
454371
455094
  const childJson = child.toJSON();
454372
- const content5 = childJson.content ?? [];
454373
455095
  let paragraphChanged = false;
454374
- const updatedContentArray = content5.map((node4) => {
455096
+ const visit3 = (node4) => {
454375
455097
  const marks = node4.marks;
454376
455098
  const hasTocPageNumberMark = marks?.some((m2) => m2.type === "tocPageNumber");
454377
- if (!hasTocPageNumberMark)
454378
- return node4;
454379
- hasPageNumberMarks = true;
454380
- if (!tocSourceId)
455099
+ if (hasTocPageNumberMark) {
455100
+ hasPageNumberMarks = true;
455101
+ if (!tocSourceId)
455102
+ return node4;
455103
+ const pageNumber = pageMap.get(tocSourceId);
455104
+ const newText = pageNumber !== undefined ? String(pageNumber) : "??";
455105
+ if (node4.text !== newText) {
455106
+ paragraphChanged = true;
455107
+ return { ...node4, text: newText };
455108
+ }
454381
455109
  return node4;
454382
- const pageNumber = pageMap.get(tocSourceId);
454383
- const newText = pageNumber !== undefined ? String(pageNumber) : "??";
454384
- if (node4.text !== newText) {
454385
- paragraphChanged = true;
454386
- return { ...node4, text: newText };
454387
455110
  }
454388
- return node4;
454389
- });
455111
+ const nested = node4.content;
455112
+ if (!Array.isArray(nested) || nested.length === 0)
455113
+ return node4;
455114
+ const visited = nested.map(visit3);
455115
+ const replaced = visited.some((next2, idx) => next2 !== nested[idx]);
455116
+ return replaced ? { ...node4, content: visited } : node4;
455117
+ };
455118
+ const updatedContentArray = (childJson.content ?? []).map(visit3);
454390
455119
  if (paragraphChanged) {
454391
455120
  anyChanged = true;
454392
455121
  updatedContent.push({ ...childJson, content: updatedContentArray });
@@ -454480,7 +455209,7 @@ function createTableOfContentsWrapper2(editor, input2, options) {
454480
455209
  const postMutationId = resolvePostMutationTocId2(editor.state.doc, sdBlockId);
454481
455210
  return { success: true, toc: buildTocAddress2(postMutationId) };
454482
455211
  }
454483
- var NO_ENTRIES_PLACEHOLDER2;
455212
+ var NO_ENTRIES_PLACEHOLDER2, TOC_ENTRY_STYLE_RE2;
454484
455213
  var init_toc_wrappers = __esm(() => {
454485
455214
  init_wrapper();
454486
455215
  init_src();
@@ -454500,6 +455229,7 @@ var init_toc_wrappers = __esm(() => {
454500
455229
  content: [{ type: "text", text: "No table of contents entries found." }]
454501
455230
  }
454502
455231
  ];
455232
+ TOC_ENTRY_STYLE_RE2 = /^TOC[1-9]$/;
454503
455233
  });
454504
455234
 
454505
455235
  // ../../packages/super-editor/src/editors/v1/document-api-adapters/helpers/toc-entry-node-id.ts