@harbour-enterprises/superdoc 0.24.0-next.3 → 0.24.0-next.5

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 (77) hide show
  1. package/dist/chunks/{PdfViewer-skWUtg2N.cjs → PdfViewer-D6AmuQ3v.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-DEWI6Uts.es.js → PdfViewer-XhwjWR8o.es.js} +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-2QL0aZ2S.cjs → index-DAdhqIN8.cjs} +76 -12
  6. package/dist/chunks/{index-C_AMhrHP.es.js → index-OjiyjDUm.es.js} +76 -12
  7. package/dist/chunks/{super-editor.es-CfK_qBM9.cjs → super-editor.es-BPK2gF1W.cjs} +1489 -986
  8. package/dist/chunks/{super-editor.es-iMAoOYOw.es.js → super-editor.es-bHlpz8m_.es.js} +1489 -986
  9. package/dist/core/SuperDoc.d.ts.map +1 -1
  10. package/dist/core/helpers/export.d.ts +1 -1
  11. package/dist/core/helpers/export.d.ts.map +1 -1
  12. package/dist/core/types/index.d.ts.map +1 -1
  13. package/dist/style.css +37 -27
  14. package/dist/super-editor/ai-writer.es.js +2 -2
  15. package/dist/super-editor/chunks/{converter-BueCftlx.js → converter-D-9mYZ83.js} +1247 -967
  16. package/dist/super-editor/chunks/{docx-zipper-C9jmfWYZ.js → docx-zipper-C1p3F7Ok.js} +1 -1
  17. package/dist/super-editor/chunks/{editor-BsuNqVvp.js → editor-lJoa5ADp.js} +292 -47
  18. package/dist/super-editor/chunks/{toolbar-DxhfgAoa.js → toolbar-B5-QnQ4l.js} +2 -2
  19. package/dist/super-editor/converter.es.js +1 -1
  20. package/dist/super-editor/docx-zipper.es.js +2 -2
  21. package/dist/super-editor/editor.es.js +3 -3
  22. package/dist/super-editor/file-zipper.es.js +1 -1
  23. package/dist/super-editor/style.css +10 -0
  24. package/dist/super-editor/super-editor/src/core/Editor.d.ts +11 -0
  25. package/dist/super-editor/super-editor/src/core/helpers/canRenderFont.d.ts +12 -0
  26. package/dist/super-editor/super-editor/src/core/super-converter/SuperConverter.d.ts +6 -1
  27. package/dist/super-editor/super-editor/src/core/super-converter/helpers.d.ts +2 -1
  28. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/docxImporter.d.ts +2 -1
  29. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/tableImporter.d.ts +5 -3
  30. package/dist/super-editor/super-editor/src/core/super-converter/v2/importer/types/index.d.ts +4 -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/gridSpan/gridSpan-translator.d.ts +6 -0
  33. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/gridSpan/index.d.ts +1 -0
  34. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/header/header-translator.d.ts +6 -0
  35. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/header/index.d.ts +1 -0
  36. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/headers/headers-translator.d.ts +7 -0
  37. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/headers/index.d.ts +1 -0
  38. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/hideMark/hideMark-translator.d.ts +6 -0
  39. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/hideMark/index.d.ts +1 -0
  40. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/noWrap/index.d.ts +1 -0
  41. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/noWrap/noWrap-translator.d.ts +6 -0
  42. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/shd/shd-translator.d.ts +1 -1
  43. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tc/helpers/translate-table-cell.d.ts +0 -5
  44. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/index.d.ts +1 -0
  45. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.d.ts +6 -0
  46. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcFitText/index.d.ts +1 -0
  47. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcFitText/tcFitText-translator.d.ts +6 -0
  48. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcMar/index.d.ts +1 -0
  49. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.d.ts +6 -0
  50. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcPr/index.d.ts +1 -0
  51. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.d.ts +5 -0
  52. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcW/index.d.ts +1 -0
  53. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tcW/tcW-translator.d.ts +6 -0
  54. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/textDirection/index.d.ts +1 -0
  55. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/textDirection/textDirection-translator.d.ts +6 -0
  56. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tl2br/index.d.ts +1 -0
  57. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tl2br/tl2br-translator.d.ts +6 -0
  58. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tr/tr-helpers.d.ts +16 -0
  59. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tr2bl/index.d.ts +1 -0
  60. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/tr2bl/tr2bl-translator.d.ts +6 -0
  61. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vAlign/index.d.ts +1 -0
  62. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vAlign/vAlign-translator.d.ts +6 -0
  63. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vMerge/index.d.ts +1 -0
  64. package/dist/super-editor/super-editor/src/core/super-converter/v3/handlers/w/vMerge/vMerge-translator.d.ts +6 -0
  65. package/dist/super-editor/super-editor/src/extensions/table/TableView.d.ts +1 -1
  66. package/dist/super-editor/super-editor/src/extensions/table-cell/table-cell.d.ts +112 -0
  67. package/dist/super-editor/super-editor.es.js +91 -76
  68. package/dist/super-editor/toolbar.es.js +2 -2
  69. package/dist/super-editor.cjs +1 -1
  70. package/dist/super-editor.es.js +1 -1
  71. package/dist/superdoc.cjs +3 -3
  72. package/dist/superdoc.es.js +3 -3
  73. package/dist/superdoc.umd.js +1563 -996
  74. package/dist/superdoc.umd.js.map +1 -1
  75. package/package.json +1 -1
  76. package/dist/chunks/blank-docx-CPqX9RF5.cjs +0 -3
  77. package/dist/chunks/blank-docx-iwdyG9RH.es.js +0 -4
@@ -22818,6 +22818,7 @@
22818
22818
  }
22819
22819
  return content;
22820
22820
  }
22821
+ const PIXELS_PER_INCH = 96;
22821
22822
  function inchesToTwips(inches) {
22822
22823
  if (inches == null) return;
22823
22824
  if (typeof inches === "string") inches = parseFloat(inches);
@@ -22840,12 +22841,12 @@
22840
22841
  }
22841
22842
  function inchesToPixels(inches) {
22842
22843
  if (inches == null) return;
22843
- const pixels = inches * 96;
22844
+ const pixels = inches * PIXELS_PER_INCH;
22844
22845
  return Math.round(pixels * 1e3) / 1e3;
22845
22846
  }
22846
22847
  function pixelsToInches(pixels) {
22847
22848
  if (pixels == null) return;
22848
- const inches = Number(pixels) / 96;
22849
+ const inches = Number(pixels) / PIXELS_PER_INCH;
22849
22850
  return inches;
22850
22851
  }
