@harbour-enterprises/superdoc 0.24.0-next.2 → 0.24.0-next.4

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 (82) hide show
  1. package/dist/chunks/{PdfViewer--Z8scsXq.es.js → PdfViewer-D7C8g2G4.es.js} +1 -1
  2. package/dist/chunks/{PdfViewer-CYiJzT44.cjs → PdfViewer-kOVuv-4I.cjs} +1 -1
  3. package/dist/chunks/blank-docx-ABm6XYAA.es.js +4 -0
  4. package/dist/chunks/blank-docx-DfW3Eeh2.cjs +3 -0
  5. package/dist/chunks/{index-CBSXpA57.cjs → index-BFKwBQjS.cjs} +12 -4
  6. package/dist/chunks/{index-CCf_X9Jy.es.js → index-CnEAVnHQ.es.js} +12 -4
  7. package/dist/chunks/{super-editor.es-CZFQdEKI.cjs → super-editor.es-BmGTQ05x.cjs} +1954 -1216
  8. package/dist/chunks/{super-editor.es-BFco6Gra.es.js → super-editor.es-CBPoWvjs.es.js} +1954 -1216
  9. package/dist/core/SuperDoc.d.ts.map +1 -1
  10. package/dist/core/types/index.d.ts.map +1 -1
  11. package/dist/style.css +32 -31
  12. package/dist/super-editor/ai-writer.es.js +2 -2
  13. package/dist/super-editor/chunks/{converter-nWAUAQ83.js → converter-DpPj67OW.js} +1537 -1175
  14. package/dist/super-editor/chunks/{docx-zipper-B2uMUaj9.js → docx-zipper-6Kc95yG-.js} +1 -1
  15. package/dist/super-editor/chunks/{editor-DAyiX5AL.js → editor-Dx6AhT5N.js} +454 -57
  16. package/dist/super-editor/chunks/{toolbar-LmzuO_YJ.js → toolbar-CXSg2lJ9.js} +2 -2
  17. package/dist/super-editor/converter.es.js +1 -1
  18. package/dist/super-editor/docx-zipper.es.js +2 -2
  19. package/dist/super-editor/editor.es.js +3 -3
  20. package/dist/super-editor/file-zipper.es.js +1 -1
  21. package/dist/super-editor/style.css +5 -4
  22. package/dist/super-editor/super-editor/src/core/Editor.d.ts +11 -0
  23. package/dist/super-editor/super-editor/src/core/helpers/canRenderFont.d.ts +12 -0
  24. package/dist/super-editor/super-editor/src/core/super-converter/SuperConverter.d.ts +6 -1
  25. package/dist/super-editor/super-editor/src/core/super-converter/helpers.d.ts +23 -1
  26. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/docxImporter.d.ts +3 -1
  27. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/tableImporter.d.ts +5 -3
  28. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/trackChangesImporter.d.ts +5 -0
  29. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/types/index.d.ts +5 -0
  30. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/helpers.d.ts +1 -0
  31. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/utils.d.ts +9 -0
  32. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/del/del-translator.d.ts +7 -0
  33. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/del/index.d.ts +1 -0
  34. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/gridSpan/gridSpan-translator.d.ts +6 -0
  35. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/gridSpan/index.d.ts +1 -0
  36. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/header/header-translator.d.ts +6 -0
  37. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/header/index.d.ts +1 -0
  38. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/headers/headers-translator.d.ts +7 -0
  39. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/headers/index.d.ts +1 -0
  40. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/hideMark/hideMark-translator.d.ts +6 -0
  41. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/hideMark/index.d.ts +1 -0
  42. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/ins/index.d.ts +1 -0
  43. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/ins/ins-translator.d.ts +7 -0
  44. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/noWrap/index.d.ts +1 -0
  45. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/noWrap/noWrap-translator.d.ts +6 -0
  46. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/shd/shd-translator.d.ts +1 -1
  47. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tc/helpers/translate-table-cell.d.ts +0 -5
  48. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/index.d.ts +1 -0
  49. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.d.ts +6 -0
  50. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcFitText/index.d.ts +1 -0
  51. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcFitText/tcFitText-translator.d.ts +6 -0
  52. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcMar/index.d.ts +1 -0
  53. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.d.ts +6 -0
  54. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcPr/index.d.ts +1 -0
  55. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.d.ts +5 -0
  56. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcW/index.d.ts +1 -0
  57. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcW/tcW-translator.d.ts +6 -0
  58. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/textDirection/index.d.ts +1 -0
  59. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/textDirection/textDirection-translator.d.ts +6 -0
  60. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tl2br/index.d.ts +1 -0
  61. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tl2br/tl2br-translator.d.ts +6 -0
  62. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tr2bl/index.d.ts +1 -0
  63. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tr2bl/tr2bl-translator.d.ts +6 -0
  64. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vAlign/index.d.ts +1 -0
  65. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vAlign/vAlign-translator.d.ts +6 -0
  66. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vMerge/index.d.ts +1 -0
  67. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vMerge/vMerge-translator.d.ts +6 -0
  68. package/dist/super-editor/super-editor/src/extensions/image/image.d.ts +1 -1
  69. package/dist/super-editor/super-editor/src/extensions/image/imageHelpers/index.d.ts +1 -0
  70. package/dist/super-editor/super-editor/src/extensions/image/imageHelpers/legacyAttributes.d.ts +17 -0
  71. package/dist/super-editor/super-editor/src/extensions/table-cell/table-cell.d.ts +112 -0
  72. package/dist/super-editor/super-editor.es.js +91 -76
  73. package/dist/super-editor/toolbar.es.js +2 -2
  74. package/dist/super-editor.cjs +1 -1
  75. package/dist/super-editor.es.js +1 -1
  76. package/dist/superdoc.cjs +3 -3
  77. package/dist/superdoc.es.js +3 -3
  78. package/dist/superdoc.umd.js +1964 -1218
  79. package/dist/superdoc.umd.js.map +1 -1
  80. package/package.json +1 -1
  81. package/dist/chunks/blank-docx-CPqX9RF5.cjs +0 -3
  82. package/dist/chunks/blank-docx-iwdyG9RH.es.js +0 -4
@@ -22832,14 +22832,21 @@
22832
22832
  function twipsToPixels(twips) {
22833
22833
  if (twips == null) return;
22834
22834
  const inches = twipsToInches(twips);
22835
+ return inchesToPixels(inches);
22836
+ }
22837
+ function pixelsToTwips(pixels) {
22838
+ const inches = pixelsToInches(pixels);
22839
+ return inchesToTwips(inches);
22840
+ }
22841
+ function inchesToPixels(inches) {
22835
22842
  if (inches == null) return;
22836
22843
  const pixels = inches * 96;
22837
22844
  return Math.round(pixels * 1e3) / 1e3;
22838
22845
  }
