@harbour-enterprises/superdoc 0.19.0-next.4 → 0.19.0-next.6

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 (62) hide show
  1. package/dist/chunks/{PdfViewer-DmC4Qg1S.cjs → PdfViewer-BlV8_l4e.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-Df9H8xeA.es.js → PdfViewer-oqYWe1FJ.es.js} +1 -1
  3. package/dist/chunks/{index-C_oHQN7n.es.js → index-CeockUQz.es.js} +35 -3
  4. package/dist/chunks/{index-CWQGBk3Z.cjs → index-DHyh73q4.cjs} +35 -3
  5. package/dist/chunks/{super-editor.es-C2QwEj1z.es.js → super-editor.es-BRBU19lM.es.js} +614 -295
  6. package/dist/chunks/{super-editor.es-B_u6OGsf.cjs → super-editor.es-bu-RKSWh.cjs} +614 -295
  7. package/dist/core/SuperDoc.d.ts.map +1 -1
  8. package/dist/stores/superdoc-store.d.ts +3 -0
  9. package/dist/stores/superdoc-store.d.ts.map +1 -1
  10. package/dist/style.css +6 -6
  11. package/dist/super-editor/ai-writer.es.js +2 -2
  12. package/dist/super-editor/chunks/{converter-CMajoq-M.js → converter-BFq1XXek.js} +472 -208
  13. package/dist/super-editor/chunks/{docx-zipper-C5rg6GNf.js → docx-zipper-BahUy6FS.js} +1 -1
  14. package/dist/super-editor/chunks/{editor-CH3sE8Fq.js → editor-BdLd21gy.js} +135 -85
  15. package/dist/super-editor/chunks/{toolbar-BHnLBr61.js → toolbar-DoJY1zlM.js} +2 -2
  16. package/dist/super-editor/converter.es.js +1 -1
  17. package/dist/super-editor/docx-zipper.es.js +2 -2
  18. package/dist/super-editor/editor.es.js +3 -3
  19. package/dist/super-editor/file-zipper.es.js +1 -1
  20. package/dist/super-editor/src/core/super-converter/exporter.d.ts +0 -7
  21. package/dist/super-editor/src/core/super-converter/v2/importer/tableImporter.d.ts +0 -22
  22. package/dist/super-editor/src/core/super-converter/v3/handlers/utils.d.ts +37 -0
  23. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cantSplit/cantSplit-translator.d.ts +6 -0
  24. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cantSplit/index.d.ts +1 -0
  25. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cnfStyle/cnfStyle-translator.d.ts +7 -0
  26. package/dist/super-editor/src/core/super-converter/v3/handlers/w/cnfStyle/index.d.ts +1 -0
  27. package/dist/super-editor/src/core/super-converter/v3/handlers/w/divId/divId-translator.d.ts +6 -0
  28. package/dist/super-editor/src/core/super-converter/v3/handlers/w/divId/index.d.ts +1 -0
  29. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridAfter/gridAfter-translator.d.ts +6 -0
  30. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridAfter/index.d.ts +1 -0
  31. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridBefore/gridBefore-translator.d.ts +6 -0
  32. package/dist/super-editor/src/core/super-converter/v3/handlers/w/gridBefore/index.d.ts +1 -0
  33. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.d.ts +6 -0
  34. package/dist/super-editor/src/core/super-converter/v3/handlers/w/hidden/index.d.ts +1 -0
  35. package/dist/super-editor/src/core/super-converter/v3/handlers/w/jc/index.d.ts +1 -0
  36. package/dist/super-editor/src/core/super-converter/v3/handlers/w/jc/jc-translator.d.ts +6 -0
  37. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellSpacing/index.d.ts +1 -0
  38. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblCellSpacing/tblCellSpacing-translator.d.ts +6 -0
  39. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblHeader/index.d.ts +1 -0
  40. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tblHeader/tblHeader-translator.d.ts +6 -0
  41. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tr/index.d.ts +1 -0
  42. package/dist/super-editor/src/core/super-converter/v3/handlers/w/tr/tr-translator.d.ts +7 -0
  43. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trHeight/index.d.ts +1 -0
  44. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trHeight/trHeight-translator.d.ts +6 -0
  45. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trPr/index.d.ts +1 -0
  46. package/dist/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.d.ts +5 -0
  47. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wAfter/index.d.ts +1 -0
  48. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wAfter/wAfter-translator.d.ts +6 -0
  49. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wBefore/index.d.ts +1 -0
  50. package/dist/super-editor/src/core/super-converter/v3/handlers/w/wBefore/wBefore-translator.d.ts +6 -0
  51. package/dist/super-editor/src/core/super-converter/v3/node-translator/node-translator.d.ts +2 -1
  52. package/dist/super-editor/src/extensions/table-row/table-row.d.ts +149 -0
  53. package/dist/super-editor/style.css +6 -6
  54. package/dist/super-editor/super-editor.es.js +13 -8
  55. package/dist/super-editor/toolbar.es.js +2 -2
  56. package/dist/super-editor.cjs +1 -1
  57. package/dist/super-editor.es.js +1 -1
  58. package/dist/superdoc.cjs +2 -2
  59. package/dist/superdoc.es.js +2 -2
  60. package/dist/superdoc.umd.js +647 -296
  61. package/dist/superdoc.umd.js.map +1 -1
  62. package/package.json +1 -1
@@ -25594,37 +25594,37 @@ const _NodeTranslator = class _NodeTranslator2 {
25594
25594
  };
25595
25595
  __publicField$2(_NodeTranslator, "translatorTypes", TranslatorTypes);
25596
25596
  let NodeTranslator = _NodeTranslator;