22851
22852
  function twipsToLines(twips) {
@@ -22863,7 +22864,7 @@
22863
22864
  function emuToPixels(emu) {
22864
22865
  if (emu == null) return;
22865
22866
  if (typeof emu === "string") emu = parseFloat(emu);
22866
- const pixels = emu * 96 / 914400;
22867
+ const pixels = emu * PIXELS_PER_INCH / 914400;
22867
22868
  return Math.round(pixels);
22868
22869
  }
22869
22870
  function pixelsToEmu(px) {
@@ -22871,9 +22872,9 @@
22871
22872
  if (typeof px === "string") px = parseFloat(px);
22872
22873
  return Math.round(px * 9525);
22873
22874
  }
22874
- function eigthPointsToPixels(eigthPoints) {
22875
- if (eigthPoints == null) return;
22876
- const points = parseFloat(eigthPoints) / 8;
22875
+ function eighthPointsToPixels(eighthPoints) {
22876
+ if (eighthPoints == null) return;
22877
+ const points = parseFloat(eighthPoints) / 8;
22877
22878
  const pixels = points * 1.3333;
22878
22879
  return pixels;
22879
22880
  }
@@ -22899,12 +22900,12 @@
22899
22900
  }
22900
22901
  function pixelsToPolygonUnits(pixels) {
22901
22902
  if (pixels == null) return;
22902
- const pu = pixels * 96;
22903
+ const pu = pixels * PIXELS_PER_INCH;
22903
22904
  return Math.round(pu);
22904
22905
  }
22905
22906
  function polygonUnitsToPixels(pu) {
22906
22907
  if (pu == null) return;
22907
- const pixels = Number(pu) / 96;
22908
+ const pixels = Number(pu) / PIXELS_PER_INCH;
22908
22909
  return Math.round(pixels * 1e3) / 1e3;
22909
22910
  }
22910
22911
  function polygonToObj(polygonNode) {
@@ -32277,37 +32278,37 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32277
32278
  };
32278
32279
  __publicField$2(_NodeTranslator, "translatorTypes", TranslatorTypes);
32279
32280
  let NodeTranslator = _NodeTranslator;
32280
- const encode$1e = (attributes) => {
32281
+ const encode$1b = (attributes) => {
32281
32282
  return attributes["w:type"];
32282
32283
  };
32283
- const decode$16 = (attrs) => {
32284
+ const decode$13 = (attrs) => {
32284
32285
  const { lineBreakType } = attrs;
32285
32286
  return lineBreakType;
32286
32287
  };
32287
32288
  const attrConfig$G = Object.freeze({
32288
32289
  xmlName: "w:type",
32289
32290
  sdName: "lineBreakType",
32290
- encode: encode$1e,
32291
- decode: decode$16
32291
+ encode: encode$1b,
32292
+ decode: decode$13
32292
32293
  });
32293
- const encode$1d = (attributes) => {
32294
+ const encode$1a = (attributes) => {
32294
32295
  const xmlAttrValue = attributes["w:clear"];
32295
32296
  return xmlAttrValue;
32296
32297
  };
32297
- const decode$15 = (attrs) => {
32298
+ const decode$12 = (attrs) => {
32298
32299
  const { clear } = attrs;
32299
32300
  return clear;
32300
32301
  };
32301
32302
  const attrConfig$F = Object.freeze({
32302
32303
  xmlName: "w:clear",
32303
32304
  sdName: "clear",
32304
- encode: encode$1d,
32305
- decode: decode$15
32305
+ encode: encode$1a,
32306
+ decode: decode$12
32306
32307
  });
32307
32308
  const validXmlAttributes$p = [attrConfig$G, attrConfig$F];
32308
- const XML_NODE_NAME$B = "w:br";
32309
+ const XML_NODE_NAME$y = "w:br";
32309
32310
  const SD_NODE_NAME$h = "lineBreak";
32310
- const encode$1c = (_2, encodedAttrs) => {
32311
+ const encode$19 = (_2, encodedAttrs) => {
32311
32312
  const isPageBreak = encodedAttrs?.lineBreakType === "page";
32312
32313
  const translated = {
32313
32314
  type: isPageBreak ? "hardBreak" : "lineBreak"
@@ -32317,7 +32318,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32317
32318
  }
32318
32319
  return translated;
32319
32320
  };
32320
- const decode$14 = (params2, decodedAttrs) => {
32321
+ const decode$11 = (params2, decodedAttrs) => {
32321
32322
  const { node } = params2;
32322
32323
  if (!node) return;
32323
32324
  const wBreak = { name: "w:br" };
@@ -32334,39 +32335,39 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32334
32335
  };
32335
32336
  return translated;
32336
32337
  };
32337
- const config$y = {
32338
- xmlName: XML_NODE_NAME$B,
32338
+ const config$x = {
32339
+ xmlName: XML_NODE_NAME$y,
32339
32340
  sdNodeOrKeyName: SD_NODE_NAME$h,
32340
32341
  type: NodeTranslator.translatorTypes.NODE,
32341
- encode: encode$1c,
32342
- decode: decode$14,
32342
+ encode: encode$19,
32343
+ decode: decode$11,
32343
32344
  attributes: validXmlAttributes$p
32344
32345
  };
32345
- const translator$1c = NodeTranslator.from(config$y);
32346
- const encode$1b = (attributes) => attributes?.["w:val"];
32347
- const decode$13 = (attrs) => attrs?.highlight;
32346
+ const translator$1r = NodeTranslator.from(config$x);
32347
+ const encode$18 = (attributes) => attributes?.["w:val"];
32348
+ const decode$10 = (attrs) => attrs?.highlight;
32348
32349
  const attrConfig$E = Object.freeze({
32349
32350
  xmlName: "w:val",
32350
32351
  sdName: "highlight",
32351
- encode: encode$1b,
32352
- decode: decode$13
32352
+ encode: encode$18,
32353
+ decode: decode$10
32353
32354
  });
32354
32355
  const validXmlAttributes$o = [attrConfig$E];
32355
- const XML_NODE_NAME$A = "w:highlight";
32356
- const SD_ATTR_KEY$i = "highlight";
32356
+ const XML_NODE_NAME$x = "w:highlight";
32357
+ const SD_ATTR_KEY$f = "highlight";
32357
32358
  const DISABLED_TOKENS = /* @__PURE__ */ new Set(["transparent", "none", "inherit"]);
32358
- const encode$1a = (params2, encodedAttrs = {}) => {
32359
+ const encode$17 = (params2, encodedAttrs = {}) => {
32359
32360
  const { nodes } = params2;
32360
32361
  const node = nodes?.[0];
32361
32362
  const value = encodedAttrs.highlight ?? node?.attributes?.["w:val"];
32362
32363
  return {
32363
32364
  type: "attr",
32364
- xmlName: XML_NODE_NAME$A,
32365
- sdNodeOrKeyName: SD_ATTR_KEY$i,
32365
+ xmlName: XML_NODE_NAME$x,
32366
+ sdNodeOrKeyName: SD_ATTR_KEY$f,
32366
32367
  attributes: { "w:val": value ?? null }
32367
32368
  };
32368
32369
  };
32369
- const decode$12 = (params2) => {
32370
+ const decode$$ = (params2) => {
32370
32371
  const attrs = params2?.node?.attrs || {};
32371
32372
  const highlightValue = attrs.highlight ?? attrs.color ?? null;
32372
32373
  if (!highlightValue) return void 0;
@@ -32374,14 +32375,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32374
32375
  if (!normalizedValue) return void 0;
32375
32376
  if (DISABLED_TOKENS.has(normalizedValue)) {
32376
32377
  return {
32377
- name: XML_NODE_NAME$A,
32378
+ name: XML_NODE_NAME$x,
32378
32379
  attributes: { "w:val": "none" }
32379
32380
  };
32380
32381
  }
32381
32382
  const keyword = getDocxHighlightKeywordFromHex(highlightValue);
32382
32383
  if (keyword) {
32383
32384
  return {
32384
- name: XML_NODE_NAME$A,
32385
+ name: XML_NODE_NAME$x,
32385
32386
  attributes: { "w:val": keyword }
32386
32387
  };
32387
32388
  }
@@ -32396,63 +32397,63 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32396
32397
  }
32397
32398
  };
32398
32399
  };
32399
- const config$x = {
32400
- xmlName: XML_NODE_NAME$A,
32401
- sdNodeOrKeyName: SD_ATTR_KEY$i,
32400
+ const config$w = {
32401
+ xmlName: XML_NODE_NAME$x,
32402
+ sdNodeOrKeyName: SD_ATTR_KEY$f,
32402
32403
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
32403
- encode: encode$1a,
32404
- decode: decode$12,
32404
+ encode: encode$17,
32405
+ decode: decode$$,
32405
32406
  attributes: validXmlAttributes$o
32406
32407
  };
32407
- const translator$1b = NodeTranslator.from(config$x);
32408
- const encode$19 = (attributes) => {
32408
+ const translator$1q = NodeTranslator.from(config$w);
32409
+ const encode$16 = (attributes) => {
32409
32410
  return attributes["w:val"];
32410
32411
  };
32411
- const decode$11 = (attrs) => {
32412
+ const decode$_ = (attrs) => {
32412
32413
  const { tabSize } = attrs || {};
32413
32414
  return tabSize;
32414
32415
  };
32415
32416
  const attrConfig$D = Object.freeze({
32416
32417
  xmlName: "w:val",
32417
32418
  sdName: "tabSize",
32418
- encode: encode$19,
32419
- decode: decode$11
32419
+ encode: encode$16,
32420
+ decode: decode$_
32420
32421
  });
32421
- const encode$18 = (attributes) => {
32422
+ const encode$15 = (attributes) => {
32422
32423
  return attributes["w:leader"];
32423
32424
  };
32424
- const decode$10 = (attrs) => {
32425
+ const decode$Z = (attrs) => {
32425
32426
  const { leader } = attrs || {};
32426
32427
  return leader;
32427
32428
  };
32428
32429
  const attrConfig$C = Object.freeze({
32429
32430
  xmlName: "w:leader",
32430
32431
  sdName: "leader",
32431
- encode: encode$18,
32432
- decode: decode$10
32432
+ encode: encode$15,
32433
+ decode: decode$Z
32433
32434
  });
32434
- const encode$17 = (attributes) => {
32435
+ const encode$14 = (attributes) => {
32435
32436
  return attributes["w:pos"];
32436
32437
  };
32437
- const decode$$ = (attrs) => {
32438
+ const decode$Y = (attrs) => {
32438
32439
  const { pos } = attrs || {};
32439
32440
  return pos;
32440
32441
  };
32441
32442
  const attrConfig$B = Object.freeze({
32442
32443
  xmlName: "w:pos",
32443
32444
  sdName: "pos",
32444
- encode: encode$17,
32445
- decode: decode$$
32445
+ encode: encode$14,
32446
+ decode: decode$Y
32446
32447
  });
32447
32448
  const validXmlAttributes$n = [attrConfig$D, attrConfig$B, attrConfig$C];
32448
- const XML_NODE_NAME$z = "w:tab";
32449
+ const XML_NODE_NAME$w = "w:tab";
32449
32450
  const SD_NODE_NAME$g = "tab";
32450
- const encode$16 = (_2, encodedAttrs = {}) => {
32451
+ const encode$13 = (_2, encodedAttrs = {}) => {
32451
32452
  const translated = { type: "tab" };
32452
32453
  if (encodedAttrs) translated.attrs = { ...encodedAttrs };
32453
32454
  return translated;
32454
32455
  };
32455
- const decode$_ = (params2, decodedAttrs = {}) => {
32456
+ const decode$X = (params2, decodedAttrs = {}) => {
32456
32457
  const { node } = params2 || {};
32457
32458
  if (!node) return;
32458
32459
  const wTab = { name: "w:tab" };
@@ -32468,15 +32469,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32468
32469
  }
32469
32470
  return translated;
32470
32471
  };
32471
- const config$w = {
32472
- xmlName: XML_NODE_NAME$z,
32472
+ const config$v = {
32473
+ xmlName: XML_NODE_NAME$w,
32473
32474
  sdNodeOrKeyName: SD_NODE_NAME$g,
32474
32475
  type: NodeTranslator.translatorTypes.NODE,
32475
- encode: encode$16,
32476
- decode: decode$_,
32476
+ encode: encode$13,
32477
+ decode: decode$X,
32477
32478
  attributes: validXmlAttributes$n
32478
32479
  };
32479
- const translator$1a = NodeTranslator.from(config$w);
32480
+ const translator$1p = NodeTranslator.from(config$v);
32480
32481
  const mergeTextNodes = (nodes) => {
32481
32482
  if (!nodes || !Array.isArray(nodes)) {
32482
32483
  return nodes;
@@ -32702,9 +32703,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32702
32703
  const { attributes: a } = el;
32703
32704
  if (a["w:val"] === "nil" || a["w:val"] === void 0) return;
32704
32705
  let sizePx;
32705
- if (a["w:sz"] !== void 0) sizePx = eigthPointsToPixels(a["w:sz"]);
32706
+ if (a["w:sz"] !== void 0) sizePx = eighthPointsToPixels(a["w:sz"]);
32706
32707
  let spacePx;
32707
- if (a["w:space"] !== void 0) spacePx = eigthPointsToPixels(a["w:space"]);
32708
+ if (a["w:space"] !== void 0) spacePx = eighthPointsToPixels(a["w:space"]);
32708
32709
  result[side] = {
32709
32710
  val: a["w:val"],
32710
32711
  size: sizePx,
@@ -32994,89 +32995,89 @@ Please report this to https://github.com/markedjs/marked.`, e) {
32994
32995
  }
32995
32996
  return schemaNode;
32996
32997
  };
32997
- const encode$15 = (attributes) => {
32998
+ const encode$12 = (attributes) => {
32998
32999
  return attributes["w:rsidDel"];
32999
33000
  };
33000
- const decode$Z = (attrs) => {
33001
+ const decode$W = (attrs) => {
33001
33002
  return attrs.rsidDel;
33002
33003
  };
33003
33004
  const attrConfig$A = Object.freeze({
33004
33005
  xmlName: "w:rsidDel",
33005
33006
  sdName: "rsidDel",
33006
- encode: encode$15,
33007
- decode: decode$Z
33007
+ encode: encode$12,
33008
+ decode: decode$W
33008
33009
  });
33009
- const encode$14 = (attributes) => {
33010
+ const encode$11 = (attributes) => {
33010
33011
  return attributes["w:rsidP"];
33011
33012
  };
33012
- const decode$Y = (attrs) => {
33013
+ const decode$V = (attrs) => {
33013
33014
  return attrs.rsidP;
33014
33015
  };
33015
33016
  const attrConfig$z = Object.freeze({
33016
33017
  xmlName: "w:rsidP",
33017
33018
  sdName: "rsidP",
33018
- encode: encode$14,
33019
- decode: decode$Y
33019
+ encode: encode$11,
33020
+ decode: decode$V
33020
33021
  });
33021
- const encode$13 = (attributes) => {
33022
+ const encode$10 = (attributes) => {
33022
33023
  return attributes["w:rsidR"];
33023
33024
  };
33024
- const decode$X = (attrs) => {
33025
+ const decode$U = (attrs) => {
33025
33026
  return attrs.rsidR;
33026
33027
  };
33027
33028
  const attrConfig$y = Object.freeze({
33028
33029
  xmlName: "w:rsidR",
33029
33030
  sdName: "rsidR",
33030
- encode: encode$13,
33031
- decode: decode$X
33031
+ encode: encode$10,
33032
+ decode: decode$U
33032
33033
  });
33033
- const encode$12 = (attributes) => {
33034
+ const encode$$ = (attributes) => {
33034
33035
  return attributes["w:rsidRPr"];
33035
33036
  };
33036
- const decode$W = (attrs) => {
33037
+ const decode$T = (attrs) => {
33037
33038
  return attrs.rsidRPr;
33038
33039
  };
33039
33040
  const attrConfig$x = Object.freeze({
33040
33041
  xmlName: "w:rsidRPr",
33041
33042
  sdName: "rsidRPr",
33042
- encode: encode$12,
33043
- decode: decode$W
33043
+ encode: encode$$,
33044
+ decode: decode$T
33044
33045
  });
33045
- const encode$11 = (attributes) => {
33046
+ const encode$_ = (attributes) => {
33046
33047
  return attributes["w:rsidRDefault"];
33047
33048
  };
33048
- const decode$V = (attrs) => {
33049
+ const decode$S = (attrs) => {
33049
33050
  return attrs.rsidRDefault;
33050
33051
  };
33051
33052
  const attrConfig$w = Object.freeze({
33052
33053
  xmlName: "w:rsidRDefault",
33053
33054
  sdName: "rsidRDefault",
33054
- encode: encode$11,
33055
- decode: decode$V
33055
+ encode: encode$_,
33056
+ decode: decode$S
33056
33057
  });
33057
- const encode$10 = (attributes) => {
33058
+ const encode$Z = (attributes) => {
33058
33059
  return attributes["w14:paraId"];
33059
33060
  };
33060
- const decode$U = (attrs) => {
33061
+ const decode$R = (attrs) => {
33061
33062
  return attrs.paraId;
33062
33063
  };
33063
33064
  const attrConfig$v = Object.freeze({
33064
33065
  xmlName: "w14:paraId",
33065
33066
  sdName: "paraId",
33066
- encode: encode$10,
33067
- decode: decode$U
33067
+ encode: encode$Z,
33068
+ decode: decode$R
33068
33069
  });
33069
- const encode$$ = (attributes) => {
33070
+ const encode$Y = (attributes) => {
33070
33071
  return attributes["w14:textId"];
33071
33072
  };
33072
- const decode$T = (attrs) => {
33073
+ const decode$Q = (attrs) => {
33073
33074
  return attrs.textId;
33074
33075
  };
33075
33076
  const attrConfig$u = Object.freeze({
33076
33077
  xmlName: "w14:textId",
33077
33078
  sdName: "textId",
33078
- encode: encode$$,
33079
- decode: decode$T
33079
+ encode: encode$Y,
33080
+ decode: decode$Q
33080
33081
  });
33081
33082
  const validXmlAttributes$m = [
33082
33083
  attrConfig$v,
@@ -33087,9 +33088,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33087
33088
  attrConfig$x,
33088
33089
  attrConfig$A
33089
33090
  ];
33090
- const XML_NODE_NAME$y = "w:p";
33091
+ const XML_NODE_NAME$v = "w:p";
33091
33092
  const SD_NODE_NAME$f = "paragraph";
33092
- const encode$_ = (params2, encodedAttrs = {}) => {
33093
+ const encode$X = (params2, encodedAttrs = {}) => {
33093
33094
  const node = handleParagraphNode$1(params2);
33094
33095
  if (!node) return void 0;
33095
33096
  if (encodedAttrs && Object.keys(encodedAttrs).length) {
@@ -33097,7 +33098,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33097
33098
  }
33098
33099
  return node;
33099
33100
  };
33100
- const decode$S = (params2, decodedAttrs = {}) => {
33101
+ const decode$P = (params2, decodedAttrs = {}) => {
33101
33102
  const translated = translateParagraphNode(params2);
33102
33103
  if (!translated) return void 0;
33103
33104
  if (decodedAttrs && Object.keys(decodedAttrs).length) {
@@ -33105,16 +33106,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33105
33106
  }
33106
33107
  return translated;
33107
33108
  };
33108
- const config$v = {
33109
- xmlName: XML_NODE_NAME$y,
33109
+ const config$u = {
33110
+ xmlName: XML_NODE_NAME$v,
33110
33111
  sdNodeOrKeyName: SD_NODE_NAME$f,
33111
33112
  type: NodeTranslator.translatorTypes.NODE,
33112
- encode: encode$_,
33113
- decode: decode$S,
33113
+ encode: encode$X,
33114
+ decode: decode$P,
33114
33115
  attributes: validXmlAttributes$m
33115
33116
  };
33116
- const translator$19 = NodeTranslator.from(config$v);
33117
- const encode$Z = (attributes) => {
33117
+ const translator$1o = NodeTranslator.from(config$u);
33118
+ const encode$W = (attributes) => {
33118
33119
  const raw = attributes?.["w:val"];
33119
33120
  if (raw === void 0 || raw === null) return void 0;
33120
33121
  if (typeof raw === "boolean") return raw;
@@ -33124,24 +33125,24 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33124
33125
  if (val === "1" || val === "true" || val === "on") return true;
33125
33126
  return void 0;
33126
33127
  };
33127
- const decode$R = (runProps) => {
33128
+ const decode$O = (runProps) => {
33128
33129
  if (runProps?.bold === false) return "0";
33129
33130
  return void 0;
33130
33131
  };
33131
33132
  const attrConfig$t = Object.freeze({
33132
33133
  xmlName: "w:val",
33133
33134
  sdName: "bold",
33134
- encode: encode$Z,
33135
- decode: decode$R
33135
+ encode: encode$W,
33136
+ decode: decode$O
33136
33137
  });
33137
33138
  const validXmlAttributes$l = [attrConfig$t];
33138
- const XML_NODE_NAME$x = "w:b";
33139
- const SD_ATTR_KEY$h = "bold";
33140
- const encode$Y = (params2, encodedAttrs = {}) => {
33139
+ const XML_NODE_NAME$u = "w:b";
33140
+ const SD_ATTR_KEY$e = "bold";
33141
+ const encode$V = (params2, encodedAttrs = {}) => {
33141
33142
  const { nodes } = params2;
33142
33143
  const node = nodes[0];
33143
33144
  if (!node) return void 0;
33144
- const val = encodedAttrs?.[SD_ATTR_KEY$h];
33145
+ const val = encodedAttrs?.[SD_ATTR_KEY$e];
33145
33146
  let attributes;
33146
33147
  if (val === false) attributes = { "w:val": "0" };
33147
33148
  else if (val === true)
@@ -33149,85 +33150,85 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33149
33150
  else attributes = node.attributes || {};
33150
33151
  return {
33151
33152
  type: "attr",
33152
- xmlName: XML_NODE_NAME$x,
33153
- sdNodeOrKeyName: SD_ATTR_KEY$h,
33153
+ xmlName: XML_NODE_NAME$u,
33154
+ sdNodeOrKeyName: SD_ATTR_KEY$e,
33154
33155
  attributes
33155
33156
  };
33156
33157
  };
33157
- const config$u = {
33158
- xmlName: XML_NODE_NAME$x,
33159
- sdNodeOrKeyName: SD_ATTR_KEY$h,
33158
+ const config$t = {
33159
+ xmlName: XML_NODE_NAME$u,
33160
+ sdNodeOrKeyName: SD_ATTR_KEY$e,
33160
33161
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33161
- encode: encode$Y,
33162
+ encode: encode$V,
33162
33163
  attributes: validXmlAttributes$l
33163
33164
  };
33164
- const translator$18 = NodeTranslator.from(config$u);
33165
- const XML_NODE_NAME$w = "w:i";
33166
- const SD_ATTR_KEY$g = "italic";
33167
- const encode$X = (params2) => {
33165
+ const translator$1n = NodeTranslator.from(config$t);
33166
+ const XML_NODE_NAME$t = "w:i";
33167
+ const SD_ATTR_KEY$d = "italic";
33168
+ const encode$U = (params2) => {
33168
33169
  const { nodes } = params2;
33169
33170
  const node = nodes?.[0];
33170
33171
  if (!node) return void 0;
33171
33172
  return {
33172
33173
  type: "attr",
33173
- xmlName: XML_NODE_NAME$w,
33174
- sdNodeOrKeyName: SD_ATTR_KEY$g,
33174
+ xmlName: XML_NODE_NAME$t,
33175
+ sdNodeOrKeyName: SD_ATTR_KEY$d,
33175
33176
  attributes: {
33176
33177
  "w:val": node.attributes?.["w:val"] ?? null
33177
33178
  }
33178
33179
  };
33179
33180
  };
33180
- const config$t = {
33181
- xmlName: XML_NODE_NAME$w,
33182
- sdNodeOrKeyName: SD_ATTR_KEY$g,
33181
+ const config$s = {
33182
+ xmlName: XML_NODE_NAME$t,
33183
+ sdNodeOrKeyName: SD_ATTR_KEY$d,
33183
33184
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33184
- encode: encode$X
33185
+ encode: encode$U
33185
33186
  };
33186
- const translator$17 = NodeTranslator.from(config$t);
33187
- const encode$W = (attributes) => attributes?.["w:val"];
33188
- const decode$Q = (attrs) => attrs?.underline;
33187
+ const translator$1m = NodeTranslator.from(config$s);
33188
+ const encode$T = (attributes) => attributes?.["w:val"];
33189
+ const decode$N = (attrs) => attrs?.underline;
33189
33190
  const attrConfig$s = Object.freeze({
33190
33191
  xmlName: "w:val",
33191
33192
  sdName: "underline",
33192
- encode: encode$W,
33193
- decode: decode$Q
33193
+ encode: encode$T,
33194
+ decode: decode$N
33194
33195
  });
33195
- const encode$V = (attributes) => attributes?.["w:color"];
33196
- const decode$P = (attrs) => attrs?.color;
33196
+ const encode$S = (attributes) => attributes?.["w:color"];
33197
+ const decode$M = (attrs) => attrs?.color;
33197
33198
  const attrConfig$r = Object.freeze({
33198
33199
  xmlName: "w:color",
33199
33200
  sdName: "color",
33200
- encode: encode$V,
33201
- decode: decode$P
33201
+ encode: encode$S,
33202
+ decode: decode$M
33202
33203
  });
33203
- const encode$U = (attributes) => attributes?.["w:themeColor"];
33204
- const decode$O = (attrs) => attrs?.themeColor;
33204
+ const encode$R = (attributes) => attributes?.["w:themeColor"];
33205
+ const decode$L = (attrs) => attrs?.themeColor;
33205
33206
  const attrConfig$q = Object.freeze({
33206
33207
  xmlName: "w:themeColor",
33207
33208
  sdName: "themeColor",
33208
- encode: encode$U,
33209
- decode: decode$O
33209
+ encode: encode$R,
33210
+ decode: decode$L
33210
33211
  });
33211
- const encode$T = (attributes) => attributes?.["w:themeTint"];
33212
- const decode$N = (attrs) => attrs?.themeTint;
33212
+ const encode$Q = (attributes) => attributes?.["w:themeTint"];
33213
+ const decode$K = (attrs) => attrs?.themeTint;
33213
33214
  const attrConfig$p = Object.freeze({
33214
33215
  xmlName: "w:themeTint",
33215
33216
  sdName: "themeTint",
33216
- encode: encode$T,
33217
- decode: decode$N
33217
+ encode: encode$Q,
33218
+ decode: decode$K
33218
33219
  });
33219
- const encode$S = (attributes) => attributes?.["w:themeShade"];
33220
- const decode$M = (attrs) => attrs?.themeShade;
33220
+ const encode$P = (attributes) => attributes?.["w:themeShade"];
33221
+ const decode$J = (attrs) => attrs?.themeShade;
33221
33222
  const attrConfig$o = Object.freeze({
33222
33223
  xmlName: "w:themeShade",
33223
33224
  sdName: "themeShade",
33224
- encode: encode$S,
33225
- decode: decode$M
33225
+ encode: encode$P,
33226
+ decode: decode$J
33226
33227
  });
33227
33228
  const validXmlAttributes$k = [attrConfig$s, attrConfig$r, attrConfig$q, attrConfig$p, attrConfig$o];
33228
- const XML_NODE_NAME$v = "w:u";
33229
- const SD_ATTR_KEY$f = "underline";
33230
- const encode$R = (params2, encodedAttrs = {}) => {
33229
+ const XML_NODE_NAME$s = "w:u";
33230
+ const SD_ATTR_KEY$c = "underline";
33231
+ const encode$O = (params2, encodedAttrs = {}) => {
33231
33232
  const { nodes } = params2;
33232
33233
  const node = nodes?.[0];
33233
33234
  const sourceAttrs = node?.attributes || {};
@@ -33243,12 +33244,12 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33243
33244
  if (themeShade !== void 0 && themeShade !== null) attributes["w:themeShade"] = themeShade;
33244
33245
  return {
33245
33246
  type: "attr",
33246
- xmlName: XML_NODE_NAME$v,
33247
- sdNodeOrKeyName: SD_ATTR_KEY$f,
33247
+ xmlName: XML_NODE_NAME$s,
33248
+ sdNodeOrKeyName: SD_ATTR_KEY$c,
33248
33249
  attributes
33249
33250
  };
33250
33251
  };
33251
- const decode$L = (params2) => {
33252
+ const decode$I = (params2) => {
33252
33253
  const attrs = params2?.node?.attrs || {};
33253
33254
  const underlineType = attrs.underlineType ?? attrs.underline ?? null;
33254
33255
  const color = attrs.underlineColor ?? attrs.color ?? null;
@@ -33266,20 +33267,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33266
33267
  if (themeTint) attributes["w:themeTint"] = themeTint;
33267
33268
  if (themeShade) attributes["w:themeShade"] = themeShade;
33268
33269
  return {
33269
- name: XML_NODE_NAME$v,
33270
+ name: XML_NODE_NAME$s,
33270
33271
  attributes
33271
33272
  };
33272
33273
  };
33273
- const config$s = {
33274
- xmlName: XML_NODE_NAME$v,
33275
- sdNodeOrKeyName: SD_ATTR_KEY$f,
33274
+ const config$r = {
33275
+ xmlName: XML_NODE_NAME$s,
33276
+ sdNodeOrKeyName: SD_ATTR_KEY$c,
33276
33277
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33277
- encode: encode$R,
33278
- decode: decode$L,
33278
+ encode: encode$O,
33279
+ decode: decode$I,
33279
33280
  attributes: validXmlAttributes$k
33280
33281
  };
33281
- const translator$16 = NodeTranslator.from(config$s);
33282
- const encode$Q = (attributes) => {
33282
+ const translator$1l = NodeTranslator.from(config$r);
33283
+ const encode$N = (attributes) => {
33283
33284
  const raw = attributes?.["w:val"];
33284
33285
  if (raw === void 0 || raw === null) return void 0;
33285
33286
  if (typeof raw === "boolean") return raw;
@@ -33289,24 +33290,24 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33289
33290
  if (val === "1" || val === "true" || val === "on") return true;
33290
33291
  return void 0;
33291
33292
  };
33292
- const decode$K = (attrs) => {
33293
+ const decode$H = (attrs) => {
33293
33294
  if (attrs?.strike === false) return "0";
33294
33295
  return void 0;
33295
33296
  };
33296
33297
  const attrConfig$n = Object.freeze({
33297
33298
  xmlName: "w:val",
33298
33299
  sdName: "strike",
33299
- encode: encode$Q,
33300
- decode: decode$K
33300
+ encode: encode$N,
33301
+ decode: decode$H
33301
33302
  });
33302
33303
  const validXmlAttributes$j = [attrConfig$n];
33303
- const XML_NODE_NAME$u = "w:strike";
33304
- const SD_ATTR_KEY$e = "strike";
33305
- const encode$P = (params2, encodedAttrs = {}) => {
33304
+ const XML_NODE_NAME$r = "w:strike";
33305
+ const SD_ATTR_KEY$b = "strike";
33306
+ const encode$M = (params2, encodedAttrs = {}) => {
33306
33307
  const { nodes } = params2;
33307
33308
  const node = nodes?.[0];
33308
33309
  if (!node) return void 0;
33309
- const val = encodedAttrs?.[SD_ATTR_KEY$e];
33310
+ const val = encodedAttrs?.[SD_ATTR_KEY$b];
33310
33311
  let attributes;
33311
33312
  if (val === false) attributes = { "w:val": "0" };
33312
33313
  else if (val === true) attributes = {};
@@ -33315,55 +33316,55 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33315
33316
  else if (val === true && attributes["w:val"] === void 0) delete attributes["w:val"];
33316
33317
  return {
33317
33318
  type: "attr",
33318
- xmlName: XML_NODE_NAME$u,
33319
- sdNodeOrKeyName: SD_ATTR_KEY$e,
33319
+ xmlName: XML_NODE_NAME$r,
33320
+ sdNodeOrKeyName: SD_ATTR_KEY$b,
33320
33321
  attributes
33321
33322
  };
33322
33323
  };
33323
- const config$r = {
33324
- xmlName: XML_NODE_NAME$u,
33325
- sdNodeOrKeyName: SD_ATTR_KEY$e,
33324
+ const config$q = {
33325
+ xmlName: XML_NODE_NAME$r,
33326
+ sdNodeOrKeyName: SD_ATTR_KEY$b,
33326
33327
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33327
- encode: encode$P,
33328
+ encode: encode$M,
33328
33329
  attributes: validXmlAttributes$j
33329
33330
  };
33330
- const translator$15 = NodeTranslator.from(config$r);
33331
- const encode$O = (attributes) => attributes?.["w:val"];
33332
- const decode$J = (attrs) => attrs?.color;
33331
+ const translator$1k = NodeTranslator.from(config$q);
33332
+ const encode$L = (attributes) => attributes?.["w:val"];
33333
+ const decode$G = (attrs) => attrs?.color;
33333
33334
  const attrConfig$m = Object.freeze({
33334
33335
  xmlName: "w:val",
33335
33336
  sdName: "color",
33336
- encode: encode$O,
33337
- decode: decode$J
33337
+ encode: encode$L,
33338
+ decode: decode$G
33338
33339
  });
33339
- const encode$N = (attributes) => attributes?.["w:themeColor"];
33340
- const decode$I = (attrs) => attrs?.themeColor;
33340
+ const encode$K = (attributes) => attributes?.["w:themeColor"];
33341
+ const decode$F = (attrs) => attrs?.themeColor;
33341
33342
  const attrConfig$l = Object.freeze({
33342
33343
  xmlName: "w:themeColor",
33343
33344
  sdName: "themeColor",
33344
- encode: encode$N,
33345
- decode: decode$I
33345
+ encode: encode$K,
33346
+ decode: decode$F
33346
33347
  });
33347
- const encode$M = (attributes) => attributes?.["w:themeTint"];
33348
- const decode$H = (attrs) => attrs?.themeTint;
33348
+ const encode$J = (attributes) => attributes?.["w:themeTint"];
33349
+ const decode$E = (attrs) => attrs?.themeTint;
33349
33350
  const attrConfig$k = Object.freeze({
33350
33351
  xmlName: "w:themeTint",
33351
33352
  sdName: "themeTint",
33352
- encode: encode$M,
33353
- decode: decode$H
33353
+ encode: encode$J,
33354
+ decode: decode$E
33354
33355
  });
33355
- const encode$L = (attributes) => attributes?.["w:themeShade"];
33356
- const decode$G = (attrs) => attrs?.themeShade;
33356
+ const encode$I = (attributes) => attributes?.["w:themeShade"];
33357
+ const decode$D = (attrs) => attrs?.themeShade;
33357
33358
  const attrConfig$j = Object.freeze({
33358
33359
  xmlName: "w:themeShade",
33359
33360
  sdName: "themeShade",
33360
- encode: encode$L,
33361
- decode: decode$G
33361
+ encode: encode$I,
33362
+ decode: decode$D
33362
33363
  });
33363
33364
  const validXmlAttributes$i = [attrConfig$m, attrConfig$l, attrConfig$k, attrConfig$j];
33364
- const XML_NODE_NAME$t = "w:color";
33365
- const SD_ATTR_KEY$d = "color";
33366
- const encode$K = (params2, encodedAttrs = {}) => {
33365
+ const XML_NODE_NAME$q = "w:color";
33366
+ const SD_ATTR_KEY$a = "color";
33367
+ const encode$H = (params2, encodedAttrs = {}) => {
33367
33368
  const { nodes } = params2;
33368
33369
  const node = nodes?.[0];
33369
33370
  const sourceAttrs = node?.attributes || {};
@@ -33378,63 +33379,63 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33378
33379
  if (themeShade !== void 0 && themeShade !== null) attributes["w:themeShade"] = themeShade;
33379
33380
  return {
33380
33381
  type: "attr",
33381
- xmlName: XML_NODE_NAME$t,
33382
- sdNodeOrKeyName: SD_ATTR_KEY$d,
33382
+ xmlName: XML_NODE_NAME$q,
33383
+ sdNodeOrKeyName: SD_ATTR_KEY$a,
33383
33384
  attributes
33384
33385
  };
33385
33386
  };
33386
- const config$q = {
33387
- xmlName: XML_NODE_NAME$t,
33388
- sdNodeOrKeyName: SD_ATTR_KEY$d,
33387
+ const config$p = {
33388
+ xmlName: XML_NODE_NAME$q,
33389
+ sdNodeOrKeyName: SD_ATTR_KEY$a,
33389
33390
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33390
- encode: encode$K,
33391
+ encode: encode$H,
33391
33392
  attributes: validXmlAttributes$i
33392
33393
  };
33393
- const translator$14 = NodeTranslator.from(config$q);
33394
- const encode$J = (attributes) => attributes?.["w:eastAsia"];
33395
- const decode$F = (attrs) => attrs?.eastAsia;
33394
+ const translator$1j = NodeTranslator.from(config$p);
33395
+ const encode$G = (attributes) => attributes?.["w:eastAsia"];
33396
+ const decode$C = (attrs) => attrs?.eastAsia;
33396
33397
  const attrConfig$i = Object.freeze({
33397
33398
  xmlName: "w:eastAsia",
33398
33399
  sdName: "eastAsia",
33399
- encode: encode$J,
33400
- decode: decode$F
33400
+ encode: encode$G,
33401
+ decode: decode$C
33401
33402
  });
33402
- const encode$I = (attributes) => attributes?.["w:ascii"];
33403
- const decode$E = (attrs) => attrs?.ascii;
33403
+ const encode$F = (attributes) => attributes?.["w:ascii"];
33404
+ const decode$B = (attrs) => attrs?.ascii;
33404
33405
  const attrConfig$h = Object.freeze({
33405
33406
  xmlName: "w:ascii",
33406
33407
  sdName: "ascii",
33407
- encode: encode$I,
33408
- decode: decode$E
33408
+ encode: encode$F,
33409
+ decode: decode$B
33409
33410
  });
33410
- const encode$H = (attributes) => attributes?.["w:hAnsi"];
33411
- const decode$D = (attrs) => attrs?.hAnsi;
33411
+ const encode$E = (attributes) => attributes?.["w:hAnsi"];
33412
+ const decode$A = (attrs) => attrs?.hAnsi;
33412
33413
  const attrConfig$g = Object.freeze({
33413
33414
  xmlName: "w:hAnsi",
33414
33415
  sdName: "hAnsi",
33415
- encode: encode$H,
33416
- decode: decode$D
33416
+ encode: encode$E,
33417
+ decode: decode$A
33417
33418
  });
33418
- const encode$G = (attributes) => attributes?.["w:cs"];
33419
- const decode$C = (attrs) => attrs?.cs;
33419
+ const encode$D = (attributes) => attributes?.["w:cs"];
33420
+ const decode$z = (attrs) => attrs?.cs;
33420
33421
  const attrConfig$f = Object.freeze({
33421
33422
  xmlName: "w:cs",
33422
33423
  sdName: "cs",
33423
- encode: encode$G,
33424
- decode: decode$C
33424
+ encode: encode$D,
33425
+ decode: decode$z
33425
33426
  });
33426
- const encode$F = (attributes) => attributes?.["w:val"];
33427
- const decode$B = (attrs) => attrs?.value;
33427
+ const encode$C = (attributes) => attributes?.["w:val"];
33428
+ const decode$y = (attrs) => attrs?.value;
33428
33429
  const attrConfig$e = Object.freeze({
33429
33430
  xmlName: "w:val",
33430
33431
  sdName: "value",
33431
- encode: encode$F,
33432
- decode: decode$B
33432
+ encode: encode$C,
33433
+ decode: decode$y
33433
33434
  });
33434
33435
  const validXmlAttributes$h = [attrConfig$i, attrConfig$h, attrConfig$g, attrConfig$f, attrConfig$e];
33435
- const XML_NODE_NAME$s = "w:rFonts";
33436
- const SD_ATTR_KEY$c = "fontFamily";
33437
- const encode$E = (params2, encodedAttrs = {}) => {
33436
+ const XML_NODE_NAME$p = "w:rFonts";
33437
+ const SD_ATTR_KEY$9 = "fontFamily";
33438
+ const encode$B = (params2, encodedAttrs = {}) => {
33438
33439
  const { nodes } = params2;
33439
33440
  const node = nodes?.[0];
33440
33441
  const sourceAttrs = node?.attributes || {};
@@ -33458,111 +33459,119 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33458
33459
  attributes["w:val"] = attributes["w:eastAsia"];
33459
33460
  }
33460
33461
  if (attributes["w:val"] === void 0) delete attributes["w:val"];
33462
+ if (params2.inlineDocumentFonts) {
33463
+ const font = attributes["w:ascii"];
33464
+ if (font) {
33465
+ if (!params2.inlineDocumentFonts.includes(font)) {
33466
+ params2.inlineDocumentFonts.push(font);
33467
+ }
33468
+ }
33469
+ }
33461
33470
  return {
33462
33471
  type: "attr",
33463
- xmlName: XML_NODE_NAME$s,
33464
- sdNodeOrKeyName: SD_ATTR_KEY$c,
33472
+ xmlName: XML_NODE_NAME$p,
33473
+ sdNodeOrKeyName: SD_ATTR_KEY$9,
33465
33474
  attributes
33466
33475
  };
33467
33476
  };
33468
- const config$p = {
33469
- xmlName: XML_NODE_NAME$s,
33470
- sdNodeOrKeyName: SD_ATTR_KEY$c,
33477
+ const config$o = {
33478
+ xmlName: XML_NODE_NAME$p,
33479
+ sdNodeOrKeyName: SD_ATTR_KEY$9,
33471
33480
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33472
- encode: encode$E,
33481
+ encode: encode$B,
33473
33482
  attributes: validXmlAttributes$h
33474
33483
  };
33475
- const translator$13 = NodeTranslator.from(config$p);
33476
- const encode$D = (attributes) => attributes?.["w:val"];
33477
- const decode$A = (attrs) => attrs?.styleId;
33484
+ const translator$1i = NodeTranslator.from(config$o);
33485
+ const encode$A = (attributes) => attributes?.["w:val"];
33486
+ const decode$x = (attrs) => attrs?.styleId;
33478
33487
  const attrConfig$d = Object.freeze({
33479
33488
  xmlName: "w:val",
33480
33489
  sdName: "styleId",
33481
- encode: encode$D,
33482
- decode: decode$A
33490
+ encode: encode$A,
33491
+ decode: decode$x
33483
33492
  });
33484
33493
  const validXmlAttributes$g = [attrConfig$d];
33485
- const XML_NODE_NAME$r = "w:rStyle";
33486
- const SD_ATTR_KEY$b = "styleId";
33487
- const encode$C = (params2, encodedAttrs = {}) => {
33494
+ const XML_NODE_NAME$o = "w:rStyle";
33495
+ const SD_ATTR_KEY$8 = "styleId";
33496
+ const encode$z = (params2, encodedAttrs = {}) => {
33488
33497
  const { nodes } = params2;
33489
33498
  const node = nodes?.[0];
33490
33499
  const value = encodedAttrs.styleId ?? node?.attributes?.["w:val"];
33491
33500
  return {
33492
33501
  type: "attr",
33493
- xmlName: XML_NODE_NAME$r,
33494
- sdNodeOrKeyName: SD_ATTR_KEY$b,
33502
+ xmlName: XML_NODE_NAME$o,
33503
+ sdNodeOrKeyName: SD_ATTR_KEY$8,
33495
33504
  attributes: { "w:val": value ?? null }
33496
33505
  };
33497
33506
  };
33498
- const config$o = {
33499
- xmlName: XML_NODE_NAME$r,
33500
- sdNodeOrKeyName: SD_ATTR_KEY$b,
33507
+ const config$n = {
33508
+ xmlName: XML_NODE_NAME$o,
33509
+ sdNodeOrKeyName: SD_ATTR_KEY$8,
33501
33510
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33502
- encode: encode$C,
33511
+ encode: encode$z,
33503
33512
  attributes: validXmlAttributes$g
33504
33513
  };
33505
- const translator$12 = NodeTranslator.from(config$o);
33506
- const encode$B = (attributes) => attributes?.["w:val"];
33507
- const decode$z = (attrs) => attrs?.fontSize;
33514
+ const translator$1h = NodeTranslator.from(config$n);
33515
+ const encode$y = (attributes) => attributes?.["w:val"];
33516
+ const decode$w = (attrs) => attrs?.fontSize;
33508
33517
  const attrConfig$c = Object.freeze({
33509
33518
  xmlName: "w:val",
33510
33519
  sdName: "fontSize",
33511
- encode: encode$B,
33512
- decode: decode$z
33520
+ encode: encode$y,
33521
+ decode: decode$w
33513
33522
  });
33514
33523
  const validXmlAttributes$f = [attrConfig$c];
33515
- const XML_NODE_NAME$q = "w:sz";
33516
- const SD_ATTR_KEY$a = "fontSize";
33517
- const encode$A = (params2, encodedAttrs = {}) => {
33524
+ const XML_NODE_NAME$n = "w:sz";
33525
+ const SD_ATTR_KEY$7 = "fontSize";
33526
+ const encode$x = (params2, encodedAttrs = {}) => {
33518
33527
  const { nodes } = params2;
33519
33528
  const node = nodes?.[0];
33520
33529
  const value = encodedAttrs.fontSize ?? node?.attributes?.["w:val"];
33521
33530
  return {
33522
33531
  type: "attr",
33523
- xmlName: XML_NODE_NAME$q,
33524
- sdNodeOrKeyName: SD_ATTR_KEY$a,
33532
+ xmlName: XML_NODE_NAME$n,
33533
+ sdNodeOrKeyName: SD_ATTR_KEY$7,
33525
33534
  attributes: { "w:val": value ?? null }
33526
33535
  };
33527
33536
  };
33528
- const config$n = {
33529
- xmlName: XML_NODE_NAME$q,
33530
- sdNodeOrKeyName: SD_ATTR_KEY$a,
33537
+ const config$m = {
33538
+ xmlName: XML_NODE_NAME$n,
33539
+ sdNodeOrKeyName: SD_ATTR_KEY$7,
33531
33540
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33532
- encode: encode$A,
33541
+ encode: encode$x,
33533
33542
  attributes: validXmlAttributes$f
33534
33543
  };
33535
- const translator$11 = NodeTranslator.from(config$n);
33536
- const encode$z = (attributes) => attributes?.["w:val"];
33537
- const decode$y = (attrs) => attrs?.fontSizeCs;
33544
+ const translator$1g = NodeTranslator.from(config$m);
33545
+ const encode$w = (attributes) => attributes?.["w:val"];
33546
+ const decode$v = (attrs) => attrs?.fontSizeCs;
33538
33547
  const attrConfig$b = Object.freeze({
33539
33548
  xmlName: "w:val",
33540
33549
  sdName: "fontSizeCs",
33541
- encode: encode$z,
33542
- decode: decode$y
33550
+ encode: encode$w,
33551
+ decode: decode$v
33543
33552
  });
33544
33553
  const validXmlAttributes$e = [attrConfig$b];
33545
- const XML_NODE_NAME$p = "w:szCs";
33546
- const SD_ATTR_KEY$9 = "fontSizeCs";
33547
- const encode$y = (params2, encodedAttrs = {}) => {
33554
+ const XML_NODE_NAME$m = "w:szCs";
33555
+ const SD_ATTR_KEY$6 = "fontSizeCs";
33556
+ const encode$v = (params2, encodedAttrs = {}) => {
33548
33557
  const { nodes } = params2;
33549
33558
  const node = nodes?.[0];
33550
33559
  const value = encodedAttrs.fontSizeCs ?? node?.attributes?.["w:val"];
33551
33560
  return {
33552
33561
  type: "attr",
33553
- xmlName: XML_NODE_NAME$p,
33554
- sdNodeOrKeyName: SD_ATTR_KEY$9,
33562
+ xmlName: XML_NODE_NAME$m,
33563
+ sdNodeOrKeyName: SD_ATTR_KEY$6,
33555
33564
  attributes: { "w:val": value ?? null }
33556
33565
  };
33557
33566
  };
33558
- const config$m = {
33559
- xmlName: XML_NODE_NAME$p,
33560
- sdNodeOrKeyName: SD_ATTR_KEY$9,
33567
+ const config$l = {
33568
+ xmlName: XML_NODE_NAME$m,
33569
+ sdNodeOrKeyName: SD_ATTR_KEY$6,
33561
33570
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33562
- encode: encode$y,
33571
+ encode: encode$v,
33563
33572
  attributes: validXmlAttributes$e
33564
33573
  };
33565
- const translator$10 = NodeTranslator.from(config$m);
33574
+ const translator$1f = NodeTranslator.from(config$l);
33566
33575
  const generateV2HandlerEntity = (handlerName, translator2) => ({
33567
33576
  handlerName,
33568
33577
  handler: (params2) => {
@@ -33586,7 +33595,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33586
33595
  xmlName,
33587
33596
  sdNodeOrKeyName: sdName,
33588
33597
  encode: ({ nodes }) => {
33589
- return transformEncode(nodes[0].attributes[attrName]) ?? void 0;
33598
+ return transformEncode(nodes[0]?.attributes?.[attrName]) ?? void 0;
33590
33599
  },
33591
33600
  decode: ({ node }) => {
33592
33601
  const value = node.attrs?.[sdName] != null ? transformDecode(node.attrs[sdName]) : void 0;
@@ -33618,8 +33627,32 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33618
33627
  xmlName,
33619
33628
  sdNodeOrKeyName: sdName,
33620
33629
  attributes: [
33621
- createAttributeHandler("w:val"),
33622
- createAttributeHandler("w:color"),
33630
+ createAttributeHandler(
33631
+ "w:val",
33632
+ "val",
33633
+ (v2) => v2 === "nil" ? "none" : v2,
33634
+ (v2) => v2 === "none" ? "nil" : v2
33635
+ ),
33636
+ createAttributeHandler(
33637
+ "w:color",
33638
+ "color",
33639
+ (v2) => {
33640
+ if (v2 === "auto") {
33641
+ return null;
33642
+ } else if (v2) {
33643
+ return `#${v2}`;
33644
+ } else {
33645
+ return void 0;
33646
+ }
33647
+ },
33648
+ (v2) => {
33649
+ if (v2) {
33650
+ return v2.replace("#", "");
33651
+ } else {
33652
+ return void 0;
33653
+ }
33654
+ }
33655
+ ),
33623
33656
  createAttributeHandler("w:themeColor"),
33624
33657
  createAttributeHandler("w:themeTint"),
33625
33658
  createAttributeHandler("w:themeShade"),
@@ -33685,6 +33718,37 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33685
33718
  });
33686
33719
  return elements;
33687
33720
  }
33721
+ function createNestedPropertiesTranslator(xmlName, sdName, propertyTranslators2, defaultEncodedAttrs = {}) {
33722
+ const propertyTranslatorsByXmlName = {};
33723
+ const propertyTranslatorsBySdName = {};
33724
+ propertyTranslators2.forEach((translator2) => {
33725
+ propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
33726
+ propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
33727
+ });
33728
+ return {
33729
+ xmlName,
33730
+ sdNodeOrKeyName: sdName,
33731
+ type: NodeTranslator.translatorTypes.NODE,
33732
+ attributes: [],
33733
+ encode: (params2) => {
33734
+ const { nodes } = params2;
33735
+ const node = nodes[0];
33736
+ const attributes = { ...defaultEncodedAttrs, ...encodeProperties(node, propertyTranslatorsByXmlName) };
33737
+ return Object.keys(attributes).length > 0 ? attributes : void 0;
33738
+ },
33739
+ decode: (params2) => {
33740
+ const currentValue = params2.node.attrs?.[sdName];
33741
+ const elements = decodeProperties(propertyTranslatorsBySdName, currentValue);
33742
+ const newNode = {
33743
+ name: xmlName,
33744
+ type: "element",
33745
+ attributes: {},
33746
+ elements
33747
+ };
33748
+ return newNode;
33749
+ }
33750
+ };
33751
+ }
33688
33752
  const parseBoolean = (value) => value != null ? ["1", "true"].includes(value) : void 0;
33689
33753
  const booleanToString = (value) => value != null ? value ? "1" : "0" : void 0;
33690
33754
  const parseInteger = (value) => {
@@ -33696,9 +33760,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33696
33760
  const intValue = parseInteger(value);
33697
33761
  return intValue != void 0 ? String(intValue) : void 0;
33698
33762
  };
33699
- const XML_NODE_NAME$o = "w:caps";
33700
- const SD_ATTR_KEY$8 = "textTransform";
33701
- const encode$x = (params2, encodedAttrs = {}) => {
33763
+ const XML_NODE_NAME$l = "w:caps";
33764
+ const SD_ATTR_KEY$5 = "textTransform";
33765
+ const encode$u = (params2, encodedAttrs = {}) => {
33702
33766
  const { nodes } = params2;
33703
33767
  const node = nodes[0];
33704
33768
  if (!node) return void 0;
@@ -33710,31 +33774,31 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33710
33774
  }
33711
33775
  return {
33712
33776
  type: "attr",
33713
- xmlName: XML_NODE_NAME$o,
33714
- sdNodeOrKeyName: SD_ATTR_KEY$8,
33715
- attributes: { [SD_ATTR_KEY$8]: result }
33777
+ xmlName: XML_NODE_NAME$l,
33778
+ sdNodeOrKeyName: SD_ATTR_KEY$5,
33779
+ attributes: { [SD_ATTR_KEY$5]: result }
33716
33780
  };
33717
33781
  };
33718
- const config$l = {
33719
- xmlName: XML_NODE_NAME$o,
33720
- sdNodeOrKeyName: SD_ATTR_KEY$8,
33782
+ const config$k = {
33783
+ xmlName: XML_NODE_NAME$l,
33784
+ sdNodeOrKeyName: SD_ATTR_KEY$5,
33721
33785
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33722
- encode: encode$x,
33786
+ encode: encode$u,
33723
33787
  attributes: [createAttributeHandler("w:val")]
33724
33788
  };
33725
- const translator$$ = NodeTranslator.from(config$l);
33789
+ const translator$1e = NodeTranslator.from(config$k);
33726
33790
  const runPropertyTranslators = Object.freeze({
33727
- "w:b": translator$18,
33728
- "w:i": translator$17,
33729
- "w:u": translator$16,
33730
- "w:strike": translator$15,
33731
- "w:color": translator$14,
33732
- "w:highlight": translator$1b,
33733
- "w:rFonts": translator$13,
33734
- "w:rStyle": translator$12,
33735
- "w:sz": translator$11,
33736
- "w:szCs": translator$10,
33737
- "w:caps": translator$$
33791
+ "w:b": translator$1n,
33792
+ "w:i": translator$1m,
33793
+ "w:u": translator$1l,
33794
+ "w:strike": translator$1k,
33795
+ "w:color": translator$1j,
33796
+ "w:highlight": translator$1q,
33797
+ "w:rFonts": translator$1i,
33798
+ "w:rStyle": translator$1h,
33799
+ "w:sz": translator$1g,
33800
+ "w:szCs": translator$1f,
33801
+ "w:caps": translator$1e
33738
33802
  });
33739
33803
  const rawRunPropertyXmlNames = Object.freeze(["w:lang", "w:shd"]);
33740
33804
  const RAW_CHILD_NAME_SET = new Set(rawRunPropertyXmlNames);
@@ -33748,9 +33812,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33748
33812
  attributes: { ...candidate.attributes || {} }
33749
33813
  };
33750
33814
  };
33751
- const XML_NODE_NAME$n = "w:rPr";
33752
- const SD_ATTR_KEY$7 = "runProperties";
33753
- const encode$w = (params2) => {
33815
+ const XML_NODE_NAME$k = "w:rPr";
33816
+ const SD_ATTR_KEY$4 = "runProperties";
33817
+ const encode$t = (params2) => {
33754
33818
  const { nodes } = params2;
33755
33819
  const node = nodes?.[0] || {};
33756
33820
  const contents = Array.isArray(node.elements) ? node.elements : [];
@@ -33784,16 +33848,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
33784
33848
  attributes: runPropsArray
33785
33849
  };
33786
33850
  };
33787
- const config$k = {
33788
- xmlName: XML_NODE_NAME$n,
33789
- sdNodeOrKeyName: SD_ATTR_KEY$7,
33851
+ const config$j = {
33852
+ xmlName: XML_NODE_NAME$k,
33853
+ sdNodeOrKeyName: SD_ATTR_KEY$4,
33790
33854
  type: NodeTranslator.translatorTypes.ATTRIBUTE,
33791
- encode: encode$w
33855
+ encode: encode$t
33792
33856
  };
33793
- const translator$_ = NodeTranslator.from(config$k);
33857
+ const translator$1d = NodeTranslator.from(config$j);
33794
33858
  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;
33795
33859
  const containsEastAsianCharacters = (text) => EAST_ASIAN_CHARACTER_REGEX.test(text);
33796
- const collectRunProperties = (params2, rPrNode, translator2 = translator$_) => {
33860
+ const collectRunProperties = (params2, rPrNode, translator2 = translator$1d) => {
33797
33861
  if (!rPrNode) return { entries: [], hadRPr: false, styleChangeMarks: [] };
33798
33862
  const result = translator2.encode({ ...params2, nodes: [rPrNode] }) || {};
33799
33863
  let entries = [];
@@ -34266,7 +34330,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34266
34330
  }
34267
34331
  return runs;
34268
34332
  };
34269
- const XML_NODE_NAME$m = "w:hyperlink";
34333
+ const XML_NODE_NAME$j = "w:hyperlink";
34270
34334
  const SD_NODE_NAME$e = "link";
34271
34335
  const _createAttributeHandler = (xmlName, sdName) => ({
34272
34336
  xmlName,
@@ -34287,7 +34351,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34287
34351
  _createAttributeHandler("r:id", "rId"),
34288
34352
  _createAttributeHandler("w:tgtFrame", "target")
34289
34353
  ];
34290
- const encode$v = (params2, encodedAttrs) => {
34354
+ const encode$s = (params2, encodedAttrs) => {
34291
34355
  const { nodes, docx, nodeListHandler } = params2;
34292
34356
  const node = nodes[0];
34293
34357
  let href = _resolveHref(docx, encodedAttrs);
@@ -34321,7 +34385,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34321
34385
  }
34322
34386
  return href;
34323
34387
  };
34324
- function decode$x(params2) {
34388
+ function decode$u(params2) {
34325
34389
  const { hyperlinkGroup = [params2.node] } = params2.extraParams || {};
34326
34390
  const node = hyperlinkGroup[0];
34327
34391
  const linkMark = node.marks.find((m2) => m2.type === "link");
@@ -34370,55 +34434,55 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34370
34434
  });
34371
34435
  return id;
34372
34436
  }
34373
- const config$j = {
34374
- xmlName: XML_NODE_NAME$m,
34437
+ const config$i = {
34438
+ xmlName: XML_NODE_NAME$j,
34375
34439
  sdNodeOrKeyName: SD_NODE_NAME$e,
34376
34440
  type: NodeTranslator.translatorTypes.NODE,
34377
- encode: encode$v,
34378
- decode: decode$x,
34441
+ encode: encode$s,
34442
+ decode: decode$u,
34379
34443
  attributes: validXmlAttributes$d
34380
34444
  };
34381
- const translator$Z = NodeTranslator.from(config$j);
34382
- const encode$u = (attributes) => {
34445
+ const translator$1c = NodeTranslator.from(config$i);
34446
+ const encode$r = (attributes) => {
34383
34447
  return attributes["w:rsidR"];
34384
34448
  };
34385
- const decode$w = (attrs) => {
34449
+ const decode$t = (attrs) => {
34386
34450
  return attrs.rsidR;
34387
34451
  };
34388
34452
  const attrConfig$a = Object.freeze({
34389
34453
  xmlName: "w:rsidR",
34390
34454
  sdName: "rsidR",
34391
- encode: encode$u,
34392
- decode: decode$w
34455
+ encode: encode$r,
34456
+ decode: decode$t
34393
34457
  });
34394
- const encode$t = (attributes) => {
34458
+ const encode$q = (attributes) => {
34395
34459
  return attributes["w:rsidRPr"];
34396
34460
  };
34397
- const decode$v = (attrs) => {
34461
+ const decode$s = (attrs) => {
34398
34462
  return attrs.rsidRPr;
34399
34463
  };
34400
34464
  const attrConfig$9 = Object.freeze({
34401
34465
  xmlName: "w:rsidRPr",
34402
34466
  sdName: "rsidRPr",
34403
- encode: encode$t,
34404
- decode: decode$v
34467
+ encode: encode$q,
34468
+ decode: decode$s
34405
34469
  });
34406
- const encode$s = (attributes) => {
34470
+ const encode$p = (attributes) => {
34407
34471
  return attributes["w:rsidDel"];
34408
34472
  };
34409
- const decode$u = (attrs) => {
34473
+ const decode$r = (attrs) => {
34410
34474
  return attrs.rsidDel;
34411
34475
  };
34412
34476
  const attrConfig$8 = Object.freeze({
34413
34477
  xmlName: "w:rsidDel",
34414
34478
  sdName: "rsidDel",
34415
- encode: encode$s,
34416
- decode: decode$u
34479
+ encode: encode$p,
34480
+ decode: decode$r
34417
34481
  });
34418
34482
  const validXmlAttributes$c = [attrConfig$a, attrConfig$9, attrConfig$8];
34419
- const XML_NODE_NAME$l = "w:r";
34483
+ const XML_NODE_NAME$i = "w:r";
34420
34484
  const SD_KEY_NAME = "run";
34421
- const encode$r = (params2, encodedAttrs = {}) => {
34485
+ const encode$o = (params2, encodedAttrs = {}) => {
34422
34486
  const { nodes = [], nodeListHandler } = params2 || {};
34423
34487
  const runNode = nodes[0];
34424
34488
  if (!runNode) return void 0;
@@ -34466,7 +34530,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34466
34530
  }
34467
34531
  return runNodeResult;
34468
34532
  };
34469
- const decode$t = (params2, decodedAttrs = {}) => {
34533
+ const decode$q = (params2, decodedAttrs = {}) => {
34470
34534
  const { node } = params2 || {};
34471
34535
  if (!node) return void 0;
34472
34536
  const isLinkNode = node.marks?.some((m2) => m2.type === "link");
@@ -34475,7 +34539,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34475
34539
  ...params2.extraParams,
34476
34540
  linkProcessed: true
34477
34541
  };
34478
- return translator$Z.decode({ ...params2, extraParams });
34542
+ return translator$1c.decode({ ...params2, extraParams });
34479
34543
  }
34480
34544
  const { runNode: runNodeForExport, trackingMarksByType } = prepareRunTrackingContext(node);
34481
34545
  const runAttrs = runNodeForExport.attrs || {};
@@ -34531,7 +34595,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34531
34595
  runs.push(trackedClone);
34532
34596
  return;
34533
34597
  }
34534
- const runWrapper = { name: XML_NODE_NAME$l, elements: [] };
34598
+ const runWrapper = { name: XML_NODE_NAME$i, elements: [] };
34535
34599
  applyBaseRunProps(runWrapper);
34536
34600
  if (!Array.isArray(runWrapper.elements)) runWrapper.elements = [];
34537
34601
  runWrapper.elements.push(cloneXmlNode(child));
@@ -34539,7 +34603,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34539
34603
  });
34540
34604
  const trackedRuns = ensureTrackedWrapper(runs, trackingMarksByType);
34541
34605
  if (!trackedRuns.length) {
34542
- const emptyRun = { name: XML_NODE_NAME$l, elements: [] };
34606
+ const emptyRun = { name: XML_NODE_NAME$i, elements: [] };
34543
34607
  applyBaseRunProps(emptyRun);
34544
34608
  trackedRuns.push(emptyRun);
34545
34609
  }
@@ -34553,15 +34617,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34553
34617
  }
34554
34618
  return trackedRuns;
34555
34619
  };
34556
- const config$i = {
34557
- xmlName: XML_NODE_NAME$l,
34620
+ const config$h = {
34621
+ xmlName: XML_NODE_NAME$i,
34558
34622
  sdNodeOrKeyName: SD_KEY_NAME,
34559
34623
  type: NodeTranslator.translatorTypes.NODE,
34560
- encode: encode$r,
34561
- decode: decode$t,
34624
+ encode: encode$o,
34625
+ decode: decode$q,
34562
34626
  attributes: validXmlAttributes$c
34563
34627
  };
34564
- const translator$Y = NodeTranslator.from(config$i);
34628
+ const translator$1b = NodeTranslator.from(config$h);
34565
34629
  function preProcessVerticalMergeCells(table, { editorSchema }) {
34566
34630
  if (!table || !Array.isArray(table.content)) {
34567
34631
  return table;
@@ -34602,13 +34666,13 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34602
34666
  }
34603
34667
  return table;
34604
34668
  }
34605
- const translator$X = NodeTranslator.from({
34669
+ const translator$1a = NodeTranslator.from({
34606
34670
  xmlName: "w:cantSplit",
34607
34671
  sdNodeOrKeyName: "cantSplit",
34608
34672
  encode: ({ nodes }) => ["1", "true"].includes(nodes[0].attributes?.["w:val"] ?? "1"),
34609
34673
  decode: ({ node }) => node.attrs?.cantSplit ? { attributes: {} } : void 0
34610
34674
  });
34611
- const translator$W = NodeTranslator.from({
34675
+ const translator$19 = NodeTranslator.from({
34612
34676
  xmlName: "w:cnfStyle",
34613
34677
  sdNodeOrKeyName: "cnfStyle",
34614
34678
  attributes: [
@@ -34634,8 +34698,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34634
34698
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34635
34699
  }
34636
34700
  });
34637
- const translator$V = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
34638
- const translator$U = NodeTranslator.from(
34701
+ const translator$18 = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
34702
+ const translator$17 = NodeTranslator.from(
34639
34703
  createSingleAttrPropertyHandler(
34640
34704
  "w:gridAfter",
34641
34705
  null,
@@ -34644,7 +34708,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34644
34708
  (v2) => integerToString(v2)
34645
34709
  )
34646
34710
  );
34647
- const translator$T = NodeTranslator.from(
34711
+ const translator$16 = NodeTranslator.from(
34648
34712
  createSingleAttrPropertyHandler(
34649
34713
  "w:gridBefore",
34650
34714
  null,
@@ -34653,21 +34717,21 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34653
34717
  (v2) => integerToString(v2)
34654
34718
  )
34655
34719
  );
34656
- const translator$S = NodeTranslator.from({
34720
+ const translator$15 = NodeTranslator.from({
34657
34721
  xmlName: "w:hidden",
34658
34722
  sdNodeOrKeyName: "hidden",
34659
34723
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34660
34724
  decode: ({ node }) => node.attrs.hidden ? { attributes: {} } : void 0
34661
34725
  });
34662
- const translator$R = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification"));
34663
- const translator$Q = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "tableCellSpacing"));
34664
- const translator$P = NodeTranslator.from({
34726
+ const translator$14 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification"));
34727
+ const translator$13 = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "tableCellSpacing"));
34728
+ const translator$12 = NodeTranslator.from({
34665
34729
  xmlName: "w:tblHeader",
34666
34730
  sdNodeOrKeyName: "repeatHeader",
34667
34731
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34668
34732
  decode: ({ node }) => node.attrs.repeatHeader ? { attributes: {} } : void 0
34669
34733
  });
34670
- const translator$O = NodeTranslator.from({
34734
+ const translator$11 = NodeTranslator.from({
34671
34735
  xmlName: "w:trHeight",
34672
34736
  sdNodeOrKeyName: "rowHeight",
34673
34737
  encode: ({ nodes }) => {
@@ -34694,108 +34758,164 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34694
34758
  return Object.keys(heightAttrs).length > 0 ? { attributes: heightAttrs } : void 0;
34695
34759
  }
34696
34760
  });
34697
- const translator$N = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
34698
- const translator$M = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
34699
- const XML_NODE_NAME$k = "w:trPr";
34700
- const SD_ATTR_KEY$6 = "tableRowProperties";
34701
- const encode$q = (params2) => {
34702
- const { nodes } = params2;
34703
- const node = nodes[0];
34704
- let attributes = {
34761
+ const translator$10 = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
34762
+ const translator$$ = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
34763
+ const propertyTranslators$6 = [
34764
+ translator$1a,
34765
+ translator$19,
34766
+ translator$18,
34767
+ translator$17,
34768
+ translator$16,
34769
+ translator$15,
34770
+ translator$14,
34771
+ translator$13,
34772
+ translator$12,
34773
+ translator$11,
34774
+ translator$10,
34775
+ translator$$
34776
+ ];
34777
+ const translator$_ = NodeTranslator.from(
34778
+ createNestedPropertiesTranslator("w:trPr", "tableRowProperties", propertyTranslators$6, {
34705
34779
  cantSplit: false,
34706
34780
  hidden: false,
34707
34781
  repeatHeader: false
34708
- };
34709
- attributes = {
34710
- ...attributes,
34711
- ...encodeProperties(node, propertyTranslatorsByXmlName$2)
34712
- };
34782
+ })
34783
+ );
34784
+ const createPlaceholderCell = (gridWidth, reason) => {
34785
+ const safeWidth = Number.isFinite(gridWidth) ? gridWidth : 0;
34786
+ const noBorder = { val: "none", size: 0 };
34713
34787
  return {
34714
- type: NodeTranslator.translatorTypes.ATTRIBUTE,
34715
- xmlName: XML_NODE_NAME$k,
34716
- sdNodeOrKeyName: SD_ATTR_KEY$6,
34717
- attributes
34788
+ type: "tableCell",
34789
+ attrs: {
34790
+ colspan: 1,
34791
+ rowspan: 1,
34792
+ colwidth: [safeWidth],
34793
+ __placeholder: reason,
34794
+ borders: {
34795
+ top: { ...noBorder },
34796
+ right: { ...noBorder },
34797
+ bottom: { ...noBorder },
34798
+ left: { ...noBorder }
34799
+ }
34800
+ },
34801
+ content: [{ type: "paragraph", content: [] }]
34718
34802
  };
34719
34803
  };
34720
- const decode$s = (params2) => {
34721
- const { tableRowProperties = {} } = params2.node.attrs || {};
34722
- const elements = decodeProperties(propertyTranslatorsBySdName$2, tableRowProperties);
34723
- const newNode = {
34724
- name: "w:trPr",
34725
- type: "element",
34726
- attributes: {},
34727
- elements
34728
- };
34729
- return newNode;
34804
+ const advancePastRowSpans = (pendingRowSpans, startIndex, totalColumns) => {
34805
+ let index2 = startIndex;
34806
+ while (index2 < totalColumns && pendingRowSpans[index2] > 0) {
34807
+ pendingRowSpans[index2] -= 1;
34808
+ index2 += 1;
34809
+ }
34810
+ return index2;
34730
34811
  };
34731
- const propertyTranslators$3 = [
34732
- translator$X,
34733
- translator$W,
34734
- translator$V,
34735
- translator$U,
34736
- translator$T,
34737
- translator$S,
34738
- translator$R,
34739
- translator$Q,
34740
- translator$P,
34741
- translator$O,
34742
- translator$N,
34743
- translator$M
34744
- ];
34745
- const propertyTranslatorsByXmlName$2 = {};
34746
- propertyTranslators$3.forEach((translator2) => {
34747
- propertyTranslatorsByXmlName$2[translator2.xmlName] = translator2;
34748
- });
34749
- const propertyTranslatorsBySdName$2 = {};
34750
- propertyTranslators$3.forEach((translator2) => {
34751
- propertyTranslatorsBySdName$2[translator2.sdNodeOrKeyName] = translator2;
34752
- });
34753
- const config$h = {
34754
- xmlName: XML_NODE_NAME$k,
34755
- sdNodeOrKeyName: SD_ATTR_KEY$6,
34756
- type: NodeTranslator.translatorTypes.ATTRIBUTE,
34757
- encode: encode$q,
34758
- decode: decode$s
34812
+ const fillPlaceholderColumns = ({
34813
+ content,
34814
+ pendingRowSpans,
34815
+ currentIndex,
34816
+ targetIndex,
34817
+ totalColumns,
34818
+ gridColumnWidths,
34819
+ reason
34820
+ }) => {
34821
+ let index2 = currentIndex;
34822
+ while (index2 < targetIndex && index2 < totalColumns) {
34823
+ if (pendingRowSpans[index2] > 0) {
34824
+ pendingRowSpans[index2] -= 1;
34825
+ index2 += 1;
34826
+ continue;
34827
+ }
34828
+ const width = Array.isArray(gridColumnWidths) ? gridColumnWidths[index2] ?? 0 : 0;
34829
+ content.push(createPlaceholderCell(width, reason));
34830
+ index2 += 1;
34831
+ }
34832
+ return index2;
34833
+ };
34834
+ const isPlaceholderCell = (cell) => {
34835
+ if (!cell) return false;
34836
+ if (cell.attrs?.__placeholder) return true;
34837
+ const widths = cell.attrs?.colwidth;
34838
+ if (Array.isArray(widths) && widths.length > 0) {
34839
+ const hasMeaningfulWidth = widths.some(
34840
+ (value) => typeof value === "number" && Number.isFinite(value) && Math.abs(value) > 1
34841
+ );
34842
+ if (!hasMeaningfulWidth) return true;
34843
+ }
34844
+ return false;
34759
34845
  };
34760
- const translator$L = NodeTranslator.from(config$h);
34761
- const XML_NODE_NAME$j = "w:tr";
34846
+ const XML_NODE_NAME$h = "w:tr";
34762
34847
  const SD_NODE_NAME$d = "tableRow";
34763
34848
  const validXmlAttributes$b = ["w:rsidDel", "w:rsidR", "w:rsidRPr", "w:rsidTr", "w14:paraId", "w14:textId"].map(
34764
34849
  (xmlName) => createAttributeHandler(xmlName)
34765
34850
  );
34766
- const encode$p = (params2, encodedAttrs) => {
34851
+ const encode$n = (params2, encodedAttrs) => {
34767
34852
  const { row } = params2.extraParams;
34768
34853
  let tableRowProperties = {};
34769
34854
  const tPr = row.elements.find((el) => el.name === "w:trPr");
34770
34855
  if (tPr) {
34771
- ({ attributes: tableRowProperties } = translator$L.encode({
34856
+ tableRowProperties = translator$_.encode({
34772
34857
  ...params2,
34773
34858
  nodes: [tPr]
34774
- }));
34859
+ });
34775
34860
  }
34861
+ const gridBeforeRaw = tableRowProperties?.["gridBefore"];
34862
+ const safeGridBefore = typeof gridBeforeRaw === "number" && Number.isFinite(gridBeforeRaw) && gridBeforeRaw > 0 ? gridBeforeRaw : 0;
34776
34863
  encodedAttrs["tableRowProperties"] = Object.freeze(tableRowProperties);
34777
34864
  encodedAttrs["rowHeight"] = twipsToPixels(tableRowProperties["rowHeight"]?.value);
34778
34865
  encodedAttrs["cantSplit"] = tableRowProperties["cantSplit"];
34779
- const { columnWidths: gridColumnWidths } = params2.extraParams;
34866
+ const { columnWidths: gridColumnWidths, activeRowSpans = [] } = params2.extraParams;
34867
+ const totalColumns = Array.isArray(gridColumnWidths) ? gridColumnWidths.length : 0;
34868
+ const pendingRowSpans = Array.isArray(activeRowSpans) ? activeRowSpans.slice() : [];
34869
+ while (pendingRowSpans.length < totalColumns) pendingRowSpans.push(0);
34780
34870
  const cellNodes = row.elements.filter((el) => el.name === "w:tc");
34871
+ const content = [];
34781
34872
  let currentColumnIndex = 0;
34782
- const content = cellNodes?.map((n) => {
34783
- let columnWidth = gridColumnWidths?.[currentColumnIndex] || null;
34873
+ const fillUntil = (target, reason) => {
34874
+ currentColumnIndex = fillPlaceholderColumns({
34875
+ content,
34876
+ pendingRowSpans,
34877
+ currentIndex: currentColumnIndex,
34878
+ targetIndex: target,
34879
+ totalColumns,
34880
+ gridColumnWidths,
34881
+ reason
34882
+ });
34883
+ };
34884
+ const skipOccupiedColumns = () => {
34885
+ currentColumnIndex = advancePastRowSpans(pendingRowSpans, currentColumnIndex, totalColumns);
34886
+ };
34887
+ fillUntil(safeGridBefore, "gridBefore");
34888
+ skipOccupiedColumns();
34889
+ cellNodes?.forEach((node) => {
34890
+ skipOccupiedColumns();
34891
+ const startColumn = currentColumnIndex;
34892
+ const columnWidth = gridColumnWidths?.[startColumn] || null;
34784
34893
  const result = translator$c.encode({
34785
34894
  ...params2,
34786
34895
  extraParams: {
34787
34896
  ...params2.extraParams,
34788
- node: n,
34789
- columnIndex: currentColumnIndex,
34897
+ node,
34898
+ columnIndex: startColumn,
34790
34899
  columnWidth
34791
34900
  }
34792
34901
  });
34793
- const tcPr = n.elements?.find((el) => el.name === "w:tcPr");
34794
- const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
34795
- const colspan = parseInt(colspanTag?.attributes["w:val"] || 1, 10);
34796
- currentColumnIndex += colspan;
34797
- return result;
34798
- }) || [];
34902
+ if (result) {
34903
+ content.push(result);
34904
+ const colspan = Math.max(1, result.attrs?.colspan || 1);
34905
+ const rowspan = Math.max(1, result.attrs?.rowspan || 1);
34906
+ if (rowspan > 1) {
34907
+ for (let offset2 = 0; offset2 < colspan; offset2 += 1) {
34908
+ const target = startColumn + offset2;
34909
+ if (target < pendingRowSpans.length) {
34910
+ pendingRowSpans[target] = Math.max(pendingRowSpans[target], rowspan - 1);
34911
+ }
34912
+ }
34913
+ }
34914
+ currentColumnIndex = startColumn + colspan;
34915
+ }
34916
+ });
34917
+ skipOccupiedColumns();
34918
+ fillUntil(totalColumns, "gridAfter");
34799
34919
  const newNode = {
34800
34920
  type: "tableRow",
34801
34921
  content,
@@ -34803,11 +34923,39 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34803
34923
  };
34804
34924
  return newNode;
34805
34925
  };
34806
- const decode$r = (params2, decodedAttrs) => {
34926
+ const decode$p = (params2, decodedAttrs) => {
34807
34927
  const { node } = params2;
34808
- const elements = translateChildNodes(params2);
34928
+ const cells = node.content || [];
34929
+ let leadingPlaceholders = 0;
34930
+ while (leadingPlaceholders < cells.length && isPlaceholderCell(cells[leadingPlaceholders])) {
34931
+ leadingPlaceholders += 1;
34932
+ }
34933
+ let trailingPlaceholders = 0;
34934
+ while (trailingPlaceholders < cells.length - leadingPlaceholders && isPlaceholderCell(cells[cells.length - 1 - trailingPlaceholders])) {
34935
+ trailingPlaceholders += 1;
34936
+ }
34937
+ const trimmedSlice = cells.slice(leadingPlaceholders, cells.length - trailingPlaceholders);
34938
+ const sanitizedCells = trimmedSlice.map((cell) => {
34939
+ if (cell?.attrs && "__placeholder" in cell.attrs) {
34940
+ const { __placeholder, ...rest } = cell.attrs;
34941
+ return { ...cell, attrs: rest };
34942
+ }
34943
+ return cell;
34944
+ });
34945
+ const trimmedContent = sanitizedCells.filter((_2, index2) => !isPlaceholderCell(trimmedSlice[index2]));
34946
+ const translateParams = {
34947
+ ...params2,
34948
+ node: { ...node, content: trimmedContent }
34949
+ };
34950
+ const elements = translateChildNodes(translateParams);
34809
34951
  if (node.attrs?.tableRowProperties) {
34810
34952
  const tableRowProperties = { ...node.attrs.tableRowProperties };
34953
+ if (leadingPlaceholders > 0) {
34954
+ tableRowProperties.gridBefore = leadingPlaceholders;
34955
+ }
34956
+ if (trailingPlaceholders > 0) {
34957
+ tableRowProperties.gridAfter = trailingPlaceholders;
34958
+ }
34811
34959
  if (node.attrs.rowHeight != null) {
34812
34960
  const rowHeightPixels = twipsToPixels(node.attrs.tableRowProperties["rowHeight"]?.value);
34813
34961
  if (rowHeightPixels !== node.attrs.rowHeight) {
@@ -34815,7 +34963,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34815
34963
  }
34816
34964
  }
34817
34965
  tableRowProperties["cantSplit"] = node.attrs["cantSplit"];
34818
- const trPr = translator$L.decode({
34966
+ const trPr = translator$_.decode({
34819
34967
  ...params2,
34820
34968
  node: { ...node, attrs: { ...node.attrs, tableRowProperties } }
34821
34969
  });
@@ -34828,21 +34976,21 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34828
34976
  };
34829
34977
  };
34830
34978
  const config$g = {
34831
- xmlName: XML_NODE_NAME$j,
34979
+ xmlName: XML_NODE_NAME$h,
34832
34980
  sdNodeOrKeyName: SD_NODE_NAME$d,
34833
34981
  type: NodeTranslator.translatorTypes.NODE,
34834
- encode: encode$p,
34835
- decode: decode$r,
34982
+ encode: encode$n,
34983
+ decode: decode$p,
34836
34984
  attributes: validXmlAttributes$b
34837
34985
  };
34838
- const translator$K = NodeTranslator.from(config$g);
34839
- const translator$J = NodeTranslator.from({
34986
+ const translator$Z = NodeTranslator.from(config$g);
34987
+ const translator$Y = NodeTranslator.from({
34840
34988
  xmlName: "w:bidiVisual",
34841
34989
  sdNodeOrKeyName: "rightToLeft",
34842
34990
  encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
34843
34991
  decode: ({ node }) => node.attrs.rightToLeft ? { attributes: {} } : void 0
34844
34992
  });
34845
- const translator$I = NodeTranslator.from({
34993
+ const translator$X = NodeTranslator.from({
34846
34994
  xmlName: "w:shd",
34847
34995
  sdNodeOrKeyName: "shading",
34848
34996
  attributes: [
@@ -34864,11 +35012,11 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34864
35012
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34865
35013
  }
34866
35014
  });
34867
- const translator$H = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblCaption", "caption"));
34868
- const translator$G = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblDescription", "description"));
34869
- const translator$F = NodeTranslator.from(createMeasurementPropertyHandler("w:tblInd", "tableIndent"));
34870
- const translator$E = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblLayout", "tableLayout", "w:type"));
34871
- const translator$D = NodeTranslator.from({
35015
+ const translator$W = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblCaption", "caption"));
35016
+ const translator$V = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblDescription", "description"));
35017
+ const translator$U = NodeTranslator.from(createMeasurementPropertyHandler("w:tblInd", "tableIndent"));
35018
+ const translator$T = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblLayout", "tableLayout", "w:type"));
35019
+ const translator$S = NodeTranslator.from({
34872
35020
  xmlName: "w:tblLook",
34873
35021
  sdNodeOrKeyName: "tblLook",
34874
35022
  attributes: ["w:firstColumn", "w:firstRow", "w:lastColumn", "w:lastRow", "w:noHBand", "w:noVBand"].map((attr) => createAttributeHandler(attr, null, parseBoolean, booleanToString)).concat([createAttributeHandler("w:val")]),
@@ -34880,16 +35028,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34880
35028
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34881
35029
  }
34882
35030
  });
34883
- const translator$C = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblOverlap", "overlap"));
34884
- const translator$B = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblStyle", "tableStyleId"));
34885
- const translator$A = NodeTranslator.from(
35031
+ const translator$R = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblOverlap", "overlap"));
35032
+ const translator$Q = NodeTranslator.from(createSingleAttrPropertyHandler("w:tblStyle", "tableStyleId"));
35033
+ const translator$P = NodeTranslator.from(
34886
35034
  createSingleAttrPropertyHandler("w:tblStyleColBandSize", "tableStyleColBandSize")
34887
35035
  );
34888
- const translator$z = NodeTranslator.from(
35036
+ const translator$O = NodeTranslator.from(
34889
35037
  createSingleAttrPropertyHandler("w:tblStyleRowBandSize", "tableStyleRowBandSize")
34890
35038
  );
34891
- const translator$y = NodeTranslator.from(createMeasurementPropertyHandler("w:tblW", "tableWidth"));
34892
- const translator$x = NodeTranslator.from({
35039
+ const translator$N = NodeTranslator.from(createMeasurementPropertyHandler("w:tblW", "tableWidth"));
35040
+ const translator$M = NodeTranslator.from({
34893
35041
  xmlName: "w:tblpPr",
34894
35042
  sdNodeOrKeyName: "floatingTableProperties",
34895
35043
  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))),
@@ -34901,160 +35049,67 @@ Please report this to https://github.com/markedjs/marked.`, e) {
34901
35049
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : void 0;
34902
35050
  }
34903
35051
  });
34904
- const translator$w = NodeTranslator.from(createBorderPropertyHandler("w:bottom"));
34905
- const translator$v = NodeTranslator.from(createMeasurementPropertyHandler("w:bottom", "marginBottom"));
34906
- const translator$u = NodeTranslator.from(createBorderPropertyHandler("w:end"));
34907
- const translator$t = NodeTranslator.from(createMeasurementPropertyHandler("w:end", "marginEnd"));
34908
- const translator$s = NodeTranslator.from(createBorderPropertyHandler("w:insideH"));
34909
- const translator$r = NodeTranslator.from(createBorderPropertyHandler("w:insideV"));
34910
- const translator$q = NodeTranslator.from(createBorderPropertyHandler("w:left"));
34911
- const translator$p = NodeTranslator.from(createMeasurementPropertyHandler("w:left", "marginLeft"));
34912
- const translator$o = NodeTranslator.from(createBorderPropertyHandler("w:right"));
34913
- const translator$n = NodeTranslator.from(createMeasurementPropertyHandler("w:right", "marginRight"));
34914
- const translator$m = NodeTranslator.from(createBorderPropertyHandler("w:start"));
34915
- const translator$l = NodeTranslator.from(createMeasurementPropertyHandler("w:start", "marginStart"));
34916
- const translator$k = NodeTranslator.from(createBorderPropertyHandler("w:top"));
34917
- const translator$j = NodeTranslator.from(createMeasurementPropertyHandler("w:top", "marginTop"));
34918
- const XML_NODE_NAME$i = "w:tblBorders";
34919
- const SD_ATTR_KEY$5 = "borders";
34920
- const encode$o = (params2) => {
34921
- const { nodes } = params2;
34922
- const node = nodes[0];
34923
- const attributes = encodeProperties(node, tblBordersTranslatorsByXmlName);
34924
- return Object.keys(attributes).length > 0 ? attributes : void 0;
34925
- };
34926
- const decode$q = (params2) => {
34927
- const { borders = {} } = params2.node.attrs || {};
34928
- const elements = decodeProperties(tblBordersTranslatorsBySdName, borders);
34929
- const newNode = {
34930
- name: "w:tblBorders",
34931
- type: "element",
34932
- attributes: {},
34933
- elements
34934
- };
34935
- return newNode;
34936
- };
34937
- const propertyTranslators$2 = [
34938
- translator$w,
34939
- translator$u,
34940
- translator$s,
34941
- translator$r,
34942
- translator$q,
34943
- translator$o,
34944
- translator$m,
34945
- translator$k
34946
- ];
34947
- const tblBordersTranslatorsByXmlName = {};
34948
- const tblBordersTranslatorsBySdName = {};
34949
- propertyTranslators$2.forEach((translator2) => {
34950
- tblBordersTranslatorsByXmlName[translator2.xmlName] = translator2;
34951
- tblBordersTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
34952
- });
34953
- const translator$i = NodeTranslator.from({
34954
- xmlName: XML_NODE_NAME$i,
34955
- sdNodeOrKeyName: SD_ATTR_KEY$5,
34956
- type: NodeTranslator.translatorTypes.NODE,
34957
- attributes: [],
34958
- encode: encode$o,
34959
- decode: decode$q
34960
- });
34961
- const XML_NODE_NAME$h = "w:tblCellMar";
34962
- const SD_ATTR_KEY$4 = "cellMargins";
34963
- const encode$n = (params2) => {
34964
- const { nodes } = params2;
34965
- const node = nodes[0];
34966
- const attributes = encodeProperties(node, propertyTranslatorsByXmlName$1);
34967
- return Object.keys(attributes).length > 0 ? attributes : void 0;
34968
- };
34969
- const decode$p = (params2) => {
34970
- const { cellMargins = {} } = params2.node.attrs || {};
34971
- const elements = decodeProperties(propertyTranslatorsBySdName$1, cellMargins);
34972
- const newNode = {
34973
- name: XML_NODE_NAME$h,
34974
- type: "element",
34975
- attributes: {},
34976
- elements
34977
- };
34978
- return newNode;
34979
- };
34980
- const propertyTranslators$1 = [
34981
- translator$v,
34982
- translator$t,
34983
- translator$p,
34984
- translator$n,
34985
- translator$l,
34986
- translator$j
34987
- ];
34988
- const propertyTranslatorsByXmlName$1 = {};
34989
- const propertyTranslatorsBySdName$1 = {};
34990
- propertyTranslators$1.forEach((translator2) => {
34991
- propertyTranslatorsByXmlName$1[translator2.xmlName] = translator2;
34992
- propertyTranslatorsBySdName$1[translator2.sdNodeOrKeyName] = translator2;
34993
- });
34994
- const translator$h = NodeTranslator.from({
34995
- xmlName: XML_NODE_NAME$h,
34996
- sdNodeOrKeyName: SD_ATTR_KEY$4,
34997
- type: NodeTranslator.translatorTypes.NODE,
34998
- attributes: [],
34999
- encode: encode$n,
35000
- decode: decode$p
35001
- });
35002
- const XML_NODE_NAME$g = "w:tblPr";
35003
- const SD_ATTR_KEY$3 = "tableProperties";
35004
- const encode$m = (params2) => {
35005
- const { nodes } = params2;
35006
- const node = nodes[0];
35007
- const attributes = encodeProperties(node, propertyTranslatorsByXmlName);
35008
- return {
35009
- xmlName: XML_NODE_NAME$g,
35010
- sdNodeOrKeyName: SD_ATTR_KEY$3,
35011
- attributes
35012
- };
35013
- };
35014
- const decode$o = (params2) => {
35015
- const { tableProperties = {} } = params2.node.attrs || {};
35016
- const elements = decodeProperties(propertyTranslatorsBySdName, tableProperties);
35017
- const newNode = {
35018
- name: "w:tblPr",
35019
- type: "element",
35020
- attributes: {},
35021
- elements
35022
- };
35023
- return newNode;
35024
- };
35025
- const propertyTranslators = [
35052
+ const translator$L = NodeTranslator.from(createBorderPropertyHandler("w:bottom"));
35053
+ const translator$K = NodeTranslator.from(createMeasurementPropertyHandler("w:bottom", "marginBottom"));
35054
+ const translator$J = NodeTranslator.from(createBorderPropertyHandler("w:end"));
35055
+ const translator$I = NodeTranslator.from(createMeasurementPropertyHandler("w:end", "marginEnd"));
35056
+ const translator$H = NodeTranslator.from(createBorderPropertyHandler("w:insideH"));
35057
+ const translator$G = NodeTranslator.from(createBorderPropertyHandler("w:insideV"));
35058
+ const translator$F = NodeTranslator.from(createBorderPropertyHandler("w:left"));
35059
+ const translator$E = NodeTranslator.from(createMeasurementPropertyHandler("w:left", "marginLeft"));
35060
+ const translator$D = NodeTranslator.from(createBorderPropertyHandler("w:right"));
35061
+ const translator$C = NodeTranslator.from(createMeasurementPropertyHandler("w:right", "marginRight"));
35062
+ const translator$B = NodeTranslator.from(createBorderPropertyHandler("w:start"));
35063
+ const translator$A = NodeTranslator.from(createMeasurementPropertyHandler("w:start", "marginStart"));
35064
+ const translator$z = NodeTranslator.from(createBorderPropertyHandler("w:top"));
35065
+ const translator$y = NodeTranslator.from(createMeasurementPropertyHandler("w:top", "marginTop"));
35066
+ const propertyTranslators$5 = [
35067
+ translator$L,
35026
35068
  translator$J,
35027
- translator$R,
35028
- translator$I,
35029
35069
  translator$H,
35030
- translator$Q,
35031
35070
  translator$G,
35032
35071
  translator$F,
35033
- translator$E,
35034
35072
  translator$D,
35035
- translator$C,
35036
35073
  translator$B,
35074
+ translator$z
35075
+ ];
35076
+ const translator$x = NodeTranslator.from(
35077
+ createNestedPropertiesTranslator("w:tblBorders", "borders", propertyTranslators$5)
35078
+ );
35079
+ const propertyTranslators$4 = [
35080
+ translator$K,
35081
+ translator$I,
35082
+ translator$E,
35083
+ translator$C,
35037
35084
  translator$A,
35038
- translator$z,
35039
- translator$y,
35085
+ translator$y
35086
+ ];
35087
+ const translator$w = NodeTranslator.from(
35088
+ createNestedPropertiesTranslator("w:tblCellMar", "cellMargins", propertyTranslators$4)
35089
+ );
35090
+ const propertyTranslators$3 = [
35091
+ translator$Y,
35092
+ translator$14,
35093
+ translator$X,
35094
+ translator$W,
35095
+ translator$13,
35096
+ translator$V,
35097
+ translator$U,
35098
+ translator$T,
35099
+ translator$S,
35100
+ translator$R,
35101
+ translator$Q,
35102
+ translator$P,
35103
+ translator$O,
35104
+ translator$N,
35105
+ translator$M,
35040
35106
  translator$x,
35041
- translator$i,
35042
- translator$h
35107
+ translator$w
35043
35108
  ];
35044
- const propertyTranslatorsByXmlName = {};
35045
- const propertyTranslatorsBySdName = {};
35046
- propertyTranslators.forEach((translator2) => {
35047
- propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
35048
- propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
35049
- });
35050
- const config$f = {
35051
- xmlName: XML_NODE_NAME$g,
35052
- sdNodeOrKeyName: SD_ATTR_KEY$3,
35053
- encode: encode$m,
35054
- decode: decode$o
35055
- };
35056
- const translator$g = NodeTranslator.from(config$f);
35057
- const translator$f = NodeTranslator.from(
35109
+ const translator$v = NodeTranslator.from(
35110
+ createNestedPropertiesTranslator("w:tblPr", "tableProperties", propertyTranslators$3)
35111
+ );
35112
+ const translator$u = NodeTranslator.from(
35058
35113
  createSingleAttrPropertyHandler("w:gridCol", "col", "w:w", parseInteger, integerToString)
35059
35114
  );
35060
35115
  const DEFAULT_COLUMN_WIDTH_PX = 100;
@@ -35104,20 +35159,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35104
35159
  }
35105
35160
  return Math.max(fallbackWidthTwips, cellMinWidthTwips);
35106
35161
  };
35107
- const XML_NODE_NAME$f = "w:tblGrid";
35108
- const SD_ATTR_KEY$2 = "grid";
35162
+ const XML_NODE_NAME$g = "w:tblGrid";
35163
+ const SD_ATTR_KEY$3 = "grid";
35109
35164
  const cellMinWidth = pixelsToTwips(10);
35110
- const encode$l = (params2) => {
35165
+ const encode$m = (params2) => {
35111
35166
  const { nodes } = params2;
35112
35167
  const node = nodes[0];
35113
- const attributes = encodeProperties(node, { [translator$f.xmlName]: translator$f }, true);
35168
+ const attributes = encodeProperties(node, { [translator$u.xmlName]: translator$u }, true);
35114
35169
  return {
35115
- xmlName: XML_NODE_NAME$f,
35116
- sdNodeOrKeyName: SD_ATTR_KEY$2,
35170
+ xmlName: XML_NODE_NAME$g,
35171
+ sdNodeOrKeyName: SD_ATTR_KEY$3,
35117
35172
  attributes
35118
35173
  };
35119
35174
  };
35120
- const decode$n = (params2) => {
35175
+ const decode$o = (params2) => {
35121
35176
  const { grid: rawGrid } = params2.node.attrs || {};
35122
35177
  const grid = Array.isArray(rawGrid) ? rawGrid : [];
35123
35178
  const { firstRow = {} } = params2.extraParams || {};
@@ -35130,17 +35185,21 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35130
35185
  const fallbackColumnWidthTwips = resolveFallbackColumnWidthTwips(params2, totalColumns, cellMinWidth);
35131
35186
  const elements = [];
35132
35187
  let columnIndex = 0;
35133
- const pushColumn = (widthTwips) => {
35188
+ const pushColumn = (widthTwips, { enforceMinimum = false } = {}) => {
35134
35189
  let numericWidth = typeof widthTwips === "string" ? parseInt(widthTwips, 10) : widthTwips;
35190
+ let shouldEnforceMinimum = enforceMinimum;
35135
35191
  if (numericWidth == null || Number.isNaN(numericWidth) || numericWidth <= 0) {
35136
35192
  numericWidth = fallbackColumnWidthTwips;
35193
+ shouldEnforceMinimum = true;
35137
35194
  }
35138
- numericWidth = Math.max(numericWidth, cellMinWidth);
35139
- const decoded = translator$f.decode({
35195
+ const roundedWidth = Math.round(numericWidth);
35196
+ const minimumWidth = shouldEnforceMinimum ? cellMinWidth : 1;
35197
+ const safeWidth = Math.max(roundedWidth, minimumWidth);
35198
+ const decoded = translator$u.decode({
35140
35199
  node: { type: (
35141
35200
  /** @type {string} */
35142
- translator$f.sdNodeOrKeyName
35143
- ), attrs: { col: numericWidth } }
35201
+ translator$u.sdNodeOrKeyName
35202
+ ), attrs: { col: safeWidth } }
35144
35203
  });
35145
35204
  if (decoded) elements.push(decoded);
35146
35205
  };
@@ -35148,13 +35207,17 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35148
35207
  const { colspan = 1, colwidth } = cell?.attrs || {};
35149
35208
  const spanCount = Math.max(1, colspan);
35150
35209
  for (let span = 0; span < spanCount; span++) {
35151
- const cellWidthPixels = Array.isArray(colwidth) ? colwidth[span] : void 0;
35210
+ const rawWidth = Array.isArray(colwidth) ? colwidth[span] : void 0;
35211
+ const cellWidthPixels = typeof rawWidth === "number" && Number.isFinite(rawWidth) ? rawWidth : Number(rawWidth);
35212
+ const hasCellWidth = Number.isFinite(cellWidthPixels) && cellWidthPixels > 0;
35152
35213
  const colGridAttrs = grid?.[columnIndex] || {};
35153
35214
  const gridWidthTwips = normalizeTwipWidth(colGridAttrs.col);
35154
35215
  const gridWidthPixels = gridWidthTwips != null ? twipsToPixels(gridWidthTwips) : null;
35155
35216
  let cellWidthTwips;
35156
- if (cellWidthPixels != null) {
35157
- if (gridWidthTwips != null && gridWidthPixels === cellWidthPixels) {
35217
+ let enforceMinimum = false;
35218
+ if (hasCellWidth) {
35219
+ const tolerance = 0.5;
35220
+ if (gridWidthTwips != null && gridWidthPixels != null && Math.abs(gridWidthPixels - cellWidthPixels) <= tolerance) {
35158
35221
  cellWidthTwips = gridWidthTwips;
35159
35222
  } else {
35160
35223
  cellWidthTwips = pixelsToTwips(cellWidthPixels);
@@ -35163,8 +35226,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35163
35226
  cellWidthTwips = gridWidthTwips;
35164
35227
  } else {
35165
35228
  cellWidthTwips = fallbackColumnWidthTwips;
35229
+ enforceMinimum = true;
35166
35230
  }
35167
- pushColumn(cellWidthTwips);
35231
+ pushColumn(cellWidthTwips, { enforceMinimum });
35168
35232
  columnIndex++;
35169
35233
  }
35170
35234
  });
@@ -35174,19 +35238,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35174
35238
  columnIndex++;
35175
35239
  }
35176
35240
  const newNode = {
35177
- name: XML_NODE_NAME$f,
35241
+ name: XML_NODE_NAME$g,
35178
35242
  attributes: {},
35179
35243
  elements
35180
35244
  };
35181
35245
  return newNode;
35182
35246
  };
35183
- const config$e = {
35184
- xmlName: XML_NODE_NAME$f,
35185
- sdNodeOrKeyName: SD_ATTR_KEY$2,
35186
- encode: encode$l,
35187
- decode: decode$n
35247
+ const config$f = {
35248
+ xmlName: XML_NODE_NAME$g,
35249
+ sdNodeOrKeyName: SD_ATTR_KEY$3,
35250
+ encode: encode$m,
35251
+ decode: decode$o
35188
35252
  };
35189
- const translator$e = NodeTranslator.from(config$e);
35253
+ const translator$t = NodeTranslator.from(config$f);
35190
35254
  const DEFAULT_PAGE_WIDTH_TWIPS = 12240;
35191
35255
  const DEFAULT_PAGE_MARGIN_TWIPS = 1440;
35192
35256
  const DEFAULT_CONTENT_WIDTH_TWIPS = DEFAULT_PAGE_WIDTH_TWIPS - 2 * DEFAULT_PAGE_MARGIN_TWIPS;
@@ -35249,19 +35313,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35249
35313
  columnWidths: Array(columnCount).fill(fallbackColumnWidthPx)
35250
35314
  };
35251
35315
  };
35252
- const XML_NODE_NAME$e = "w:tbl";
35316
+ const XML_NODE_NAME$f = "w:tbl";
35253
35317
  const SD_NODE_NAME$c = "table";
35254
- const encode$k = (params2, encodedAttrs) => {
35318
+ const encode$l = (params2, encodedAttrs) => {
35255
35319
  const { nodes } = params2;
35256
35320
  const node = nodes[0];
35257
35321
  const tblPr = node.elements.find((el) => el.name === "w:tblPr");
35258
35322
  if (tblPr) {
35259
- const encodedProperties = translator$g.encode({ ...params2, nodes: [tblPr] });
35260
- encodedAttrs["tableProperties"] = encodedProperties?.attributes || {};
35323
+ const encodedProperties = translator$v.encode({ ...params2, nodes: [tblPr] });
35324
+ encodedAttrs["tableProperties"] = encodedProperties || {};
35261
35325
  }
35262
35326
  const tblGrid = node.elements.find((el) => el.name === "w:tblGrid");
35263
35327
  if (tblGrid) {
35264
- encodedAttrs["grid"] = translator$e.encode({ ...params2, nodes: [tblGrid] }).attributes;
35328
+ encodedAttrs["grid"] = translator$t.encode({ ...params2, nodes: [tblGrid] }).attributes;
35265
35329
  }
35266
35330
  [
35267
35331
  "tableStyleId",
@@ -35327,8 +35391,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35327
35391
  }
35328
35392
  }
35329
35393
  const content = [];
35330
- rows.forEach((row) => {
35331
- const result = translator$K.encode({
35394
+ const totalColumns = columnWidths.length;
35395
+ const activeRowSpans = totalColumns > 0 ? new Array(totalColumns).fill(0) : [];
35396
+ rows.forEach((row, rowIndex) => {
35397
+ const result = translator$Z.encode({
35332
35398
  ...params2,
35333
35399
  nodes: [row],
35334
35400
  extraParams: {
@@ -35336,10 +35402,45 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35336
35402
  table: node,
35337
35403
  rowBorders: borderRowData,
35338
35404
  styleTag: tblStyleTag,
35339
- columnWidths
35405
+ columnWidths,
35406
+ activeRowSpans: activeRowSpans.slice(),
35407
+ rowIndex
35340
35408
  }
35341
35409
  });
35342
- if (result) content.push(result);
35410
+ if (result) {
35411
+ content.push(result);
35412
+ if (totalColumns > 0) {
35413
+ const activeRowSpansForCurrentRow = activeRowSpans.slice();
35414
+ for (let col = 0; col < totalColumns; col++) {
35415
+ if (activeRowSpans[col] > 0) {
35416
+ activeRowSpans[col] -= 1;
35417
+ }
35418
+ }
35419
+ let columnIndex = 0;
35420
+ const advanceColumnIndex = () => {
35421
+ while (columnIndex < totalColumns && activeRowSpansForCurrentRow[columnIndex] > 0) {
35422
+ columnIndex += 1;
35423
+ }
35424
+ };
35425
+ advanceColumnIndex();
35426
+ result.content?.forEach((cell) => {
35427
+ advanceColumnIndex();
35428
+ const colspan = Math.max(1, cell.attrs?.colspan || 1);
35429
+ const rowspan = Math.max(1, cell.attrs?.rowspan || 1);
35430
+ if (rowspan > 1) {
35431
+ for (let offset2 = 0; offset2 < colspan && columnIndex + offset2 < totalColumns; offset2++) {
35432
+ const targetIndex = columnIndex + offset2;
35433
+ const remainingRows = rowspan - 1;
35434
+ if (remainingRows > 0 && remainingRows > activeRowSpans[targetIndex]) {
35435
+ activeRowSpans[targetIndex] = remainingRows;
35436
+ }
35437
+ }
35438
+ }
35439
+ columnIndex += colspan;
35440
+ advanceColumnIndex();
35441
+ });
35442
+ }
35443
+ }
35343
35444
  });
35344
35445
  return {
35345
35446
  type: "table",
@@ -35347,13 +35448,13 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35347
35448
  attrs: encodedAttrs
35348
35449
  };
35349
35450
  };
35350
- const decode$m = (params2, decodedAttrs) => {
35451
+ const decode$n = (params2, decodedAttrs) => {
35351
35452
  params2.node = preProcessVerticalMergeCells(params2.node, params2);
35352
35453
  const { node } = params2;
35353
35454
  const elements = translateChildNodes(params2);
35354
35455
  const firstRow = node.content?.find((n) => n.type === "tableRow");
35355
35456
  const properties = node.attrs.grid;
35356
- const element = translator$e.decode({
35457
+ const element = translator$t.decode({
35357
35458
  ...params2,
35358
35459
  node: { ...node, attrs: { ...node.attrs, grid: properties } },
35359
35460
  extraParams: {
@@ -35363,7 +35464,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35363
35464
  if (element) elements.unshift(element);
35364
35465
  if (node.attrs?.tableProperties) {
35365
35466
  const properties2 = { ...node.attrs.tableProperties };
35366
- const element2 = translator$g.decode({
35467
+ const element2 = translator$v.decode({
35367
35468
  ...params2,
35368
35469
  node: { ...node, attrs: { ...node.attrs, tableProperties: properties2 } }
35369
35470
  });
@@ -35383,7 +35484,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35383
35484
  const color = attributes.color;
35384
35485
  const size2 = attributes.size;
35385
35486
  if (color && color !== "auto") attrs["color"] = color.startsWith("#") ? color : `#${color}`;
35386
- if (size2 && size2 !== "auto") attrs["size"] = eigthPointsToPixels(size2);
35487
+ if (size2 && size2 !== "auto") attrs["size"] = eighthPointsToPixels(size2);
35387
35488
  const rowBorderNames = ["insideH", "insideV"];
35388
35489
  if (rowBorderNames.includes(name)) rowBorders[name] = attrs;
35389
35490
  borders[name] = attrs;
@@ -35429,7 +35530,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35429
35530
  if (baseTblPr && baseTblPr.elements) {
35430
35531
  tblPr.elements.push(...baseTblPr.elements);
35431
35532
  }
35432
- const tableProperties = translator$g.encode({ ...params2, nodes: [tblPr] }).attributes;
35533
+ const tableProperties = translator$v.encode({ ...params2, nodes: [tblPr] });
35433
35534
  const { borders, rowBorders } = _processTableBorders(tableProperties.borders || {});
35434
35535
  if (borders) stylesToReturn.borders = borders;
35435
35536
  if (rowBorders) stylesToReturn.rowBorders = rowBorders;
@@ -35446,16 +35547,16 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35446
35547
  }
35447
35548
  return stylesToReturn;
35448
35549
  }
35449
- const config$d = {
35450
- xmlName: XML_NODE_NAME$e,
35550
+ const config$e = {
35551
+ xmlName: XML_NODE_NAME$f,
35451
35552
  sdNodeOrKeyName: SD_NODE_NAME$c,
35452
35553
  type: NodeTranslator.translatorTypes.NODE,
35453
- encode: encode$k,
35454
- decode: decode$m,
35554
+ encode: encode$l,
35555
+ decode: decode$n,
35455
35556
  attributes: []
35456
35557
  };
35457
- const translator$d = NodeTranslator.from(config$d);
35458
- const tableNodeHandlerEntity = generateV2HandlerEntity("tableNodeHandler", translator$d);
35558
+ const translator$s = NodeTranslator.from(config$e);
35559
+ const tableNodeHandlerEntity = generateV2HandlerEntity("tableNodeHandler", translator$s);
35459
35560
  function getReferencedTableStyles(tblStyleTag, docx) {
35460
35561
  if (!tblStyleTag) return null;
35461
35562
  const stylesToReturn = {};
@@ -35526,7 +35627,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35526
35627
  const color = attributes["w:color"];
35527
35628
  const size2 = attributes["w:sz"];
35528
35629
  if (color && color !== "auto") attrs["color"] = color.startsWith("#") ? color : `#${color}`;
35529
- if (size2 && size2 !== "auto") attrs["size"] = eigthPointsToPixels(size2);
35630
+ if (size2 && size2 !== "auto") attrs["size"] = eighthPointsToPixels(size2);
35530
35631
  const rowBorderNames = ["insideH", "insideV"];
35531
35632
  if (rowBorderNames.includes(borderName)) rowBorders[borderName] = attrs;
35532
35633
  borders[borderName] = attrs;
@@ -35536,6 +35637,125 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35536
35637
  rowBorders
35537
35638
  };
35538
35639
  }
35640
+ const translator$r = NodeTranslator.from(createMeasurementPropertyHandler("w:tcW", "cellWidth"));
35641
+ const translator$q = NodeTranslator.from(
35642
+ createSingleAttrPropertyHandler(
35643
+ "w:gridSpan",
35644
+ null,
35645
+ "w:val",
35646
+ (v2) => parseInteger(v2) ?? void 0,
35647
+ (v2) => integerToString(v2)
35648
+ )
35649
+ );
35650
+ const translator$p = NodeTranslator.from(createSingleAttrPropertyHandler("w:vMerge"));
35651
+ const translator$o = NodeTranslator.from(createBorderPropertyHandler("w:tl2br"));
35652
+ const translator$n = NodeTranslator.from(createBorderPropertyHandler("w:tr2bl"));
35653
+ const propertyTranslators$2 = [
35654
+ translator$z,
35655
+ translator$B,
35656
+ translator$F,
35657
+ translator$L,
35658
+ translator$J,
35659
+ translator$D,
35660
+ translator$H,
35661
+ translator$G,
35662
+ translator$o,
35663
+ translator$n
35664
+ ];
35665
+ const translator$m = NodeTranslator.from(
35666
+ createNestedPropertiesTranslator("w:tcBorders", "borders", propertyTranslators$2)
35667
+ );
35668
+ const translator$l = NodeTranslator.from(
35669
+ createSingleAttrPropertyHandler(
35670
+ "w:noWrap",
35671
+ null,
35672
+ "w:val",
35673
+ (v2) => parseBoolean(v2 ?? "true"),
35674
+ (v2) => booleanToString(v2)
35675
+ )
35676
+ );
35677
+ const propertyTranslators$1 = [
35678
+ translator$K,
35679
+ translator$I,
35680
+ translator$E,
35681
+ translator$C,
35682
+ translator$A,
35683
+ translator$y
35684
+ ];
35685
+ const translator$k = NodeTranslator.from(
35686
+ createNestedPropertiesTranslator("w:tcMar", "cellMargins", propertyTranslators$1)
35687
+ );
35688
+ const translator$j = NodeTranslator.from(createSingleAttrPropertyHandler("w:textDirection"));
35689
+ const translator$i = NodeTranslator.from(
35690
+ createSingleAttrPropertyHandler(
35691
+ "w:tcFitText",
35692
+ null,
35693
+ "w:val",
35694
+ (v2) => parseBoolean(v2 ?? "true"),
35695
+ (v2) => booleanToString(v2)
35696
+ )
35697
+ );
35698
+ const translator$h = NodeTranslator.from(createSingleAttrPropertyHandler("w:vAlign"));
35699
+ const translator$g = NodeTranslator.from(
35700
+ createSingleAttrPropertyHandler(
35701
+ "w:hideMark",
35702
+ null,
35703
+ "w:val",
35704
+ (v2) => parseBoolean(v2 ?? "true"),
35705
+ (v2) => booleanToString(v2)
35706
+ )
35707
+ );
35708
+ const translator$f = NodeTranslator.from(createSingleAttrPropertyHandler("w:header"));
35709
+ const XML_NODE_NAME$e = "w:headers";
35710
+ const SD_ATTR_KEY$2 = "headers";
35711
+ const encode$k = (params2) => {
35712
+ const { nodes } = params2;
35713
+ const node = nodes[0];
35714
+ const attributes = encodeProperties(node, { [translator$f.xmlName]: translator$f }, true);
35715
+ return {
35716
+ xmlName: XML_NODE_NAME$e,
35717
+ sdNodeOrKeyName: SD_ATTR_KEY$2,
35718
+ attributes
35719
+ };
35720
+ };
35721
+ const decode$m = (params2) => {
35722
+ const { headers = [] } = params2.node.attrs || {};
35723
+ const newNode = {
35724
+ name: XML_NODE_NAME$e,
35725
+ attributes: {},
35726
+ elements: headers.map(
35727
+ (header) => translator$f.decode({
35728
+ node: { type: "header", attrs: header }
35729
+ })
35730
+ )
35731
+ };
35732
+ return newNode;
35733
+ };
35734
+ const config$d = {
35735
+ xmlName: XML_NODE_NAME$e,
35736
+ sdNodeOrKeyName: SD_ATTR_KEY$2,
35737
+ encode: encode$k,
35738
+ decode: decode$m
35739
+ };
35740
+ const translator$e = NodeTranslator.from(config$d);
35741
+ const propertyTranslators = [
35742
+ translator$19,
35743
+ translator$r,
35744
+ translator$q,
35745
+ translator$p,
35746
+ translator$m,
35747
+ translator$X,
35748
+ translator$l,
35749
+ translator$k,
35750
+ translator$j,
35751
+ translator$i,
35752
+ translator$h,
35753
+ translator$g,
35754
+ translator$e
35755
+ ];
35756
+ const translator$d = NodeTranslator.from(
35757
+ createNestedPropertiesTranslator("w:tcPr", "tableCellProperties", propertyTranslators)
35758
+ );
35539
35759
  function handleTableCellNode({
35540
35760
  params: params2,
35541
35761
  node,
@@ -35548,8 +35768,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35548
35768
  allColumnWidths = []
35549
35769
  }) {
35550
35770
  const { docx, nodeListHandler } = params2;
35771
+ const attributes = {};
35551
35772
  const tcPr = node.elements.find((el) => el.name === "w:tcPr");
35552
- const borders = tcPr?.elements?.find((el) => el.name === "w:tcBorders");
35773
+ const tableCellProperties = tcPr ? translator$d.encode({ ...params2, nodes: [tcPr] }) ?? {} : {};
35774
+ attributes["tableCellProperties"] = tableCellProperties;
35553
35775
  if (rowBorders?.insideH) {
35554
35776
  rowBorders["bottom"] = rowBorders.insideH;
35555
35777
  delete rowBorders.insideH;
@@ -35558,33 +35780,20 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35558
35780
  rowBorders["right"] = rowBorders.insideV;
35559
35781
  delete rowBorders?.insideV;
35560
35782
  }
35561
- const inlineBorders = processInlineCellBorders(borders, rowBorders);
35562
- const gridColumnWidths = allColumnWidths;
35563
- const tcWidth = tcPr?.elements?.find((el) => el.name === "w:tcW");
35564
- let width = tcWidth ? twipsToPixels(tcWidth.attributes["w:w"]) : null;
35565
- const widthType = tcWidth?.attributes["w:type"];
35783
+ if (rowBorders) attributes["borders"] = { ...rowBorders };
35784
+ const inlineBorders = processInlineCellBorders(tableCellProperties.borders, rowBorders);
35785
+ if (inlineBorders) attributes["borders"] = Object.assign(attributes["borders"] || {}, inlineBorders);
35786
+ const colspan = tableCellProperties.gridSpan;
35787
+ if (colspan && !isNaN(parseInt(colspan, 10))) attributes["colspan"] = parseInt(colspan, 10);
35788
+ let width = tableCellProperties.cellWidth?.value ? twipsToPixels(tableCellProperties.cellWidth?.value) : null;
35789
+ const widthType = tableCellProperties.cellWidth?.type;
35790
+ if (widthType) attributes["widthType"] = widthType;
35566
35791
  if (!width && columnWidth) width = columnWidth;
35567
- const vMerge = getTableCellMergeTag(node);
35568
- const { attributes: vMergeAttrs } = vMerge || {};
35569
- const backgroundColor = tcPr?.elements?.find((el) => el.name === "w:shd");
35570
- const background = {
35571
- color: backgroundColor?.attributes["w:fill"]
35572
- };
35573
- const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
35574
- const colspan = colspanTag?.attributes["w:val"];
35575
- const marginTag = tcPr?.elements?.find((el) => el.name === "w:tcMar");
35576
- const verticalAlignTag = tcPr?.elements?.find((el) => el.name === "w:vAlign");
35577
- const verticalAlign = verticalAlignTag?.attributes["w:val"] || "top";
35578
- const attributes = {};
35579
- const referencedStyles = getReferencedTableStyles(styleTag, docx) || {};
35580
- attributes.cellMargins = getTableCellMargins(marginTag, referencedStyles);
35581
- const { fontSize: fontSize2, fonts = {} } = referencedStyles;
35582
- const fontFamily2 = fonts["ascii"];
35583
35792
  if (width) {
35584
35793
  attributes["colwidth"] = [width];
35585
35794
  attributes["widthUnit"] = "px";
35586
- const defaultColWidths = gridColumnWidths;
35587
- const hasDefaultColWidths = gridColumnWidths && gridColumnWidths.length > 0;
35795
+ const defaultColWidths = allColumnWidths;
35796
+ const hasDefaultColWidths = allColumnWidths && allColumnWidths.length > 0;
35588
35797
  const colspanNum = parseInt(colspan || 1, 10);
35589
35798
  if (colspanNum && colspanNum > 1 && hasDefaultColWidths) {
35590
35799
  let colwidth = [];
@@ -35602,15 +35811,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35602
35811
  }
35603
35812
  }
35604
35813
  }
35605
- if (widthType) attributes["widthType"] = widthType;
35606
- if (colspan) attributes["colspan"] = parseInt(colspan, 10);
35607
- if (background) attributes["background"] = background;
35608
- attributes["verticalAlign"] = verticalAlign;
35814
+ const background = {
35815
+ color: tableCellProperties.shading?.fill
35816
+ };
35817
+ if (background.color) attributes["background"] = background;
35818
+ const verticalAlign = tableCellProperties.vAlign;
35819
+ if (verticalAlign) attributes["verticalAlign"] = verticalAlign;
35820
+ const referencedStyles = getReferencedTableStyles(styleTag, docx) || { fontSize: null, fonts: {}, cellMargins: {} };
35821
+ attributes.cellMargins = getTableCellMargins(tableCellProperties.cellMargins, referencedStyles);
35822
+ const { fontSize: fontSize2, fonts = {} } = referencedStyles;
35823
+ const fontFamily2 = fonts["ascii"];
35609
35824
  if (fontSize2) attributes["fontSize"] = fontSize2;
35610
- if (fontFamily2) attributes["fontFamily"] = fontFamily2["ascii"];
35611
- if (rowBorders) attributes["borders"] = { ...rowBorders };
35612
- if (inlineBorders) attributes["borders"] = Object.assign(attributes["borders"] || {}, inlineBorders);
35613
- if (vMergeAttrs && vMergeAttrs["w:val"] === "restart") {
35825
+ if (fontFamily2) attributes["fontFamily"] = fontFamily2;
35826
+ if (tableCellProperties.vMerge === "restart") {
35614
35827
  const rows = table.elements.filter((el) => el.name === "w:tr");
35615
35828
  const currentRowIndex = rows.findIndex((r2) => r2 === row);
35616
35829
  const remainingRows = rows.slice(currentRowIndex + 1);
@@ -35621,9 +35834,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35621
35834
  const firstCell = remainingRow.elements.findIndex((el) => el.name === "w:tc");
35622
35835
  const cellAtIndex = remainingRow.elements[firstCell + cellIndex];
35623
35836
  if (!cellAtIndex) break;
35624
- const vMerge2 = getTableCellMergeTag(cellAtIndex);
35625
- const { attributes: currentCellMergeAttrs } = vMerge2 || {};
35626
- if (!vMerge2 && !currentCellMergeAttrs || currentCellMergeAttrs && currentCellMergeAttrs["w:val"] === "restart") {
35837
+ const vMerge = getTableCellVMerge(cellAtIndex);
35838
+ if (!vMerge || vMerge === "restart") {
35627
35839
  break;
35628
35840
  }
35629
35841
  rowspan++;
@@ -35643,69 +35855,52 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35643
35855
  }
35644
35856
  const processInlineCellBorders = (borders, rowBorders) => {
35645
35857
  if (!borders) return null;
35646
- const processedBorders = {};
35647
- const inlineBorderBottom = processBorder(borders, "bottom", rowBorders);
35648
- if (inlineBorderBottom) processedBorders["bottom"] = inlineBorderBottom;
35649
- const inlineBorderTop = processBorder(borders, "top", rowBorders);
35650
- if (inlineBorderTop) processedBorders["top"] = inlineBorderTop;
35651
- const inlineBorderLeft = processBorder(borders, "left", rowBorders);
35652
- if (inlineBorderLeft) processedBorders["left"] = inlineBorderLeft;
35653
- const inlineBorderRight = processBorder(borders, "right", rowBorders);
35654
- if (inlineBorderRight) processedBorders["right"] = inlineBorderRight;
35655
- return processedBorders;
35656
- };
35657
- const processBorder = (borders, direction, rowBorders = {}) => {
35658
- const borderAttrs = borders?.elements?.find((el) => el.name === `w:${direction}`)?.attributes;
35659
- if (borderAttrs && borderAttrs["w:val"] !== "nil") {
35660
- const border = {};
35661
- const color = borderAttrs["w:color"];
35662
- if (color) border["color"] = color === "auto" ? "#000000" : `#${color}`;
35663
- const size2 = borderAttrs["w:sz"];
35664
- if (size2) border["size"] = eigthPointsToPixels(size2);
35665
- return border;
35666
- }
35667
- if (borderAttrs && borderAttrs["w:val"] === "nil") {
35668
- const border = Object.assign({}, rowBorders[direction] || {});
35669
- if (!Object.keys(border)) return null;
35670
- border["val"] = "none";
35671
- return border;
35672
- }
35673
- return null;
35858
+ return ["bottom", "top", "left", "right"].reduce((acc, direction) => {
35859
+ const borderAttrs = borders[direction];
35860
+ const rowBorderAttrs = rowBorders[direction];
35861
+ if (borderAttrs && borderAttrs["val"] !== "nil") {
35862
+ const color = borderAttrs["color"];
35863
+ let size2 = borderAttrs["size"];
35864
+ if (size2) size2 = eighthPointsToPixels(size2);
35865
+ acc[direction] = { color, size: size2, val: borderAttrs["val"] };
35866
+ return acc;
35867
+ }
35868
+ if (borderAttrs && borderAttrs["val"] === "nil") {
35869
+ const border = Object.assign({}, rowBorderAttrs || {});
35870
+ if (!Object.keys(border).length) {
35871
+ return acc;
35872
+ } else {
35873
+ border["val"] = "none";
35874
+ acc[direction] = border;
35875
+ return acc;
35876
+ }
35877
+ }
35878
+ return acc;
35879
+ }, {});
35674
35880
  };
35675
- const getTableCellMergeTag = (node) => {
35881
+ const getTableCellVMerge = (node) => {
35676
35882
  const tcPr = node.elements.find((el) => el.name === "w:tcPr");
35677
35883
  const vMerge = tcPr?.elements?.find((el) => el.name === "w:vMerge");
35678
- return vMerge;
35679
- };
35680
- const getTableCellMargins = (marginTag, referencedStyles) => {
35681
- const inlineMarginLeftTag = marginTag?.elements?.find((el) => el.name === "w:left");
35682
- const inlineMarginRightTag = marginTag?.elements?.find((el) => el.name === "w:right");
35683
- const inlineMarginTopTag = marginTag?.elements?.find((el) => el.name === "w:top");
35684
- const inlineMarginBottomTag = marginTag?.elements?.find((el) => el.name === "w:bottom");
35685
- const inlineMarginLeftValue = inlineMarginLeftTag?.attributes["w:w"];
35686
- const inlineMarginRightValue = inlineMarginRightTag?.attributes["w:w"];
35687
- const inlineMarginTopValue = inlineMarginTopTag?.attributes["w:w"];
35688
- const inlineMarginBottomValue = inlineMarginBottomTag?.attributes["w:w"];
35884
+ if (!vMerge) return null;
35885
+ return vMerge.attributes?.["w:val"] || "continue";
35886
+ };
35887
+ const getTableCellMargins = (inlineMargins, referencedStyles) => {
35689
35888
  const { cellMargins = {} } = referencedStyles;
35690
- const {
35691
- marginLeft: marginLeftStyle,
35692
- marginRight: marginRightStyle,
35693
- marginTop: marginTopStyle,
35694
- marginBottom: marginBottomStyle
35695
- } = cellMargins;
35696
- const resolveMargin = (inlineValue, styleValue) => {
35697
- if (inlineValue != null) return inlineValue;
35698
- if (styleValue == null) return void 0;
35699
- if (typeof styleValue === "object") return styleValue.value;
35700
- return styleValue;
35701
- };
35702
- const margins = {
35703
- left: twipsToPixels(resolveMargin(inlineMarginLeftValue, marginLeftStyle)),
35704
- right: twipsToPixels(resolveMargin(inlineMarginRightValue, marginRightStyle)),
35705
- top: twipsToPixels(resolveMargin(inlineMarginTopValue, marginTopStyle)),
35706
- bottom: twipsToPixels(resolveMargin(inlineMarginBottomValue, marginBottomStyle))
35707
- };
35708
- return margins;
35889
+ return ["left", "right", "top", "bottom"].reduce((acc, direction) => {
35890
+ const key2 = `margin${direction.charAt(0).toUpperCase() + direction.slice(1)}`;
35891
+ const inlineValue = inlineMargins ? inlineMargins?.[key2]?.value : null;
35892
+ const styleValue = cellMargins ? cellMargins[key2] : null;
35893
+ if (inlineValue != null) {
35894
+ acc[direction] = twipsToPixels(inlineValue);
35895
+ } else if (styleValue == null) {
35896
+ acc[direction] = void 0;
35897
+ } else if (typeof styleValue === "object") {
35898
+ acc[direction] = twipsToPixels(styleValue.value);
35899
+ } else {
35900
+ acc[direction] = twipsToPixels(styleValue);
35901
+ }
35902
+ return acc;
35903
+ }, {});
35709
35904
  };
35710
35905
  function translateTableCell(params2) {
35711
35906
  const elements = translateChildNodes({
@@ -35720,102 +35915,86 @@ Please report this to https://github.com/markedjs/marked.`, e) {
35720
35915
  };
35721
35916
  }
35722
35917
  function generateTableCellProperties(node) {
35723
- const elements = [];
35918
+ const tableCellProperties = { ...node.attrs?.tableCellProperties || {} };
35724
35919
  const { attrs } = node;
35725
- const { colwidth = [], cellWidthType = "dxa", background = {}, colspan, rowspan, widthUnit } = attrs;
35920
+ const { colwidth = [], cellWidthType = "dxa", widthUnit } = attrs;
35726
35921
  const colwidthSum = colwidth.reduce((acc, curr) => acc + curr, 0);
35727
- const cellWidthElement = {
35728
- name: "w:tcW",
35729
- attributes: {
35730
- "w:w": widthUnit === "px" ? pixelsToTwips(colwidthSum) : inchesToTwips(colwidthSum),
35731
- "w:type": cellWidthType
35732
- }
35733
- };
35734
- elements.push(cellWidthElement);
35735
- if (colspan) {
35736
- const gridSpanElement = {
35737
- name: "w:gridSpan",
35738
- attributes: { "w:val": `${colspan}` }
35922
+ const propertiesWidthPixels = twipsToPixels(tableCellProperties.cellWidth?.value);
35923
+ if (propertiesWidthPixels !== colwidthSum) {
35924
+ tableCellProperties["cellWidth"] = {
35925
+ value: widthUnit === "px" ? pixelsToTwips(colwidthSum) : inchesToTwips(colwidthSum),
35926
+ type: cellWidthType
35739
35927
  };
35740
- elements.push(gridSpanElement);
35741
35928
  }
35742
- const { color } = background || {};
35743
- if (color) {
35744
- const cellBgElement = {
35745
- name: "w:shd",
35746
- attributes: { "w:fill": color }
35747
- };
35748
- elements.push(cellBgElement);
35929
+ const { colspan } = attrs;
35930
+ if (colspan > 1 && tableCellProperties.gridSpan !== colspan) {
35931
+ tableCellProperties["gridSpan"] = colspan;
35932
+ } else if (!colspan || tableCellProperties?.gridSpan === 1) {
35933
+ delete tableCellProperties.gridSpan;
35934
+ }
35935
+ const { background = {} } = attrs;
35936
+ if (background?.color && tableCellProperties.shading?.fill !== background?.color) {
35937
+ tableCellProperties["shading"] = { fill: background.color };
35938
+ } else if (!background?.color && tableCellProperties?.shading?.fill) {
35939
+ delete tableCellProperties.shading;
35749
35940
  }
35750
35941
  const { cellMargins } = attrs;
35751
35942
  if (cellMargins) {
35752
- const cellMarginsElement = {
35753
- name: "w:tcMar",
35754
- elements: generateCellMargins(cellMargins)
35755
- };
35756
- elements.push(cellMarginsElement);
35943
+ ["left", "right", "top", "bottom"].forEach((side) => {
35944
+ const key2 = `margin${side.charAt(0).toUpperCase() + side.slice(1)}`;
35945
+ if (cellMargins[side] != null) {
35946
+ if (!tableCellProperties.cellMargins) tableCellProperties["cellMargins"] = {};
35947
+ let currentPropertyValuePixels = twipsToPixels(tableCellProperties.cellMargins?.[key2]?.value);
35948
+ if (currentPropertyValuePixels !== cellMargins[side]) {
35949
+ tableCellProperties.cellMargins[key2] = { value: pixelsToTwips(cellMargins[side]), type: "dxa" };
35950
+ }
35951
+ } else if (tableCellProperties?.cellMargins?.[key2]) {
35952
+ delete tableCellProperties.cellMargins[key2];
35953
+ }
35954
+ });
35757
35955
  }
35758
35956
  const { verticalAlign } = attrs;
35759
- if (verticalAlign) {
35760
- const vertAlignElement = {
35761
- name: "w:vAlign",
35762
- attributes: { "w:val": verticalAlign }
35763
- };
35764
- elements.push(vertAlignElement);
35765
- }
35766
- if (rowspan && rowspan > 1) {
35767
- const vMergeElement = {
35768
- name: "w:vMerge",
35769
- type: "element",
35770
- attributes: { "w:val": "restart" }
35771
- };
35772
- elements.push(vMergeElement);
35957
+ if (verticalAlign && verticalAlign !== tableCellProperties.vAlign) {
35958
+ tableCellProperties["vAlign"] = verticalAlign;
35959
+ } else if (!verticalAlign && tableCellProperties?.vAlign) {
35960
+ delete tableCellProperties.vAlign;
35961
+ }
35962
+ const { rowspan } = attrs;
35963
+ if (rowspan && rowspan > 1 && tableCellProperties.vMerge !== "restart") {
35964
+ tableCellProperties["vMerge"] = "restart";
35773
35965
  } else if (attrs.continueMerge) {
35774
- const vMergeElement = {
35775
- name: "w:vMerge",
35776
- type: "element"
35777
- };
35778
- elements.push(vMergeElement);
35966
+ tableCellProperties["vMerge"] = "continue";
35967
+ } else if (tableCellProperties?.vMerge) {
35968
+ delete tableCellProperties.vMerge;
35779
35969
  }
35780
35970
  const { borders = {} } = attrs;
35781
35971
  if (!!borders && Object.keys(borders).length) {
35782
- const cellBordersElement = {
35783
- name: "w:tcBorders",
35784
- elements: Object.entries(borders).map(([key2, value]) => {
35785
- if (!value.size || value.val === "none") {
35786
- return {
35787
- name: `w:${key2}`,
35788
- attributes: {
35789
- "w:val": "nil"
35790
- }
35972
+ ["top", "bottom", "left", "right"].forEach((side) => {
35973
+ if (borders[side]) {
35974
+ let currentPropertyValue = tableCellProperties.borders?.[side];
35975
+ let currentPropertySizePixels = eighthPointsToPixels(currentPropertyValue?.size);
35976
+ let color = borders[side].color;
35977
+ if (borders[side].color && color === "#000000") {
35978
+ color = "auto";
35979
+ }
35980
+ if (currentPropertySizePixels !== borders[side].size || currentPropertyValue?.color !== color || borders[side].val !== currentPropertyValue?.val) {
35981
+ if (!tableCellProperties.borders) tableCellProperties["borders"] = {};
35982
+ tableCellProperties.borders[side] = {
35983
+ size: pixelsToEightPoints(borders[side].size || 0),
35984
+ color,
35985
+ space: borders[side].space || 0,
35986
+ val: borders[side].val || "single"
35791
35987
  };
35792
35988
  }
35793
- return {
35794
- name: `w:${key2}`,
35795
- attributes: {
35796
- "w:val": "single",
35797
- "w:color": value.color ? value.color.substring(1) : "auto",
35798
- "w:sz": pixelsToEightPoints(value.size),
35799
- "w:space": value.space || 0
35800
- }
35801
- };
35802
- })
35803
- };
35804
- elements.push(cellBordersElement);
35989
+ } else if (tableCellProperties.borders?.[side]) {
35990
+ delete tableCellProperties.borders[side];
35991
+ }
35992
+ });
35993
+ } else if (tableCellProperties?.borders) {
35994
+ delete tableCellProperties.borders;
35805
35995
  }
35806
- return {
35807
- name: "w:tcPr",
35808
- elements
35809
- };
35810
- }
35811
- function generateCellMargins(cellMargins) {
35812
- const elements = [];
35813
- const { top: top2, right: right2, bottom: bottom2, left: left2 } = cellMargins;
35814
- if (top2 != null) elements.push({ name: "w:top", attributes: { "w:w": pixelsToTwips(top2) } });
35815
- if (right2 != null) elements.push({ name: "w:right", attributes: { "w:w": pixelsToTwips(right2) } });
35816
- if (bottom2 != null) elements.push({ name: "w:bottom", attributes: { "w:w": pixelsToTwips(bottom2) } });
35817
- if (left2 != null) elements.push({ name: "w:left", attributes: { "w:w": pixelsToTwips(left2) } });
35818
- return elements;
35996
+ const result = translator$d.decode({ node: { ...node, attrs: { ...node.attrs, tableCellProperties } } });
35997
+ return result;
35819
35998
  }
35820
35999
  const XML_NODE_NAME$d = "w:tc";
35821
36000
  const SD_NODE_NAME$b = "tableCell";
@@ -36227,6 +36406,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36227
36406
  }
36228
36407
  return { type: "unknown", handler: null };
36229
36408
  }
36409
+ const DRAWING_XML_TAG = "w:drawing";
36230
36410
  function handleImageNode(node, params2, isAnchor) {
36231
36411
  const { docx, filename } = params2;
36232
36412
  const { attributes } = node;
@@ -36238,32 +36418,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36238
36418
  };
36239
36419
  const extent = node.elements.find((el) => el.name === "wp:extent");
36240
36420
  const size2 = {
36241
- width: emuToPixels(extent.attributes?.cx),
36242
- height: emuToPixels(extent.attributes?.cy)
36421
+ width: emuToPixels(extent?.attributes?.cx),
36422
+ height: emuToPixels(extent?.attributes?.cy)
36243
36423
  };
36244
- const graphic = node.elements.find((el) => el.name === "a:graphic");
36245
- const graphicData = graphic.elements.find((el) => el.name === "a:graphicData");
36246
- const { uri: uri2 } = graphicData?.attributes || {};
36247
- const shapeURI = "http://schemas.microsoft.com/office/word/2010/wordprocessingShape";
36248
- if (!!uri2 && uri2 === shapeURI) {
36249
- return handleShapeDrawing(params2, node, graphicData);
36250
- }
36251
- const picture = graphicData.elements.find((el) => el.name === "pic:pic");
36252
- if (!picture || !picture.elements) return null;
36253
- const blipFill = picture.elements.find((el) => el.name === "pic:blipFill");
36254
- const blip = blipFill.elements.find((el) => el.name === "a:blip");
36255
- const spPr = picture.elements.find((el) => el.name === "pic:spPr");
36256
36424
  let transformData = {};
36257
- if (spPr) {
36258
- const xfrm = spPr.elements.find((el) => el.name === "a:xfrm");
36259
- if (xfrm?.attributes) {
36260
- transformData = {
36261
- rotation: rotToDegrees(xfrm.attributes["rot"]),
36262
- verticalFlip: xfrm.attributes["flipV"] === "1",
36263
- horizontalFlip: xfrm.attributes["flipH"] === "1"
36264
- };
36265
- }
36266
- }
36267
36425
  const effectExtent = node.elements.find((el) => el.name === "wp:effectExtent");
36268
36426
  if (effectExtent) {
36269
36427
  const sanitizeEmuValue = (value) => {
@@ -36272,22 +36430,26 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36272
36430
  return Number.isFinite(numeric) ? numeric : 0;
36273
36431
  };
36274
36432
  transformData.sizeExtension = {
36275
- left: emuToPixels(sanitizeEmuValue(effectExtent.attributes["l"])),
36276
- top: emuToPixels(sanitizeEmuValue(effectExtent.attributes["t"])),
36277
- right: emuToPixels(sanitizeEmuValue(effectExtent.attributes["r"])),
36278
- bottom: emuToPixels(sanitizeEmuValue(effectExtent.attributes["b"]))
36433
+ left: emuToPixels(sanitizeEmuValue(effectExtent.attributes?.["l"])),
36434
+ top: emuToPixels(sanitizeEmuValue(effectExtent.attributes?.["t"])),
36435
+ right: emuToPixels(sanitizeEmuValue(effectExtent.attributes?.["r"])),
36436
+ bottom: emuToPixels(sanitizeEmuValue(effectExtent.attributes?.["b"]))
36279
36437
  };
36280
36438
  }
36281
36439
  const positionHTag = node.elements.find((el) => el.name === "wp:positionH");
36282
36440
  const positionH = positionHTag?.elements.find((el) => el.name === "wp:posOffset");
36283
36441
  const positionHValue = emuToPixels(positionH?.elements[0]?.text);
36284
- const hRelativeFrom = positionHTag?.attributes.relativeFrom;
36285
- const alignH = positionHTag?.elements.find((el) => el.name === "wp:align")?.elements[0]?.text;
36442
+ const hRelativeFrom = positionHTag?.attributes?.relativeFrom;
36443
+ const alignH = positionHTag?.elements.find((el) => el.name === "wp:align")?.elements?.[0]?.text;
36286
36444
  const positionVTag = node.elements.find((el) => el.name === "wp:positionV");
36287
36445
  const positionV = positionVTag?.elements?.find((el) => el.name === "wp:posOffset");
36288
36446
  const positionVValue = emuToPixels(positionV?.elements[0]?.text);
36289
- const vRelativeFrom = positionVTag?.attributes.relativeFrom;
36290
- const alignV = positionVTag?.elements?.find((el) => el.name === "wp:align")?.elements[0]?.text;
36447
+ const vRelativeFrom = positionVTag?.attributes?.relativeFrom;
36448
+ const alignV = positionVTag?.elements?.find((el) => el.name === "wp:align")?.elements?.[0]?.text;
36449
+ const marginOffset = {
36450
+ horizontal: positionHValue,
36451
+ top: positionVValue
36452
+ };
36291
36453
  const simplePos = node.elements.find((el) => el.name === "wp:simplePos");
36292
36454
  const wrapNode = isAnchor ? node.elements.find(
36293
36455
  (el) => ["wp:wrapNone", "wp:wrapSquare", "wp:wrapThrough", "wp:wrapTight", "wp:wrapTopAndBottom"].includes(el.name)
@@ -36295,38 +36457,40 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36295
36457
  const wrap2 = isAnchor ? { type: wrapNode?.name.slice(7) || "None", attrs: {} } : { type: "Inline" };
36296
36458
  switch (wrap2.type) {
36297
36459
  case "Square":
36298
- wrap2.attrs.wrapText = wrapNode.attributes.wrapText;
36299
- if ("distB" in (wrapNode.attributes || {})) {
36460
+ if (wrapNode?.attributes?.wrapText) {
36461
+ wrap2.attrs.wrapText = wrapNode.attributes.wrapText;
36462
+ }
36463
+ if ("distB" in (wrapNode?.attributes || {})) {
36300
36464
  wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36301
36465
  }
36302
- if ("distL" in (wrapNode.attributes || {})) {
36466
+ if ("distL" in (wrapNode?.attributes || {})) {
36303
36467
  wrap2.attrs.distLeft = emuToPixels(wrapNode.attributes.distL);
36304
36468
  }
36305
- if ("distR" in (wrapNode.attributes || {})) {
36469
+ if ("distR" in (wrapNode?.attributes || {})) {
36306
36470
  wrap2.attrs.distRight = emuToPixels(wrapNode.attributes.distR);
36307
36471
  }
36308
- if ("distT" in (wrapNode.attributes || {})) {
36472
+ if ("distT" in (wrapNode?.attributes || {})) {
36309
36473
  wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36310
36474
  }
36311
36475
  break;
36312
36476
  case "Tight":
36313
36477
  case "Through": {
36314
- if ("distL" in (wrapNode.attributes || {})) {
36478
+ if ("distL" in (wrapNode?.attributes || {})) {
36315
36479
  wrap2.attrs.distLeft = emuToPixels(wrapNode.attributes.distL);
36316
36480
  }
36317
- if ("distR" in (wrapNode.attributes || {})) {
36481
+ if ("distR" in (wrapNode?.attributes || {})) {
36318
36482
  wrap2.attrs.distRight = emuToPixels(wrapNode.attributes.distR);
36319
36483
  }
36320
- if ("distT" in (wrapNode.attributes || {})) {
36484
+ if ("distT" in (wrapNode?.attributes || {})) {
36321
36485
  wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36322
36486
  }
36323
- if ("distB" in (wrapNode.attributes || {})) {
36487
+ if ("distB" in (wrapNode?.attributes || {})) {
36324
36488
  wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36325
36489
  }
36326
- if ("wrapText" in (wrapNode.attributes || {})) {
36490
+ if ("wrapText" in (wrapNode?.attributes || {})) {
36327
36491
  wrap2.attrs.wrapText = wrapNode.attributes.wrapText;
36328
36492
  }
36329
- const polygon = wrapNode.elements?.find((el) => el.name === "wp:wrapPolygon");
36493
+ const polygon = wrapNode?.elements?.find((el) => el.name === "wp:wrapPolygon");
36330
36494
  if (polygon) {
36331
36495
  wrap2.attrs.polygon = polygonToObj(polygon);
36332
36496
  if (polygon.attributes?.edited !== void 0) {
@@ -36336,10 +36500,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36336
36500
  break;
36337
36501
  }
36338
36502
  case "TopAndBottom":
36339
- if ("distB" in (wrapNode.attributes || {})) {
36503
+ if ("distB" in (wrapNode?.attributes || {})) {
36340
36504
  wrap2.attrs.distBottom = emuToPixels(wrapNode.attributes.distB);
36341
36505
  }
36342
- if ("distT" in (wrapNode.attributes || {})) {
36506
+ if ("distT" in (wrapNode?.attributes || {})) {
36343
36507
  wrap2.attrs.distTop = emuToPixels(wrapNode.attributes.distT);
36344
36508
  }
36345
36509
  break;
@@ -36357,17 +36521,42 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36357
36521
  alignV
36358
36522
  };
36359
36523
  }
36360
- const marginOffset = {
36361
- horizontal: positionHValue,
36362
- top: positionVValue
36363
- };
36524
+ const graphic = node.elements.find((el) => el.name === "a:graphic");
36525
+ const graphicData = graphic?.elements.find((el) => el.name === "a:graphicData");
36526
+ const { uri: uri2 } = graphicData?.attributes || {};
36527
+ const shapeURI = "http://schemas.microsoft.com/office/word/2010/wordprocessingShape";
36528
+ if (!!uri2 && uri2 === shapeURI) {
36529
+ const shapeMarginOffset = {
36530
+ left: positionHValue,
36531
+ horizontal: positionHValue,
36532
+ top: positionVValue
36533
+ };
36534
+ return handleShapeDrawing(params2, node, graphicData, size2, padding, shapeMarginOffset);
36535
+ }
36536
+ const picture = graphicData?.elements.find((el) => el.name === "pic:pic");
36537
+ if (!picture || !picture.elements) return null;
36538
+ const blipFill = picture.elements.find((el) => el.name === "pic:blipFill");
36539
+ const blip = blipFill?.elements.find((el) => el.name === "a:blip");
36540
+ if (!blip) return null;
36541
+ const spPr = picture.elements.find((el) => el.name === "pic:spPr");
36542
+ if (spPr) {
36543
+ const xfrm = spPr.elements.find((el) => el.name === "a:xfrm");
36544
+ if (xfrm?.attributes) {
36545
+ transformData = {
36546
+ ...transformData,
36547
+ rotation: rotToDegrees(xfrm.attributes["rot"]),
36548
+ verticalFlip: xfrm.attributes["flipV"] === "1",
36549
+ horizontalFlip: xfrm.attributes["flipH"] === "1"
36550
+ };
36551
+ }
36552
+ }
36364
36553
  const { attributes: blipAttributes = {} } = blip;
36365
36554
  const rEmbed = blipAttributes["r:embed"];
36366
36555
  if (!rEmbed) return null;
36367
36556
  const currentFile = filename || "document.xml";
36368
36557
  let rels = docx[`word/_rels/${currentFile}.rels`];
36369
36558
  if (!rels) rels = docx[`word/_rels/document.xml.rels`];
36370
- const relationships = rels.elements.find((el) => el.name === "Relationships");
36559
+ const relationships = rels?.elements.find((el) => el.name === "Relationships");
36371
36560
  const { elements } = relationships || [];
36372
36561
  const rel = elements?.find((el) => el.attributes["Id"] === rEmbed);
36373
36562
  if (!rel) return null;
@@ -36380,10 +36569,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36380
36569
  type: "image",
36381
36570
  attrs: {
36382
36571
  src: path,
36383
- alt: ["emf", "wmf"].includes(extension) ? "Unable to render EMF/WMF image" : docPr?.attributes.name || "Image",
36572
+ alt: ["emf", "wmf"].includes(extension) ? "Unable to render EMF/WMF image" : docPr?.attributes?.name || "Image",
36384
36573
  extension,
36385
- id: docPr?.attributes.id || "",
36386
- title: docPr?.attributes.descr || "Image",
36574
+ id: docPr?.attributes?.id || "",
36575
+ title: docPr?.attributes?.descr || "Image",
36387
36576
  inline: true,
36388
36577
  padding,
36389
36578
  marginOffset,
@@ -36398,6 +36587,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36398
36587
  }
36399
36588
  },
36400
36589
  wrap: wrap2,
36590
+ ...wrap2.type === "Square" && wrap2.attrs.wrapText ? {
36591
+ wrapText: wrap2.attrs.wrapText
36592
+ } : {},
36593
+ wrapTopAndBottom: wrap2.type === "TopAndBottom",
36401
36594
  originalPadding: {
36402
36595
  distT: attributes["distT"],
36403
36596
  distB: attributes["distB"],
@@ -36409,7 +36602,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36409
36602
  }
36410
36603
  };
36411
36604
  }
36412
- const handleShapeDrawing = (params2, node, graphicData) => {
36605
+ const handleShapeDrawing = (params2, node, graphicData, size2, padding, marginOffset) => {
36413
36606
  const wsp = graphicData.elements.find((el) => el.name === "wps:wsp");
36414
36607
  const textBox = wsp.elements.find((el) => el.name === "wps:txbx");
36415
36608
  const textBoxContent = textBox?.elements?.find((el) => el.name === "w:txbxContent");
@@ -36420,21 +36613,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36420
36613
  return getRectangleShape(params2, spPr);
36421
36614
  }
36422
36615
  if (!textBoxContent) {
36423
- return null;
36616
+ return buildShapePlaceholder(node, size2, padding, marginOffset, "drawing");
36424
36617
  }
36425
- const { nodeListHandler } = params2;
36426
- const translatedElement = nodeListHandler.handler({
36427
- ...params2,
36428
- node: textBoxContent.elements[0],
36429
- nodes: textBoxContent.elements,
36430
- path: [...params2.path || [], textBoxContent]
36431
- });
36432
- return translatedElement[0];
36618
+ return buildShapePlaceholder(node, size2, padding, marginOffset, "textbox");
36433
36619
  };
36434
36620
  const getRectangleShape = (params2, node) => {
36435
36621
  const schemaAttrs = {};
36436
36622
  const [drawingNode] = params2.nodes;
36437
- if (drawingNode?.name === "w:drawing") {
36623
+ if (drawingNode?.name === DRAWING_XML_TAG) {
36438
36624
  schemaAttrs.drawingContent = drawingNode;
36439
36625
  }
36440
36626
  const xfrm = node.elements.find((el) => el.name === "a:xfrm");
@@ -36458,6 +36644,52 @@ Please report this to https://github.com/markedjs/marked.`, e) {
36458
36644
  attrs: schemaAttrs
36459
36645
  };
36460
36646
  };
36647
+ const buildShapePlaceholder = (node, size2, padding, marginOffset, shapeType) => {
36648
+ const attrs = {
36649
+ drawingContent: {
36650
+ name: DRAWING_XML_TAG,
36651
+ elements: [carbonCopy(node)]
36652
+ },
36653
+ attributes: {
36654
+ "data-shape-type": shapeType
36655
+ }
36656
+ };
36657
+ if (size2 && (Number.isFinite(size2.width) || Number.isFinite(size2.height))) {
36658
+ attrs.size = {
36659
+ ...Number.isFinite(size2.width) ? { width: size2.width } : {},
36660
+ ...Number.isFinite(size2.height) ? { height: size2.height } : {}
36661
+ };
36662
+ }
36663
+ if (padding) {
36664
+ const paddingData = {};
36665
+ if (Number.isFinite(padding.top)) paddingData["data-padding-top"] = padding.top;
36666
+ if (Number.isFinite(padding.right)) paddingData["data-padding-right"] = padding.right;
36667
+ if (Number.isFinite(padding.bottom)) paddingData["data-padding-bottom"] = padding.bottom;
36668
+ if (Number.isFinite(padding.left)) paddingData["data-padding-left"] = padding.left;
36669
+ if (Object.keys(paddingData).length) {
36670
+ attrs.attributes = {
36671
+ ...attrs.attributes,
36672
+ ...paddingData
36673
+ };
36674
+ }
36675
+ }
36676
+ if (marginOffset) {
36677
+ const offsetData = {};
36678
+ const horizontal = Number.isFinite(marginOffset.horizontal) ? marginOffset.horizontal : Number.isFinite(marginOffset.left) ? marginOffset.left : void 0;
36679
+ if (Number.isFinite(horizontal)) offsetData["data-offset-x"] = horizontal;
36680
+ if (Number.isFinite(marginOffset.top)) offsetData["data-offset-y"] = marginOffset.top;
36681
+ if (Object.keys(offsetData).length) {
36682
+ attrs.attributes = {
36683
+ ...attrs.attributes,
36684
+ ...offsetData
36685
+ };
36686
+ }
36687
+ }
36688
+ return {
36689
+ type: "contentBlock",
36690
+ attrs
36691
+ };
36692
+ };
36461
36693
  function handleAnchorNode(params2) {
36462
36694
  const { node } = params2.extraParams;
36463
36695
  if (node.name !== "wp:anchor") {
@@ -39427,8 +39659,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39427
39659
  handlerName: "trackChangeNodeHandler",
39428
39660
  handler: handleTrackChangeNode
39429
39661
  };
39430
- const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator$Z);
39431
- const runNodeHandlerEntity = generateV2HandlerEntity("runNodeHandler", translator$Y);
39662
+ const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator$1c);
39663
+ const runNodeHandlerEntity = generateV2HandlerEntity("runNodeHandler", translator$1b);
39432
39664
  function parseProperties(node) {
39433
39665
  const marks = [];
39434
39666
  const unknownMarks = [];
@@ -39520,7 +39752,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39520
39752
  if (nodes.length === 0 || nodes[0].name !== "w:p") {
39521
39753
  return { nodes: [], consumed: 0 };
39522
39754
  }
39523
- const schemaNode = translator$19.encode(params2);
39755
+ const schemaNode = translator$1o.encode(params2);
39524
39756
  const newNodes = schemaNode ? [schemaNode] : [];
39525
39757
  return { nodes: newNodes, consumed: 1 };
39526
39758
  };
@@ -39623,7 +39855,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
39623
39855
  if (nodes.length === 0 || nodes[0].name !== "w:br") {
39624
39856
  return { nodes: [], consumed: 0 };
39625
39857
  }
39626
- const result = translator$1c.encode(params2);
39858
+ const result = translator$1r.encode(params2);
39627
39859
  if (!result) return { nodes: [], consumed: 0 };
39628
39860
  return {
39629
39861
  nodes: [result],
@@ -40222,7 +40454,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40222
40454
  if (!nodes.length || nodes[0].name !== "w:tab") {
40223
40455
  return { nodes: [], consumed: 0 };
40224
40456
  }
40225
- const node = translator$1a.encode(params2);
40457
+ const node = translator$1p.encode(params2);
40226
40458
  return { nodes: [node], consumed: 1 };
40227
40459
  };
40228
40460
  const tabNodeEntityHandler = {
@@ -40474,12 +40706,14 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40474
40706
  const content = pruneIgnoredNodes(contentElements);
40475
40707
  const comments = importCommentData({ docx, converter, editor });
40476
40708
  const lists = {};
40709
+ const inlineDocumentFonts = [];
40477
40710
  let parsedContent = nodeListHandler.handler({
40478
40711
  nodes: content,
40479
40712
  nodeListHandler,
40480
40713
  docx,
40481
40714
  converter,
40482
40715
  editor,
40716
+ inlineDocumentFonts,
40483
40717
  lists,
40484
40718
  path: []
40485
40719
  });
@@ -40502,6 +40736,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40502
40736
  savedTagsToRestore: node,
40503
40737
  pageStyles: getDocumentStyles(node, docx, converter, editor),
40504
40738
  comments,
40739
+ inlineDocumentFonts,
40505
40740
  linkedStyles: getStyleDefinitions(docx),
40506
40741
  numbering: getNumberingDefinitions(docx)
40507
40742
  };
@@ -40565,6 +40800,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40565
40800
  filename,
40566
40801
  parentStyleId,
40567
40802
  lists,
40803
+ inlineDocumentFonts,
40568
40804
  path = []
40569
40805
  }) => {
40570
40806
  if (!elements || !elements.length) return [];
@@ -40591,6 +40827,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
40591
40827
  filename,
40592
40828
  parentStyleId,
40593
40829
  lists,
40830
+ inlineDocumentFonts,
40594
40831
  path
40595
40832
  });
40596
40833
  },
@@ -41170,7 +41407,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41170
41407
  const XML_NODE_NAME = "w:pict";
41171
41408
  const SD_NODE_NAME = ["shapeContainer", "contentBlock"];
41172
41409
  const validXmlAttributes = [];
41173
- function encode$1f(params2) {
41410
+ function encode$1c(params2) {
41174
41411
  const { node, pNode } = params2.extraParams;
41175
41412
  const { type: pictType, handler: handler2 } = pictNodeTypeStrategy(node);
41176
41413
  if (!handler2 || pictType === "unknown") {
@@ -41202,7 +41439,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41202
41439
  xmlName: XML_NODE_NAME,
41203
41440
  sdNodeOrKeyName: SD_NODE_NAME,
41204
41441
  type: NodeTranslator.translatorTypes.NODE,
41205
- encode: encode$1f,
41442
+ encode: encode$1c,
41206
41443
  decode,
41207
41444
  attributes: validXmlAttributes
41208
41445
  };
@@ -41278,21 +41515,21 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41278
41515
  doc: translateDocumentNode,
41279
41516
  body: translateBodyNode,
41280
41517
  heading: translateHeadingNode,
41281
- paragraph: translator$19,
41282
- run: translator$Y,
41518
+ paragraph: translator$1o,
41519
+ run: translator$1b,
41283
41520
  text: translateTextNode,
41284
41521
  bulletList: translateList,
41285
41522
  orderedList: translateList,
41286
- lineBreak: translator$1c,
41287
- table: translator$d,
41288
- tableRow: translator$K,
41523
+ lineBreak: translator$1r,
41524
+ table: translator$s,
41525
+ tableRow: translator$Z,
41289
41526
  tableCell: translator$c,
41290
41527
  bookmarkStart: translator$7,
41291
41528
  bookmarkEnd: translator$6,
41292
41529
  fieldAnnotation: translator$8,
41293
- tab: translator$1a,
41530
+ tab: translator$1p,
41294
41531
  image: translator$9,
41295
- hardBreak: translator$1c,
41532
+ hardBreak: translator$1r,
41296
41533
  commentRangeStart: commentRangeStartTranslator,
41297
41534
  commentRangeEnd: commentRangeEndTranslator,
41298
41535
  commentReference: () => null,
@@ -41653,7 +41890,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41653
41890
  }
41654
41891
  const isLinkNode = node.marks?.some((m2) => m2.type === "link");
41655
41892
  if (isLinkNode && !extraParams?.linkProcessed) {
41656
- return translator$Z.decode(params2);
41893
+ return translator$1c.decode(params2);
41657
41894
  }
41658
41895
  const { text, marks = [] } = node;
41659
41896
  return getTextNodeForExport(text, marks, params2);
@@ -41913,7 +42150,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41913
42150
  markElement.type = "element";
41914
42151
  break;
41915
42152
  case "underline": {
41916
- const translated = translator$16.decode({
42153
+ const translated = translator$1l.decode({
41917
42154
  node: {
41918
42155
  attrs: {
41919
42156
  underlineType: attrs.underlineType ?? attrs.underline ?? null,
@@ -41977,7 +42214,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41977
42214
  break;
41978
42215
  case "highlight": {
41979
42216
  const highlightValue = attrs.color ?? attrs.highlight ?? null;
41980
- const translated = translator$1b.decode({ node: { attrs: { highlight: highlightValue } } });
42217
+ const translated = translator$1q.decode({ node: { attrs: { highlight: highlightValue } } });
41981
42218
  return translated || {};
41982
42219
  }
41983
42220
  case "link":
@@ -42356,6 +42593,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42356
42593
  this.fonts = params2?.fonts || {};
42357
42594
  this.addedMedia = {};
42358
42595
  this.comments = [];
42596
+ this.inlineDocumentFonts = [];
42359
42597
  this.docHiglightColors = /* @__PURE__ */ new Set([]);
42360
42598
  this.xml = params2?.xml;
42361
42599
  this.declaration = null;
@@ -42642,6 +42880,23 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42642
42880
  return result;
42643
42881
  }
42644
42882
  getDocumentFonts() {
42883
+ const inlineDocumentFonts = [...new Set(this.inlineDocumentFonts || [])];
42884
+ const fontTable = this.convertedXml["word/fontTable.xml"];
42885
+ if (!fontTable) {
42886
+ return inlineDocumentFonts;
42887
+ }
42888
+ const wFonts = fontTable.elements?.find((element) => element.name === "w:fonts");
42889
+ if (!wFonts) {
42890
+ return inlineDocumentFonts;
42891
+ }
42892
+ if (!wFonts.elements) {
42893
+ return inlineDocumentFonts;
42894
+ }
42895
+ const fontsInFontTable = wFonts.elements.filter((element) => element.name === "w:font").map((element) => element.attributes["w:name"]);
42896
+ const allFonts = [...inlineDocumentFonts, ...fontsInFontTable];
42897
+ return [...new Set(allFonts)];
42898
+ }
42899
+ getFontFaceImportString() {
42645
42900
  const fontTable = this.convertedXml["word/fontTable.xml"];
42646
42901
  if (!fontTable || !Object.keys(this.fonts).length) return;
42647
42902
  const fonts = fontTable.elements.find((el) => el.name === "w:fonts");
@@ -42655,6 +42910,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42655
42910
  const rels = this.convertedXml["word/_rels/fontTable.xml.rels"];
42656
42911
  const relationships = rels?.elements.find((el) => el.name === "Relationships") || {};
42657
42912
  const { elements } = relationships;
42913
+ const fontsImported = [];
42658
42914
  let styleString = "";
42659
42915
  for (const font of fontsToInclude) {
42660
42916
  const filePath = elements.find((el) => el.attributes.Id === font.attributes["r:id"])?.attributes?.Target;
@@ -42671,6 +42927,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42671
42927
  const isItalic = font.name.includes("Italic");
42672
42928
  const isLight = font.name.includes("Light");
42673
42929
  const fontWeight = isNormal ? "normal" : isBold ? "bold" : isLight ? "200" : "normal";
42930
+ if (!fontsImported.includes(font.fontFamily)) {
42931
+ fontsImported.push(font.fontFamily);
42932
+ }
42674
42933
  styleString += `
42675
42934
  @font-face {
42676
42935
  font-style: ${isItalic ? "italic" : "normal"};
@@ -42681,7 +42940,10 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42681
42940
  }
42682
42941
  `;
42683
42942
  }
42684
- return styleString;
42943
+ return {
42944
+ styleString,
42945
+ fontsImported
42946
+ };
42685
42947
  }
42686
42948
  getDocumentInternalId() {
42687
42949
  const settingsLocation = "word/settings.xml";
@@ -42736,6 +42998,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
42736
42998
  this.numbering = result.numbering;
42737
42999
  this.comments = result.comments;
42738
43000
  this.linkedStyles = result.linkedStyles;
43001
+ this.inlineDocumentFonts = result.inlineDocumentFonts;
42739
43002
  return result.pmDoc;
42740
43003
  } else {
42741
43004
  return null;
@@ -45697,7 +45960,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
45697
45960
  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);
45698
45961
  var __privateSet = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value);
45699
45962
  var __privateMethod$1 = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method);
45700
- 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;
45963
+ 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;
45701
45964
  var GOOD_LEAF_SIZE = 200;
45702
45965
  var RopeSequence = function RopeSequence2() {
45703
45966
  };
@@ -58766,6 +59029,29 @@ Please report this to https://github.com/markedjs/marked.`, e) {
58766
59029
  }
58767
59030
  return false;
58768
59031
  };
59032
+ function canRenderFont(fontName, fallbackFont = "sans-serif") {
59033
+ const _canRenderFont = (fontName2, fallbackFont2) => {
59034
+ const canvas = document.createElement("canvas");
59035
+ const ctx2 = canvas.getContext("2d");
59036
+ ctx2.textBaseline = "top";
59037
+ const text = "abcdefghijklmnopqrstuvwxyz0123456789";
59038
+ ctx2.font = `72px ${fallbackFont2}`;
59039
+ const initialTextMeasurement = ctx2.measureText(text);
59040
+ const fallbackWidth = initialTextMeasurement.width;
59041
+ const fallbackHeight = initialTextMeasurement.actualBoundingBoxDescent;
59042
+ ctx2.font = `72px "${fontName2}", ${fallbackFont2}`;
59043
+ const customTextMeasurement = ctx2.measureText(text);
59044
+ const customFontWidth = customTextMeasurement.width;
59045
+ const customFontHeight = customTextMeasurement.actualBoundingBoxDescent;
59046
+ const isAvailable = customFontWidth !== fallbackWidth || customFontHeight !== fallbackHeight;
59047
+ return isAvailable;
59048
+ };
59049
+ if (_canRenderFont(fontName, fallbackFont)) {
59050
+ return true;
59051
+ }
59052
+ const oppositeFallbackFont = fallbackFont === "sans-serif" ? "serif" : "sans-serif";
59053
+ return _canRenderFont(fontName, oppositeFallbackFont);
59054
+ }
58769
59055
  const { findChildren: findChildren$3 } = helpers;
58770
59056
  function getAllFieldAnnotations(state2) {
58771
59057
  let fieldAnnotations = findChildren$3(state2.doc, (node) => node.type.name === "fieldAnnotation");
@@ -59815,6 +60101,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
59815
60101
  __publicField$1(this, "schema");
59816
60102
  __publicField$1(this, "view");
59817
60103
  __publicField$1(this, "isFocused", false);
60104
+ __publicField$1(this, "fontsImported", []);
59818
60105
  __publicField$1(this, "options", {
59819
60106
  element: null,
59820
60107
  selector: null,
@@ -59875,6 +60162,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
59875
60162
  onPaginationUpdate: () => null,
59876
60163
  onException: () => null,
59877
60164
  onListDefinitionsChange: () => null,
60165
+ onFontsResolved: null,
59878
60166
  // async (file) => url;
59879
60167
  handleImageUpload: null,
59880
60168
  // telemetry
@@ -60851,6 +61139,9 @@ Please report this to https://github.com/markedjs/marked.`, e) {
60851
61139
  this.emit("beforeCreate", { editor: this });
60852
61140
  this.on("contentError", this.options.onContentError);
60853
61141
  this.mount(this.options.element);
61142
+ if (!this.options.isHeadless) {
61143
+ __privateMethod$1(this, _Editor_instances, checkFonts_fn).call(this);
61144
+ }
60854
61145
  this.on("create", this.options.onCreate);
60855
61146
  this.on("update", this.options.onUpdate);
60856
61147
  this.on("selectionUpdate", this.options.onSelectionUpdate);
@@ -60998,13 +61289,74 @@ Please report this to https://github.com/markedjs/marked.`, e) {
60998
61289
  }
60999
61290
  };
61000
61291
  initFonts_fn = function() {
61001
- const styleString = this.converter.getDocumentFonts();
61002
- if (styleString?.length) {
61292
+ const results = this.converter.getFontFaceImportString();
61293
+ if (results?.styleString?.length) {
61003
61294
  const style2 = document.createElement("style");
61004
- style2.textContent = styleString;
61295
+ style2.textContent = results.styleString;
61005
61296
  document.head.appendChild(style2);
61297
+ this.fontsImported = results.fontsImported;
61298
+ }
61299
+ };
61300
+ checkFonts_fn = async function() {
61301
+ if (!this.options.onFontsResolved || typeof this.options.onFontsResolved !== "function") {
61302
+ return;
61303
+ }
61304
+ if (this.options.isHeadless) {
61305
+ return;
61306
+ }
61307
+ const fontsUsedInDocument = this.converter.getDocumentFonts();
61308
+ if (!("queryLocalFonts" in window)) {
61309
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61310
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61311
+ this.options.onFontsResolved({
61312
+ documentFonts: fontsUsedInDocument,
61313
+ unsupportedFonts
61314
+ });
61315
+ return;
61316
+ }
61317
+ const localFontAccess = await navigator.permissions.query({ name: "local-fonts" });
61318
+ if (localFontAccess.state === "denied") {
61319
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61320
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61321
+ this.options.onFontsResolved({
61322
+ documentFonts: fontsUsedInDocument,
61323
+ unsupportedFonts
61324
+ });
61325
+ return;
61326
+ }
61327
+ try {
61328
+ const localFonts = await window.queryLocalFonts();
61329
+ const uniqueLocalFonts = [...new Set(localFonts.map((font) => font.family))];
61330
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithLocalFonts_fn).call(this, fontsUsedInDocument, uniqueLocalFonts);
61331
+ this.options.onFontsResolved({
61332
+ documentFonts: fontsUsedInDocument,
61333
+ unsupportedFonts
61334
+ });
61335
+ } catch {
61336
+ console.warn("[SuperDoc] Could not get access to local fonts. Using fallback solution.");
61337
+ const unsupportedFonts = __privateMethod$1(this, _Editor_instances, determineUnsupportedFontsWithCanvas_fn).call(this, fontsUsedInDocument);
61338
+ this.options.onFontsResolved({
61339
+ documentFonts: fontsUsedInDocument,
61340
+ unsupportedFonts
61341
+ });
61006
61342
  }
61007
61343
  };
61344
+ determineUnsupportedFontsWithLocalFonts_fn = function(fonts, localFonts) {
61345
+ const unsupportedFonts = fonts.filter((font) => {
61346
+ const isLocalFont = localFonts.includes(font);
61347
+ const isFontImported = this.fontsImported.includes(font);
61348
+ return !isLocalFont && !isFontImported;
61349
+ });
61350
+ return unsupportedFonts;
61351
+ };
61352
+ determineUnsupportedFontsWithCanvas_fn = function(fonts) {
61353
+ const unsupportedFonts = fonts.filter((font) => {
61354
+ const canRender = canRenderFont(font);
61355
+ const isFontImported = this.fontsImported.includes(font);
61356
+ return !canRender && !isFontImported;
61357
+ });
61358
+ return unsupportedFonts;
61359
+ };
61008
61360
  createSchema_fn = function() {
61009
61361
  this.schema = this.extensionService.schema;
61010
61362
  };
@@ -66519,8 +66871,11 @@ Please report this to https://github.com/markedjs/marked.`, e) {
66519
66871
  }
66520
66872
  });
66521
66873
  const getColStyleDeclaration = (minWidth, width) => {
66522
- if (width) {
66523
- return ["width", `${Math.max(width, minWidth)}px`];
66874
+ if (width != null) {
66875
+ const numericWidth = Number(width);
66876
+ if (Number.isFinite(numericWidth) && numericWidth >= 0) {
66877
+ return ["width", `${numericWidth}px`];
66878
+ }
66524
66879
  }
66525
66880
  return ["min-width", `${minWidth}px`];
66526
66881
  };
@@ -66542,7 +66897,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
66542
66897
  this.table = this.dom.appendChild(document.createElement("table"));
66543
66898
  this.colgroup = this.table.appendChild(document.createElement("colgroup"));
66544
66899
  updateTable(this.editor, this.node, this.table);
66545
- updateColumns(node, this.colgroup, this.table, cellMinWidth2);
66900
+ updateColumns(node, this.colgroup, this.table, cellMinWidth2, void 0, void 0, this.editor);
66546
66901
  this.contentDOM = this.table.appendChild(document.createElement("tbody"));
66547
66902
  setTimeout(() => {
66548
66903
  updateTableWrapper(this.dom, this.table);
@@ -66554,7 +66909,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
66554
66909
  }
66555
66910
  this.node = node;
66556
66911
  updateTable(this.editor, node, this.table);
66557
- updateColumns(node, this.colgroup, this.table, this.cellMinWidth);
66912
+ updateColumns(node, this.colgroup, this.table, this.cellMinWidth, void 0, void 0, this.editor);
66558
66913
  updateTableWrapper(this.dom, this.table);
66559
66914
  return true;
66560
66915
  }
@@ -66567,46 +66922,105 @@ Please report this to https://github.com/markedjs/marked.`, e) {
66567
66922
  }
66568
66923
  };
66569
66924
  };
66570
- function updateColumns(node, colgroup, table, cellMinWidth2, overrideCol, overrideValue) {
66571
- let totalWidth = 0;
66572
- let fixedWidth = true;
66573
- let nextDOM = colgroup.firstChild;
66925
+ function updateColumns(node, colgroup, table, cellMinWidth2, overrideCol, overrideValue, editor) {
66926
+ const gridColumns = Array.isArray(node.attrs?.grid) && node.attrs.grid.length ? node.attrs.grid.map((col) => twipsToPixels(col.col)) : null;
66927
+ const totalColumns = gridColumns?.length ?? null;
66928
+ const pageBody = table.closest(".page__body");
66929
+ const wrapper = table.parentElement;
66930
+ let availableWidth = pageBody?.getBoundingClientRect?.().width;
66931
+ if (!availableWidth && wrapper) {
66932
+ availableWidth = wrapper.getBoundingClientRect().width;
66933
+ }
66934
+ if (typeof availableWidth === "number" && !Number.isNaN(availableWidth)) {
66935
+ availableWidth = Math.max(availableWidth - 2, 0);
66936
+ } else {
66937
+ availableWidth = null;
66938
+ }
66939
+ const pageStyles = editor?.converter?.pageStyles;
66940
+ if (pageStyles?.pageSize?.width) {
66941
+ const toNumber2 = (v2) => typeof v2 === "number" ? v2 : parseFloat(v2) || 0;
66942
+ const pageWidth = toNumber2(pageStyles.pageSize.width);
66943
+ const marginLeft = toNumber2(pageStyles.pageMargins?.left);
66944
+ const marginRight = toNumber2(pageStyles.pageMargins?.right);
66945
+ const pageAvailableWidthPx = Math.max((pageWidth - marginLeft - marginRight) * PIXELS_PER_INCH, 0);
66946
+ if (pageAvailableWidthPx > 0) {
66947
+ availableWidth = availableWidth ? Math.min(availableWidth, pageAvailableWidthPx) : pageAvailableWidthPx;
66948
+ }
66949
+ }
66950
+ const resolveColumnWidth = (colIndex2, colwidthValue) => {
66951
+ if (overrideCol === colIndex2) return overrideValue;
66952
+ if (colwidthValue != null) return colwidthValue;
66953
+ if (gridColumns && gridColumns[colIndex2] != null) return gridColumns[colIndex2];
66954
+ return null;
66955
+ };
66956
+ const widths = [];
66574
66957
  const row = node.firstChild;
66958
+ let colIndex = 0;
66575
66959
  if (row !== null) {
66576
- for (let i2 = 0, col = 0; i2 < row.childCount; i2++) {
66577
- const { colspan, colwidth } = row.child(i2).attrs;
66578
- for (let j2 = 0; j2 < colspan; j2++, col++) {
66579
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j2];
66580
- const cssWidth = hasWidth ? `${hasWidth}px` : "";
66581
- totalWidth += hasWidth || cellMinWidth2;
66582
- if (!hasWidth) fixedWidth = false;
66583
- if (!nextDOM) {
66584
- const col2 = document.createElement("col");
66585
- const [propKey, propVal] = getColStyleDeclaration(cellMinWidth2, hasWidth);
66586
- col2.style.setProperty(propKey, propVal);
66587
- colgroup.appendChild(col2);
66588
- } else {
66589
- if (nextDOM.style.width !== cssWidth) {
66590
- const [propKey, propVal] = getColStyleDeclaration(cellMinWidth2, hasWidth);
66591
- nextDOM.style.setProperty(propKey, propVal);
66592
- }
66593
- nextDOM = nextDOM.nextSibling;
66594
- }
66960
+ for (let i2 = 0; i2 < row.childCount; i2++) {
66961
+ const child = row.child(i2);
66962
+ const { colspan, colwidth } = child.attrs;
66963
+ for (let span = 0; span < colspan; span += 1, colIndex += 1) {
66964
+ widths.push(resolveColumnWidth(colIndex, colwidth && colwidth[span]));
66595
66965
  }
66596
66966
  }
66597
66967
  }
66598
- while (nextDOM) {
66599
- const after = nextDOM.nextSibling;
66600
- nextDOM.parentNode?.removeChild(nextDOM);
66601
- nextDOM = after;
66968
+ if (totalColumns != null && colIndex < totalColumns) {
66969
+ for (let col = colIndex; col < totalColumns; col += 1) {
66970
+ widths.push(resolveColumnWidth(col));
66971
+ }
66602
66972
  }
66603
- if (fixedWidth) {
66604
- table.style.width = `${totalWidth}px`;
66973
+ const normalizedWidths = widths.map((widthPx) => {
66974
+ const numericWidth = Number(widthPx);
66975
+ if (!Number.isFinite(numericWidth)) return null;
66976
+ if (numericWidth < 0) return null;
66977
+ if (numericWidth === 0) return 0;
66978
+ if (numericWidth < 1) return 0;
66979
+ return numericWidth;
66980
+ });
66981
+ const rawTotalWidth = normalizedWidths.reduce((sum, width) => sum + (width != null ? width : cellMinWidth2), 0);
66982
+ let scale = 1;
66983
+ if (availableWidth && rawTotalWidth > 0 && rawTotalWidth > availableWidth) {
66984
+ scale = availableWidth / rawTotalWidth;
66985
+ }
66986
+ let totalWidth = 0;
66987
+ let hasUndefinedWidth = false;
66988
+ let dom = colgroup.firstChild;
66989
+ normalizedWidths.forEach((width) => {
66990
+ let scaledWidth = width;
66991
+ if (scaledWidth != null) {
66992
+ scaledWidth = scaledWidth * scale;
66993
+ }
66994
+ const [propKey, propVal] = getColStyleDeclaration(cellMinWidth2, scaledWidth);
66995
+ if (scaledWidth == null) {
66996
+ totalWidth += cellMinWidth2;
66997
+ hasUndefinedWidth = true;
66998
+ } else {
66999
+ totalWidth += scaledWidth;
67000
+ }
67001
+ if (!dom) {
67002
+ const colElement = document.createElement("col");
67003
+ colElement.style.setProperty(propKey, propVal);
67004
+ colgroup.appendChild(colElement);
67005
+ } else {
67006
+ dom.style.setProperty(propKey, propVal);
67007
+ dom = dom.nextSibling;
67008
+ }
67009
+ });
67010
+ while (dom) {
67011
+ const next = dom.nextSibling;
67012
+ dom.parentNode?.removeChild(dom);
67013
+ dom = next;
67014
+ }
67015
+ if (scale < 1 || !hasUndefinedWidth) {
67016
+ const clampedWidth = Math.min(totalWidth, availableWidth || totalWidth);
67017
+ table.style.width = `${clampedWidth}px`;
66605
67018
  table.style.minWidth = "";
66606
67019
  } else {
66607
67020
  table.style.width = "";
66608
67021
  table.style.minWidth = `${totalWidth}px`;
66609
67022
  }
67023
+ table.style.maxWidth = "100%";
66610
67024
  }
66611
67025
  function updateTable(editor, node, table) {
66612
67026
  const allExtensionsAttrs = editor.extensionService.attributes;
@@ -66684,22 +67098,61 @@ Please report this to https://github.com/markedjs/marked.`, e) {
66684
67098
  const tableBorders = createTableBorders();
66685
67099
  return types2.table.createChecked({ borders: tableBorders }, rows);
66686
67100
  };
67101
+ const MIN_MEANINGFUL_WIDTH_PX = 1;
66687
67102
  const createColGroup = (node, cellMinWidth2, overrideCol, overrideValue) => {
66688
67103
  let totalWidth = 0;
66689
67104
  let fixedWidth = true;
66690
67105
  const cols = [];
66691
67106
  const colsValues = [];
66692
67107
  const row = node.firstChild;
67108
+ const gridColumns = Array.isArray(node.attrs?.grid) && node.attrs.grid.length ? node.attrs.grid.map((col) => twipsToPixels(col.col)) : null;
66693
67109
  if (!row) return {};
66694
- for (let i2 = 0, col = 0; i2 < row.childCount; i2++) {
66695
- const { colspan, colwidth } = row.child(i2).attrs;
66696
- for (let j2 = 0; j2 < colspan; j2++, col++) {
66697
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j2];
66698
- totalWidth += hasWidth || cellMinWidth2;
66699
- if (!hasWidth) fixedWidth = false;
66700
- const [prop, value] = getColStyleDeclaration(cellMinWidth2, hasWidth);
67110
+ const totalColumns = gridColumns?.length;
67111
+ const resolveColumnWidth = (colIndex2, colwidthValue) => {
67112
+ if (overrideCol === colIndex2) return overrideValue;
67113
+ if (colwidthValue != null) return colwidthValue;
67114
+ if (gridColumns && gridColumns[colIndex2] != null) return gridColumns[colIndex2];
67115
+ return null;
67116
+ };
67117
+ let colIndex = 0;
67118
+ for (let i2 = 0; i2 < row.childCount; i2++) {
67119
+ const child = row.child(i2);
67120
+ const { colspan, colwidth } = child.attrs;
67121
+ for (let j2 = 0; j2 < colspan; j2++, colIndex++) {
67122
+ const candidateWidth = resolveColumnWidth(colIndex, colwidth && colwidth[j2]);
67123
+ const numericWidth = Number(candidateWidth);
67124
+ let effectiveWidth = Number.isFinite(numericWidth) && numericWidth > 0 ? numericWidth : null;
67125
+ if (effectiveWidth != null && effectiveWidth < MIN_MEANINGFUL_WIDTH_PX) {
67126
+ effectiveWidth = 0;
67127
+ }
67128
+ if (effectiveWidth == null) {
67129
+ totalWidth += cellMinWidth2;
67130
+ fixedWidth = false;
67131
+ } else {
67132
+ totalWidth += effectiveWidth;
67133
+ }
67134
+ const [prop, value] = getColStyleDeclaration(cellMinWidth2, effectiveWidth);
67135
+ cols.push(["col", { style: `${prop}: ${value}` }]);
67136
+ colsValues.push(parseFloat(value));
67137
+ }
67138
+ }
67139
+ if (totalColumns != null) {
67140
+ for (let col = colIndex; col < totalColumns; col++) {
67141
+ const candidateWidth = resolveColumnWidth(col);
67142
+ const numericWidth = Number(candidateWidth);
67143
+ let effectiveWidth = Number.isFinite(numericWidth) && numericWidth > 0 ? numericWidth : null;
67144
+ if (effectiveWidth != null && effectiveWidth < MIN_MEANINGFUL_WIDTH_PX) {
67145
+ effectiveWidth = 0;
67146
+ }
67147
+ if (effectiveWidth == null) {
67148
+ totalWidth += cellMinWidth2;
67149
+ fixedWidth = false;
67150
+ } else {
67151
+ totalWidth += effectiveWidth;
67152
+ }
67153
+ const [prop, value] = getColStyleDeclaration(cellMinWidth2, effectiveWidth);
66701
67154
  cols.push(["col", { style: `${prop}: ${value}` }]);
66702
- colsValues.push(parseInt(value, 10));
67155
+ colsValues.push(parseFloat(value));
66703
67156
  }
66704
67157
  }
66705
67158
  const tableWidth = fixedWidth ? `${totalWidth}px` : "";
@@ -69602,6 +70055,19 @@ Please report this to https://github.com/markedjs/marked.`, e) {
69602
70055
  "data-colwidth": attrs.colwidth.join(",")
69603
70056
  };
69604
70057
  }
70058
+ },
70059
+ __placeholder: {
70060
+ default: null,
70061
+ parseDOM: (element) => {
70062
+ const value = element.getAttribute("data-placeholder");
70063
+ return value || null;
70064
+ },
70065
+ renderDOM({ __placeholder }) {
70066
+ if (!__placeholder) return {};
70067
+ return {
70068
+ "data-placeholder": __placeholder
70069
+ };
70070
+ }
69605
70071
  }
69606
70072
  };
69607
70073
  },
@@ -69761,6 +70227,28 @@ Please report this to https://github.com/markedjs/marked.`, e) {
69761
70227
  widthUnit: {
69762
70228
  default: "px",
69763
70229
  rendered: false
70230
+ },
70231
+ __placeholder: {
70232
+ default: null,
70233
+ parseDOM: (element) => {
70234
+ const value = element.getAttribute("data-placeholder");
70235
+ return value || null;
70236
+ },
70237
+ renderDOM({ __placeholder }) {
70238
+ if (!__placeholder) return {};
70239
+ return {
70240
+ "data-placeholder": __placeholder
70241
+ };
70242
+ }
70243
+ },
70244
+ /**
70245
+ * @category Attribute
70246
+ * @param {TableCellProperties} tableCellProperties - Properties for the table cell.
70247
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 463
70248
+ */
70249
+ tableCellProperties: {
70250
+ default: null,
70251
+ rendered: false
69764
70252
  }
69765
70253
  };
69766
70254
  },
@@ -95470,7 +95958,7 @@ ${style2}
95470
95958
  }
95471
95959
  };
95472
95960
  const GenericPopover = /* @__PURE__ */ _export_sfc$1(_sfc_main$2$1, [["__scopeId", "data-v-cbddcc0f"]]);
95473
- const BlankDOCX$1 = "data:application/octet-stream;base64,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";
95961
+ const BlankDOCX$1 = "data:application/octet-stream;base64,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";
95474
95962
  const _hoisted_1$1$1 = { class: "super-editor-container" };
95475
95963
  const _hoisted_2$a = {
95476
95964
  key: 1,
@@ -95865,72 +96353,87 @@ ${style2}
95865
96353
  "mc:AlternateContent": translator$1,
95866
96354
  "sd:pageReference": translator$5,
95867
96355
  "sd:tableOfContents": translator$4,
95868
- "w:b": translator$18,
95869
- "w:bidiVisual": translator$J,
96356
+ "w:b": translator$1n,
96357
+ "w:bidiVisual": translator$Y,
95870
96358
  "w:bookmarkEnd": translator$6,
95871
96359
  "w:bookmarkStart": translator$7,
95872
- "w:bottom": translator$w,
95873
- "w:br": translator$1c,
95874
- "w:cantSplit": translator$X,
95875
- "w:cnfStyle": translator$W,
95876
- "w:color": translator$14,
95877
- "w:divId": translator$V,
96360
+ "w:bottom": translator$L,
96361
+ "w:br": translator$1r,
96362
+ "w:cantSplit": translator$1a,
96363
+ "w:cnfStyle": translator$19,
96364
+ "w:color": translator$1j,
96365
+ "w:divId": translator$18,
95878
96366
  "w:drawing": translator$9,
95879
- "w:end": translator$u,
95880
- "w:gridAfter": translator$U,
95881
- "w:gridBefore": translator$T,
95882
- "w:gridCol": translator$f,
95883
- "w:hidden": translator$S,
95884
- "w:highlight": translator$1b,
95885
- "w:hyperlink": translator$Z,
95886
- "w:i": translator$17,
95887
- "w:insideH": translator$s,
95888
- "w:insideV": translator$r,
95889
- "w:jc": translator$R,
95890
- "w:left": translator$q,
95891
- "w:p": translator$19,
95892
- "w:r": translator$Y,
95893
- "w:rFonts": translator$13,
95894
- "w:rPr": translator$_,
95895
- "w:rStyle": translator$12,
95896
- "w:right": translator$o,
96367
+ "w:end": translator$J,
96368
+ "w:gridAfter": translator$17,
96369
+ "w:gridBefore": translator$16,
96370
+ "w:gridCol": translator$u,
96371
+ "w:hidden": translator$15,
96372
+ "w:highlight": translator$1q,
96373
+ "w:hyperlink": translator$1c,
96374
+ "w:i": translator$1m,
96375
+ "w:insideH": translator$H,
96376
+ "w:insideV": translator$G,
96377
+ "w:jc": translator$14,
96378
+ "w:left": translator$F,
96379
+ "w:p": translator$1o,
96380
+ "w:r": translator$1b,
96381
+ "w:rFonts": translator$1i,
96382
+ "w:rPr": translator$1d,
96383
+ "w:rStyle": translator$1h,
96384
+ "w:right": translator$D,
95897
96385
  "w:sdt": translator$8,
95898
- "w:shd": translator$I,
95899
- "w:start": translator$m,
95900
- "w:strike": translator$15,
95901
- "w:sz": translator$11,
95902
- "w:szCs": translator$10,
95903
- "w:tab": translator$1a,
95904
- "w:tbl": translator$d,
95905
- "w:tblBorders": translator$i,
95906
- "w:tblCaption": translator$H,
95907
- "w:tblCellMar": translator$h,
95908
- "w:tblCellSpacing": translator$Q,
95909
- "w:tblDescription": translator$G,
95910
- "w:tblGrid": translator$e,
95911
- "w:tblHeader": translator$P,
95912
- "w:tblInd": translator$F,
95913
- "w:tblLayout": translator$E,
95914
- "w:tblLook": translator$D,
95915
- "w:tblOverlap": translator$C,
95916
- "w:tblPr": translator$g,
95917
- "w:tblStyle": translator$B,
95918
- "w:tblStyleColBandSize": translator$A,
95919
- "w:tblStyleRowBandSize": translator$z,
95920
- "w:tblW": translator$y,
95921
- "w:tblpPr": translator$x,
96386
+ "w:shd": translator$X,
96387
+ "w:start": translator$B,
96388
+ "w:strike": translator$1k,
96389
+ "w:sz": translator$1g,
96390
+ "w:szCs": translator$1f,
96391
+ "w:tab": translator$1p,
96392
+ "w:tbl": translator$s,
96393
+ "w:tblBorders": translator$x,
96394
+ "w:tblCaption": translator$W,
96395
+ "w:tblCellMar": translator$w,
96396
+ "w:tblCellSpacing": translator$13,
96397
+ "w:tblDescription": translator$V,
96398
+ "w:tblGrid": translator$t,
96399
+ "w:tblHeader": translator$12,
96400
+ "w:tblInd": translator$U,
96401
+ "w:tblLayout": translator$T,
96402
+ "w:tblLook": translator$S,
96403
+ "w:tblOverlap": translator$R,
96404
+ "w:tblPr": translator$v,
96405
+ "w:tblStyle": translator$Q,
96406
+ "w:tblStyleColBandSize": translator$P,
96407
+ "w:tblStyleRowBandSize": translator$O,
96408
+ "w:tblW": translator$N,
96409
+ "w:tblpPr": translator$M,
95922
96410
  "w:tc": translator$c,
95923
- "w:top": translator$k,
95924
- "w:tr": translator$K,
95925
- "w:trHeight": translator$O,
95926
- "w:trPr": translator$L,
95927
- "w:u": translator$16,
95928
- "w:wAfter": translator$N,
95929
- "w:wBefore": translator$M,
96411
+ "w:top": translator$z,
96412
+ "w:tr": translator$Z,
96413
+ "w:trHeight": translator$11,
96414
+ "w:trPr": translator$_,
96415
+ "w:u": translator$1l,
96416
+ "w:wAfter": translator$10,
96417
+ "w:wBefore": translator$$,
95930
96418
  "wp:anchor": translator$b,
95931
96419
  "wp:inline": translator$a,
95932
96420
  "w:commentRangeStart": commentRangeStartTranslator,
95933
- "w:commentRangeEnd": commentRangeEndTranslator
96421
+ "w:commentRangeEnd": commentRangeEndTranslator,
96422
+ "w:vMerge": translator$p,
96423
+ "w:gridSpan": translator$q,
96424
+ "w:vAlign": translator$h,
96425
+ "w:noWrap": translator$l,
96426
+ "w:tcFitText": translator$i,
96427
+ "w:tcW": translator$r,
96428
+ "w:hideMark": translator$g,
96429
+ "w:textDirection": translator$j,
96430
+ "w:tl2br": translator$o,
96431
+ "w:tr2bl": translator$n,
96432
+ "w:header": translator$f,
96433
+ "w:headers": translator$e,
96434
+ "w:tcBorders": translator$m,
96435
+ "w:tcMar": translator$k,
96436
+ "w:tcPr": translator$d
95934
96437
  });
95935
96438
  const baseHandlers = {
95936
96439
  ...runPropertyTranslators,
@@ -96277,7 +96780,7 @@ ${style2}
96277
96780
  this.errors = [];
96278
96781
  }
96279
96782
  }
96280
- const BlankDOCX = "data:application/octet-stream;base64,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";
96783
+ const BlankDOCX = "data:application/octet-stream;base64,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";
96281
96784
  function getDefaultExportFromCjs(x) {
96282
96785
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
96283
96786
  }
@@ -112477,6 +112980,9 @@ ${style2}
112477
112980
  const onEditorListdefinitionsChange = (params2) => {
112478
112981
  proxy.$superdoc.emit("list-definitions-change", params2);
112479
112982
  };
112983
+ const onFontsResolved = (params2) => {
112984
+ proxy.$superdoc.emit("fonts-resolved", params2);
112985
+ };
112480
112986
  const editorOptions = (doc2) => {
112481
112987
  const options = {
112482
112988
  isDebug: proxy.$superdoc.config.isDebug || false,
@@ -112509,6 +113015,7 @@ ${style2}
112509
113015
  onCommentsUpdate: onEditorCommentsUpdate,
112510
113016
  onCommentLocationsUpdate: onEditorCommentLocationsUpdate,
112511
113017
  onListDefinitionsChange: onEditorListdefinitionsChange,
113018
+ onFontsResolved: proxy?.$superdoc?.config?.onFontsResolved ? onFontsResolved : null,
112512
113019
  onTransaction: onEditorTransaction,
112513
113020
  ydoc: doc2.ydoc,
112514
113021
  collaborationProvider: doc2.provider || null,
@@ -112887,7 +113394,7 @@ ${style2}
112887
113394
  };
112888
113395
  }
112889
113396
  };
112890
- const App = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-96983cf9"]]);
113397
+ const App = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-6de7ff3a"]]);
112891
113398
  const createSuperdocVueApp = () => {
112892
113399
  const app = createApp(App);
112893
113400
  const pinia = createPinia();
@@ -112898,17 +113405,62 @@ ${style2}
112898
113405
  const highContrastModeStore = useHighContrastMode();
112899
113406
  return { app, pinia, superdocStore, commentsStore, highContrastModeStore };
112900
113407
  };
112901
- const createDownload = (blob, name, extension) => {
113408
+ const MIME_TYPES = {
113409
+ docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
113410
+ pdf: "application/pdf",
113411
+ zip: "application/zip",
113412
+ html: "text/html",
113413
+ txt: "text/plain;charset=utf-8",
113414
+ json: "application/json"
113415
+ };
113416
+ const getMimeType = (extension) => {
113417
+ if (!extension || typeof extension.toLowerCase !== "function") return "application/octet-stream";
113418
+ return MIME_TYPES[extension.toLowerCase()] || "application/octet-stream";
113419
+ };
113420
+ const ensureBlob = (data, extension) => {
113421
+ if (data instanceof Blob) return data;
113422
+ const mimeType = getMimeType(extension);
113423
+ if (data instanceof ArrayBuffer) {
113424
+ return new Blob([data], { type: mimeType });
113425
+ }
113426
+ if (ArrayBuffer.isView(data)) {
113427
+ const { buffer: buffer2, byteOffset, byteLength: byteLength2 } = data;
113428
+ const slice = buffer2.slice(byteOffset, byteOffset + byteLength2);
113429
+ return new Blob([slice], { type: mimeType });
113430
+ }
113431
+ if (typeof data === "string") {
113432
+ return new Blob([data], { type: mimeType });
113433
+ }
113434
+ if (data == null) {
113435
+ throw new TypeError("createDownload requires a Blob, ArrayBuffer, or ArrayBufferView.");
113436
+ }
113437
+ throw new TypeError(`Cannot create download from value of type ${typeof data}`);
113438
+ };
113439
+ const createDownload = (data, name, extension) => {
113440
+ const blob = ensureBlob(data, extension);
113441
+ if (typeof URL === "undefined" || typeof URL.createObjectURL !== "function") return blob;
113442
+ if (typeof document === "undefined" || typeof document.createElement !== "function") return blob;
112902
113443
  const url = URL.createObjectURL(blob);
112903
113444
  const a = document.createElement("a");
112904
113445
  a.href = url;
112905
113446
  a.download = `${name}.${extension}`;
113447
+ const shouldAppend = document.body && typeof document.body.appendChild === "function";
113448
+ if (shouldAppend) document.body.appendChild(a);
112906
113449
  a.click();
113450
+ if (shouldAppend) document.body.removeChild(a);
113451
+ if (typeof URL.revokeObjectURL === "function") {
113452
+ setTimeout(() => URL.revokeObjectURL(url), 0);
113453
+ }
113454
+ return blob;
112907
113455
  };
112908
113456
  const cleanName = (currentName) => {
112909
- if (currentName.toLowerCase().endsWith(".docx") || currentName.toLowerCase().endsWith(".pdf")) {
113457
+ const lowerName = currentName.toLowerCase();
113458
+ if (lowerName.endsWith(".docx")) {
112910
113459
  return currentName.slice(0, -5);
112911
113460
  }
113461
+ if (lowerName.endsWith(".pdf")) {
113462
+ return currentName.slice(0, -4);
113463
+ }
112912
113464
  return currentName;
112913
113465
  };
112914
113466
  class SuperDoc extends EventEmitter {
@@ -112968,6 +113520,7 @@ ${style2}
112968
113520
  onException: () => null,
112969
113521
  onListDefinitionsChange: () => null,
112970
113522
  onTransaction: () => null,
113523
+ onFontsResolved: null,
112971
113524
  // Image upload handler
112972
113525
  // async (file) => url;
112973
113526
  handleImageUpload: null,
@@ -113142,6 +113695,9 @@ ${style2}
113142
113695
  this.on("content-error", this.onContentError);
113143
113696
  this.on("exception", this.config.onException);
113144
113697
  this.on("list-definitions-change", this.config.onListDefinitionsChange);
113698
+ if (this.config.onFontsResolved) {
113699
+ this.on("fonts-resolved", this.config.onFontsResolved);
113700
+ }
113145
113701
  }
113146
113702
  /**
113147
113703
  * Initialize collaboration if configured
@@ -113522,14 +114078,25 @@ ${style2}
113522
114078
  comments.push(...this.commentsStore.translateCommentsForExport());
113523
114079
  }
113524
114080
  }
113525
- const docxPromises = [];
113526
- this.superdocStore.documents.forEach((doc2) => {
113527
- const editor = doc2.getEditor();
113528
- if (editor) {
113529
- docxPromises.push(editor.exportDocx({ isFinalDoc, comments, commentsType, fieldsHighlightColor }));
114081
+ const docxPromises = this.superdocStore.documents.map(async (doc2) => {
114082
+ if (!doc2 || doc2.type !== DOCX) return null;
114083
+ const editor = typeof doc2.getEditor === "function" ? doc2.getEditor() : null;
114084
+ const fallbackDocx = () => {
114085
+ if (!doc2.data) return null;
114086
+ if (doc2.data.type && doc2.data.type !== DOCX) return null;
114087
+ return doc2.data;
114088
+ };
114089
+ if (!editor) return fallbackDocx();
114090
+ try {
114091
+ const exported = await editor.exportDocx({ isFinalDoc, comments, commentsType, fieldsHighlightColor });
114092
+ if (exported) return exported;
114093
+ } catch (error) {
114094
+ this.emit("exception", { error, document: doc2 });
113530
114095
  }
114096
+ return fallbackDocx();
113531
114097
  });
113532
- return await Promise.all(docxPromises);
114098
+ const docxFiles = await Promise.all(docxPromises);
114099
+ return docxFiles.filter(Boolean);
113533
114100
  }
113534
114101
  /**
113535
114102
  * Request an immediate save from all collaboration documents