22839
- function pixelsToTwips(pixels) {
22846
+ function pixelsToInches(pixels) {
22840
22847
  if (pixels == null) return;
22841
22848
  const inches = Number(pixels) / 96;
22842
- return inchesToTwips(inches);
22849
+ return inches;
22843
22850
  }
22844
22851
  function twipsToLines(twips) {
22845
22852
  if (twips == null) return;
@@ -22864,9 +22871,9 @@
22864
22871
  if (typeof px === "string") px = parseFloat(px);
22865
22872
  return Math.round(px * 9525);
22866
22873
  }
22867
- function eigthPointsToPixels(eigthPoints) {
22868
- if (eigthPoints == null) return;
22869
- const points = parseFloat(eigthPoints) / 8;
22874
+ function eighthPointsToPixels(eighthPoints) {
22875
+ if (eighthPoints == null) return;
22876
+ const points = parseFloat(eighthPoints) / 8;
22870
22877
  const pixels = points * 1.3333;
22871
22878
  return pixels;
22872
22879
  }
@@ -22890,6 +22897,71 @@
22890
22897
  if (degrees == null) return;
22891
22898
  return degrees * 6e4;
22892
22899
  }
22900
+ function pixelsToPolygonUnits(pixels) {
22901
+ if (pixels == null) return;
22902
+ const pu = pixels * 96;
22903
+ return Math.round(pu);
22904
+ }
22905
+ function polygonUnitsToPixels(pu) {
22906
+ if (pu == null) return;
22907
+ const pixels = Number(pu) / 96;
22908
+ return Math.round(pixels * 1e3) / 1e3;
22909
+ }
22910
+ function polygonToObj(polygonNode) {
22911
+ if (!polygonNode) return null;
22912
+ const points = [];
22913
+ polygonNode.elements.forEach((element) => {
22914
+ if (["wp:start", "wp:lineTo"].includes(element.name)) {
22915
+ const { x, y: y2 } = element.attributes;
22916
+ points.push([polygonUnitsToPixels(x), polygonUnitsToPixels(y2)]);
22917
+ }
22918
+ });
22919
+ if (points.length > 1) {
22920
+ const firstPoint = points[0];
22921
+ const lastPoint = points[points.length - 1];
22922
+ if (firstPoint[0] === lastPoint[0] && firstPoint[1] === lastPoint[1]) {
22923
+ points.pop();
22924
+ }
22925
+ }
22926
+ return points;
22927
+ }
22928
+ function objToPolygon(points) {
22929
+ if (!points || !Array.isArray(points)) return null;
22930
+ const polygonNode = {
22931
+ name: "wp:wrapPolygon",
22932
+ type: "wp:wrapPolygon",
22933
+ attributes: {
22934
+ edited: "0"
22935
+ },
22936
+ elements: []
22937
+ };
22938
+ points.forEach((point, index2) => {
22939
+ const [x, y2] = point;
22940
+ const tagName = index2 === 0 ? "wp:start" : "wp:lineTo";
22941
+ const pointNode = {
22942
+ name: tagName,
22943
+ type: tagName,
22944
+ attributes: {
22945
+ x: pixelsToPolygonUnits(x),
22946
+ y: pixelsToPolygonUnits(y2)
22947
+ }
22948
+ };
22949
+ polygonNode.elements.push(pointNode);
22950
+ });
22951
+ if (points.length > 0) {
22952
+ const [startX, startY] = points[0];
22953
+ const closePointNode = {
22954
+ name: "wp:lineTo",
22955
+ type: "wp:lineTo",
22956
+ attributes: {
22957
+ x: pixelsToPolygonUnits(startX),
22958
+ y: pixelsToPolygonUnits(startY)
22959
+ }
22960
+ };
22961
+ polygonNode.elements.push(closePointNode);
22962
+ }
22963
+ return polygonNode;
22964
+ }
22893
22965
  const getTextIndentExportValue = (indent) => {
22894
22966
  const [value, unit] = parseSizeUnit(indent);
22895
22967
  const functionsMap = {
@@ -32205,37 +32277,37 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32205
32277
  };
32206
32278
  __publicField$2(_NodeTranslator, "translatorTypes", TranslatorTypes);
32207
32279
  let NodeTranslator = _NodeTranslator;
32208
- const encode$1c = (attributes) => {
32280
+ const encode$1b = (attributes) => {
32209
32281
  return attributes["w:type"];
32210
32282
  };
32211
- const decode$14 = (attrs) => {
32283
+ const decode$13 = (attrs) => {
32212
32284
  const { lineBreakType } = attrs;
32213
32285
  return lineBreakType;
32214
32286
  };
32215
32287
  const attrConfig$G = Object.freeze({
32216
32288
  xmlName: "w:type",
32217
32289
  sdName: "lineBreakType",
32218
- encode: encode$1c,
32219
- decode: decode$14
32290
+ encode: encode$1b,
32291
+ decode: decode$13
32220
32292
  });
32221
- const encode$1b = (attributes) => {
32293
+ const encode$1a = (attributes) => {
32222
32294
  const xmlAttrValue = attributes["w:clear"];
32223
32295
  return xmlAttrValue;
32224
32296
  };
32225
- const decode$13 = (attrs) => {
32297
+ const decode$12 = (attrs) => {
32226
32298
  const { clear } = attrs;
32227
32299
  return clear;
32228
32300
  };
32229
32301
  const attrConfig$F = Object.freeze({
32230
32302
  xmlName: "w:clear",
32231
32303
  sdName: "clear",
32232
- encode: encode$1b,
32233
- decode: decode$13
32304
+ encode: encode$1a,
32305
+ decode: decode$12
32234
32306
  });
32235
- const validXmlAttributes$n = [attrConfig$G, attrConfig$F];
32236
- const XML_NODE_NAME$z = "w:br";
32307
+ const validXmlAttributes$p = [attrConfig$G, attrConfig$F];
32308
+ const XML_NODE_NAME$y = "w:br";
32237
32309
  const SD_NODE_NAME$h = "lineBreak";
32238
- const encode$1a = (_2, encodedAttrs) => {
32310
+ const encode$19 = (_2, encodedAttrs) => {
32239
32311
  const isPageBreak = encodedAttrs?.lineBreakType === "page";
32240
32312
  const translated = {
32241
32313
  type: isPageBreak ? "hardBreak" : "lineBreak"
@@ -32245,7 +32317,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32245
32317
  }
32246
32318
  return translated;
32247
32319
  };
32248
- const decode$12 = (params2, decodedAttrs) => {
32320
+ const decode$11 = (params2, decodedAttrs) => {
32249
32321
  const { node } = params2;
32250
32322
  if (!node) return;
32251
32323
  const wBreak = { name: "w:br" };
@@ -32262,39 +32334,39 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32262
32334
  };
32263
32335
  return translated;
32264
32336
  };
32265
- const config$w = {
32266
- xmlName: XML_NODE_NAME$z,
32337
+ const config$x = {
32338
+ xmlName: XML_NODE_NAME$y,
32267
32339
  sdNodeOrKeyName: SD_NODE_NAME$h,
32268
32340
  type: NodeTranslator.translatorTypes.NODE,
32269
- encode: encode$1a,
32270
- decode: decode$12,
32271
- attributes: validXmlAttributes$n
32341
+ encode: encode$19,
32342
+ decode: decode$11,
32343
+ attributes: validXmlAttributes$p
32272
32344
  };
32273
- const translator$1a = NodeTranslator.from(config$w);
32274
- const encode$19 = (attributes) => attributes?.["w:val"];
32275
- const decode$11 = (attrs) => attrs?.highlight;
32345
+ const translator$1r = NodeTranslator.from(config$x);
32346
+ const encode$18 = (attributes) => attributes?.["w:val"];
32347
+ const decode$10 = (attrs) => attrs?.highlight;
32276
32348
  const attrConfig$E = Object.freeze({
32277
32349
  xmlName: "w:val",
32278
32350
  sdName: "highlight",
32279
- encode: encode$19,
32280
- decode: decode$11
32351
+ encode: encode$18,
32352
+ decode: decode$10
32281
32353
  });
32282
- const validXmlAttributes$m = [attrConfig$E];
32283
- const XML_NODE_NAME$y = "w:highlight";
32284
- const SD_ATTR_KEY$g = "highlight";
32354
+ const validXmlAttributes$o = [attrConfig$E];
32355
+ const XML_NODE_NAME$x = "w:highlight";
32356
+ const SD_ATTR_KEY$f = "highlight";
32285
32357
  const DISABLED_TOKENS = /* @__PURE__ */ new Set(["transparent", "none", "inherit"]);
32286
- const encode$18 = (params2, encodedAttrs = {}) => {
32358
+ const encode$17 = (params2, encodedAttrs = {}) => {
32287
32359
  const { nodes } = params2;
32288
32360
  const node = nodes?.[0];
32289
32361
  const value = encodedAttrs.highlight ?? node?.attributes?.["w:val"];
32290
32362
  return {
32291
32363
  type: "attr",
32292
- xmlName: XML_NODE_NAME$y,
32293
- sdNodeOrKeyName: SD_ATTR_KEY$g,
32364
+ xmlName: XML_NODE_NAME$x,
32365
+ sdNodeOrKeyName: SD_ATTR_KEY$f,
32294
32366
  attributes: { "w:val": value ?? null }
32295
32367
  };
32296
32368
  };
32297
- const decode$10 = (params2) => {
32369
+ const decode$$ = (params2) => {
32298
32370
  const attrs = params2?.node?.attrs || {};
32299
32371
  const highlightValue = attrs.highlight ?? attrs.color ?? null;
32300
32372
  if (!highlightValue) return void 0;
@@ -32302,14 +32374,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32302
32374
  if (!normalizedValue) return void 0;
32303
32375
  if (DISABLED_TOKENS.has(normalizedValue)) {
32304
32376
  return {
32305
- name: XML_NODE_NAME$y,
32377
+ name: XML_NODE_NAME$x,
32306
32378
  attributes: { "w:val": "none" }
32307
32379
  };
32308
32380
  }
32309
32381
  const keyword = getDocxHighlightKeywordFromHex(highlightValue);
32310
32382
  if (keyword) {
32311
32383
  return {
32312
- name: XML_NODE_NAME$y,
32384
+ name: XML_NODE_NAME$x,
32313
32385
  attributes: { "w:val": keyword }
32314
32386
  };
32315
32387
  }
@@ -32324,63 +32396,63 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32324
32396
  }
32325
32397
  };
32326
32398
  };
32327
- const config$v = {
32328
- xmlName: XML_NODE_NAME$y,
32329
- sdNodeOrKeyName: SD_ATTR_KEY$g,
32399
+ const config$w = {
32400
+ xmlName: XML_NODE_NAME$x,
32401
+ sdNodeOrKeyName: SD_ATTR_KEY$f,
32330
32402
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
32331
- encode: encode$18,
32332
- decode: decode$10,
32333
- attributes: validXmlAttributes$m
32403
+ encode: encode$17,
32404
+ decode: decode$$,
32405
+ attributes: validXmlAttributes$o
32334
32406
  };
32335
- const translator$19 = NodeTranslator.from(config$v);
32336
- const encode$17 = (attributes) => {
32407
+ const translator$1q = NodeTranslator.from(config$w);
32408
+ const encode$16 = (attributes) => {
32337
32409
  return attributes["w:val"];
32338
32410
  };
32339
- const decode$$ = (attrs) => {
32411
+ const decode$_ = (attrs) => {
32340
32412
  const { tabSize } = attrs || {};
32341
32413
  return tabSize;
32342
32414
  };
32343
32415
  const attrConfig$D = Object.freeze({
32344
32416
  xmlName: "w:val",
32345
32417
  sdName: "tabSize",
32346
- encode: encode$17,
32347
- decode: decode$$
32418
+ encode: encode$16,
32419
+ decode: decode$_
32348
32420
  });
32349
- const encode$16 = (attributes) => {
32421
+ const encode$15 = (attributes) => {
32350
32422
  return attributes["w:leader"];
32351
32423
  };
32352
- const decode$_ = (attrs) => {
32424
+ const decode$Z = (attrs) => {
32353
32425
  const { leader } = attrs || {};
32354
32426
  return leader;
32355
32427
  };
32356
32428
  const attrConfig$C = Object.freeze({
32357
32429
  xmlName: "w:leader",
32358
32430
  sdName: "leader",
32359
- encode: encode$16,
32360
- decode: decode$_
32431
+ encode: encode$15,
32432
+ decode: decode$Z
32361
32433
  });
32362
- const encode$15 = (attributes) => {
32434
+ const encode$14 = (attributes) => {
32363
32435
  return attributes["w:pos"];
32364
32436
  };
32365
- const decode$Z = (attrs) => {
32437
+ const decode$Y = (attrs) => {
32366
32438
  const { pos } = attrs || {};
32367
32439
  return pos;
32368
32440
  };
32369
32441
  const attrConfig$B = Object.freeze({
32370
32442
  xmlName: "w:pos",
32371
32443
  sdName: "pos",
32372
- encode: encode$15,
32373
- decode: decode$Z
32444
+ encode: encode$14,
32445
+ decode: decode$Y
32374
32446
  });
32375
- const validXmlAttributes$l = [attrConfig$D, attrConfig$B, attrConfig$C];
32376
- const XML_NODE_NAME$x = "w:tab";
32447
+ const validXmlAttributes$n = [attrConfig$D, attrConfig$B, attrConfig$C];
32448
+ const XML_NODE_NAME$w = "w:tab";
32377
32449
  const SD_NODE_NAME$g = "tab";
32378
- const encode$14 = (_2, encodedAttrs = {}) => {
32450
+ const encode$13 = (_2, encodedAttrs = {}) => {
32379
32451
  const translated = { type: "tab" };
32380
32452
  if (encodedAttrs) translated.attrs = { ...encodedAttrs };
32381
32453
  return translated;
32382
32454
  };
32383
- const decode$Y = (params2, decodedAttrs = {}) => {
32455
+ const decode$X = (params2, decodedAttrs = {}) => {
32384
32456
  const { node } = params2 || {};
32385
32457
  if (!node) return;
32386
32458
  const wTab = { name: "w:tab" };
@@ -32396,15 +32468,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32396
32468
  }
32397
32469
  return translated;
32398
32470
  };
32399
- const config$u = {
32400
- xmlName: XML_NODE_NAME$x,
32471
+ const config$v = {
32472
+ xmlName: XML_NODE_NAME$w,
32401
32473
  sdNodeOrKeyName: SD_NODE_NAME$g,
32402
32474
  type: NodeTranslator.translatorTypes.NODE,
32403
- encode: encode$14,
32404
- decode: decode$Y,
32405
- attributes: validXmlAttributes$l
32475
+ encode: encode$13,
32476
+ decode: decode$X,
32477
+ attributes: validXmlAttributes$n
32406
32478
  };
32407
- const translator$18 = NodeTranslator.from(config$u);
32479
+ const translator$1p = NodeTranslator.from(config$v);
32408
32480
  const mergeTextNodes = (nodes) => {
32409
32481
  if (!nodes || !Array.isArray(nodes)) {
32410
32482
  return nodes;
@@ -32630,9 +32702,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32630
32702
  const { attributes: a } = el;
32631
32703
  if (a["w:val"] === "nil" || a["w:val"] === void 0) return;
32632
32704
  let sizePx;
32633
- if (a["w:sz"] !== void 0) sizePx = eigthPointsToPixels(a["w:sz"]);
32705
+ if (a["w:sz"] !== void 0) sizePx = eighthPointsToPixels(a["w:sz"]);
32634
32706
  let spacePx;
32635
- if (a["w:space"] !== void 0) spacePx = eigthPointsToPixels(a["w:space"]);
32707
+ if (a["w:space"] !== void 0) spacePx = eighthPointsToPixels(a["w:space"]);
32636
32708
  result[side] = {
32637
32709
  val: a["w:val"],
32638
32710
  size: sizePx,
@@ -32922,91 +32994,91 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32922
32994
  }
32923
32995
  return schemaNode;
32924
32996
  };
32925
- const encode$13 = (attributes) => {
32997
+ const encode$12 = (attributes) => {
32926
32998
  return attributes["w:rsidDel"];
32927
32999
  };
32928
- const decode$X = (attrs) => {
33000
+ const decode$W = (attrs) => {
32929
33001
  return attrs.rsidDel;
32930
33002
  };
32931
33003
  const attrConfig$A = Object.freeze({
32932
33004
  xmlName: "w:rsidDel",
32933
33005
  sdName: "rsidDel",
32934
- encode: encode$13,
32935
- decode: decode$X
33006
+ encode: encode$12,
33007
+ decode: decode$W
32936
33008
  });
32937
- const encode$12 = (attributes) => {
33009
+ const encode$11 = (attributes) => {
32938
33010
  return attributes["w:rsidP"];
32939
33011
  };
32940
- const decode$W = (attrs) => {
33012
+ const decode$V = (attrs) => {
32941
33013
  return attrs.rsidP;
32942
33014
  };
32943
33015
  const attrConfig$z = Object.freeze({
32944
33016
  xmlName: "w:rsidP",
32945
33017
  sdName: "rsidP",
32946
- encode: encode$12,
32947
- decode: decode$W
33018
+ encode: encode$11,
33019
+ decode: decode$V
32948
33020
  });
32949
- const encode$11 = (attributes) => {
33021
+ const encode$10 = (attributes) => {
32950
33022
  return attributes["w:rsidR"];
32951
33023
  };
32952
- const decode$V = (attrs) => {
33024
+ const decode$U = (attrs) => {
32953
33025
  return attrs.rsidR;
32954
33026
  };
32955
33027
  const attrConfig$y = Object.freeze({
32956
33028
  xmlName: "w:rsidR",
32957
33029
  sdName: "rsidR",
32958
- encode: encode$11,
32959
- decode: decode$V
33030
+ encode: encode$10,
33031
+ decode: decode$U
32960
33032
  });
32961
- const encode$10 = (attributes) => {
33033
+ const encode$$ = (attributes) => {
32962
33034
  return attributes["w:rsidRPr"];
32963
33035
  };
32964
- const decode$U = (attrs) => {
33036
+ const decode$T = (attrs) => {
32965
33037
  return attrs.rsidRPr;
32966
33038
  };
32967
33039
  const attrConfig$x = Object.freeze({
32968
33040
  xmlName: "w:rsidRPr",
32969
33041
  sdName: "rsidRPr",
32970
- encode: encode$10,
32971
- decode: decode$U
33042
+ encode: encode$$,
33043
+ decode: decode$T
32972
33044
  });
32973
- const encode$$ = (attributes) => {
33045
+ const encode$_ = (attributes) => {
32974
33046
  return attributes["w:rsidRDefault"];
32975
33047
  };
32976
- const decode$T = (attrs) => {
33048
+ const decode$S = (attrs) => {
32977
33049
  return attrs.rsidRDefault;
32978
33050
  };
32979
33051
  const attrConfig$w = Object.freeze({
32980
33052
  xmlName: "w:rsidRDefault",
32981
33053
  sdName: "rsidRDefault",
32982
- encode: encode$$,
32983
- decode: decode$T
33054
+ encode: encode$_,
33055
+ decode: decode$S
32984
33056
  });
32985
- const encode$_ = (attributes) => {
33057
+ const encode$Z = (attributes) => {
32986
33058
  return attributes["w14:paraId"];
32987
33059
  };
32988
- const decode$S = (attrs) => {
33060
+ const decode$R = (attrs) => {
32989
33061
  return attrs.paraId;
32990
33062
  };
32991
33063
  const attrConfig$v = Object.freeze({
32992
33064
  xmlName: "w14:paraId",
32993
33065
  sdName: "paraId",
32994
- encode: encode$_,
32995
- decode: decode$S
33066
+ encode: encode$Z,
33067
+ decode: decode$R
32996
33068
  });
32997
- const encode$Z = (attributes) => {
33069
+ const encode$Y = (attributes) => {
32998
33070
  return attributes["w14:textId"];
32999
33071
  };
33000
- const decode$R = (attrs) => {
33072
+ const decode$Q = (attrs) => {
33001
33073
  return attrs.textId;
33002
33074
  };
33003
33075
  const attrConfig$u = Object.freeze({
33004
33076
  xmlName: "w14:textId",
33005
33077
  sdName: "textId",
33006
- encode: encode$Z,
33007
- decode: decode$R
33078
+ encode: encode$Y,
33079
+ decode: decode$Q
33008
33080
  });
33009
- const validXmlAttributes$k = [
33081
+ const validXmlAttributes$m = [
33010
33082
  attrConfig$v,
33011
33083
  attrConfig$u,
33012
33084
  attrConfig$y,
@@ -33015,9 +33087,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33015
33087
  attrConfig$x,
33016
33088
  attrConfig$A
33017
33089
  ];
33018
- const XML_NODE_NAME$w = "w:p";
33090
+ const XML_NODE_NAME$v = "w:p";
33019
33091
  const SD_NODE_NAME$f = "paragraph";
33020
- const encode$Y = (params2, encodedAttrs = {}) => {
33092
+ const encode$X = (params2, encodedAttrs = {}) => {
33021
33093
  const node = handleParagraphNode$1(params2);
33022
33094
  if (!node) return void 0;
33023
33095
  if (encodedAttrs && Object.keys(encodedAttrs).length) {
@@ -33025,7 +33097,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33025
33097
  }
33026
33098
  return node;
33027
33099
  };
33028
- const decode$Q = (params2, decodedAttrs = {}) => {
33100
+ const decode$P = (params2, decodedAttrs = {}) => {
33029
33101
  const translated = translateParagraphNode(params2);
33030
33102
  if (!translated) return void 0;
33031
33103
  if (decodedAttrs && Object.keys(decodedAttrs).length) {
@@ -33033,16 +33105,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33033
33105
  }
33034
33106
  return translated;
33035
33107
  };
33036
- const config$t = {
33037
- xmlName: XML_NODE_NAME$w,
33108
+ const config$u = {
33109
+ xmlName: XML_NODE_NAME$v,
33038
33110
  sdNodeOrKeyName: SD_NODE_NAME$f,
33039
33111
  type: NodeTranslator.translatorTypes.NODE,
33040
- encode: encode$Y,
33041
- decode: decode$Q,
33042
- attributes: validXmlAttributes$k
33112
+ encode: encode$X,
33113
+ decode: decode$P,
33114
+ attributes: validXmlAttributes$m
33043
33115
  };
33044
- const translator$17 = NodeTranslator.from(config$t);
33045
- const encode$X = (attributes) => {
33116
+ const translator$1o = NodeTranslator.from(config$u);
33117
+ const encode$W = (attributes) => {
33046
33118
  const raw = attributes?.["w:val"];
33047
33119
  if (raw === void 0 || raw === null) return void 0;
33048
33120
  if (typeof raw === "boolean") return raw;
@@ -33052,24 +33124,24 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33052
33124
  if (val === "1" || val === "true" || val === "on") return true;
33053
33125
  return void 0;
33054
33126
  };
33055
- const decode$P = (runProps) => {
33127
+ const decode$O = (runProps) => {
33056
33128
  if (runProps?.bold === false) return "0";
33057
33129
  return void 0;
33058
33130
  };
33059
33131
  const attrConfig$t = Object.freeze({
33060
33132
  xmlName: "w:val",
33061
33133
  sdName: "bold",
33062
- encode: encode$X,
33063
- decode: decode$P
33134
+ encode: encode$W,
33135
+ decode: decode$O
33064
33136
  });
33065
- const validXmlAttributes$j = [attrConfig$t];
33066
- const XML_NODE_NAME$v = "w:b";
33067
- const SD_ATTR_KEY$f = "bold";
33068
- const encode$W = (params2, encodedAttrs = {}) => {
33137
+ const validXmlAttributes$l = [attrConfig$t];
33138
+ const XML_NODE_NAME$u = "w:b";
33139
+ const SD_ATTR_KEY$e = "bold";
33140
+ const encode$V = (params2, encodedAttrs = {}) => {
33069
33141
  const { nodes } = params2;
33070
33142
  const node = nodes[0];
33071
33143
  if (!node) return void 0;
33072
- const val = encodedAttrs?.[SD_ATTR_KEY$f];
33144
+ const val = encodedAttrs?.[SD_ATTR_KEY$e];
33073
33145
  let attributes;
33074
33146
  if (val === false) attributes = { "w:val": "0" };
33075
33147
  else if (val === true)
@@ -33077,85 +33149,85 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33077
33149
  else attributes = node.attributes || {};
33078
33150
  return {
33079
33151
  type: "attr",
33080
- xmlName: XML_NODE_NAME$v,
33081
- sdNodeOrKeyName: SD_ATTR_KEY$f,
33152
+ xmlName: XML_NODE_NAME$u,
33153
+ sdNodeOrKeyName: SD_ATTR_KEY$e,
33082
33154
  attributes
33083
33155
  };
33084
33156
  };
33085
- const config$s = {
33086
- xmlName: XML_NODE_NAME$v,
33087
- sdNodeOrKeyName: SD_ATTR_KEY$f,
33157
+ const config$t = {
33158
+ xmlName: XML_NODE_NAME$u,
33159
+ sdNodeOrKeyName: SD_ATTR_KEY$e,
33088
33160
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33089
- encode: encode$W,
33090
- attributes: validXmlAttributes$j
33161
+ encode: encode$V,
33162
+ attributes: validXmlAttributes$l
33091
33163
  };
33092
- const translator$16 = NodeTranslator.from(config$s);
33093
- const XML_NODE_NAME$u = "w:i";
33094
- const SD_ATTR_KEY$e = "italic";
33095
- const encode$V = (params2) => {
33164
+ const translator$1n = NodeTranslator.from(config$t);
33165
+ const XML_NODE_NAME$t = "w:i";
33166
+ const SD_ATTR_KEY$d = "italic";
33167
+ const encode$U = (params2) => {
33096
33168
  const { nodes } = params2;
33097
33169
  const node = nodes?.[0];
33098
33170
  if (!node) return void 0;
33099
33171
  return {
33100
33172
  type: "attr",
33101
- xmlName: XML_NODE_NAME$u,
33102
- sdNodeOrKeyName: SD_ATTR_KEY$e,
33173
+ xmlName: XML_NODE_NAME$t,
33174
+ sdNodeOrKeyName: SD_ATTR_KEY$d,
33103
33175
  attributes: {
33104
33176
  "w:val": node.attributes?.["w:val"] ?? null
33105
33177
  }
33106
33178
  };
33107
33179
  };
33108
- const config$r = {
33109
- xmlName: XML_NODE_NAME$u,
33110
- sdNodeOrKeyName: SD_ATTR_KEY$e,
33180
+ const config$s = {
33181
+ xmlName: XML_NODE_NAME$t,
33182
+ sdNodeOrKeyName: SD_ATTR_KEY$d,
33111
33183
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33112
- encode: encode$V
33184
+ encode: encode$U
33113
33185
  };
33114
- const translator$15 = NodeTranslator.from(config$r);
33115
- const encode$U = (attributes) => attributes?.["w:val"];
33116
- const decode$O = (attrs) => attrs?.underline;
33186
+ const translator$1m = NodeTranslator.from(config$s);
33187
+ const encode$T = (attributes) => attributes?.["w:val"];
33188
+ const decode$N = (attrs) => attrs?.underline;
33117
33189
  const attrConfig$s = Object.freeze({
33118
33190
  xmlName: "w:val",
33119
33191
  sdName: "underline",
33120
- encode: encode$U,
33121
- decode: decode$O
33192
+ encode: encode$T,
33193
+ decode: decode$N
33122
33194
  });
33123
- const encode$T = (attributes) => attributes?.["w:color"];
33124
- const decode$N = (attrs) => attrs?.color;
33195
+ const encode$S = (attributes) => attributes?.["w:color"];
33196
+ const decode$M = (attrs) => attrs?.color;
33125
33197
  const attrConfig$r = Object.freeze({
33126
33198
  xmlName: "w:color",
33127
33199
  sdName: "color",
33128
- encode: encode$T,
33129
- decode: decode$N
33200
+ encode: encode$S,
33201
+ decode: decode$M
33130
33202
  });
33131
- const encode$S = (attributes) => attributes?.["w:themeColor"];
33132
- const decode$M = (attrs) => attrs?.themeColor;
33203
+ const encode$R = (attributes) => attributes?.["w:themeColor"];
33204
+ const decode$L = (attrs) => attrs?.themeColor;
33133
33205
  const attrConfig$q = Object.freeze({
33134
33206
  xmlName: "w:themeColor",
33135
33207
  sdName: "themeColor",
33136
- encode: encode$S,
33137
- decode: decode$M
33208
+ encode: encode$R,
33209
+ decode: decode$L
33138
33210
  });
33139
- const encode$R = (attributes) => attributes?.["w:themeTint"];
33140
- const decode$L = (attrs) => attrs?.themeTint;
33211
+ const encode$Q = (attributes) => attributes?.["w:themeTint"];
33212
+ const decode$K = (attrs) => attrs?.themeTint;
33141
33213
  const attrConfig$p = Object.freeze({
33142
33214
  xmlName: "w:themeTint",
33143
33215
  sdName: "themeTint",
33144
- encode: encode$R,
33145
- decode: decode$L
33216
+ encode: encode$Q,
33217
+ decode: decode$K
33146
33218
  });
33147
- const encode$Q = (attributes) => attributes?.["w:themeShade"];
33148
- const decode$K = (attrs) => attrs?.themeShade;
33219
+ const encode$P = (attributes) => attributes?.["w:themeShade"];
33220
+ const decode$J = (attrs) => attrs?.themeShade;
33149
33221
  const attrConfig$o = Object.freeze({
33150
33222
  xmlName: "w:themeShade",
33151
33223
  sdName: "themeShade",
33152
- encode: encode$Q,
33153
- decode: decode$K
33224
+ encode: encode$P,
33225
+ decode: decode$J
33154
33226
  });
33155
- const validXmlAttributes$i = [attrConfig$s, attrConfig$r, attrConfig$q, attrConfig$p, attrConfig$o];
33156
- const XML_NODE_NAME$t = "w:u";
33157
- const SD_ATTR_KEY$d = "underline";
33158
- const encode$P = (params2, encodedAttrs = {}) => {
33227
+ const validXmlAttributes$k = [attrConfig$s, attrConfig$r, attrConfig$q, attrConfig$p, attrConfig$o];
33228
+ const XML_NODE_NAME$s = "w:u";
33229
+ const SD_ATTR_KEY$c = "underline";
33230
+ const encode$O = (params2, encodedAttrs = {}) => {
33159
33231
  const { nodes } = params2;
33160
33232
  const node = nodes?.[0];
33161
33233
  const sourceAttrs = node?.attributes || {};
@@ -33171,12 +33243,12 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33171
33243
  if (themeShade !== void 0 && themeShade !== null) attributes["w:themeShade"] = themeShade;
33172
33244
  return {
33173
33245
  type: "attr",
33174
- xmlName: XML_NODE_NAME$t,
33175
- sdNodeOrKeyName: SD_ATTR_KEY$d,
33246
+ xmlName: XML_NODE_NAME$s,
33247
+ sdNodeOrKeyName: SD_ATTR_KEY$c,
33176
33248
  attributes
33177
33249
  };
33178
33250
  };
33179
- const decode$J = (params2) => {
33251
+ const decode$I = (params2) => {
33180
33252
  const attrs = params2?.node?.attrs || {};
33181
33253
  const underlineType = attrs.underlineType ?? attrs.underline ?? null;
33182
33254
  const color = attrs.underlineColor ?? attrs.color ?? null;
@@ -33194,20 +33266,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33194
33266
  if (themeTint) attributes["w:themeTint"] = themeTint;
33195
33267
  if (themeShade) attributes["w:themeShade"] = themeShade;
33196
33268
  return {
33197
- name: XML_NODE_NAME$t,
33269
+ name: XML_NODE_NAME$s,
33198
33270
  attributes
33199
33271
  };
33200
33272
  };
33201
- const config$q = {
33202
- xmlName: XML_NODE_NAME$t,
33203
- sdNodeOrKeyName: SD_ATTR_KEY$d,
33273
+ const config$r = {
33274
+ xmlName: XML_NODE_NAME$s,
33275
+ sdNodeOrKeyName: SD_ATTR_KEY$c,
33204
33276
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33205
- encode: encode$P,
33206
- decode: decode$J,
33207
- attributes: validXmlAttributes$i
33277
+ encode: encode$O,
33278
+ decode: decode$I,
33279
+ attributes: validXmlAttributes$k
33208
33280
  };
33209
- const translator$14 = NodeTranslator.from(config$q);
33210
- const encode$O = (attributes) => {
33281
+ const translator$1l = NodeTranslator.from(config$r);
33282
+ const encode$N = (attributes) => {
33211
33283
  const raw = attributes?.["w:val"];
33212
33284
  if (raw === void 0 || raw === null) return void 0;
33213
33285
  if (typeof raw === "boolean") return raw;
@@ -33217,24 +33289,24 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33217
33289
  if (val === "1" || val === "true" || val === "on") return true;
33218
33290
  return void 0;
33219
33291
  };
33220
- const decode$I = (attrs) => {
33292
+ const decode$H = (attrs) => {
33221
33293
  if (attrs?.strike === false) return "0";
33222
33294
  return void 0;
33223
33295
  };
33224
33296
  const attrConfig$n = Object.freeze({
33225
33297
  xmlName: "w:val",
33226
33298
  sdName: "strike",
33227
- encode: encode$O,
33228
- decode: decode$I
33299
+ encode: encode$N,
33300
+ decode: decode$H
33229
33301
  });
33230
- const validXmlAttributes$h = [attrConfig$n];
33231
- const XML_NODE_NAME$s = "w:strike";
33232
- const SD_ATTR_KEY$c = "strike";
33233
- const encode$N = (params2, encodedAttrs = {}) => {
33302
+ const validXmlAttributes$j = [attrConfig$n];
33303
+ const XML_NODE_NAME$r = "w:strike";
33304
+ const SD_ATTR_KEY$b = "strike";
33305
+ const encode$M = (params2, encodedAttrs = {}) => {
33234
33306
  const { nodes } = params2;
33235
33307
  const node = nodes?.[0];
33236
33308
  if (!node) return void 0;
33237
- const val = encodedAttrs?.[SD_ATTR_KEY$c];
33309
+ const val = encodedAttrs?.[SD_ATTR_KEY$b];
33238
33310
  let attributes;
33239
33311
  if (val === false) attributes = { "w:val": "0" };
33240
33312
  else if (val === true) attributes = {};
@@ -33243,55 +33315,55 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33243
33315
  else if (val === true && attributes["w:val"] === void 0) delete attributes["w:val"];
33244
33316
  return {
33245
33317
  type: "attr",
33246
- xmlName: XML_NODE_NAME$s,
33247
- sdNodeOrKeyName: SD_ATTR_KEY$c,
33318
+ xmlName: XML_NODE_NAME$r,
33319
+ sdNodeOrKeyName: SD_ATTR_KEY$b,
33248
33320
  attributes
33249
33321
  };
33250
33322
  };
33251
- const config$p = {
33252
- xmlName: XML_NODE_NAME$s,
33253
- sdNodeOrKeyName: SD_ATTR_KEY$c,
33323
+ const config$q = {
33324
+ xmlName: XML_NODE_NAME$r,
33325
+ sdNodeOrKeyName: SD_ATTR_KEY$b,
33254
33326
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33255
- encode: encode$N,
33256
- attributes: validXmlAttributes$h
33327
+ encode: encode$M,
33328
+ attributes: validXmlAttributes$j
33257
33329
  };
33258
- const translator$13 = NodeTranslator.from(config$p);
33259
- const encode$M = (attributes) => attributes?.["w:val"];
33260
- const decode$H = (attrs) => attrs?.color;
33330
+ const translator$1k = NodeTranslator.from(config$q);
33331
+ const encode$L = (attributes) => attributes?.["w:val"];
33332
+ const decode$G = (attrs) => attrs?.color;
33261
33333
  const attrConfig$m = Object.freeze({
33262
33334
  xmlName: "w:val",
33263
33335
  sdName: "color",
33264
- encode: encode$M,
33265
- decode: decode$H
33336
+ encode: encode$L,
33337
+ decode: decode$G
33266
33338
  });
33267
- const encode$L = (attributes) => attributes?.["w:themeColor"];
33268
- const decode$G = (attrs) => attrs?.themeColor;
33339
+ const encode$K = (attributes) => attributes?.["w:themeColor"];
33340
+ const decode$F = (attrs) => attrs?.themeColor;
33269
33341
  const attrConfig$l = Object.freeze({
33270
33342
  xmlName: "w:themeColor",
33271
33343
  sdName: "themeColor",
33272
- encode: encode$L,
33273
- decode: decode$G
33344
+ encode: encode$K,
33345
+ decode: decode$F
33274
33346
  });
33275
- const encode$K = (attributes) => attributes?.["w:themeTint"];
33276
- const decode$F = (attrs) => attrs?.themeTint;
33347
+ const encode$J = (attributes) => attributes?.["w:themeTint"];
33348
+ const decode$E = (attrs) => attrs?.themeTint;
33277
33349
  const attrConfig$k = Object.freeze({
33278
33350
  xmlName: "w:themeTint",
33279
33351
  sdName: "themeTint",
33280
- encode: encode$K,
33281
- decode: decode$F
33352
+ encode: encode$J,
33353
+ decode: decode$E
33282
33354
  });
33283
- const encode$J = (attributes) => attributes?.["w:themeShade"];
33284
- const decode$E = (attrs) => attrs?.themeShade;
33355
+ const encode$I = (attributes) => attributes?.["w:themeShade"];
33356
+ const decode$D = (attrs) => attrs?.themeShade;
33285
33357
  const attrConfig$j = Object.freeze({
33286
33358
  xmlName: "w:themeShade",
33287
33359
  sdName: "themeShade",
33288
- encode: encode$J,
33289
- decode: decode$E
33360
+ encode: encode$I,
33361
+ decode: decode$D
33290
33362
  });
33291
- const validXmlAttributes$g = [attrConfig$m, attrConfig$l, attrConfig$k, attrConfig$j];
33292
- const XML_NODE_NAME$r = "w:color";
33293
- const SD_ATTR_KEY$b = "color";
33294
- const encode$I = (params2, encodedAttrs = {}) => {
33363
+ const validXmlAttributes$i = [attrConfig$m, attrConfig$l, attrConfig$k, attrConfig$j];
33364
+ const XML_NODE_NAME$q = "w:color";
33365
+ const SD_ATTR_KEY$a = "color";
33366
+ const encode$H = (params2, encodedAttrs = {}) => {
33295
33367
  const { nodes } = params2;
33296
33368
  const node = nodes?.[0];
33297
33369
  const sourceAttrs = node?.attributes || {};
@@ -33306,63 +33378,63 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33306
33378
  if (themeShade !== void 0 && themeShade !== null) attributes["w:themeShade"] = themeShade;
33307
33379
  return {
33308
33380
  type: "attr",
33309
- xmlName: XML_NODE_NAME$r,
33310
- sdNodeOrKeyName: SD_ATTR_KEY$b,
33381
+ xmlName: XML_NODE_NAME$q,
33382
+ sdNodeOrKeyName: SD_ATTR_KEY$a,
33311
33383
  attributes
33312
33384
  };
33313
33385
  };
33314
- const config$o = {
33315
- xmlName: XML_NODE_NAME$r,
33316
- sdNodeOrKeyName: SD_ATTR_KEY$b,
33386
+ const config$p = {
33387
+ xmlName: XML_NODE_NAME$q,
33388
+ sdNodeOrKeyName: SD_ATTR_KEY$a,
33317
33389
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33318
- encode: encode$I,
33319
- attributes: validXmlAttributes$g
33390
+ encode: encode$H,
33391
+ attributes: validXmlAttributes$i
33320
33392
  };
33321
- const translator$12 = NodeTranslator.from(config$o);
33322
- const encode$H = (attributes) => attributes?.["w:eastAsia"];
33323
- const decode$D = (attrs) => attrs?.eastAsia;
33393
+ const translator$1j = NodeTranslator.from(config$p);
33394
+ const encode$G = (attributes) => attributes?.["w:eastAsia"];
33395
+ const decode$C = (attrs) => attrs?.eastAsia;
33324
33396
  const attrConfig$i = Object.freeze({
33325
33397
  xmlName: "w:eastAsia",
33326
33398
  sdName: "eastAsia",
33327
- encode: encode$H,
33328
- decode: decode$D
33399
+ encode: encode$G,
33400
+ decode: decode$C
33329
33401
  });
33330
- const encode$G = (attributes) => attributes?.["w:ascii"];
33331
- const decode$C = (attrs) => attrs?.ascii;
33402
+ const encode$F = (attributes) => attributes?.["w:ascii"];
33403
+ const decode$B = (attrs) => attrs?.ascii;
33332
33404
  const attrConfig$h = Object.freeze({
33333
33405
  xmlName: "w:ascii",
33334
33406
  sdName: "ascii",
33335
- encode: encode$G,
33336
- decode: decode$C
33407
+ encode: encode$F,
33408
+ decode: decode$B
33337
33409
  });
33338
- const encode$F = (attributes) => attributes?.["w:hAnsi"];
33339
- const decode$B = (attrs) => attrs?.hAnsi;
33410
+ const encode$E = (attributes) => attributes?.["w:hAnsi"];
33411
+ const decode$A = (attrs) => attrs?.hAnsi;
33340
33412
  const attrConfig$g = Object.freeze({
33341
33413
  xmlName: "w:hAnsi",
33342
33414
  sdName: "hAnsi",
33343
- encode: encode$F,
33344
- decode: decode$B
33415
+ encode: encode$E,
33416
+ decode: decode$A
33345
33417
  });
33346
- const encode$E = (attributes) => attributes?.["w:cs"];
33347
- const decode$A = (attrs) => attrs?.cs;
33418
+ const encode$D = (attributes) => attributes?.["w:cs"];
33419
+ const decode$z = (attrs) => attrs?.cs;
33348
33420
  const attrConfig$f = Object.freeze({
33349
33421
  xmlName: "w:cs",
33350
33422
  sdName: "cs",
33351
- encode: encode$E,
33352
- decode: decode$A
33423
+ encode: encode$D,
33424
+ decode: decode$z
33353
33425
  });
33354
- const encode$D = (attributes) => attributes?.["w:val"];
33355
- const decode$z = (attrs) => attrs?.value;
33426
+ const encode$C = (attributes) => attributes?.["w:val"];
33427
+ const decode$y = (attrs) => attrs?.value;
33356
33428
  const attrConfig$e = Object.freeze({
33357
33429
  xmlName: "w:val",
33358
33430
  sdName: "value",
33359
- encode: encode$D,
33360
- decode: decode$z
33431
+ encode: encode$C,
33432
+ decode: decode$y
33361
33433
  });
33362
- const validXmlAttributes$f = [attrConfig$i, attrConfig$h, attrConfig$g, attrConfig$f, attrConfig$e];
33363
- const XML_NODE_NAME$q = "w:rFonts";
33364
- const SD_ATTR_KEY$a = "fontFamily";
33365
- const encode$C = (params2, encodedAttrs = {}) => {
33434
+ const validXmlAttributes$h = [attrConfig$i, attrConfig$h, attrConfig$g, attrConfig$f, attrConfig$e];
33435
+ const XML_NODE_NAME$p = "w:rFonts";
33436
+ const SD_ATTR_KEY$9 = "fontFamily";
33437
+ const encode$B = (params2, encodedAttrs = {}) => {
33366
33438
  const { nodes } = params2;
33367
33439
  const node = nodes?.[0];
33368
33440
  const sourceAttrs = node?.attributes || {};
@@ -33386,111 +33458,119 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33386
33458
  attributes["w:val"] = attributes["w:eastAsia"];
33387
33459
  }
33388
33460
  if (attributes["w:val"] === void 0) delete attributes["w:val"];
33461
+ if (params2.inlineDocumentFonts) {
33462
+ const font = attributes["w:ascii"];
33463
+ if (font) {
33464
+ if (!params2.inlineDocumentFonts.includes(font)) {
33465
+ params2.inlineDocumentFonts.push(font);
33466
+ }
33467
+ }
33468
+ }
33389
33469
  return {
33390
33470
  type: "attr",
33391
- xmlName: XML_NODE_NAME$q,
33392
- sdNodeOrKeyName: SD_ATTR_KEY$a,
33471
+ xmlName: XML_NODE_NAME$p,
33472
+ sdNodeOrKeyName: SD_ATTR_KEY$9,
33393
33473
  attributes
33394
33474
  };
33395
33475
  };
33396
- const config$n = {
33397
- xmlName: XML_NODE_NAME$q,
33398
- sdNodeOrKeyName: SD_ATTR_KEY$a,
33476
+ const config$o = {
33477
+ xmlName: XML_NODE_NAME$p,
33478
+ sdNodeOrKeyName: SD_ATTR_KEY$9,
33399
33479
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33400
- encode: encode$C,
33401
- attributes: validXmlAttributes$f
33480
+ encode: encode$B,
33481
+ attributes: validXmlAttributes$h
33402
33482
  };
33403
- const translator$11 = NodeTranslator.from(config$n);
33404
- const encode$B = (attributes) => attributes?.["w:val"];
33405
- const decode$y = (attrs) => attrs?.styleId;
33483
+ const translator$1i = NodeTranslator.from(config$o);
33484
+ const encode$A = (attributes) => attributes?.["w:val"];
33485
+ const decode$x = (attrs) => attrs?.styleId;
33406
33486
  const attrConfig$d = Object.freeze({
33407
33487
  xmlName: "w:val",
33408
33488
  sdName: "styleId",
33409
- encode: encode$B,
33410
- decode: decode$y
33489
+ encode: encode$A,
33490
+ decode: decode$x
33411
33491
  });
33412
- const validXmlAttributes$e = [attrConfig$d];
33413
- const XML_NODE_NAME$p = "w:rStyle";
33414
- const SD_ATTR_KEY$9 = "styleId";
33415
- const encode$A = (params2, encodedAttrs = {}) => {
33492
+ const validXmlAttributes$g = [attrConfig$d];
33493
+ const XML_NODE_NAME$o = "w:rStyle";
33494
+ const SD_ATTR_KEY$8 = "styleId";
33495
+ const encode$z = (params2, encodedAttrs = {}) => {
33416
33496
  const { nodes } = params2;
33417
33497
  const node = nodes?.[0];
33418
33498
  const value = encodedAttrs.styleId ?? node?.attributes?.["w:val"];
33419
33499
  return {
33420
33500
  type: "attr",
33421
- xmlName: XML_NODE_NAME$p,
33422
- sdNodeOrKeyName: SD_ATTR_KEY$9,
33501
+ xmlName: XML_NODE_NAME$o,
33502
+ sdNodeOrKeyName: SD_ATTR_KEY$8,
33423
33503
  attributes: { "w:val": value ?? null }
33424
33504
  };
33425
33505
  };
33426
- const config$m = {
33427
- xmlName: XML_NODE_NAME$p,
33428
- sdNodeOrKeyName: SD_ATTR_KEY$9,
33506
+ const config$n = {
33507
+ xmlName: XML_NODE_NAME$o,
33508
+ sdNodeOrKeyName: SD_ATTR_KEY$8,
33429
33509
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33430
- encode: encode$A,
33431
- attributes: validXmlAttributes$e
33510
+ encode: encode$z,
33511
+ attributes: validXmlAttributes$g
33432
33512
  };
33433
- const translator$10 = NodeTranslator.from(config$m);
33434
- const encode$z = (attributes) => attributes?.["w:val"];
33435
- const decode$x = (attrs) => attrs?.fontSize;
33513
+ const translator$1h = NodeTranslator.from(config$n);
33514
+ const encode$y = (attributes) => attributes?.["w:val"];
33515
+ const decode$w = (attrs) => attrs?.fontSize;
33436
33516
  const attrConfig$c = Object.freeze({
33437
33517
  xmlName: "w:val",
33438
33518
  sdName: "fontSize",
33439
- encode: encode$z,
33440
- decode: decode$x
33519
+ encode: encode$y,
33520
+ decode: decode$w
33441
33521
  });
33442
- const validXmlAttributes$d = [attrConfig$c];
33443
- const XML_NODE_NAME$o = "w:sz";
33444
- const SD_ATTR_KEY$8 = "fontSize";
33445
- const encode$y = (params2, encodedAttrs = {}) => {
33522
+ const validXmlAttributes$f = [attrConfig$c];
33523
+ const XML_NODE_NAME$n = "w:sz";
33524
+ const SD_ATTR_KEY$7 = "fontSize";
33525
+ const encode$x = (params2, encodedAttrs = {}) => {
33446
33526
  const { nodes } = params2;
33447
33527
  const node = nodes?.[0];
33448
33528
  const value = encodedAttrs.fontSize ?? node?.attributes?.["w:val"];
33449
33529
  return {
33450
33530
  type: "attr",
33451
- xmlName: XML_NODE_NAME$o,
33452
- sdNodeOrKeyName: SD_ATTR_KEY$8,
33531
+ xmlName: XML_NODE_NAME$n,
33532
+ sdNodeOrKeyName: SD_ATTR_KEY$7,
33453
33533
  attributes: { "w:val": value ?? null }
33454
33534
  };
33455
33535
  };
33456
- const config$l = {
33457
- xmlName: XML_NODE_NAME$o,
33458
- sdNodeOrKeyName: SD_ATTR_KEY$8,
33536
+ const config$m = {
33537
+ xmlName: XML_NODE_NAME$n,
33538
+ sdNodeOrKeyName: SD_ATTR_KEY$7,
33459
33539
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33460
- encode: encode$y,
33461
- attributes: validXmlAttributes$d
33540
+ encode: encode$x,
33541
+ attributes: validXmlAttributes$f
33462
33542
  };
33463
- const translator$$ = NodeTranslator.from(config$l);
33464
- const encode$x = (attributes) => attributes?.["w:val"];
33465
- const decode$w = (attrs) => attrs?.fontSizeCs;
33543
+ const translator$1g = NodeTranslator.from(config$m);
33544
+ const encode$w = (attributes) => attributes?.["w:val"];
33545
+ const decode$v = (attrs) => attrs?.fontSizeCs;
33466
33546
  const attrConfig$b = Object.freeze({
33467
33547
  xmlName: "w:val",
33468
33548
  sdName: "fontSizeCs",
33469
- encode: encode$x,
33470
- decode: decode$w
33549
+ encode: encode$w,
33550
+ decode: decode$v
33471
33551
  });
33472
- const validXmlAttributes$c = [attrConfig$b];
33473
- const XML_NODE_NAME$n = "w:szCs";
33474
- const SD_ATTR_KEY$7 = "fontSizeCs";
33475
- const encode$w = (params2, encodedAttrs = {}) => {
33552
+ const validXmlAttributes$e = [attrConfig$b];
33553
+ const XML_NODE_NAME$m = "w:szCs";
33554
+ const SD_ATTR_KEY$6 = "fontSizeCs";
33555
+ const encode$v = (params2, encodedAttrs = {}) => {
33476
33556
  const { nodes } = params2;
33477
33557
  const node = nodes?.[0];
33478
33558
  const value = encodedAttrs.fontSizeCs ?? node?.attributes?.["w:val"];
33479
33559
  return {
33480
33560
  type: "attr",
33481
- xmlName: XML_NODE_NAME$n,
33482
- sdNodeOrKeyName: SD_ATTR_KEY$7,
33561
+ xmlName: XML_NODE_NAME$m,
33562
+ sdNodeOrKeyName: SD_ATTR_KEY$6,
33483
33563
  attributes: { "w:val": value ?? null }
33484
33564
  };
33485
33565
  };
33486
- const config$k = {
33487
- xmlName: XML_NODE_NAME$n,
33488
- sdNodeOrKeyName: SD_ATTR_KEY$7,
33566
+ const config$l = {
33567
+ xmlName: XML_NODE_NAME$m,
33568
+ sdNodeOrKeyName: SD_ATTR_KEY$6,
33489
33569
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33490
- encode: encode$w,
33491
- attributes: validXmlAttributes$c
33570
+ encode: encode$v,
33571
+ attributes: validXmlAttributes$e
33492
33572
  };
33493
- const translator$_ = NodeTranslator.from(config$k);
33573
+ const translator$1f = NodeTranslator.from(config$l);
33494
33574
  const generateV2HandlerEntity = (handlerName, translator2) => ({
33495
33575
  handlerName,
33496
33576
  handler: (params2) => {
@@ -33514,7 +33594,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33514
33594
  xmlName,
33515
33595
  sdNodeOrKeyName: sdName,
33516
33596
  encode: ({ nodes }) => {
33517
- return transformEncode(nodes[0].attributes[attrName]) ?? void 0;
33597
+ return transformEncode(nodes[0]?.attributes?.[attrName]) ?? void 0;
33518
33598
  },
33519
33599
  decode: ({ node }) => {
33520
33600
  const value = node.attrs?.[sdName] != null ? transformDecode(node.attrs[sdName]) : void 0;
@@ -33546,8 +33626,32 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33546
33626
  xmlName,
33547
33627
  sdNodeOrKeyName: sdName,
33548
33628
  attributes: [
33549
- createAttributeHandler("w:val"),
33550
- createAttributeHandler("w:color"),
33629
+ createAttributeHandler(
33630
+ "w:val",
33631
+ "val",
33632
+ (v2) => v2 === "nil" ? "none" : v2,
33633
+ (v2) => v2 === "none" ? "nil" : v2
33634
+ ),
33635
+ createAttributeHandler(
33636
+ "w:color",
33637
+ "color",
33638
+ (v2) => {
33639
+ if (v2 === "auto") {
33640
+ return null;
33641
+ } else if (v2) {
33642
+ return `#${v2}`;
33643
+ } else {
33644
+ return void 0;
33645
+ }
33646
+ },
33647
+ (v2) => {
33648
+ if (v2) {
33649
+ return v2.replace("#", "");
33650
+ } else {
33651
+ return void 0;
33652
+ }
33653
+ }
33654
+ ),
33551
33655
  createAttributeHandler("w:themeColor"),
33552
33656
  createAttributeHandler("w:themeTint"),
33553
33657
  createAttributeHandler("w:themeShade"),
@@ -33613,6 +33717,37 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33613
33717
  });
33614
33718
  return elements;
33615
33719
  }
33720
+ function createNestedPropertiesTranslator(xmlName, sdName, propertyTranslators2, defaultEncodedAttrs = {}) {
33721
+ const propertyTranslatorsByXmlName = {};
33722
+ const propertyTranslatorsBySdName = {};
33723
+ propertyTranslators2.forEach((translator2) => {
33724
+ propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
33725
+ propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
33726
+ });
33727
+ return {
33728
+ xmlName,
33729
+ sdNodeOrKeyName: sdName,
33730
+ type: NodeTranslator.translatorTypes.NODE,
33731
+ attributes: [],
33732
+ encode: (params2) => {
33733
+ const { nodes } = params2;
33734
+ const node = nodes[0];
33735
+ const attributes = { ...defaultEncodedAttrs, ...encodeProperties(node, propertyTranslatorsByXmlName) };
33736
+ return Object.keys(attributes).length > 0 ? attributes : void 0;
33737
+ },
33738
+ decode: (params2) => {
33739
+ const currentValue = params2.node.attrs?.[sdName];
33740
+ const elements = decodeProperties(propertyTranslatorsBySdName, currentValue);
33741
+ const newNode = {
33742
+ name: xmlName,
33743
+ type: "element",
33744
+ attributes: {},
33745
+ elements
33746
+ };
33747
+ return newNode;
33748
+ }
33749
+ };
33750
+ }
33616
33751
  const parseBoolean = (value) => value != null ? ["1", "true"].includes(value) : void 0;
33617
33752
  const booleanToString = (value) => value != null ? value ? "1" : "0" : void 0;
33618
33753
  const parseInteger = (value) => {
@@ -33624,9 +33759,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33624
33759
  const intValue = parseInteger(value);
33625
33760
  return intValue != void 0 ? String(intValue) : void 0;
33626
33761
  };
33627
- const XML_NODE_NAME$m = "w:caps";
33628
- const SD_ATTR_KEY$6 = "textTransform";
33629
- const encode$v = (params2, encodedAttrs = {}) => {
33762
+ const XML_NODE_NAME$l = "w:caps";
33763
+ const SD_ATTR_KEY$5 = "textTransform";
33764
+ const encode$u = (params2, encodedAttrs = {}) => {
33630
33765
  const { nodes } = params2;
33631
33766
  const node = nodes[0];
33632
33767
  if (!node) return void 0;
@@ -33638,31 +33773,31 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33638
33773
  }
33639
33774
  return {
33640
33775
  type: "attr",
33641
- xmlName: XML_NODE_NAME$m,
33642
- sdNodeOrKeyName: SD_ATTR_KEY$6,
33643
- attributes: { [SD_ATTR_KEY$6]: result }
33776
+ xmlName: XML_NODE_NAME$l,
33777
+ sdNodeOrKeyName: SD_ATTR_KEY$5,
33778
+ attributes: { [SD_ATTR_KEY$5]: result }
33644
33779
  };
33645
33780
  };
33646
- const config$j = {
33647
- xmlName: XML_NODE_NAME$m,
33648
- sdNodeOrKeyName: SD_ATTR_KEY$6,
33781
+ const config$k = {
33782
+ xmlName: XML_NODE_NAME$l,
33783
+ sdNodeOrKeyName: SD_ATTR_KEY$5,
33649
33784
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33650
- encode: encode$v,
33785
+ encode: encode$u,
33651
33786
  attributes: [createAttributeHandler("w:val")]
33652
33787
  };
33653
- const translator$Z = NodeTranslator.from(config$j);
33788
+ const translator$1e = NodeTranslator.from(config$k);
33654
33789
  const runPropertyTranslators = Object.freeze({
33655
- "w:b": translator$16,
33656
- "w:i": translator$15,
33657
- "w:u": translator$14,
33658
- "w:strike": translator$13,
33659
- "w:color": translator$12,
33660
- "w:highlight": translator$19,
33661
- "w:rFonts": translator$11,
33662
- "w:rStyle": translator$10,
33663
- "w:sz": translator$$,
33664
- "w:szCs": translator$_,
33665
- "w:caps": translator$Z
33790
+ "w:b": translator$1n,
33791
+ "w:i": translator$1m,
33792
+ "w:u": translator$1l,
33793
+ "w:strike": translator$1k,
33794
+ "w:color": translator$1j,
33795
+ "w:highlight": translator$1q,
33796
+ "w:rFonts": translator$1i,
33797
+ "w:rStyle": translator$1h,
33798
+ "w:sz": translator$1g,
33799
+ "w:szCs": translator$1f,
33800
+ "w:caps": translator$1e
33666
33801
  });
33667
33802
  const rawRunPropertyXmlNames = Object.freeze(["w:lang", "w:shd"]);
33668
33803
  const RAW_CHILD_NAME_SET = new Set(rawRunPropertyXmlNames);
@@ -33676,9 +33811,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33676
33811
  attributes: { ...candidate.attributes || {} }
33677
33812
  };
33678
33813
  };
33679
- const XML_NODE_NAME$l = "w:rPr";
33680
- const SD_ATTR_KEY$5 = "runProperties";
33681
- const encode$u = (params2) => {
33814
+ const XML_NODE_NAME$k = "w:rPr";
33815
+ const SD_ATTR_KEY$4 = "runProperties";
33816
+ const encode$t = (params2) => {
33682
33817
  const { nodes } = params2;
33683
33818
  const node = nodes?.[0] || {};
33684
33819
  const contents = Array.isArray(node.elements) ? node.elements : [];
@@ -33712,16 +33847,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33712
33847
  attributes: runPropsArray
33713
33848
  };
33714
33849
  };
33715
- const config$i = {
33716
- xmlName: XML_NODE_NAME$l,
33717
- sdNodeOrKeyName: SD_ATTR_KEY$5,
33850
+ const config$j = {
33851
+ xmlName: XML_NODE_NAME$k,
33852
+ sdNodeOrKeyName: SD_ATTR_KEY$4,
33718
33853
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33719
- encode: encode$u
33854
+ encode: encode$t
33720
33855
  };
33721
- const translator$Y = NodeTranslator.from(config$i);
33856
+ const translator$1d = NodeTranslator.from(config$j);
33722
33857
  const EAST_ASIAN_CHARACTER_REGEX = /[\u1100-\u11FF\u2E80-\u2EFF\u2F00-\u2FDF\u3040-\u30FF\u3100-\u312F\u3130-\u318F\u31A0-\u31BF\u3400-\u4DBF\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7AF\uF900-\uFAFF\uFF00-\uFFEF]/u;
33723
33858
  const containsEastAsianCharacters = (text) => EAST_ASIAN_CHARACTER_REGEX.test(text);
33724
- const collectRunProperties = (params2, rPrNode, translator2 = translator$Y) => {
33859
+ const collectRunProperties = (params2, rPrNode, translator2 = translator$1d) => {
33725
33860
  if (!rPrNode) return { entries: [], hadRPr: false, styleChangeMarks: [] };
33726
33861
  const result = translator2.encode({ ...params2, nodes: [rPrNode] }) || {};
33727
33862
  let entries = [];
@@ -34194,7 +34329,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34194
34329
  }
34195
34330
  return runs;
34196
34331
  };
34197
- const XML_NODE_NAME$k = "w:hyperlink";
34332
+ const XML_NODE_NAME$j = "w:hyperlink";
34198
34333
  const SD_NODE_NAME$e = "link";
34199
34334
  const _createAttributeHandler = (xmlName, sdName) => ({
34200
34335
  xmlName,
@@ -34202,7 +34337,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34202
34337
  encode: (attributes) => attributes[xmlName],
34203
34338
  decode: (attributes) => attributes[sdName]
34204
34339
  });
34205
- const validXmlAttributes$b = [
34340
+ const validXmlAttributes$d = [
34206
34341
  _createAttributeHandler("w:anchor", "anchor"),
34207
34342
  _createAttributeHandler("w:docLocation", "docLocation"),
34208
34343
  {
@@ -34215,7 +34350,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34215
34350
  _createAttributeHandler("r:id", "rId"),
34216
34351
  _createAttributeHandler("w:tgtFrame", "target")
34217
34352
  ];
34218
- const encode$t = (params2, encodedAttrs) => {
34353
+ const encode$s = (params2, encodedAttrs) => {
34219
34354
  const { nodes, docx, nodeListHandler } = params2;
34220
34355
  const node = nodes[0];
34221
34356
  let href = _resolveHref(docx, encodedAttrs);
@@ -34249,7 +34384,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34249
34384
  }
34250
34385
  return href;
34251
34386
  };
34252
- function decode$v(params2) {
34387
+ function decode$u(params2) {
34253
34388
  const { hyperlinkGroup = [params2.node] } = params2.extraParams || {};
34254
34389
  const node = hyperlinkGroup[0];
34255
34390
  const linkMark = node.marks.find((m2) => m2.type === "link");
@@ -34298,55 +34433,55 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34298
34433
  });
34299
34434
  return id;
34300
34435
  }
34301
- const config$h = {
34302
- xmlName: XML_NODE_NAME$k,
34436
+ const config$i = {
34437
+ xmlName: XML_NODE_NAME$j,
34303
34438
  sdNodeOrKeyName: SD_NODE_NAME$e,
34304
34439
  type: NodeTranslator.translatorTypes.NODE,
34305
- encode: encode$t,
34306
- decode: decode$v,
34307
- attributes: validXmlAttributes$b
34440
+ encode: encode$s,
34441
+ decode: decode$u,
34442
+ attributes: validXmlAttributes$d
34308
34443
  };
34309
- const translator$X = NodeTranslator.from(config$h);
34310
- const encode$s = (attributes) => {
34444
+ const translator$1c = NodeTranslator.from(config$i);
34445
+ const encode$r = (attributes) => {
34311
34446
  return attributes["w:rsidR"];
34312
34447
  };
34313
- const decode$u = (attrs) => {
34448
+ const decode$t = (attrs) => {
34314
34449
  return attrs.rsidR;
34315
34450
  };
34316
34451
  const attrConfig$a = Object.freeze({
34317
34452
  xmlName: "w:rsidR",
34318
34453
  sdName: "rsidR",
34319
- encode: encode$s,
34320
- decode: decode$u
34454
+ encode: encode$r,
34455
+ decode: decode$t
34321
34456
  });
34322
- const encode$r = (attributes) => {
34457
+ const encode$q = (attributes) => {
34323
34458
  return attributes["w:rsidRPr"];
34324
34459
  };
34325
- const decode$t = (attrs) => {
34460
+ const decode$s = (attrs) => {
34326
34461
  return attrs.rsidRPr;
34327
34462
  };
34328
34463
  const attrConfig$9 = Object.freeze({
34329
34464
  xmlName: "w:rsidRPr",
34330
34465
  sdName: "rsidRPr",
34331
- encode: encode$r,
34332
- decode: decode$t
34466
+ encode: encode$q,
34467
+ decode: decode$s
34333
34468
  });
34334
- const encode$q = (attributes) => {
34469
+ const encode$p = (attributes) => {
34335
34470
  return attributes["w:rsidDel"];
34336
34471
  };
34337
- const decode$s = (attrs) => {
34472
+ const decode$r = (attrs) => {
34338
34473
  return attrs.rsidDel;
34339
34474
  };
34340
34475
  const attrConfig$8 = Object.freeze({
34341
34476
  xmlName: "w:rsidDel",
34342
34477
  sdName: "rsidDel",
34343
- encode: encode$q,
34344
- decode: decode$s
34478
+ encode: encode$p,
34479
+ decode: decode$r
34345
34480
  });
34346
- const validXmlAttributes$a = [attrConfig$a, attrConfig$9, attrConfig$8];
34347
- const XML_NODE_NAME$j = "w:r";
34481
+ const validXmlAttributes$c = [attrConfig$a, attrConfig$9, attrConfig$8];
34482
+ const XML_NODE_NAME$i = "w:r";
34348
34483
  const SD_KEY_NAME = "run";
34349
- const encode$p = (params2, encodedAttrs = {}) => {
34484
+ const encode$o = (params2, encodedAttrs = {}) => {
34350
34485
  const { nodes = [], nodeListHandler } = params2 || {};
34351
34486
  const runNode = nodes[0];
34352
34487
  if (!runNode) return void 0;
@@ -34394,7 +34529,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34394
34529
  }
34395
34530
  return runNodeResult;
34396
34531
  };
34397
- const decode$r = (params2, decodedAttrs = {}) => {
34532
+ const decode$q = (params2, decodedAttrs = {}) => {
34398
34533
  const { node } = params2 || {};
34399
34534
  if (!node) return void 0;
34400
34535
  const isLinkNode = node.marks?.some((m2) => m2.type === "link");
@@ -34403,7 +34538,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34403
34538
  ...params2.extraParams,
34404
34539
  linkProcessed: true
34405
34540
  };
34406
- return translator$X.decode({ ...params2, extraParams });
34541
+ return translator$1c.decode({ ...params2, extraParams });
34407
34542
  }
34408
34543
  const { runNode: runNodeForExport, trackingMarksByType } = prepareRunTrackingContext(node);
34409
34544
  const runAttrs = runNodeForExport.attrs || {};
@@ -34459,7 +34594,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34459
34594
  runs.push(trackedClone);
34460
34595
  return;
34461
34596
  }
34462
- const runWrapper = { name: XML_NODE_NAME$j, elements: [] };
34597
+ const runWrapper = { name: XML_NODE_NAME$i, elements: [] };
34463
34598
  applyBaseRunProps(runWrapper);
34464
34599
  if (!Array.isArray(runWrapper.elements)) runWrapper.elements = [];
34465
34600
  runWrapper.elements.push(cloneXmlNode(child));
@@ -34467,7 +34602,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34467
34602
  });
34468
34603
  const trackedRuns = ensureTrackedWrapper(runs, trackingMarksByType);
34469
34604
  if (!trackedRuns.length) {
34470
- const emptyRun = { name: XML_NODE_NAME$j, elements: [] };
34605
+ const emptyRun = { name: XML_NODE_NAME$i, elements: [] };
34471
34606
  applyBaseRunProps(emptyRun);
34472
34607
  trackedRuns.push(emptyRun);
34473
34608
  }
@@ -34481,15 +34616,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34481
34616
  }
34482
34617
  return trackedRuns;
34483
34618
  };
34484
- const config$g = {
34485
- xmlName: XML_NODE_NAME$j,
34619
+ const config$h = {
34620
+ xmlName: XML_NODE_NAME$i,
34486
34621
  sdNodeOrKeyName: SD_KEY_NAME,
34487
34622
  type: NodeTranslator.translatorTypes.NODE,
34488
- encode: encode$p,
34489
- decode: decode$r,
34490
- attributes: validXmlAttributes$a
34623
+ encode: encode$o,
34624
+ decode: decode$q,
34625
+ attributes: validXmlAttributes$c
34491
34626
  };
34492
- const translator$W = NodeTranslator.from(config$g);
34627
+ const translator$1b = NodeTranslator.from(config$h);
34493
34628
  function preProcessVerticalMergeCells(table, { editorSchema }) {
34494
34629
  if (!table || !Array.isArray(table.content)) {
34495
34630
  return table;
@@ -34530,13 +34665,13 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34530
34665
  }
34531
34666
  return table;
34532
34667
  }
34533
- const translator$V = NodeTranslator.from({
34668
+ const translator$1a = NodeTranslator.from({
34534
34669
  xmlName: "w:cantSplit",
34535
34670
  sdNodeOrKeyName: "cantSplit",
34536
34671
  encode: ({ nodes }) => ["1", "true"].includes(nodes[0].attributes?.["w:val"] ?? "1"),
34537
34672
  decode: ({ node }) => node.attrs?.cantSplit ? { attributes: {} } : void 0
34538
34673
  });
34539
- const translator$U = NodeTranslator.from({
34674
+ const translator$19 = NodeTranslator.from({
34540
34675
  xmlName: "w:cnfStyle",
34541
34676
  sdNodeOrKeyName: "cnfStyle",
34542
34677
  attributes: [
@@ -34562,8 +34697,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34562
34697
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34563
34698
  }
34564
34699
  });
34565
- const translator$T = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
34566
- const translator$S = NodeTranslator.from(
34700
+ const translator$18 = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
34701
+ const translator$17 = NodeTranslator.from(
34567
34702
  createSingleAttrPropertyHandler(
34568
34703
  "w:gridAfter",
34569
34704
  null,
@@ -34572,7 +34707,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34572
34707
  (v2) => integerToString(v2)
34573
34708
  )
34574
34709
  );
34575
- const translator$R = NodeTranslator.from(
34710
+ const translator$16 = NodeTranslator.from(
34576
34711
  createSingleAttrPropertyHandler(
34577
34712
  "w:gridBefore",
34578
34713
  null,
@@ -34581,21 +34716,21 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34581
34716
  (v2) => integerToString(v2)
34582
34717
  )
34583
34718
  );
34584
- const translator$Q = NodeTranslator.from({
34719
+ const translator$15 = NodeTranslator.from({
34585
34720
  xmlName: "w:hidden",
34586
34721
  sdNodeOrKeyName: "hidden",
34587
34722
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34588
34723
  decode: ({ node }) => node.attrs.hidden ? { attributes: {} } : void 0
34589
34724
  });
34590
- const translator$P = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification"));
34591
- const translator$O = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "tableCellSpacing"));
34592
- const translator$N = NodeTranslator.from({
34725
+ const translator$14 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification"));
34726
+ const translator$13 = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "tableCellSpacing"));
34727
+ const translator$12 = NodeTranslator.from({
34593
34728
  xmlName: "w:tblHeader",
34594
34729
  sdNodeOrKeyName: "repeatHeader",
34595
34730
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34596
34731
  decode: ({ node }) => node.attrs.repeatHeader ? { attributes: {} } : void 0
34597
34732
  });
34598
- const translator$M = NodeTranslator.from({
34733
+ const translator$11 = NodeTranslator.from({
34599
34734
  xmlName: "w:trHeight",
34600
34735
  sdNodeOrKeyName: "rowHeight",
34601
34736
  encode: ({ nodes }) => {
@@ -34622,73 +34757,32 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34622
34757
  return Object.keys(heightAttrs).length > 0 ? { attributes: heightAttrs } : void 0;
34623
34758
  }
34624
34759
  });
34625
- const translator$L = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
34626
- const translator$K = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
34627
- const XML_NODE_NAME$i = "w:trPr";
34628
- const SD_ATTR_KEY$4 = "tableRowProperties";
34629
- const encode$o = (params2) => {
34630
- const { nodes } = params2;
34631
- const node = nodes[0];
34632
- let attributes = {
34760
+ const translator$10 = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
34761
+ const translator$$ = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
34762
+ const propertyTranslators$6 = [
34763
+ translator$1a,
34764
+ translator$19,
34765
+ translator$18,
34766
+ translator$17,
34767
+ translator$16,
34768
+ translator$15,
34769
+ translator$14,
34770
+ translator$13,
34771
+ translator$12,
34772
+ translator$11,
34773
+ translator$10,
34774
+ translator$$
34775
+ ];
34776
+ const translator$_ = NodeTranslator.from(
34777
+ createNestedPropertiesTranslator("w:trPr", "tableRowProperties", propertyTranslators$6, {
34633
34778
  cantSplit: false,
34634
34779
  hidden: false,
34635
34780
  repeatHeader: false
34636
- };
34637
- attributes = {
34638
- ...attributes,
34639
- ...encodeProperties(node, propertyTranslatorsByXmlName$2)
34640
- };
34641
- return {
34642
- type: NodeTranslator.translatorTypes.ATTRIBUTE,
34643
- xmlName: XML_NODE_NAME$i,
34644
- sdNodeOrKeyName: SD_ATTR_KEY$4,
34645
- attributes
34646
- };
34647
- };
34648
- const decode$q = (params2) => {
34649
- const { tableRowProperties = {} } = params2.node.attrs || {};
34650
- const elements = decodeProperties(propertyTranslatorsBySdName$2, tableRowProperties);
34651
- const newNode = {
34652
- name: "w:trPr",
34653
- type: "element",
34654
- attributes: {},
34655
- elements
34656
- };
34657
- return newNode;
34658
- };
34659
- const propertyTranslators$3 = [
34660
- translator$V,
34661
- translator$U,
34662
- translator$T,
34663
- translator$S,
34664
- translator$R,
34665
- translator$Q,
34666
- translator$P,
34667
- translator$O,
34668
- translator$N,
34669
- translator$M,
34670
- translator$L,
34671
- translator$K
34672
- ];
34673
- const propertyTranslatorsByXmlName$2 = {};
34674
- propertyTranslators$3.forEach((translator2) => {
34675
- propertyTranslatorsByXmlName$2[translator2.xmlName] = translator2;
34676
- });
34677
- const propertyTranslatorsBySdName$2 = {};
34678
- propertyTranslators$3.forEach((translator2) => {
34679
- propertyTranslatorsBySdName$2[translator2.sdNodeOrKeyName] = translator2;
34680
- });
34681
- const config$f = {
34682
- xmlName: XML_NODE_NAME$i,
34683
- sdNodeOrKeyName: SD_ATTR_KEY$4,
34684
- type: NodeTranslator.translatorTypes.ATTRIBUTE,
34685
- encode: encode$o,
34686
- decode: decode$q
34687
- };
34688
- const translator$J = NodeTranslator.from(config$f);
34781
+ })
34782
+ );
34689
34783
  const XML_NODE_NAME$h = "w:tr";
34690
34784
  const SD_NODE_NAME$d = "tableRow";
34691
- const validXmlAttributes$9 = ["w:rsidDel", "w:rsidR", "w:rsidRPr", "w:rsidTr", "w14:paraId", "w14:textId"].map(
34785
+ const validXmlAttributes$b = ["w:rsidDel", "w:rsidR", "w:rsidRPr", "w:rsidTr", "w14:paraId", "w14:textId"].map(
34692
34786
  (xmlName) => createAttributeHandler(xmlName)
34693
34787
  );
34694
34788
  const encode$n = (params2, encodedAttrs) => {
@@ -34696,10 +34790,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34696
34790
  let tableRowProperties = {};
34697
34791
  const tPr = row.elements.find((el) => el.name === "w:trPr");
34698
34792
  if (tPr) {
34699
- ({ attributes: tableRowProperties } = translator$J.encode({
34793
+ tableRowProperties = translator$_.encode({
34700
34794
  ...params2,
34701
34795
  nodes: [tPr]
34702
- }));
34796
+ });
34703
34797
  }
34704
34798
  encodedAttrs["tableRowProperties"] = Object.freeze(tableRowProperties);
34705
34799
  encodedAttrs["rowHeight"] = twipsToPixels(tableRowProperties["rowHeight"]?.value);
@@ -34709,7 +34803,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34709
34803
  let currentColumnIndex = 0;
34710
34804
  const content = cellNodes?.map((n) => {
34711
34805
  let columnWidth = gridColumnWidths?.[currentColumnIndex] || null;
34712
- const result = translator$a.encode({
34806
+ const result = translator$c.encode({
34713
34807
  ...params2,
34714
34808
  extraParams: {
34715
34809
  ...params2.extraParams,
@@ -34743,7 +34837,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34743
34837
  }
34744
34838
  }
34745
34839
  tableRowProperties["cantSplit"] = node.attrs["cantSplit"];
34746
- const trPr = translator$J.decode({
34840
+ const trPr = translator$_.decode({
34747
34841
  ...params2,
34748
34842
  node: { ...node, attrs: { ...node.attrs, tableRowProperties } }
34749
34843
  });
@@ -34755,22 +34849,22 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34755
34849
  elements
34756
34850
  };
34757
34851
  };
34758
- const config$e = {
34852
+ const config$g = {
34759
34853
  xmlName: XML_NODE_NAME$h,
34760
34854
  sdNodeOrKeyName: SD_NODE_NAME$d,
34761
34855
  type: NodeTranslator.translatorTypes.NODE,
34762
34856
  encode: encode$n,
34763
34857
  decode: decode$p,
34764
- attributes: validXmlAttributes$9
34858
+ attributes: validXmlAttributes$b
34765
34859
  };
34766
- const translator$I = NodeTranslator.from(config$e);
34767
- const translator$H = NodeTranslator.from({
34860
+ const translator$Z = NodeTranslator.from(config$g);
34861
+ const translator$Y = NodeTranslator.from({
34768
34862
  xmlName: "w:bidiVisual",
34769
34863
  sdNodeOrKeyName: "rightToLeft",
34770
34864
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34771
34865
  decode: ({ node }) => node.attrs.rightToLeft ? { attributes: {} } : void 0
34772
34866
  });
34773
- const translator$G = NodeTranslator.from({
34867
+ const translator$X = NodeTranslator.from({
34774
34868
  xmlName: "w:shd",
34775
34869
  sdNodeOrKeyName: "shading",
34776
34870
  attributes: [
@@ -34792,11 +34886,11 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34792
34886
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34793
34887
  }
34794
34888
  });
34795
- const translator$F = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblCaption", "caption"));
34796
- const translator$E = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblDescription", "description"));
34797
- const translator$D = NodeTranslator.from(createMeasurementPropertyHandler("w:tblInd", "tableIndent"));
34798
- const translator$C = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblLayout", "tableLayout", "w:type"));
34799
- const translator$B = NodeTranslator.from({
34889
+ const translator$W = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblCaption", "caption"));
34890
+ const translator$V = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblDescription", "description"));
34891
+ const translator$U = NodeTranslator.from(createMeasurementPropertyHandler("w:tblInd", "tableIndent"));
34892
+ const translator$T = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblLayout", "tableLayout", "w:type"));
34893
+ const translator$S = NodeTranslator.from({
34800
34894
  xmlName: "w:tblLook",
34801
34895
  sdNodeOrKeyName: "tblLook",
34802
34896
  attributes: ["w:firstColumn", "w:firstRow", "w:lastColumn", "w:lastRow", "w:noHBand", "w:noVBand"].map((attr) => createAttributeHandler(attr, null, parseBoolean, booleanToString)).concat([createAttributeHandler("w:val")]),
@@ -34808,16 +34902,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34808
34902
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34809
34903
  }
34810
34904
  });
34811
- const translator$A = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblOverlap", "overlap"));
34812
- const translator$z = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblStyle", "tableStyleId"));
34813
- const translator$y = NodeTranslator.from(
34905
+ const translator$R = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblOverlap", "overlap"));
34906
+ const translator$Q = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblStyle", "tableStyleId"));
34907
+ const translator$P = NodeTranslator.from(
34814
34908
  createSingleAttrPropertyHandler("w:tblStyleColBandSize", "tableStyleColBandSize")
34815
34909
  );
34816
- const translator$x = NodeTranslator.from(
34910
+ const translator$O = NodeTranslator.from(
34817
34911
  createSingleAttrPropertyHandler("w:tblStyleRowBandSize", "tableStyleRowBandSize")
34818
34912
  );
34819
- const translator$w = NodeTranslator.from(createMeasurementPropertyHandler("w:tblW", "tableWidth"));
34820
- const translator$v = NodeTranslator.from({
34913
+ const translator$N = NodeTranslator.from(createMeasurementPropertyHandler("w:tblW", "tableWidth"));
34914
+ const translator$M = NodeTranslator.from({
34821
34915
  xmlName: "w:tblpPr",
34822
34916
  sdNodeOrKeyName: "floatingTableProperties",
34823
34917
  attributes: ["w:leftFromText", "w:rightFromText", "w:topFromText", "w:bottomFromText", "w:tblpX", "w:tblpY"].map((attr) => createAttributeHandler(attr, null, parseInteger, integerToString)).concat(["w:horzAnchor", "w:vertAnchor", "w:tblpXSpec", "w:tblpYSpec"].map((attr) => createAttributeHandler(attr))),
@@ -34829,160 +34923,67 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34829
34923
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34830
34924
  }
34831
34925
  });
34832
- const translator$u = NodeTranslator.from(createBorderPropertyHandler("w:bottom"));
34833
- const translator$t = NodeTranslator.from(createMeasurementPropertyHandler("w:bottom", "marginBottom"));
34834
- const translator$s = NodeTranslator.from(createBorderPropertyHandler("w:end"));
34835
- const translator$r = NodeTranslator.from(createMeasurementPropertyHandler("w:end", "marginEnd"));
34836
- const translator$q = NodeTranslator.from(createBorderPropertyHandler("w:insideH"));
34837
- const translator$p = NodeTranslator.from(createBorderPropertyHandler("w:insideV"));
34838
- const translator$o = NodeTranslator.from(createBorderPropertyHandler("w:left"));
34839
- const translator$n = NodeTranslator.from(createMeasurementPropertyHandler("w:left", "marginLeft"));
34840
- const translator$m = NodeTranslator.from(createBorderPropertyHandler("w:right"));
34841
- const translator$l = NodeTranslator.from(createMeasurementPropertyHandler("w:right", "marginRight"));
34842
- const translator$k = NodeTranslator.from(createBorderPropertyHandler("w:start"));
34843
- const translator$j = NodeTranslator.from(createMeasurementPropertyHandler("w:start", "marginStart"));
34844
- const translator$i = NodeTranslator.from(createBorderPropertyHandler("w:top"));
34845
- const translator$h = NodeTranslator.from(createMeasurementPropertyHandler("w:top", "marginTop"));
34846
- const XML_NODE_NAME$g = "w:tblBorders";
34847
- const SD_ATTR_KEY$3 = "borders";
34848
- const encode$m = (params2) => {
34849
- const { nodes } = params2;
34850
- const node = nodes[0];
34851
- const attributes = encodeProperties(node, tblBordersTranslatorsByXmlName);
34852
- return Object.keys(attributes).length > 0 ? attributes : void 0;
34853
- };
34854
- const decode$o = (params2) => {
34855
- const { borders = {} } = params2.node.attrs || {};
34856
- const elements = decodeProperties(tblBordersTranslatorsBySdName, borders);
34857
- const newNode = {
34858
- name: "w:tblBorders",
34859
- type: "element",
34860
- attributes: {},
34861
- elements
34862
- };
34863
- return newNode;
34864
- };
34865
- const propertyTranslators$2 = [
34866
- translator$u,
34867
- translator$s,
34868
- translator$q,
34869
- translator$p,
34870
- translator$o,
34871
- translator$m,
34872
- translator$k,
34873
- translator$i
34874
- ];
34875
- const tblBordersTranslatorsByXmlName = {};
34876
- const tblBordersTranslatorsBySdName = {};
34877
- propertyTranslators$2.forEach((translator2) => {
34878
- tblBordersTranslatorsByXmlName[translator2.xmlName] = translator2;
34879
- tblBordersTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
34880
- });
34881
- const translator$g = NodeTranslator.from({
34882
- xmlName: XML_NODE_NAME$g,
34883
- sdNodeOrKeyName: SD_ATTR_KEY$3,
34884
- type: NodeTranslator.translatorTypes.NODE,
34885
- attributes: [],
34886
- encode: encode$m,
34887
- decode: decode$o
34888
- });
34889
- const XML_NODE_NAME$f = "w:tblCellMar";
34890
- const SD_ATTR_KEY$2 = "cellMargins";
34891
- const encode$l = (params2) => {
34892
- const { nodes } = params2;
34893
- const node = nodes[0];
34894
- const attributes = encodeProperties(node, propertyTranslatorsByXmlName$1);
34895
- return Object.keys(attributes).length > 0 ? attributes : void 0;
34896
- };
34897
- const decode$n = (params2) => {
34898
- const { cellMargins = {} } = params2.node.attrs || {};
34899
- const elements = decodeProperties(propertyTranslatorsBySdName$1, cellMargins);
34900
- const newNode = {
34901
- name: XML_NODE_NAME$f,
34902
- type: "element",
34903
- attributes: {},
34904
- elements
34905
- };
34906
- return newNode;
34907
- };
34908
- const propertyTranslators$1 = [
34909
- translator$t,
34910
- translator$r,
34911
- translator$n,
34912
- translator$l,
34913
- translator$j,
34914
- translator$h
34915
- ];
34916
- const propertyTranslatorsByXmlName$1 = {};
34917
- const propertyTranslatorsBySdName$1 = {};
34918
- propertyTranslators$1.forEach((translator2) => {
34919
- propertyTranslatorsByXmlName$1[translator2.xmlName] = translator2;
34920
- propertyTranslatorsBySdName$1[translator2.sdNodeOrKeyName] = translator2;
34921
- });
34922
- const translator$f = NodeTranslator.from({
34923
- xmlName: XML_NODE_NAME$f,
34924
- sdNodeOrKeyName: SD_ATTR_KEY$2,
34925
- type: NodeTranslator.translatorTypes.NODE,
34926
- attributes: [],
34927
- encode: encode$l,
34928
- decode: decode$n
34929
- });
34930
- const XML_NODE_NAME$e = "w:tblPr";
34931
- const SD_ATTR_KEY$1 = "tableProperties";
34932
- const encode$k = (params2) => {
34933
- const { nodes } = params2;
34934
- const node = nodes[0];
34935
- const attributes = encodeProperties(node, propertyTranslatorsByXmlName);
34936
- return {
34937
- xmlName: XML_NODE_NAME$e,
34938
- sdNodeOrKeyName: SD_ATTR_KEY$1,
34939
- attributes
34940
- };
34941
- };
34942
- const decode$m = (params2) => {
34943
- const { tableProperties = {} } = params2.node.attrs || {};
34944
- const elements = decodeProperties(propertyTranslatorsBySdName, tableProperties);
34945
- const newNode = {
34946
- name: "w:tblPr",
34947
- type: "element",
34948
- attributes: {},
34949
- elements
34950
- };
34951
- return newNode;
34952
- };
34953
- const propertyTranslators = [
34926
+ const translator$L = NodeTranslator.from(createBorderPropertyHandler("w:bottom"));
34927
+ const translator$K = NodeTranslator.from(createMeasurementPropertyHandler("w:bottom", "marginBottom"));
34928
+ const translator$J = NodeTranslator.from(createBorderPropertyHandler("w:end"));
34929
+ const translator$I = NodeTranslator.from(createMeasurementPropertyHandler("w:end", "marginEnd"));
34930
+ const translator$H = NodeTranslator.from(createBorderPropertyHandler("w:insideH"));
34931
+ const translator$G = NodeTranslator.from(createBorderPropertyHandler("w:insideV"));
34932
+ const translator$F = NodeTranslator.from(createBorderPropertyHandler("w:left"));
34933
+ const translator$E = NodeTranslator.from(createMeasurementPropertyHandler("w:left", "marginLeft"));
34934
+ const translator$D = NodeTranslator.from(createBorderPropertyHandler("w:right"));
34935
+ const translator$C = NodeTranslator.from(createMeasurementPropertyHandler("w:right", "marginRight"));
34936
+ const translator$B = NodeTranslator.from(createBorderPropertyHandler("w:start"));
34937
+ const translator$A = NodeTranslator.from(createMeasurementPropertyHandler("w:start", "marginStart"));
34938
+ const translator$z = NodeTranslator.from(createBorderPropertyHandler("w:top"));
34939
+ const translator$y = NodeTranslator.from(createMeasurementPropertyHandler("w:top", "marginTop"));
34940
+ const propertyTranslators$5 = [
34941
+ translator$L,
34942
+ translator$J,
34954
34943
  translator$H,
34955
- translator$P,
34956
34944
  translator$G,
34957
34945
  translator$F,
34958
- translator$O,
34959
- translator$E,
34960
34946
  translator$D,
34961
- translator$C,
34962
34947
  translator$B,
34948
+ translator$z
34949
+ ];
34950
+ const translator$x = NodeTranslator.from(
34951
+ createNestedPropertiesTranslator("w:tblBorders", "borders", propertyTranslators$5)
34952
+ );
34953
+ const propertyTranslators$4 = [
34954
+ translator$K,
34955
+ translator$I,
34956
+ translator$E,
34957
+ translator$C,
34963
34958
  translator$A,
34964
- translator$z,
34965
- translator$y,
34959
+ translator$y
34960
+ ];
34961
+ const translator$w = NodeTranslator.from(
34962
+ createNestedPropertiesTranslator("w:tblCellMar", "cellMargins", propertyTranslators$4)
34963
+ );
34964
+ const propertyTranslators$3 = [
34965
+ translator$Y,
34966
+ translator$14,
34967
+ translator$X,
34968
+ translator$W,
34969
+ translator$13,
34970
+ translator$V,
34971
+ translator$U,
34972
+ translator$T,
34973
+ translator$S,
34974
+ translator$R,
34975
+ translator$Q,
34976
+ translator$P,
34977
+ translator$O,
34978
+ translator$N,
34979
+ translator$M,
34966
34980
  translator$x,
34967
- translator$w,
34968
- translator$v,
34969
- translator$g,
34970
- translator$f
34981
+ translator$w
34971
34982
  ];
34972
- const propertyTranslatorsByXmlName = {};
34973
- const propertyTranslatorsBySdName = {};
34974
- propertyTranslators.forEach((translator2) => {
34975
- propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
34976
- propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
34977
- });
34978
- const config$d = {
34979
- xmlName: XML_NODE_NAME$e,
34980
- sdNodeOrKeyName: SD_ATTR_KEY$1,
34981
- encode: encode$k,
34982
- decode: decode$m
34983
- };
34984
- const translator$e = NodeTranslator.from(config$d);
34985
- const translator$d = NodeTranslator.from(
34983
+ const translator$v = NodeTranslator.from(
34984
+ createNestedPropertiesTranslator("w:tblPr", "tableProperties", propertyTranslators$3)
34985
+ );
34986
+ const translator$u = NodeTranslator.from(
34986
34987
  createSingleAttrPropertyHandler("w:gridCol", "col", "w:w", parseInteger, integerToString)
34987
34988
  );
34988
34989
  const DEFAULT_COLUMN_WIDTH_PX = 100;
@@ -35032,20 +35033,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35032
35033
  }
35033
35034
  return Math.max(fallbackWidthTwips, cellMinWidthTwips);
35034
35035
  };
35035
- const XML_NODE_NAME$d = "w:tblGrid";
35036
- const SD_ATTR_KEY = "grid";
35036
+ const XML_NODE_NAME$g = "w:tblGrid";
35037
+ const SD_ATTR_KEY$3 = "grid";
35037
35038
  const cellMinWidth = pixelsToTwips(10);
35038
- const encode$j = (params2) => {
35039
+ const encode$m = (params2) => {
35039
35040
  const { nodes } = params2;
35040
35041
  const node = nodes[0];
35041
- const attributes = encodeProperties(node, { [translator$d.xmlName]: translator$d }, true);
35042
+ const attributes = encodeProperties(node, { [translator$u.xmlName]: translator$u }, true);
35042
35043
  return {
35043
- xmlName: XML_NODE_NAME$d,
35044
- sdNodeOrKeyName: SD_ATTR_KEY,
35044
+ xmlName: XML_NODE_NAME$g,
35045
+ sdNodeOrKeyName: SD_ATTR_KEY$3,
35045
35046
  attributes
35046
35047
  };
35047
35048
  };
35048
- const decode$l = (params2) => {
35049
+ const decode$o = (params2) => {
35049
35050
  const { grid: rawGrid } = params2.node.attrs || {};
35050
35051
  const grid = Array.isArray(rawGrid) ? rawGrid : [];
35051
35052
  const { firstRow = {} } = params2.extraParams || {};
@@ -35064,10 +35065,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35064
35065
  numericWidth = fallbackColumnWidthTwips;
35065
35066
  }
35066
35067
  numericWidth = Math.max(numericWidth, cellMinWidth);
35067
- const decoded = translator$d.decode({
35068
+ const decoded = translator$u.decode({
35068
35069
  node: { type: (
35069
35070
  /** @type {string} */
35070
- translator$d.sdNodeOrKeyName
35071
+ translator$u.sdNodeOrKeyName
35071
35072
  ), attrs: { col: numericWidth } }
35072
35073
  });
35073
35074
  if (decoded) elements.push(decoded);
@@ -35102,19 +35103,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35102
35103
  columnIndex++;
35103
35104
  }
35104
35105
  const newNode = {
35105
- name: XML_NODE_NAME$d,
35106
+ name: XML_NODE_NAME$g,
35106
35107
  attributes: {},
35107
35108
  elements
35108
35109
  };
35109
35110
  return newNode;
35110
35111
  };
35111
- const config$c = {
35112
- xmlName: XML_NODE_NAME$d,
35113
- sdNodeOrKeyName: SD_ATTR_KEY,
35114
- encode: encode$j,
35115
- decode: decode$l
35112
+ const config$f = {
35113
+ xmlName: XML_NODE_NAME$g,
35114
+ sdNodeOrKeyName: SD_ATTR_KEY$3,
35115
+ encode: encode$m,
35116
+ decode: decode$o
35116
35117
  };
35117
- const translator$c = NodeTranslator.from(config$c);
35118
+ const translator$t = NodeTranslator.from(config$f);
35118
35119
  const DEFAULT_PAGE_WIDTH_TWIPS = 12240;
35119
35120
  const DEFAULT_PAGE_MARGIN_TWIPS = 1440;
35120
35121
  const DEFAULT_CONTENT_WIDTH_TWIPS = DEFAULT_PAGE_WIDTH_TWIPS - 2 * DEFAULT_PAGE_MARGIN_TWIPS;
@@ -35177,19 +35178,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35177
35178
  columnWidths: Array(columnCount).fill(fallbackColumnWidthPx)
35178
35179
  };
35179
35180
  };
35180
- const XML_NODE_NAME$c = "w:tbl";
35181
+ const XML_NODE_NAME$f = "w:tbl";
35181
35182
  const SD_NODE_NAME$c = "table";
35182
- const encode$i = (params2, encodedAttrs) => {
35183
+ const encode$l = (params2, encodedAttrs) => {
35183
35184
  const { nodes } = params2;
35184
35185
  const node = nodes[0];
35185
35186
  const tblPr = node.elements.find((el) => el.name === "w:tblPr");
35186
35187
  if (tblPr) {
35187
- const encodedProperties = translator$e.encode({ ...params2, nodes: [tblPr] });
35188
- encodedAttrs["tableProperties"] = encodedProperties?.attributes || {};
35188
+ const encodedProperties = translator$v.encode({ ...params2, nodes: [tblPr] });
35189
+ encodedAttrs["tableProperties"] = encodedProperties || {};
35189
35190
  }
35190
35191
  const tblGrid = node.elements.find((el) => el.name === "w:tblGrid");
35191
35192
  if (tblGrid) {
35192
- encodedAttrs["grid"] = translator$c.encode({ ...params2, nodes: [tblGrid] }).attributes;
35193
+ encodedAttrs["grid"] = translator$t.encode({ ...params2, nodes: [tblGrid] }).attributes;
35193
35194
  }
35194
35195
  [
35195
35196
  "tableStyleId",
@@ -35256,7 +35257,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35256
35257
  }
35257
35258
  const content = [];
35258
35259
  rows.forEach((row) => {
35259
- const result = translator$I.encode({
35260
+ const result = translator$Z.encode({
35260
35261
  ...params2,
35261
35262
  nodes: [row],
35262
35263
  extraParams: {
@@ -35275,13 +35276,13 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35275
35276
  attrs: encodedAttrs
35276
35277
  };
35277
35278
  };
35278
- const decode$k = (params2, decodedAttrs) => {
35279
+ const decode$n = (params2, decodedAttrs) => {
35279
35280
  params2.node = preProcessVerticalMergeCells(params2.node, params2);
35280
35281
  const { node } = params2;
35281
35282
  const elements = translateChildNodes(params2);
35282
35283
  const firstRow = node.content?.find((n) => n.type === "tableRow");
35283
35284
  const properties = node.attrs.grid;
35284
- const element = translator$c.decode({
35285
+ const element = translator$t.decode({
35285
35286
  ...params2,
35286
35287
  node: { ...node, attrs: { ...node.attrs, grid: properties } },
35287
35288
  extraParams: {
@@ -35291,7 +35292,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35291
35292
  if (element) elements.unshift(element);
35292
35293
  if (node.attrs?.tableProperties) {
35293
35294
  const properties2 = { ...node.attrs.tableProperties };
35294
- const element2 = translator$e.decode({
35295
+ const element2 = translator$v.decode({
35295
35296
  ...params2,
35296
35297
  node: { ...node, attrs: { ...node.attrs, tableProperties: properties2 } }
35297
35298
  });
@@ -35311,7 +35312,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35311
35312
  const color = attributes.color;
35312
35313
  const size2 = attributes.size;
35313
35314
  if (color && color !== "auto") attrs["color"] = color.startsWith("#") ? color : `#${color}`;
35314
- if (size2 && size2 !== "auto") attrs["size"] = eigthPointsToPixels(size2);
35315
+ if (size2 && size2 !== "auto") attrs["size"] = eighthPointsToPixels(size2);
35315
35316
  const rowBorderNames = ["insideH", "insideV"];
35316
35317
  if (rowBorderNames.includes(name)) rowBorders[name] = attrs;
35317
35318
  borders[name] = attrs;
@@ -35357,7 +35358,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35357
35358
  if (baseTblPr && baseTblPr.elements) {
35358
35359
  tblPr.elements.push(...baseTblPr.elements);
35359
35360
  }
35360
- const tableProperties = translator$e.encode({ ...params2, nodes: [tblPr] }).attributes;
35361
+ const tableProperties = translator$v.encode({ ...params2, nodes: [tblPr] });
35361
35362
  const { borders, rowBorders } = _processTableBorders(tableProperties.borders || {});
35362
35363
  if (borders) stylesToReturn.borders = borders;
35363
35364
  if (rowBorders) stylesToReturn.rowBorders = rowBorders;
@@ -35374,16 +35375,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35374
35375
  }
35375
35376
  return stylesToReturn;
35376
35377
  }
35377
- const config$b = {
35378
- xmlName: XML_NODE_NAME$c,
35378
+ const config$e = {
35379
+ xmlName: XML_NODE_NAME$f,
35379
35380
  sdNodeOrKeyName: SD_NODE_NAME$c,
35380
35381
  type: NodeTranslator.translatorTypes.NODE,
35381
- encode: encode$i,
35382
- decode: decode$k,
35382
+ encode: encode$l,
35383
+ decode: decode$n,
35383
35384
  attributes: []
35384
35385
  };
35385
- const translator$b = NodeTranslator.from(config$b);
35386
- const tableNodeHandlerEntity = generateV2HandlerEntity("tableNodeHandler", translator$b);
35386
+ const translator$s = NodeTranslator.from(config$e);
35387
+ const tableNodeHandlerEntity = generateV2HandlerEntity("tableNodeHandler", translator$s);
35387
35388
  function getReferencedTableStyles(tblStyleTag, docx) {
35388
35389
  if (!tblStyleTag) return null;
35389
35390
  const stylesToReturn = {};
@@ -35454,7 +35455,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35454
35455
  const color = attributes["w:color"];
35455
35456
  const size2 = attributes["w:sz"];
35456
35457
  if (color && color !== "auto") attrs["color"] = color.startsWith("#") ? color : `#${color}`;
35457
- if (size2 && size2 !== "auto") attrs["size"] = eigthPointsToPixels(size2);
35458
+ if (size2 && size2 !== "auto") attrs["size"] = eighthPointsToPixels(size2);
35458
35459
  const rowBorderNames = ["insideH", "insideV"];
35459
35460
  if (rowBorderNames.includes(borderName)) rowBorders[borderName] = attrs;
35460
35461
  borders[borderName] = attrs;
@@ -35464,6 +35465,125 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35464
35465
  rowBorders
35465
35466
  };
35466
35467
  }
35468
+ const translator$r = NodeTranslator.from(createMeasurementPropertyHandler("w:tcW", "cellWidth"));
35469
+ const translator$q = NodeTranslator.from(
35470
+ createSingleAttrPropertyHandler(
35471
+ "w:gridSpan",
35472
+ null,
35473
+ "w:val",
35474
+ (v2) => parseInteger(v2) ?? void 0,
35475
+ (v2) => integerToString(v2)
35476
+ )
35477
+ );
35478
+ const translator$p = NodeTranslator.from(createSingleAttrPropertyHandler("w:vMerge"));
35479
+ const translator$o = NodeTranslator.from(createBorderPropertyHandler("w:tl2br"));
35480
+ const translator$n = NodeTranslator.from(createBorderPropertyHandler("w:tr2bl"));
35481
+ const propertyTranslators$2 = [
35482
+ translator$z,
35483
+ translator$B,
35484
+ translator$F,
35485
+ translator$L,
35486
+ translator$J,
35487
+ translator$D,
35488
+ translator$H,
35489
+ translator$G,
35490
+ translator$o,
35491
+ translator$n
35492
+ ];
35493
+ const translator$m = NodeTranslator.from(
35494
+ createNestedPropertiesTranslator("w:tcBorders", "borders", propertyTranslators$2)
35495
+ );
35496
+ const translator$l = NodeTranslator.from(
35497
+ createSingleAttrPropertyHandler(
35498
+ "w:noWrap",
35499
+ null,
35500
+ "w:val",
35501
+ (v2) => parseBoolean(v2 ?? "true"),
35502
+ (v2) => booleanToString(v2)
35503
+ )
35504
+ );
35505
+ const propertyTranslators$1 = [
35506
+ translator$K,
35507
+ translator$I,
35508
+ translator$E,
35509
+ translator$C,
35510
+ translator$A,
35511
+ translator$y
35512
+ ];
35513
+ const translator$k = NodeTranslator.from(
35514
+ createNestedPropertiesTranslator("w:tcMar", "cellMargins", propertyTranslators$1)
35515
+ );
35516
+ const translator$j = NodeTranslator.from(createSingleAttrPropertyHandler("w:textDirection"));
35517
+ const translator$i = NodeTranslator.from(
35518
+ createSingleAttrPropertyHandler(
35519
+ "w:tcFitText",
35520
+ null,
35521
+ "w:val",
35522
+ (v2) => parseBoolean(v2 ?? "true"),
35523
+ (v2) => booleanToString(v2)
35524
+ )
35525
+ );
35526
+ const translator$h = NodeTranslator.from(createSingleAttrPropertyHandler("w:vAlign"));
35527
+ const translator$g = NodeTranslator.from(
35528
+ createSingleAttrPropertyHandler(
35529
+ "w:hideMark",
35530
+ null,
35531
+ "w:val",
35532
+ (v2) => parseBoolean(v2 ?? "true"),
35533
+ (v2) => booleanToString(v2)
35534
+ )
35535
+ );
35536
+ const translator$f = NodeTranslator.from(createSingleAttrPropertyHandler("w:header"));
35537
+ const XML_NODE_NAME$e = "w:headers";
35538
+ const SD_ATTR_KEY$2 = "headers";
35539
+ const encode$k = (params2) => {
35540
+ const { nodes } = params2;
35541
+ const node = nodes[0];
35542
+ const attributes = encodeProperties(node, { [translator$f.xmlName]: translator$f }, true);
35543
+ return {
35544
+ xmlName: XML_NODE_NAME$e,
35545
+ sdNodeOrKeyName: SD_ATTR_KEY$2,
35546
+ attributes
35547
+ };
35548
+ };
35549
+ const decode$m = (params2) => {
35550
+ const { headers = [] } = params2.node.attrs || {};
35551
+ const newNode = {
35552
+ name: XML_NODE_NAME$e,
35553
+ attributes: {},
35554
+ elements: headers.map(
35555
+ (header) => translator$f.decode({
35556
+ node: { type: "header", attrs: header }
35557
+ })
35558
+ )
35559
+ };
35560
+ return newNode;
35561
+ };
35562
+ const config$d = {
35563
+ xmlName: XML_NODE_NAME$e,
35564
+ sdNodeOrKeyName: SD_ATTR_KEY$2,
35565
+ encode: encode$k,
35566
+ decode: decode$m
35567
+ };
35568
+ const translator$e = NodeTranslator.from(config$d);
35569
+ const propertyTranslators = [
35570
+ translator$19,
35571
+ translator$r,
35572
+ translator$q,
35573
+ translator$p,
35574
+ translator$m,
35575
+ translator$X,
35576
+ translator$l,
35577
+ translator$k,
35578
+ translator$j,
35579
+ translator$i,
35580
+ translator$h,
35581
+ translator$g,
35582
+ translator$e
35583
+ ];
35584
+ const translator$d = NodeTranslator.from(
35585
+ createNestedPropertiesTranslator("w:tcPr", "tableCellProperties", propertyTranslators)
35586
+ );
35467
35587
  function handleTableCellNode({
35468
35588
  params: params2,
35469
35589
  node,
@@ -35476,8 +35596,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35476
35596
  allColumnWidths = []
35477
35597
  }) {
35478
35598
  const { docx, nodeListHandler } = params2;
35599
+ const attributes = {};
35479
35600
  const tcPr = node.elements.find((el) => el.name === "w:tcPr");
35480
- const borders = tcPr?.elements?.find((el) => el.name === "w:tcBorders");
35601
+ const tableCellProperties = tcPr ? translator$d.encode({ ...params2, nodes: [tcPr] }) ?? {} : {};
35602
+ attributes["tableCellProperties"] = tableCellProperties;
35481
35603
  if (rowBorders?.insideH) {
35482
35604
  rowBorders["bottom"] = rowBorders.insideH;
35483
35605
  delete rowBorders.insideH;
@@ -35486,33 +35608,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35486
35608
  rowBorders["right"] = rowBorders.insideV;
35487
35609
  delete rowBorders?.insideV;
35488
35610
  }
35489
- const inlineBorders = processInlineCellBorders(borders, rowBorders);
35490
- const gridColumnWidths = allColumnWidths;
35491
- const tcWidth = tcPr?.elements?.find((el) => el.name === "w:tcW");
35492
- let width = tcWidth ? twipsToPixels(tcWidth.attributes["w:w"]) : null;
35493
- const widthType = tcWidth?.attributes["w:type"];
35611
+ if (rowBorders) attributes["borders"] = { ...rowBorders };
35612
+ const inlineBorders = processInlineCellBorders(tableCellProperties.borders, rowBorders);
35613
+ if (inlineBorders) attributes["borders"] = Object.assign(attributes["borders"] || {}, inlineBorders);
35614
+ const colspan = tableCellProperties.gridSpan;
35615
+ if (colspan && !isNaN(parseInt(colspan, 10))) attributes["colspan"] = parseInt(colspan, 10);
35616
+ let width = tableCellProperties.cellWidth?.value ? twipsToPixels(tableCellProperties.cellWidth?.value) : null;
35617
+ const widthType = tableCellProperties.cellWidth?.type;
35618
+ if (widthType) attributes["widthType"] = widthType;
35494
35619
  if (!width && columnWidth) width = columnWidth;
35495
- const vMerge = getTableCellMergeTag(node);
35496
- const { attributes: vMergeAttrs } = vMerge || {};
35497
- const backgroundColor = tcPr?.elements?.find((el) => el.name === "w:shd");
35498
- const background = {
35499
- color: backgroundColor?.attributes["w:fill"]
35500
- };
35501
- const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
35502
- const colspan = colspanTag?.attributes["w:val"];
35503
- const marginTag = tcPr?.elements?.find((el) => el.name === "w:tcMar");
35504
- const verticalAlignTag = tcPr?.elements?.find((el) => el.name === "w:vAlign");
35505
- const verticalAlign = verticalAlignTag?.attributes["w:val"] || "top";
35506
- const attributes = {};
35507
- const referencedStyles = getReferencedTableStyles(styleTag, docx) || {};
35508
- attributes.cellMargins = getTableCellMargins(marginTag, referencedStyles);
35509
- const { fontSize: fontSize2, fonts = {} } = referencedStyles;
35510
- const fontFamily2 = fonts["ascii"];
35511
35620
  if (width) {
35512
35621
  attributes["colwidth"] = [width];
35513
35622
  attributes["widthUnit"] = "px";
35514
- const defaultColWidths = gridColumnWidths;
35515
- const hasDefaultColWidths = gridColumnWidths && gridColumnWidths.length > 0;
35623
+ const defaultColWidths = allColumnWidths;
35624
+ const hasDefaultColWidths = allColumnWidths && allColumnWidths.length > 0;
35516
35625
  const colspanNum = parseInt(colspan || 1, 10);
35517
35626
  if (colspanNum && colspanNum > 1 && hasDefaultColWidths) {
35518
35627
  let colwidth = [];
@@ -35530,15 +35639,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35530
35639
  }
35531
35640
  }
35532
35641
  }
35533
- if (widthType) attributes["widthType"] = widthType;
35534
- if (colspan) attributes["colspan"] = parseInt(colspan, 10);
35535
- if (background) attributes["background"] = background;
35536
- attributes["verticalAlign"] = verticalAlign;
35642
+ const background = {
35643
+ color: tableCellProperties.shading?.fill
35644
+ };
35645
+ if (background.color) attributes["background"] = background;
35646
+ const verticalAlign = tableCellProperties.vAlign;
35647
+ if (verticalAlign) attributes["verticalAlign"] = verticalAlign;
35648
+ const referencedStyles = getReferencedTableStyles(styleTag, docx) || { fontSize: null, fonts: {}, cellMargins: {} };
35649
+ attributes.cellMargins = getTableCellMargins(tableCellProperties.cellMargins, referencedStyles);
35650
+ const { fontSize: fontSize2, fonts = {} } = referencedStyles;
35651
+ const fontFamily2 = fonts["ascii"];
35537
35652
  if (fontSize2) attributes["fontSize"] = fontSize2;
35538
- if (fontFamily2) attributes["fontFamily"] = fontFamily2["ascii"];
35539
- if (rowBorders) attributes["borders"] = { ...rowBorders };
35540
- if (inlineBorders) attributes["borders"] = Object.assign(attributes["borders"] || {}, inlineBorders);
35541
- if (vMergeAttrs && vMergeAttrs["w:val"] === "restart") {
35653
+ if (fontFamily2) attributes["fontFamily"] = fontFamily2;
35654
+ if (tableCellProperties.vMerge === "restart") {
35542
35655
  const rows = table.elements.filter((el) => el.name === "w:tr");
35543
35656
  const currentRowIndex = rows.findIndex((r2) => r2 === row);
35544
35657
  const remainingRows = rows.slice(currentRowIndex + 1);
@@ -35549,9 +35662,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35549
35662
  const firstCell = remainingRow.elements.findIndex((el) => el.name === "w:tc");
35550
35663
  const cellAtIndex = remainingRow.elements[firstCell + cellIndex];
35551
35664
  if (!cellAtIndex) break;
35552
- const vMerge2 = getTableCellMergeTag(cellAtIndex);
35553
- const { attributes: currentCellMergeAttrs } = vMerge2 || {};
35554
- if (!vMerge2 && !currentCellMergeAttrs || currentCellMergeAttrs && currentCellMergeAttrs["w:val"] === "restart") {
35665
+ const vMerge = getTableCellVMerge(cellAtIndex);
35666
+ if (!vMerge || vMerge === "restart") {
35555
35667
  break;
35556
35668
  }
35557
35669
  rowspan++;
@@ -35571,69 +35683,52 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35571
35683
  }
35572
35684
  const processInlineCellBorders = (borders, rowBorders) => {
35573
35685
  if (!borders) return null;
35574
- const processedBorders = {};
35575
- const inlineBorderBottom = processBorder(borders, "bottom", rowBorders);
35576
- if (inlineBorderBottom) processedBorders["bottom"] = inlineBorderBottom;
35577
- const inlineBorderTop = processBorder(borders, "top", rowBorders);
35578
- if (inlineBorderTop) processedBorders["top"] = inlineBorderTop;
35579
- const inlineBorderLeft = processBorder(borders, "left", rowBorders);
35580
- if (inlineBorderLeft) processedBorders["left"] = inlineBorderLeft;
35581
- const inlineBorderRight = processBorder(borders, "right", rowBorders);
35582
- if (inlineBorderRight) processedBorders["right"] = inlineBorderRight;
35583
- return processedBorders;
35584
- };
35585
- const processBorder = (borders, direction, rowBorders = {}) => {
35586
- const borderAttrs = borders?.elements?.find((el) => el.name === `w:${direction}`)?.attributes;
35587
- if (borderAttrs && borderAttrs["w:val"] !== "nil") {
35588
- const border = {};
35589
- const color = borderAttrs["w:color"];
35590
- if (color) border["color"] = color === "auto" ? "#000000" : `#${color}`;
35591
- const size2 = borderAttrs["w:sz"];
35592
- if (size2) border["size"] = eigthPointsToPixels(size2);
35593
- return border;
35594
- }
35595
- if (borderAttrs && borderAttrs["w:val"] === "nil") {
35596
- const border = Object.assign({}, rowBorders[direction] || {});
35597
- if (!Object.keys(border)) return null;
35598
- border["val"] = "none";
35599
- return border;
35600
- }
35601
- return null;
35686
+ return ["bottom", "top", "left", "right"].reduce((acc, direction) => {
35687
+ const borderAttrs = borders[direction];
35688
+ const rowBorderAttrs = rowBorders[direction];
35689
+ if (borderAttrs && borderAttrs["val"] !== "nil") {
35690
+ const color = borderAttrs["color"];
35691
+ let size2 = borderAttrs["size"];
35692
+ if (size2) size2 = eighthPointsToPixels(size2);
35693
+ acc[direction] = { color, size: size2, val: borderAttrs["val"] };
35694
+ return acc;
35695
+ }
35696
+ if (borderAttrs && borderAttrs["val"] === "nil") {
35697
+ const border = Object.assign({}, rowBorderAttrs || {});
35698
+ if (!Object.keys(border).length) {
35699
+ return acc;
35700
+ } else {
35701
+ border["val"] = "none";
35702
+ acc[direction] = border;
35703
+ return acc;
35704
+ }
35705
+ }
35706
+ return acc;
35707
+ }, {});
35602
35708
  };
35603
- const getTableCellMergeTag = (node) => {
35709
+ const getTableCellVMerge = (node) => {
35604
35710
  const tcPr = node.elements.find((el) => el.name === "w:tcPr");
35605
35711
  const vMerge = tcPr?.elements?.find((el) => el.name === "w:vMerge");
35606
- return vMerge;
35607
- };
35608
- const getTableCellMargins = (marginTag, referencedStyles) => {
35609
- const inlineMarginLeftTag = marginTag?.elements?.find((el) => el.name === "w:left");
35610
- const inlineMarginRightTag = marginTag?.elements?.find((el) => el.name === "w:right");
35611
- const inlineMarginTopTag = marginTag?.elements?.find((el) => el.name === "w:top");
35612
- const inlineMarginBottomTag = marginTag?.elements?.find((el) => el.name === "w:bottom");
35613
- const inlineMarginLeftValue = inlineMarginLeftTag?.attributes["w:w"];
35614
- const inlineMarginRightValue = inlineMarginRightTag?.attributes["w:w"];
35615
- const inlineMarginTopValue = inlineMarginTopTag?.attributes["w:w"];
35616
- const inlineMarginBottomValue = inlineMarginBottomTag?.attributes["w:w"];
35712
+ if (!vMerge) return null;
35713
+ return vMerge.attributes?.["w:val"] || "continue";
35714
+ };
35715
+ const getTableCellMargins = (inlineMargins, referencedStyles) => {
35617
35716
  const { cellMargins = {} } = referencedStyles;
35618
- const {
35619
- marginLeft: marginLeftStyle,
35620
- marginRight: marginRightStyle,
35621
- marginTop: marginTopStyle,
35622
- marginBottom: marginBottomStyle
35623
- } = cellMargins;
35624
- const resolveMargin = (inlineValue, styleValue) => {
35625
- if (inlineValue != null) return inlineValue;
35626
- if (styleValue == null) return void 0;
35627
- if (typeof styleValue === "object") return styleValue.value;
35628
- return styleValue;
35629
- };
35630
- const margins = {
35631
- left: twipsToPixels(resolveMargin(inlineMarginLeftValue, marginLeftStyle)),
35632
- right: twipsToPixels(resolveMargin(inlineMarginRightValue, marginRightStyle)),
35633
- top: twipsToPixels(resolveMargin(inlineMarginTopValue, marginTopStyle)),
35634
- bottom: twipsToPixels(resolveMargin(inlineMarginBottomValue, marginBottomStyle))
35635
- };
35636
- return margins;
35717
+ return ["left", "right", "top", "bottom"].reduce((acc, direction) => {
35718
+ const key2 = `margin${direction.charAt(0).toUpperCase() + direction.slice(1)}`;
35719
+ const inlineValue = inlineMargins ? inlineMargins?.[key2]?.value : null;
35720
+ const styleValue = cellMargins ? cellMargins[key2] : null;
35721
+ if (inlineValue != null) {
35722
+ acc[direction] = twipsToPixels(inlineValue);
35723
+ } else if (styleValue == null) {
35724
+ acc[direction] = void 0;
35725
+ } else if (typeof styleValue === "object") {
35726
+ acc[direction] = twipsToPixels(styleValue.value);
35727
+ } else {
35728
+ acc[direction] = twipsToPixels(styleValue);
35729
+ }
35730
+ return acc;
35731
+ }, {});
35637
35732
  };
35638
35733
  function translateTableCell(params2) {
35639
35734
  const elements = translateChildNodes({
@@ -35648,107 +35743,91 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35648
35743
  };
35649
35744
  }
35650
35745
  function generateTableCellProperties(node) {
35651
- const elements = [];
35746
+ const tableCellProperties = { ...node.attrs?.tableCellProperties || {} };
35652
35747
  const { attrs } = node;
35653
- const { colwidth = [], cellWidthType = "dxa", background = {}, colspan, rowspan, widthUnit } = attrs;
35748
+ const { colwidth = [], cellWidthType = "dxa", widthUnit } = attrs;
35654
35749
  const colwidthSum = colwidth.reduce((acc, curr) => acc + curr, 0);
35655
- const cellWidthElement = {
35656
- name: "w:tcW",
35657
- attributes: {
35658
- "w:w": widthUnit === "px" ? pixelsToTwips(colwidthSum) : inchesToTwips(colwidthSum),
35659
- "w:type": cellWidthType
35660
- }
35661
- };
35662
- elements.push(cellWidthElement);
35663
- if (colspan) {
35664
- const gridSpanElement = {
35665
- name: "w:gridSpan",
35666
- attributes: { "w:val": `${colspan}` }
35750
+ const propertiesWidthPixels = twipsToPixels(tableCellProperties.cellWidth?.value);
35751
+ if (propertiesWidthPixels !== colwidthSum) {
35752
+ tableCellProperties["cellWidth"] = {
35753
+ value: widthUnit === "px" ? pixelsToTwips(colwidthSum) : inchesToTwips(colwidthSum),
35754
+ type: cellWidthType
35667
35755
  };
35668
- elements.push(gridSpanElement);
35669
35756
  }
35670
- const { color } = background || {};
35671
- if (color) {
35672
- const cellBgElement = {
35673
- name: "w:shd",
35674
- attributes: { "w:fill": color }
35675
- };
35676
- elements.push(cellBgElement);
35757
+ const { colspan } = attrs;
35758
+ if (colspan > 1 && tableCellProperties.gridSpan !== colspan) {
35759
+ tableCellProperties["gridSpan"] = colspan;
35760
+ } else if (!colspan || tableCellProperties?.gridSpan === 1) {
35761
+ delete tableCellProperties.gridSpan;
35762
+ }
35763
+ const { background = {} } = attrs;
35764
+ if (background?.color && tableCellProperties.shading?.fill !== background?.color) {
35765
+ tableCellProperties["shading"] = { fill: background.color };
35766
+ } else if (!background?.color && tableCellProperties?.shading?.fill) {
35767
+ delete tableCellProperties.shading;
35677
35768
  }
35678
35769
  const { cellMargins } = attrs;
35679
35770
  if (cellMargins) {
35680
- const cellMarginsElement = {
35681
- name: "w:tcMar",
35682
- elements: generateCellMargins(cellMargins)
35683
- };
35684
- elements.push(cellMarginsElement);
35771
+ ["left", "right", "top", "bottom"].forEach((side) => {
35772
+ const key2 = `margin${side.charAt(0).toUpperCase() + side.slice(1)}`;
35773
+ if (cellMargins[side] != null) {
35774
+ if (!tableCellProperties.cellMargins) tableCellProperties["cellMargins"] = {};
35775
+ let currentPropertyValuePixels = twipsToPixels(tableCellProperties.cellMargins?.[key2]?.value);
35776
+ if (currentPropertyValuePixels !== cellMargins[side]) {
35777
+ tableCellProperties.cellMargins[key2] = { value: pixelsToTwips(cellMargins[side]), type: "dxa" };
35778
+ }
35779
+ } else if (tableCellProperties?.cellMargins?.[key2]) {
35780
+ delete tableCellProperties.cellMargins[key2];
35781
+ }
35782
+ });
35685
35783
  }
35686
35784
  const { verticalAlign } = attrs;
35687
- if (verticalAlign) {
35688
- const vertAlignElement = {
35689
- name: "w:vAlign",
35690
- attributes: { "w:val": verticalAlign }
35691
- };
35692
- elements.push(vertAlignElement);
35693
- }
35694
- if (rowspan && rowspan > 1) {
35695
- const vMergeElement = {
35696
- name: "w:vMerge",
35697
- type: "element",
35698
- attributes: { "w:val": "restart" }
35699
- };
35700
- elements.push(vMergeElement);
35785
+ if (verticalAlign && verticalAlign !== tableCellProperties.vAlign) {
35786
+ tableCellProperties["vAlign"] = verticalAlign;
35787
+ } else if (!verticalAlign && tableCellProperties?.vAlign) {
35788
+ delete tableCellProperties.vAlign;
35789
+ }
35790
+ const { rowspan } = attrs;
35791
+ if (rowspan && rowspan > 1 && tableCellProperties.vMerge !== "restart") {
35792
+ tableCellProperties["vMerge"] = "restart";
35701
35793
  } else if (attrs.continueMerge) {
35702
- const vMergeElement = {
35703
- name: "w:vMerge",
35704
- type: "element"
35705
- };
35706
- elements.push(vMergeElement);
35794
+ tableCellProperties["vMerge"] = "continue";
35795
+ } else if (tableCellProperties?.vMerge) {
35796
+ delete tableCellProperties.vMerge;
35707
35797
  }
35708
35798
  const { borders = {} } = attrs;
35709
35799
  if (!!borders && Object.keys(borders).length) {
35710
- const cellBordersElement = {
35711
- name: "w:tcBorders",
35712
- elements: Object.entries(borders).map(([key2, value]) => {
35713
- if (!value.size || value.val === "none") {
35714
- return {
35715
- name: `w:${key2}`,
35716
- attributes: {
35717
- "w:val": "nil"
35718
- }
35800
+ ["top", "bottom", "left", "right"].forEach((side) => {
35801
+ if (borders[side]) {
35802
+ let currentPropertyValue = tableCellProperties.borders?.[side];
35803
+ let currentPropertySizePixels = eighthPointsToPixels(currentPropertyValue?.size);
35804
+ let color = borders[side].color;
35805
+ if (borders[side].color && color === "#000000") {
35806
+ color = "auto";
35807
+ }
35808
+ if (currentPropertySizePixels !== borders[side].size || currentPropertyValue?.color !== color || borders[side].val !== currentPropertyValue?.val) {
35809
+ if (!tableCellProperties.borders) tableCellProperties["borders"] = {};
35810
+ tableCellProperties.borders[side] = {
35811
+ size: pixelsToEightPoints(borders[side].size || 0),
35812
+ color,
35813
+ space: borders[side].space || 0,
35814
+ val: borders[side].val || "single"
35719
35815
  };
35720
35816
  }
35721
- return {
35722
- name: `w:${key2}`,
35723
- attributes: {
35724
- "w:val": "single",
35725
- "w:color": value.color ? value.color.substring(1) : "auto",
35726
- "w:sz": pixelsToEightPoints(value.size),
35727
- "w:space": value.space || 0
35728
- }
35729
- };
35730
- })
35731
- };
35732
- elements.push(cellBordersElement);
35817
+ } else if (tableCellProperties.borders?.[side]) {
35818
+ delete tableCellProperties.borders[side];
35819
+ }
35820
+ });
35821
+ } else if (tableCellProperties?.borders) {
35822
+ delete tableCellProperties.borders;
35733
35823
  }
35734
- return {
35735
- name: "w:tcPr",
35736
- elements
35737
- };
35738
- }
35739
- function generateCellMargins(cellMargins) {
35740
- const elements = [];
35741
- const { top: top2, right: right2, bottom: bottom2, left: left2 } = cellMargins;
35742
- if (top2 != null) elements.push({ name: "w:top", attributes: { "w:w": pixelsToTwips(top2) } });
35743
- if (right2 != null) elements.push({ name: "w:right", attributes: { "w:w": pixelsToTwips(right2) } });
35744
- if (bottom2 != null) elements.push({ name: "w:bottom", attributes: { "w:w": pixelsToTwips(bottom2) } });
35745
- if (left2 != null) elements.push({ name: "w:left", attributes: { "w:w": pixelsToTwips(left2) } });
35746
- return elements;
35824
+ const result = translator$d.decode({ node: { ...node, attrs: { ...node.attrs, tableCellProperties } } });
35825
+ return result;
35747
35826
  }
35748
- const XML_NODE_NAME$b = "w:tc";
35827
+ const XML_NODE_NAME$d = "w:tc";
35749
35828
  const SD_NODE_NAME$b = "tableCell";
35750
- const validXmlAttributes$8 = [];
35751
- function encode$h(params2, encodedAttrs) {
35829
+ const validXmlAttributes$a = [];
35830
+ function encode$j(params2, encodedAttrs) {
35752
35831
  const {
35753
35832
  node,
35754
35833
  table,
@@ -35775,22 +35854,22 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35775
35854
  }
35776
35855
  return schemaNode;
35777
35856
  }
35778
- function decode$j(params2, decodedAttrs) {
35857
+ function decode$l(params2, decodedAttrs) {
35779
35858
  const translated = translateTableCell(params2);
35780
35859
  if (decodedAttrs && Object.keys(decodedAttrs).length) {
35781
35860
  translated.attributes = { ...translated.attributes || {}, ...decodedAttrs };
35782
35861
  }
35783
35862
  return translated;
35784
35863
  }
35785
- const config$a = {
35786
- xmlName: XML_NODE_NAME$b,
35864
+ const config$c = {
35865
+ xmlName: XML_NODE_NAME$d,
35787
35866
  sdNodeOrKeyName: SD_NODE_NAME$b,
35788
35867
  type: NodeTranslator.translatorTypes.NODE,
35789
- encode: encode$h,
35790
- decode: decode$j,
35791
- attributes: validXmlAttributes$8
35868
+ encode: encode$j,
35869
+ decode: decode$l,
35870
+ attributes: validXmlAttributes$a
35792
35871
  };
35793
- const translator$a = NodeTranslator.from(config$a);
35872
+ const translator$c = NodeTranslator.from(config$c);
35794
35873
  function parseTagValueJSON(json) {
35795
35874
  if (typeof json !== "string") {
35796
35875
  return {};
@@ -36217,8 +36296,64 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36217
36296
  const vRelativeFrom = positionVTag?.attributes.relativeFrom;
36218
36297
  const alignV = positionVTag?.elements?.find((el) => el.name === "wp:align")?.elements[0]?.text;
36219
36298
  const simplePos = node.elements.find((el) => el.name === "wp:simplePos");
36220
- const wrapSquare = node.elements.find((el) => el.name === "wp:wrapSquare");
36221
- const wrapTopAndBottom = node.elements.find((el) => el.name === "wp:wrapTopAndBottom");
36299
+ const wrapNode = isAnchor ? node.elements.find(
36300
+ (el) => ["wp:wrapNone", "wp:wrapSquare", "wp:wrapThrough", "wp:wrapTight", "wp:wrapTopAndBottom"].includes(el.name)
36301
+ ) : null;
36302
+ const wrap2 = isAnchor ? { type: wrapNode?.name.slice(7) || "None", attrs: {} } : { type: "Inline" };
36303
+ switch (wrap2.type) {
36304
+ case "Square":
36305
+ wrap2.attrs.wrapText = wrapNode.attributes.wrapText;
36306
+ if ("distB" in (wrapNode.attributes || {})) {
36307
+ wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36308
+ }
36309
+ if ("distL" in (wrapNode.attributes || {})) {
36310
+ wrap2.attrs.distLeft = emuToPixels(wrapNode.attributes.distL);
36311
+ }
36312
+ if ("distR" in (wrapNode.attributes || {})) {
36313
+ wrap2.attrs.distRight = emuToPixels(wrapNode.attributes.distR);
36314
+ }
36315
+ if ("distT" in (wrapNode.attributes || {})) {
36316
+ wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36317
+ }
36318
+ break;
36319
+ case "Tight":
36320
+ case "Through": {
36321
+ if ("distL" in (wrapNode.attributes || {})) {
36322
+ wrap2.attrs.distLeft = emuToPixels(wrapNode.attributes.distL);
36323
+ }
36324
+ if ("distR" in (wrapNode.attributes || {})) {
36325
+ wrap2.attrs.distRight = emuToPixels(wrapNode.attributes.distR);
36326
+ }
36327
+ if ("distT" in (wrapNode.attributes || {})) {
36328
+ wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36329
+ }
36330
+ if ("distB" in (wrapNode.attributes || {})) {
36331
+ wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36332
+ }
36333
+ if ("wrapText" in (wrapNode.attributes || {})) {
36334
+ wrap2.attrs.wrapText = wrapNode.attributes.wrapText;
36335
+ }
36336
+ const polygon = wrapNode.elements?.find((el) => el.name === "wp:wrapPolygon");
36337
+ if (polygon) {
36338
+ wrap2.attrs.polygon = polygonToObj(polygon);
36339
+ if (polygon.attributes?.edited !== void 0) {
36340
+ wrap2.attrs.polygonEdited = polygon.attributes.edited;
36341
+ }
36342
+ }
36343
+ break;
36344
+ }
36345
+ case "TopAndBottom":
36346
+ if ("distB" in (wrapNode.attributes || {})) {
36347
+ wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36348
+ }
36349
+ if ("distT" in (wrapNode.attributes || {})) {
36350
+ wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36351
+ }
36352
+ break;
36353
+ case "None":
36354
+ wrap2.attrs.behindDoc = node.attributes?.behindDoc === "1";
36355
+ break;
36356
+ }
36222
36357
  const docPr = node.elements.find((el) => el.name === "wp:docPr");
36223
36358
  let anchorData = null;
36224
36359
  if (hRelativeFrom || alignH || vRelativeFrom || alignV) {
@@ -36230,7 +36365,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36230
36365
  };
36231
36366
  }
36232
36367
  const marginOffset = {
36233
- left: positionHValue,
36368
+ horizontal: positionHValue,
36234
36369
  top: positionVValue
36235
36370
  };
36236
36371
  const { attributes: blipAttributes = {} } = blip;
@@ -36269,10 +36404,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36269
36404
  y: simplePos.attributes.y
36270
36405
  }
36271
36406
  },
36272
- ...wrapSquare && {
36273
- wrapText: wrapSquare.attributes.wrapText
36274
- },
36275
- wrapTopAndBottom: !!wrapTopAndBottom,
36407
+ wrap: wrap2,
36276
36408
  originalPadding: {
36277
36409
  distT: attributes["distT"],
36278
36410
  distB: attributes["distB"],
@@ -36620,7 +36752,6 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36620
36752
  function translateAnchorNode(params2) {
36621
36753
  const { attrs } = params2.node;
36622
36754
  const anchorElements = [];
36623
- const wrapElements = [];
36624
36755
  if (attrs.simplePos) {
36625
36756
  anchorElements.push({
36626
36757
  name: "wp:simplePos",
@@ -36632,10 +36763,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36632
36763
  }
36633
36764
  if (attrs.anchorData) {
36634
36765
  const hElements = [];
36635
- if (attrs.marginOffset.left !== void 0) {
36766
+ if (attrs.marginOffset.horizontal !== void 0) {
36636
36767
  hElements.push({
36637
36768
  name: "wp:posOffset",
36638
- elements: [{ type: "text", text: pixelsToEmu(attrs.marginOffset.left).toString() }]
36769
+ elements: [{ type: "text", text: pixelsToEmu(attrs.marginOffset.horizontal).toString() }]
36639
36770
  });
36640
36771
  }
36641
36772
  if (attrs.anchorData.alignH) {
@@ -36668,38 +36799,110 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36668
36799
  ...vElements.length && { elements: vElements }
36669
36800
  });
36670
36801
  }
36671
- if (attrs.wrapText) {
36672
- wrapElements.push({
36673
- name: "wp:wrapSquare",
36674
- attributes: {
36675
- wrapText: attrs.wrapText
36676
- }
36677
- });
36802
+ const nodeElements = translateImageNode(params2);
36803
+ const inlineAttrs = {
36804
+ ...attrs.originalAttributes || {},
36805
+ ...nodeElements.attributes || {}
36806
+ };
36807
+ if (inlineAttrs.relativeHeight == null) {
36808
+ inlineAttrs.relativeHeight = 1;
36678
36809
  }
36679
- if (attrs.wrapTopAndBottom) {
36680
- wrapElements.push({
36681
- name: "wp:wrapTopAndBottom"
36682
- });
36810
+ if (attrs.originalAttributes?.simplePos !== void 0) {
36811
+ inlineAttrs.simplePos = attrs.originalAttributes.simplePos;
36812
+ } else if (attrs.simplePos !== void 0) {
36813
+ inlineAttrs.simplePos = attrs.simplePos;
36683
36814
  }
36684
- if (!wrapElements.length) {
36685
- wrapElements.push({
36686
- name: "wp:wrapNone"
36687
- });
36815
+ if (attrs.originalAttributes?.locked !== void 0) {
36816
+ inlineAttrs.locked = attrs.originalAttributes.locked;
36688
36817
  }
36689
- const nodeElements = translateImageNode(params2);
36690
- const inlineAttrs = {
36691
- ...nodeElements.attributes,
36692
- simplePos: attrs.originalAttributes?.simplePos,
36693
- relativeHeight: 1,
36694
- behindDoc: attrs.originalAttributes?.behindDoc,
36695
- locked: attrs.originalAttributes?.locked,
36696
- layoutInCell: attrs.originalAttributes?.layoutInCell,
36697
- allowOverlap: attrs.originalAttributes?.allowOverlap
36818
+ if (attrs.originalAttributes?.layoutInCell !== void 0) {
36819
+ inlineAttrs.layoutInCell = attrs.originalAttributes.layoutInCell;
36820
+ }
36821
+ if (attrs.originalAttributes?.allowOverlap !== void 0) {
36822
+ inlineAttrs.allowOverlap = attrs.originalAttributes.allowOverlap;
36823
+ }
36824
+ const wrapElement = {
36825
+ name: `wp:wrap${attrs.wrap?.type || "None"}`
36826
+ // Important: wp:anchor will break if no wrapping is specified. We need to use wrapNone.
36698
36827
  };
36828
+ switch (attrs.wrap?.type) {
36829
+ case "Square":
36830
+ wrapElement.attributes = {
36831
+ wrapText: attrs.wrap.attrs.wrapText
36832
+ };
36833
+ if ("distBottom" in (attrs.wrap.attrs || {})) {
36834
+ wrapElement.attributes.distB = pixelsToEmu(attrs.wrap.attrs.distBottom);
36835
+ }
36836
+ if ("distLeft" in (attrs.wrap.attrs || {})) {
36837
+ wrapElement.attributes.distL = pixelsToEmu(attrs.wrap.attrs.distLeft);
36838
+ }
36839
+ if ("distRight" in (attrs.wrap.attrs || {})) {
36840
+ wrapElement.attributes.distR = pixelsToEmu(attrs.wrap.attrs.distRight);
36841
+ }
36842
+ if ("distTop" in (attrs.wrap.attrs || {})) {
36843
+ wrapElement.attributes.distT = pixelsToEmu(attrs.wrap.attrs.distTop);
36844
+ }
36845
+ break;
36846
+ case "TopAndBottom": {
36847
+ const attributes = {};
36848
+ let hasKeys = false;
36849
+ if ("distBottom" in (attrs.wrap.attrs || {})) {
36850
+ attributes.distB = pixelsToEmu(attrs.wrap.attrs.distBottom);
36851
+ hasKeys = true;
36852
+ }
36853
+ if ("distTop" in (attrs.wrap.attrs || {})) {
36854
+ attributes.distT = pixelsToEmu(attrs.wrap.attrs.distTop);
36855
+ hasKeys = true;
36856
+ }
36857
+ if (hasKeys) {
36858
+ wrapElement.attributes = attributes;
36859
+ }
36860
+ break;
36861
+ }
36862
+ case "Through":
36863
+ case "Tight": {
36864
+ const attributes = {};
36865
+ if ("distLeft" in (attrs.wrap.attrs || {})) {
36866
+ attributes.distL = pixelsToEmu(attrs.wrap.attrs.distLeft);
36867
+ }
36868
+ if ("distRight" in (attrs.wrap.attrs || {})) {
36869
+ attributes.distR = pixelsToEmu(attrs.wrap.attrs.distRight);
36870
+ }
36871
+ if ("distTop" in (attrs.wrap.attrs || {})) {
36872
+ attributes.distT = pixelsToEmu(attrs.wrap.attrs.distTop);
36873
+ }
36874
+ if ("distBottom" in (attrs.wrap.attrs || {})) {
36875
+ attributes.distB = pixelsToEmu(attrs.wrap.attrs.distBottom);
36876
+ }
36877
+ const wrapText = attrs.wrap.attrs?.wrapText || "bothSides";
36878
+ {
36879
+ attributes.wrapText = wrapText;
36880
+ }
36881
+ if (Object.keys(attributes).length) {
36882
+ wrapElement.attributes = attributes;
36883
+ }
36884
+ if (attrs.wrap.attrs?.polygon) {
36885
+ const polygonNode = objToPolygon(attrs.wrap.attrs.polygon);
36886
+ if (polygonNode) {
36887
+ if (attrs.wrap.attrs?.polygonEdited !== void 0) {
36888
+ polygonNode.attributes = {
36889
+ ...polygonNode.attributes || {},
36890
+ edited: String(attrs.wrap.attrs.polygonEdited)
36891
+ };
36892
+ }
36893
+ wrapElement.elements = [polygonNode];
36894
+ }
36895
+ }
36896
+ break;
36897
+ }
36898
+ case "None":
36899
+ inlineAttrs.behindDoc = attrs.wrap.attrs?.behindDoc ? "1" : "0";
36900
+ break;
36901
+ }
36699
36902
  const effectIndex = nodeElements.elements.findIndex((el) => el.name === "wp:effectExtent");
36700
36903
  const elementsWithWrap = [
36701
36904
  ...nodeElements.elements.slice(0, effectIndex + 1),
36702
- ...wrapElements,
36905
+ wrapElement,
36703
36906
  ...nodeElements.elements.slice(effectIndex + 1)
36704
36907
  ];
36705
36908
  return {
@@ -36708,32 +36911,32 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36708
36911
  elements: [...anchorElements, ...elementsWithWrap]
36709
36912
  };
36710
36913
  }
36711
- const XML_NODE_NAME$a = "wp:anchor";
36914
+ const XML_NODE_NAME$c = "wp:anchor";
36712
36915
  const SD_NODE_NAME$a = ["image"];
36713
- const validXmlAttributes$7 = ["distT", "distB", "distL", "distR"].map((xmlName) => createAttributeHandler(xmlName));
36714
- function encode$g(params2) {
36916
+ const validXmlAttributes$9 = ["distT", "distB", "distL", "distR"].map((xmlName) => createAttributeHandler(xmlName));
36917
+ function encode$i(params2) {
36715
36918
  const { node } = params2.extraParams;
36716
36919
  if (!node || !node.type) {
36717
36920
  return null;
36718
36921
  }
36719
36922
  return handleAnchorNode(params2);
36720
36923
  }
36721
- function decode$i(params2) {
36924
+ function decode$k(params2) {
36722
36925
  const { node } = params2;
36723
36926
  if (!node || !node.type) {
36724
36927
  return null;
36725
36928
  }
36726
36929
  return translateAnchorNode(params2);
36727
36930
  }
36728
- const config$9 = {
36729
- xmlName: XML_NODE_NAME$a,
36931
+ const config$b = {
36932
+ xmlName: XML_NODE_NAME$c,
36730
36933
  sdNodeOrKeyName: SD_NODE_NAME$a,
36731
36934
  type: NodeTranslator.translatorTypes.NODE,
36732
- encode: encode$g,
36733
- decode: decode$i,
36734
- attributes: validXmlAttributes$7
36935
+ encode: encode$i,
36936
+ decode: decode$k,
36937
+ attributes: validXmlAttributes$9
36735
36938
  };
36736
- const translator$9 = NodeTranslator.from(config$9);
36939
+ const translator$b = NodeTranslator.from(config$b);
36737
36940
  function handleInlineNode(params2) {
36738
36941
  const { node } = params2.extraParams;
36739
36942
  if (node.name !== "wp:inline") {
@@ -36749,41 +36952,41 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36749
36952
  elements: nodeElements.elements
36750
36953
  };
36751
36954
  }
36752
- const XML_NODE_NAME$9 = "wp:inline";
36955
+ const XML_NODE_NAME$b = "wp:inline";
36753
36956
  const SD_NODE_NAME$9 = ["image"];
36754
- const validXmlAttributes$6 = ["distT", "distB", "distL", "distR"].map((xmlName) => createAttributeHandler(xmlName));
36755
- function encode$f(params2) {
36957
+ const validXmlAttributes$8 = ["distT", "distB", "distL", "distR"].map((xmlName) => createAttributeHandler(xmlName));
36958
+ function encode$h(params2) {
36756
36959
  const { node } = params2.extraParams;
36757
36960
  if (!node || !node.type) {
36758
36961
  return null;
36759
36962
  }
36760
36963
  return handleInlineNode(params2);
36761
36964
  }
36762
- function decode$h(params2) {
36965
+ function decode$j(params2) {
36763
36966
  const { node } = params2;
36764
36967
  if (!node || !node.type) {
36765
36968
  return null;
36766
36969
  }
36767
36970
  return translateInlineNode(params2);
36768
36971
  }
36769
- const config$8 = {
36770
- xmlName: XML_NODE_NAME$9,
36972
+ const config$a = {
36973
+ xmlName: XML_NODE_NAME$b,
36771
36974
  sdNodeOrKeyName: SD_NODE_NAME$9,
36772
36975
  type: NodeTranslator.translatorTypes.NODE,
36773
- encode: encode$f,
36774
- decode: decode$h,
36775
- attributes: validXmlAttributes$6
36976
+ encode: encode$h,
36977
+ decode: decode$j,
36978
+ attributes: validXmlAttributes$8
36776
36979
  };
36777
- const translator$8 = NodeTranslator.from(config$8);
36778
- const XML_NODE_NAME$8 = "w:drawing";
36980
+ const translator$a = NodeTranslator.from(config$a);
36981
+ const XML_NODE_NAME$a = "w:drawing";
36779
36982
  const SD_NODE_NAME$8 = [];
36780
- const validXmlAttributes$5 = [];
36781
- function encode$e(params2) {
36983
+ const validXmlAttributes$7 = [];
36984
+ function encode$g(params2) {
36782
36985
  const nodes = params2.nodes;
36783
36986
  const node = nodes[0];
36784
36987
  const translatorByChildName = {
36785
- "wp:anchor": translator$9,
36786
- "wp:inline": translator$8
36988
+ "wp:anchor": translator$b,
36989
+ "wp:inline": translator$a
36787
36990
  };
36788
36991
  return node.elements.reduce((acc, child) => {
36789
36992
  if (acc) return acc;
@@ -36792,12 +36995,12 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36792
36995
  return translator2.encode({ ...params2, extraParams: { node: child } }) || acc;
36793
36996
  }, null);
36794
36997
  }
36795
- function decode$g(params2) {
36998
+ function decode$i(params2) {
36796
36999
  const { node } = params2;
36797
37000
  if (!node || !node.type) {
36798
37001
  return null;
36799
37002
  }
36800
- const childTranslator = node.attrs.isAnchor ? translator$9 : translator$8;
37003
+ const childTranslator = node.attrs.isAnchor ? translator$b : translator$a;
36801
37004
  const resultNode = childTranslator.decode(params2);
36802
37005
  return wrapTextInRun(
36803
37006
  {
@@ -36807,15 +37010,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36807
37010
  []
36808
37011
  );
36809
37012
  }
36810
- const config$7 = {
36811
- xmlName: XML_NODE_NAME$8,
37013
+ const config$9 = {
37014
+ xmlName: XML_NODE_NAME$a,
36812
37015
  sdNodeOrKeyName: SD_NODE_NAME$8,
36813
37016
  type: NodeTranslator.translatorTypes.NODE,
36814
- encode: encode$e,
36815
- decode: decode$g,
36816
- attributes: validXmlAttributes$5
37017
+ encode: encode$g,
37018
+ decode: decode$i,
37019
+ attributes: validXmlAttributes$7
36817
37020
  };
36818
- const translator$7 = NodeTranslator.from(config$7);
37021
+ const translator$9 = NodeTranslator.from(config$9);
36819
37022
  class CommandService {
36820
37023
  /**
36821
37024
  * @param {import('./commands/types/index.js').CommandServiceOptions} props
@@ -38163,7 +38366,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38163
38366
  return getTextNodeForExport(attrs.displayLabel, [...marks, ...marksFromAttrs], params2);
38164
38367
  }
38165
38368
  function prepareImageAnnotation(params2, imageSize) {
38166
- return translator$7.decode({
38369
+ return translator$9.decode({
38167
38370
  ...params2,
38168
38371
  imageSize
38169
38372
  });
@@ -38478,10 +38681,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38478
38681
  };
38479
38682
  return result;
38480
38683
  }
38481
- const XML_NODE_NAME$7 = "w:sdt";
38684
+ const XML_NODE_NAME$9 = "w:sdt";
38482
38685
  const SD_NODE_NAME$7 = ["fieldAnnotation", "structuredContent", "structuredContentBlock", "documentSection"];
38483
- const validXmlAttributes$4 = [];
38484
- function encode$d(params2) {
38686
+ const validXmlAttributes$6 = [];
38687
+ function encode$f(params2) {
38485
38688
  const nodes = params2.nodes;
38486
38689
  const node = nodes[0];
38487
38690
  const { type: sdtType, handler: handler2 } = sdtNodeTypeStrategy(node);
@@ -38491,7 +38694,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38491
38694
  const result = handler2(params2);
38492
38695
  return result;
38493
38696
  }
38494
- function decode$f(params2) {
38697
+ function decode$h(params2) {
38495
38698
  const { node } = params2;
38496
38699
  if (!node || !node.type) {
38497
38700
  return null;
@@ -38509,85 +38712,85 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38509
38712
  const result = decoder();
38510
38713
  return result;
38511
38714
  }
38512
- const config$6 = {
38513
- xmlName: XML_NODE_NAME$7,
38715
+ const config$8 = {
38716
+ xmlName: XML_NODE_NAME$9,
38514
38717
  sdNodeOrKeyName: SD_NODE_NAME$7,
38515
38718
  type: NodeTranslator.translatorTypes.NODE,
38516
- encode: encode$d,
38517
- decode: decode$f,
38518
- attributes: validXmlAttributes$4
38719
+ encode: encode$f,
38720
+ decode: decode$h,
38721
+ attributes: validXmlAttributes$6
38519
38722
  };
38520
- const translator$6 = NodeTranslator.from(config$6);
38521
- const encode$c = (attributes) => {
38723
+ const translator$8 = NodeTranslator.from(config$8);
38724
+ const encode$e = (attributes) => {
38522
38725
  return attributes["w:id"];
38523
38726
  };
38524
- const decode$e = (attrs) => {
38727
+ const decode$g = (attrs) => {
38525
38728
  return attrs.id;
38526
38729
  };
38527
38730
  const attrConfig$7 = Object.freeze({
38528
38731
  xmlName: "w:id",
38529
38732
  sdName: "id",
38530
- encode: encode$c,
38531
- decode: decode$e
38733
+ encode: encode$e,
38734
+ decode: decode$g
38532
38735
  });
38533
- const encode$b = (attributes) => {
38736
+ const encode$d = (attributes) => {
38534
38737
  return attributes["w:name"];
38535
38738
  };
38536
- const decode$d = (attrs) => {
38739
+ const decode$f = (attrs) => {
38537
38740
  return attrs.name;
38538
38741
  };
38539
38742
  const attrConfig$6 = Object.freeze({
38540
38743
  xmlName: "w:name",
38541
38744
  sdName: "name",
38542
- encode: encode$b,
38543
- decode: decode$d
38745
+ encode: encode$d,
38746
+ decode: decode$f
38544
38747
  });
38545
- const encode$a = (attributes) => {
38748
+ const encode$c = (attributes) => {
38546
38749
  return attributes["w:colFirst"];
38547
38750
  };
38548
- const decode$c = (attrs) => {
38751
+ const decode$e = (attrs) => {
38549
38752
  return attrs.colFirst;
38550
38753
  };
38551
38754
  const attrConfig$5 = Object.freeze({
38552
38755
  xmlName: "w:colFirst",
38553
38756
  sdName: "colFirst",
38554
- encode: encode$a,
38555
- decode: decode$c
38757
+ encode: encode$c,
38758
+ decode: decode$e
38556
38759
  });
38557
- const encode$9 = (attributes) => {
38760
+ const encode$b = (attributes) => {
38558
38761
  return attributes["w:colLast"];
38559
38762
  };
38560
- const decode$b = (attrs) => {
38763
+ const decode$d = (attrs) => {
38561
38764
  return attrs.colLast;
38562
38765
  };
38563
38766
  const attrConfig$4 = Object.freeze({
38564
38767
  xmlName: "w:colLast",
38565
38768
  sdName: "colLast",
38566
- encode: encode$9,
38567
- decode: decode$b
38769
+ encode: encode$b,
38770
+ decode: decode$d
38568
38771
  });
38569
- const encode$8 = (attributes) => {
38772
+ const encode$a = (attributes) => {
38570
38773
  return attributes["w:displacedByCustomXml"];
38571
38774
  };
38572
- const decode$a = (attrs) => {
38775
+ const decode$c = (attrs) => {
38573
38776
  return attrs.displacedByCustomXml;
38574
38777
  };
38575
38778
  const attrConfig$3 = Object.freeze({
38576
38779
  xmlName: "w:displacedByCustomXml",
38577
38780
  sdName: "displacedByCustomXml",
38578
- encode: encode$8,
38579
- decode: decode$a
38781
+ encode: encode$a,
38782
+ decode: decode$c
38580
38783
  });
38581
- const validXmlAttributes$3 = [attrConfig$7, attrConfig$6, attrConfig$5, attrConfig$4, attrConfig$3];
38582
- const XML_NODE_NAME$6 = "w:bookmarkStart";
38784
+ const validXmlAttributes$5 = [attrConfig$7, attrConfig$6, attrConfig$5, attrConfig$4, attrConfig$3];
38785
+ const XML_NODE_NAME$8 = "w:bookmarkStart";
38583
38786
  const SD_NODE_NAME$6 = "bookmarkStart";
38584
- const encode$7 = (params2, encodedAttrs = {}) => {
38787
+ const encode$9 = (params2, encodedAttrs = {}) => {
38585
38788
  return {
38586
38789
  type: "bookmarkStart",
38587
38790
  attrs: encodedAttrs
38588
38791
  };
38589
38792
  };
38590
- const decode$9 = (params2, decodedAttrs = {}) => {
38793
+ const decode$b = (params2, decodedAttrs = {}) => {
38591
38794
  const result = {
38592
38795
  name: "w:bookmarkStart",
38593
38796
  elements: []
@@ -38597,49 +38800,49 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38597
38800
  }
38598
38801
  return result;
38599
38802
  };
38600
- const config$5 = {
38601
- xmlName: XML_NODE_NAME$6,
38803
+ const config$7 = {
38804
+ xmlName: XML_NODE_NAME$8,
38602
38805
  sdNodeOrKeyName: SD_NODE_NAME$6,
38603
38806
  type: NodeTranslator.translatorTypes.NODE,
38604
- encode: encode$7,
38605
- decode: decode$9,
38606
- attributes: validXmlAttributes$3
38807
+ encode: encode$9,
38808
+ decode: decode$b,
38809
+ attributes: validXmlAttributes$5
38607
38810
  };
38608
- const translator$5 = NodeTranslator.from(config$5);
38609
- const encode$6 = (attributes) => {
38811
+ const translator$7 = NodeTranslator.from(config$7);
38812
+ const encode$8 = (attributes) => {
38610
38813
  return attributes["w:id"];
38611
38814
  };
38612
- const decode$8 = (attrs) => {
38815
+ const decode$a = (attrs) => {
38613
38816
  return attrs.id;
38614
38817
  };
38615
38818
  const attrConfig$2 = Object.freeze({
38616
38819
  xmlName: "w:id",
38617
38820
  sdName: "id",
38618
- encode: encode$6,
38619
- decode: decode$8
38821
+ encode: encode$8,
38822
+ decode: decode$a
38620
38823
  });
38621
- const encode$5 = (attributes) => {
38824
+ const encode$7 = (attributes) => {
38622
38825
  return attributes["w:displacedByCustomXml"];
38623
38826
  };
38624
- const decode$7 = (attrs) => {
38827
+ const decode$9 = (attrs) => {
38625
38828
  return attrs.displacedByCustomXml;
38626
38829
  };
38627
38830
  const attrConfig$1 = Object.freeze({
38628
38831
  xmlName: "w:displacedByCustomXml",
38629
38832
  sdName: "displacedByCustomXml",
38630
- encode: encode$5,
38631
- decode: decode$7
38833
+ encode: encode$7,
38834
+ decode: decode$9
38632
38835
  });
38633
- const validXmlAttributes$2 = [attrConfig$2, attrConfig$1];
38634
- const XML_NODE_NAME$5 = "w:bookmarkEnd";
38836
+ const validXmlAttributes$4 = [attrConfig$2, attrConfig$1];
38837
+ const XML_NODE_NAME$7 = "w:bookmarkEnd";
38635
38838
  const SD_NODE_NAME$5 = "bookmarkEnd";
38636
- const encode$4 = (params2, encodedAttrs = {}) => {
38839
+ const encode$6 = (params2, encodedAttrs = {}) => {
38637
38840
  return {
38638
38841
  type: "bookmarkEnd",
38639
38842
  attrs: encodedAttrs
38640
38843
  };
38641
38844
  };
38642
- const decode$6 = (params2, decodedAttrs = {}) => {
38845
+ const decode$8 = (params2, decodedAttrs = {}) => {
38643
38846
  const result = {
38644
38847
  name: "w:bookmarkEnd",
38645
38848
  elements: []
@@ -38649,27 +38852,27 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38649
38852
  }
38650
38853
  return result;
38651
38854
  };
38652
- const config$4 = {
38653
- xmlName: XML_NODE_NAME$5,
38855
+ const config$6 = {
38856
+ xmlName: XML_NODE_NAME$7,
38654
38857
  sdNodeOrKeyName: SD_NODE_NAME$5,
38655
38858
  type: NodeTranslator.translatorTypes.NODE,
38656
- encode: encode$4,
38657
- decode: decode$6,
38658
- attributes: validXmlAttributes$2
38859
+ encode: encode$6,
38860
+ decode: decode$8,
38861
+ attributes: validXmlAttributes$4
38659
38862
  };
38660
- const translator$4 = NodeTranslator.from(config$4);
38661
- const decode$5 = (attrs) => attrs?.["w:id"];
38863
+ const translator$6 = NodeTranslator.from(config$6);
38864
+ const decode$7 = (attrs) => attrs?.["w:id"];
38662
38865
  const attrConfig = Object.freeze({
38663
38866
  xmlName: "w:id",
38664
38867
  sdName: "w:id",
38665
38868
  // We do not translate it from 'w:id' to 'id' when encoding, so the name is the same
38666
38869
  encode: () => {
38667
38870
  },
38668
- decode: decode$5
38871
+ decode: decode$7
38669
38872
  });
38670
- const XML_NODE_NAME$4 = "w:commentRange";
38873
+ const XML_NODE_NAME$6 = "w:commentRange";
38671
38874
  const SD_NODE_NAME$4 = "commentRange";
38672
- const decode$4 = (params2) => {
38875
+ const decode$6 = (params2) => {
38673
38876
  const { node, comments, commentsExportType, exportedCommentDefs } = params2;
38674
38877
  if (!node) return;
38675
38878
  if (!comments) return;
@@ -38712,19 +38915,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38712
38915
  };
38713
38916
  };
38714
38917
  const getConfig = (type2) => ({
38715
- xmlName: `${XML_NODE_NAME$4}${type2}`,
38918
+ xmlName: `${XML_NODE_NAME$6}${type2}`,
38716
38919
  sdNodeOrKeyName: `${SD_NODE_NAME$4}${type2}`,
38717
38920
  type: NodeTranslator.translatorTypes.NODE,
38718
38921
  encode: () => {
38719
38922
  },
38720
- decode: decode$4,
38923
+ decode: decode$6,
38721
38924
  attributes: [attrConfig]
38722
38925
  });
38723
38926
  const commentRangeStartTranslator = NodeTranslator.from(getConfig("Start"));
38724
38927
  const commentRangeEndTranslator = NodeTranslator.from(getConfig("End"));
38725
- const XML_NODE_NAME$3 = "sd:pageReference";
38928
+ const XML_NODE_NAME$5 = "sd:pageReference";
38726
38929
  const SD_NODE_NAME$3 = "pageReference";
38727
- const encode$3 = (params2) => {
38930
+ const encode$5 = (params2) => {
38728
38931
  const { nodes = [], nodeListHandler } = params2 || {};
38729
38932
  const node = nodes[0];
38730
38933
  const processedText = nodeListHandler.handler({
@@ -38741,7 +38944,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38741
38944
  };
38742
38945
  return processedNode;
38743
38946
  };
38744
- const decode$3 = (params2) => {
38947
+ const decode$5 = (params2) => {
38745
38948
  const { node } = params2;
38746
38949
  const outputMarks = processOutputMarks(node.attrs?.marksAsAttrs || []);
38747
38950
  const contentNodes = (node.content ?? []).flatMap((n) => exportSchemaToJson({ ...params2, node: n }));
@@ -38814,17 +39017,17 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38814
39017
  ];
38815
39018
  return translated;
38816
39019
  };
38817
- const config$3 = {
38818
- xmlName: XML_NODE_NAME$3,
39020
+ const config$5 = {
39021
+ xmlName: XML_NODE_NAME$5,
38819
39022
  sdNodeOrKeyName: SD_NODE_NAME$3,
38820
39023
  type: NodeTranslator.translatorTypes.NODE,
38821
- encode: encode$3,
38822
- decode: decode$3
39024
+ encode: encode$5,
39025
+ decode: decode$5
38823
39026
  };
38824
- const translator$3 = NodeTranslator.from(config$3);
38825
- const XML_NODE_NAME$2 = "sd:tableOfContents";
39027
+ const translator$5 = NodeTranslator.from(config$5);
39028
+ const XML_NODE_NAME$4 = "sd:tableOfContents";
38826
39029
  const SD_NODE_NAME$2 = "tableOfContents";
38827
- const encode$2 = (params2) => {
39030
+ const encode$4 = (params2) => {
38828
39031
  const { nodes = [], nodeListHandler } = params2 || {};
38829
39032
  const node = nodes[0];
38830
39033
  const processedContent = nodeListHandler.handler({
@@ -38840,7 +39043,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38840
39043
  };
38841
39044
  return processedNode;
38842
39045
  };
38843
- const decode$2 = (params2) => {
39046
+ const decode$4 = (params2) => {
38844
39047
  const { node } = params2;
38845
39048
  const contentNodes = node.content.map((n) => exportSchemaToJson({ ...params2, node: n }));
38846
39049
  const tocBeginElements = [
@@ -38887,14 +39090,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
38887
39090
  }
38888
39091
  return contentNodes;
38889
39092
  };
38890
- const config$2 = {
38891
- xmlName: XML_NODE_NAME$2,
39093
+ const config$4 = {
39094
+ xmlName: XML_NODE_NAME$4,
38892
39095
  sdNodeOrKeyName: SD_NODE_NAME$2,
38893
39096
  type: NodeTranslator.translatorTypes.NODE,
38894
- encode: encode$2,
38895
- decode: decode$2
39097
+ encode: encode$4,
39098
+ decode: decode$4
38896
39099
  };
38897
- const translator$2 = NodeTranslator.from(config$2);
39100
+ const translator$4 = NodeTranslator.from(config$4);
38898
39101
  function parseInlineStyles(styleString) {
38899
39102
  if (!styleString) return {};
38900
39103
  return styleString.split(";").filter((style2) => !!style2.trim()).reduce((acc, style2) => {
@@ -39028,7 +39231,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39028
39231
  if (mainNode.name === "w:drawing") node = mainNode;
39029
39232
  else node = mainNode.elements.find((el) => el.name === "w:drawing");
39030
39233
  if (!node) return { nodes: [], consumed: 0 };
39031
- const schemaNode = translator$7.encode(params2);
39234
+ const schemaNode = translator$9.encode(params2);
39032
39235
  const newNodes = schemaNode ? [schemaNode] : [];
39033
39236
  return { nodes: newNodes, consumed: 1 };
39034
39237
  };
@@ -39036,6 +39239,203 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39036
39239
  handlerName: "drawingNodeHandler",
39037
39240
  handler: handleDrawingNode
39038
39241
  };
39242
+ const createTrackStyleMark = (marks) => {
39243
+ const trackStyleMark = marks.find((mark) => mark.type === "trackFormat");
39244
+ if (trackStyleMark) {
39245
+ return {
39246
+ type: "element",
39247
+ name: "w:rPrChange",
39248
+ attributes: {
39249
+ "w:id": trackStyleMark.attrs.id,
39250
+ "w:author": trackStyleMark.attrs.author,
39251
+ "w:authorEmail": trackStyleMark.attrs.authorEmail,
39252
+ "w:date": trackStyleMark.attrs.date
39253
+ },
39254
+ elements: trackStyleMark.attrs.before.map((mark) => processOutputMarks([mark])).filter((r2) => r2 !== void 0)
39255
+ };
39256
+ }
39257
+ return void 0;
39258
+ };
39259
+ const XML_NODE_NAME$3 = "w:del";
39260
+ const SD_ATTR_KEY$1 = "trackDelete";
39261
+ const validXmlAttributes$3 = [
39262
+ createAttributeHandler("w:id", "id"),
39263
+ createAttributeHandler("w:date", "date"),
39264
+ createAttributeHandler("w:author", "author"),
39265
+ createAttributeHandler("w:authorEmail", "authorEmail")
39266
+ ];
39267
+ const encode$3 = (params2, encodedAttrs = {}) => {
39268
+ const { nodeListHandler, extraParams = {} } = params2;
39269
+ const { node } = extraParams;
39270
+ const subs = nodeListHandler.handler({
39271
+ ...params2,
39272
+ insideTrackChange: true,
39273
+ nodes: node.elements,
39274
+ path: [...params2.path || [], node]
39275
+ });
39276
+ encodedAttrs.importedAuthor = `${encodedAttrs.author} (imported)`;
39277
+ subs.forEach((subElement) => {
39278
+ if (subElement.marks === void 0) subElement.marks = [];
39279
+ subElement.marks.push({ type: "trackDelete", attrs: encodedAttrs });
39280
+ });
39281
+ return subs;
39282
+ };
39283
+ function decode$3(params2) {
39284
+ const { node } = params2;
39285
+ if (!node || !node.type) {
39286
+ return null;
39287
+ }
39288
+ const trackingMarks = ["trackInsert", "trackFormat", "trackDelete"];
39289
+ const marks = node.marks;
39290
+ const trackedMark = marks.find((m2) => m2.type === "trackDelete");
39291
+ const trackStyleMark = createTrackStyleMark(marks);
39292
+ node.marks = marks.filter((m2) => !trackingMarks.includes(m2.type));
39293
+ if (trackStyleMark) {
39294
+ node.marks.push(trackStyleMark);
39295
+ }
39296
+ const translatedTextNode = exportSchemaToJson({ ...params2, node });
39297
+ const textNode = translatedTextNode.elements.find((n) => n.name === "w:t");
39298
+ textNode.name = "w:delText";
39299
+ return {
39300
+ name: "w:del",
39301
+ attributes: {
39302
+ "w:id": trackedMark.attrs.id,
39303
+ "w:author": trackedMark.attrs.author,
39304
+ "w:authorEmail": trackedMark.attrs.authorEmail,
39305
+ "w:date": trackedMark.attrs.date
39306
+ },
39307
+ elements: [translatedTextNode]
39308
+ };
39309
+ }
39310
+ const config$3 = {
39311
+ xmlName: XML_NODE_NAME$3,
39312
+ sdNodeOrKeyName: SD_ATTR_KEY$1,
39313
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
39314
+ encode: encode$3,
39315
+ decode: decode$3,
39316
+ attributes: validXmlAttributes$3
39317
+ };
39318
+ const translator$3 = NodeTranslator.from(config$3);
39319
+ const XML_NODE_NAME$2 = "w:ins";
39320
+ const SD_ATTR_KEY = "trackInsert";
39321
+ const validXmlAttributes$2 = [
39322
+ createAttributeHandler("w:id", "id"),
39323
+ createAttributeHandler("w:date", "date"),
39324
+ createAttributeHandler("w:author", "author"),
39325
+ createAttributeHandler("w:authorEmail", "authorEmail")
39326
+ ];
39327
+ const encode$2 = (params2, encodedAttrs = {}) => {
39328
+ const { nodeListHandler, extraParams = {} } = params2;
39329
+ const { node } = extraParams;
39330
+ const subs = nodeListHandler.handler({
39331
+ ...params2,
39332
+ insideTrackChange: true,
39333
+ nodes: node.elements,
39334
+ path: [...params2.path || [], node]
39335
+ });
39336
+ encodedAttrs.importedAuthor = `${encodedAttrs.author} (imported)`;
39337
+ subs.forEach((subElement) => {
39338
+ if (subElement.marks === void 0) subElement.marks = [];
39339
+ subElement.marks.push({ type: "trackInsert", attrs: encodedAttrs });
39340
+ });
39341
+ return subs;
39342
+ };
39343
+ function decode$2(params2) {
39344
+ const { node } = params2;
39345
+ if (!node || !node.type) {
39346
+ return null;
39347
+ }
39348
+ const trackingMarks = ["trackInsert", "trackFormat", "trackDelete"];
39349
+ const marks = node.marks;
39350
+ const trackedMark = marks.find((m2) => m2.type === "trackInsert");
39351
+ const trackStyleMark = createTrackStyleMark(marks);
39352
+ node.marks = marks.filter((m2) => !trackingMarks.includes(m2.type));
39353
+ if (trackStyleMark) {
39354
+ node.marks.push(trackStyleMark);
39355
+ }
39356
+ const translatedTextNode = exportSchemaToJson({ ...params2, node });
39357
+ return {
39358
+ name: "w:ins",
39359
+ attributes: {
39360
+ "w:id": trackedMark.attrs.id,
39361
+ "w:author": trackedMark.attrs.author,
39362
+ "w:authorEmail": trackedMark.attrs.authorEmail,
39363
+ "w:date": trackedMark.attrs.date
39364
+ },
39365
+ elements: [translatedTextNode]
39366
+ };
39367
+ }
39368
+ const config$2 = {
39369
+ xmlName: XML_NODE_NAME$2,
39370
+ sdNodeOrKeyName: SD_ATTR_KEY,
39371
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
39372
+ encode: encode$2,
39373
+ decode: decode$2,
39374
+ attributes: validXmlAttributes$2
39375
+ };
39376
+ const translator$2 = NodeTranslator.from(config$2);
39377
+ const isTrackChangeElement = (node) => node?.name === "w:del" || node?.name === "w:ins";
39378
+ const unwrapTrackChangeNode = (node) => {
39379
+ if (!node) {
39380
+ return null;
39381
+ }
39382
+ if (isTrackChangeElement(node)) {
39383
+ return node;
39384
+ }
39385
+ if (node.name === "w:sdt") {
39386
+ const content = node.elements?.find((element) => element.name === "w:sdtContent");
39387
+ if (!content?.elements?.length) {
39388
+ return null;
39389
+ }
39390
+ for (const child of content.elements) {
39391
+ const trackChange = unwrapTrackChangeNode(child);
39392
+ if (trackChange) {
39393
+ return trackChange;
39394
+ }
39395
+ }
39396
+ }
39397
+ return null;
39398
+ };
39399
+ const handleTrackChangeNode = (params2) => {
39400
+ const { nodes } = params2;
39401
+ if (nodes.length === 0) {
39402
+ return { nodes: [], consumed: 0 };
39403
+ }
39404
+ const mainNode = unwrapTrackChangeNode(nodes[0]);
39405
+ if (!mainNode) {
39406
+ return { nodes: [], consumed: 0 };
39407
+ }
39408
+ let result;
39409
+ const translatorParams = {
39410
+ ...params2,
39411
+ nodes: [mainNode]
39412
+ };
39413
+ switch (mainNode.name) {
39414
+ case "w:del":
39415
+ result = translator$3.encode({
39416
+ extraParams: {
39417
+ node: mainNode
39418
+ },
39419
+ ...translatorParams
39420
+ });
39421
+ break;
39422
+ case "w:ins":
39423
+ result = translator$2.encode({
39424
+ extraParams: {
39425
+ node: mainNode
39426
+ },
39427
+ ...translatorParams
39428
+ });
39429
+ break;
39430
+ }
39431
+ return { nodes: result, consumed: 1 };
39432
+ };
39433
+ const trackChangeNodeHandlerEntity = {
39434
+ handlerName: "trackChangeNodeHandler",
39435
+ handler: handleTrackChangeNode
39436
+ };
39437
+ const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator$1c);
39438
+ const runNodeHandlerEntity = generateV2HandlerEntity("runNodeHandler", translator$1b);
39039
39439
  function parseProperties(node) {
39040
39440
  const marks = [];
39041
39441
  const unknownMarks = [];
@@ -39087,51 +39487,6 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39087
39487
  const isPropertiesElement = (element) => {
39088
39488
  return !!SuperConverter.propertyTypes[element.name || element.type];
39089
39489
  };
39090
- const handleTrackChangeNode = (params2) => {
39091
- const { nodes, nodeListHandler } = params2;
39092
- if (nodes.length === 0 || !(nodes[0].name === "w:del" || nodes[0].name === "w:ins" || nodes[0].name === "w:sdt")) {
39093
- return { nodes: [], consumed: 0 };
39094
- }
39095
- const mainNode = nodes[0];
39096
- let node;
39097
- if (["w:ins", "w:del"].includes(mainNode.name)) {
39098
- node = mainNode;
39099
- } else {
39100
- const sdtContent = mainNode.elements.find((el) => el.name === "w:sdtContent");
39101
- const trackedChange = sdtContent?.elements.find((el) => ["w:ins", "w:del"].includes(el.name));
39102
- if (trackedChange) node = trackedChange;
39103
- }
39104
- if (!node) {
39105
- return { nodes: [], consumed: 0 };
39106
- }
39107
- const { name } = node;
39108
- const { attributes, elements } = parseProperties(node);
39109
- const subs = nodeListHandler.handler({
39110
- ...params2,
39111
- insideTrackChange: true,
39112
- nodes: elements,
39113
- path: [...params2.path || [], node]
39114
- });
39115
- const changeType = name === "w:del" ? TrackDeleteMarkName : TrackInsertMarkName;
39116
- const mappedAttributes = {
39117
- id: attributes["w:id"],
39118
- date: attributes["w:date"],
39119
- author: attributes["w:author"],
39120
- authorEmail: attributes["w:authorEmail"],
39121
- importedAuthor: `${attributes["w:author"]} (imported)`
39122
- };
39123
- subs.forEach((subElement) => {
39124
- if (subElement.marks === void 0) subElement.marks = [];
39125
- subElement.marks.push({ type: changeType, attrs: mappedAttributes });
39126
- });
39127
- return { nodes: subs, consumed: 1 };
39128
- };
39129
- const trackChangeNodeHandlerEntity = {
39130
- handlerName: "trackChangeNodeHandler",
39131
- handler: handleTrackChangeNode
39132
- };
39133
- const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator$X);
39134
- const runNodeHandlerEntity = generateV2HandlerEntity("runNodeHandler", translator$W);
39135
39490
  const handleTextNode = (params2) => {
39136
39491
  const { nodes, insideTrackChange } = params2;
39137
39492
  if (nodes.length === 0 || !(nodes[0].name === "w:t" || insideTrackChange && nodes[0].name === "w:delText")) {
@@ -39172,7 +39527,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39172
39527
  if (nodes.length === 0 || nodes[0].name !== "w:p") {
39173
39528
  return { nodes: [], consumed: 0 };
39174
39529
  }
39175
- const schemaNode = translator$17.encode(params2);
39530
+ const schemaNode = translator$1o.encode(params2);
39176
39531
  const newNodes = schemaNode ? [schemaNode] : [];
39177
39532
  return { nodes: newNodes, consumed: 1 };
39178
39533
  };
@@ -39185,7 +39540,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39185
39540
  if (nodes.length === 0 || nodes[0].name !== "w:sdt") {
39186
39541
  return { nodes: [], consumed: 0 };
39187
39542
  }
39188
- const result = translator$6.encode(params2);
39543
+ const result = translator$8.encode(params2);
39189
39544
  if (!result) {
39190
39545
  return { nodes: [], consumed: 0 };
39191
39546
  }
@@ -39275,7 +39630,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39275
39630
  if (nodes.length === 0 || nodes[0].name !== "w:br") {
39276
39631
  return { nodes: [], consumed: 0 };
39277
39632
  }
39278
- const result = translator$1a.encode(params2);
39633
+ const result = translator$1r.encode(params2);
39279
39634
  if (!result) return { nodes: [], consumed: 0 };
39280
39635
  return {
39281
39636
  nodes: [result],
@@ -39347,7 +39702,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39347
39702
  if (isCustomMarkBookmark(nodes[0], params2.editor)) {
39348
39703
  return handleBookmarkNode(params2);
39349
39704
  }
39350
- const node = translator$5.encode(params2);
39705
+ const node = translator$7.encode(params2);
39351
39706
  if (!node) return { nodes: [], consumed: 0 };
39352
39707
  return { nodes: [node], consumed: 1 };
39353
39708
  };
@@ -39379,7 +39734,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39379
39734
  if (!nodes.length || nodes[0].name !== "w:bookmarkEnd") {
39380
39735
  return { nodes: [], consumed: 0 };
39381
39736
  }
39382
- const node = translator$4.encode(params2);
39737
+ const node = translator$6.encode(params2);
39383
39738
  if (!node) return { nodes: [], consumed: 0 };
39384
39739
  return { nodes: [node], consumed: 1 };
39385
39740
  };
@@ -39512,7 +39867,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39512
39867
  handlerName: "autoTotalPageCountEntity",
39513
39868
  handler: handleAutoTotalPageNumber
39514
39869
  };
39515
- const pageReferenceEntity = generateV2HandlerEntity("pageReferenceNodeHandler", translator$3);
39870
+ const pageReferenceEntity = generateV2HandlerEntity("pageReferenceNodeHandler", translator$5);
39516
39871
  const handlePictNode = (params2) => {
39517
39872
  const { nodes } = params2;
39518
39873
  if (!nodes.length || nodes[0].name !== "w:p") {
@@ -39874,14 +40229,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39874
40229
  if (!nodes.length || nodes[0].name !== "w:tab") {
39875
40230
  return { nodes: [], consumed: 0 };
39876
40231
  }
39877
- const node = translator$18.encode(params2);
40232
+ const node = translator$1p.encode(params2);
39878
40233
  return { nodes: [node], consumed: 1 };
39879
40234
  };
39880
40235
  const tabNodeEntityHandler = {
39881
40236
  handlerName: "w:tabTranslator",
39882
40237
  handler: handleTabNode
39883
40238
  };
39884
- const tableOfContentsHandlerEntity = generateV2HandlerEntity("tableOfContentsHandler", translator$2);
40239
+ const tableOfContentsHandlerEntity = generateV2HandlerEntity("tableOfContentsHandler", translator$4);
39885
40240
  function preProcessPageInstruction(nodesToCombine) {
39886
40241
  const pageNumNode = {
39887
40242
  name: "sd:autoPageNumber",
@@ -40126,12 +40481,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40126
40481
  const content = pruneIgnoredNodes(contentElements);
40127
40482
  const comments = importCommentData({ docx, converter, editor });
40128
40483
  const lists = {};
40484
+ const inlineDocumentFonts = [];
40129
40485
  let parsedContent = nodeListHandler.handler({
40130
40486
  nodes: content,
40131
40487
  nodeListHandler,
40132
40488
  docx,
40133
40489
  converter,
40134
40490
  editor,
40491
+ inlineDocumentFonts,
40135
40492
  lists,
40136
40493
  path: []
40137
40494
  });
@@ -40154,6 +40511,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40154
40511
  savedTagsToRestore: node,
40155
40512
  pageStyles: getDocumentStyles(node, docx, converter, editor),
40156
40513
  comments,
40514
+ inlineDocumentFonts,
40157
40515
  linkedStyles: getStyleDefinitions(docx),
40158
40516
  numbering: getNumberingDefinitions(docx)
40159
40517
  };
@@ -40217,6 +40575,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40217
40575
  filename,
40218
40576
  parentStyleId,
40219
40577
  lists,
40578
+ inlineDocumentFonts,
40220
40579
  path = []
40221
40580
  }) => {
40222
40581
  if (!elements || !elements.length) return [];
@@ -40243,6 +40602,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40243
40602
  filename,
40244
40603
  parentStyleId,
40245
40604
  lists,
40605
+ inlineDocumentFonts,
40246
40606
  path
40247
40607
  });
40248
40608
  },
@@ -40822,7 +41182,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40822
41182
  const XML_NODE_NAME = "w:pict";
40823
41183
  const SD_NODE_NAME = ["shapeContainer", "contentBlock"];
40824
41184
  const validXmlAttributes = [];
40825
- function encode$1d(params2) {
41185
+ function encode$1c(params2) {
40826
41186
  const { node, pNode } = params2.extraParams;
40827
41187
  const { type: pictType, handler: handler2 } = pictNodeTypeStrategy(node);
40828
41188
  if (!handler2 || pictType === "unknown") {
@@ -40854,7 +41214,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40854
41214
  xmlName: XML_NODE_NAME,
40855
41215
  sdNodeOrKeyName: SD_NODE_NAME,
40856
41216
  type: NodeTranslator.translatorTypes.NODE,
40857
- encode: encode$1d,
41217
+ encode: encode$1c,
40858
41218
  decode,
40859
41219
  attributes: validXmlAttributes
40860
41220
  };
@@ -40930,35 +41290,35 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40930
41290
  doc: translateDocumentNode,
40931
41291
  body: translateBodyNode,
40932
41292
  heading: translateHeadingNode,
40933
- paragraph: translator$17,
40934
- run: translator$W,
41293
+ paragraph: translator$1o,
41294
+ run: translator$1b,
40935
41295
  text: translateTextNode,
40936
41296
  bulletList: translateList,
40937
41297
  orderedList: translateList,
40938
- lineBreak: translator$1a,
40939
- table: translator$b,
40940
- tableRow: translator$I,
40941
- tableCell: translator$a,
40942
- bookmarkStart: translator$5,
40943
- bookmarkEnd: translator$4,
40944
- fieldAnnotation: translator$6,
40945
- tab: translator$18,
40946
- image: translator$7,
40947
- hardBreak: translator$1a,
41298
+ lineBreak: translator$1r,
41299
+ table: translator$s,
41300
+ tableRow: translator$Z,
41301
+ tableCell: translator$c,
41302
+ bookmarkStart: translator$7,
41303
+ bookmarkEnd: translator$6,
41304
+ fieldAnnotation: translator$8,
41305
+ tab: translator$1p,
41306
+ image: translator$9,
41307
+ hardBreak: translator$1r,
40948
41308
  commentRangeStart: commentRangeStartTranslator,
40949
41309
  commentRangeEnd: commentRangeEndTranslator,
40950
41310
  commentReference: () => null,
40951
41311
  shapeContainer: translator,
40952
41312
  shapeTextbox: translator,
40953
41313
  contentBlock: translator,
40954
- structuredContent: translator$6,
40955
- structuredContentBlock: translator$6,
40956
- documentPartObject: translator$6,
40957
- documentSection: translator$6,
41314
+ structuredContent: translator$8,
41315
+ structuredContentBlock: translator$8,
41316
+ documentPartObject: translator$8,
41317
+ documentSection: translator$8,
40958
41318
  "page-number": translatePageNumberNode,
40959
41319
  "total-page-number": translateTotalPageNumberNode,
40960
- pageReference: translator$3,
40961
- tableOfContents: translator$2
41320
+ pageReference: translator$5,
41321
+ tableOfContents: translator$4
40962
41322
  };
40963
41323
  let handler2 = router[type2];
40964
41324
  if (handler2 && "decode" in handler2 && typeof handler2.decode === "function") {
@@ -41294,62 +41654,22 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41294
41654
  function translateTextNode(params2) {
41295
41655
  const { node, extraParams } = params2;
41296
41656
  const trackedMarks = [TrackInsertMarkName, TrackDeleteMarkName];
41297
- const isTrackedNode = node.marks?.some((m2) => trackedMarks.includes(m2.type));
41298
- if (isTrackedNode) return translateTrackedNode(params2);
41657
+ const trackedMark = node.marks?.find((m2) => trackedMarks.includes(m2.type));
41658
+ if (trackedMark) {
41659
+ switch (trackedMark.type) {
41660
+ case "trackDelete":
41661
+ return translator$3.decode(params2);
41662
+ case "trackInsert":
41663
+ return translator$2.decode(params2);
41664
+ }
41665
+ }
41299
41666
  const isLinkNode = node.marks?.some((m2) => m2.type === "link");
41300
41667
  if (isLinkNode && !extraParams?.linkProcessed) {
41301
- return translator$X.decode(params2);
41668
+ return translator$1c.decode(params2);
41302
41669
  }
41303
41670
  const { text, marks = [] } = node;
41304
41671
  return getTextNodeForExport(text, marks, params2);
41305
41672
  }
41306
- function createTrackStyleMark(marks) {
41307
- const trackStyleMark = marks.find((mark) => mark.type === TrackFormatMarkName);
41308
- if (trackStyleMark) {
41309
- const markElement = {
41310
- type: "element",
41311
- name: "w:rPrChange",
41312
- attributes: {
41313
- "w:id": trackStyleMark.attrs.id,
41314
- "w:author": trackStyleMark.attrs.author,
41315
- "w:authorEmail": trackStyleMark.attrs.authorEmail,
41316
- "w:date": trackStyleMark.attrs.date
41317
- },
41318
- elements: trackStyleMark.attrs.before.map((mark) => processOutputMarks([mark])).filter((r2) => r2 !== void 0)
41319
- };
41320
- return markElement;
41321
- }
41322
- return void 0;
41323
- }
41324
- function translateTrackedNode(params2) {
41325
- const { node } = params2;
41326
- const marks = node.marks;
41327
- const trackingMarks = [TrackInsertMarkName, TrackDeleteMarkName, TrackFormatMarkName];
41328
- const trackedMark = marks.find((m2) => trackingMarks.includes(m2.type));
41329
- const isInsert = trackedMark.type === TrackInsertMarkName;
41330
- const trackStyleMark = createTrackStyleMark(marks);
41331
- node.marks = marks.filter((m2) => !trackingMarks.includes(m2.type));
41332
- if (trackStyleMark) {
41333
- node.marks.push(trackStyleMark);
41334
- }
41335
- const translatedTextNode = exportSchemaToJson({ ...params2, node });
41336
- if (!isInsert) {
41337
- const textNode = translatedTextNode.elements.find((n) => n.name === "w:t");
41338
- textNode.name = "w:delText";
41339
- }
41340
- const trackedNode = {
41341
- name: isInsert ? "w:ins" : "w:del",
41342
- type: "element",
41343
- attributes: {
41344
- "w:id": trackedMark.attrs.id,
41345
- "w:author": trackedMark.attrs.author,
41346
- "w:authorEmail": trackedMark.attrs.authorEmail,
41347
- "w:date": trackedMark.attrs.date
41348
- },
41349
- elements: [translatedTextNode]
41350
- };
41351
- return trackedNode;
41352
- }
41353
41673
  function wrapTextInRun(nodeOrNodes, marks) {
41354
41674
  let elements = [];
41355
41675
  if (Array.isArray(nodeOrNodes)) elements = nodeOrNodes;
@@ -41605,7 +41925,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41605
41925
  markElement.type = "element";
41606
41926
  break;
41607
41927
  case "underline": {
41608
- const translated = translator$14.decode({
41928
+ const translated = translator$1l.decode({
41609
41929
  node: {
41610
41930
  attrs: {
41611
41931
  underlineType: attrs.underlineType ?? attrs.underline ?? null,
@@ -41669,7 +41989,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41669
41989
  break;
41670
41990
  case "highlight": {
41671
41991
  const highlightValue = attrs.color ?? attrs.highlight ?? null;
41672
- const translated = translator$19.decode({ node: { attrs: { highlight: highlightValue } } });
41992
+ const translated = translator$1q.decode({ node: { attrs: { highlight: highlightValue } } });
41673
41993
  return translated || {};
41674
41994
  }
41675
41995
  case "link":
@@ -42048,6 +42368,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42048
42368
  this.fonts = params2?.fonts || {};
42049
42369
  this.addedMedia = {};
42050
42370
  this.comments = [];
42371
+ this.inlineDocumentFonts = [];
42051
42372
  this.docHiglightColors = /* @__PURE__ */ new Set([]);
42052
42373
  this.xml = params2?.xml;
42053
42374
  this.declaration = null;
@@ -42334,6 +42655,23 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42334
42655
  return result;
42335
42656
  }
42336
42657
  getDocumentFonts() {
42658
+ const inlineDocumentFonts = [...new Set(this.inlineDocumentFonts || [])];
42659
+ const fontTable = this.convertedXml["word/fontTable.xml"];
42660
+ if (!fontTable) {
42661
+ return inlineDocumentFonts;
42662
+ }
42663
+ const wFonts = fontTable.elements?.find((element) => element.name === "w:fonts");
42664
+ if (!wFonts) {
42665
+ return inlineDocumentFonts;
42666
+ }
42667
+ if (!wFonts.elements) {
42668
+ return inlineDocumentFonts;
42669
+ }
42670
+ const fontsInFontTable = wFonts.elements.filter((element) => element.name === "w:font").map((element) => element.attributes["w:name"]);
42671
+ const allFonts = [...inlineDocumentFonts, ...fontsInFontTable];
42672
+ return [...new Set(allFonts)];
42673
+ }
42674
+ getFontFaceImportString() {
42337
42675
  const fontTable = this.convertedXml["word/fontTable.xml"];
42338
42676
  if (!fontTable || !Object.keys(this.fonts).length) return;
42339
42677
  const fonts = fontTable.elements.find((el) => el.name === "w:fonts");
@@ -42347,6 +42685,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42347
42685
  const rels = this.convertedXml["word/_rels/fontTable.xml.rels"];
42348
42686
  const relationships = rels?.elements.find((el) => el.name === "Relationships") || {};
42349
42687
  const { elements } = relationships;
42688
+ const fontsImported = [];
42350
42689
  let styleString = "";
42351
42690
  for (const font of fontsToInclude) {
42352
42691
  const filePath = elements.find((el) => el.attributes.Id === font.attributes["r:id"])?.attributes?.Target;
@@ -42363,6 +42702,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42363
42702
  const isItalic = font.name.includes("Italic");
42364
42703
  const isLight = font.name.includes("Light");
42365
42704
  const fontWeight = isNormal ? "normal" : isBold ? "bold" : isLight ? "200" : "normal";
42705
+ if (!fontsImported.includes(font.fontFamily)) {
42706
+ fontsImported.push(font.fontFamily);
42707
+ }
42366
42708
  styleString += `
42367
42709
  @font-face {
42368
42710
  font-style: ${isItalic ? "italic" : "normal"};
@@ -42373,7 +42715,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42373
42715
  }
42374
42716
  `;
42375
42717
  }
42376
- return styleString;
42718
+ return {
42719
+ styleString,
42720
+ fontsImported
42721
+ };
42377
42722
  }
42378
42723
  getDocumentInternalId() {
42379
42724
  const settingsLocation = "word/settings.xml";
@@ -42428,6 +42773,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42428
42773
  this.numbering = result.numbering;
42429
42774
  this.comments = result.comments;
42430
42775
  this.linkedStyles = result.linkedStyles;
42776
+ this.inlineDocumentFonts = result.inlineDocumentFonts;
42431
42777
  return result.pmDoc;
42432
42778
  } else {
42433
42779
  return null;
@@ -45389,7 +45735,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
45389
45735
  var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
45390
45736
  var __privateSet = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value);
45391
45737
  var __privateMethod$1 = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method);
45392
- var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, registerPluginByNameIfNotExists_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, initPagination_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _DocumentSectionView_instances, init_fn2, addToolTip_fn, _ListItemNodeView_instances, init_fn3, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn;
45738
+ var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, registerPluginByNameIfNotExists_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, checkFonts_fn, determineUnsupportedFontsWithLocalFonts_fn, determineUnsupportedFontsWithCanvas_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, initPagination_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _DocumentSectionView_instances, init_fn2, addToolTip_fn, _ListItemNodeView_instances, init_fn3, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn;
45393
45739
  var GOOD_LEAF_SIZE = 200;
45394
45740
  var RopeSequence = function RopeSequence2() {
45395
45741
  };
@@ -58458,6 +58804,29 @@ Please report this to https://github.com/markedjs/marked.`, e) {
58458
58804
  }
58459
58805
  return false;
58460
58806
  };
58807
+ function canRenderFont(fontName, fallbackFont = "sans-serif") {
58808
+ const _canRenderFont = (fontName2, fallbackFont2) => {
58809
+ const canvas = document.createElement("canvas");
58810
+ const ctx2 = canvas.getContext("2d");
58811
+ ctx2.textBaseline = "top";
58812
+ const text = "abcdefghijklmnopqrstuvwxyz0123456789";
58813
+ ctx2.font = `72px ${fallbackFont2}`;
58814
+ const initialTextMeasurement = ctx2.measureText(text);
58815
+ const fallbackWidth = initialTextMeasurement.width;
58816
+ const fallbackHeight = initialTextMeasurement.actualBoundingBoxDescent;
58817
+ ctx2.font = `72px "${fontName2}", ${fallbackFont2}`;
58818
+ const customTextMeasurement = ctx2.measureText(text);
58819
+ const customFontWidth = customTextMeasurement.width;
58820
+ const customFontHeight = customTextMeasurement.actualBoundingBoxDescent;
58821
+ const isAvailable = customFontWidth !== fallbackWidth || customFontHeight !== fallbackHeight;
58822
+ return isAvailable;
58823
+ };
58824
+ if (_canRenderFont(fontName, fallbackFont)) {
58825
+ return true;
58826
+ }
58827
+ const oppositeFallbackFont = fallbackFont === "sans-serif" ? "serif" : "sans-serif";
58828
+ return _canRenderFont(fontName, oppositeFallbackFont);
58829
+ }
58461
58830
  const { findChildren: findChildren$3 } = helpers;
58462
58831
  function getAllFieldAnnotations(state2) {
58463
58832
  let fieldAnnotations = findChildren$3(state2.doc, (node) => node.type.name === "fieldAnnotation");
@@ -59507,6 +59876,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
59507
59876
  __publicField$1(this, "schema");
59508
59877
  __publicField$1(this, "view");
59509
59878
  __publicField$1(this, "isFocused", false);
59879
+ __publicField$1(this, "fontsImported", []);
59510
59880
  __publicField$1(this, "options", {
59511
59881
  element: null,
59512
59882
  selector: null,
@@ -59567,6 +59937,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
59567
59937
  onPaginationUpdate: () => null,
59568
59938
  onException: () => null,
59569
59939
  onListDefinitionsChange: () => null,
59940
+ onFontsResolved: null,
59570
59941
  // async (file) => url;
59571
59942
  handleImageUpload: null,
59572
59943
  // telemetry
@@ -60543,6 +60914,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
60543
60914
  this.emit("beforeCreate", { editor: this });
60544
60915
  this.on("contentError", this.options.onContentError);
60545
60916
  this.mount(this.options.element);
60917
+ if (!this.options.isHeadless) {
60918
+ __privateMethod$1(this, _Editor_instances, checkFonts_fn).call(this);
60919
+ }
60546
60920
  this.on("create", this.options.onCreate);
60547
60921
  this.on("update", this.options.onUpdate);
60548
60922
  this.on("selectionUpdate", this.options.onSelectionUpdate);
@@ -60690,13 +61064,74 @@ Please report this to https://github.com/markedjs/marked.`, e) {
60690
61064
  }
60691
61065
  };
60692
61066
  initFonts_fn = function() {
60693
- const styleString = this.converter.getDocumentFonts();
60694
- if (styleString?.length) {
61067
+ const results = this.converter.getFontFaceImportString();
61068
+ if (results?.styleString?.length) {
60695
61069
  const style2 = document.createElement("style");
60696
- style2.textContent = styleString;
61070
+ style2.textContent = results.styleString;
60697
61071
  document.head.appendChild(style2);
61072
+ this.fontsImported = results.fontsImported;
60698
61073
  }
60699
61074
  };
61075
+ checkFonts_fn = async function() {
61076
+ if (!this.options.onFontsResolved || typeof this.options.onFontsResolved !== "function") {
61077
+ return;
61078
+ }
61079
+ if (this.options.isHeadless) {
61080
+ return;
61081
+ }
61082
+ const fontsUsedInDocument = this.converter.getDocumentFonts();
61083
+ if (!("queryLocalFonts" in window)) {
61084
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61085
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61086
+ this.options.onFontsResolved({
61087
+ documentFonts: fontsUsedInDocument,
61088
+ unsupportedFonts
61089
+ });
61090
+ return;
61091
+ }
61092
+ const localFontAccess = await navigator.permissions.query({ name: "local-fonts" });
61093
+ if (localFontAccess.state === "denied") {
61094
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61095
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61096
+ this.options.onFontsResolved({
61097
+ documentFonts: fontsUsedInDocument,
61098
+ unsupportedFonts
61099
+ });
61100
+ return;
61101
+ }
61102
+ try {
61103
+ const localFonts = await window.queryLocalFonts();
61104
+ const uniqueLocalFonts = [...new Set(localFonts.map((font) => font.family))];
61105
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithLocalFonts_fn).call(this, fontsUsedInDocument, uniqueLocalFonts);
61106
+ this.options.onFontsResolved({
61107
+ documentFonts: fontsUsedInDocument,
61108
+ unsupportedFonts
61109
+ });
61110
+ } catch {
61111
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61112
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61113
+ this.options.onFontsResolved({
61114
+ documentFonts: fontsUsedInDocument,
61115
+ unsupportedFonts
61116
+ });
61117
+ }
61118
+ };
61119
+ determineUnsupportedFontsWithLocalFonts_fn = function(fonts, localFonts) {
61120
+ const unsupportedFonts = fonts.filter((font) => {
61121
+ const isLocalFont = localFonts.includes(font);
61122
+ const isFontImported = this.fontsImported.includes(font);
61123
+ return !isLocalFont && !isFontImported;
61124
+ });
61125
+ return unsupportedFonts;
61126
+ };
61127
+ determineUnsupportedFontsWithCanvas_fn = function(fonts) {
61128
+ const unsupportedFonts = fonts.filter((font) => {
61129
+ const canRender = canRenderFont(font);
61130
+ const isFontImported = this.fontsImported.includes(font);
61131
+ return !canRender && !isFontImported;
61132
+ });
61133
+ return unsupportedFonts;
61134
+ };
60700
61135
  createSchema_fn = function() {
60701
61136
  this.schema = this.extensionService.schema;
60702
61137
  };
@@ -69453,6 +69888,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
69453
69888
  widthUnit: {
69454
69889
  default: "px",
69455
69890
  rendered: false
69891
+ },
69892
+ /**
69893
+ * @category Attribute
69894
+ * @param {TableCellProperties} tableCellProperties - Properties for the table cell.
69895
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 463
69896
+ */
69897
+ tableCellProperties: {
69898
+ default: null,
69899
+ rendered: false
69456
69900
  }
69457
69901
  };
69458
69902
  },
@@ -71612,6 +72056,58 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71612
72056
  }
71613
72057
  });
71614
72058
  };
72059
+ const normalizeWrap = (attrs = {}) => {
72060
+ const wrap2 = attrs.wrap;
72061
+ if (wrap2?.type && wrap2.type !== "Inline") {
72062
+ return {
72063
+ type: wrap2.type,
72064
+ attrs: wrap2.attrs ?? {}
72065
+ };
72066
+ }
72067
+ if (wrap2?.type === "Inline" && Object.keys(wrap2.attrs ?? {}).length) {
72068
+ return {
72069
+ type: "Inline",
72070
+ attrs: wrap2.attrs
72071
+ };
72072
+ }
72073
+ if (!wrap2 && attrs.wrapText) {
72074
+ return {
72075
+ type: "Square",
72076
+ attrs: {
72077
+ wrapText: attrs.wrapText
72078
+ }
72079
+ };
72080
+ }
72081
+ if (!wrap2 && attrs.wrapTopAndBottom) {
72082
+ return {
72083
+ type: "TopAndBottom",
72084
+ attrs: {}
72085
+ };
72086
+ }
72087
+ if (wrap2?.type === "Inline") {
72088
+ return {
72089
+ type: "Inline",
72090
+ attrs: wrap2.attrs ?? {}
72091
+ };
72092
+ }
72093
+ return {
72094
+ type: "Inline",
72095
+ attrs: {}
72096
+ };
72097
+ };
72098
+ const normalizeMarginOffset = (marginOffset = {}) => {
72099
+ const { left: left2, horizontal, ...rest } = marginOffset;
72100
+ return {
72101
+ ...rest,
72102
+ horizontal: horizontal ?? left2
72103
+ };
72104
+ };
72105
+ const getNormalizedImageAttrs = (attrs = {}) => {
72106
+ return {
72107
+ wrap: normalizeWrap(attrs),
72108
+ marginOffset: normalizeMarginOffset(attrs.marginOffset ?? {})
72109
+ };
72110
+ };
71615
72111
  const ImagePositionPluginKey = new PluginKey("ImagePosition");
71616
72112
  const ImagePositionPlugin = ({ editor }) => {
71617
72113
  const { view } = editor;
@@ -71659,7 +72155,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71659
72155
  let style2 = "";
71660
72156
  let className = "";
71661
72157
  const { vRelativeFrom, alignH } = node.attrs.anchorData;
71662
- const { size: size2, padding, marginOffset } = node.attrs;
72158
+ const { size: size2, padding } = node.attrs;
72159
+ const { marginOffset } = getNormalizedImageAttrs(node.attrs);
71663
72160
  const pageBreak = findPreviousDomNodeWithClass(view, pos, "pagination-break-wrapper");
71664
72161
  if (pageBreak) {
71665
72162
  switch (alignH) {
@@ -71776,7 +72273,24 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71776
72273
  rendered: false
71777
72274
  },
71778
72275
  originalAttributes: { rendered: false },
71779
- wrapTopAndBottom: { rendered: false },
72276
+ /**
72277
+ * @category Attribute
72278
+ * @param {Object} wrap - Wrapping options
72279
+ * @param {string} wrap.type - Wrap type: "None", "Square", "Through", "Tight", "TopAndBottom", "Inline"
72280
+ * @param {Object} [wrap.attrs] - Wrap attributes (only allowed attributes for the given type will be accepted)
72281
+ * @param {string} [wrap.attrs.wrapText] - Text wrapping mode for Square type: "bothSides", "largest", "left", "right"
72282
+ * @param {number} [wrap.attrs.distTop] - Top distance in pixels
72283
+ * @param {number} [wrap.attrs.distBottom] - Bottom distance in pixels
72284
+ * @param {number} [wrap.attrs.distLeft] - Left distance in pixels
72285
+ * @param {number} [wrap.attrs.distRight] - Right distance in pixels
72286
+ * @param {Array} [wrap.attrs.polygon] - Polygon points for Through/Tight types: [[x1,y1], [x2,y2], ...]
72287
+ * @param {boolean} [wrap.attrs.behindDoc] - Whether image should be behind document text (for wrapNone)
72288
+ */
72289
+ wrap: {
72290
+ default: { type: "Inline" },
72291
+ rendered: false
72292
+ // Handled in main renderDOM
72293
+ },
71780
72294
  anchorData: {
71781
72295
  default: null,
71782
72296
  rendered: false
@@ -71822,7 +72336,6 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71822
72336
  * @private
71823
72337
  */
71824
72338
  simplePos: { rendered: false },
71825
- wrapText: { rendered: false },
71826
72339
  extension: { rendered: false },
71827
72340
  size: {
71828
72341
  default: {},
@@ -71838,55 +72351,13 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71838
72351
  },
71839
72352
  padding: {
71840
72353
  default: {},
71841
- renderDOM: ({ size: size2 = {}, padding, marginOffset, transformData = {} }) => {
71842
- let { left: left2 = 0, top: top2 = 0, bottom: bottom2 = 0, right: right2 = 0 } = padding ?? {};
71843
- const { rotation } = transformData;
71844
- const { height, width } = size2;
71845
- if (rotation && height && width) {
71846
- const { horizontal, vertical } = getRotationMargins(width, height, rotation);
71847
- left2 += horizontal;
71848
- right2 += horizontal;
71849
- top2 += vertical;
71850
- bottom2 += vertical;
71851
- }
71852
- let style2 = "";
71853
- if (left2 && marginOffset?.left == null) style2 += `margin-left: ${left2}px;`;
71854
- if (top2 && marginOffset?.top == null) style2 += `margin-top: ${top2}px;`;
71855
- if (bottom2) style2 += `margin-bottom: ${bottom2}px;`;
71856
- if (right2) style2 += `margin-right: ${right2}px;`;
71857
- return { style: style2 };
71858
- }
72354
+ rendered: false
72355
+ // Handled in main renderDOM
71859
72356
  },
71860
72357
  marginOffset: {
71861
72358
  default: {},
71862
- renderDOM: ({ marginOffset, anchorData, transformData, size: size2 }) => {
71863
- const hasAnchorData = Boolean(anchorData);
71864
- const hasMarginOffsets = marginOffset?.left != null || marginOffset?.top != null;
71865
- if (!hasAnchorData && !hasMarginOffsets) return {};
71866
- const relativeFromPageV = anchorData?.vRelativeFrom === "page";
71867
- const maxMarginV = 500;
71868
- const baseLeft = marginOffset?.left ?? 0;
71869
- const baseTop = marginOffset?.top ?? 0;
71870
- let rotationLeft = 0;
71871
- let rotationTop = 0;
71872
- const { rotation } = transformData ?? {};
71873
- const { height, width } = size2 ?? {};
71874
- if (rotation && height && width) {
71875
- const { horizontal, vertical } = getRotationMargins(width, height, rotation);
71876
- rotationLeft = horizontal;
71877
- rotationTop = vertical;
71878
- }
71879
- const left2 = baseLeft + rotationLeft;
71880
- const top2 = baseTop + rotationTop;
71881
- let style2 = "";
71882
- if (left2) style2 += `margin-left: ${left2}px;`;
71883
- if (top2) {
71884
- if (relativeFromPageV && top2 >= maxMarginV) style2 += `margin-top: ${maxMarginV}px;`;
71885
- else style2 += `margin-top: ${top2}px;`;
71886
- }
71887
- if (!style2) return {};
71888
- return { style: style2 };
71889
- }
72359
+ rendered: false
72360
+ // Handled in main renderDOM
71890
72361
  },
71891
72362
  style: {
71892
72363
  default: null,
@@ -71905,8 +72376,181 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71905
72376
  }
71906
72377
  ];
71907
72378
  },
71908
- renderDOM({ htmlAttributes }) {
71909
- return ["img", Attribute.mergeAttributes(this.options.htmlAttributes, htmlAttributes)];
72379
+ renderDOM({ node, htmlAttributes }) {
72380
+ const { wrap: wrap2, marginOffset } = getNormalizedImageAttrs(node.attrs);
72381
+ const { anchorData, padding, transformData = {}, size: size2 = { width: 0, height: 0 } } = node.attrs;
72382
+ const margin = {
72383
+ left: 0,
72384
+ right: 0,
72385
+ top: 0,
72386
+ bottom: 0
72387
+ };
72388
+ let centered = false;
72389
+ let floatRight = false;
72390
+ let baseHorizontal = marginOffset?.horizontal || 0;
72391
+ let style2 = "";
72392
+ if (padding) {
72393
+ if (padding.left) margin.left += padding.left;
72394
+ if (padding.right) margin.right += padding.right;
72395
+ if (padding.top) margin.top += padding.top;
72396
+ if (padding.bottom) margin.bottom += padding.bottom;
72397
+ }
72398
+ const { rotation } = transformData;
72399
+ const { height, width } = size2;
72400
+ if (rotation && height && width) {
72401
+ const { horizontal, vertical } = getRotationMargins(width, height, rotation);
72402
+ margin.left += horizontal;
72403
+ margin.right += horizontal;
72404
+ margin.top += vertical;
72405
+ margin.bottom += vertical;
72406
+ }
72407
+ if (wrap2 && wrap2.type) {
72408
+ const { type: type2, attrs = {} } = wrap2;
72409
+ switch (type2) {
72410
+ case "None":
72411
+ style2 += "position: absolute;";
72412
+ if (attrs.behindDoc) {
72413
+ style2 += "z-index: -1;";
72414
+ } else {
72415
+ style2 += "z-index: 1;";
72416
+ }
72417
+ break;
72418
+ case "Square":
72419
+ style2 += "shape-outside: border-box; clear: both;";
72420
+ if (attrs.wrapText === "right") {
72421
+ style2 += "float: left;";
72422
+ } else if (attrs.wrapText === "left") {
72423
+ style2 += "float: right;";
72424
+ floatRight = true;
72425
+ } else if (["largest", "bothSides"].includes(attrs.wrapText)) {
72426
+ const pageStyles2 = this.editor?.converter?.pageStyles;
72427
+ if (pageStyles2?.pageSize && pageStyles2?.pageMargins && size2.width) {
72428
+ const pageWidth = inchesToPixels(pageStyles2.pageSize.width);
72429
+ const leftMargin = inchesToPixels(pageStyles2.pageMargins.left);
72430
+ const rightMargin = inchesToPixels(pageStyles2.pageMargins.right);
72431
+ const contentWidth = pageWidth - leftMargin - rightMargin;
72432
+ const imageWidth = size2.width + (attrs.distLeft || 0) + (attrs.distRight || 0);
72433
+ const leftSpace = marginOffset.horizontal;
72434
+ const rightSpace = contentWidth - leftSpace - imageWidth;
72435
+ if (rightSpace < 0) {
72436
+ style2 += "float: left;";
72437
+ } else if (rightSpace > leftSpace) {
72438
+ style2 += "float: left;";
72439
+ } else {
72440
+ style2 += "float: right;";
72441
+ floatRight = true;
72442
+ baseHorizontal = rightSpace;
72443
+ }
72444
+ } else {
72445
+ style2 += "float: left;";
72446
+ }
72447
+ }
72448
+ if (attrs.distTop) margin.top += attrs.distTop;
72449
+ if (attrs.distBottom) margin.bottom += attrs.distBottom;
72450
+ if (attrs.distLeft) margin.left += attrs.distLeft;
72451
+ if (attrs.distRight) margin.right += attrs.distRight;
72452
+ break;
72453
+ case "Through":
72454
+ case "Tight":
72455
+ style2 += "clear: both;";
72456
+ const pageStyles = this.editor?.converter?.pageStyles;
72457
+ if (pageStyles?.pageSize && pageStyles?.pageMargins && size2.width) {
72458
+ const pageWidth = inchesToPixels(pageStyles.pageSize.width);
72459
+ const leftMargin = inchesToPixels(pageStyles.pageMargins.left);
72460
+ const rightMargin = inchesToPixels(pageStyles.pageMargins.right);
72461
+ const contentWidth = pageWidth - leftMargin - rightMargin;
72462
+ const imageWidth = size2.width + (attrs.distLeft || 0) + (attrs.distRight || 0);
72463
+ const leftSpace = marginOffset.horizontal;
72464
+ const rightSpace = contentWidth - leftSpace - imageWidth;
72465
+ if (rightSpace < 0) {
72466
+ style2 += "float: left;";
72467
+ } else if (rightSpace > leftSpace) {
72468
+ style2 += "float: left;";
72469
+ } else {
72470
+ style2 += "float: right;";
72471
+ floatRight = true;
72472
+ baseHorizontal = rightSpace;
72473
+ }
72474
+ } else {
72475
+ style2 += "float: left;";
72476
+ }
72477
+ if (attrs.distTop) margin.top += attrs.distTop;
72478
+ if (attrs.distBottom) margin.bottom += attrs.distBottom;
72479
+ if (attrs.distLeft) margin.left += attrs.distLeft;
72480
+ if (attrs.distRight) margin.right += attrs.distRight;
72481
+ if (attrs.polygon) {
72482
+ let horizontalOffset = floatRight ? attrs.polygon[0][0] || 0 : marginOffset.horizontal + 15;
72483
+ let maxX = 0;
72484
+ let minX = 0;
72485
+ let minY = 0;
72486
+ let maxY = 0;
72487
+ attrs.polygon.forEach(([x, y2]) => {
72488
+ if (floatRight && x < horizontalOffset) horizontalOffset = x;
72489
+ if (x > maxX) maxX = x;
72490
+ if (x < minX) minX = x;
72491
+ if (y2 > maxY) maxY = y2;
72492
+ if (y2 < minY) minY = y2;
72493
+ });
72494
+ const originalWidth = maxX - minX;
72495
+ const originalHeight = maxY - minY;
72496
+ const scaleWidth = Math.min(1, size2.width / originalWidth);
72497
+ const scaleHeight = Math.min(1, size2.height / originalHeight);
72498
+ const verticalOffset = Math.max(0, marginOffset.top);
72499
+ const points = attrs.polygon.map(([x, y2]) => `${horizontalOffset + x * scaleWidth}px ${verticalOffset + y2 * scaleHeight}px`).join(", ");
72500
+ style2 += `shape-outside: polygon(${points});`;
72501
+ }
72502
+ break;
72503
+ case "TopAndBottom":
72504
+ style2 += "display: block; clear: both;";
72505
+ if (attrs.distTop) margin.top += attrs.distTop;
72506
+ if (attrs.distBottom) margin.bottom += attrs.distBottom;
72507
+ centered = true;
72508
+ break;
72509
+ }
72510
+ }
72511
+ const hasAnchorData = Boolean(anchorData);
72512
+ const hasMarginOffsets = marginOffset?.horizontal != null || marginOffset?.top != null;
72513
+ if (hasAnchorData || hasMarginOffsets) {
72514
+ const relativeFromPageV = anchorData?.vRelativeFrom === "page";
72515
+ const maxMarginV = 500;
72516
+ const baseTop = Math.max(0, marginOffset?.top ?? 0);
72517
+ let rotationHorizontal = 0;
72518
+ let rotationTop = 0;
72519
+ const { rotation: rotation2 } = transformData ?? {};
72520
+ const { height: height2, width: width2 } = size2 ?? {};
72521
+ if (rotation2 && height2 && width2) {
72522
+ const { horizontal: horizontal2, vertical } = getRotationMargins(width2, height2, rotation2);
72523
+ rotationHorizontal = horizontal2;
72524
+ rotationTop = vertical;
72525
+ }
72526
+ const horizontal = baseHorizontal + rotationHorizontal;
72527
+ const top2 = baseTop + rotationTop;
72528
+ if (horizontal) {
72529
+ if (floatRight) {
72530
+ margin.right += horizontal;
72531
+ } else {
72532
+ margin.left += horizontal;
72533
+ }
72534
+ }
72535
+ if (top2) {
72536
+ if (relativeFromPageV && top2 >= maxMarginV) margin.top += maxMarginV;
72537
+ else margin.top += top2;
72538
+ }
72539
+ }
72540
+ if (centered) {
72541
+ style2 += "margin-left: auto; margin-right: auto;";
72542
+ } else {
72543
+ if (margin.left) style2 += `margin-left: ${margin.left}px;`;
72544
+ if (margin.right) style2 += `margin-right: ${margin.right}px;`;
72545
+ }
72546
+ if (margin.top) style2 += `margin-top: ${margin.top}px;`;
72547
+ if (margin.bottom) style2 += `margin-bottom: ${margin.bottom}px;`;
72548
+ const finalAttributes = { ...htmlAttributes };
72549
+ if (style2) {
72550
+ const existingStyle = finalAttributes.style || "";
72551
+ finalAttributes.style = existingStyle + (existingStyle ? " " : "") + style2;
72552
+ }
72553
+ return ["img", Attribute.mergeAttributes(this.options.htmlAttributes, finalAttributes)];
71910
72554
  },
71911
72555
  addCommands() {
71912
72556
  return {
@@ -71928,6 +72572,85 @@ Please report this to https://github.com/markedjs/marked.`, e) {
71928
72572
  type: this.name,
71929
72573
  attrs: options
71930
72574
  });
72575
+ },
72576
+ /**
72577
+ * Set the wrapping mode and attributes for the selected image
72578
+ * @category Command
72579
+ * @param {Object} options - Wrapping options
72580
+ * @param {string} options.type - Wrap type: "None", "Square", "Through", "Tight", "TopAndBottom", "Inline"
72581
+ * @param {Object} [options.attrs] - Wrap attributes (only allowed attributes for the given type will be accepted)
72582
+ * @param {string} [options.attrs.wrapText] - Text wrapping mode for Square type: "bothSides", "largest", "left", "right"
72583
+ * @param {number} [options.attrs.distTop] - Top distance in pixels
72584
+ * @param {number} [options.attrs.distBottom] - Bottom distance in pixels
72585
+ * @param {number} [options.attrs.distLeft] - Left distance in pixels
72586
+ * @param {number} [options.attrs.distRight] - Right distance in pixels
72587
+ * @param {Array} [options.attrs.polygon] - Polygon points for Through/Tight types: [[x1,y1], [x2,y2], ...]
72588
+ * @param {boolean} [options.attrs.behindDoc] - Whether image should be behind document text (for wrapNone)
72589
+ * @example
72590
+ * // No wrapping, behind document
72591
+ * editor.commands.setWrapping({ type: 'None', attrs: {behindDoc: true} })
72592
+ *
72593
+ * // Square wrapping on both sides with distances
72594
+ * editor.commands.setWrapping({
72595
+ * type: 'Square',
72596
+ * attrs: {
72597
+ * wrapText: 'bothSides',
72598
+ * distTop: 10,
72599
+ * distBottom: 10,
72600
+ * distLeft: 10,
72601
+ * distRight: 10
72602
+ * }
72603
+ * })
72604
+ *
72605
+ * // Tight wrapping with polygon
72606
+ * editor.commands.setWrapping({
72607
+ * type: 'Tight',
72608
+ * attrs: {
72609
+ * polygon: [[0, 0], [100, 0], [100, 100], [0, 100]]
72610
+ * }
72611
+ * })
72612
+ *
72613
+ * // Top and bottom wrapping
72614
+ * editor.commands.setWrapping({
72615
+ * type: 'TopAndBottom',
72616
+ * attrs: {
72617
+ * distTop: 15,
72618
+ * distBottom: 15
72619
+ * }
72620
+ * })
72621
+ */
72622
+ setWrapping: (options) => ({ chain, state: state2 }) => {
72623
+ const { selection } = state2;
72624
+ const { $from } = selection;
72625
+ const node = $from.nodeAfter;
72626
+ if (!node || node.type.name !== this.name) {
72627
+ return false;
72628
+ }
72629
+ const { type: type2, attrs = {} } = options;
72630
+ const allowedAttrs = {};
72631
+ const allowedAttributes = {
72632
+ None: ["behindDoc"],
72633
+ Square: ["wrapText", "distTop", "distBottom", "distLeft", "distRight"],
72634
+ Through: ["distTop", "distBottom", "distLeft", "distRight", "polygon"],
72635
+ Tight: ["distTop", "distBottom", "distLeft", "distRight", "polygon"],
72636
+ TopAndBottom: ["distTop", "distBottom"],
72637
+ Inline: []
72638
+ };
72639
+ const allowedForType = allowedAttributes[type2] || [];
72640
+ Object.keys(attrs).forEach((key2) => {
72641
+ if (allowedForType.includes(key2)) {
72642
+ allowedAttrs[key2] = attrs[key2];
72643
+ }
72644
+ });
72645
+ const updatedAttrs = {
72646
+ ...node.attrs,
72647
+ wrap: {
72648
+ type: type2,
72649
+ attrs: allowedAttrs
72650
+ },
72651
+ isAnchor: type2 !== "Inline"
72652
+ };
72653
+ return chain().updateAttributes(this.name, updatedAttrs).run();
71931
72654
  }
71932
72655
  };
71933
72656
  },
@@ -94883,7 +95606,7 @@ ${style2}
94883
95606
  }
94884
95607
  };
94885
95608
  const GenericPopover = /* @__PURE__ */ _export_sfc$1(_sfc_main$2$1, [["__scopeId", "data-v-cbddcc0f"]]);
94886
- const BlankDOCX$1 = "data:application/octet-stream;base64,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";
95609
+ const BlankDOCX$1 = "data:application/octet-stream;base64,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";
94887
95610
  const _hoisted_1$1$1 = { class: "super-editor-container" };
94888
95611
  const _hoisted_2$a = {
94889
95612
  key: 1,
@@ -95276,74 +95999,89 @@ ${style2}
95276
95999
  const SuperInput = /* @__PURE__ */ _export_sfc$1(_sfc_main$i, [["__scopeId", "data-v-4d5cff52"]]);
95277
96000
  const additionalHandlers = Object.freeze({
95278
96001
  "mc:AlternateContent": translator$1,
95279
- "sd:pageReference": translator$3,
95280
- "sd:tableOfContents": translator$2,
95281
- "w:b": translator$16,
95282
- "w:bidiVisual": translator$H,
95283
- "w:bookmarkEnd": translator$4,
95284
- "w:bookmarkStart": translator$5,
95285
- "w:bottom": translator$u,
95286
- "w:br": translator$1a,
95287
- "w:cantSplit": translator$V,
95288
- "w:cnfStyle": translator$U,
95289
- "w:color": translator$12,
95290
- "w:divId": translator$T,
95291
- "w:drawing": translator$7,
95292
- "w:end": translator$s,
95293
- "w:gridAfter": translator$S,
95294
- "w:gridBefore": translator$R,
95295
- "w:gridCol": translator$d,
95296
- "w:hidden": translator$Q,
95297
- "w:highlight": translator$19,
95298
- "w:hyperlink": translator$X,
95299
- "w:i": translator$15,
95300
- "w:insideH": translator$q,
95301
- "w:insideV": translator$p,
95302
- "w:jc": translator$P,
95303
- "w:left": translator$o,
95304
- "w:p": translator$17,
95305
- "w:r": translator$W,
95306
- "w:rFonts": translator$11,
95307
- "w:rPr": translator$Y,
95308
- "w:rStyle": translator$10,
95309
- "w:right": translator$m,
95310
- "w:sdt": translator$6,
95311
- "w:shd": translator$G,
95312
- "w:start": translator$k,
95313
- "w:strike": translator$13,
95314
- "w:sz": translator$$,
95315
- "w:szCs": translator$_,
95316
- "w:tab": translator$18,
95317
- "w:tbl": translator$b,
95318
- "w:tblBorders": translator$g,
95319
- "w:tblCaption": translator$F,
95320
- "w:tblCellMar": translator$f,
95321
- "w:tblCellSpacing": translator$O,
95322
- "w:tblDescription": translator$E,
95323
- "w:tblGrid": translator$c,
95324
- "w:tblHeader": translator$N,
95325
- "w:tblInd": translator$D,
95326
- "w:tblLayout": translator$C,
95327
- "w:tblLook": translator$B,
95328
- "w:tblOverlap": translator$A,
95329
- "w:tblPr": translator$e,
95330
- "w:tblStyle": translator$z,
95331
- "w:tblStyleColBandSize": translator$y,
95332
- "w:tblStyleRowBandSize": translator$x,
95333
- "w:tblW": translator$w,
95334
- "w:tblpPr": translator$v,
95335
- "w:tc": translator$a,
95336
- "w:top": translator$i,
95337
- "w:tr": translator$I,
95338
- "w:trHeight": translator$M,
95339
- "w:trPr": translator$J,
95340
- "w:u": translator$14,
95341
- "w:wAfter": translator$L,
95342
- "w:wBefore": translator$K,
95343
- "wp:anchor": translator$9,
95344
- "wp:inline": translator$8,
96002
+ "sd:pageReference": translator$5,
96003
+ "sd:tableOfContents": translator$4,
96004
+ "w:b": translator$1n,
96005
+ "w:bidiVisual": translator$Y,
96006
+ "w:bookmarkEnd": translator$6,
96007
+ "w:bookmarkStart": translator$7,
96008
+ "w:bottom": translator$L,
96009
+ "w:br": translator$1r,
96010
+ "w:cantSplit": translator$1a,
96011
+ "w:cnfStyle": translator$19,
96012
+ "w:color": translator$1j,
96013
+ "w:divId": translator$18,
96014
+ "w:drawing": translator$9,
96015
+ "w:end": translator$J,
96016
+ "w:gridAfter": translator$17,
96017
+ "w:gridBefore": translator$16,
96018
+ "w:gridCol": translator$u,
96019
+ "w:hidden": translator$15,
96020
+ "w:highlight": translator$1q,
96021
+ "w:hyperlink": translator$1c,
96022
+ "w:i": translator$1m,
96023
+ "w:insideH": translator$H,
96024
+ "w:insideV": translator$G,
96025
+ "w:jc": translator$14,
96026
+ "w:left": translator$F,
96027
+ "w:p": translator$1o,
96028
+ "w:r": translator$1b,
96029
+ "w:rFonts": translator$1i,
96030
+ "w:rPr": translator$1d,
96031
+ "w:rStyle": translator$1h,
96032
+ "w:right": translator$D,
96033
+ "w:sdt": translator$8,
96034
+ "w:shd": translator$X,
96035
+ "w:start": translator$B,
96036
+ "w:strike": translator$1k,
96037
+ "w:sz": translator$1g,
96038
+ "w:szCs": translator$1f,
96039
+ "w:tab": translator$1p,
96040
+ "w:tbl": translator$s,
96041
+ "w:tblBorders": translator$x,
96042
+ "w:tblCaption": translator$W,
96043
+ "w:tblCellMar": translator$w,
96044
+ "w:tblCellSpacing": translator$13,
96045
+ "w:tblDescription": translator$V,
96046
+ "w:tblGrid": translator$t,
96047
+ "w:tblHeader": translator$12,
96048
+ "w:tblInd": translator$U,
96049
+ "w:tblLayout": translator$T,
96050
+ "w:tblLook": translator$S,
96051
+ "w:tblOverlap": translator$R,
96052
+ "w:tblPr": translator$v,
96053
+ "w:tblStyle": translator$Q,
96054
+ "w:tblStyleColBandSize": translator$P,
96055
+ "w:tblStyleRowBandSize": translator$O,
96056
+ "w:tblW": translator$N,
96057
+ "w:tblpPr": translator$M,
96058
+ "w:tc": translator$c,
96059
+ "w:top": translator$z,
96060
+ "w:tr": translator$Z,
96061
+ "w:trHeight": translator$11,
96062
+ "w:trPr": translator$_,
96063
+ "w:u": translator$1l,
96064
+ "w:wAfter": translator$10,
96065
+ "w:wBefore": translator$$,
96066
+ "wp:anchor": translator$b,
96067
+ "wp:inline": translator$a,
95345
96068
  "w:commentRangeStart": commentRangeStartTranslator,
95346
- "w:commentRangeEnd": commentRangeEndTranslator
96069
+ "w:commentRangeEnd": commentRangeEndTranslator,
96070
+ "w:vMerge": translator$p,
96071
+ "w:gridSpan": translator$q,
96072
+ "w:vAlign": translator$h,
96073
+ "w:noWrap": translator$l,
96074
+ "w:tcFitText": translator$i,
96075
+ "w:tcW": translator$r,
96076
+ "w:hideMark": translator$g,
96077
+ "w:textDirection": translator$j,
96078
+ "w:tl2br": translator$o,
96079
+ "w:tr2bl": translator$n,
96080
+ "w:header": translator$f,
96081
+ "w:headers": translator$e,
96082
+ "w:tcBorders": translator$m,
96083
+ "w:tcMar": translator$k,
96084
+ "w:tcPr": translator$d
95347
96085
  });
95348
96086
  const baseHandlers = {
95349
96087
  ...runPropertyTranslators,
@@ -95690,7 +96428,7 @@ ${style2}
95690
96428
  this.errors = [];
95691
96429
  }
95692
96430
  }
95693
- const BlankDOCX = "data:application/octet-stream;base64,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";
96431
+ const BlankDOCX = "data:application/octet-stream;base64,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";
95694
96432
  function getDefaultExportFromCjs(x) {
95695
96433
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
95696
96434
  }
@@ -111890,6 +112628,9 @@ ${style2}
111890
112628
  const onEditorListdefinitionsChange = (params2) => {
111891
112629
  proxy.$superdoc.emit("list-definitions-change", params2);
111892
112630
  };
112631
+ const onFontsResolved = (params2) => {
112632
+ proxy.$superdoc.emit("fonts-resolved", params2);
112633
+ };
111893
112634
  const editorOptions = (doc2) => {
111894
112635
  const options = {
111895
112636
  isDebug: proxy.$superdoc.config.isDebug || false,
@@ -111922,6 +112663,7 @@ ${style2}
111922
112663
  onCommentsUpdate: onEditorCommentsUpdate,
111923
112664
  onCommentLocationsUpdate: onEditorCommentLocationsUpdate,
111924
112665
  onListDefinitionsChange: onEditorListdefinitionsChange,
112666
+ onFontsResolved: proxy?.$superdoc?.config?.onFontsResolved ? onFontsResolved : null,
111925
112667
  onTransaction: onEditorTransaction,
111926
112668
  ydoc: doc2.ydoc,
111927
112669
  collaborationProvider: doc2.provider || null,
@@ -112300,7 +113042,7 @@ ${style2}
112300
113042
  };
112301
113043
  }
112302
113044
  };
112303
- const App = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-96983cf9"]]);
113045
+ const App = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-6de7ff3a"]]);
112304
113046
  const createSuperdocVueApp = () => {
112305
113047
  const app = createApp(App);
112306
113048
  const pinia = createPinia();
@@ -112381,6 +113123,7 @@ ${style2}
112381
113123
  onException: () => null,
112382
113124
  onListDefinitionsChange: () => null,
112383
113125
  onTransaction: () => null,
113126
+ onFontsResolved: null,
112384
113127
  // Image upload handler
112385
113128
  // async (file) => url;
112386
113129
  handleImageUpload: null,
@@ -112555,6 +113298,9 @@ ${style2}
112555
113298
  this.on("content-error", this.onContentError);
112556
113299
  this.on("exception", this.config.onException);
112557
113300
  this.on("list-definitions-change", this.config.onListDefinitionsChange);
113301
+ if (this.config.onFontsResolved) {
113302
+ this.on("fonts-resolved", this.config.onFontsResolved);
113303
+ }
112558
113304
  }
112559
113305
  /**
112560
113306
  * Initialize collaboration if configured