@superdoc-dev/cli 0.2.0-next.130 → 0.2.0-next.132

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 +410 -126
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -38443,7 +38443,7 @@ var init_remark_gfm_z_sDF4ss_es = __esm(() => {
38443
38443
  emptyOptions2 = {};
38444
38444
  });
38445
38445
 
38446
- // ../../packages/superdoc/dist/chunks/SuperConverter-Cw5CEerM.es.js
38446
+ // ../../packages/superdoc/dist/chunks/SuperConverter-C9IFvZwR.es.js
38447
38447
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
38448
38448
  const fieldValue = extension$1.config[field];
38449
38449
  if (typeof fieldValue === "function")
@@ -57998,24 +57998,34 @@ function translateDocumentPartObj(params) {
57998
57998
  }]
57999
57999
  };
58000
58000
  }
58001
+ function sanitizeId(id) {
58002
+ if (typeof id === "string" && id.trim() !== "")
58003
+ return id.trim();
58004
+ }
58001
58005
  function generateSdtPrForDocPartObj(attrs) {
58002
58006
  const existingDocPartObj = attrs.sdtPr?.elements?.find((el) => el.name === "w:docPartObj");
58003
58007
  const existingDocPartGallery = existingDocPartObj?.elements?.find((el) => el.name === "w:docPartGallery")?.attributes?.["w:val"];
58004
58008
  const docPartGallery = attrs.docPartGallery ?? existingDocPartGallery ?? null;
58005
- const id = attrs.id ?? attrs.sdtPr?.elements?.find((el) => el.name === "w:id")?.attributes?.["w:val"] ?? "";
58009
+ const id = sanitizeId(attrs.id ?? attrs.sdtPr?.elements?.find((el) => el.name === "w:id")?.attributes?.["w:val"]);
58006
58010
  const docPartUnique = attrs.docPartUnique ?? existingDocPartObj?.elements?.some((el) => el.name === "w:docPartUnique") ?? false;
58007
58011
  if (docPartGallery === null) {
58008
58012
  if (attrs.sdtPr)
58009
- return attrs.sdtPr;
58010
- return {
58011
- name: "w:sdtPr",
58012
- elements: [{
58013
+ return {
58014
+ ...attrs.sdtPr,
58015
+ elements: Array.isArray(attrs.sdtPr.elements) ? attrs.sdtPr.elements.filter((el) => !(el.name === "w:id" && el.attributes?.["w:val"]?.trim() === "")) : attrs.sdtPr.elements
58016
+ };
58017
+ const elements = [{
58018
+ name: "w:docPartObj",
58019
+ elements: []
58020
+ }];
58021
+ if (id != null)
58022
+ elements.unshift({
58013
58023
  name: "w:id",
58014
58024
  attributes: { "w:val": id }
58015
- }, {
58016
- name: "w:docPartObj",
58017
- elements: []
58018
- }]
58025
+ });
58026
+ return {
58027
+ name: "w:sdtPr",
58028
+ elements
58019
58029
  };
58020
58030
  }
58021
58031
  const docPartObjElements = [{
@@ -58025,12 +58035,14 @@ function generateSdtPrForDocPartObj(attrs) {
58025
58035
  if (docPartUnique)
58026
58036
  docPartObjElements.push({ name: "w:docPartUnique" });
58027
58037
  const sdtPrElements = [{
58028
- name: "w:id",
58029
- attributes: { "w:val": id }
58030
- }, {
58031
58038
  name: "w:docPartObj",
58032
58039
  elements: docPartObjElements
58033
58040
  }];
58041
+ if (id != null)
58042
+ sdtPrElements.unshift({
58043
+ name: "w:id",
58044
+ attributes: { "w:val": id }
58045
+ });
58034
58046
  if (attrs.sdtPr?.elements && Array.isArray(attrs.sdtPr.elements)) {
58035
58047
  const elementsToExclude = ["w:id", "w:docPartObj"];
58036
58048
  const passthroughElements = attrs.sdtPr.elements.filter((el) => el && el.name && !elementsToExclude.includes(el.name));
@@ -64076,11 +64088,7 @@ var isRegExp = (value) => {
64076
64088
  };
64077
64089
  }, tableOfContentsHandler = (params) => {
64078
64090
  const node3 = params.nodes[0];
64079
- const normalizedContent = normalizeDocPartContent(params.nodeListHandler.handler({
64080
- ...params,
64081
- nodes: node3.elements,
64082
- path: [...params.path || [], node3]
64083
- }));
64091
+ const normalizedContent = normalizeDocPartContent(translateTocSdtContent(node3, params));
64084
64092
  const sdtPr = params.extraParams.sdtPr;
64085
64093
  return {
64086
64094
  type: "documentPartObject",
@@ -64113,10 +64121,35 @@ var isRegExp = (value) => {
64113
64121
  sdtPr
64114
64122
  }
64115
64123
  };
64116
- }, validGalleryTypeMap, inlineNodeTypes, wrapInlineNode = (node3) => ({
64124
+ }, validGalleryTypeMap, inlineNodeTypes, SD_TOC_XML_NAME = "sd:tableOfContents", PARAGRAPH_XML_NAME = "w:p", PARAGRAPH_PROPERTIES_XML_NAME = "w:pPr", wrapInlineNode = (node3) => ({
64117
64125
  type: "paragraph",
64118
64126
  content: [node3]
64119
- }), normalizeDocPartContent = (nodes = []) => {
64127
+ }), hasMeaningfulParagraphContent = (elements = []) => elements.some((element) => element?.name && element.name !== PARAGRAPH_PROPERTIES_XML_NAME), translateNodes = (params, nodes, pathTail = []) => params.nodeListHandler.handler({
64128
+ ...params,
64129
+ nodes,
64130
+ path: [...params.path || [], ...pathTail]
64131
+ }), translateTocSdtContent = (sdtContent, params) => {
64132
+ const translatedContent = [];
64133
+ const parentPath = [sdtContent];
64134
+ (sdtContent?.elements || []).forEach((child) => {
64135
+ const childElements = Array.isArray(child?.elements) ? child.elements : [];
64136
+ const tocElements = child?.name === PARAGRAPH_XML_NAME ? childElements.filter((el) => el?.name === SD_TOC_XML_NAME) : [];
64137
+ if (tocElements.length === 0) {
64138
+ translatedContent.push(...translateNodes(params, [child], parentPath));
64139
+ return;
64140
+ }
64141
+ const remainingElements = childElements.filter((el) => el?.name !== SD_TOC_XML_NAME);
64142
+ if (hasMeaningfulParagraphContent(remainingElements))
64143
+ translatedContent.push(...translateNodes(params, [{
64144
+ ...child,
64145
+ elements: remainingElements
64146
+ }], parentPath));
64147
+ tocElements.forEach((tocElement) => {
64148
+ translatedContent.push(...translateNodes(params, [tocElement], [...parentPath, child]));
64149
+ });
64150
+ });
64151
+ return translatedContent;
64152
+ }, normalizeDocPartContent = (nodes = []) => {
64120
64153
  const normalized = [];
64121
64154
  nodes.forEach((node3) => {
64122
64155
  if (inlineNodeTypes.has(node3?.type))
@@ -68546,6 +68579,7 @@ var isRegExp = (value) => {
68546
68579
  let currentFieldStack = [];
68547
68580
  let unpairedEnd = null;
68548
68581
  let collecting = false;
68582
+ const rawNodeSourceTokens = /* @__PURE__ */ new WeakMap;
68549
68583
  const finalizeField = () => {
68550
68584
  if (collecting) {
68551
68585
  const collectedNodes = collectedNodesStack.pop().filter((n) => n !== null);
@@ -68562,16 +68596,30 @@ var isRegExp = (value) => {
68562
68596
  } else
68563
68597
  unpairedEnd = true;
68564
68598
  };
68565
- for (const node3 of nodes) {
68566
- const rawNode = carbonCopy(node3);
68599
+ const captureRawNodeForCurrentField = (rawNode, capturedRawNodes, rawSourceToken) => {
68600
+ if (rawCollectedNodesStack.length === 0)
68601
+ return;
68602
+ if (capturedRawNodes.has(rawNode))
68603
+ return;
68604
+ const currentRawStack = rawCollectedNodesStack[rawCollectedNodesStack.length - 1];
68605
+ const lastRawNode = currentRawStack[currentRawStack.length - 1];
68606
+ if (lastRawNode?.name === "w:r" && rawNode?.name === "w:r" && rawNodeSourceTokens.get(lastRawNode) === rawSourceToken && Array.isArray(lastRawNode.elements) && Array.isArray(rawNode.elements))
68607
+ lastRawNode.elements.push(...carbonCopy(rawNode.elements));
68608
+ else {
68609
+ currentRawStack.push(rawNode);
68610
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
68611
+ }
68612
+ capturedRawNodes.add(rawNode);
68613
+ };
68614
+ const processNode = (node3, rawNode, capturedRawNodes, rawSourceToken) => {
68567
68615
  collecting = collectedNodesStack.length > 0;
68568
68616
  if (shouldSkipFieldProcessing$1(node3)) {
68569
68617
  if (collecting) {
68570
68618
  collectedNodesStack[collectedNodesStack.length - 1].push(node3);
68571
- rawCollectedNodesStack[collectedNodesStack.length - 1].push(rawNode);
68619
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68572
68620
  } else
68573
68621
  processedNodes.push(node3);
68574
- continue;
68622
+ return;
68575
68623
  }
68576
68624
  const fldType = node3.elements?.find((el) => el.name === "w:fldChar")?.attributes?.["w:fldCharType"];
68577
68625
  const instrTextEl = node3.elements?.find((el) => el.name === "w:instrText");
@@ -68587,49 +68635,52 @@ var isRegExp = (value) => {
68587
68635
  rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(...processed);
68588
68636
  } else
68589
68637
  processedNodes.push(...processed);
68590
- continue;
68638
+ return;
68591
68639
  }
68592
68640
  }
68593
68641
  }
68594
68642
  if (fldType === "begin") {
68595
68643
  collectedNodesStack.push([]);
68596
- rawCollectedNodesStack.push([rawNode]);
68644
+ const rawStack = [rawNode];
68645
+ rawCollectedNodesStack.push(rawStack);
68646
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
68647
+ capturedRawNodes.add(rawNode);
68597
68648
  currentFieldStack.push({
68598
68649
  instrText: "",
68599
68650
  instructionTokens: [],
68600
68651
  afterSeparate: false
68601
68652
  });
68602
- continue;
68653
+ return;
68603
68654
  }
68604
68655
  if (collecting && currentFieldStack.length > 0) {
68605
68656
  const currentField = currentFieldStack[currentFieldStack.length - 1];
68606
68657
  if (!currentField.afterSeparate) {
68607
68658
  const instructionTokens = extractInstructionTokensFromNode(node3);
68608
68659
  if (instructionTokens.length > 0) {
68609
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68660
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68610
68661
  currentField.instructionTokens.push(...instructionTokens);
68611
68662
  const instrTextValue = instrTextEl?.elements?.[0]?.text;
68612
68663
  if (instrTextValue != null)
68613
68664
  currentField.instrText += `${instrTextValue} `;
68614
68665
  if (instructionTokens.some((token) => token.type === "tab"))
68615
68666
  currentField.instrText += "\t";
68616
- continue;
68667
+ return;
68617
68668
  }
68618
68669
  }
68619
68670
  }
68620
68671
  if (fldType === "end") {
68621
68672
  if (collecting)
68622
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68673
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68623
68674
  finalizeField();
68624
- continue;
68675
+ return;
68625
68676
  } else if (fldType === "separate") {
68626
68677
  if (collecting) {
68627
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68678
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68628
68679
  const currentField = currentFieldStack[currentFieldStack.length - 1];
68629
68680
  if (currentField)
68630
68681
  currentField.afterSeparate = true;
68631
68682
  }
68632
- continue;
68683
+ return;
68633
68684
  }
68634
68685
  if (Array.isArray(node3.elements)) {
68635
68686
  const childResult = preProcessNodesForFldChar(node3.elements, docx);
@@ -68638,22 +68689,35 @@ var isRegExp = (value) => {
68638
68689
  childResult.unpairedBegin.forEach((pendingField) => {
68639
68690
  currentFieldStack.push(pendingField.fieldInfo);
68640
68691
  collectedNodesStack.push([node3]);
68641
- rawCollectedNodesStack.push([rawNode]);
68692
+ const rawStack = [rawNode];
68693
+ rawCollectedNodesStack.push(rawStack);
68694
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
68695
+ capturedRawNodes.add(rawNode);
68642
68696
  });
68643
68697
  else if (childResult.unpairedEnd) {
68644
68698
  collectedNodesStack[collectedNodesStack.length - 1].push(node3);
68645
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68699
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68646
68700
  finalizeField();
68647
68701
  } else if (collecting) {
68648
68702
  collectedNodesStack[collectedNodesStack.length - 1].push(node3);
68649
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68703
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68650
68704
  } else
68651
68705
  processedNodes.push(node3);
68652
68706
  } else if (collecting) {
68653
68707
  collectedNodesStack[collectedNodesStack.length - 1].push(node3);
68654
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
68708
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
68655
68709
  } else
68656
68710
  processedNodes.push(node3);
68711
+ };
68712
+ for (const node3 of nodes) {
68713
+ const rawNode = carbonCopy(node3);
68714
+ const logicalNodes = expandNodeForFieldProcessing(node3);
68715
+ const rawLogicalNodes = expandNodeForFieldProcessing(rawNode);
68716
+ const capturedRawNodes = /* @__PURE__ */ new Set;
68717
+ const rawSourceToken = {};
68718
+ logicalNodes.forEach((logicalNode, index2) => {
68719
+ processNode(logicalNode, rawLogicalNodes[index2] ?? rawNode, capturedRawNodes, rawSourceToken);
68720
+ });
68657
68721
  }
68658
68722
  let unpairedBegin = null;
68659
68723
  if (collectedNodesStack.length > 0) {
@@ -68698,6 +68762,55 @@ var isRegExp = (value) => {
68698
68762
  tokens.push({ type: "tab" });
68699
68763
  });
68700
68764
  return tokens;
68765
+ }, FIELD_CONTROL_ELEMENT_NAMES, INSTRUCTION_ELEMENT_NAMES, cloneNodeWithElements = (node3, elements) => ({
68766
+ ...node3,
68767
+ elements: carbonCopy(elements)
68768
+ }), expandNodeForFieldProcessing = (node3) => {
68769
+ const elements = Array.isArray(node3?.elements) ? node3.elements : null;
68770
+ if (node3?.name !== "w:r" || !elements || elements.length === 0)
68771
+ return [node3];
68772
+ const runProperties = elements.filter((el) => el?.name === "w:rPr");
68773
+ const contentElements = elements.filter((el) => el?.name !== "w:rPr");
68774
+ const logicalNodes = [];
68775
+ let currentKind = null;
68776
+ let currentElements = [];
68777
+ const flushCurrentGroup = () => {
68778
+ if (currentElements.length === 0)
68779
+ return;
68780
+ logicalNodes.push(cloneNodeWithElements(node3, [...runProperties, ...currentElements]));
68781
+ currentElements = [];
68782
+ currentKind = null;
68783
+ };
68784
+ contentElements.forEach((element) => {
68785
+ if (!element?.name) {
68786
+ if (currentKind !== "content") {
68787
+ flushCurrentGroup();
68788
+ currentKind = "content";
68789
+ }
68790
+ currentElements.push(element);
68791
+ return;
68792
+ }
68793
+ if (FIELD_CONTROL_ELEMENT_NAMES.has(element.name)) {
68794
+ flushCurrentGroup();
68795
+ logicalNodes.push(cloneNodeWithElements(node3, [...runProperties, element]));
68796
+ return;
68797
+ }
68798
+ if (INSTRUCTION_ELEMENT_NAMES.has(element.name)) {
68799
+ if (currentKind !== "instruction") {
68800
+ flushCurrentGroup();
68801
+ currentKind = "instruction";
68802
+ }
68803
+ currentElements.push(element);
68804
+ return;
68805
+ }
68806
+ if (currentKind !== "content") {
68807
+ flushCurrentGroup();
68808
+ currentKind = "content";
68809
+ }
68810
+ currentElements.push(element);
68811
+ });
68812
+ flushCurrentGroup();
68813
+ return logicalNodes.length > 1 ? logicalNodes : [node3];
68701
68814
  }, SKIP_FIELD_PROCESSING_NODE_NAMES, shouldSkipFieldProcessing = (node3) => SKIP_FIELD_PROCESSING_NODE_NAMES.has(node3?.name), preProcessPageFieldsOnly = (nodes = [], depth = 0) => {
68702
68815
  const processedNodes = [];
68703
68816
  let i2 = 0;
@@ -74860,7 +74973,7 @@ var isRegExp = (value) => {
74860
74973
  state.kern = kernNode.attributes["w:val"];
74861
74974
  }
74862
74975
  }, SuperConverter;
74863
- var init_SuperConverter_Cw5CEerM_es = __esm(() => {
74976
+ var init_SuperConverter_C9IFvZwR_es = __esm(() => {
74864
74977
  init_rolldown_runtime_B2q5OVn9_es();
74865
74978
  init_jszip_ChlR43oI_es();
74866
74979
  init_xml_js_DLE8mr0n_es();
@@ -100489,6 +100602,8 @@ var init_SuperConverter_Cw5CEerM_es = __esm(() => {
100489
100602
  })();
100490
100603
  }))(), 1);
100491
100604
  SKIP_FIELD_PROCESSING_NODE_NAMES$1 = new Set(["w:drawing", "w:pict"]);
100605
+ FIELD_CONTROL_ELEMENT_NAMES = new Set(["w:fldChar"]);
100606
+ INSTRUCTION_ELEMENT_NAMES = new Set(["w:instrText", "w:tab"]);
100492
100607
  SKIP_FIELD_PROCESSING_NODE_NAMES = new Set(["w:drawing", "w:pict"]);
100493
100608
  HEADER_FOOTER_FILENAME_PATTERN = /^(header|footer)\d*\.xml$/i;
100494
100609
  CHART_TYPE_MAP = {
@@ -135072,7 +135187,7 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
135072
135187
  init_remark_gfm_z_sDF4ss_es();
135073
135188
  });
135074
135189
 
135075
- // ../../packages/superdoc/dist/chunks/src-BNoEv7Gv.es.js
135190
+ // ../../packages/superdoc/dist/chunks/src-BVOVss6W.es.js
135076
135191
  function deleteProps(obj, propOrProps) {
135077
135192
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
135078
135193
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -137920,6 +138035,12 @@ function createPositionTrackerPlugin() {
137920
138035
  } }
137921
138036
  });
137922
138037
  }
138038
+ function getConverter$12(editor) {
138039
+ return editor.converter;
138040
+ }
138041
+ function readTranslatedLinkedStyles(editor) {
138042
+ return getConverter$12(editor)?.translatedLinkedStyles ?? null;
138043
+ }
137923
138044
  function keyName(event) {
137924
138045
  var name = !(mac$1 && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey || ie && event.shiftKey && event.key && event.key.length == 1 || event.key == "Unidentified") && event.key || (event.shiftKey ? shift : base4)[event.keyCode] || event.key || "Unidentified";
137925
138046
  if (name == "Esc")
@@ -139799,6 +139920,7 @@ function splitBlockPatch(state, dispatch, editor) {
139799
139920
  paraId: null,
139800
139921
  textId: null
139801
139922
  };
139923
+ paragraphAttrs = clearInheritedLinkedStyleId(paragraphAttrs, editor, { emptyParagraph: atEnd });
139802
139924
  types3.unshift({
139803
139925
  type: deflt || node3.type,
139804
139926
  attrs: paragraphAttrs
@@ -139849,6 +139971,11 @@ function splitBlockPatch(state, dispatch, editor) {
139849
139971
  }
139850
139972
  function applyStyleMarks(state, tr, editor, paragraphAttrs, tableInfo) {
139851
139973
  const styleId = paragraphAttrs?.paragraphProperties?.styleId;
139974
+ if (paragraphAttrs?.paragraphProperties && Object.prototype.hasOwnProperty.call(paragraphAttrs.paragraphProperties, "styleId") && paragraphAttrs.paragraphProperties.styleId == null) {
139975
+ tr.setStoredMarks([]);
139976
+ tr.setMeta("sdStyleMarks", []);
139977
+ return;
139978
+ }
139852
139979
  if (!editor?.converter && !styleId)
139853
139980
  return;
139854
139981
  try {
@@ -140929,7 +141056,7 @@ function createPartPublisher(editor, ydoc, options = {}) {
140929
141056
  destroy
140930
141057
  };
140931
141058
  }
140932
- function getConverter$12(editor) {
141059
+ function getConverter$11(editor) {
140933
141060
  return editor.converter;
140934
141061
  }
140935
141062
  function isHeaderPartId(partId) {
@@ -140964,7 +141091,7 @@ function ensureHeaderFooterDescriptor(partId, sectionId) {
140964
141091
  };
140965
141092
  },
140966
141093
  afterCommit(ctx$1) {
140967
- const converter = getConverter$12(ctx$1.editor);
141094
+ const converter = getConverter$11(ctx$1.editor);
140968
141095
  if (!converter)
140969
141096
  return;
140970
141097
  const resolvedSectionId = ctx$1.sectionId ?? sectionId;
@@ -140984,7 +141111,7 @@ function ensureHeaderFooterDescriptor(partId, sectionId) {
140984
141111
  refreshActiveSubEditors(converter, type, resolvedSectionId);
140985
141112
  },
140986
141113
  onDelete(ctx$1) {
140987
- const converter = getConverter$12(ctx$1.editor);
141114
+ const converter = getConverter$11(ctx$1.editor);
140988
141115
  if (!converter)
140989
141116
  return;
140990
141117
  const resolvedSectionId = ctx$1.sectionId ?? sectionId;
@@ -141031,11 +141158,11 @@ function registerHeaderFooterInvalidationHandler(partId) {
141031
141158
  } catch {}
141032
141159
  });
141033
141160
  }
141034
- function getConverter$11(editor) {
141161
+ function getConverter$10(editor) {
141035
141162
  return editor.converter;
141036
141163
  }
141037
141164
  function resolvePartIdFromSectionId(editor, sectionId) {
141038
- const relsRoot = getConverter$11(editor)?.convertedXml?.["word/_rels/document.xml.rels"]?.elements?.find((el) => el.name === "Relationships");
141165
+ const relsRoot = getConverter$10(editor)?.convertedXml?.["word/_rels/document.xml.rels"]?.elements?.find((el) => el.name === "Relationships");
141039
141166
  if (!relsRoot?.elements)
141040
141167
  return null;
141041
141168
  for (const el of relsRoot.elements) {
@@ -141077,14 +141204,14 @@ function resolveHeaderFooterRId(partId, relsData, editor) {
141077
141204
  return rId;
141078
141205
  }
141079
141206
  if (editor) {
141080
- const localRels = getConverter$11(editor)?.convertedXml?.["word/_rels/document.xml.rels"];
141207
+ const localRels = getConverter$10(editor)?.convertedXml?.["word/_rels/document.xml.rels"];
141081
141208
  if (localRels)
141082
141209
  return resolveRIdFromRelsData(localRels, partId);
141083
141210
  }
141084
141211
  return null;
141085
141212
  }
141086
141213
  function exportSubEditorToPart(mainEditor, subEditor, sectionId, type) {
141087
- const converter = getConverter$11(mainEditor);
141214
+ const converter = getConverter$10(mainEditor);
141088
141215
  if (!converter?.exportToXmlJson)
141089
141216
  return false;
141090
141217
  const partId = resolvePartIdFromSectionId(mainEditor, sectionId);
@@ -141147,7 +141274,7 @@ function exportSubEditorToPart(mainEditor, subEditor, sectionId, type) {
141147
141274
  }
141148
141275
  }
141149
141276
  function registerExistingHeaderFooterDescriptors(editor) {
141150
- const converter = getConverter$11(editor);
141277
+ const converter = getConverter$10(editor);
141151
141278
  if (!converter?.convertedXml)
141152
141279
  return;
141153
141280
  const relsRoot = converter.convertedXml["word/_rels/document.xml.rels"]?.elements?.find((el) => el.name === "Relationships");
@@ -144299,11 +144426,11 @@ function pxToInches$1(value) {
144299
144426
  function buildSectionId(index2) {
144300
144427
  return `section-${index2}`;
144301
144428
  }
144302
- function getConverter$10(editor) {
144429
+ function getConverter$9(editor) {
144303
144430
  return editor.converter;
144304
144431
  }
144305
144432
  function getBodySectPrFromEditor(editor) {
144306
- const converter = getConverter$10(editor);
144433
+ const converter = getConverter$9(editor);
144307
144434
  if (isSectPrElement$1(converter?.bodySectPr))
144308
144435
  return cloneXmlElement(converter.bodySectPr);
144309
144436
  const docAttrs = editor.state.doc.attrs ?? {};
@@ -144352,7 +144479,7 @@ function resolveAnalysisDoc(editor, paragraphs) {
144352
144479
  return buildAnalysisDocFromParagraphs(paragraphs);
144353
144480
  }
144354
144481
  function getSettingsRoot(editor) {
144355
- const settingsPart = getConverter$10(editor)?.convertedXml?.["word/settings.xml"];
144482
+ const settingsPart = getConverter$9(editor)?.convertedXml?.["word/settings.xml"];
144356
144483
  if (!settingsPart)
144357
144484
  return null;
144358
144485
  if (settingsPart.name === "w:settings")
@@ -144362,7 +144489,7 @@ function getSettingsRoot(editor) {
144362
144489
  return settingsPart.elements.find((entry) => entry.name === "w:settings") ?? null;
144363
144490
  }
144364
144491
  function readOddEvenHeadersFlag(editor) {
144365
- const converter = getConverter$10(editor);
144492
+ const converter = getConverter$9(editor);
144366
144493
  if (converter?.pageStyles?.alternateHeaders != null)
144367
144494
  return converter.pageStyles.alternateHeaders === true;
144368
144495
  const settingsRoot = getSettingsRoot(editor);
@@ -149431,11 +149558,11 @@ function executePlan(editor, input2) {
149431
149558
  expectedRevision: input2.expectedRevision
149432
149559
  });
149433
149560
  }
149434
- function getConverter$9(editor) {
149561
+ function getConverter$8(editor) {
149435
149562
  return editor.converter;
149436
149563
  }
149437
149564
  function takeSnapshot(editor, partIds) {
149438
- const converter = getConverter$9(editor);
149565
+ const converter = getConverter$8(editor);
149439
149566
  const partEntries = /* @__PURE__ */ new Map;
149440
149567
  if (converter?.convertedXml)
149441
149568
  for (const partId of partIds) {
@@ -149459,7 +149586,7 @@ function takeSnapshot(editor, partIds) {
149459
149586
  };
149460
149587
  }
149461
149588
  function restoreFromSnapshot(editor, snapshot2) {
149462
- const converter = getConverter$9(editor);
149589
+ const converter = getConverter$8(editor);
149463
149590
  if (!converter)
149464
149591
  return;
149465
149592
  if (converter.convertedXml)
@@ -155313,12 +155440,6 @@ function assertRunTilingInvariant(runs2, blockRange, blockId) {
155313
155440
  if (runs2[i$1].range.end !== runs2[i$1 + 1].range.start)
155314
155441
  throw planError("INTERNAL_ERROR", `run-tiling: gap or overlap between runs[${i$1}] and runs[${i$1 + 1}] in block ${blockId}`);
155315
155442
  }
155316
- function getConverter$8(editor) {
155317
- return editor.converter;
155318
- }
155319
- function readTranslatedLinkedStyles(editor) {
155320
- return getConverter$8(editor)?.translatedLinkedStyles ?? null;
155321
- }
155322
155443
  function encodeV3Ref(payload) {
155323
155444
  return `text:${btoa(JSON.stringify(payload))}`;
155324
155445
  }
@@ -194027,6 +194148,27 @@ var Node$13 = class Node$14 {
194027
194148
  }, command = (fn) => (props) => fn(props), insertTabChar = () => ({ tr }) => {
194028
194149
  tr.insertText("\t", tr.selection.from, tr.selection.to);
194029
194150
  return true;
194151
+ }, isLinkedParagraphStyleId = (editor, styleId) => {
194152
+ if (!styleId)
194153
+ return false;
194154
+ const styleDefinition = readTranslatedLinkedStyles(editor)?.styles?.[styleId];
194155
+ return Boolean(styleDefinition?.type === "paragraph" && styleDefinition?.link);
194156
+ }, clearInheritedLinkedStyleId = (attrs, editor, { emptyParagraph = false } = {}) => {
194157
+ if (!emptyParagraph)
194158
+ return attrs;
194159
+ if (!attrs || typeof attrs !== "object")
194160
+ return attrs;
194161
+ const paragraphProperties = attrs.paragraphProperties;
194162
+ const styleId = paragraphProperties?.styleId;
194163
+ if (!isLinkedParagraphStyleId(editor, styleId))
194164
+ return attrs;
194165
+ return {
194166
+ ...attrs,
194167
+ paragraphProperties: {
194168
+ ...paragraphProperties,
194169
+ styleId: null
194170
+ }
194171
+ };
194030
194172
  }, base4, shift, mac$1, ie, i3, i3, i3, code6, mac, windows, readFromCache, addToCache, TableMap = class {
194031
194173
  constructor(width, height, map$12, problems) {
194032
194174
  this.width = width;
@@ -194356,6 +194498,7 @@ var Node$13 = class Node$14 {
194356
194498
  return false;
194357
194499
  if (dispatch) {
194358
194500
  const atEnd = $to.parentOffset === $to.parent.content.size;
194501
+ newAttrs = clearInheritedLinkedStyleId(newAttrs, editor, { emptyParagraph: atEnd });
194359
194502
  if (selection instanceof TextSelection2)
194360
194503
  tr.deleteSelection();
194361
194504
  const deflt = $from.depth === 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));
@@ -200042,7 +200185,7 @@ var Node$13 = class Node$14 {
200042
200185
  return !!target?.closest(".button-text-input") || target?.classList?.contains("button-text-input");
200043
200186
  }, isToolbarButton = (target) => {
200044
200187
  return !!target?.closest(".toolbar-button") || target?.classList?.contains("toolbar-button");
200045
- }, CustomSelection, LinkedStyles, getLinkedStyle = (styleId, styles = []) => {
200188
+ }, CustomSelection, LinkedStyles, FORMATTING_MARK_NAMES, getLinkedStyle = (styleId, styles = []) => {
200046
200189
  const linkedStyle = styles.find((style2) => style2.id === styleId);
200047
200190
  const basedOn = linkedStyle?.definition?.attrs?.basedOn;
200048
200191
  return {
@@ -200162,6 +200305,7 @@ var Node$13 = class Node$14 {
200162
200305
  }, applyLinkedStyleToTransaction = (tr, editor, style2) => {
200163
200306
  if (!style2)
200164
200307
  return false;
200308
+ tr.setMeta("sdStyleMarks", []);
200165
200309
  let selection = tr.selection;
200166
200310
  const state = editor.state;
200167
200311
  const focusState = CustomSelectionPluginKey.getState(state);
@@ -200184,25 +200328,22 @@ var Node$13 = class Node$14 {
200184
200328
  };
200185
200329
  const clearFormattingMarks = (startPos, endPos) => {
200186
200330
  tr.doc.nodesBetween(startPos, endPos, (node3, pos) => {
200187
- if (node3.isText && node3.marks.length > 0) {
200188
- const marksToRemove = [
200189
- "textStyle",
200190
- "bold",
200191
- "italic",
200192
- "underline",
200193
- "strike",
200194
- "subscript",
200195
- "superscript",
200196
- "highlight"
200197
- ];
200331
+ if (node3.isText && node3.marks.length > 0)
200198
200332
  node3.marks.forEach((mark2) => {
200199
- if (marksToRemove.includes(mark2.type.name))
200333
+ if (FORMATTING_MARK_NAMES.has(mark2.type.name))
200200
200334
  tr.removeMark(pos, pos + node3.nodeSize, mark2);
200201
200335
  });
200202
- }
200203
200336
  return true;
200204
200337
  });
200205
200338
  };
200339
+ const clearStoredFormattingMarks = () => {
200340
+ const sourceMarks = tr.storedMarks ?? state.storedMarks ?? (selection.empty ? selection.$from.marks() : []);
200341
+ if (!sourceMarks?.length)
200342
+ return;
200343
+ const nextStoredMarks = sourceMarks.filter((mark2) => !FORMATTING_MARK_NAMES.has(mark2.type.name));
200344
+ if (nextStoredMarks.length !== sourceMarks.length)
200345
+ tr.setStoredMarks(nextStoredMarks);
200346
+ };
200206
200347
  if (from$1 === to) {
200207
200348
  let pos = from$1;
200208
200349
  let paragraphNode = tr.doc.nodeAt(from$1);
@@ -200214,6 +200355,7 @@ var Node$13 = class Node$14 {
200214
200355
  paragraphNode = parentNode$1.node;
200215
200356
  }
200216
200357
  clearFormattingMarks(pos + 1, pos + paragraphNode.nodeSize - 1);
200358
+ clearStoredFormattingMarks();
200217
200359
  tr.setNodeMarkup(pos, undefined, getUpdatedParagraphAttrs(paragraphNode));
200218
200360
  return true;
200219
200361
  }
@@ -200230,6 +200372,7 @@ var Node$13 = class Node$14 {
200230
200372
  clearFormattingMarks(pos + 1, pos + node3.nodeSize - 1);
200231
200373
  tr.setNodeMarkup(pos, undefined, getUpdatedParagraphAttrs(node3));
200232
200374
  });
200375
+ clearStoredFormattingMarks();
200233
200376
  return true;
200234
200377
  }, stepInsertsTextIntoStyledParagraph = (tr, oldEditorState, step3, stepIndex) => {
200235
200378
  if (!step3.slice || step3.slice.size === 0 || typeof step3.from !== "number")
@@ -213291,6 +213434,9 @@ var Node$13 = class Node$14 {
213291
213434
  }
213292
213435
  } catch (_e) {}
213293
213436
  return null;
213437
+ }, hasParagraphStyleOverride = (paragraphNode) => {
213438
+ const paragraphProperties = paragraphNode?.attrs?.paragraphProperties;
213439
+ return Boolean(paragraphProperties && typeof paragraphProperties === "object" && Object.prototype.hasOwnProperty.call(paragraphProperties, "styleId"));
213294
213440
  }, createMarksFromDefs = (schema, markDefs = []) => markDefs.map((def2) => {
213295
213441
  const markType = schema.marks[def2.type];
213296
213442
  return markType ? markType.create(def2.attrs) : null;
@@ -213319,6 +213465,11 @@ var Node$13 = class Node$14 {
213319
213465
  }, copyRunPropertiesFromPreviousParagraph = (state, pos, textNode, runType, editor) => {
213320
213466
  let runProperties;
213321
213467
  let updatedTextNode = textNode;
213468
+ if (hasParagraphStyleOverride(getParagraphAtPos(state.doc, pos)))
213469
+ return {
213470
+ runProperties,
213471
+ textNode: updatedTextNode
213472
+ };
213322
213473
  const paragraphNode = getParagraphAtPos(state.doc, pos - 2);
213323
213474
  if (paragraphNode && paragraphNode.content.size > 0) {
213324
213475
  const lastChild = paragraphNode.child(paragraphNode.childCount - 1);
@@ -213420,9 +213571,9 @@ var Node$13 = class Node$14 {
213420
213571
  pendingRanges = collectChangedRangesThroughTransactions(transactions, docSize, { extraRanges: pendingRanges });
213421
213572
  if (view?.composing)
213422
213573
  return null;
213423
- const metaFromTxn = [...transactions].reverse().map((txn) => txn.getMeta("sdStyleMarks")).find(Boolean);
213424
- if (metaFromTxn?.length)
213425
- lastStyleMarksMeta = metaFromTxn;
213574
+ const metaFromTxn = [...transactions].reverse().map((txn) => txn.getMeta("sdStyleMarks")).find((meta2) => meta2 !== undefined);
213575
+ if (metaFromTxn !== undefined)
213576
+ lastStyleMarksMeta = Array.isArray(metaFromTxn) ? metaFromTxn : [];
213426
213577
  const tr = buildWrapTransaction(newState, pendingRanges, runType, editor, lastStyleMarksMeta);
213427
213578
  pendingRanges = [];
213428
213579
  return tr;
@@ -217807,9 +217958,9 @@ var Node$13 = class Node$14 {
217807
217958
  return false;
217808
217959
  return Boolean(checker(attrs));
217809
217960
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
217810
- var init_src_BNoEv7Gv_es = __esm(() => {
217961
+ var init_src_BVOVss6W_es = __esm(() => {
217811
217962
  init_rolldown_runtime_B2q5OVn9_es();
217812
- init_SuperConverter_Cw5CEerM_es();
217963
+ init_SuperConverter_C9IFvZwR_es();
217813
217964
  init_jszip_ChlR43oI_es();
217814
217965
  init_uuid_qzgm05fK_es();
217815
217966
  init_constants_CMPtQbp7_es();
@@ -229391,6 +229542,16 @@ function print() { __p += __j.call(arguments, '') }
229391
229542
  };
229392
229543
  }
229393
229544
  });
229545
+ FORMATTING_MARK_NAMES = new Set([
229546
+ "textStyle",
229547
+ "bold",
229548
+ "italic",
229549
+ "underline",
229550
+ "strike",
229551
+ "subscript",
229552
+ "superscript",
229553
+ "highlight"
229554
+ ]);
229394
229555
  LinkedStylesPluginKey = new PluginKey("linkedStyles");
229395
229556
  NodeResizerKey = new PluginKey("node-resizer");
229396
229557
  NodeResizer = Extension.create({
@@ -244930,7 +245091,7 @@ function print() { __p += __j.call(arguments, '') }
244930
245091
  TableOfContents = Node$13.create({
244931
245092
  name: "tableOfContents",
244932
245093
  group: "block",
244933
- content: "paragraph+",
245094
+ content: "paragraph*",
244934
245095
  inline: false,
244935
245096
  addStorage() {
244936
245097
  return { pageMap: null };
@@ -251418,8 +251579,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
251418
251579
 
251419
251580
  // ../../packages/superdoc/dist/super-editor.es.js
251420
251581
  var init_super_editor_es = __esm(() => {
251421
- init_src_BNoEv7Gv_es();
251422
- init_SuperConverter_Cw5CEerM_es();
251582
+ init_src_BVOVss6W_es();
251583
+ init_SuperConverter_C9IFvZwR_es();
251423
251584
  init_jszip_ChlR43oI_es();
251424
251585
  init_xml_js_DLE8mr0n_es();
251425
251586
  init_constants_CMPtQbp7_es();
@@ -284518,11 +284679,7 @@ function handleDocPartObj2(params3) {
284518
284679
  }
284519
284680
  var tableOfContentsHandler2 = (params3) => {
284520
284681
  const node4 = params3.nodes[0];
284521
- const translatedContent = params3.nodeListHandler.handler({
284522
- ...params3,
284523
- nodes: node4.elements,
284524
- path: [...params3.path || [], node4]
284525
- });
284682
+ const translatedContent = translateTocSdtContent2(node4, params3);
284526
284683
  const normalizedContent = normalizeDocPartContent2(translatedContent);
284527
284684
  const sdtPr = params3.extraParams.sdtPr;
284528
284685
  const id2 = sdtPr.elements?.find((el) => el.name === "w:id")?.attributes["w:val"] || "";
@@ -284563,10 +284720,38 @@ var tableOfContentsHandler2 = (params3) => {
284563
284720
  }
284564
284721
  };
284565
284722
  return result;
284566
- }, validGalleryTypeMap2, inlineNodeTypes2, wrapInlineNode2 = (node4) => ({
284723
+ }, validGalleryTypeMap2, inlineNodeTypes2, SD_TOC_XML_NAME2 = "sd:tableOfContents", PARAGRAPH_XML_NAME2 = "w:p", PARAGRAPH_PROPERTIES_XML_NAME2 = "w:pPr", wrapInlineNode2 = (node4) => ({
284567
284724
  type: "paragraph",
284568
284725
  content: [node4]
284569
- }), normalizeDocPartContent2 = (nodes = []) => {
284726
+ }), hasMeaningfulParagraphContent2 = (elements = []) => elements.some((element3) => element3?.name && element3.name !== PARAGRAPH_PROPERTIES_XML_NAME2), translateNodes2 = (params3, nodes, pathTail = []) => params3.nodeListHandler.handler({
284727
+ ...params3,
284728
+ nodes,
284729
+ path: [...params3.path || [], ...pathTail]
284730
+ }), translateTocSdtContent2 = (sdtContent, params3) => {
284731
+ const translatedContent = [];
284732
+ const parentPath = [sdtContent];
284733
+ (sdtContent?.elements || []).forEach((child) => {
284734
+ const childElements = Array.isArray(child?.elements) ? child.elements : [];
284735
+ const tocElements = child?.name === PARAGRAPH_XML_NAME2 ? childElements.filter((el) => el?.name === SD_TOC_XML_NAME2) : [];
284736
+ if (tocElements.length === 0) {
284737
+ translatedContent.push(...translateNodes2(params3, [child], parentPath));
284738
+ return;
284739
+ }
284740
+ const remainingElements = childElements.filter((el) => el?.name !== SD_TOC_XML_NAME2);
284741
+ if (hasMeaningfulParagraphContent2(remainingElements)) {
284742
+ translatedContent.push(...translateNodes2(params3, [
284743
+ {
284744
+ ...child,
284745
+ elements: remainingElements
284746
+ }
284747
+ ], parentPath));
284748
+ }
284749
+ tocElements.forEach((tocElement) => {
284750
+ translatedContent.push(...translateNodes2(params3, [tocElement], [...parentPath, child]));
284751
+ });
284752
+ });
284753
+ return translatedContent;
284754
+ }, normalizeDocPartContent2 = (nodes = []) => {
284570
284755
  const normalized = [];
284571
284756
  nodes.forEach((node4) => {
284572
284757
  if (inlineNodeTypes2.has(node4?.type)) {
@@ -299235,6 +299420,7 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299235
299420
  let currentFieldStack = [];
299236
299421
  let unpairedEnd = null;
299237
299422
  let collecting = false;
299423
+ const rawNodeSourceTokens = new WeakMap;
299238
299424
  const finalizeField = () => {
299239
299425
  if (collecting) {
299240
299426
  const collectedNodes = collectedNodesStack.pop().filter((n) => n !== null);
@@ -299252,17 +299438,32 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299252
299438
  unpairedEnd = true;
299253
299439
  }
299254
299440
  };
299255
- for (const node4 of nodes) {
299256
- const rawNode = carbonCopy2(node4);
299441
+ const captureRawNodeForCurrentField = (rawNode, capturedRawNodes, rawSourceToken) => {
299442
+ if (rawCollectedNodesStack.length === 0)
299443
+ return;
299444
+ if (capturedRawNodes.has(rawNode))
299445
+ return;
299446
+ const currentRawStack = rawCollectedNodesStack[rawCollectedNodesStack.length - 1];
299447
+ const lastRawNode = currentRawStack[currentRawStack.length - 1];
299448
+ const canMergeIntoLastNode = lastRawNode?.name === "w:r" && rawNode?.name === "w:r" && rawNodeSourceTokens.get(lastRawNode) === rawSourceToken && Array.isArray(lastRawNode.elements) && Array.isArray(rawNode.elements);
299449
+ if (canMergeIntoLastNode) {
299450
+ lastRawNode.elements.push(...carbonCopy2(rawNode.elements));
299451
+ } else {
299452
+ currentRawStack.push(rawNode);
299453
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
299454
+ }
299455
+ capturedRawNodes.add(rawNode);
299456
+ };
299457
+ const processNode = (node4, rawNode, capturedRawNodes, rawSourceToken) => {
299257
299458
  collecting = collectedNodesStack.length > 0;
299258
299459
  if (shouldSkipFieldProcessing2(node4)) {
299259
299460
  if (collecting) {
299260
299461
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
299261
- rawCollectedNodesStack[collectedNodesStack.length - 1].push(rawNode);
299462
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299262
299463
  } else {
299263
299464
  processedNodes.push(node4);
299264
299465
  }
299265
- continue;
299466
+ return;
299266
299467
  }
299267
299468
  const fldCharEl = node4.elements?.find((el) => el.name === "w:fldChar");
299268
299469
  const fldType = fldCharEl?.attributes?.["w:fldCharType"];
@@ -299280,22 +299481,25 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299280
299481
  } else {
299281
299482
  processedNodes.push(...processed);
299282
299483
  }
299283
- continue;
299484
+ return;
299284
299485
  }
299285
299486
  }
299286
299487
  }
299287
299488
  if (fldType === "begin") {
299288
299489
  collectedNodesStack.push([]);
299289
- rawCollectedNodesStack.push([rawNode]);
299490
+ const rawStack = [rawNode];
299491
+ rawCollectedNodesStack.push(rawStack);
299492
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
299493
+ capturedRawNodes.add(rawNode);
299290
299494
  currentFieldStack.push({ instrText: "", instructionTokens: [], afterSeparate: false });
299291
- continue;
299495
+ return;
299292
299496
  }
299293
299497
  if (collecting && currentFieldStack.length > 0) {
299294
299498
  const currentField = currentFieldStack[currentFieldStack.length - 1];
299295
299499
  if (!currentField.afterSeparate) {
299296
299500
  const instructionTokens = extractInstructionTokensFromNode2(node4);
299297
299501
  if (instructionTokens.length > 0) {
299298
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299502
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299299
299503
  currentField.instructionTokens.push(...instructionTokens);
299300
299504
  const instrTextValue = instrTextEl?.elements?.[0]?.text;
299301
299505
  if (instrTextValue != null) {
@@ -299304,25 +299508,25 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299304
299508
  if (instructionTokens.some((token) => token.type === "tab")) {
299305
299509
  currentField.instrText += "\t";
299306
299510
  }
299307
- continue;
299511
+ return;
299308
299512
  }
299309
299513
  }
299310
299514
  }
299311
299515
  if (fldType === "end") {
299312
299516
  if (collecting) {
299313
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299517
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299314
299518
  }
299315
299519
  finalizeField();
299316
- continue;
299520
+ return;
299317
299521
  } else if (fldType === "separate") {
299318
299522
  if (collecting) {
299319
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299523
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299320
299524
  const currentField = currentFieldStack[currentFieldStack.length - 1];
299321
299525
  if (currentField) {
299322
299526
  currentField.afterSeparate = true;
299323
299527
  }
299324
299528
  }
299325
- continue;
299529
+ return;
299326
299530
  }
299327
299531
  if (Array.isArray(node4.elements)) {
299328
299532
  const childResult = preProcessNodesForFldChar2(node4.elements, docx);
@@ -299331,24 +299535,37 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299331
299535
  childResult.unpairedBegin.forEach((pendingField) => {
299332
299536
  currentFieldStack.push(pendingField.fieldInfo);
299333
299537
  collectedNodesStack.push([node4]);
299334
- rawCollectedNodesStack.push([rawNode]);
299538
+ const rawStack = [rawNode];
299539
+ rawCollectedNodesStack.push(rawStack);
299540
+ rawNodeSourceTokens.set(rawNode, rawSourceToken);
299541
+ capturedRawNodes.add(rawNode);
299335
299542
  });
299336
299543
  } else if (childResult.unpairedEnd) {
299337
299544
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
299338
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299545
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299339
299546
  finalizeField();
299340
299547
  } else if (collecting) {
299341
299548
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
299342
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299549
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299343
299550
  } else {
299344
299551
  processedNodes.push(node4);
299345
299552
  }
299346
299553
  } else if (collecting) {
299347
299554
  collectedNodesStack[collectedNodesStack.length - 1].push(node4);
299348
- rawCollectedNodesStack[rawCollectedNodesStack.length - 1].push(rawNode);
299555
+ captureRawNodeForCurrentField(rawNode, capturedRawNodes, rawSourceToken);
299349
299556
  } else {
299350
299557
  processedNodes.push(node4);
299351
299558
  }
299559
+ };
299560
+ for (const node4 of nodes) {
299561
+ const rawNode = carbonCopy2(node4);
299562
+ const logicalNodes = expandNodeForFieldProcessing2(node4);
299563
+ const rawLogicalNodes = expandNodeForFieldProcessing2(rawNode);
299564
+ const capturedRawNodes = new Set;
299565
+ const rawSourceToken = {};
299566
+ logicalNodes.forEach((logicalNode, index3) => {
299567
+ processNode(logicalNode, rawLogicalNodes[index3] ?? rawNode, capturedRawNodes, rawSourceToken);
299568
+ });
299352
299569
  }
299353
299570
  let unpairedBegin = null;
299354
299571
  if (collectedNodesStack.length > 0) {
@@ -299382,10 +299599,62 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES2, shouldSkipFieldProcessing2 = (node4) => S
299382
299599
  }
299383
299600
  });
299384
299601
  return tokens;
299602
+ }, FIELD_CONTROL_ELEMENT_NAMES2, INSTRUCTION_ELEMENT_NAMES2, cloneNodeWithElements2 = (node4, elements) => ({
299603
+ ...node4,
299604
+ elements: carbonCopy2(elements)
299605
+ }), expandNodeForFieldProcessing2 = (node4) => {
299606
+ const elements = Array.isArray(node4?.elements) ? node4.elements : null;
299607
+ if (node4?.name !== "w:r" || !elements || elements.length === 0) {
299608
+ return [node4];
299609
+ }
299610
+ const runProperties = elements.filter((el) => el?.name === "w:rPr");
299611
+ const contentElements = elements.filter((el) => el?.name !== "w:rPr");
299612
+ const logicalNodes = [];
299613
+ let currentKind = null;
299614
+ let currentElements = [];
299615
+ const flushCurrentGroup = () => {
299616
+ if (currentElements.length === 0)
299617
+ return;
299618
+ logicalNodes.push(cloneNodeWithElements2(node4, [...runProperties, ...currentElements]));
299619
+ currentElements = [];
299620
+ currentKind = null;
299621
+ };
299622
+ contentElements.forEach((element3) => {
299623
+ if (!element3?.name) {
299624
+ if (currentKind !== "content") {
299625
+ flushCurrentGroup();
299626
+ currentKind = "content";
299627
+ }
299628
+ currentElements.push(element3);
299629
+ return;
299630
+ }
299631
+ if (FIELD_CONTROL_ELEMENT_NAMES2.has(element3.name)) {
299632
+ flushCurrentGroup();
299633
+ logicalNodes.push(cloneNodeWithElements2(node4, [...runProperties, element3]));
299634
+ return;
299635
+ }
299636
+ if (INSTRUCTION_ELEMENT_NAMES2.has(element3.name)) {
299637
+ if (currentKind !== "instruction") {
299638
+ flushCurrentGroup();
299639
+ currentKind = "instruction";
299640
+ }
299641
+ currentElements.push(element3);
299642
+ return;
299643
+ }
299644
+ if (currentKind !== "content") {
299645
+ flushCurrentGroup();
299646
+ currentKind = "content";
299647
+ }
299648
+ currentElements.push(element3);
299649
+ });
299650
+ flushCurrentGroup();
299651
+ return logicalNodes.length > 1 ? logicalNodes : [node4];
299385
299652
  };
299386
299653
  var init_preProcessNodesForFldChar = __esm(() => {
299387
299654
  init_fld_preprocessors();
299388
299655
  SKIP_FIELD_PROCESSING_NODE_NAMES2 = new Set(["w:drawing", "w:pict"]);
299656
+ FIELD_CONTROL_ELEMENT_NAMES2 = new Set(["w:fldChar"]);
299657
+ INSTRUCTION_ELEMENT_NAMES2 = new Set(["w:instrText", "w:tab"]);
299389
299658
  });
299390
299659
 
299391
299660
  // ../../packages/super-editor/src/core/super-converter/field-references/preProcessPageFieldsOnly.js
@@ -303014,30 +303283,43 @@ function translateDocumentPartObj2(params3) {
303014
303283
  };
303015
303284
  return result;
303016
303285
  }
303286
+ function sanitizeId2(id2) {
303287
+ if (typeof id2 === "string" && id2.trim() !== "") {
303288
+ return id2.trim();
303289
+ }
303290
+ return;
303291
+ }
303017
303292
  function generateSdtPrForDocPartObj2(attrs) {
303018
303293
  const existingDocPartObj = attrs.sdtPr?.elements?.find((el) => el.name === "w:docPartObj");
303019
303294
  const existingDocPartGallery = existingDocPartObj?.elements?.find((el) => el.name === "w:docPartGallery")?.attributes?.["w:val"];
303020
303295
  const docPartGallery = attrs.docPartGallery ?? existingDocPartGallery ?? null;
303021
- const id2 = attrs.id ?? attrs.sdtPr?.elements?.find((el) => el.name === "w:id")?.attributes?.["w:val"] ?? "";
303296
+ const id2 = sanitizeId2(attrs.id ?? attrs.sdtPr?.elements?.find((el) => el.name === "w:id")?.attributes?.["w:val"]);
303022
303297
  const docPartUnique = attrs.docPartUnique ?? existingDocPartObj?.elements?.some((el) => el.name === "w:docPartUnique") ?? false;
303023
303298
  if (docPartGallery === null) {
303024
303299
  if (attrs.sdtPr) {
303025
- return attrs.sdtPr;
303300
+ const filteredSdtPr = {
303301
+ ...attrs.sdtPr,
303302
+ elements: Array.isArray(attrs.sdtPr.elements) ? attrs.sdtPr.elements.filter((el) => !(el.name === "w:id" && el.attributes?.["w:val"]?.trim() === "")) : attrs.sdtPr.elements
303303
+ };
303304
+ return filteredSdtPr;
303305
+ }
303306
+ const elements = [
303307
+ {
303308
+ name: "w:docPartObj",
303309
+ elements: []
303310
+ }
303311
+ ];
303312
+ if (id2 != null) {
303313
+ elements.unshift({
303314
+ name: "w:id",
303315
+ attributes: {
303316
+ "w:val": id2
303317
+ }
303318
+ });
303026
303319
  }
303027
303320
  return {
303028
303321
  name: "w:sdtPr",
303029
- elements: [
303030
- {
303031
- name: "w:id",
303032
- attributes: {
303033
- "w:val": id2
303034
- }
303035
- },
303036
- {
303037
- name: "w:docPartObj",
303038
- elements: []
303039
- }
303040
- ]
303322
+ elements
303041
303323
  };
303042
303324
  }
303043
303325
  const docPartObjElements = [
@@ -303052,17 +303334,19 @@ function generateSdtPrForDocPartObj2(attrs) {
303052
303334
  docPartObjElements.push({ name: "w:docPartUnique" });
303053
303335
  }
303054
303336
  const sdtPrElements = [
303055
- {
303056
- name: "w:id",
303057
- attributes: {
303058
- "w:val": id2
303059
- }
303060
- },
303061
303337
  {
303062
303338
  name: "w:docPartObj",
303063
303339
  elements: docPartObjElements
303064
303340
  }
303065
303341
  ];
303342
+ if (id2 != null) {
303343
+ sdtPrElements.unshift({
303344
+ name: "w:id",
303345
+ attributes: {
303346
+ "w:val": id2
303347
+ }
303348
+ });
303349
+ }
303066
303350
  if (attrs.sdtPr?.elements && Array.isArray(attrs.sdtPr.elements)) {
303067
303351
  const elementsToExclude = ["w:id", "w:docPartObj"];
303068
303352
  const passthroughElements = attrs.sdtPr.elements.filter((el) => el && el.name && !elementsToExclude.includes(el.name));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superdoc-dev/cli",
3
- "version": "0.2.0-next.130",
3
+ "version": "0.2.0-next.132",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "superdoc": "./dist/index.js"
@@ -20,21 +20,21 @@
20
20
  "@types/bun": "^1.3.8",
21
21
  "@types/node": "22.19.2",
22
22
  "typescript": "^5.9.2",
23
- "@superdoc/pm-adapter": "0.0.0",
23
+ "@superdoc/document-api": "0.0.1",
24
24
  "@superdoc/super-editor": "0.0.1",
25
25
  "superdoc": "1.18.0",
26
- "@superdoc/document-api": "0.0.1"
26
+ "@superdoc/pm-adapter": "0.0.0"
27
27
  },
28
28
  "module": "src/index.ts",
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
32
  "optionalDependencies": {
33
- "@superdoc-dev/cli-darwin-arm64": "0.2.0-next.130",
34
- "@superdoc-dev/cli-darwin-x64": "0.2.0-next.130",
35
- "@superdoc-dev/cli-linux-x64": "0.2.0-next.130",
36
- "@superdoc-dev/cli-linux-arm64": "0.2.0-next.130",
37
- "@superdoc-dev/cli-windows-x64": "0.2.0-next.130"
33
+ "@superdoc-dev/cli-darwin-arm64": "0.2.0-next.132",
34
+ "@superdoc-dev/cli-darwin-x64": "0.2.0-next.132",
35
+ "@superdoc-dev/cli-linux-arm64": "0.2.0-next.132",
36
+ "@superdoc-dev/cli-linux-x64": "0.2.0-next.132",
37
+ "@superdoc-dev/cli-windows-x64": "0.2.0-next.132"
38
38
  },
39
39
  "scripts": {
40
40
  "dev": "bun run src/index.ts",