25597
- const encode$g = (attributes) => {
25597
+ const encode$i = (attributes) => {
25598
25598
  return attributes["w:type"];
25599
25599
  };
25600
- const decode$g = (attrs) => {
25600
+ const decode$i = (attrs) => {
25601
25601
  const { lineBreakType } = attrs;
25602
25602
  return lineBreakType;
25603
25603
  };
25604
25604
  const attrConfig$b = Object.freeze({
25605
25605
  xmlName: "w:type",
25606
25606
  sdName: "lineBreakType",
25607
- encode: encode$g,
25608
- decode: decode$g
25607
+ encode: encode$i,
25608
+ decode: decode$i
25609
25609
  });
25610
- const encode$f = (attributes) => {
25610
+ const encode$h = (attributes) => {
25611
25611
  const xmlAttrValue = attributes["w:clear"];
25612
25612
  return xmlAttrValue;
25613
25613
  };
25614
- const decode$f = (attrs) => {
25614
+ const decode$h = (attrs) => {
25615
25615
  const { clear } = attrs;
25616
25616
  return clear;
25617
25617
  };
25618
25618
  const attrConfig$a = Object.freeze({
25619
25619
  xmlName: "w:clear",
25620
25620
  sdName: "clear",
25621
- encode: encode$f,
25622
- decode: decode$f
25621
+ encode: encode$h,
25622
+ decode: decode$h
25623
25623
  });
25624
- const validXmlAttributes$4 = [attrConfig$b, attrConfig$a];
25625
- const XML_NODE_NAME$4 = "w:br";
25626
- const SD_NODE_NAME$4 = "lineBreak";
25627
- const encode$e = (_2, encodedAttrs) => {
25624
+ const validXmlAttributes$5 = [attrConfig$b, attrConfig$a];
25625
+ const XML_NODE_NAME$6 = "w:br";
25626
+ const SD_NODE_NAME$5 = "lineBreak";
25627
+ const encode$g = (_2, encodedAttrs) => {
25628
25628
  const isPageBreak = encodedAttrs?.lineBreakType === "page";
25629
25629
  const translated = {
25630
25630
  type: isPageBreak ? "hardBreak" : "lineBreak"
@@ -25634,7 +25634,7 @@ const encode$e = (_2, encodedAttrs) => {
25634
25634
  }
25635
25635
  return translated;
25636
25636
  };
25637
- const decode$e = (params2, decodedAttrs) => {
25637
+ const decode$g = (params2, decodedAttrs) => {
25638
25638
  const { node: node2 } = params2;
25639
25639
  if (!node2) return;
25640
25640
  const wBreak = { name: "w:br" };
@@ -25651,63 +25651,63 @@ const decode$e = (params2, decodedAttrs) => {
25651
25651
  };
25652
25652
  return translated;
25653
25653
  };
25654
- const config$4 = {
25655
- xmlName: XML_NODE_NAME$4,
25656
- sdNodeOrKeyName: SD_NODE_NAME$4,
25654
+ const config$6 = {
25655
+ xmlName: XML_NODE_NAME$6,
25656
+ sdNodeOrKeyName: SD_NODE_NAME$5,
25657
25657
  type: NodeTranslator.translatorTypes.NODE,
25658
- encode: encode$e,
25659
- decode: decode$e,
25660
- attributes: validXmlAttributes$4
25658
+ encode: encode$g,
25659
+ decode: decode$g,
25660
+ attributes: validXmlAttributes$5
25661
25661
  };
25662
- const translator$4 = NodeTranslator.from(config$4);
25663
- const encode$d = (attributes) => {
25662
+ const translator$i = NodeTranslator.from(config$6);
25663
+ const encode$f = (attributes) => {
25664
25664
  return attributes["w:val"];
25665
25665
  };
25666
- const decode$d = (attrs) => {
25666
+ const decode$f = (attrs) => {
25667
25667
  const { tabSize } = attrs || {};
25668
25668
  return tabSize;
25669
25669
  };
25670
25670
  const attrConfig$9 = Object.freeze({
25671
25671
  xmlName: "w:val",
25672
25672
  sdName: "tabSize",
25673
- encode: encode$d,
25674
- decode: decode$d
25673
+ encode: encode$f,
25674
+ decode: decode$f
25675
25675
  });
25676
- const encode$c = (attributes) => {
25676
+ const encode$e = (attributes) => {
25677
25677
  return attributes["w:leader"];
25678
25678
  };
25679
- const decode$c = (attrs) => {
25679
+ const decode$e = (attrs) => {
25680
25680
  const { leader } = attrs || {};
25681
25681
  return leader;
25682
25682
  };
25683
25683
  const attrConfig$8 = Object.freeze({
25684
25684
  xmlName: "w:leader",
25685
25685
  sdName: "leader",
25686
- encode: encode$c,
25687
- decode: decode$c
25686
+ encode: encode$e,
25687
+ decode: decode$e
25688
25688
  });
25689
- const encode$b = (attributes) => {
25689
+ const encode$d = (attributes) => {
25690
25690
  return attributes["w:pos"];
25691
25691
  };
25692
- const decode$b = (attrs) => {
25692
+ const decode$d = (attrs) => {
25693
25693
  const { pos } = attrs || {};
25694
25694
  return pos;
25695
25695
  };
25696
25696
  const attrConfig$7 = Object.freeze({
25697
25697
  xmlName: "w:pos",
25698
25698
  sdName: "pos",
25699
- encode: encode$b,
25700
- decode: decode$b
25699
+ encode: encode$d,
25700
+ decode: decode$d
25701
25701
  });
25702
- const validXmlAttributes$3 = [attrConfig$9, attrConfig$7, attrConfig$8];
25703
- const XML_NODE_NAME$3 = "w:tab";
25704
- const SD_NODE_NAME$3 = "tab";
25705
- const encode$a = (_2, encodedAttrs = {}) => {
25702
+ const validXmlAttributes$4 = [attrConfig$9, attrConfig$7, attrConfig$8];
25703
+ const XML_NODE_NAME$5 = "w:tab";
25704
+ const SD_NODE_NAME$4 = "tab";
25705
+ const encode$c = (_2, encodedAttrs = {}) => {
25706
25706
  const translated = { type: "tab" };
25707
25707
  if (encodedAttrs) translated.attrs = { ...encodedAttrs };
25708
25708
  return translated;
25709
25709
  };
25710
- const decode$a = (params2, decodedAttrs = {}) => {
25710
+ const decode$c = (params2, decodedAttrs = {}) => {
25711
25711
  const { node: node2 } = params2 || {};
25712
25712
  if (!node2) return;
25713
25713
  const wTab = { name: "w:tab" };
@@ -25723,15 +25723,15 @@ const decode$a = (params2, decodedAttrs = {}) => {
25723
25723
  }
25724
25724
  return translated;
25725
25725
  };
25726
- const config$3 = {
25727
- xmlName: XML_NODE_NAME$3,
25728
- sdNodeOrKeyName: SD_NODE_NAME$3,
25726
+ const config$5 = {
25727
+ xmlName: XML_NODE_NAME$5,
25728
+ sdNodeOrKeyName: SD_NODE_NAME$4,
25729
25729
  type: NodeTranslator.translatorTypes.NODE,
25730
- encode: encode$a,
25731
- decode: decode$a,
25732
- attributes: validXmlAttributes$3
25730
+ encode: encode$c,
25731
+ decode: decode$c,
25732
+ attributes: validXmlAttributes$4
25733
25733
  };
25734
- const translator$3 = NodeTranslator.from(config$3);
25734
+ const translator$h = NodeTranslator.from(config$5);
25735
25735
  const mergeTextNodes = (nodes) => {
25736
25736
  if (!nodes || !Array.isArray(nodes)) {
25737
25737
  return nodes;
@@ -26301,91 +26301,91 @@ const handleParagraphNode$1 = (params2) => {
26301
26301
  }
26302
26302
  return schemaNode;
26303
26303
  };
26304
- const encode$9 = (attributes) => {
26304
+ const encode$b = (attributes) => {
26305
26305
  return attributes["w:rsidDel"];
26306
26306
  };
26307
- const decode$9 = (attrs) => {
26307
+ const decode$b = (attrs) => {
26308
26308
  return attrs.rsidDel;
26309
26309
  };
26310
26310
  const attrConfig$6 = Object.freeze({
26311
26311
  xmlName: "w:rsidDel",
26312
26312
  sdName: "rsidDel",
26313
- encode: encode$9,
26314
- decode: decode$9
26313
+ encode: encode$b,
26314
+ decode: decode$b
26315
26315
  });
26316
- const encode$8 = (attributes) => {
26316
+ const encode$a = (attributes) => {
26317
26317
  return attributes["w:rsidP"];
26318
26318
  };
26319
- const decode$8 = (attrs) => {
26319
+ const decode$a = (attrs) => {
26320
26320
  return attrs.rsidP;
26321
26321
  };
26322
26322
  const attrConfig$5 = Object.freeze({
26323
26323
  xmlName: "w:rsidP",
26324
26324
  sdName: "rsidP",
26325
- encode: encode$8,
26326
- decode: decode$8
26325
+ encode: encode$a,
26326
+ decode: decode$a
26327
26327
  });
26328
- const encode$7 = (attributes) => {
26328
+ const encode$9 = (attributes) => {
26329
26329
  return attributes["w:rsidR"];
26330
26330
  };
26331
- const decode$7 = (attrs) => {
26331
+ const decode$9 = (attrs) => {
26332
26332
  return attrs.rsidR;
26333
26333
  };
26334
26334
  const attrConfig$4 = Object.freeze({
26335
26335
  xmlName: "w:rsidR",
26336
26336
  sdName: "rsidR",
26337
- encode: encode$7,
26338
- decode: decode$7
26337
+ encode: encode$9,
26338
+ decode: decode$9
26339
26339
  });
26340
- const encode$6 = (attributes) => {
26340
+ const encode$8 = (attributes) => {
26341
26341
  return attributes["w:rsidRPr"];
26342
26342
  };
26343
- const decode$6 = (attrs) => {
26343
+ const decode$8 = (attrs) => {
26344
26344
  return attrs.rsidRPr;
26345
26345
  };
26346
26346
  const attrConfig$3 = Object.freeze({
26347
26347
  xmlName: "w:rsidRPr",
26348
26348
  sdName: "rsidRPr",
26349
- encode: encode$6,
26350
- decode: decode$6
26349
+ encode: encode$8,
26350
+ decode: decode$8
26351
26351
  });
26352
- const encode$5 = (attributes) => {
26352
+ const encode$7 = (attributes) => {
26353
26353
  return attributes["w:rsidRDefault"];
26354
26354
  };
26355
- const decode$5 = (attrs) => {
26355
+ const decode$7 = (attrs) => {
26356
26356
  return attrs.rsidRDefault;
26357
26357
  };
26358
26358
  const attrConfig$2 = Object.freeze({
26359
26359
  xmlName: "w:rsidRDefault",
26360
26360
  sdName: "rsidRDefault",
26361
- encode: encode$5,
26362
- decode: decode$5
26361
+ encode: encode$7,
26362
+ decode: decode$7
26363
26363
  });
26364
- const encode$4 = (attributes) => {
26364
+ const encode$6 = (attributes) => {
26365
26365
  return attributes["w14:paraId"];
26366
26366
  };
26367
- const decode$4 = (attrs) => {
26367
+ const decode$6 = (attrs) => {
26368
26368
  return attrs.paraId;
26369
26369
  };
26370
26370
  const attrConfig$1 = Object.freeze({
26371
26371
  xmlName: "w14:paraId",
26372
26372
  sdName: "paraId",
26373
- encode: encode$4,
26374
- decode: decode$4
26373
+ encode: encode$6,
26374
+ decode: decode$6
26375
26375
  });
26376
- const encode$3 = (attributes) => {
26376
+ const encode$5 = (attributes) => {
26377
26377
  return attributes["w14:textId"];
26378
26378
  };
26379
- const decode$3 = (attrs) => {
26379
+ const decode$5 = (attrs) => {
26380
26380
  return attrs.textId;
26381
26381
  };
26382
26382
  const attrConfig = Object.freeze({
26383
26383
  xmlName: "w14:textId",
26384
26384
  sdName: "textId",
26385
- encode: encode$3,
26386
- decode: decode$3
26385
+ encode: encode$5,
26386
+ decode: decode$5
26387
26387
  });
26388
- const validXmlAttributes$2 = [
26388
+ const validXmlAttributes$3 = [
26389
26389
  attrConfig$1,
26390
26390
  attrConfig,
26391
26391
  attrConfig$4,
@@ -26394,9 +26394,9 @@ const validXmlAttributes$2 = [
26394
26394
  attrConfig$3,
26395
26395
  attrConfig$6
26396
26396
  ];
26397
- const XML_NODE_NAME$2 = "w:p";
26398
- const SD_NODE_NAME$2 = "paragraph";
26399
- const encode$2 = (params2, encodedAttrs = {}) => {
26397
+ const XML_NODE_NAME$4 = "w:p";
26398
+ const SD_NODE_NAME$3 = "paragraph";
26399
+ const encode$4 = (params2, encodedAttrs = {}) => {
26400
26400
  const node2 = handleParagraphNode$1(params2);
26401
26401
  if (!node2) return void 0;
26402
26402
  if (encodedAttrs && Object.keys(encodedAttrs).length) {
@@ -26404,7 +26404,7 @@ const encode$2 = (params2, encodedAttrs = {}) => {
26404
26404
  }
26405
26405
  return node2;
26406
26406
  };
26407
- const decode$2 = (params2, decodedAttrs = {}) => {
26407
+ const decode$4 = (params2, decodedAttrs = {}) => {
26408
26408
  const translated = translateParagraphNode(params2);
26409
26409
  if (!translated) return void 0;
26410
26410
  if (decodedAttrs && Object.keys(decodedAttrs).length) {
@@ -26412,6 +26412,362 @@ const decode$2 = (params2, decodedAttrs = {}) => {
26412
26412
  }
26413
26413
  return translated;
26414
26414
  };
26415
+ const config$4 = {
26416
+ xmlName: XML_NODE_NAME$4,
26417
+ sdNodeOrKeyName: SD_NODE_NAME$3,
26418
+ type: NodeTranslator.translatorTypes.NODE,
26419
+ encode: encode$4,
26420
+ decode: decode$4,
26421
+ attributes: validXmlAttributes$3
26422
+ };
26423
+ const translator$g = NodeTranslator.from(config$4);
26424
+ const generateV2HandlerEntity = (handlerName, translator2) => ({
26425
+ handlerName,
26426
+ handler: (params2) => {
26427
+ const { nodes } = params2;
26428
+ if (nodes.length === 0 || nodes[0].name !== translator2.xmlName) {
26429
+ return { nodes: [], consumed: 0 };
26430
+ }
26431
+ const result = translator2.encode(params2);
26432
+ if (!result) return { nodes: [], consumed: 0 };
26433
+ return {
26434
+ nodes: Array.isArray(result) ? result : [result],
26435
+ consumed: 1
26436
+ };
26437
+ }
26438
+ });
26439
+ function createSingleAttrPropertyHandler(xmlName, sdName = null, attrName = "w:val", transformEncode = null, transformDecode = null) {
26440
+ if (!sdName) sdName = xmlName.split(":")[1];
26441
+ if (!transformEncode) transformEncode = (v2) => v2;
26442
+ if (!transformDecode) transformDecode = (v2) => v2;
26443
+ return {
26444
+ xmlName,
26445
+ sdNodeOrKeyName: sdName,
26446
+ encode: ({ nodes }) => {
26447
+ return transformEncode(nodes[0].attributes[attrName]) ?? void 0;
26448
+ },
26449
+ decode: ({ node: node2 }) => {
26450
+ const value = node2.attrs?.[sdName] != null ? transformDecode(node2.attrs[sdName]) : void 0;
26451
+ return value != null ? { [attrName]: value } : void 0;
26452
+ }
26453
+ };
26454
+ }
26455
+ function createMeasurementPropertyHandler(xmlName, sdName = null) {
26456
+ if (!sdName) sdName = xmlName.split(":")[1];
26457
+ return {
26458
+ xmlName,
26459
+ sdNodeOrKeyName: sdName,
26460
+ attributes: [
26461
+ createAttributeHandler("w:w", "value", parseInteger, integerToString),
26462
+ createAttributeHandler("w:type")
26463
+ ],
26464
+ encode: (_2, encodedAttrs) => {
26465
+ return encodedAttrs["value"] != null ? encodedAttrs : void 0;
26466
+ },
26467
+ decode: function({ node: node2 }) {
26468
+ const decodedAttrs = this.decodeAttributes({ node: { ...node2, attrs: node2.attrs[sdName] || {} } });
26469
+ return decodedAttrs["w:w"] != null ? decodedAttrs : void 0;
26470
+ }
26471
+ };
26472
+ }
26473
+ const createAttributeHandler = (xmlName, sdName = null, transformEncode = null, transformDecode = null) => {
26474
+ if (!transformEncode) transformEncode = (v2) => v2;
26475
+ if (!transformDecode) transformDecode = (v2) => v2;
26476
+ if (!sdName) sdName = xmlName.split(":")[1];
26477
+ return {
26478
+ xmlName,
26479
+ sdName,
26480
+ encode: (attributes) => transformEncode(attributes[xmlName]),
26481
+ decode: (attributes) => transformDecode(attributes[sdName])
26482
+ };
26483
+ };
26484
+ function encodeProperties(node2, translatorsByXmlName, asArray = false) {
26485
+ if (!node2?.elements || node2.elements.length === 0) {
26486
+ return asArray ? [] : {};
26487
+ }
26488
+ const attributes = asArray ? [] : {};
26489
+ node2.elements.forEach((el) => {
26490
+ const translator2 = translatorsByXmlName[el.name];
26491
+ if (translator2) {
26492
+ const encodedAttr = translator2.encode({ nodes: [el] });
26493
+ if (encodedAttr != null) {
26494
+ if (asArray) {
26495
+ attributes.push({ [translator2.sdNodeOrKeyName]: encodedAttr });
26496
+ } else {
26497
+ attributes[translator2.sdNodeOrKeyName] = encodedAttr;
26498
+ }
26499
+ }
26500
+ }
26501
+ });
26502
+ return attributes;
26503
+ }
26504
+ function decodeProperties(translatorsBySdName, properties) {
26505
+ if (!properties || typeof properties !== "object") {
26506
+ return [];
26507
+ }
26508
+ const elements = [];
26509
+ Object.keys(properties).forEach((key) => {
26510
+ const translator2 = translatorsBySdName[key];
26511
+ if (translator2) {
26512
+ const attributes = translator2.decode({ node: { attrs: { [key]: properties[key] } } });
26513
+ if (attributes != null) {
26514
+ elements.push({ name: translator2.xmlName, attributes });
26515
+ }
26516
+ }
26517
+ });
26518
+ return elements;
26519
+ }
26520
+ const parseBoolean = (value) => ["1", "true"].includes(value);
26521
+ const parseInteger = (value) => {
26522
+ if (value == null) return void 0;
26523
+ const intValue = parseInt(value, 10);
26524
+ return isNaN(intValue) ? void 0 : intValue;
26525
+ };
26526
+ const integerToString = (value) => {
26527
+ const intValue = parseInteger(value);
26528
+ return intValue != void 0 ? String(intValue) : void 0;
26529
+ };
26530
+ const translator$f = NodeTranslator.from({
26531
+ xmlName: "w:cantSplit",
26532
+ sdNodeOrKeyName: "cantSplit",
26533
+ encode: ({ nodes }) => ["1", "true"].includes(nodes[0].attributes?.["w:val"] ?? "1"),
26534
+ decode: ({ node: node2 }) => node2.attrs?.cantSplit ? {} : void 0
26535
+ });
26536
+ const translator$e = NodeTranslator.from({
26537
+ xmlName: "w:cnfStyle",
26538
+ sdNodeOrKeyName: "cnfStyle",
26539
+ attributes: [
26540
+ "w:evenHBand",
26541
+ "w:evenVBand",
26542
+ "w:firstColumn",
26543
+ "w:firstRow",
26544
+ "w:firstRowFirstColumn",
26545
+ "w:firstRowLastColumn",
26546
+ "w:lastColumn",
26547
+ "w:lastRow",
26548
+ "w:lastRowFirstColumn",
26549
+ "w:lastRowLastColumn",
26550
+ "w:oddHBand",
26551
+ "w:oddVBand",
26552
+ "w:val"
26553
+ ].map((attr) => createAttributeHandler(attr)),
26554
+ encode: (_2, encodedAttrs) => {
26555
+ Object.keys(encodedAttrs).forEach((key) => {
26556
+ encodedAttrs[key] = ["1", "true"].includes(encodedAttrs[key]);
26557
+ });
26558
+ return Object.keys(encodedAttrs).length > 0 ? encodedAttrs : void 0;
26559
+ },
26560
+ decode: ({ node: node2 }) => {
26561
+ if (!node2.attrs?.cnfStyle) return;
26562
+ const cnfStyleAttrs = {};
26563
+ Object.entries(node2.attrs.cnfStyle).forEach(([key, value]) => {
26564
+ cnfStyleAttrs[`w:${key}`] = value ? "1" : "0";
26565
+ });
26566
+ return Object.keys(cnfStyleAttrs).length > 0 ? cnfStyleAttrs : void 0;
26567
+ }
26568
+ });
26569
+ const translator$d = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
26570
+ const translator$c = NodeTranslator.from(
26571
+ createSingleAttrPropertyHandler(
26572
+ "w:gridAfter",
26573
+ null,
26574
+ "w:val",
26575
+ (v2) => parseInteger(v2) ?? void 0,
26576
+ (v2) => integerToString(v2)
26577
+ )
26578
+ );
26579
+ const translator$b = NodeTranslator.from(
26580
+ createSingleAttrPropertyHandler(
26581
+ "w:gridBefore",
26582
+ null,
26583
+ "w:val",
26584
+ (v2) => parseInteger(v2) ?? void 0,
26585
+ (v2) => integerToString(v2)
26586
+ )
26587
+ );
26588
+ const translator$a = NodeTranslator.from({
26589
+ xmlName: "w:hidden",
26590
+ sdNodeOrKeyName: "hidden",
26591
+ encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
26592
+ decode: ({ node: node2 }) => node2.attrs.hidden ? {} : void 0
26593
+ });
26594
+ const translator$9 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc"));
26595
+ const translator$8 = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "cellSpacing"));
26596
+ const translator$7 = NodeTranslator.from({
26597
+ xmlName: "w:tblHeader",
26598
+ sdNodeOrKeyName: "repeatHeader",
26599
+ encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
26600
+ decode: ({ node: node2 }) => node2.attrs.repeatHeader ? {} : void 0
26601
+ });
26602
+ const translator$6 = NodeTranslator.from({
26603
+ xmlName: "w:trHeight",
26604
+ sdNodeOrKeyName: "rowHeight",
26605
+ encode: ({ nodes }) => {
26606
+ const heightAttrs = {};
26607
+ const val = nodes[0].attributes["w:val"];
26608
+ if (val) {
26609
+ heightAttrs["value"] = parseInt(val, 10);
26610
+ }
26611
+ const rule = nodes[0].attributes["w:hRule"];
26612
+ if (rule) {
26613
+ heightAttrs["rule"] = rule;
26614
+ }
26615
+ return Object.keys(heightAttrs).length > 0 ? heightAttrs : void 0;
26616
+ },
26617
+ decode: ({ node: node2 }) => {
26618
+ if (!node2.attrs?.rowHeight) return;
26619
+ const heightAttrs = {};
26620
+ if (typeof node2.attrs.rowHeight.value === "number" && !isNaN(node2.attrs.rowHeight.value)) {
26621
+ heightAttrs["w:val"] = String(node2.attrs.rowHeight.value);
26622
+ }
26623
+ if (node2.attrs.rowHeight.rule) {
26624
+ heightAttrs["w:hRule"] = node2.attrs.rowHeight.rule;
26625
+ }
26626
+ return Object.keys(heightAttrs).length > 0 ? heightAttrs : void 0;
26627
+ }
26628
+ });
26629
+ const translator$5 = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
26630
+ const translator$4 = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
26631
+ const XML_NODE_NAME$3 = "w:trPr";
26632
+ const SD_ATTR_KEY = "tableRowProperties";
26633
+ const encode$3 = (params2) => {
26634
+ const { nodes } = params2;
26635
+ const node2 = nodes[0];
26636
+ let attributes = {
26637
+ cantSplit: false,
26638
+ hidden: false,
26639
+ repeatHeader: false
26640
+ };
26641
+ attributes = {
26642
+ ...attributes,
26643
+ ...encodeProperties(node2, propertyTranslatorsByXmlName)
26644
+ };
26645
+ return {
26646
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
26647
+ xmlName: XML_NODE_NAME$3,
26648
+ sdNodeOrKeyName: SD_ATTR_KEY,
26649
+ attributes
26650
+ };
26651
+ };
26652
+ const decode$3 = (params2) => {
26653
+ const { tableRowProperties = {} } = params2.node.attrs || {};
26654
+ const elements = decodeProperties(propertyTranslatorsBySdName, tableRowProperties);
26655
+ const newNode = {
26656
+ name: "w:trPr",
26657
+ type: "element",
26658
+ attributes: {},
26659
+ elements
26660
+ };
26661
+ return newNode;
26662
+ };
26663
+ const propertyTranslators = [
26664
+ translator$f,
26665
+ translator$e,
26666
+ translator$d,
26667
+ translator$c,
26668
+ translator$b,
26669
+ translator$a,
26670
+ translator$9,
26671
+ translator$8,
26672
+ translator$7,
26673
+ translator$6,
26674
+ translator$5,
26675
+ translator$4
26676
+ ];
26677
+ const propertyTranslatorsByXmlName = {};
26678
+ propertyTranslators.forEach((translator2) => {
26679
+ propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
26680
+ });
26681
+ const propertyTranslatorsBySdName = {};
26682
+ propertyTranslators.forEach((translator2) => {
26683
+ propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
26684
+ });
26685
+ const config$3 = {
26686
+ xmlName: XML_NODE_NAME$3,
26687
+ sdNodeOrKeyName: SD_ATTR_KEY,
26688
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
26689
+ encode: encode$3,
26690
+ decode: decode$3
26691
+ };
26692
+ const translator$3 = NodeTranslator.from(config$3);
26693
+ const XML_NODE_NAME$2 = "w:tr";
26694
+ const SD_NODE_NAME$2 = "tableRow";
26695
+ const validXmlAttributes$2 = ["w:rsidDel", "w:rsidR", "w:rsidRPr", "w:rsidTr", "w14:paraId", "w14:textId"].map(
26696
+ (xmlName) => createAttributeHandler(xmlName)
26697
+ );
26698
+ const encode$2 = (params2, encodedAttrs) => {
26699
+ const { row, table } = params2.extraParams;
26700
+ let tableRowProperties = {};
26701
+ const tPr = row.elements.find((el) => el.name === "w:trPr");
26702
+ if (tPr) {
26703
+ ({ attributes: tableRowProperties } = translator$3.encode({
26704
+ ...params2,
26705
+ nodes: [tPr]
26706
+ }));
26707
+ }
26708
+ encodedAttrs["tableRowProperties"] = Object.freeze(tableRowProperties);
26709
+ encodedAttrs["rowHeight"] = twipsToPixels(tableRowProperties["rowHeight"]?.value);
26710
+ encodedAttrs["cantSplit"] = tableRowProperties["cantSplit"];
26711
+ const gridColumnWidths = _getGridColumnWidths(table);
26712
+ const cellNodes = row.elements.filter((el) => el.name === "w:tc");
26713
+ let currentColumnIndex = 0;
26714
+ const content = cellNodes?.map((n) => {
26715
+ let columnWidth = gridColumnWidths?.[currentColumnIndex] || null;
26716
+ const result = translator$1.encode({
26717
+ ...params2,
26718
+ extraParams: {
26719
+ ...params2.extraParams,
26720
+ node: n,
26721
+ columnIndex: currentColumnIndex,
26722
+ columnWidth
26723
+ }
26724
+ });
26725
+ const tcPr = n.elements?.find((el) => el.name === "w:tcPr");
26726
+ const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
26727
+ const colspan = parseInt(colspanTag?.attributes["w:val"] || 1, 10);
26728
+ currentColumnIndex += colspan;
26729
+ return result;
26730
+ }) || [];
26731
+ const newNode = {
26732
+ type: "tableRow",
26733
+ content,
26734
+ attrs: encodedAttrs
26735
+ };
26736
+ return newNode;
26737
+ };
26738
+ const _getGridColumnWidths = (tableNode) => {
26739
+ const tblGrid = tableNode.elements.find((el) => el.name === "w:tblGrid");
26740
+ if (!tblGrid) return [];
26741
+ const columnWidths = tblGrid?.elements?.flatMap((el) => {
26742
+ if (el.name !== "w:gridCol") return [];
26743
+ return twipsToPixels(el.attributes["w:w"]);
26744
+ }) || [];
26745
+ return columnWidths;
26746
+ };
26747
+ const decode$2 = (params2, decodedAttrs) => {
26748
+ const { node: node2 } = params2;
26749
+ const elements = translateChildNodes(params2);
26750
+ if (node2.attrs?.tableRowProperties) {
26751
+ const tableRowProperties = { ...node2.attrs.tableRowProperties };
26752
+ if (node2.attrs.rowHeight != null) {
26753
+ const rowHeightPixels = twipsToPixels(node2.attrs.tableRowProperties["rowHeight"]?.value);
26754
+ if (rowHeightPixels !== node2.attrs.rowHeight) {
26755
+ tableRowProperties["rowHeight"] = { value: String(pixelsToTwips(node2.attrs["rowHeight"])) };
26756
+ }
26757
+ }
26758
+ tableRowProperties["cantSplit"] = node2.attrs["cantSplit"];
26759
+ const trPr = translator$3.decode({
26760
+ ...params2,
26761
+ node: { ...node2, attrs: { ...node2.attrs, tableRowProperties } }
26762
+ });
26763
+ if (trPr) elements.unshift(trPr);
26764
+ }
26765
+ return {
26766
+ name: "w:tr",
26767
+ attributes: decodedAttrs || {},
26768
+ elements
26769
+ };
26770
+ };
26415
26771
  const config$2 = {
26416
26772
  xmlName: XML_NODE_NAME$2,
26417
26773
  sdNodeOrKeyName: SD_NODE_NAME$2,
@@ -26484,7 +26840,16 @@ function handleTableNode(node2, params2) {
26484
26840
  attrs["borders"] = borderData;
26485
26841
  const content = [];
26486
26842
  rows.forEach((row) => {
26487
- const result = handleTableRowNode(row, node2, borderRowData, tblStyleTag, params2);
26843
+ const result = translator$2.encode({
26844
+ ...params2,
26845
+ nodes: [row],
26846
+ extraParams: {
26847
+ row,
26848
+ table: node2,
26849
+ rowBorders: borderRowData,
26850
+ styleTag: tblStyleTag
26851
+ }
26852
+ });
26488
26853
  if (result.content?.length) content.push(result);
26489
26854
  });
26490
26855
  return {
@@ -26493,31 +26858,6 @@ function handleTableNode(node2, params2) {
26493
26858
  attrs
26494
26859
  };
26495
26860
  }
26496
- function handleTableCellNode$1({
26497
- params: params2,
26498
- node: node2,
26499
- table,
26500
- row,
26501
- rowBorders,
26502
- styleTag,
26503
- columnIndex,
26504
- columnWidth = null
26505
- }) {
26506
- const translatorParams = {
26507
- ...params2,
26508
- extraParams: {
26509
- node: node2,
26510
- table,
26511
- row,
26512
- rowBorders,
26513
- styleTag,
26514
- columnIndex,
26515
- columnWidth
26516
- }
26517
- };
26518
- const schemaNode = translator$1.encode(translatorParams);
26519
- return schemaNode;
26520
- }
26521
26861
  function getReferencedTableStyles(tblStyleTag, docx) {
26522
26862
  if (!tblStyleTag) return null;
26523
26863
  const stylesToReturn = {};
@@ -26598,50 +26938,6 @@ function processTableBorders(borderElements) {
26598
26938
  rowBorders
26599
26939
  };
26600
26940
  }
26601
- function handleTableRowNode(node2, table, rowBorders, styleTag, params2) {
26602
- const attrs = {};
26603
- const tPr = node2.elements.find((el) => el.name === "w:trPr");
26604
- const rowHeightTag = tPr?.elements?.find((el) => el.name === "w:trHeight");
26605
- const rowHeight = rowHeightTag?.attributes["w:val"];
26606
- const cantSplitTag = tPr?.elements?.find((el) => el.name === "w:cantSplit");
26607
- if (cantSplitTag) {
26608
- attrs["cantSplit"] = true;
26609
- }
26610
- const borders = {};
26611
- if (rowBorders?.insideH) borders["bottom"] = rowBorders.insideH;
26612
- if (rowBorders?.insideV) borders["right"] = rowBorders.insideV;
26613
- attrs["borders"] = borders;
26614
- if (rowHeight) {
26615
- attrs["rowHeight"] = twipsToPixels(rowHeight);
26616
- }
26617
- const gridColumnWidths = getGridColumnWidths(table);
26618
- const cellNodes = node2.elements.filter((el) => el.name === "w:tc");
26619
- let currentColumnIndex = 0;
26620
- const content = cellNodes?.map((n) => {
26621
- let colWidth = gridColumnWidths?.[currentColumnIndex] || null;
26622
- const result = handleTableCellNode$1({
26623
- params: params2,
26624
- node: n,
26625
- table,
26626
- row: node2,
26627
- rowBorders: borders,
26628
- styleTag,
26629
- columnIndex: currentColumnIndex,
26630
- columnWidth: colWidth
26631
- });
26632
- const tcPr = n.elements?.find((el) => el.name === "w:tcPr");
26633
- const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
26634
- const colspan = parseInt(colspanTag?.attributes["w:val"] || 1, 10);
26635
- currentColumnIndex += colspan;
26636
- return result;
26637
- }) || [];
26638
- const newNode = {
26639
- type: "tableRow",
26640
- content,
26641
- attrs
26642
- };
26643
- return newNode;
26644
- }
26645
26941
  const getGridColumnWidths = (tableNode) => {
26646
26942
  const tblGrid = tableNode.elements.find((el) => el.name === "w:tblGrid");
26647
26943
  if (!tblGrid) return [];
@@ -26664,6 +26960,14 @@ function handleTableCellNode({
26664
26960
  const { docx, nodeListHandler: nodeListHandler2 } = params2;
26665
26961
  const tcPr = node2.elements.find((el) => el.name === "w:tcPr");
26666
26962
  const borders = tcPr?.elements?.find((el) => el.name === "w:tcBorders");
26963
+ if (rowBorders?.insideH) {
26964
+ rowBorders["bottom"] = rowBorders.insideH;
26965
+ delete rowBorders.insideH;
26966
+ }
26967
+ if (rowBorders?.insideV) {
26968
+ rowBorders["right"] = rowBorders.insideV;
26969
+ delete rowBorders?.insideV;
26970
+ }
26667
26971
  const inlineBorders = processInlineCellBorders(borders, rowBorders);
26668
26972
  const gridColumnWidths = getGridColumnWidths(table);
26669
26973
  const tcWidth = tcPr?.elements?.find((el) => el.name === "w:tcW");
@@ -26974,7 +27278,7 @@ const validXmlAttributes = [
26974
27278
  _createAttributeHandler("r:id", "rId"),
26975
27279
  _createAttributeHandler("w:tgtFrame", "target")
26976
27280
  ];
26977
- const encode$h = (params2, encodedAttrs) => {
27281
+ const encode$j = (params2, encodedAttrs) => {
26978
27282
  const { nodes, docx, nodeListHandler: nodeListHandler2 } = params2;
26979
27283
  const node2 = nodes[0];
26980
27284
  let href = _resolveHref(docx, encodedAttrs);
@@ -27005,7 +27309,7 @@ const _resolveHref = (docx, encodedAttrs) => {
27005
27309
  }
27006
27310
  return href;
27007
27311
  };
27008
- function decode(params2, _2) {
27312
+ function decode(params2) {
27009
27313
  const { node: node2 } = params2;
27010
27314
  const linkMark = node2.marks.find((m2) => m2.type === "link");
27011
27315
  const linkAttrs = this.decodeAttributes({ ...params2, node: linkMark });
@@ -27053,7 +27357,7 @@ const config = {
27053
27357
  xmlName: XML_NODE_NAME,
27054
27358
  sdNodeOrKeyName: SD_NODE_NAME,
27055
27359
  type: NodeTranslator.translatorTypes.NODE,
27056
- encode: encode$h,
27360
+ encode: encode$j,
27057
27361
  decode,
27058
27362
  attributes: validXmlAttributes
27059
27363
  };
@@ -27064,19 +27368,19 @@ function exportSchemaToJson(params2) {
27064
27368
  doc: translateDocumentNode,
27065
27369
  body: translateBodyNode,
27066
27370
  heading: translateHeadingNode,
27067
- paragraph: translator$2,
27371
+ paragraph: translator$g,
27068
27372
  text: translateTextNode,
27069
27373
  bulletList: translateList,
27070
27374
  orderedList: translateList,
27071
- lineBreak: translator$4,
27375
+ lineBreak: translator$i,
27072
27376
  table: translateTable,
27073
- tableRow: translateTableRow,
27377
+ tableRow: translator$2,
27074
27378
  tableCell: translator$1,
27075
27379
  bookmarkStart: translateBookmarkStart,
27076
27380
  fieldAnnotation: translateFieldAnnotation,
27077
- tab: translator$3,
27381
+ tab: translator$h,
27078
27382
  image: translateImageNode,
27079
- hardBreak: translator$4,
27383
+ hardBreak: translator$i,
27080
27384
  commentRangeStart: () => translateCommentNode(params2, "Start"),
27081
27385
  commentRangeEnd: () => translateCommentNode(params2, "End"),
27082
27386
  commentReference: () => null,
@@ -27856,36 +28160,6 @@ function generateTableGrid(node2, params2) {
27856
28160
  elements
27857
28161
  };
27858
28162
  }
27859
- function translateTableRow(params2) {
27860
- const elements = translateChildNodes(params2);
27861
- const tableRowProperties = generateTableRowProperties(params2.node);
27862
- if (tableRowProperties.elements.length) elements.unshift(tableRowProperties);
27863
- return {
27864
- name: "w:tr",
27865
- elements
27866
- };
27867
- }
27868
- function generateTableRowProperties(node2) {
27869
- const { attrs } = node2;
27870
- const elements = [];
27871
- const { rowHeight, rowHeightType } = attrs;
27872
- if (rowHeight) {
27873
- const attributes = { "w:val": pixelsToTwips(rowHeight) };
27874
- if (rowHeightType) attributes["w:hRule"] = rowHeightType;
27875
- const rowHeightElement = {
27876
- name: "w:trHeight",
27877
- attributes
27878
- };
27879
- elements.push(rowHeightElement);
27880
- }
27881
- if (attrs?.cantSplit) {
27882
- elements.push({ name: "w:cantSplit" });
27883
- }
27884
- return {
27885
- name: "w:trPr",
27886
- elements
27887
- };
27888
- }
27889
28163
  function translateBookmarkStart(params2) {
27890
28164
  const bookmarkStartNode = {
27891
28165
  name: "w:bookmarkStart",
@@ -29105,21 +29379,6 @@ const trackChangeNodeHandlerEntity = {
29105
29379
  handlerName: "trackChangeNodeHandler",
29106
29380
  handler: handleTrackChangeNode
29107
29381
  };
29108
- const generateV2HandlerEntity = (handlerName, translator2) => ({
29109
- handlerName,
29110
- handler: (params2) => {
29111
- const { nodes } = params2;
29112
- if (nodes.length === 0 || nodes[0].name !== translator2.xmlName) {
29113
- return { nodes: [], consumed: 0 };
29114
- }
29115
- const result = translator2.encode(params2);
29116
- if (!result) return { nodes: [], consumed: 0 };
29117
- return {
29118
- nodes: Array.isArray(result) ? result : [result],
29119
- consumed: 1
29120
- };
29121
- }
29122
- });
29123
29382
  const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator);
29124
29383
  const handleRunNode = (params2) => {
29125
29384
  const { nodes, nodeListHandler: nodeListHandler2, parentStyleId, docx } = params2;
@@ -29232,7 +29491,7 @@ const handleParagraphNode = (params2) => {
29232
29491
  if (nodes.length === 0 || nodes[0].name !== "w:p") {
29233
29492
  return { nodes: [], consumed: 0 };
29234
29493
  }
29235
- const schemaNode = translator$2.encode(params2);
29494
+ const schemaNode = translator$g.encode(params2);
29236
29495
  const newNodes = schemaNode ? [schemaNode] : [];
29237
29496
  return { nodes: newNodes, consumed: 1 };
29238
29497
  };
@@ -29545,7 +29804,7 @@ const handler = (params2) => {
29545
29804
  if (nodes.length === 0 || nodes[0].name !== "w:br") {
29546
29805
  return { nodes: [], consumed: 0 };
29547
29806
  }
29548
- const result = translator$4.encode(params2);
29807
+ const result = translator$i.encode(params2);
29549
29808
  if (!result) return { nodes: [], consumed: 0 };
29550
29809
  return {
29551
29810
  nodes: [result],
@@ -30241,7 +30500,7 @@ const handleTabNode = (params2) => {
30241
30500
  if (!nodes.length || nodes[0].name !== "w:tab") {
30242
30501
  return { nodes: [], consumed: 0 };
30243
30502
  }
30244
- const node2 = translator$3.encode(params2);
30503
+ const node2 = translator$h.encode(params2);
30245
30504
  return { nodes: [node2], consumed: 1 };
30246
30505
  };
30247
30506
  const tabNodeEntityHandler = {
@@ -30438,7 +30697,7 @@ const createNodeListHandler = (nodeHandlers) => {
30438
30697
  }
30439
30698
  } catch (error) {
30440
30699
  console.debug("Import error", error);
30441
- editor?.emit("exception", { error });
30700
+ editor?.emit("exception", { error, editor });
30442
30701
  converter?.telemetry?.trackStatistic("error", {
30443
30702
  type: "processing_error",
30444
30703
  message: error.message,
@@ -30451,7 +30710,7 @@ const createNodeListHandler = (nodeHandlers) => {
30451
30710
  return processedElements;
30452
30711
  } catch (error) {
30453
30712
  console.debug("Error during import", error);
30454
- editor?.emit("exception", { error });
30713
+ editor?.emit("exception", { error, editor });
30455
30714
  converter?.telemetry?.trackStatistic("error", {
30456
30715
  type: "fatal_error",
30457
30716
  message: error.message,
@@ -30917,8 +31176,13 @@ const _SuperConverter = class _SuperConverter2 {
30917
31176
  return { typeface, panose };
30918
31177
  }
30919
31178
  getSchema(editor) {
30920
- this.getDocumentInternalId();
30921
- const result = createDocumentJson({ ...this.convertedXml, media: this.media }, this, editor);
31179
+ let result;
31180
+ try {
31181
+ this.getDocumentInternalId();
31182
+ result = createDocumentJson({ ...this.convertedXml, media: this.media }, this, editor);
31183
+ } catch (error) {
31184
+ editor?.emit("exception", { error, editor });
31185
+ }
30922
31186
  if (result) {
30923
31187
  this.savedTagsToRestore.push({ ...result.savedTagsToRestore });
30924
31188
  this.pageStyles = result.pageStyles;
@@ -47309,7 +47573,7 @@ function validateRelationshipsRoot(relsTree, relsKey, results) {
47309
47573
  }
47310
47574
  return { root: root2, wasFixed };
47311
47575
  }
47312
- function cleanupRootChildren(root2, results) {
47576
+ function cleanupRootChildren(root2) {
47313
47577
  const validChildren = root2.elements?.filter((child) => child?.type === "element" && child.name === "Relationship") || [];
47314
47578
  if (root2.elements?.length !== validChildren.length) {
47315
47579
  root2.elements = validChildren;
@@ -48306,85 +48570,89 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48306
48570
  getUpdatedDocs = false,
48307
48571
  fieldsHighlightColor = null
48308
48572
  } = {}) {
48309
- const json = __privateMethod$1(this, _Editor_instances, prepareDocumentForExport_fn).call(this, comments);
48310
- const documentXml = await this.converter.exportToDocx(
48311
- json,
48312
- this.schema,
48313
- this.storage.image.media,
48314
- isFinalDoc,
48315
- commentsType,
48316
- comments,
48317
- this,
48318
- exportJsonOnly,
48319
- fieldsHighlightColor
48320
- );
48321
- __privateMethod$1(this, _Editor_instances, validateDocumentExport_fn).call(this);
48322
- if (exportXmlOnly || exportJsonOnly) return documentXml;
48323
- const customXml = this.converter.schemaToXml(this.converter.convertedXml["docProps/custom.xml"].elements[0]);
48324
- const styles = this.converter.schemaToXml(this.converter.convertedXml["word/styles.xml"].elements[0]);
48325
- const customSettings = this.converter.schemaToXml(this.converter.convertedXml["word/settings.xml"].elements[0]);
48326
- const rels = this.converter.schemaToXml(this.converter.convertedXml["word/_rels/document.xml.rels"].elements[0]);
48327
- const media = this.converter.addedMedia;
48328
- const updatedHeadersFooters = {};
48329
- Object.entries(this.converter.convertedXml).forEach(([name, json2]) => {
48330
- if (name.includes("header") || name.includes("footer")) {
48331
- const resultXml = this.converter.schemaToXml(json2.elements[0]);
48332
- updatedHeadersFooters[name] = String(resultXml);
48333
- }
48334
- });
48335
- const numberingData = this.converter.convertedXml["word/numbering.xml"];
48336
- const numbering = this.converter.schemaToXml(numberingData.elements[0]);
48337
- const updatedDocs = {
48338
- ...this.options.customUpdatedFiles,
48339
- "word/document.xml": String(documentXml),
48340
- "docProps/custom.xml": String(customXml),
48341
- "word/settings.xml": String(customSettings),
48342
- "word/_rels/document.xml.rels": String(rels),
48343
- "word/numbering.xml": String(numbering),
48344
- // Replace & with & in styles.xml as DOCX viewers can't handle it
48345
- "word/styles.xml": String(styles).replace(/&/gi, "&"),
48346
- ...updatedHeadersFooters
48347
- };
48348
- if (comments.length) {
48349
- const commentsXml = this.converter.schemaToXml(this.converter.convertedXml["word/comments.xml"].elements[0]);
48350
- const commentsExtendedXml = this.converter.schemaToXml(
48351
- this.converter.convertedXml["word/commentsExtended.xml"].elements[0]
48352
- );
48353
- const commentsExtensibleXml = this.converter.schemaToXml(
48354
- this.converter.convertedXml["word/commentsExtensible.xml"].elements[0]
48355
- );
48356
- const commentsIdsXml = this.converter.schemaToXml(
48357
- this.converter.convertedXml["word/commentsIds.xml"].elements[0]
48573
+ try {
48574
+ const json = __privateMethod$1(this, _Editor_instances, prepareDocumentForExport_fn).call(this, comments);
48575
+ const documentXml = await this.converter.exportToDocx(
48576
+ json,
48577
+ this.schema,
48578
+ this.storage.image.media,
48579
+ isFinalDoc,
48580
+ commentsType,
48581
+ comments,
48582
+ this,
48583
+ exportJsonOnly,
48584
+ fieldsHighlightColor
48358
48585
  );
48359
- updatedDocs["word/comments.xml"] = String(commentsXml);
48360
- updatedDocs["word/commentsExtended.xml"] = String(commentsExtendedXml);
48361
- updatedDocs["word/commentsExtensible.xml"] = String(commentsExtensibleXml);
48362
- updatedDocs["word/commentsIds.xml"] = String(commentsIdsXml);
48363
- }
48364
- const zipper = new DocxZipper();
48365
- if (getUpdatedDocs) {
48366
- updatedDocs["[Content_Types].xml"] = await zipper.updateContentTypes(
48367
- {
48368
- files: this.options.content
48369
- },
48586
+ __privateMethod$1(this, _Editor_instances, validateDocumentExport_fn).call(this);
48587
+ if (exportXmlOnly || exportJsonOnly) return documentXml;
48588
+ const customXml = this.converter.schemaToXml(this.converter.convertedXml["docProps/custom.xml"].elements[0]);
48589
+ const styles = this.converter.schemaToXml(this.converter.convertedXml["word/styles.xml"].elements[0]);
48590
+ const customSettings = this.converter.schemaToXml(this.converter.convertedXml["word/settings.xml"].elements[0]);
48591
+ const rels = this.converter.schemaToXml(this.converter.convertedXml["word/_rels/document.xml.rels"].elements[0]);
48592
+ const media = this.converter.addedMedia;
48593
+ const updatedHeadersFooters = {};
48594
+ Object.entries(this.converter.convertedXml).forEach(([name, json2]) => {
48595
+ if (name.includes("header") || name.includes("footer")) {
48596
+ const resultXml = this.converter.schemaToXml(json2.elements[0]);
48597
+ updatedHeadersFooters[name] = String(resultXml);
48598
+ }
48599
+ });
48600
+ const numberingData = this.converter.convertedXml["word/numbering.xml"];
48601
+ const numbering = this.converter.schemaToXml(numberingData.elements[0]);
48602
+ const updatedDocs = {
48603
+ ...this.options.customUpdatedFiles,
48604
+ "word/document.xml": String(documentXml),
48605
+ "docProps/custom.xml": String(customXml),
48606
+ "word/settings.xml": String(customSettings),
48607
+ "word/_rels/document.xml.rels": String(rels),
48608
+ "word/numbering.xml": String(numbering),
48609
+ // Replace & with & in styles.xml as DOCX viewers can't handle it
48610
+ "word/styles.xml": String(styles).replace(/&/gi, "&"),
48611
+ ...updatedHeadersFooters
48612
+ };
48613
+ if (comments.length) {
48614
+ const commentsXml = this.converter.schemaToXml(this.converter.convertedXml["word/comments.xml"].elements[0]);
48615
+ const commentsExtendedXml = this.converter.schemaToXml(
48616
+ this.converter.convertedXml["word/commentsExtended.xml"].elements[0]
48617
+ );
48618
+ const commentsExtensibleXml = this.converter.schemaToXml(
48619
+ this.converter.convertedXml["word/commentsExtensible.xml"].elements[0]
48620
+ );
48621
+ const commentsIdsXml = this.converter.schemaToXml(
48622
+ this.converter.convertedXml["word/commentsIds.xml"].elements[0]
48623
+ );
48624
+ updatedDocs["word/comments.xml"] = String(commentsXml);
48625
+ updatedDocs["word/commentsExtended.xml"] = String(commentsExtendedXml);
48626
+ updatedDocs["word/commentsExtensible.xml"] = String(commentsExtensibleXml);
48627
+ updatedDocs["word/commentsIds.xml"] = String(commentsIdsXml);
48628
+ }
48629
+ const zipper = new DocxZipper();
48630
+ if (getUpdatedDocs) {
48631
+ updatedDocs["[Content_Types].xml"] = await zipper.updateContentTypes(
48632
+ {
48633
+ files: this.options.content
48634
+ },
48635
+ media,
48636
+ true
48637
+ );
48638
+ return updatedDocs;
48639
+ }
48640
+ const result = await zipper.updateZip({
48641
+ docx: this.options.content,
48642
+ updatedDocs,
48643
+ originalDocxFile: this.options.fileSource,
48370
48644
  media,
48371
- true
48372
- );
48373
- return updatedDocs;
48645
+ fonts: this.options.fonts,
48646
+ isHeadless: this.options.isHeadless
48647
+ });
48648
+ this.options.telemetry?.trackUsage("document_export", {
48649
+ documentType: "docx",
48650
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
48651
+ });
48652
+ return result;
48653
+ } catch (error) {
48654
+ this.emit("exception", { error, editor: this });
48374
48655
  }
48375
- const result = await zipper.updateZip({
48376
- docx: this.options.content,
48377
- updatedDocs,
48378
- originalDocxFile: this.options.fileSource,
48379
- media,
48380
- fonts: this.options.fonts,
48381
- isHeadless: this.options.isHeadless
48382
- });
48383
- this.options.telemetry?.trackUsage("document_export", {
48384
- documentType: "docx",
48385
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
48386
- });
48387
- return result;
48388
48656
  }
48389
48657
  /**
48390
48658
  * Destroy the editor and clean up resources
@@ -48405,7 +48673,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48405
48673
  }
48406
48674
  this.converter.headerEditors.length = 0;
48407
48675
  this.converter.footerEditors.length = 0;
48408
- } catch {
48676
+ } catch (error) {
48677
+ this.emit("exception", { error, editor: this });
48409
48678
  }
48410
48679
  }
48411
48680
  /**
@@ -48470,7 +48739,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48470
48739
  this.initDefaultStyles();
48471
48740
  if (this.options.ydoc && this.options.collaborationProvider) {
48472
48741
  updateYdocDocxData(this);
48473
- this.initializeCollaborationData(true);
48742
+ this.initializeCollaborationData();
48474
48743
  } else {
48475
48744
  __privateMethod$1(this, _Editor_instances, insertNewFileData_fn).call(this);
48476
48745
  }
@@ -48630,7 +48899,6 @@ init_fn = function() {
48630
48899
  this.on("beforeCreate", this.options.onBeforeCreate);
48631
48900
  this.emit("beforeCreate", { editor: this });
48632
48901
  this.on("contentError", this.options.onContentError);
48633
- this.on("exception", this.options.onException);
48634
48902
  this.mount(this.options.element);
48635
48903
  this.on("create", this.options.onCreate);
48636
48904
  this.on("update", this.options.onUpdate);
@@ -48648,6 +48916,7 @@ init_fn = function() {
48648
48916
  this.on("paginationUpdate", this.options.onPaginationUpdate);
48649
48917
  this.on("comment-positions", this.options.onCommentLocationsUpdate);
48650
48918
  this.on("list-definitions-change", this.options.onListDefinitionsChange);
48919
+ this.on("exception", this.options.onException);
48651
48920
  if (!this.options.isHeadless) {
48652
48921
  this.initializeCollaborationData();
48653
48922
  this.initDefaultStyles();
@@ -48974,7 +49243,8 @@ endCollaboration_fn = function() {
48974
49243
  console.debug("🔗 [super-editor] Ending collaboration");
48975
49244
  if (this.options.collaborationProvider) this.options.collaborationProvider.disconnect();
48976
49245
  if (this.options.ydoc) this.options.ydoc.destroy();
48977
- } catch {
49246
+ } catch (error) {
49247
+ this.emit("exception", { error, editor: this });
48978
49248
  }
48979
49249
  };
48980
49250
  validateDocumentInit_fn = function() {
@@ -55982,7 +56252,49 @@ const TableRow = Node$1.create({
55982
56252
  if (!cantSplit) return {};
55983
56253
  return { "data-cant-split": "true" };
55984
56254
  }
55985
- }
56255
+ },
56256
+ /**
56257
+ * @category Attribute
56258
+ * @param {TableRowProperties} [tableRowProperties] - Properties for the table row.
56259
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 377-482
56260
+ */
56261
+ tableRowProperties: { rendered: false },
56262
+ /**
56263
+ * @category Attribute
56264
+ * @param {string} [rsidDel] - Unique identifier used to track the editing session when the row was deleted from the main document.
56265
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 472
56266
+ */
56267
+ rsidDel: { rendered: false },
56268
+ /**
56269
+ * @category Attribute
56270
+ * @param {string} [rsidR] - Unique identifier used to track the editing session when the table row was added to the main document.
56271
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 472
56272
+ */
56273
+ rsidR: { rendered: false },
56274
+ /**
56275
+ * @category Attribute
56276
+ * @param {string} [rsidRPr] - Unique identifier used to track the editing session when the glyph character representing the table row mark was last modified in the main document.
56277
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 473
56278
+ */
56279
+ rsidRPr: { rendered: false },
56280
+ /**
56281
+ * @category Attribute
56282
+ * @param {string} [rsidTr] - Unique identifier used to track the editing session when the table row's properties were last modified in this document.
56283
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 473
56284
+ */
56285
+ rsidTr: { rendered: false },
56286
+ /**
56287
+ * @category Attribute
56288
+ * @param {string} [paraId] - A randomly generated unique identifier for the table row.
56289
+ * @see {@link https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/a0e7d2e2-2246-44c6-96e8-1cf009823615}
56290
+ */
56291
+ paraId: { rendered: false },
56292
+ /**
56293
+ * @category Attribute
56294
+ * @param {string} [textId] - A randomly generated unique identifier for the text of the table row.
56295
+ * @see {@link https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b7eeddec-7c50-47fb-88b6-1feec3ed832c}
56296
+ */
56297
+ textId: { rendered: false }
55986
56298
  };
55987
56299
  },
55988
56300
  parseDOM() {
@@ -58221,6 +58533,7 @@ const startImageUpload = async ({ editor, view, file }) => {
58221
58533
  file = processedImageResult.file;
58222
58534
  } catch (err) {
58223
58535
  console.warn("Error processing image:", err);
58536
+ editor.emit("exception", { error: err, editor });
58224
58537
  return;
58225
58538
  }
58226
58539
  await uploadImage({
@@ -58275,9 +58588,10 @@ async function uploadImage({ editor, view, file, size: size2, uploadHandler }) {
58275
58588
  view.dispatch(
58276
58589
  view.state.tr.replaceWith(placeholderPos, placeholderPos, imageNode).setMeta(ImagePlaceholderPluginKey, removeMeta)
58277
58590
  );
58278
- } catch {
58591
+ } catch (error) {
58279
58592
  let removeMeta = { type: "remove", id };
58280
58593
  view.dispatch(tr.setMeta(ImagePlaceholderPluginKey, removeMeta));
58594
+ editor.emit("exception", { error, editor });
58281
58595
  }
58282
58596
  }
58283
58597
  function addImageRelationship({ editor, path }) {
@@ -79816,7 +80130,9 @@ class SuperToolbar extends EventEmitter2 {
79816
80130
  } else if (typeof command2 === "function") {
79817
80131
  command2({ item, argument, option });
79818
80132
  } else {
79819
- throw new Error(`[super-toolbar 🎨] Command not found: ${command2}`);
80133
+ const error = new Error(`[super-toolbar 🎨] Command not found: ${command2}`);
80134
+ this.emit("exception", { error, editor: this.activeEditor });
80135
+ throw error;
79820
80136
  }
79821
80137
  this.updateToolbarState();
79822
80138
  }
@@ -81071,6 +81387,9 @@ const _sfc_main$1 = {
81071
81387
  return { content: docx, media, mediaFiles, fonts };
81072
81388
  } catch (err) {
81073
81389
  console.debug("Error loading new file data:", err);
81390
+ if (typeof props.options.onException === "function") {
81391
+ props.options.onException({ error: err, editor: null });
81392
+ }
81074
81393
  }
81075
81394
  };
81076
81395
  const initializeData = async () => {
@@ -81273,7 +81592,7 @@ const _sfc_main$1 = {
81273
81592
  };
81274
81593
  }
81275
81594
  };
81276
- const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-8b2f8c17"]]);
81595
+ const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-0c36dd72"]]);
81277
81596
  const _hoisted_1 = ["innerHTML"];
81278
81597
  const _sfc_main = {
81279
81598
  __name: "SuperInput",
@@ -81366,9 +81685,9 @@ const _sfc_main = {
81366
81685
  };
81367
81686
  const SuperInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4d5cff52"]]);
81368
81687
  const registeredHandlers = Object.freeze({
81369
- "w:br": translator$4,
81370
- "w:tab": translator$3,
81371
- "w:p": translator$2
81688
+ "w:br": translator$i,
81689
+ "w:tab": translator$h,
81690
+ "w:p": translator$g
81372
81691
  });
81373
81692
  const Extensions = {
81374
81693
  Node: Node$1,