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

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 +1383 -600
  2. package/package.json +4 -4
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-BInxZk0I.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)
@@ -104103,12 +104209,22 @@ var isRegExp = (value) => {
104103
104209
  if (rawValue == null)
104104
104210
  return true;
104105
104211
  return ST_ON_OFF_TRUE_VALUES.has(String(rawValue).trim().toLowerCase());
104212
+ }, resolveEvenAndOddHeadersFromSettingsPart = (settingsPart) => {
104213
+ if (!settingsPart || typeof settingsPart !== "object")
104214
+ return null;
104215
+ const part = settingsPart;
104216
+ const settingsRoot = part.name === "w:settings" ? part : part.elements?.find((entry) => entry?.name === "w:settings");
104217
+ if (!settingsRoot?.elements?.length)
104218
+ return null;
104219
+ const evenOdd = settingsRoot.elements.find((el) => el?.name === "w:evenAndOddHeaders");
104220
+ if (!evenOdd)
104221
+ return null;
104222
+ return isStOnOffEnabled(evenOdd);
104106
104223
  }, isAlternatingHeadersOddEven = (docx) => {
104107
104224
  const settings = docx["word/settings.xml"];
104108
- if (!settings || !settings.elements?.length)
104225
+ if (!settings)
104109
104226
  return false;
104110
- const { elements = [] } = settings.elements[0];
104111
- return isStOnOffEnabled(elements.find((el) => el.name === "w:evenAndOddHeaders"));
104227
+ return resolveEvenAndOddHeadersFromSettingsPart(settings) ?? false;
104112
104228
  }, FULL_WIDTH_PT = "468pt", FULL_WIDTH_PT_VALUE = 468, PX_PER_PT = 1.33, XML_NODE_NAME = "w:pict", SD_NODE_NAME, validXmlAttributes, config2, translator$29, DEFAULT_SECTION_PROPS_TWIPS, ensureSectionLayoutDefaults = (sectPr, converter) => {
104113
104229
  if (!sectPr)
104114
104230
  return {
@@ -104936,7 +105052,7 @@ var isRegExp = (value) => {
104936
105052
  if (id)
104937
105053
  return trackedChanges.filter(({ mark }) => mark.attrs.id === id);
104938
105054
  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 }) => {
105055
+ }, 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
105056
  if (!runProps?.elements?.length || !state)
104941
105057
  return;
104942
105058
  const fontsNode = runProps.elements.find((el) => el.name === "w:rFonts");
@@ -104970,7 +105086,7 @@ var isRegExp = (value) => {
104970
105086
  state.kern = kernNode.attributes["w:val"];
104971
105087
  }
104972
105088
  }, SuperConverter;
104973
- var init_SuperConverter_BecdrRIX_es = __esm(() => {
105089
+ var init_SuperConverter_BInxZk0I_es = __esm(() => {
104974
105090
  init_rolldown_runtime_Bg48TavK_es();
104975
105091
  init_jszip_C49i9kUs_es();
104976
105092
  init_xml_js_CqGKpaft_es();
@@ -133114,6 +133230,7 @@ var init_SuperConverter_BecdrRIX_es = __esm(() => {
133114
133230
  "w:moveTo"
133115
133231
  ]);
133116
133232
  TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES = new Set(["w:del", "w:ins"]);
133233
+ CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES = new Set(["w:ins", "w:moveTo"]);
133117
133234
  SKIP_FIELD_PROCESSING_NODE_NAMES$1 = new Set(["w:drawing", "w:pict"]);
133118
133235
  FIELD_CONTROL_ELEMENT_NAMES = new Set(["w:fldChar"]);
133119
133236
  INSTRUCTION_ELEMENT_NAMES = new Set(["w:instrText", "w:tab"]);
@@ -142838,7 +142955,7 @@ var init_SuperConverter_BecdrRIX_es = __esm(() => {
142838
142955
  };
142839
142956
  });
142840
142957
 
142841
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-DCeIAH_W.es.js
142958
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-rUh3xIsa.es.js
142842
142959
  function parseSizeUnit(val = "0") {
142843
142960
  const length = val.toString() || "0";
142844
142961
  const value = Number.parseFloat(length);
@@ -145505,8 +145622,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, Extension = class Extension2 {
145505
145622
  }
145506
145623
  };
145507
145624
  };
145508
- var init_create_headless_toolbar_DCeIAH_W_es = __esm(() => {
145509
- init_SuperConverter_BecdrRIX_es();
145625
+ var init_create_headless_toolbar_rUh3xIsa_es = __esm(() => {
145626
+ init_SuperConverter_BInxZk0I_es();
145510
145627
  init_constants_DrU4EASo_es();
145511
145628
  init_dist_B8HfvhaK_es();
145512
145629
  CSS_DIMENSION_REGEX = /[\d-.]+(\w+)$/;
@@ -199725,7 +199842,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
199725
199842
  init_remark_gfm_BhnWr3yf_es();
199726
199843
  });
199727
199844
 
199728
- // ../../packages/superdoc/dist/chunks/src-BLxaw1d3.es.js
199845
+ // ../../packages/superdoc/dist/chunks/src-CMq87UyB.es.js
199729
199846
  function deleteProps(obj, propOrProps) {
199730
199847
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
199731
199848
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -200488,7 +200605,7 @@ function prosemirrorToYXmlFragment(doc$12, xmlFragment) {
200488
200605
  }
200489
200606
  function getSuperdocVersion() {
200490
200607
  try {
200491
- return "1.31.0";
200608
+ return "1.32.0";
200492
200609
  } catch {
200493
200610
  return "unknown";
200494
200611
  }
@@ -201597,13 +201714,37 @@ function createStructuredContentLockPlugin() {
201597
201714
  const sdtNodes = STRUCTURED_CONTENT_LOCK_KEY.getState(state);
201598
201715
  if (sdtNodes.length === 0)
201599
201716
  return false;
201717
+ if (from$1 !== to && !(selection instanceof NodeSelection)) {
201718
+ const exactContentSDT = sdtNodes.find((s2) => from$1 === s2.pos + 1 && to === s2.end - 1);
201719
+ if (exactContentSDT) {
201720
+ if (!(exactContentSDT.lockMode === "sdtLocked" || exactContentSDT.lockMode === "sdtContentLocked")) {
201721
+ const tr = state.tr.setSelection(NodeSelection.create(state.doc, exactContentSDT.pos));
201722
+ view.dispatch(tr);
201723
+ if (isCut)
201724
+ return false;
201725
+ event.preventDefault();
201726
+ return true;
201727
+ }
201728
+ }
201729
+ }
201600
201730
  let affectedFrom = from$1;
201601
201731
  let affectedTo = to;
201602
201732
  if (from$1 === to) {
201603
- if (isBackspace && from$1 > 0)
201733
+ if (isBackspace && from$1 > 0) {
201604
201734
  affectedFrom = from$1 - 1;
201605
- else if (isDelete && to < state.doc.content.size)
201735
+ const adjacentSDT = sdtNodes.find((s2) => s2.end === from$1);
201736
+ if (adjacentSDT) {
201737
+ affectedFrom = adjacentSDT.pos;
201738
+ affectedTo = adjacentSDT.end;
201739
+ }
201740
+ } else if (isDelete && to < state.doc.content.size) {
201606
201741
  affectedTo = to + 1;
201742
+ const adjacentSDT = sdtNodes.find((s2) => s2.pos === to);
201743
+ if (adjacentSDT) {
201744
+ affectedFrom = adjacentSDT.pos;
201745
+ affectedTo = adjacentSDT.end;
201746
+ }
201747
+ }
201607
201748
  }
201608
201749
  if (checkLockViolation(sdtNodes, affectedFrom, affectedTo).blocked) {
201609
201750
  event.preventDefault();
@@ -202525,8 +202666,8 @@ function findNearestParagraphWithSectPr(doc$12, pos) {
202525
202666
  });
202526
202667
  return target;
202527
202668
  }
202528
- function calculateNewIndentation(node2, delta) {
202529
- let { indent: indent2 } = getResolvedParagraphProperties(node2);
202669
+ function calculateNewIndentation(node2, delta, resolvedProps) {
202670
+ let { indent: indent2 } = resolvedProps ?? {};
202530
202671
  let { left: left$1 } = indent2 || {};
202531
202672
  const increment2 = ptToTwips(delta * defaultIncrementPoints);
202532
202673
  if (!left$1)
@@ -202537,14 +202678,14 @@ function calculateNewIndentation(node2, delta) {
202537
202678
  left$1 = null;
202538
202679
  return left$1;
202539
202680
  }
202540
- function modifyIndentation(calcFunc) {
202541
- return ({ state, dispatch }) => {
202681
+ function modifyIndentation(calcFunc, { resolveProps = false } = {}) {
202682
+ return ({ editor, state, dispatch }) => {
202542
202683
  const tr = state.tr;
202543
202684
  const { from: from$1, to } = state.selection;
202544
202685
  const results = [];
202545
202686
  state.doc.nodesBetween(from$1, to, (node2, pos) => {
202546
202687
  if (node2.type.name === "paragraph") {
202547
- let left$1 = calcFunc(node2);
202688
+ let left$1 = calcFunc(node2, resolveProps ? getResolvedParagraphProperties(node2) || calculateResolvedParagraphProperties(editor ?? {}, node2, state.doc.resolve(pos)) : undefined);
202548
202689
  if (Number.isNaN(left$1)) {
202549
202690
  results.push(false);
202550
202691
  return false;
@@ -206008,6 +206149,301 @@ function extractFieldType$1(instruction) {
206008
206149
  const firstSpace = trimmed.indexOf(" ");
206009
206150
  return firstSpace > 0 ? trimmed.slice(0, firstSpace).toUpperCase() : trimmed.toUpperCase();
206010
206151
  }
206152
+ function parseLevelRange(value) {
206153
+ const match$1 = value.match(/^(\d+)-(\d+)$/);
206154
+ if (!match$1)
206155
+ return;
206156
+ return {
206157
+ from: parseInt(match$1[1], 10),
206158
+ to: parseInt(match$1[2], 10)
206159
+ };
206160
+ }
206161
+ function parseCustomStyles(value) {
206162
+ const entries = [];
206163
+ const parts = value.split(",");
206164
+ for (let i4 = 0;i4 < parts.length - 1; i4 += 2) {
206165
+ const styleName = parts[i4].trim();
206166
+ const level = parseInt(parts[i4 + 1].trim(), 10);
206167
+ if (styleName && !isNaN(level))
206168
+ entries.push({
206169
+ styleName,
206170
+ level
206171
+ });
206172
+ }
206173
+ return entries;
206174
+ }
206175
+ function deriveIncludePageNumbers(omitRange, outlineLevels) {
206176
+ if (!omitRange)
206177
+ return true;
206178
+ const effectiveRange = outlineLevels ?? {
206179
+ from: 1,
206180
+ to: 9
206181
+ };
206182
+ return !(omitRange.from <= effectiveRange.from && omitRange.to >= effectiveRange.to);
206183
+ }
206184
+ function deriveTabLeader(separator) {
206185
+ if (separator === undefined)
206186
+ return;
206187
+ if (separator === "")
206188
+ return "none";
206189
+ return SEPARATOR_TO_TAB_LEADER[separator];
206190
+ }
206191
+ function parseTocInstruction(instruction) {
206192
+ const source = {};
206193
+ const display = {};
206194
+ const preserved = {};
206195
+ const rawExtensions = [];
206196
+ let match$1;
206197
+ SWITCH_PATTERN$1.lastIndex = 0;
206198
+ while ((match$1 = SWITCH_PATTERN$1.exec(instruction)) !== null) {
206199
+ const switchChar = match$1[1].toLowerCase();
206200
+ const rawArg = match$1[2];
206201
+ const arg = rawArg ?? "";
206202
+ switch (switchChar) {
206203
+ case "o": {
206204
+ const range = parseLevelRange(arg);
206205
+ if (range)
206206
+ source.outlineLevels = range;
206207
+ break;
206208
+ }
206209
+ case "u":
206210
+ source.useAppliedOutlineLevel = true;
206211
+ break;
206212
+ case "f":
206213
+ if (arg)
206214
+ source.tcFieldIdentifier = arg;
206215
+ break;
206216
+ case "l": {
206217
+ const range = parseLevelRange(arg);
206218
+ if (range)
206219
+ source.tcFieldLevels = range;
206220
+ break;
206221
+ }
206222
+ case "h":
206223
+ display.hyperlinks = true;
206224
+ break;
206225
+ case "z":
206226
+ display.hideInWebView = true;
206227
+ break;
206228
+ case "n": {
206229
+ const range = parseLevelRange(arg);
206230
+ if (range)
206231
+ display.omitPageNumberLevels = range;
206232
+ break;
206233
+ }
206234
+ case "p":
206235
+ if (rawArg !== undefined)
206236
+ display.separator = rawArg;
206237
+ break;
206238
+ case "t":
206239
+ if (arg)
206240
+ preserved.customStyles = parseCustomStyles(arg);
206241
+ break;
206242
+ case "b":
206243
+ if (arg)
206244
+ preserved.bookmarkName = arg;
206245
+ break;
206246
+ case "a":
206247
+ if (arg)
206248
+ preserved.captionType = arg;
206249
+ break;
206250
+ case "c":
206251
+ if (arg)
206252
+ preserved.seqFieldIdentifier = arg;
206253
+ break;
206254
+ case "d":
206255
+ if (arg)
206256
+ preserved.chapterSeparator = arg;
206257
+ break;
206258
+ case "s":
206259
+ if (arg)
206260
+ preserved.chapterNumberSource = arg;
206261
+ break;
206262
+ case "w":
206263
+ preserved.preserveTabEntries = true;
206264
+ break;
206265
+ default:
206266
+ rawExtensions.push(arg ? `\\${switchChar} "${arg}"` : `\\${switchChar}`);
206267
+ break;
206268
+ }
206269
+ }
206270
+ if (rawExtensions.length > 0)
206271
+ preserved.rawExtensions = rawExtensions;
206272
+ display.includePageNumbers = deriveIncludePageNumbers(display.omitPageNumberLevels, source.outlineLevels);
206273
+ const tabLeader = deriveTabLeader(display.separator);
206274
+ if (tabLeader !== undefined)
206275
+ display.tabLeader = tabLeader;
206276
+ return {
206277
+ source,
206278
+ display,
206279
+ preserved
206280
+ };
206281
+ }
206282
+ function serializeTocInstruction(config3) {
206283
+ const parts = ["TOC"];
206284
+ const { source, display, preserved } = config3;
206285
+ if (source.outlineLevels)
206286
+ parts.push(`\\o "${source.outlineLevels.from}-${source.outlineLevels.to}"`);
206287
+ if (source.useAppliedOutlineLevel)
206288
+ parts.push("\\u");
206289
+ if (source.tcFieldIdentifier)
206290
+ parts.push(`\\f "${source.tcFieldIdentifier}"`);
206291
+ if (source.tcFieldLevels)
206292
+ parts.push(`\\l "${source.tcFieldLevels.from}-${source.tcFieldLevels.to}"`);
206293
+ if (preserved.customStyles?.length) {
206294
+ const pairs = preserved.customStyles.map((s2) => `${s2.styleName},${s2.level}`).join(",");
206295
+ parts.push(`\\t "${pairs}"`);
206296
+ }
206297
+ if (display.hyperlinks)
206298
+ parts.push("\\h");
206299
+ if (display.hideInWebView)
206300
+ parts.push("\\z");
206301
+ if (display.omitPageNumberLevels)
206302
+ parts.push(`\\n "${display.omitPageNumberLevels.from}-${display.omitPageNumberLevels.to}"`);
206303
+ if (display.separator !== undefined)
206304
+ parts.push(`\\p "${display.separator}"`);
206305
+ if (preserved.captionType)
206306
+ parts.push(`\\a "${preserved.captionType}"`);
206307
+ if (preserved.bookmarkName)
206308
+ parts.push(`\\b "${preserved.bookmarkName}"`);
206309
+ if (preserved.seqFieldIdentifier)
206310
+ parts.push(`\\c "${preserved.seqFieldIdentifier}"`);
206311
+ if (preserved.chapterSeparator)
206312
+ parts.push(`\\d "${preserved.chapterSeparator}"`);
206313
+ if (preserved.chapterNumberSource)
206314
+ parts.push(`\\s "${preserved.chapterNumberSource}"`);
206315
+ if (preserved.preserveTabEntries)
206316
+ parts.push("\\w");
206317
+ if (preserved.rawExtensions?.length)
206318
+ parts.push(...preserved.rawExtensions);
206319
+ return parts.join(" ");
206320
+ }
206321
+ function computeOmitPageNumberRange(source) {
206322
+ return source.outlineLevels ?? {
206323
+ from: 1,
206324
+ to: 9
206325
+ };
206326
+ }
206327
+ function applyTocPatch(existing, patch3) {
206328
+ if (patch3.tabLeader !== undefined && patch3.separator !== undefined)
206329
+ throw new Error("INVALID_INPUT: cannot set both tabLeader and separator in the same patch");
206330
+ if (patch3.includePageNumbers !== undefined && patch3.omitPageNumberLevels !== undefined)
206331
+ throw new Error("INVALID_INPUT: cannot set both includePageNumbers and omitPageNumberLevels in the same patch");
206332
+ const newSource = {
206333
+ ...existing.source,
206334
+ ...patch3.outlineLevels !== undefined && { outlineLevels: patch3.outlineLevels },
206335
+ ...patch3.useAppliedOutlineLevel !== undefined && { useAppliedOutlineLevel: patch3.useAppliedOutlineLevel },
206336
+ ...patch3.tcFieldIdentifier !== undefined && { tcFieldIdentifier: patch3.tcFieldIdentifier },
206337
+ ...patch3.tcFieldLevels !== undefined && { tcFieldLevels: patch3.tcFieldLevels }
206338
+ };
206339
+ const newDisplay = {
206340
+ ...existing.display,
206341
+ ...patch3.hyperlinks !== undefined && { hyperlinks: patch3.hyperlinks },
206342
+ ...patch3.hideInWebView !== undefined && { hideInWebView: patch3.hideInWebView }
206343
+ };
206344
+ if (patch3.includePageNumbers !== undefined) {
206345
+ if (patch3.includePageNumbers)
206346
+ delete newDisplay.omitPageNumberLevels;
206347
+ else
206348
+ newDisplay.omitPageNumberLevels = computeOmitPageNumberRange(newSource);
206349
+ newDisplay.includePageNumbers = patch3.includePageNumbers;
206350
+ } else if (patch3.omitPageNumberLevels !== undefined) {
206351
+ newDisplay.omitPageNumberLevels = patch3.omitPageNumberLevels;
206352
+ newDisplay.includePageNumbers = deriveIncludePageNumbers(patch3.omitPageNumberLevels, newSource.outlineLevels);
206353
+ }
206354
+ if (patch3.tabLeader !== undefined) {
206355
+ if (patch3.tabLeader === "none")
206356
+ newDisplay.separator = "";
206357
+ else
206358
+ newDisplay.separator = TAB_LEADER_TO_SEPARATOR[patch3.tabLeader];
206359
+ newDisplay.tabLeader = patch3.tabLeader;
206360
+ } else if (patch3.separator !== undefined) {
206361
+ newDisplay.separator = patch3.separator;
206362
+ const derived = deriveTabLeader(patch3.separator);
206363
+ if (derived !== undefined)
206364
+ newDisplay.tabLeader = derived;
206365
+ else
206366
+ delete newDisplay.tabLeader;
206367
+ }
206368
+ return {
206369
+ source: newSource,
206370
+ display: newDisplay,
206371
+ preserved: { ...existing.preserved }
206372
+ };
206373
+ }
206374
+ function areTocConfigsEqual(a2, b$1) {
206375
+ return serializeTocInstruction(a2) === serializeTocInstruction(b$1);
206376
+ }
206377
+ function findAllTocNodes(doc$12) {
206378
+ const results = [];
206379
+ doc$12.descendants((node2, pos) => {
206380
+ if (node2.type.name === "tableOfContents") {
206381
+ const sdBlockId = node2.attrs?.sdBlockId;
206382
+ const nodeId = resolvePublicTocNodeId(node2, pos);
206383
+ const commandNodeId = sdBlockId;
206384
+ results.push({
206385
+ node: node2,
206386
+ pos,
206387
+ nodeId,
206388
+ commandNodeId
206389
+ });
206390
+ return false;
206391
+ }
206392
+ return true;
206393
+ });
206394
+ return results;
206395
+ }
206396
+ function resolveTocTarget(doc$12, target) {
206397
+ const found2 = findAllTocNodes(doc$12).find((t) => t.nodeId === target.nodeId || t.commandNodeId === target.nodeId);
206398
+ if (!found2)
206399
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Table of contents with nodeId "${target.nodeId}" not found.`);
206400
+ return found2;
206401
+ }
206402
+ function resolvePostMutationTocId(doc$12, sdBlockId) {
206403
+ return findAllTocNodes(doc$12).find((t) => t.commandNodeId === sdBlockId)?.nodeId ?? sdBlockId;
206404
+ }
206405
+ function extractTocInfo(node2) {
206406
+ const instruction = node2.attrs?.instruction ?? "";
206407
+ const config3 = parseTocInstruction(instruction);
206408
+ const rightAlign = node2.attrs?.rightAlignPageNumbers;
206409
+ return {
206410
+ nodeType: "tableOfContents",
206411
+ kind: "block",
206412
+ properties: {
206413
+ instruction,
206414
+ sourceConfig: config3.source,
206415
+ displayConfig: {
206416
+ ...config3.display,
206417
+ ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
206418
+ },
206419
+ preservedSwitches: config3.preserved,
206420
+ entryCount: node2.childCount
206421
+ }
206422
+ };
206423
+ }
206424
+ function buildTocDiscoveryItem(resolved, evaluatedRevision) {
206425
+ const instruction = resolved.node.attrs?.instruction ?? "";
206426
+ const config3 = parseTocInstruction(instruction);
206427
+ const address = {
206428
+ kind: "block",
206429
+ nodeType: "tableOfContents",
206430
+ nodeId: resolved.nodeId
206431
+ };
206432
+ const handle3 = buildResolvedHandle(resolved.nodeId, "stable", "tableOfContents");
206433
+ const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
206434
+ const domain3 = {
206435
+ address,
206436
+ instruction,
206437
+ sourceConfig: config3.source,
206438
+ displayConfig: {
206439
+ ...config3.display,
206440
+ ...rightAlign !== undefined && { rightAlignPageNumbers: rightAlign }
206441
+ },
206442
+ preserved: config3.preserved,
206443
+ entryCount: resolved.node.childCount
206444
+ };
206445
+ return buildDiscoveryItem(`toc:${resolved.nodeId}:${evaluatedRevision}`, handle3, domain3);
206446
+ }
206011
206447
  function createCascadeToggleCommands({ markName, setCommand, unsetCommand, toggleCommand, negationAttrs, isNegation, extendEmptyMarkRange } = {}) {
206012
206448
  if (!markName)
206013
206449
  throw new Error("createCascadeToggleCommands requires a markName");
@@ -212595,6 +213031,40 @@ function buildSchemaSummary(schema, schemaVersion) {
212595
213031
  function getFirstElementChild(node2) {
212596
213032
  return Array.from(node2.childNodes).find((n) => n.nodeType === Node.ELEMENT_NODE) || null;
212597
213033
  }
213034
+ function wrapHeadingSelectionAsParagraph(slice2, state) {
213035
+ const firstChild = slice2.content.firstChild;
213036
+ if (!firstChild || firstChild.type.name === "paragraph")
213037
+ return slice2;
213038
+ const $from = state.selection.$from;
213039
+ const $to = state.selection.$to;
213040
+ if (!$from || !$to)
213041
+ return slice2;
213042
+ let parentParagraph = null;
213043
+ let parentDepth = -1;
213044
+ for (let depth = $from.depth;depth >= 0; depth--) {
213045
+ const node2 = $from.node(depth);
213046
+ if (node2?.type?.name === "paragraph") {
213047
+ if ($to.depth >= depth && $to.node(depth) === node2) {
213048
+ parentParagraph = node2;
213049
+ parentDepth = depth;
213050
+ }
213051
+ break;
213052
+ }
213053
+ }
213054
+ if (!parentParagraph)
213055
+ return slice2;
213056
+ const startOffset = $from.parentOffset;
213057
+ const endOffset = $to.parentOffset;
213058
+ if (startOffset !== 0 || endOffset !== parentParagraph.content.size)
213059
+ return slice2;
213060
+ if ($from.depth !== parentDepth || $to.depth !== parentDepth)
213061
+ return slice2;
213062
+ const styleId = parentParagraph.attrs?.paragraphProperties?.styleId;
213063
+ if (typeof styleId !== "string" || !HEADING_STYLE_RE.test(styleId))
213064
+ return slice2;
213065
+ const wrapped = parentParagraph.type.create(parentParagraph.attrs, slice2.content, parentParagraph.marks);
213066
+ return new Slice(Fragment.from(wrapped), 0, 0);
213067
+ }
212598
213068
  function closestCopyBlock(node2, root3) {
212599
213069
  let current = node2;
212600
213070
  while (current && current !== root3) {
@@ -212817,228 +213287,6 @@ function buildSelectionClipboardHtml(view, editor) {
212817
213287
  annotateCopiedSectionMetadata(container, view);
212818
213288
  return serializeSelectionAsWordHtml(container) || container.innerHTML || null;
212819
213289
  }
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
213290
  function projectContentNode(pmNode) {
213043
213291
  return projectBlock(pmNode);
213044
213292
  }
@@ -214861,11 +215109,11 @@ function checkUniformity(runs2) {
214861
215109
  return true;
214862
215110
  const reference$1 = runs2[0].marks;
214863
215111
  for (let i4 = 1;i4 < runs2.length; i4++)
214864
- if (!marksEqual$1(reference$1, runs2[i4].marks))
215112
+ if (!marksEqual$2(reference$1, runs2[i4].marks))
214865
215113
  return false;
214866
215114
  return true;
214867
215115
  }
214868
- function marksEqual$1(a2, b$1) {
215116
+ function marksEqual$2(a2, b$1) {
214869
215117
  if (a2.length !== b$1.length)
214870
215118
  return false;
214871
215119
  for (let i4 = 0;i4 < a2.length; i4++)
@@ -215141,7 +215389,7 @@ function buildInlineRpr(marks) {
215141
215389
  }
215142
215390
  return rpr;
215143
215391
  }
215144
- function marksEqual(a2, b$1) {
215392
+ function marksEqual$1(a2, b$1) {
215145
215393
  if (a2.length !== b$1.length)
215146
215394
  return false;
215147
215395
  for (let i4 = 0;i4 < a2.length; i4++)
@@ -215164,7 +215412,7 @@ function coalesceRuns(runs2) {
215164
215412
  const next2 = sorted[i4];
215165
215413
  if (next2.from >= next2.to)
215166
215414
  continue;
215167
- if (next2.from === current.to && marksEqual(current.marks, next2.marks))
215415
+ if (next2.from === current.to && marksEqual$1(current.marks, next2.marks))
215168
215416
  current = {
215169
215417
  from: current.from,
215170
215418
  to: next2.to,
@@ -232289,76 +232537,6 @@ function wrapServiceCall(fn2) {
232289
232537
  throw error48;
232290
232538
  }
232291
232539
  }
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
232540
  function extractEntryText(instruction) {
232363
232541
  const withoutPrefix = instruction.replace(/^TC\s+/i, "");
232364
232542
  const quoteMatch = withoutPrefix.match(/^"([^"]*)"/);
@@ -232567,28 +232745,53 @@ function dispatchTransaction$2(editor, tr) {
232567
232745
  else if (typeof editor.view?.dispatch === "function")
232568
232746
  editor.view.dispatch(tr);
232569
232747
  }
232748
+ function sanitizeSourceMark(mark2) {
232749
+ if (!mark2?.type)
232750
+ return null;
232751
+ if (mark2.type === "textStyle") {
232752
+ const attrs = mark2.attrs ?? {};
232753
+ const kept = {};
232754
+ for (const key2 of Object.keys(attrs))
232755
+ if (TEXT_STYLE_ALLOWED_ATTRS.has(key2) && attrs[key2] != null)
232756
+ kept[key2] = attrs[key2];
232757
+ return Object.keys(kept).length > 0 ? {
232758
+ type: "textStyle",
232759
+ attrs: kept
232760
+ } : null;
232761
+ }
232762
+ if (!ALLOWED_SOURCE_MARK_TYPES.has(mark2.type))
232763
+ return null;
232764
+ return mark2.attrs && Object.keys(mark2.attrs).length > 0 ? {
232765
+ type: mark2.type,
232766
+ attrs: { ...mark2.attrs }
232767
+ } : { type: mark2.type };
232768
+ }
232570
232769
  function collectTocSources(doc$12, config3) {
232571
232770
  const sources = [];
232572
232771
  const { outlineLevels, useAppliedOutlineLevel, tcFieldIdentifier, tcFieldLevels } = config3.source;
232573
232772
  const useApplied = useAppliedOutlineLevel ?? false;
232574
232773
  const collectTcFields = tcFieldIdentifier !== undefined || tcFieldLevels !== undefined;
232575
232774
  let currentParagraphSdBlockId;
232576
- doc$12.descendants((node2, _pos) => {
232775
+ doc$12.descendants((node2, pos) => {
232577
232776
  if (node2.type.name === "tableOfContents")
232578
232777
  return false;
232579
232778
  if (node2.type.name === "paragraph") {
232580
232779
  const attrs = node2.attrs;
232581
232780
  const paragraphProps = attrs?.paragraphProperties;
232582
232781
  const styleId = paragraphProps?.styleId;
232583
- const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId;
232782
+ const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId ?? buildFallbackBlockNodeId("paragraph", pos);
232584
232783
  currentParagraphSdBlockId = sdBlockId;
232585
232784
  if (!sdBlockId)
232586
232785
  return true;
232786
+ const text5 = flattenText(node2);
232787
+ if (text5.trim().length === 0)
232788
+ return true;
232587
232789
  if (outlineLevels) {
232588
232790
  const headingLevel = getHeadingLevel(styleId);
232589
232791
  if (headingLevel != null && headingLevel >= outlineLevels.from && headingLevel <= outlineLevels.to) {
232590
232792
  sources.push({
232591
- text: flattenText(node2),
232793
+ text: text5,
232794
+ segments: extractTextSegments(node2),
232592
232795
  level: headingLevel,
232593
232796
  sdBlockId,
232594
232797
  kind: "heading"
@@ -232606,7 +232809,8 @@ function collectTocSources(doc$12, config3) {
232606
232809
  const tocLevel = rawOutlineLevel + 1;
232607
232810
  if (tocLevel >= effectiveLevels.from && tocLevel <= effectiveLevels.to) {
232608
232811
  sources.push({
232609
- text: flattenText(node2),
232812
+ text: text5,
232813
+ segments: extractTextSegments(node2),
232610
232814
  level: tocLevel,
232611
232815
  sdBlockId,
232612
232816
  kind: "appliedOutline"
@@ -232647,50 +232851,91 @@ function flattenText(node2) {
232647
232851
  });
232648
232852
  return text5;
232649
232853
  }
232650
- function buildTocEntryParagraphs(sources, config3) {
232651
- return sources.map((source) => buildEntryParagraph(source, config3));
232854
+ function extractTextSegments(node2) {
232855
+ const segments = [];
232856
+ node2.descendants((child) => {
232857
+ if (!child.isText || !child.text)
232858
+ return true;
232859
+ const marks = [];
232860
+ for (const mark2 of child.marks ?? []) {
232861
+ const raw = { type: mark2.type?.name ?? "" };
232862
+ if (mark2.attrs && Object.keys(mark2.attrs).length > 0)
232863
+ raw.attrs = { ...mark2.attrs };
232864
+ const sanitized = sanitizeSourceMark(raw);
232865
+ if (sanitized)
232866
+ marks.push(sanitized);
232867
+ }
232868
+ const last2 = segments[segments.length - 1];
232869
+ if (last2 && marksEqual(last2.marks, marks))
232870
+ last2.text += child.text;
232871
+ else
232872
+ segments.push(marks.length > 0 ? {
232873
+ text: child.text,
232874
+ marks
232875
+ } : { text: child.text });
232876
+ return true;
232877
+ });
232878
+ return segments;
232652
232879
  }
232653
- function buildEntryParagraph(source, config3) {
232654
- const { display } = config3;
232655
- const content3 = [];
232656
- const textNode = {
232657
- type: "text",
232658
- text: source.text || " "
232880
+ function marksEqual(a2, b$1) {
232881
+ const aLen = a2?.length ?? 0;
232882
+ if (aLen !== (b$1?.length ?? 0))
232883
+ return false;
232884
+ if (aLen === 0)
232885
+ return true;
232886
+ return JSON.stringify(a2) === JSON.stringify(b$1);
232887
+ }
232888
+ function buildTocEntryParagraphs(sources, config3, options = {}) {
232889
+ return sources.map((source) => buildEntryParagraph(source, config3, options));
232890
+ }
232891
+ function asRun(children) {
232892
+ return {
232893
+ type: "run",
232894
+ content: children
232659
232895
  };
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);
232896
+ }
232897
+ function buildEntryParagraph(source, config3, options = {}) {
232898
+ const { display } = config3;
232899
+ const linkMark = display.hyperlinks ? {
232900
+ type: "link",
232901
+ attrs: {
232902
+ anchor: generateTocBookmarkName(source.sdBlockId),
232903
+ rId: null,
232904
+ history: true
232905
+ }
232906
+ } : undefined;
232907
+ const content3 = [asRun((source.segments && source.segments.length > 0 ? source.segments : [{ text: source.text || " " }]).map((segment) => {
232908
+ const marks = [...(segment.marks ?? []).map((m$1) => sanitizeSourceMark(m$1)).filter((m$1) => m$1 !== null)];
232909
+ if (linkMark)
232910
+ marks.push(linkMark);
232911
+ const node2 = {
232912
+ type: "text",
232913
+ text: segment.text || " "
232914
+ };
232915
+ if (marks.length > 0)
232916
+ node2.marks = marks;
232917
+ return node2;
232918
+ }))];
232670
232919
  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;
232920
+ const omitPageNumber = Boolean(omitRange && source.level >= omitRange.from && source.level <= omitRange.to || source.omitPageNumber);
232674
232921
  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({
232922
+ content3.push(asRun([display.separator ? {
232923
+ type: "text",
232924
+ text: display.separator
232925
+ } : { type: "tab" }]));
232926
+ const resolvedPage = options.pageMap?.get(source.sdBlockId);
232927
+ content3.push(asRun([{
232683
232928
  type: "text",
232684
- text: "0",
232929
+ text: resolvedPage != null ? String(resolvedPage) : "0",
232685
232930
  marks: [{ type: "tocPageNumber" }]
232686
- });
232931
+ }]));
232687
232932
  }
232688
232933
  const paragraphProperties = { styleId: `TOC${source.level}` };
232689
232934
  if (display.rightAlignPageNumbers !== false && !omitPageNumber) {
232690
- const leader = display.tabLeader && display.tabLeader !== "none" ? TAB_LEADER_MAP[display.tabLeader] ?? undefined : undefined;
232935
+ const leader = display.tabLeader === "none" ? undefined : display.tabLeader && TAB_LEADER_MAP[display.tabLeader] || "dot";
232691
232936
  paragraphProperties.tabStops = [{ tab: {
232692
232937
  tabType: "right",
232693
- pos: DEFAULT_RIGHT_TAB_POS,
232938
+ pos: options.tabPos ?? DEFAULT_RIGHT_TAB_POS,
232694
232939
  ...leader ? { leader } : {}
232695
232940
  } }];
232696
232941
  }
@@ -232825,6 +233070,50 @@ function withRightAlign(config3, rightAlignPageNumbers) {
232825
233070
  }
232826
233071
  };
232827
233072
  }
233073
+ function stripTocPageNumberFromNode(node2) {
233074
+ if (!node2 || typeof node2 !== "object")
233075
+ return {
233076
+ node: node2,
233077
+ changed: false
233078
+ };
233079
+ const typedNode = node2;
233080
+ let changed = false;
233081
+ let next2 = typedNode;
233082
+ if (Array.isArray(typedNode.marks)) {
233083
+ const filtered = typedNode.marks.filter((mark2) => mark2?.type !== "tocPageNumber");
233084
+ if (filtered.length !== typedNode.marks.length) {
233085
+ changed = true;
233086
+ if (filtered.length === 0) {
233087
+ const { marks: _removed, ...rest } = next2;
233088
+ next2 = rest;
233089
+ } else
233090
+ next2 = {
233091
+ ...next2,
233092
+ marks: filtered
233093
+ };
233094
+ }
233095
+ }
233096
+ if (Array.isArray(typedNode.content)) {
233097
+ let childChanged = false;
233098
+ const nextChildren = typedNode.content.map((child) => {
233099
+ const result = stripTocPageNumberFromNode(child);
233100
+ if (result.changed)
233101
+ childChanged = true;
233102
+ return result.node;
233103
+ });
233104
+ if (childChanged) {
233105
+ changed = true;
233106
+ next2 = {
233107
+ ...next2,
233108
+ content: nextChildren
233109
+ };
233110
+ }
233111
+ }
233112
+ return {
233113
+ node: next2,
233114
+ changed
233115
+ };
233116
+ }
232828
233117
  function sanitizeTocContentForSchema(content3, editor) {
232829
233118
  if (editor.state.schema?.marks?.tocPageNumber)
232830
233119
  return content3;
@@ -232834,24 +233123,10 @@ function sanitizeTocContentForSchema(content3, editor) {
232834
233123
  return paragraph2;
232835
233124
  let changed = false;
232836
233125
  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
- };
233126
+ const result = stripTocPageNumberFromNode(node2);
233127
+ if (result.changed)
233128
+ changed = true;
233129
+ return result.node;
232855
233130
  });
232856
233131
  return changed ? {
232857
233132
  ...paragraph2,
@@ -232859,14 +233134,50 @@ function sanitizeTocContentForSchema(content3, editor) {
232859
233134
  } : paragraph2;
232860
233135
  });
232861
233136
  }
232862
- function materializeTocContent(doc$12, config3, editor) {
233137
+ function materializeTocContent(doc$12, config3, editor, options = {}) {
232863
233138
  const sources = collectTocSources(doc$12, config3);
232864
- const entryParagraphs = buildTocEntryParagraphs(sources, config3);
233139
+ const entryParagraphs = buildTocEntryParagraphs(sources, config3, options);
232865
233140
  return {
232866
233141
  content: sanitizeTocContentForSchema(entryParagraphs.length > 0 ? entryParagraphs : NO_ENTRIES_PLACEHOLDER, editor),
232867
233142
  sources
232868
233143
  };
232869
233144
  }
233145
+ function findFirstTocEntryParagraph(node2) {
233146
+ let entry;
233147
+ node2.forEach((paragraph2) => {
233148
+ if (entry || paragraph2.type.name !== "paragraph")
233149
+ return;
233150
+ const styleId = paragraph2.attrs?.paragraphProperties?.styleId;
233151
+ if (styleId && TOC_ENTRY_STYLE_RE.test(styleId))
233152
+ entry = paragraph2;
233153
+ });
233154
+ return entry;
233155
+ }
233156
+ function readExistingTocTabPos(node2) {
233157
+ const pos = (findFirstTocEntryParagraph(node2) ?? node2.firstChild ?? undefined)?.attrs?.paragraphProperties?.tabStops?.find((t) => t?.tab?.tabType === "right")?.tab?.pos;
233158
+ return typeof pos === "number" ? pos : undefined;
233159
+ }
233160
+ function readExistingTocTrailingParagraph(node2) {
233161
+ const last2 = node2.lastChild;
233162
+ if (!last2 || last2.type.name !== "paragraph")
233163
+ return;
233164
+ const styleId = last2.attrs?.paragraphProperties?.styleId;
233165
+ if (styleId && TOC_ENTRY_STYLE_RE.test(styleId))
233166
+ return;
233167
+ let hasPrecedingEntry = false;
233168
+ node2.forEach((child) => {
233169
+ if (hasPrecedingEntry || child === last2)
233170
+ return;
233171
+ if (child.type.name !== "paragraph")
233172
+ return;
233173
+ const childStyleId = child.attrs?.paragraphProperties?.styleId;
233174
+ if (childStyleId && TOC_ENTRY_STYLE_RE.test(childStyleId))
233175
+ hasPrecedingEntry = true;
233176
+ });
233177
+ if (!hasPrecedingEntry)
233178
+ return;
233179
+ return typeof last2.toJSON === "function" ? last2.toJSON() : undefined;
233180
+ }
232870
233181
  function tocConfigureWrapper(editor, input2, options) {
232871
233182
  rejectTrackedMode("toc.configure", options);
232872
233183
  const resolved = resolveTocTarget(editor.state.doc, input2.target);
@@ -232875,7 +233186,12 @@ function tocConfigureWrapper(editor, input2, options) {
232875
233186
  const instruction = serializeTocInstruction(patched);
232876
233187
  const rightAlignChanged = input2.patch.rightAlignPageNumbers !== undefined && input2.patch.rightAlignPageNumbers !== resolved.node.attrs?.rightAlignPageNumbers;
232877
233188
  const effectiveRightAlign = input2.patch.rightAlignPageNumbers ?? resolved.node.attrs?.rightAlignPageNumbers;
232878
- const { content: nextContent, sources } = materializeTocContent(editor.state.doc, withRightAlign(patched, effectiveRightAlign), editor);
233189
+ const { content: rebuiltEntries, sources } = materializeTocContent(editor.state.doc, withRightAlign(patched, effectiveRightAlign), editor, {
233190
+ pageMap: getPageMap(editor) ?? undefined,
233191
+ tabPos: readExistingTocTabPos(resolved.node)
233192
+ });
233193
+ const trailing = readExistingTocTrailingParagraph(resolved.node);
233194
+ const nextContent = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
232879
233195
  if (areTocConfigsEqual(currentConfig, patched) && !rightAlignChanged)
232880
233196
  return tocFailure("NO_OP", "Configuration patch produced no change.");
232881
233197
  if (options?.dryRun)
@@ -232921,7 +233237,12 @@ function tocUpdateAll(editor, input2, options) {
232921
233237
  const resolved = resolveTocTarget(editor.state.doc, input2.target);
232922
233238
  const config3 = parseTocInstruction(resolved.node.attrs?.instruction ?? "");
232923
233239
  const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
232924
- const { content: content3, sources } = materializeTocContent(editor.state.doc, withRightAlign(config3, rightAlign), editor);
233240
+ const { content: rebuiltEntries, sources } = materializeTocContent(editor.state.doc, withRightAlign(config3, rightAlign), editor, {
233241
+ pageMap: getPageMap(editor) ?? undefined,
233242
+ tabPos: readExistingTocTabPos(resolved.node)
233243
+ });
233244
+ const trailing = readExistingTocTrailingParagraph(resolved.node);
233245
+ const content3 = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
232925
233246
  if (isTocContentUnchanged(resolved.node, content3))
232926
233247
  return tocFailure("NO_OP", "TOC update produced no change.");
232927
233248
  if (options?.dryRun)
@@ -233000,25 +233321,33 @@ function buildPageNumberUpdatedContent(tocNode, pageMap) {
233000
233321
  }
233001
233322
  const tocSourceId = child.attrs?.tocSourceId;
233002
233323
  const childJson = child.toJSON();
233003
- const content3 = childJson.content ?? [];
233004
233324
  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)
233325
+ const visit2 = (node2) => {
233326
+ if (node2.marks?.some((m$1) => m$1.type === "tocPageNumber")) {
233327
+ hasPageNumberMarks = true;
233328
+ if (!tocSourceId)
233329
+ return node2;
233330
+ const pageNumber = pageMap.get(tocSourceId);
233331
+ const newText = pageNumber !== undefined ? String(pageNumber) : "??";
233332
+ if (node2.text !== newText) {
233333
+ paragraphChanged = true;
233334
+ return {
233335
+ ...node2,
233336
+ text: newText
233337
+ };
233338
+ }
233010
233339
  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
233340
  }
233020
- return node2;
233021
- });
233341
+ const nested = node2.content;
233342
+ if (!Array.isArray(nested) || nested.length === 0)
233343
+ return node2;
233344
+ const visited = nested.map(visit2);
233345
+ return visited.some((next2, idx) => next2 !== nested[idx]) ? {
233346
+ ...node2,
233347
+ content: visited
233348
+ } : node2;
233349
+ };
233350
+ const updatedContentArray = (childJson.content ?? []).map(visit2);
233022
233351
  if (paragraphChanged) {
233023
233352
  anyChanged = true;
233024
233353
  updatedContent.push({
@@ -236729,11 +237058,12 @@ function resolveBookmarkTarget(doc$12, target) {
236729
237058
  function nodePositionToPosition(doc$12, pos) {
236730
237059
  const resolved = doc$12.resolve(pos);
236731
237060
  for (let depth = resolved.depth;depth >= 0; depth--) {
236732
- const blockId = resolved.node(depth).attrs?.sdBlockId;
237061
+ const node2 = resolved.node(depth);
237062
+ const blockId = node2.attrs?.sdBlockId;
236733
237063
  if (blockId)
236734
237064
  return {
236735
237065
  blockId,
236736
- offset: pos - resolved.start(depth)
237066
+ offset: pmPositionToTextOffset(node2, resolved.start(depth) - 1, pos)
236737
237067
  };
236738
237068
  }
236739
237069
  return {
@@ -237185,11 +237515,12 @@ function protectionClearEditingRestrictionAdapter(editor, _input, options) {
237185
237515
  function pmPosToPosition(doc$12, pos) {
237186
237516
  const resolved = doc$12.resolve(pos);
237187
237517
  for (let depth = resolved.depth;depth >= 0; depth--) {
237188
- const blockId = resolved.node(depth).attrs?.sdBlockId;
237518
+ const node2 = resolved.node(depth);
237519
+ const blockId = node2.attrs?.sdBlockId;
237189
237520
  if (blockId)
237190
237521
  return {
237191
237522
  blockId,
237192
- offset: pos - resolved.start(depth)
237523
+ offset: pmPositionToTextOffset(node2, resolved.start(depth) - 1, pos)
237193
237524
  };
237194
237525
  }
237195
237526
  return {
@@ -254021,6 +254352,36 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
254021
254352
  }
254022
254353
  if (blk.kind === "drawing") {
254023
254354
  const drawingBlock = blk;
254355
+ if (drawingBlock.drawingKind === "vectorShape") {
254356
+ const parts = drawingBlock.textContent?.parts;
254357
+ if (!parts || parts.length === 0)
254358
+ return blk;
254359
+ let partsChanged = false;
254360
+ const hydratedParts = parts.map((part) => {
254361
+ if (part?.kind !== "image" || !part.src || part.src.startsWith("data:"))
254362
+ return part;
254363
+ const resolvedSrc = resolveImageSrc(part.src, part.rId, undefined, part.extension);
254364
+ if (resolvedSrc) {
254365
+ partsChanged = true;
254366
+ return {
254367
+ ...part,
254368
+ src: resolvedSrc
254369
+ };
254370
+ }
254371
+ return part;
254372
+ });
254373
+ if (partsChanged) {
254374
+ const vectorShapeBlock = drawingBlock;
254375
+ return {
254376
+ ...vectorShapeBlock,
254377
+ textContent: {
254378
+ ...vectorShapeBlock.textContent,
254379
+ parts: hydratedParts
254380
+ }
254381
+ };
254382
+ }
254383
+ return blk;
254384
+ }
254024
254385
  if (drawingBlock.drawingKind !== "shapeGroup")
254025
254386
  return blk;
254026
254387
  const shapeGroupBlock = drawingBlock;
@@ -266867,7 +267228,7 @@ var Node$13 = class Node$14 {
266867
267228
  };
266868
267229
  tr.setNodeMarkup(paraPos, undefined, nextAttrs, paragraph2.marks);
266869
267230
  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 }) => {
267231
+ }, 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
267232
  if (!lineHeight)
266872
267233
  return false;
266873
267234
  return commands$1.updateAttributes("paragraph", {
@@ -271387,7 +271748,7 @@ var Node$13 = class Node$14 {
271387
271748
  }), hiddenRender = (type) => ["sd-passthrough", {
271388
271749
  "data-sd-passthrough": type,
271389
271750
  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) => {
271751
+ }], 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
271752
  if (typeof position4 !== "string")
271392
271753
  return false;
271393
271754
  return normalizeBaselineShift(parseFloat(position4)) != null;
@@ -276190,7 +276551,7 @@ var Node$13 = class Node$14 {
276190
276551
  domAvailabilityCache = false;
276191
276552
  return false;
276192
276553
  }
276193
- }, summaryVersion = "1.31.0", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
276554
+ }, summaryVersion = "1.32.0", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
276194
276555
  const container = document.createElement("div");
276195
276556
  container.innerHTML = html3;
276196
276557
  const result = [];
@@ -276263,7 +276624,7 @@ var Node$13 = class Node$14 {
276263
276624
  }, getLevel = (node2) => {
276264
276625
  const lvl = node2.getAttribute("data-level");
276265
276626
  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 {
276627
+ }, 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
276628
  constructor() {
276268
276629
  this.view = null;
276269
276630
  this.eventListenerCleanups = [];
@@ -276470,7 +276831,7 @@ var Node$13 = class Node$14 {
276470
276831
  let sliceJson = "";
276471
276832
  let mediaJson = "";
276472
276833
  if (from$1 !== to) {
276473
- const slice2 = this.view.state.doc.slice(from$1, to);
276834
+ const slice2 = wrapHeadingSelectionAsParagraph(this.view.state.doc.slice(from$1, to), this.view.state);
276474
276835
  sliceJson = JSON.stringify(slice2.toJSON());
276475
276836
  clipboardData.setData("application/x-superdoc-slice", sliceJson);
276476
276837
  mediaJson = collectReferencedImageMediaForClipboard(sliceJson, editor);
@@ -276516,7 +276877,7 @@ var Node$13 = class Node$14 {
276516
276877
  console.warn("Failed to initialize developer tools:", error48);
276517
276878
  }
276518
276879
  }
276519
- }, BLANK_DOCX_BASE64 = `UEsDBBQAAAAIAAAAIQAykW9XXgEAAKUFAAATABwAW0NvbnRlbnRfVHlwZXNdLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1lMtqwzAQRfeF/oPRNthKuiilxMmij2UbaPoBijRORPVCmrz+vuM4NaWkMeSxMcgz994zQsxwvLEmW0FM2ruSDYo+y8BJr7Sbl+xz+po/sCyhcEoY76BkW0hsPLq9GU63AVJGapdKtkAMj5wnuQArUuEDOKpUPlqBdIxzHoT8EnPgd/3+PZfeITjMsfZgo+EzVGJpMHvZ0O+GJIJJLHtqGuuskokQjJYCqc5XTv1JyfcJBSl3PWmhQ+pRA+MHE+rK/wF73TtdTdQKsomI+CYsdfG1j4orL5eWlMVxmwOcvqq0hFZfu4XoJaREd25N0Vas0K7XxeGWdgaRlJcHaa07IRJuDaTLEzS+3fGASIJrAOydOxHWMPu4GsUv806QinKnYmbg8hitdScE0hqA5js4m2NncyySOifRh0RrJZ4w9s/eqNU5DRwgoj7+6tpEsj57PqhXkgJ1IJvvluzoG1BLAwQKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAcAGRvY1Byb3BzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhACEYr1llAQAAxQIAABAAHABkb2NQcm9wcy9hcHAueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ1STU/DMAy9I/Efqt63dBwmNHlBaAhx4GPSCpyjxG0j0iRKson9e5wVSoEbOdnP9st7TuDqvTfFAUPUzq7LxbwqC7TSKW3bdflc384uyyImYZUwzuK6PGIsr/j5GWyD8xiSxlgQhY3rskvJrxiLssNexDmVLVUaF3qRKA0tc02jJd44ue/RJnZRVUuG7wmtQjXzI2E5MK4O6b+kysmsL77UR098HGrsvREJ+WOeNHPlUg9sRKF2SZha98grgscEtqLFyBfAhgBeXVAx9wwBbDoRhEy0vwxOMrj23mgpEu2VP2gZXHRNKp5OYos8DWzaAmRgh3IfdDpmqmkK99ri6YIhIFVBtEH47gROMthJYXBD1nkjTERg3wBsXO+FJTo2RsT3Fp997W7yFj5HfoITi686dTsvJP4yO8FhRygqUj8KGAG4o8cIJrPTrG1RffX8LeT1vQy/ki+W84rOaV9fGLkevwv/AFBLAwQUAAAACAAAACEACvOn+GYBAADtAgAAEQAcAGRvY1Byb3BzL2NvcmUueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ2SXU+DMBSG7038D6T3UGBqDAGWTLMrZ0yc0XhX27Otjn6k7cb27y0wmMRdeXc+nvP29G3z6UFUwR6M5UoWKIliFICkinG5LtDbch7eo8A6IhmplIQCHcGiaXl9lVOdUWXgxSgNxnGwgVeSNqO6QBvndIaxpRsQxEaekL65UkYQ51OzxprQLVkDTuP4DgtwhBFHcCMY6kERnSQZHST1zlStAKMYKhAgncVJlOAz68AIe3Gg7fwiBXdHDRfRvjnQB8sHsK7rqJ60qN8/wR+Lp9f2qiGXjVcUUJkzmjnuKihzfA59ZHdf30BdVx4SH1MDxClTPnO6DWZgJKlapq83jm/hWCvDrJ8eZR5jYKnh2vl37LRHBU9XxLqFf9gVBzY7jo/5224mDOx58y/KtCWGND+Z3K0GLPDmZJ2Vfed98vC4nKMyjdObMEnD5G6Zpll8m8XxZ7PdaP4sKE4L/FuxF+gMGn/Q8gdQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAYAHABfcmVscy9VVAkAA4Yc7WiHHO1odXgLAAEE9QEAAAQUAAAAUEsDBBQAAAAIAAAAIQAekRq36QAAAE4CAAALABwAX3JlbHMvLnJlbHNVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAArZLBasMwDEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wFQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAHAB3b3JkL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAHAB3b3JkL2ZvbnRUYWJsZS54bWxVVAkAA54c7WieHO1odXgLAAEE9QEAAAQUAAAAvZPBbqMwEIbvlfoOlu8NhpA0RSFV222kvexh1T6AY0ywFtvI44Tk7dcYiBSyuy3tqiCEGf75mPnHLO8PskR7bkBoleJwQjDiiulMqG2KX1/WNwuMwFKV0VIrnuIjB3y/ur5a1kmulQXk8hUkkqW4sLZKggBYwSWFia64ci9zbSS17tFsA0nNr111w7SsqBUbUQp7DCJC5vj6CrmjZZn3oHSeC8a/abaTXFkPCQwvHVYrKEQFZ8j6Pcham6wymnEA170sW6ikQp2zwviCJgUzGnRuJ663rjbPc4yQ+JUsB5TZOEr0Z8qc8cM40KIDBS7zAiaycbD5CSayIexjZQ0p2W4UJ5r2FTW3Jn0IhMxmxThmP8GgyaWWFhSKCywf1+/sxDxKNwgkWfJ9q7Shm9KR3CZDbosgD0btZJobaieO+j6Qdwiv2mK6nxLViaLSUV6E5IB+8Br91JKqXtZJK6o08NCp97RMMWkanZMpmZHYXZFbxTg4T2EFNcDtKYUMBTmVojz2743/6kBSCcuKXrGnRjQdD0Ugtk6ygw1J8TMhJHper3EbCVP85CK3i9ljF4maSvxx10WmpwhpIsxz/GPYcpjnnDT915dB6+Bf/HzSOyO4aRx908tb59+d97TxMv60l1Jn3PzbzFwcePYRJ+PpVzv54MZevunho9uPsfewPT/rIdQC4P/sx4evdrFfwuo3UEsDBBQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABwAd29yZC9kb2N1bWVudC54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAApZZbb9sgFMffJ+07WH5v8S1OYjWttGab+jCpWrcPQIDEqAYsILd9+h3s+LJ5qxz3CXPg/PjDORxz93AShXdg2nAlV354G/gek0RRLncr/+ePLzcL3zMWS4oLJdnKPzPjP9x//HB3zKgie8Gk9QAhTXYsycrPrS0zhAzJmcDmVnCilVFbe0uUQGq75YSho9IURUEYVF+lVoQZA+s9YnnAxr/gyGkcjWp8BGcHTBDJsbbs1DHCqyEztESLISiaAIIdRuEQFV+NSpFTNQAlk0CgakCaTSP9Y3PpNFI0JM2nkeIhaTGNNEgnMUxwVTIJg1ulBbbQ1TsksH7dlzcALrHlG15wewZmkDYYzOXrBEXg1RJETK8mzJFQlBUxbShq5e+1zC7+N62/k57V/pem9WDFuGVhuSViJ1sY2/jqMWdXu68vhaU6NaRZAeeopMl52VYHMZUGg3kDObx1AAdR+G1lC0detf+VtnUdhg44Rv4ldqKolb9NDIMR0XSI1mOMhD/XbJQIyOBu4UlH0zvccGTxaQDRAJASNvJn0TAWFwYi3e12HD7yWjWctOVw2uNME9MD0P1ViChudLjGufdYhlqaX4drYoScL7Y4xybvE9l1G5y1uLPonXe5e9+l+qrVvuxo/H20p668HuV1GwzSvyNYmveJeclxCVVXkOxpJ5XGmwIUwVXz4LZ4VQS8Ol1d49U3wGti7VUJ5Lmq5d/DO22j6Nm1JQwkWYk1foI0T8JlmqTz0K+s8Jezzhoks+VivpyBNYM3If0OJkiveD3/1JqetTPGYZA8fm6Na7bF+8IOpz/3JiMnwzBin/VYfiV89/ILBqFihVGUBG4iJHQ4W8A3qid8w45oFRTWMKmnaL7LbdfdKGuV6PoF2/ZGc4Ypg3XnUdXdKmV73d3eVt3LckQVBqymxITVcyozvIe/aheSrOCSPXNLQGWcVqOo2Xf1WUcEdU/o+99QSwMEFAAAAAgAAAAhAMrnZYorBAAAvgwAABEAHAB3b3JkL3NldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1V22PmzgQ/n7S/QfE58uG1ySLmq3yervV5lqVre6zAZNYa2Nkm03T0/33GwwO9BZVSav9hJln5pnxeGYM795/ZdR6wUISXsxt98axLVykPCPFfm5/edqOZrYlFSoyRHmB5/YJS/v93e+/vTtGEisFatICikJGLJ3bB6XKaDyW6QEzJG94iQsAcy4YUvAq9mOGxHNVjlLOSqRIQihRp7HnOBO7peFzuxJF1FKMGEkFlzxXtUnE85ykuH0YC3GJ38ZkzdOK4UJpj2OBKcTAC3kgpTRs7GfZADwYkpcfbeKFUaN3dJ0LtnvkIjtbXBJebVAKnmIp4YAYNQGSonMcvCI6+74B3+0WNRWYu45e9SMPryPwXhFMUvz1Oo5ZyzEGyz4Pya7jmZx5SNbj+blgegRZdRWF55s46kdt3uOSmcoO19GZMxrXtkihA5KHPiO+boPhme7EunxLekkFNtAjSQQSp375sTR62BdcoIRCOFCGFlSSpaOzmqOsH1ZTHZbJg6WTa9/B1PnGObOOUYlFCq0HI8tz7HENQMHzPFZIAVEkS0ypnmEpxQj8HqO9QAymj5FomwznqKLqCSWx4iUovSDY3tRQpgckUKqwiEuUAtuKF0pwavQy/hdXK5hkAhqttdBzrVvFzYwEiwIx2PB3c2/HM1xHVgly+cnYxrsb9l3+3xGHmS5Ihp/qRMfqRPEWgo/JN7wosg+VVAQY9fT7hQh+FAAuas8foTSeTiXeYqQqSNMbOdMnsaWk3BEhuHgoMqiNN3NG8hwLcECg1nZQPkTwo87zPUYZXKVv5LeS+G9Qhs70n6Asn5dcKc7uT+UBcv1rJ6nrfdwvX/ggyKRZfOZcnVVhbPnr6bKJtEYvQXzXCVabQWTibN1hm0XgO/4gsnLXbjCMhLPlaggJboOJuxhCJqG3CcIhZLH0Zv5sCFku3Wk4iKxW/srfDiIbZz28n83Km04HY9vees7tpj2d9kxYVH9qfBJmVTe2xRqLFWKJIMja1R8j41ojEc9LUhg8wTClcR+Jq8SAo1EDSIYo3UKJGcBp5BmR5Rrnek13SOw73lZDDEphyn44c9VTG4s/Ba/KBj0KVDYNa1TcIGgtSaEeCTNyWSWxsSrgXulBVZF9fBE6T116jpGCBtCD7xHpRtK6uBh9idtGoyKumwTvUFk2vZbs3blNyf6g3Lo9FLxl8M2qX5K912KexrwG0y8orXcG2u2ik3lG1tPzjczvZIGRBZ0sNLKwk02MbFLLDjBdBVx1z9D2ZlnLc04pP+LsvsNficwlmBI48fjEku5uu2kwSiTMoRKuQcWFwf7QmBtEGU8f6vs6aOT+YhGuF860gUN9fSo9qiC1n3G+RBJnLWZMw8b0n8nEmbjuajYKZpvb0WYaBKOZu7wdTafO1PW3rufPnH/bPjA/Hnf/AVBLAwQUAAAACAAAACEA24Vsw30EAACXHQAAEgAcAHdvcmQvbnVtYmVyaW5nLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAADNmc1u4zYQx+8F+g6CgB4Tifq2sM4iySZFFttF0U3RMy3RlhB+CBRlx9d9mT5CH2tfoaRkyXLkxJIctz4pJjk/zQxnyL+dDx+fCdaWiOcpo1MdXJq6hmjE4pQupvqfj/cXga7lAtIYYkbRVF+jXP949fNPH1YhLcgMcblQkwyah6ssmuqJEFloGHmUIALzS5JGnOVsLi4jRgw2n6cRMlaMx4ZlArP8K+MsQnkuObeQLmGub3DRcz9azOFKGiugY0QJ5AI9bxlgMMQ1JkbQBVkjQDJCC3RR9mCUZyivOiBnFEh61SG540h7gvPGkawuyR9HsrukYBypU06kW+AsQ1ROzhknUMiPfGEQyJ+K7EKCMyjSWYpTsZZM06sxMKVPIzySVg2B2PFggm8QFiNsxzWFTfWC03Bjf9HYK9fDyn7zaCwQ7vda+bqJgZ4FzkVty/vkrjL/xKKCICrKrBkcYZlHRvMkzZrTgYylycmkhizfSsCSYL052UDPVnvtaPtUbcMW2Mf9zd4RXHn+NhGYPXZTIRqLPi7svrP2hMgK3r54VGpayQU9D58aYHUAXoR6XhY1I9gwjGjb3YqT9myrmuM1nDRuccY50wLExSCEZdd+qIcyb7HyWMTJMFy9R4ayhQImME/aRDQsQLfBrUkr39niuKb6lbMi29LS42gP2+N1RYcFaHovdzDLj3PmWwIzeeqSKHxYUMbhDEuPZKtpslu0cge0qlzVQ6s6QKv3WisLSFOnln4lhRqc5YLDSHwtiLbz6UFWuxR8khlyJFUeV4OVprueC8RvOIJPaomi0Fy9LVxCeQUAD1jejenrhpohBRbpF7RE+HGdoXpNsp7xNP5NzWE1V60VJMP1Chfc3Tp3ZlDN4KWaSOWjcioUGZb3remYE9M0QelD6WPjRGUnZeg9aQZnBcZINMRHeQfVUz++/9OMf47qUYzmm+XZ71w9UqrCVMNT3bdKTxJIF6Ugtj1TrTWaxXzzuGdU5Cq5eZTKOvy2JjOGS9NrmbedgZRKcIzmUGZmAyspRunYy0yATibsckTeZ/JSXCK14ujMsKF5AY4zLjG3rOAp4tpXtGpl58VolHcXDsua1cma+/5Z+/H976F5s4A3Lm9/ydXqO1neytru2LAE2Xsa7AQJGtxwVhD83x3nnGXHyTycdce5Z9pxjj3yCH/vjvPOtONcc+RR/n4d559lx7n+yLP6P+q44Ew7znNGHuHHd5yxo24PSl8wRvq6gW8C++b6OOl7d+c5wL91+kjf+57bGKMoJRDv3cdfwOU7a9+echVMRhYlZivEvyAh92J/RNbgiA6p1p5aEtwcE9IfjEC6PyJ7X0Q8XSQDBCUIeoTUVX/3I0N6s+acwTt0SP71VGynKzp3cEiHhFtPOXWyovOGF11HU/Uquq4AOknR+YN36JAC6ilaTld0wfCQDmiXnoriZEU3GV50HVnxStF1NQAt737auvPVD2dhXJQ/q5WDMlTHn3jWy5/LHpprv34X3cO09jGdwHWB7wDwOhO0mUbrH6pX/wJQSwMEFAAAAAgAAAAhAL5+dmJWAQAA0AMAABQAHAB3b3JkL3dlYlNldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAACd01FvwiAQAOD3JfsPhHelumlMYzVZFpe9LEu2/QAKV0sGXAO46n79aLWuiy92T0DLfbnjYLneG02+wHmFNqOTcUIJWIFS2W1GP943owUlPnAruUYLGT2Ap+vV7c2yTmvI3yCEuNOTqFifGpHRMoQqZcyLEgz3Y6zAxp8FOsNDXLotM9x97qqRQFPxoHKlVTiwaZLM6Ylx1yhYFErAI4qdARvaeOZARxGtL1XlO62+RqvRycqhAO9jPUYfPcOVPTOT+wvIKOHQYxHGsZhTRi0VwydJOzP6F5gNA6YXwFzAfpixOBksRvYdJYc587OjZM/5XzI9QO4GEdO7Lo9maMJ7lpdBlsO4rkesieWBl9yXfRGGFTg7cwfTnLcR6fPWouO5jlK8QSReAtLC5NiFZiDHxpKuBNKeC13FJ4ZVUEZ9wwbdg8Pag2PNZ6411q8vT3HB/rzD1Q9QSwMEFAAAAAgAAAAhAD+v4WZfDwAADaYAAA8AHAB3b3JkL3N0eWxlcy54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA3Z1tc9s2Esff38x9B45e9V6ksp5lT92O7STnzCWpWzvX1xAJWaj5oCOpOO6nPwB8EKUlKC64UdRMZlqL4v4I4L+7xIIU+dMvXwLf+czjREThZW/w41nP4aEbeSJ8vOx9enj7at5zkpSFHvOjkF/2XnjS++Xnf/7jp+eLJH3xeeJIQJhcBO5lb5Wm64t+P3FXPGDJj9Gah/LLZRQHLJUf48d+wOKnzfqVGwVrloqF8EX60h+enU17OSZuQ4mWS+Hy15G7CXiYavt+zH1JjMJkJdZJQXtuQ3uOYm8dRy5PEtnpwM94ARNhiRmMASgQbhwl0TL9UXYmb5FGSfPBmf4r8LeACQ4wBICpy7/gGPOc0ZeWVY7wcJxpyRFehWPXmArA26AQw1HRDvU/ZV5hJV7qrXC4QqO+smUpW7FkVSVyXAcnJe4lUOMduBfvHsMoZgtfkqQHOdIJHA12MhXU/5xMWKfogqPHpfezjC4vcl/zJdv4aaI+xndx/jH/pP/3NgrTxHm+YIkrxGXvKhZMDvHzBWdJepUI9iBbLg8fCNmS26swEerLlfqjsrObXPYeRCBD+SN/dn6PAhY6P1xH3otzc/+vXl8d6InHodzzM/Mve8NsU/JXuWFcbLlJ9rf5LHwstvHw1af7ausqmxbCk01i8av7K204GF/44pGlm1g2S33ShCwRxd6N7Db/km5k++XO/Xw8+vujtC4/ZXvtDalMGDJ93GdZTH7Ll+8j94l796n84rJ31ss2fnp3F4solpnqsnd+nm+854G4FZ7Hw8qO4Up4/I8VDz8l3Ntu/+2tzjb5BjfahPLv0WyqZfYT780Xl69V7pLfhkzp9VEZaG02Yntwbf6/AjbIB7jOfsWZSuDOYB9xjkYMlUVS6W09c7PX9wH6QKNjHWh8rANNjnWg6bEONDvWgebHOtD51z6QCD2Z3wf1hwHUQxxDNKI5hmBDcwyxhOYYQgXNMUQCmmNwdDTH4MdojsFNEZw0ck1eWHH2kcHbm7mHzxF23MOnBDvu4TOAHfdwwrfjHs7vdtzD6dyOezh723EPJ2s8N5tqOe9kmIVp5yhbRlEaRil31PS0M42FkqWrWhqeOunxmKSTBJgss+Un4s40l+nPhz1k0u18nqqCzomWzlI8quKkc8N5+Jn70Zo7zPMkjxAYc1k+GUbExqdjvuQxD11O6dh0UF+E3Ak3wYLAN9fskYzFQ494+AoiSVIoHZpt0pUKEkHg1AFz44hgzsLI8sN7kXQfKwVxrje+z4lYH2lcTLO61wYa07000JjulYHGdC8MKppRDVFOIxqpnEY0YDmNaNwy/6Qat5xGNG45jWjcclr3cXsQqc/3Zx2D9mt3N36UUCS8e/EY6vXTzqR8zdS5YzF7jNl65ahl54MzLfRx9JLzA8U5rSRRzeu1i6hVZxFuug/oDo0quEoeUXiVPKIAK3ndQ+yDnCarCdotTT1zv1mktUHbviq4Z/4mm9B2jzaWdvewbQC8FXFCFgb1WAIP/qims7dEU71tK7s3bMvqHlb7WYm0eTmSoJV+5D7RpOHblzWPZVn21Jn0NvL96Jl7dMT7NI4yX6uG/HDYOuTfBOsVS0QCEO1P9cUdDM4Htu7coTufiZBGtzevAiZ8h24Gcfvw4b3zEK1VmakGhgZ4HaVpFJAx85XAH/7gi3/RNPBKFsHhC1Fvr4iWhzTsRhCcZDJS5BGR5DRThILkHKp5/+Evi4jFHg3tLubZTUMpJyLes2DtU8WWzIvPMv8QzIY0778sFmpdiCqoHkhglWXDZLP4k7vdU93HyCFZGfp1k+r1Rz3V7X61dwfXfZqwg+s+RdBqytOD8l+Czu7gund2B0fV2RufJYkwXkK15lF1t+BR97d78ZfzIj+KlxufbgALINkIFkCyIYz8TRAmlD3WPMIOax51fwldRvMIluQ079+x8MjE0DAqJTSMSgYNo9JAw0gF6H6HTgXW/TadCqz7vToZjGgKUIFR+Rnp6Z/oKk8FRuVnGkblZxpG5WcaRuVno9cOXy7lJJjuFFNBUvlcBUl3oglTHqyjmMUvRMg3Pn9kBAukGe0ujpbq1yRRmN3ETTGd3SxSysl2hqMS+Q++IGuaYlG2i2BFlPl+FBGtrW1PONpy9961Q2b65xydm3DnM5evIt/jsaFPjfXy/Zq5Ai6dtr9Y8l48rlLnflWu9lcx07ODlkXBvmN2+IB1Yz4dNl5m8sQmKBoKf0wxHbU3HgLj8WHj7Uxix3LS0hIec3rYcjtL3rGctbSEx5y3tBwBy6Z4eM3ip1pHmDX5T1njGZxv1nhhvjCuPWyTI5WWdS44a/KinVBxrlxXXS2A6rSLGbN9u+Ax22OiyEzBhJOZ0jquzIimAPudfxZJ7Rr1gevf5d0TIO+PW2fO3zZRCi5TD9v/qOudnDiFCXdqOaP2F652sox5HFunGzOidd4xI1onIDOiVSYymqNSkpnSOjeZEa2TlBmBzlbwjIDLVtAel62gvU22ghSbbNVhFmBGtJ4OmBHoQIUIdKB2mCmYEahABeZWgQop6ECFCHSgQgQ6UOEEDBeo0B4XqNDeJlAhxSZQIQUdqBCBDlSIQAcqRKADFSLQgWo5tzeaWwUqpKADFSLQgQoR6EAddwxUaI8LVGhvE6iQYhOokIIOVIhABypEoAMVItCBChHoQIUIVKACc6tAhRR0oEIEOlAhAh2ok46BCu1xgQrtbQIVUmwCFVLQgQoR6ECFCHSgQgQ6UCECHagQgQpUYG4VqJCCDlSIQAcqRKADddoxUKE9LlChvU2gQopNoEIKOlAhAh2oEIEOVIhABypEoAMVIlCBCsytAhVS0IEKEehAhYgm/8wvUZpusx/gVz2Nd+wjfueTNer36k+5d9ZQ26OKVplZ7X+LcB1FT07tDw9Ho/YQsfBFpJeoDZfVq9wZ+sLnrzfNv/Bp8RiPtl3Jfwuhr5kC+LitJVhTGTe5fNUSFHnjJk+vWoJZ57gp+1YtwWlw3JR0dVwWN6XI0xEwbkozFeOBwbwpW1fM4RA35eiKIRzhpsxcMYQD3JSPK4YTRyXnfetJy3GalveXAkKTO1YIMzOhyS2hVsa1/daimQlt1TMT2spoJqD0NGLwwppRaIXNKDupYZhhpbYPVDMBKzUkWEkNMPZSQ5S11BBlJzVMjFipIQErtX1yNhOspAYYe6khylpqiLKTGp7KsFJDAlZqSMBK3fGEbMTYSw1R1lJDlJ3UcHKHlRoSsFJDAlZqSLCSGmDspYYoa6khyk5qUCWjpYYErNSQgJUaEqykBhh7qSHKWmqIapJar6LYV0sVc9wkrGKIOyFXDHHJuWJoUS1VrC2rpQrBslqCWtlVS1XR7Kqlqnp21VJVRrtqCehpVy3VCmtXLdUqbFctmaXGVUt1UtsHql21VCc1rloySo2rlhqlxlVLjVLjqiWz1LhqqU5qXLVUJ7V9crarloxS46qlRqlx1VKj1LhqySw1rlqqkxpXLdVJjauW6qTueEK2q5YapcZVS41S46ols9S4aqlOaly1VCc1rlqqkxpXLRmlxlVLjVLjqqVGqXHVkllqXLVUJzWuWqqTGlct1UmNq5aMUuOqpUapcdVSo9S4aumDNBEEj4C6D1icOnTPi7tlySpl3R9O+CmMeRL5n7nn0Hb1PaqX/eed118ptn6dn9w/lWOmnoBe+bmSlz0BNgfqHd955WuqlLFqiZO/5yvfrBucX67NjqgNDxyqhOfXigcAv325lT7Cgsle/RrWHTxUD0as2a4cotheHOZmxeLs262rFvuc7/fl+SJO1Avcsq/Pzoaj0evZdbbXOns12xPn64/y+P3ig9SHJ/pTkv2AVpov1DPF5AiMpvq3V2yZ8viyN8+jNsqe2vT+s18eKZcuP0btW+CKV76xPyuvfNt/H5z68k2+TX2vXwlXa+kmaWXztfBE1jhXRXnZrrfj2VT7ht5ZZ4DLHtPxv92sbkpR9xm8zQjbF8gVF5urL5AbF30tXu1m4zxDo/MMKZ1n2MJ5tmGZ7bcTlF/ZvQYt3WvwfbrXaAjdK9vW0b1GRvcaUbrX6Dtxr2Gzex1yomO4ynAOXSXb1tFVxkZXGVO6yvjEXWVe9ZSx0VNGX8dTRPbfm4TEbzp6xMToERNKj5h8Hx4xPs3c0dEHpkYfmFL6wPTEfcAs++ToiWByrv7tO4F609LWBR6EeoPv1ZTAA2ZGD5hResDsb+sB0yME/pE1nxs1n1NqPj8pzaGys6PH9nCm/rXR+TXFnO/cqPM5pc7nJ67z/AgRTK+sKweVufkD1Q3rX/mLkcon++jXIu1rbnh7kkGvQTu9zO1O1SpsQ5v1Km3jwl3+sHaTQ7X2qHThZ1LLP96FyqGe83fYZy31vrBeseMN9/0PLNs7Wpt39fkyzb4dnM1rvl9kr4Qw2sf62oER0N9tTL/shHm8s5dE5j9qMa6T6keGweHOHiXWcaRb+rC7SeTQ6OXe/fbtrIHut/K2WG51tnlmL3HVxoEpXQ0OpCpz8vle1qO6LHciJR02SjokknSIO/t8/wp3WXFEKjxqVHhEpPDoayn8d1/0Q6o1blRrTKTW+NTUOvbCG1KVSaMqEyJVJqemysnpMG3UYUqkw/TUdDjqahRSklmjJDMiSWanJslpiTBvFGFOJML81EQ46koOUpLzRknOiSQ5PzVJvslyWvZgi/2xzrZSrKNpUtMi2iAv2FBrZNtF7r0L4656fcWXdMP8/En6jctjxyyBtk3W3XpV9PuJx+XgbifLZXqcwunzhDgRbiWqdYOu4VbxJbP6p1m2Hl+z+iAtX6K9L1D5BUWoFrDGaB1YRGu4CbI/hA/vhyq/BDE9mB64Je+bTECAVwwm36Lm3RHL5BZdQ3fXvczecOJzxq8sWX3MZq8B2Fcm20oRrZrUFKpDmztrD92ANige3venW3BUEcvj2khtmGSOz9S/NhpS18PbgasVp2vMVBQ2a3IwYI46cvUOrC6fbN+rsT9We6/dOOTRcChGYwv3FPpSl7pQpZ6R12LO19Jdyk7nD44rn2a3323wuDuco9R4BOqEetg7jnifVT4W9Ylu920oFAmverimvDeyKSjW117lAqneL5GelL9X+y91j5yTZUeuJ61OPuyW6+PlpdSvfKT+tmeHfhgxKjJ7NcbmU90afWU3+0SS/L/peijwo0bX7Xo62AmSAx57cnHfmCO3z9Y0DeB2j65Zsrjmh8qSi+yo+WglMqn4N2xNM3ZgSjmpH9Hir+Tn/wNQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL3RoZW1lL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAHAB3b3JkL3RoZW1lL3RoZW1lMS54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA7VlPb9s2FL8P2HcgdHf1x5IsBXUL/23XJm3RpB16ZGRaYkyJAkknMYoCQ3vaZcCAbthlwG47DMMKrMCKXfZhCrTYug8xSnZs0abatE23AksMxCL5e48/vvf4+ExdvHycEnCIGMc0axv2BcsAKIvoCGdx27izN2wEBuACZiNIaIbaxgxx4/KlTz+5CLdEglIEpHzGt2DbSITIt0yTR7Ib8gs0R5kcG1OWQiGbLDZHDB5JvSkxHcvyzRTizAAZTKXam+MxjhDYK1Qal06UD4j8lwledESE7UbljFWJEjua2MUXn/EeYeAQkrYh5xnRoz10LAxAIBdyoG1Y5Z9hXrpoLoWIqJGtyA3Lv4XcQmA0cUo5Fu8vBa2BE7j2Ur8z17+JGwTFZ6mvBMAokiu1N7C251uBs8BWQPNHje6wZTdVfEV/c1N/6HcdV8E3V3h3c43DcND3FLy7wnsb+I7ldMOmgvdWeH8D7w46LWeg4EtQQnA22UT7rSDwF+glZEzJVS089H2r1V/AVyizEl1z+UzUxVoKDygbSkDpXChwBsQsR2MYSVwnF5SDPuY5gTMD5DCjXHZbjm3LwHMtZ/kpLQ63EKxIz7sivtFV8AE8YjgXbeOa1GpUIC+ePXv+8Onzh789f/To+cNfwDaOE6GRuwqzuCr36sev//7+C/DXrz+8evyNHs+r+Jc/f/ny9z9ep14otL598vLpkxffffXnT4818A6D+1X4Hk4RBzfQEbhNU7lAzQRon72dxF4CcVWik8UcZrCQ0aAHIlHQN2aQQA2ui1Q73mUyXeiAV6YHCuHdhE0F1gCvJ6kC3KGUdCnTrul6MVfVCtMs1k/OplXcbQgPdXP31rw8mOYy7rFOZS9BCs1bRLocxihDAhRjdIKQRuwexopdd3DEKKdjAe5h0IVYa5I9vC/0QldxKv0y0xGU/lZss3MXdCnRqe+jQxUp9wYkOpWIKGa8AqcCplrGMCVV5DYUiY7k7oxFisG5kJ6OEaFgMEKc62RusplC9zqUeUvr9h0yS1UkE3iiQ25DSqvIPp30EpjmWs44S6rYz/hEhigEt6jQkqDqDina0g8wq3X3XYzE2+3tOzIN6QOkGJky3ZZAVN2PMzKGSKe8w1IlxXYY1kZHdxorob2NEIFHcIQQuPOZDk9zqid9LZFZ5SrS2eYaVGO1aGeIy1qpKG40jsVcCdldFNMaPjuztcQzg1kKWZ3mGxM1ZAb7TG5GXbySaKKkUsyKTasncZOn8FRabyVQCauizfXxOmPZ2+4xKXPwDjLorWVkYj+1bfYgQfqA2YMYbOvSrRSZ6kWK7VSKTbVyY3XTrtxgrhU9Kc7eUAH9N5XPB6t5zr7aqUso6zVOHW69sulRNsIff2HTh9PsFpJnyXldc17X/B/rmrr9fF7NnFcz59XMv1bNrAoYs3rZU2pJa29+xpiQXTEjaJuXpQ+Xe380lJ1loxRaXjTliXxcTKfgYgbLZ8Co+ByLZDeBuZzGLmeI+UJ1zEFOuSyfjFrdZfE1TXfoaHGPZ5/cbUoBKFb9lrfsl6WamPf6rdVF6FJ92Yp5lYBXKj09icpkKommhkSreToStnVWLEINi8B+HQuz4hV5OAFYXIt77pyRDDcZ0qPCT3P5E++euafrjKku29EsL3TPzNMKiUq4qSQqYZjIw2O9+4x9HYZ6VztaGq3gQ/ja3MwNJFNb4EjuuaYn1UQwbxtj+bNJPqa51MeLTAVJnLWNSCwM/S6ZJWdc9CFP5rByaL7+FAvEAMGpjPWqG0i24mY7LevjJRdaH5/lzHUno/EYRaKmZ9WUY3Ml2tH3BBcNOpWkd5PREdgnU3YbSkN5Lbsw4AhzsbTmCLNKcK+suJauFltReQO02qKQ5AlcnCjVZD6Hl89LOpV1lEzXV2XqTLgfD8/i1H2z0FrSrDlAWrVZ7MMd8hVWTT0rT5vrwsB6/Snx/gdChVqgp9bUU6s7O86wIKhM59fYzan15nueButRa1bqyrK18XKb7h/IyO/LanVKBJ9fkB3L8rt38lpyngnK3pPscizAlOG2cd/yOm7P8XoNK/AGDbfpWo3A6zQbHc9r2gPPtvpd54E0ikhS25vPPZQ/9sls8e6+7N94f5+elNoXIpqatKyDzVK4fH9vO/Xv7wGWlrnvO8OwGXb9RtjsDBtuvxs0wp7fbfT9Xqs/7Pe8IBw+MMBhCXY7zZ7rD4KGb/d6Dde3CvpB2Gi5jtNxW51g4HYeLGwtV37yfWLektelfwBQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL19yZWxzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhALO+ix3+AAAAtgMAABwAHAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAMw0M4SiBztaHV4CwABBPUBAAAEFAAAAK2TzWrDMBCE74W+g9h7LTttQwmRcymBXFv3AWR7/UP1Y6RNWr99RUoShwbTg44zYme+hdV6860VO6DzvTUCsiQFhqaydW9aAR/F9uEFmCdpaqmsQQEjetjk93frN1SSwpDv+sGzkGK8gI5oWHHuqw619Ikd0ISXxjotKUjX8kFWn7JFvkjTJXfTDMivMtmuFuB29SOwYhzwP9m2afoKX22112joRgX3SBQ28yFTuhZJwMlJQhbw2wiLqAg0KpwCHPVcfRaz3ux1iS5sfCE4W3MQy5gQFGbxAnCUv2Y2x/Ack6GxhgpZqgnH2ZqDeIoJ8YXl+5+TnJgnEH712/IfUEsBAh4DFAAAAAgAAAAhADKRb1deAQAApQUAABMAGAAAAAAAAQAAAKSBAAAAAFtDb250ZW50X1R5cGVzXS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGrAQAAZG9jUHJvcHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhACEYr1llAQAAxQIAABAAGAAAAAAAAQAAAKSB7gEAAGRvY1Byb3BzL2FwcC54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEACvOn+GYBAADtAgAAEQAYAAAAAAABAAAApIGdAwAAZG9jUHJvcHMvY29yZS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFOBQAAX3JlbHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAB6RGrfpAAAATgIAAAsAGAAAAAAAAQAAAKSBjgUAAF9yZWxzLy5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BvAYAAHdvcmQvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAGAAAAAAAAQAAAKSB+wYAAHdvcmQvZm9udFRhYmxlLnhtbFVUBQADnhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABgAAAAAAAEAAACkgVcJAAB3b3JkL2RvY3VtZW50LnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDK52WKKwQAAL4MAAARABgAAAAAAAEAAACkgXcMAAB3b3JkL3NldHRpbmdzLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDbhWzDfQQAAJcdAAASABgAAAAAAAEAAACkge0QAAB3b3JkL251bWJlcmluZy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAvn52YlYBAADQAwAAFAAYAAAAAAABAAAApIG2FQAAd29yZC93ZWJTZXR0aW5ncy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAP6/hZl8PAAANpgAADwAYAAAAAAABAAAApIFaFwAAd29yZC9zdHlsZXMueG1sVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BAicAAHdvcmQvdGhlbWUvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAGAAAAAAAAQAAAKSBRycAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJNkTVsAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQTEuAAB3b3JkL19yZWxzL1VUBQADhhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCzvosd/gAAALYDAAAcABgAAAAAAAEAAACkgXYuAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAARABEAqQUAAMovAAAAAA==`, 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 {
276880
+ }, 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
276881
  #hostEditor;
276521
276882
  #snapshots = /* @__PURE__ */ new Map;
276522
276883
  #aggregated = null;
@@ -277365,7 +277726,7 @@ var Node$13 = class Node$14 {
277365
277726
  return () => {};
277366
277727
  const handle3 = setInterval(callback, intervalMs);
277367
277728
  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) => {
277729
+ }, 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
277730
  const extensionLike = extension2;
277370
277731
  const config3 = extensionLike?.config;
277371
277732
  const ExtensionCtor = extensionLike?.constructor;
@@ -291442,8 +291803,8 @@ menclose::after {
291442
291803
  get manager() {
291443
291804
  return this.#headerFooterManager;
291444
291805
  }
291445
- refreshStructure() {
291446
- this.#headerFooterManager?.refresh();
291806
+ refreshStructure(options) {
291807
+ this.#headerFooterManager?.refresh(options?.purgeCachedEditors ? { purgeCachedEditors: true } : undefined);
291447
291808
  this.#headerFooterAdapter?.invalidateAll();
291448
291809
  }
291449
291810
  invalidateLayoutForRefs(refIds) {
@@ -293036,12 +293397,12 @@ menclose::after {
293036
293397
  return;
293037
293398
  console.log(...args$1);
293038
293399
  }, 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(() => {
293400
+ var init_src_CMq87UyB_es = __esm(() => {
293040
293401
  init_rolldown_runtime_Bg48TavK_es();
293041
- init_SuperConverter_BecdrRIX_es();
293402
+ init_SuperConverter_BInxZk0I_es();
293042
293403
  init_jszip_C49i9kUs_es();
293043
293404
  init_uuid_qzgm05fK_es();
293044
- init_create_headless_toolbar_DCeIAH_W_es();
293405
+ init_create_headless_toolbar_rUh3xIsa_es();
293045
293406
  init_constants_DrU4EASo_es();
293046
293407
  init_dist_B8HfvhaK_es();
293047
293408
  init_unified_Dsuw2be5_es();
@@ -300266,10 +300627,10 @@ ${err.toString()}`);
300266
300627
  addOptions() {
300267
300628
  return { htmlAttributes: {} };
300268
300629
  },
300269
- parseHTML() {
300630
+ parseDOM() {
300270
300631
  return [{ tag: "span[data-toc-page-number]" }];
300271
300632
  },
300272
- renderHTML() {
300633
+ renderDOM() {
300273
300634
  return [
300274
300635
  "span",
300275
300636
  { "data-toc-page-number": "" },
@@ -303562,6 +303923,33 @@ ${err.toString()}`);
303562
303923
  fieldType: "NUMPAGES",
303563
303924
  instruction: "NUMPAGES"
303564
303925
  } };
303926
+ TAB_LEADER_TO_SEPARATOR = {
303927
+ dot: ".",
303928
+ hyphen: "-",
303929
+ underscore: "_",
303930
+ middleDot: "·"
303931
+ };
303932
+ SEPARATOR_TO_TAB_LEADER = {
303933
+ ".": "dot",
303934
+ "-": "hyphen",
303935
+ _: "underscore",
303936
+ "·": "middleDot"
303937
+ };
303938
+ DEFAULT_TOC_CONFIG = {
303939
+ source: {
303940
+ outlineLevels: {
303941
+ from: 1,
303942
+ to: 3
303943
+ },
303944
+ useAppliedOutlineLevel: true
303945
+ },
303946
+ display: {
303947
+ hyperlinks: true,
303948
+ hideInWebView: true
303949
+ },
303950
+ preserved: {}
303951
+ };
303952
+ SWITCH_PATTERN$1 = /\\([a-z])\s*(?:"([^"]*)")?/gi;
303565
303953
  UPDATABLE_FIELD_TYPES = new Set([
303566
303954
  "NUMWORDS",
303567
303955
  "NUMCHARS",
@@ -303570,11 +303958,41 @@ ${err.toString()}`);
303570
303958
  FieldUpdate = Extension.create({
303571
303959
  name: "fieldUpdate",
303572
303960
  addCommands() {
303573
- return { updateFieldsInSelection: () => ({ editor, state, dispatch }) => {
303961
+ return { updateFieldsInSelection: () => ({ editor, state, tr: outerTr, dispatch }) => {
303574
303962
  const { from: from$1, to } = state.selection;
303963
+ let tocPathRan = false;
303964
+ if (editor?.doc?.toc?.update) {
303965
+ const tocTargets = findAllTocNodes(state.doc).map((toc) => toc.commandNodeId).filter((id2) => typeof id2 === "string" && id2);
303966
+ if (tocTargets.length > 0) {
303967
+ if (!dispatch)
303968
+ return true;
303969
+ const tocStorage = editor.storage?.tableOfContents;
303970
+ const cachedPageMap = tocStorage?.pageMap ?? null;
303971
+ for (const sdBlockId of tocTargets) {
303972
+ if (tocStorage && cachedPageMap) {
303973
+ tocStorage.pageMap = cachedPageMap;
303974
+ tocStorage.pageMapDoc = editor.state.doc;
303975
+ }
303976
+ try {
303977
+ editor.doc.toc.update({
303978
+ target: {
303979
+ kind: "block",
303980
+ nodeType: "tableOfContents",
303981
+ nodeId: sdBlockId
303982
+ },
303983
+ mode: "all"
303984
+ });
303985
+ } catch (error48) {
303986
+ console.warn("[FieldUpdate] toc.update failed for", sdBlockId, error48);
303987
+ }
303988
+ }
303989
+ outerTr?.setMeta?.("preventDispatch", true);
303990
+ tocPathRan = true;
303991
+ }
303992
+ }
303575
303993
  const updatable = findFieldsInRange(state.doc, from$1, to).filter((f2) => UPDATABLE_FIELD_TYPES.has(f2.fieldType));
303576
303994
  if (updatable.length === 0)
303577
- return false;
303995
+ return tocPathRan;
303578
303996
  const stats = getWordStatistics(resolveMainBodyEditor(editor));
303579
303997
  const tr = state.tr;
303580
303998
  let changed = false;
@@ -303605,7 +304023,7 @@ ${err.toString()}`);
303605
304023
  }
303606
304024
  }
303607
304025
  if (!changed)
303608
- return false;
304026
+ return tocPathRan;
303609
304027
  if (dispatch)
303610
304028
  dispatch(tr);
303611
304029
  return true;
@@ -304065,7 +304483,11 @@ ${err.toString()}`);
304065
304483
  underlineColor: { default: null },
304066
304484
  underlineThemeColor: { default: null },
304067
304485
  underlineThemeTint: { default: null },
304068
- underlineThemeShade: { default: null }
304486
+ underlineThemeShade: { default: null },
304487
+ autoAdded: {
304488
+ default: false,
304489
+ rendered: false
304490
+ }
304069
304491
  };
304070
304492
  },
304071
304493
  addCommands() {
@@ -304312,10 +304734,26 @@ ${err.toString()}`);
304312
304734
  }
304313
304735
  if (linkMarkType)
304314
304736
  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());
304737
+ if (underlineMarkType) {
304738
+ const rangesMissingUnderline = [];
304739
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304740
+ if (!node2.isText || node2.nodeSize <= 0)
304741
+ return;
304742
+ if (node2.marks.some((mark2) => mark2.type === underlineMarkType))
304743
+ return;
304744
+ const rangeFrom = Math.max(pos, from$1);
304745
+ const rangeTo = Math.min(pos + node2.nodeSize, to);
304746
+ if (rangeFrom >= rangeTo)
304747
+ return;
304748
+ rangesMissingUnderline.push({
304749
+ from: rangeFrom,
304750
+ to: rangeTo
304751
+ });
304752
+ });
304753
+ rangesMissingUnderline.forEach((range) => {
304754
+ tr = tr.addMark(range.from, range.to, underlineMarkType.create({ autoAdded: true }));
304755
+ });
304756
+ }
304319
304757
  let rId = null;
304320
304758
  if (editor.options.mode === "docx") {
304321
304759
  const id2 = addLinkRelationship({
@@ -304336,8 +304774,72 @@ ${err.toString()}`);
304336
304774
  dispatch(tr.scrollIntoView());
304337
304775
  return true;
304338
304776
  },
304339
- unsetLink: () => ({ chain }) => {
304340
- return chain().unsetMark("underline", { extendEmptyMarkRange: true }).unsetColor().unsetMark("link", { extendEmptyMarkRange: true }).run();
304777
+ unsetLink: () => ({ chain, state, editor }) => {
304778
+ const { selection } = state;
304779
+ const linkMarkType = editor.schema.marks.link;
304780
+ const underlineMarkType = editor.schema.marks.underline;
304781
+ let { from: from$1, to } = selection;
304782
+ if (selection.empty && linkMarkType) {
304783
+ const range = getMarkRange(selection.$from, linkMarkType);
304784
+ if (range) {
304785
+ from$1 = range.from;
304786
+ to = range.to;
304787
+ }
304788
+ }
304789
+ return chain().unsetColor().unsetMark("link", { extendEmptyMarkRange: true }).command(({ tr }) => {
304790
+ if (underlineMarkType)
304791
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304792
+ if (!node2.isText)
304793
+ return;
304794
+ node2.marks.forEach((mark2) => {
304795
+ if (mark2.type !== underlineMarkType)
304796
+ return;
304797
+ if (mark2.attrs?.autoAdded !== true)
304798
+ return;
304799
+ tr.removeMark(pos, pos + node2.nodeSize, mark2);
304800
+ });
304801
+ });
304802
+ const textStyleMarkType = tr.doc.type.schema.marks.textStyle;
304803
+ if (textStyleMarkType)
304804
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304805
+ if (!node2.isText)
304806
+ return;
304807
+ node2.marks.forEach((mark2) => {
304808
+ if (mark2.type !== textStyleMarkType)
304809
+ return;
304810
+ if (!TRANSIENT_HYPERLINK_STYLE_IDS.has(mark2.attrs?.styleId))
304811
+ return;
304812
+ const clearedAttrs = {
304813
+ ...mark2.attrs,
304814
+ styleId: null
304815
+ };
304816
+ tr.removeMark(pos, pos + node2.nodeSize, mark2);
304817
+ tr.addMark(pos, pos + node2.nodeSize, textStyleMarkType.create(clearedAttrs));
304818
+ });
304819
+ });
304820
+ const runNodesToUpdate = [];
304821
+ tr.doc.nodesBetween(from$1, to, (node2, pos) => {
304822
+ if (node2.type.name !== "run")
304823
+ return;
304824
+ if (!TRANSIENT_HYPERLINK_STYLE_IDS.has(node2.attrs?.runProperties?.styleId))
304825
+ return;
304826
+ runNodesToUpdate.push({
304827
+ node: node2,
304828
+ pos
304829
+ });
304830
+ });
304831
+ runNodesToUpdate.sort((a2, b$1) => b$1.pos - a2.pos).forEach(({ node: node2, pos }) => {
304832
+ const mappedPos = tr.mapping.map(pos);
304833
+ tr.setNodeMarkup(mappedPos, node2.type, {
304834
+ ...node2.attrs,
304835
+ runProperties: {
304836
+ ...node2.attrs.runProperties,
304837
+ styleId: null
304838
+ }
304839
+ }, node2.marks);
304840
+ });
304841
+ return true;
304842
+ }).run();
304341
304843
  },
304342
304844
  toggleLink: ({ href, text: text5 } = {}) => ({ commands: commands$1 }) => {
304343
304845
  if (!href)
@@ -315512,6 +316014,7 @@ function print() { __p += __j.call(arguments, '') }
315512
316014
  "spanning",
315513
316015
  "code"
315514
316016
  ];
316017
+ HEADING_STYLE_RE = /^Heading[1-9]$/i;
315515
316018
  RUNTIME_COPY_STRIP_SELECTOR = [
315516
316019
  ".list-marker",
315517
316020
  ".sd-editor-tab",
@@ -315526,33 +316029,6 @@ function print() { __p += __j.call(arguments, '') }
315526
316029
  ["bullet", "bullet"]
315527
316030
  ]);
315528
316031
  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
316032
  BULLET_FORMATS$1 = new Set(["bullet"]);
315557
316033
  LOCK_MODE_TO_SDT_LOCK = {
315558
316034
  unlocked: "none",
@@ -317095,6 +317571,15 @@ function print() { __p += __j.call(arguments, '') }
317095
317571
  }
317096
317572
  };
317097
317573
  SWITCH_PATTERN = /\\([a-z])(?:\s*(?:"([^"]*)"|([^\s\\]+)))?/gi;
317574
+ ALLOWED_SOURCE_MARK_TYPES = new Set([
317575
+ "bold",
317576
+ "italic",
317577
+ "underline",
317578
+ "color",
317579
+ "highlight",
317580
+ "fontFamily"
317581
+ ]);
317582
+ TEXT_STYLE_ALLOWED_ATTRS = new Set(["fontFamily"]);
317098
317583
  TAB_LEADER_MAP = {
317099
317584
  dot: "dot",
317100
317585
  hyphen: "hyphen",
@@ -317109,6 +317594,7 @@ function print() { __p += __j.call(arguments, '') }
317109
317594
  text: "No table of contents entries found."
317110
317595
  }]
317111
317596
  }];
317597
+ TOC_ENTRY_STYLE_RE = /^TOC[1-9]$/;
317112
317598
  ALLOWED_WRAP_ATTRS = {
317113
317599
  None: ["behindDoc"],
317114
317600
  Square: [
@@ -319085,6 +319571,7 @@ function print() { __p += __j.call(arguments, '') }
319085
319571
  this.#insertNewFileData();
319086
319572
  if (!this.options.ydoc)
319087
319573
  this.#initComments();
319574
+ this.emit("documentReplaced", { editor: this });
319088
319575
  }
319089
319576
  getInternalXmlFile(name, type = "json") {
319090
319577
  if (!this.converter.convertedXml[name]) {
@@ -321752,6 +322239,17 @@ function print() { __p += __j.call(arguments, '') }
321752
322239
  currentParagraph.style.whiteSpace = "normal";
321753
322240
  if (part.isEmptyParagraph)
321754
322241
  currentParagraph.style.minHeight = "1em";
322242
+ } else if (part.kind === "image" && part.src) {
322243
+ const img2 = this.doc.createElement("img");
322244
+ img2.src = part.src;
322245
+ img2.alt = part.alt ?? "";
322246
+ if (typeof part.width === "number")
322247
+ img2.style.width = `${part.width}px`;
322248
+ if (typeof part.height === "number")
322249
+ img2.style.height = `${part.height}px`;
322250
+ img2.style.display = "inline-block";
322251
+ img2.style.verticalAlign = "bottom";
322252
+ currentParagraph.appendChild(img2);
321755
322253
  } else {
321756
322254
  const span = this.doc.createElement("span");
321757
322255
  span.textContent = this.resolveShapeTextPartText(part, context);
@@ -324173,7 +324671,9 @@ function print() { __p += __j.call(arguments, '') }
324173
324671
  #hasConverter(editor) {
324174
324672
  return "converter" in editor && editor.converter !== undefined && editor.converter !== null;
324175
324673
  }
324176
- refresh() {
324674
+ refresh(options) {
324675
+ if (options?.purgeCachedEditors)
324676
+ this.#teardownEditors();
324177
324677
  this.#collections = this.#extractCollections();
324178
324678
  const nextDescriptors = this.#collectDescriptors(this.#collections);
324179
324679
  this.#teardownMissingEditors(nextDescriptors);
@@ -327117,6 +327617,7 @@ function print() { __p += __j.call(arguments, '') }
327117
327617
  });
327118
327618
  const handleCollaborationReady = (payload) => {
327119
327619
  this.emit("collaborationReady", payload);
327620
+ this.#refreshHeaderFooterStructureThenRerender();
327120
327621
  if (this.#options.collaborationProvider?.awareness && this.#layoutOptions.presence?.enabled !== false)
327121
327622
  this.#setupCollaborationCursors();
327122
327623
  };
@@ -327125,6 +327626,14 @@ function print() { __p += __j.call(arguments, '') }
327125
327626
  event: "collaborationReady",
327126
327627
  handler: handleCollaborationReady
327127
327628
  });
327629
+ const handleDocumentReplaced = () => {
327630
+ this.#refreshHeaderFooterStructureThenRerender({ purgeCachedEditors: true });
327631
+ };
327632
+ this.#editor.on("documentReplaced", handleDocumentReplaced);
327633
+ this.#editorListeners.push({
327634
+ event: "documentReplaced",
327635
+ handler: handleDocumentReplaced
327636
+ });
327128
327637
  const handleCommentsUpdate = (payload) => {
327129
327638
  if ("activeCommentId" in payload) {
327130
327639
  const activeId = payload.activeCommentId ?? null;
@@ -327985,6 +328494,13 @@ function print() { __p += __j.call(arguments, '') }
327985
328494
  #calculateExtendedSelection(anchor, head, mode) {
327986
328495
  return calculateExtendedSelection(this.#layoutState.blocks, anchor, head, mode);
327987
328496
  }
328497
+ #refreshHeaderFooterStructureThenRerender(options) {
328498
+ this.#headerFooterSession?.refreshStructure(options);
328499
+ this.#flowBlockCache.setHasExternalChanges(true);
328500
+ this.#pendingDocChange = true;
328501
+ this.#selectionSync.onLayoutStart();
328502
+ this.#scheduleRerender();
328503
+ }
327988
328504
  #scheduleRerender() {
327989
328505
  if (this.#renderScheduled)
327990
328506
  return;
@@ -328232,7 +328748,7 @@ function print() { __p += __j.call(arguments, '') }
328232
328748
  }
328233
328749
  this.#sectionMetadata = sectionMetadata;
328234
328750
  const converter = this.#editor.converter;
328235
- const multiSectionId = buildMultiSectionIdentifier(sectionMetadata, converter?.pageStyles, {
328751
+ const multiSectionId = buildMultiSectionIdentifier(sectionMetadata, { alternateHeaders: this.#resolveAlternateHeadersFlag() }, {
328236
328752
  headerIds: converter?.headerIds,
328237
328753
  footerIds: converter?.footerIds
328238
328754
  });
@@ -328897,6 +329413,16 @@ function print() { __p += __j.call(arguments, '') }
328897
329413
  overlay.innerHTML = "";
328898
329414
  overlay.appendChild(fragment);
328899
329415
  }
329416
+ #resolveAlternateHeadersFlag() {
329417
+ const converter = this.#editor?.converter;
329418
+ if (!converter)
329419
+ return false;
329420
+ const settingsPart = converter.convertedXml?.["word/settings.xml"];
329421
+ const fromSettings = resolveEvenAndOddHeadersFromSettingsPart(settingsPart);
329422
+ if (fromSettings !== null)
329423
+ return fromSettings;
329424
+ return converter.pageStyles?.alternateHeaders === true;
329425
+ }
328900
329426
  #resolveLayoutOptions(blocks2, sectionMetadata) {
328901
329427
  const defaults2 = this.#computeDefaultLayoutDefaults();
328902
329428
  const firstSection = blocks2?.find((block) => block.kind === "sectionBreak" && block?.attrs?.isFirstSection);
@@ -328960,7 +329486,7 @@ function print() { __p += __j.call(arguments, '') }
328960
329486
  };
328961
329487
  }
328962
329488
  this.#hiddenHost.style.width = `${pageSize.w}px`;
328963
- const alternateHeaders = Boolean(this.#editor?.converter?.pageStyles?.alternateHeaders);
329489
+ const alternateHeaders = this.#resolveAlternateHeadersFlag();
328964
329490
  return {
328965
329491
  flowMode: "paginated",
328966
329492
  pageSize,
@@ -330744,6 +331270,7 @@ function print() { __p += __j.call(arguments, '') }
330744
331270
  trackChangesAccept: check_solid_default,
330745
331271
  trackChangesReject: xmark_solid_default,
330746
331272
  cellBackground: paint_roller_solid_default,
331273
+ updateTableOfContents: rotate_right_solid_default,
330747
331274
  listRestartNumbering: list_ol_solid_default,
330748
331275
  listContinueNumbering: list_ol_solid_default,
330749
331276
  listDecreaseIndent: outdent_solid_default,
@@ -330774,6 +331301,7 @@ function print() { __p += __j.call(arguments, '') }
330774
331301
  trackChangesAccept: "Accept change",
330775
331302
  trackChangesReject: "Reject change",
330776
331303
  cellBackground: "Cell background",
331304
+ updateTableOfContents: "Update table of contents",
330777
331305
  listRestartNumbering: "Restart numbering",
330778
331306
  listContinueNumbering: "Continue numbering",
330779
331307
  listDecreaseIndent: "Decrease indent",
@@ -330884,11 +331412,11 @@ function print() { __p += __j.call(arguments, '') }
330884
331412
  ];
330885
331413
  });
330886
331414
 
330887
- // ../../packages/superdoc/dist/chunks/create-super-doc-ui-fxrCn5X_.es.js
331415
+ // ../../packages/superdoc/dist/chunks/create-super-doc-ui-DzAnOuIL.es.js
330888
331416
  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();
331417
+ var init_create_super_doc_ui_DzAnOuIL_es = __esm(() => {
331418
+ init_SuperConverter_BInxZk0I_es();
331419
+ init_create_headless_toolbar_rUh3xIsa_es();
330892
331420
  MOD_ALIASES = new Set([
330893
331421
  "Mod",
330894
331422
  "Meta",
@@ -330930,16 +331458,16 @@ var init_zipper_BxRAi0_5_es = __esm(() => {
330930
331458
 
330931
331459
  // ../../packages/superdoc/dist/super-editor.es.js
330932
331460
  var init_super_editor_es = __esm(() => {
330933
- init_src_BLxaw1d3_es();
330934
- init_SuperConverter_BecdrRIX_es();
331461
+ init_src_CMq87UyB_es();
331462
+ init_SuperConverter_BInxZk0I_es();
330935
331463
  init_jszip_C49i9kUs_es();
330936
331464
  init_xml_js_CqGKpaft_es();
330937
- init_create_headless_toolbar_DCeIAH_W_es();
331465
+ init_create_headless_toolbar_rUh3xIsa_es();
330938
331466
  init_constants_DrU4EASo_es();
330939
331467
  init_dist_B8HfvhaK_es();
330940
331468
  init_unified_Dsuw2be5_es();
330941
331469
  init_DocxZipper_Dh4RtvcE_es();
330942
- init_create_super_doc_ui_fxrCn5X__es();
331470
+ init_create_super_doc_ui_DzAnOuIL_es();
330943
331471
  init_ui_CGB3qmy3_es();
330944
331472
  init_eventemitter3_UwU_CLPU_es();
330945
331473
  init_errors_C_DoKMoN_es();
@@ -331330,7 +331858,9 @@ function deriveIncludePageNumbers2(omitRange, outlineLevels) {
331330
331858
  return !fullyCovered;
331331
331859
  }
331332
331860
  function deriveTabLeader2(separator) {
331333
- if (!separator)
331861
+ if (separator === undefined)
331862
+ return;
331863
+ if (separator === "")
331334
331864
  return "none";
331335
331865
  const leader = SEPARATOR_TO_TAB_LEADER2[separator];
331336
331866
  return leader;
@@ -331344,7 +331874,8 @@ function parseTocInstruction2(instruction) {
331344
331874
  SWITCH_PATTERN2.lastIndex = 0;
331345
331875
  while ((match2 = SWITCH_PATTERN2.exec(instruction)) !== null) {
331346
331876
  const switchChar = match2[1].toLowerCase();
331347
- const arg = match2[2] ?? "";
331877
+ const rawArg = match2[2];
331878
+ const arg = rawArg ?? "";
331348
331879
  switch (switchChar) {
331349
331880
  case "o": {
331350
331881
  const range = parseLevelRange2(arg);
@@ -331378,8 +331909,8 @@ function parseTocInstruction2(instruction) {
331378
331909
  break;
331379
331910
  }
331380
331911
  case "p":
331381
- if (arg)
331382
- display.separator = arg;
331912
+ if (rawArg !== undefined)
331913
+ display.separator = rawArg;
331383
331914
  break;
331384
331915
  case "t":
331385
331916
  if (arg)
@@ -331451,7 +331982,7 @@ function serializeTocInstruction2(config3) {
331451
331982
  if (display.omitPageNumberLevels) {
331452
331983
  parts.push(`\\n "${display.omitPageNumberLevels.from}-${display.omitPageNumberLevels.to}"`);
331453
331984
  }
331454
- if (display.separator) {
331985
+ if (display.separator !== undefined) {
331455
331986
  parts.push(`\\p "${display.separator}"`);
331456
331987
  }
331457
331988
  if (preserved.captionType) {
@@ -331512,7 +332043,7 @@ function applyTocPatch2(existing, patch3) {
331512
332043
  }
331513
332044
  if (patch3.tabLeader !== undefined) {
331514
332045
  if (patch3.tabLeader === "none") {
331515
- delete newDisplay.separator;
332046
+ newDisplay.separator = "";
331516
332047
  } else {
331517
332048
  newDisplay.separator = TAB_LEADER_TO_SEPARATOR2[patch3.tabLeader];
331518
332049
  }
@@ -409843,13 +410374,12 @@ function preProcessPageRefInstruction2(nodesToCombine, instrText) {
409843
410374
  }
409844
410375
 
409845
410376
  // ../../packages/super-editor/src/editors/v1/core/super-converter/field-references/fld-preprocessors/hyperlink-preprocessor.js
409846
- function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
410377
+ function resolveHyperlinkAttributes2(instruction, docx) {
409847
410378
  const urlMatch = instruction.match(/HYPERLINK\s+"([^"]+)"/);
409848
- let linkAttributes;
409849
410379
  if (urlMatch && urlMatch.length >= 2) {
409850
410380
  const url2 = urlMatch[1];
409851
- const rels = docx["word/_rels/document.xml.rels"];
409852
- const relationships = rels?.elements.find((el) => el.name === "Relationships");
410381
+ const rels = docx?.["word/_rels/document.xml.rels"];
410382
+ const relationships = rels?.elements?.find((el) => el.name === "Relationships");
409853
410383
  if (relationships) {
409854
410384
  const rId = "rId" + generateDocxRandomId2();
409855
410385
  relationships.elements.push({
@@ -409862,30 +410392,34 @@ function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
409862
410392
  TargetMode: "External"
409863
410393
  }
409864
410394
  });
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
- }
410395
+ return { "r:id": rId };
409882
410396
  }
409883
- if (parsedSwitches.new_window) {
409884
- parsedSwitches["w:tgtFrame"] = "_blank";
409885
- delete parsedSwitches.new_window;
410397
+ return { "w:anchor": url2 };
410398
+ }
410399
+ const availableSwitches = {
410400
+ "w:anchor": /(?:\\)?l "(?<value>[^"]+)"/,
410401
+ new_window: /(?:\\n|\n)/,
410402
+ "w:tgtFrame": /(?:\\t|\t) "(?<value>[^"]+)"/,
410403
+ "w:tooltip": /(?:\\)?o "(?<value>[^"]+)"/
410404
+ };
410405
+ const parsedSwitches = {};
410406
+ for (const [key2, pattern] of Object.entries(availableSwitches)) {
410407
+ const match2 = instruction.match(pattern);
410408
+ if (match2) {
410409
+ parsedSwitches[key2] = match2.groups?.value || true;
409886
410410
  }
409887
- linkAttributes = { ...parsedSwitches };
409888
410411
  }
410412
+ if (parsedSwitches.new_window) {
410413
+ parsedSwitches["w:tgtFrame"] = "_blank";
410414
+ delete parsedSwitches.new_window;
410415
+ }
410416
+ if (Object.keys(parsedSwitches).length === 0) {
410417
+ return null;
410418
+ }
410419
+ return { ...parsedSwitches };
410420
+ }
410421
+ function preProcessHyperlinkInstruction2(nodesToCombine, instruction, docx) {
410422
+ const linkAttributes = resolveHyperlinkAttributes2(instruction, docx) ?? {};
409889
410423
  return [
409890
410424
  {
409891
410425
  name: "w:hyperlink",
@@ -410157,10 +410691,11 @@ var init_fld_preprocessors = __esm(() => {
410157
410691
  });
410158
410692
 
410159
410693
  // ../../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);
410694
+ 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
410695
  var init_trackChangeElements = __esm(() => {
410162
410696
  TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:del", "w:ins", "w:moveFrom", "w:moveTo"]);
410163
410697
  TRANSLATED_TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:del", "w:ins"]);
410698
+ CONSTRUCTIVE_TRACK_CHANGE_ELEMENT_NAMES2 = new Set(["w:ins", "w:moveTo"]);
410164
410699
  });
410165
410700
 
410166
410701
  // ../../packages/super-editor/src/editors/v1/core/super-converter/field-references/preProcessNodesForFldChar.js
@@ -410184,6 +410719,8 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410184
410719
  if (!currentField.preserveRaw) {
410185
410720
  const combinedResult = _processCombinedNodesForFldChar2(collectedNodes, currentField.instrText.trim(), docx, currentField.instructionTokens, fieldRunRPr);
410186
410721
  outputNodes = combinedResult.handled ? combinedResult.nodes : rawCollectedNodes;
410722
+ } else if (currentField.preserveRawConstructive) {
410723
+ applyConstructiveFieldInterpretation2(outputNodes, currentField.instrText.trim(), docx);
410187
410724
  }
410188
410725
  if (collectedNodesStack.length === 0) {
410189
410726
  processedNodes.push(...outputNodes);
@@ -410303,6 +410840,9 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410303
410840
  if (fieldInfo.preserveRaw || isTrackChangeElement2(node4)) {
410304
410841
  fieldInfo.preserveRaw = true;
410305
410842
  }
410843
+ if (isConstructiveTrackChangeElement2(node4)) {
410844
+ fieldInfo.preserveRawConstructive = true;
410845
+ }
410306
410846
  currentFieldStack.push(fieldInfo);
410307
410847
  collectedNodesStack.push([node4]);
410308
410848
  const rawStack = [rawNode];
@@ -410322,6 +410862,9 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410322
410862
  if (shouldPreserveRaw) {
410323
410863
  currentFieldStack[currentFieldStack.length - 1].preserveRaw = true;
410324
410864
  }
410865
+ if (isConstructiveTrackChangeElement2(node4)) {
410866
+ currentFieldStack[currentFieldStack.length - 1].preserveRawConstructive = true;
410867
+ }
410325
410868
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
410326
410869
  captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
410327
410870
  finalizeField();
@@ -410370,6 +410913,83 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410370
410913
  };
410371
410914
  }
410372
410915
  return { nodes: nodesToCombine, handled: false };
410916
+ }, applyConstructiveFieldInterpretation2 = (rawNodes, instrText, docx) => {
410917
+ const instructionType = instrText.split(" ")[0];
410918
+ if (instructionType !== "HYPERLINK")
410919
+ return;
410920
+ const linkAttributes = resolveHyperlinkAttributes2(instrText, docx);
410921
+ if (!linkAttributes)
410922
+ return;
410923
+ let visible = false;
410924
+ const walk = (parent) => {
410925
+ if (!parent || !Array.isArray(parent.elements))
410926
+ return;
410927
+ const next2 = [];
410928
+ let pendingHyperlinkRuns = null;
410929
+ const flushHyperlink = () => {
410930
+ if (!pendingHyperlinkRuns || pendingHyperlinkRuns.length === 0) {
410931
+ pendingHyperlinkRuns = null;
410932
+ return;
410933
+ }
410934
+ next2.push({
410935
+ type: "element",
410936
+ name: "w:hyperlink",
410937
+ attributes: linkAttributes,
410938
+ elements: pendingHyperlinkRuns
410939
+ });
410940
+ pendingHyperlinkRuns = null;
410941
+ };
410942
+ for (const child of parent.elements) {
410943
+ if (!child)
410944
+ continue;
410945
+ if (child.name === "w:p" || child.name === "w:ins" || child.name === "w:moveTo") {
410946
+ flushHyperlink();
410947
+ walk(child);
410948
+ next2.push(child);
410949
+ continue;
410950
+ }
410951
+ if (child.name === "w:r") {
410952
+ const fldChar = child.elements?.find((el) => el?.name === "w:fldChar");
410953
+ const fldType = fldChar?.attributes?.["w:fldCharType"];
410954
+ if (fldType === "separate") {
410955
+ flushHyperlink();
410956
+ visible = true;
410957
+ next2.push(child);
410958
+ continue;
410959
+ }
410960
+ if (fldType === "end") {
410961
+ flushHyperlink();
410962
+ visible = false;
410963
+ next2.push(child);
410964
+ continue;
410965
+ }
410966
+ if (fldType === "begin") {
410967
+ flushHyperlink();
410968
+ next2.push(child);
410969
+ continue;
410970
+ }
410971
+ const hasInstrText = child.elements?.some((el) => el?.name === "w:instrText");
410972
+ if (hasInstrText) {
410973
+ flushHyperlink();
410974
+ next2.push(child);
410975
+ continue;
410976
+ }
410977
+ if (visible) {
410978
+ if (!pendingHyperlinkRuns)
410979
+ pendingHyperlinkRuns = [];
410980
+ pendingHyperlinkRuns.push(child);
410981
+ continue;
410982
+ }
410983
+ next2.push(child);
410984
+ continue;
410985
+ }
410986
+ flushHyperlink();
410987
+ next2.push(child);
410988
+ }
410989
+ flushHyperlink();
410990
+ parent.elements = next2;
410991
+ };
410992
+ rawNodes.forEach(walk);
410373
410993
  }, extractFieldRunRPr2 = (node4) => {
410374
410994
  const rPrNode = node4?.elements?.find((el) => el.name === "w:rPr");
410375
410995
  if (!rPrNode?.elements?.length) {
@@ -410442,6 +411062,7 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
410442
411062
  };
410443
411063
  var init_preProcessNodesForFldChar = __esm(() => {
410444
411064
  init_fld_preprocessors();
411065
+ init_hyperlink_preprocessor();
410445
411066
  init_trackChangeElements();
410446
411067
  SKIP_FIELD_PROCESSING_NODE_NAMES2 = new Set(["w:drawing", "w:pict"]);
410447
411068
  FIELD_CONTROL_ELEMENT_NAMES2 = new Set(["w:fldChar"]);
@@ -411383,6 +412004,26 @@ function extractTextFromTextBox2(textBoxContent, bodyPr, params3 = {}) {
411383
412004
  } else if (el.name === "sd:totalPageNumber") {
411384
412005
  hasText = true;
411385
412006
  appendFieldPart("NUMPAGES", el, paragraphProperties);
412007
+ } else if (el.name === "w:drawing") {
412008
+ const inline = el.elements?.find((child) => child?.name === "wp:inline");
412009
+ if (inline) {
412010
+ const imagePm = handleImageNode3(inline, { ...params3, nodes: [el] }, false);
412011
+ if (imagePm?.attrs?.src && imagePm.attrs.hidden !== true) {
412012
+ hasText = true;
412013
+ const sizeAttr = imagePm.attrs.size || imagePm.attrs;
412014
+ textParts.push({
412015
+ text: "",
412016
+ formatting,
412017
+ kind: "image",
412018
+ src: imagePm.attrs.src,
412019
+ extension: imagePm.attrs.extension,
412020
+ rId: imagePm.attrs.rId,
412021
+ width: typeof sizeAttr?.width === "number" ? sizeAttr.width : undefined,
412022
+ height: typeof sizeAttr?.height === "number" ? sizeAttr.height : undefined,
412023
+ alt: imagePm.attrs.alt || ""
412024
+ });
412025
+ }
412026
+ }
411386
412027
  }
411387
412028
  });
411388
412029
  return hasText;
@@ -421634,13 +422275,23 @@ var detectDocumentOrigin2 = (docx) => {
421634
422275
  if (rawValue == null)
421635
422276
  return true;
421636
422277
  return ST_ON_OFF_TRUE_VALUES2.has(String(rawValue).trim().toLowerCase());
422278
+ }, resolveEvenAndOddHeadersFromSettingsPart2 = (settingsPart) => {
422279
+ if (!settingsPart || typeof settingsPart !== "object")
422280
+ return null;
422281
+ const part = settingsPart;
422282
+ const settingsRoot = part.name === "w:settings" ? part : part.elements?.find((entry) => entry?.name === "w:settings");
422283
+ if (!settingsRoot?.elements?.length)
422284
+ return null;
422285
+ const evenOdd = settingsRoot.elements.find((el) => el?.name === "w:evenAndOddHeaders");
422286
+ if (!evenOdd)
422287
+ return null;
422288
+ return isStOnOffEnabled2(evenOdd);
421637
422289
  }, isAlternatingHeadersOddEven2 = (docx) => {
421638
422290
  const settings = docx["word/settings.xml"];
421639
- if (!settings || !settings.elements?.length)
422291
+ if (!settings)
421640
422292
  return false;
421641
- const { elements = [] } = settings.elements[0];
421642
- const evenOdd = elements.find((el) => el.name === "w:evenAndOddHeaders");
421643
- return isStOnOffEnabled2(evenOdd);
422293
+ const resolved = resolveEvenAndOddHeadersFromSettingsPart2(settings);
422294
+ return resolved ?? false;
421644
422295
  };
421645
422296
  var init_docxImporter = __esm(() => {
421646
422297
  init_docxHelper();
@@ -453939,27 +454590,46 @@ function dispatchTransaction2(editor, tr) {
453939
454590
  var TOC_BOOKMARK_PREFIX2 = "_Toc";
453940
454591
 
453941
454592
  // ../../packages/super-editor/src/editors/v1/document-api-adapters/helpers/toc-entry-builder.ts
454593
+ function sanitizeSourceMark2(mark2) {
454594
+ if (!mark2?.type)
454595
+ return null;
454596
+ if (mark2.type === "textStyle") {
454597
+ const attrs = mark2.attrs ?? {};
454598
+ const kept = {};
454599
+ for (const key2 of Object.keys(attrs)) {
454600
+ if (TEXT_STYLE_ALLOWED_ATTRS2.has(key2) && attrs[key2] != null)
454601
+ kept[key2] = attrs[key2];
454602
+ }
454603
+ return Object.keys(kept).length > 0 ? { type: "textStyle", attrs: kept } : null;
454604
+ }
454605
+ if (!ALLOWED_SOURCE_MARK_TYPES2.has(mark2.type))
454606
+ return null;
454607
+ return mark2.attrs && Object.keys(mark2.attrs).length > 0 ? { type: mark2.type, attrs: { ...mark2.attrs } } : { type: mark2.type };
454608
+ }
453942
454609
  function collectTocSources2(doc6, config44) {
453943
454610
  const sources = [];
453944
454611
  const { outlineLevels, useAppliedOutlineLevel, tcFieldIdentifier, tcFieldLevels } = config44.source;
453945
454612
  const useApplied = useAppliedOutlineLevel ?? false;
453946
454613
  const collectTcFields = tcFieldIdentifier !== undefined || tcFieldLevels !== undefined;
453947
454614
  let currentParagraphSdBlockId;
453948
- doc6.descendants((node4, _pos) => {
454615
+ doc6.descendants((node4, pos) => {
453949
454616
  if (node4.type.name === "tableOfContents")
453950
454617
  return false;
453951
454618
  if (node4.type.name === "paragraph") {
453952
454619
  const attrs = node4.attrs;
453953
454620
  const paragraphProps = attrs?.paragraphProperties;
453954
454621
  const styleId = paragraphProps?.styleId;
453955
- const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId;
454622
+ const sdBlockId = attrs?.sdBlockId ?? attrs?.paraId ?? buildFallbackBlockNodeId2("paragraph", pos);
453956
454623
  currentParagraphSdBlockId = sdBlockId;
453957
454624
  if (!sdBlockId)
453958
454625
  return true;
454626
+ const text9 = flattenText2(node4);
454627
+ if (text9.trim().length === 0)
454628
+ return true;
453959
454629
  if (outlineLevels) {
453960
454630
  const headingLevel = getHeadingLevel2(styleId);
453961
454631
  if (headingLevel != null && headingLevel >= outlineLevels.from && headingLevel <= outlineLevels.to) {
453962
- sources.push({ text: flattenText2(node4), level: headingLevel, sdBlockId, kind: "heading" });
454632
+ sources.push({ text: text9, segments: extractTextSegments2(node4), level: headingLevel, sdBlockId, kind: "heading" });
453963
454633
  return true;
453964
454634
  }
453965
454635
  }
@@ -453969,7 +454639,13 @@ function collectTocSources2(doc6, config44) {
453969
454639
  if (rawOutlineLevel != null) {
453970
454640
  const tocLevel = rawOutlineLevel + 1;
453971
454641
  if (tocLevel >= effectiveLevels.from && tocLevel <= effectiveLevels.to) {
453972
- sources.push({ text: flattenText2(node4), level: tocLevel, sdBlockId, kind: "appliedOutline" });
454642
+ sources.push({
454643
+ text: text9,
454644
+ segments: extractTextSegments2(node4),
454645
+ level: tocLevel,
454646
+ sdBlockId,
454647
+ kind: "appliedOutline"
454648
+ });
453973
454649
  return true;
453974
454650
  }
453975
454651
  }
@@ -454009,54 +454685,79 @@ function flattenText2(node4) {
454009
454685
  });
454010
454686
  return text9;
454011
454687
  }
454012
- function buildTocEntryParagraphs2(sources, config44) {
454013
- return sources.map((source) => buildEntryParagraph2(source, config44));
454688
+ function extractTextSegments2(node4) {
454689
+ const segments = [];
454690
+ node4.descendants((child) => {
454691
+ if (!child.isText || !child.text)
454692
+ return true;
454693
+ const marks = [];
454694
+ for (const mark2 of child.marks ?? []) {
454695
+ const raw = { type: mark2.type?.name ?? "" };
454696
+ if (mark2.attrs && Object.keys(mark2.attrs).length > 0)
454697
+ raw.attrs = { ...mark2.attrs };
454698
+ const sanitized = sanitizeSourceMark2(raw);
454699
+ if (sanitized)
454700
+ marks.push(sanitized);
454701
+ }
454702
+ const last2 = segments[segments.length - 1];
454703
+ if (last2 && marksEqual4(last2.marks, marks)) {
454704
+ last2.text += child.text;
454705
+ } else {
454706
+ segments.push(marks.length > 0 ? { text: child.text, marks } : { text: child.text });
454707
+ }
454708
+ return true;
454709
+ });
454710
+ return segments;
454711
+ }
454712
+ function marksEqual4(a2, b2) {
454713
+ const aLen = a2?.length ?? 0;
454714
+ const bLen = b2?.length ?? 0;
454715
+ if (aLen !== bLen)
454716
+ return false;
454717
+ if (aLen === 0)
454718
+ return true;
454719
+ return JSON.stringify(a2) === JSON.stringify(b2);
454720
+ }
454721
+ function buildTocEntryParagraphs2(sources, config44, options = {}) {
454722
+ return sources.map((source) => buildEntryParagraph2(source, config44, options));
454014
454723
  }
454015
- function buildEntryParagraph2(source, config44) {
454724
+ function asRun2(children) {
454725
+ return { type: "run", content: children };
454726
+ }
454727
+ function buildEntryParagraph2(source, config44, options = {}) {
454016
454728
  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);
454729
+ const linkMark = display.hyperlinks ? { type: "link", attrs: { anchor: generateTocBookmarkName2(source.sdBlockId), rId: null, history: true } } : undefined;
454730
+ const segments = source.segments && source.segments.length > 0 ? source.segments : [{ text: source.text || " " }];
454731
+ const titleTextNodes = segments.map((segment) => {
454732
+ const sourceMarks = (segment.marks ?? []).map((m2) => sanitizeSourceMark2(m2)).filter((m2) => m2 !== null);
454733
+ const marks = [...sourceMarks];
454734
+ if (linkMark)
454735
+ marks.push(linkMark);
454736
+ const node4 = { type: "text", text: segment.text || " " };
454737
+ if (marks.length > 0)
454738
+ node4.marks = marks;
454739
+ return node4;
454740
+ });
454741
+ const content5 = [asRun2(titleTextNodes)];
454035
454742
  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;
454743
+ const omitPageNumber = Boolean(omitRange && source.level >= omitRange.from && source.level <= omitRange.to || source.omitPageNumber);
454039
454744
  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
- });
454745
+ content5.push(asRun2([display.separator ? { type: "text", text: display.separator } : { type: "tab" }]));
454746
+ const resolvedPage = options.pageMap?.get(source.sdBlockId);
454747
+ content5.push(asRun2([
454748
+ {
454749
+ type: "text",
454750
+ text: resolvedPage != null ? String(resolvedPage) : "0",
454751
+ marks: [{ type: "tocPageNumber" }]
454752
+ }
454753
+ ]));
454050
454754
  }
454051
- const paragraphProperties = {
454052
- styleId: `TOC${source.level}`
454053
- };
454755
+ const paragraphProperties = { styleId: `TOC${source.level}` };
454054
454756
  const rightAlign = display.rightAlignPageNumbers !== false;
454055
454757
  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
- ];
454758
+ const leader = display.tabLeader === "none" ? undefined : display.tabLeader && TAB_LEADER_MAP2[display.tabLeader] || "dot";
454759
+ const pos = options.tabPos ?? DEFAULT_RIGHT_TAB_POS2;
454760
+ paragraphProperties.tabStops = [{ tab: { tabType: "right", pos, ...leader ? { leader } : {} } }];
454060
454761
  }
454061
454762
  return {
454062
454763
  type: "paragraph",
@@ -454068,10 +454769,13 @@ function buildEntryParagraph2(source, config44) {
454068
454769
  content: content5
454069
454770
  };
454070
454771
  }
454071
- var DEFAULT_RIGHT_TAB_POS2 = 9350, TAB_LEADER_MAP2;
454772
+ var ALLOWED_SOURCE_MARK_TYPES2, TEXT_STYLE_ALLOWED_ATTRS2, DEFAULT_RIGHT_TAB_POS2 = 9350, TAB_LEADER_MAP2;
454072
454773
  var init_toc_entry_builder = __esm(() => {
454073
454774
  init_tc_switches();
454074
454775
  init_node_address_resolver();
454776
+ init_deterministic_node_id();
454777
+ ALLOWED_SOURCE_MARK_TYPES2 = new Set(["bold", "italic", "underline", "color", "highlight", "fontFamily"]);
454778
+ TEXT_STYLE_ALLOWED_ATTRS2 = new Set(["fontFamily"]);
454075
454779
  TAB_LEADER_MAP2 = {
454076
454780
  dot: "dot",
454077
454781
  hyphen: "hyphen",
@@ -454184,6 +454888,39 @@ function withRightAlign2(config44, rightAlignPageNumbers) {
454184
454888
  return config44;
454185
454889
  return { ...config44, display: { ...config44.display, rightAlignPageNumbers } };
454186
454890
  }
454891
+ function stripTocPageNumberFromNode2(node4) {
454892
+ if (!node4 || typeof node4 !== "object")
454893
+ return { node: node4, changed: false };
454894
+ const typedNode = node4;
454895
+ let changed = false;
454896
+ let next2 = typedNode;
454897
+ if (Array.isArray(typedNode.marks)) {
454898
+ const filtered = typedNode.marks.filter((mark2) => mark2?.type !== "tocPageNumber");
454899
+ if (filtered.length !== typedNode.marks.length) {
454900
+ changed = true;
454901
+ if (filtered.length === 0) {
454902
+ const { marks: _removed, ...rest } = next2;
454903
+ next2 = rest;
454904
+ } else {
454905
+ next2 = { ...next2, marks: filtered };
454906
+ }
454907
+ }
454908
+ }
454909
+ if (Array.isArray(typedNode.content)) {
454910
+ let childChanged = false;
454911
+ const nextChildren = typedNode.content.map((child) => {
454912
+ const result = stripTocPageNumberFromNode2(child);
454913
+ if (result.changed)
454914
+ childChanged = true;
454915
+ return result.node;
454916
+ });
454917
+ if (childChanged) {
454918
+ changed = true;
454919
+ next2 = { ...next2, content: nextChildren };
454920
+ }
454921
+ }
454922
+ return { node: next2, changed };
454923
+ }
454187
454924
  function sanitizeTocContentForSchema2(content5, editor) {
454188
454925
  if (editor.state.schema?.marks?.tocPageNumber)
454189
454926
  return content5;
@@ -454193,31 +454930,58 @@ function sanitizeTocContentForSchema2(content5, editor) {
454193
454930
  return paragraph4;
454194
454931
  let changed = false;
454195
454932
  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 };
454933
+ const result = stripTocPageNumberFromNode2(node4);
454934
+ if (result.changed)
454935
+ changed = true;
454936
+ return result.node;
454211
454937
  });
454212
454938
  return changed ? { ...paragraph4, content: sanitizedContent } : paragraph4;
454213
454939
  });
454214
454940
  }
454215
- function materializeTocContent2(doc6, config44, editor) {
454941
+ function materializeTocContent2(doc6, config44, editor, options = {}) {
454216
454942
  const sources = collectTocSources2(doc6, config44);
454217
- const entryParagraphs = buildTocEntryParagraphs2(sources, config44);
454943
+ const entryParagraphs = buildTocEntryParagraphs2(sources, config44, options);
454218
454944
  const content5 = entryParagraphs.length > 0 ? entryParagraphs : NO_ENTRIES_PLACEHOLDER2;
454219
454945
  return { content: sanitizeTocContentForSchema2(content5, editor), sources };
454220
454946
  }
454947
+ function findFirstTocEntryParagraph2(node4) {
454948
+ let entry;
454949
+ node4.forEach((paragraph4) => {
454950
+ if (entry || paragraph4.type.name !== "paragraph")
454951
+ return;
454952
+ const styleId = paragraph4.attrs?.paragraphProperties?.styleId;
454953
+ if (styleId && TOC_ENTRY_STYLE_RE2.test(styleId))
454954
+ entry = paragraph4;
454955
+ });
454956
+ return entry;
454957
+ }
454958
+ function readExistingTocTabPos2(node4) {
454959
+ const entry = findFirstTocEntryParagraph2(node4) ?? node4.firstChild ?? undefined;
454960
+ const tabStops = entry?.attrs?.paragraphProperties?.tabStops;
454961
+ const pos = tabStops?.find((t) => t?.tab?.tabType === "right")?.tab?.pos;
454962
+ return typeof pos === "number" ? pos : undefined;
454963
+ }
454964
+ function readExistingTocTrailingParagraph2(node4) {
454965
+ const last2 = node4.lastChild;
454966
+ if (!last2 || last2.type.name !== "paragraph")
454967
+ return;
454968
+ const styleId = last2.attrs?.paragraphProperties?.styleId;
454969
+ if (styleId && TOC_ENTRY_STYLE_RE2.test(styleId))
454970
+ return;
454971
+ let hasPrecedingEntry = false;
454972
+ node4.forEach((child) => {
454973
+ if (hasPrecedingEntry || child === last2)
454974
+ return;
454975
+ if (child.type.name !== "paragraph")
454976
+ return;
454977
+ const childStyleId = child.attrs?.paragraphProperties?.styleId;
454978
+ if (childStyleId && TOC_ENTRY_STYLE_RE2.test(childStyleId))
454979
+ hasPrecedingEntry = true;
454980
+ });
454981
+ if (!hasPrecedingEntry)
454982
+ return;
454983
+ return typeof last2.toJSON === "function" ? last2.toJSON() : undefined;
454984
+ }
454221
454985
  function tocConfigureWrapper2(editor, input2, options) {
454222
454986
  rejectTrackedMode2("toc.configure", options);
454223
454987
  const resolved = resolveTocTarget2(editor.state.doc, input2.target);
@@ -454226,7 +454990,12 @@ function tocConfigureWrapper2(editor, input2, options) {
454226
454990
  const instruction = serializeTocInstruction2(patched);
454227
454991
  const rightAlignChanged = input2.patch.rightAlignPageNumbers !== undefined && input2.patch.rightAlignPageNumbers !== resolved.node.attrs?.rightAlignPageNumbers;
454228
454992
  const effectiveRightAlign = input2.patch.rightAlignPageNumbers ?? resolved.node.attrs?.rightAlignPageNumbers;
454229
- const { content: nextContent, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(patched, effectiveRightAlign), editor);
454993
+ const { content: rebuiltEntries, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(patched, effectiveRightAlign), editor, {
454994
+ pageMap: getPageMap2(editor) ?? undefined,
454995
+ tabPos: readExistingTocTabPos2(resolved.node)
454996
+ });
454997
+ const trailing = readExistingTocTrailingParagraph2(resolved.node);
454998
+ const nextContent = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
454230
454999
  if (areTocConfigsEqual2(currentConfig, patched) && !rightAlignChanged) {
454231
455000
  return tocFailure2("NO_OP", "Configuration patch produced no change.");
454232
455001
  }
@@ -454279,7 +455048,12 @@ function tocUpdateAll2(editor, input2, options) {
454279
455048
  const resolved = resolveTocTarget2(editor.state.doc, input2.target);
454280
455049
  const config44 = parseTocInstruction2(resolved.node.attrs?.instruction ?? "");
454281
455050
  const rightAlign = resolved.node.attrs?.rightAlignPageNumbers;
454282
- const { content: content5, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(config44, rightAlign), editor);
455051
+ const { content: rebuiltEntries, sources } = materializeTocContent2(editor.state.doc, withRightAlign2(config44, rightAlign), editor, {
455052
+ pageMap: getPageMap2(editor) ?? undefined,
455053
+ tabPos: readExistingTocTabPos2(resolved.node)
455054
+ });
455055
+ const trailing = readExistingTocTrailingParagraph2(resolved.node);
455056
+ const content5 = trailing ? [...rebuiltEntries, trailing] : rebuiltEntries;
454283
455057
  if (isTocContentUnchanged2(resolved.node, content5)) {
454284
455058
  return tocFailure2("NO_OP", "TOC update produced no change.");
454285
455059
  }
@@ -454369,24 +455143,30 @@ function buildPageNumberUpdatedContent2(tocNode, pageMap) {
454369
455143
  }
454370
455144
  const tocSourceId = child.attrs?.tocSourceId;
454371
455145
  const childJson = child.toJSON();
454372
- const content5 = childJson.content ?? [];
454373
455146
  let paragraphChanged = false;
454374
- const updatedContentArray = content5.map((node4) => {
455147
+ const visit3 = (node4) => {
454375
455148
  const marks = node4.marks;
454376
455149
  const hasTocPageNumberMark = marks?.some((m2) => m2.type === "tocPageNumber");
454377
- if (!hasTocPageNumberMark)
454378
- return node4;
454379
- hasPageNumberMarks = true;
454380
- if (!tocSourceId)
455150
+ if (hasTocPageNumberMark) {
455151
+ hasPageNumberMarks = true;
455152
+ if (!tocSourceId)
455153
+ return node4;
455154
+ const pageNumber = pageMap.get(tocSourceId);
455155
+ const newText = pageNumber !== undefined ? String(pageNumber) : "??";
455156
+ if (node4.text !== newText) {
455157
+ paragraphChanged = true;
455158
+ return { ...node4, text: newText };
455159
+ }
454381
455160
  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
455161
  }
454388
- return node4;
454389
- });
455162
+ const nested = node4.content;
455163
+ if (!Array.isArray(nested) || nested.length === 0)
455164
+ return node4;
455165
+ const visited = nested.map(visit3);
455166
+ const replaced = visited.some((next2, idx) => next2 !== nested[idx]);
455167
+ return replaced ? { ...node4, content: visited } : node4;
455168
+ };
455169
+ const updatedContentArray = (childJson.content ?? []).map(visit3);
454390
455170
  if (paragraphChanged) {
454391
455171
  anyChanged = true;
454392
455172
  updatedContent.push({ ...childJson, content: updatedContentArray });
@@ -454480,7 +455260,7 @@ function createTableOfContentsWrapper2(editor, input2, options) {
454480
455260
  const postMutationId = resolvePostMutationTocId2(editor.state.doc, sdBlockId);
454481
455261
  return { success: true, toc: buildTocAddress2(postMutationId) };
454482
455262
  }
454483
- var NO_ENTRIES_PLACEHOLDER2;
455263
+ var NO_ENTRIES_PLACEHOLDER2, TOC_ENTRY_STYLE_RE2;
454484
455264
  var init_toc_wrappers = __esm(() => {
454485
455265
  init_wrapper();
454486
455266
  init_src();
@@ -454500,6 +455280,7 @@ var init_toc_wrappers = __esm(() => {
454500
455280
  content: [{ type: "text", text: "No table of contents entries found." }]
454501
455281
  }
454502
455282
  ];
455283
+ TOC_ENTRY_STYLE_RE2 = /^TOC[1-9]$/;
454503
455284
  });
454504
455285
 
454505
455286
  // ../../packages/super-editor/src/editors/v1/document-api-adapters/helpers/toc-entry-node-id.ts
@@ -458207,7 +458988,8 @@ function nodePositionToPosition2(doc6, pos) {
458207
458988
  const node4 = resolved.node(depth);
458208
458989
  const blockId = node4.attrs?.sdBlockId;
458209
458990
  if (blockId) {
458210
- return { blockId, offset: pos - resolved.start(depth) };
458991
+ const blockPos = resolved.start(depth) - 1;
458992
+ return { blockId, offset: pmPositionToTextOffset2(node4, blockPos, pos) };
458211
458993
  }
458212
458994
  }
458213
458995
  return { blockId: "", offset: pos };
@@ -458982,7 +459764,8 @@ function pmPosToPosition2(doc6, pos) {
458982
459764
  const node4 = resolved.node(depth);
458983
459765
  const blockId = node4.attrs?.sdBlockId;
458984
459766
  if (blockId) {
458985
- return { blockId, offset: pos - resolved.start(depth) };
459767
+ const blockPos = resolved.start(depth) - 1;
459768
+ return { blockId, offset: pmPositionToTextOffset2(node4, blockPos, pos) };
458986
459769
  }
458987
459770
  }
458988
459771
  return { blockId: "", offset: pos };