@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
@@ -25611,37 +25611,37 @@ const _NodeTranslator = class _NodeTranslator2 {
25611
25611
  };
25612
25612
  __publicField$2(_NodeTranslator, "translatorTypes", TranslatorTypes);
25613
25613
  let NodeTranslator = _NodeTranslator;
25614
- const encode$g = (attributes) => {
25614
+ const encode$i = (attributes) => {
25615
25615
  return attributes["w:type"];
25616
25616
  };
25617
- const decode$g = (attrs) => {
25617
+ const decode$i = (attrs) => {
25618
25618
  const { lineBreakType } = attrs;
25619
25619
  return lineBreakType;
25620
25620
  };
25621
25621
  const attrConfig$b = Object.freeze({
25622
25622
  xmlName: "w:type",
25623
25623
  sdName: "lineBreakType",
25624
- encode: encode$g,
25625
- decode: decode$g
25624
+ encode: encode$i,
25625
+ decode: decode$i
25626
25626
  });
25627
- const encode$f = (attributes) => {
25627
+ const encode$h = (attributes) => {
25628
25628
  const xmlAttrValue = attributes["w:clear"];
25629
25629
  return xmlAttrValue;
25630
25630
  };
25631
- const decode$f = (attrs) => {
25631
+ const decode$h = (attrs) => {
25632
25632
  const { clear } = attrs;
25633
25633
  return clear;
25634
25634
  };
25635
25635
  const attrConfig$a = Object.freeze({
25636
25636
  xmlName: "w:clear",
25637
25637
  sdName: "clear",
25638
- encode: encode$f,
25639
- decode: decode$f
25638
+ encode: encode$h,
25639
+ decode: decode$h
25640
25640
  });
25641
- const validXmlAttributes$4 = [attrConfig$b, attrConfig$a];
25642
- const XML_NODE_NAME$4 = "w:br";
25643
- const SD_NODE_NAME$4 = "lineBreak";
25644
- const encode$e = (_2, encodedAttrs) => {
25641
+ const validXmlAttributes$5 = [attrConfig$b, attrConfig$a];
25642
+ const XML_NODE_NAME$6 = "w:br";
25643
+ const SD_NODE_NAME$5 = "lineBreak";
25644
+ const encode$g = (_2, encodedAttrs) => {
25645
25645
  const isPageBreak = encodedAttrs?.lineBreakType === "page";
25646
25646
  const translated = {
25647
25647
  type: isPageBreak ? "hardBreak" : "lineBreak"
@@ -25651,7 +25651,7 @@ const encode$e = (_2, encodedAttrs) => {
25651
25651
  }
25652
25652
  return translated;
25653
25653
  };
25654
- const decode$e = (params2, decodedAttrs) => {
25654
+ const decode$g = (params2, decodedAttrs) => {
25655
25655
  const { node: node2 } = params2;
25656
25656
  if (!node2) return;
25657
25657
  const wBreak = { name: "w:br" };
@@ -25668,63 +25668,63 @@ const decode$e = (params2, decodedAttrs) => {
25668
25668
  };
25669
25669
  return translated;
25670
25670
  };
25671
- const config$4 = {
25672
- xmlName: XML_NODE_NAME$4,
25673
- sdNodeOrKeyName: SD_NODE_NAME$4,
25671
+ const config$6 = {
25672
+ xmlName: XML_NODE_NAME$6,
25673
+ sdNodeOrKeyName: SD_NODE_NAME$5,
25674
25674
  type: NodeTranslator.translatorTypes.NODE,
25675
- encode: encode$e,
25676
- decode: decode$e,
25677
- attributes: validXmlAttributes$4
25675
+ encode: encode$g,
25676
+ decode: decode$g,
25677
+ attributes: validXmlAttributes$5
25678
25678
  };
25679
- const translator$4 = NodeTranslator.from(config$4);
25680
- const encode$d = (attributes) => {
25679
+ const translator$i = NodeTranslator.from(config$6);
25680
+ const encode$f = (attributes) => {
25681
25681
  return attributes["w:val"];
25682
25682
  };
25683
- const decode$d = (attrs) => {
25683
+ const decode$f = (attrs) => {
25684
25684
  const { tabSize } = attrs || {};
25685
25685
  return tabSize;
25686
25686
  };
25687
25687
  const attrConfig$9 = Object.freeze({
25688
25688
  xmlName: "w:val",
25689
25689
  sdName: "tabSize",
25690
- encode: encode$d,
25691
- decode: decode$d
25690
+ encode: encode$f,
25691
+ decode: decode$f
25692
25692
  });
25693
- const encode$c = (attributes) => {
25693
+ const encode$e = (attributes) => {
25694
25694
  return attributes["w:leader"];
25695
25695
  };
25696
- const decode$c = (attrs) => {
25696
+ const decode$e = (attrs) => {
25697
25697
  const { leader } = attrs || {};
25698
25698
  return leader;
25699
25699
  };
25700
25700
  const attrConfig$8 = Object.freeze({
25701
25701
  xmlName: "w:leader",
25702
25702
  sdName: "leader",
25703
- encode: encode$c,
25704
- decode: decode$c
25703
+ encode: encode$e,
25704
+ decode: decode$e
25705
25705
  });
25706
- const encode$b = (attributes) => {
25706
+ const encode$d = (attributes) => {
25707
25707
  return attributes["w:pos"];
25708
25708
  };
25709
- const decode$b = (attrs) => {
25709
+ const decode$d = (attrs) => {
25710
25710
  const { pos } = attrs || {};
25711
25711
  return pos;
25712
25712
  };
25713
25713
  const attrConfig$7 = Object.freeze({
25714
25714
  xmlName: "w:pos",
25715
25715
  sdName: "pos",
25716
- encode: encode$b,
25717
- decode: decode$b
25716
+ encode: encode$d,
25717
+ decode: decode$d
25718
25718
  });
25719
- const validXmlAttributes$3 = [attrConfig$9, attrConfig$7, attrConfig$8];
25720
- const XML_NODE_NAME$3 = "w:tab";
25721
- const SD_NODE_NAME$3 = "tab";
25722
- const encode$a = (_2, encodedAttrs = {}) => {
25719
+ const validXmlAttributes$4 = [attrConfig$9, attrConfig$7, attrConfig$8];
25720
+ const XML_NODE_NAME$5 = "w:tab";
25721
+ const SD_NODE_NAME$4 = "tab";
25722
+ const encode$c = (_2, encodedAttrs = {}) => {
25723
25723
  const translated = { type: "tab" };
25724
25724
  if (encodedAttrs) translated.attrs = { ...encodedAttrs };
25725
25725
  return translated;
25726
25726
  };
25727
- const decode$a = (params2, decodedAttrs = {}) => {
25727
+ const decode$c = (params2, decodedAttrs = {}) => {
25728
25728
  const { node: node2 } = params2 || {};
25729
25729
  if (!node2) return;
25730
25730
  const wTab = { name: "w:tab" };
@@ -25740,15 +25740,15 @@ const decode$a = (params2, decodedAttrs = {}) => {
25740
25740
  }
25741
25741
  return translated;
25742
25742
  };
25743
- const config$3 = {
25744
- xmlName: XML_NODE_NAME$3,
25745
- sdNodeOrKeyName: SD_NODE_NAME$3,
25743
+ const config$5 = {
25744
+ xmlName: XML_NODE_NAME$5,
25745
+ sdNodeOrKeyName: SD_NODE_NAME$4,
25746
25746
  type: NodeTranslator.translatorTypes.NODE,
25747
- encode: encode$a,
25748
- decode: decode$a,
25749
- attributes: validXmlAttributes$3
25747
+ encode: encode$c,
25748
+ decode: decode$c,
25749
+ attributes: validXmlAttributes$4
25750
25750
  };
25751
- const translator$3 = NodeTranslator.from(config$3);
25751
+ const translator$h = NodeTranslator.from(config$5);
25752
25752
  const mergeTextNodes = (nodes) => {
25753
25753
  if (!nodes || !Array.isArray(nodes)) {
25754
25754
  return nodes;
@@ -26318,91 +26318,91 @@ const handleParagraphNode$1 = (params2) => {
26318
26318
  }
26319
26319
  return schemaNode;
26320
26320
  };
26321
- const encode$9 = (attributes) => {
26321
+ const encode$b = (attributes) => {
26322
26322
  return attributes["w:rsidDel"];
26323
26323
  };
26324
- const decode$9 = (attrs) => {
26324
+ const decode$b = (attrs) => {
26325
26325
  return attrs.rsidDel;
26326
26326
  };
26327
26327
  const attrConfig$6 = Object.freeze({
26328
26328
  xmlName: "w:rsidDel",
26329
26329
  sdName: "rsidDel",
26330
- encode: encode$9,
26331
- decode: decode$9
26330
+ encode: encode$b,
26331
+ decode: decode$b
26332
26332
  });
26333
- const encode$8 = (attributes) => {
26333
+ const encode$a = (attributes) => {
26334
26334
  return attributes["w:rsidP"];
26335
26335
  };
26336
- const decode$8 = (attrs) => {
26336
+ const decode$a = (attrs) => {
26337
26337
  return attrs.rsidP;
26338
26338
  };
26339
26339
  const attrConfig$5 = Object.freeze({
26340
26340
  xmlName: "w:rsidP",
26341
26341
  sdName: "rsidP",
26342
- encode: encode$8,
26343
- decode: decode$8
26342
+ encode: encode$a,
26343
+ decode: decode$a
26344
26344
  });
26345
- const encode$7 = (attributes) => {
26345
+ const encode$9 = (attributes) => {
26346
26346
  return attributes["w:rsidR"];
26347
26347
  };
26348
- const decode$7 = (attrs) => {
26348
+ const decode$9 = (attrs) => {
26349
26349
  return attrs.rsidR;
26350
26350
  };
26351
26351
  const attrConfig$4 = Object.freeze({
26352
26352
  xmlName: "w:rsidR",
26353
26353
  sdName: "rsidR",
26354
- encode: encode$7,
26355
- decode: decode$7
26354
+ encode: encode$9,
26355
+ decode: decode$9
26356
26356
  });
26357
- const encode$6 = (attributes) => {
26357
+ const encode$8 = (attributes) => {
26358
26358
  return attributes["w:rsidRPr"];
26359
26359
  };
26360
- const decode$6 = (attrs) => {
26360
+ const decode$8 = (attrs) => {
26361
26361
  return attrs.rsidRPr;
26362
26362
  };
26363
26363
  const attrConfig$3 = Object.freeze({
26364
26364
  xmlName: "w:rsidRPr",
26365
26365
  sdName: "rsidRPr",
26366
- encode: encode$6,
26367
- decode: decode$6
26366
+ encode: encode$8,
26367
+ decode: decode$8
26368
26368
  });
26369
- const encode$5 = (attributes) => {
26369
+ const encode$7 = (attributes) => {
26370
26370
  return attributes["w:rsidRDefault"];
26371
26371
  };
26372
- const decode$5 = (attrs) => {
26372
+ const decode$7 = (attrs) => {
26373
26373
  return attrs.rsidRDefault;
26374
26374
  };
26375
26375
  const attrConfig$2 = Object.freeze({
26376
26376
  xmlName: "w:rsidRDefault",
26377
26377
  sdName: "rsidRDefault",
26378
- encode: encode$5,
26379
- decode: decode$5
26378
+ encode: encode$7,
26379
+ decode: decode$7
26380
26380
  });
26381
- const encode$4 = (attributes) => {
26381
+ const encode$6 = (attributes) => {
26382
26382
  return attributes["w14:paraId"];
26383
26383
  };
26384
- const decode$4 = (attrs) => {
26384
+ const decode$6 = (attrs) => {
26385
26385
  return attrs.paraId;
26386
26386
  };
26387
26387
  const attrConfig$1 = Object.freeze({
26388
26388
  xmlName: "w14:paraId",
26389
26389
  sdName: "paraId",
26390
- encode: encode$4,
26391
- decode: decode$4
26390
+ encode: encode$6,
26391
+ decode: decode$6
26392
26392
  });
26393
- const encode$3 = (attributes) => {
26393
+ const encode$5 = (attributes) => {
26394
26394
  return attributes["w14:textId"];
26395
26395
  };
26396
- const decode$3 = (attrs) => {
26396
+ const decode$5 = (attrs) => {
26397
26397
  return attrs.textId;
26398
26398
  };
26399
26399
  const attrConfig = Object.freeze({
26400
26400
  xmlName: "w14:textId",
26401
26401
  sdName: "textId",
26402
- encode: encode$3,
26403
- decode: decode$3
26402
+ encode: encode$5,
26403
+ decode: decode$5
26404
26404
  });
26405
- const validXmlAttributes$2 = [
26405
+ const validXmlAttributes$3 = [
26406
26406
  attrConfig$1,
26407
26407
  attrConfig,
26408
26408
  attrConfig$4,
@@ -26411,9 +26411,9 @@ const validXmlAttributes$2 = [
26411
26411
  attrConfig$3,
26412
26412
  attrConfig$6
26413
26413
  ];
26414
- const XML_NODE_NAME$2 = "w:p";
26415
- const SD_NODE_NAME$2 = "paragraph";
26416
- const encode$2 = (params2, encodedAttrs = {}) => {
26414
+ const XML_NODE_NAME$4 = "w:p";
26415
+ const SD_NODE_NAME$3 = "paragraph";
26416
+ const encode$4 = (params2, encodedAttrs = {}) => {
26417
26417
  const node2 = handleParagraphNode$1(params2);
26418
26418
  if (!node2) return void 0;
26419
26419
  if (encodedAttrs && Object.keys(encodedAttrs).length) {
@@ -26421,7 +26421,7 @@ const encode$2 = (params2, encodedAttrs = {}) => {
26421
26421
  }
26422
26422
  return node2;
26423
26423
  };
26424
- const decode$2 = (params2, decodedAttrs = {}) => {
26424
+ const decode$4 = (params2, decodedAttrs = {}) => {
26425
26425
  const translated = translateParagraphNode(params2);
26426
26426
  if (!translated) return void 0;
26427
26427
  if (decodedAttrs && Object.keys(decodedAttrs).length) {
@@ -26429,6 +26429,362 @@ const decode$2 = (params2, decodedAttrs = {}) => {
26429
26429
  }
26430
26430
  return translated;
26431
26431
  };
26432
+ const config$4 = {
26433
+ xmlName: XML_NODE_NAME$4,
26434
+ sdNodeOrKeyName: SD_NODE_NAME$3,
26435
+ type: NodeTranslator.translatorTypes.NODE,
26436
+ encode: encode$4,
26437
+ decode: decode$4,
26438
+ attributes: validXmlAttributes$3
26439
+ };
26440
+ const translator$g = NodeTranslator.from(config$4);
26441
+ const generateV2HandlerEntity = (handlerName, translator2) => ({
26442
+ handlerName,
26443
+ handler: (params2) => {
26444
+ const { nodes } = params2;
26445
+ if (nodes.length === 0 || nodes[0].name !== translator2.xmlName) {
26446
+ return { nodes: [], consumed: 0 };
26447
+ }
26448
+ const result = translator2.encode(params2);
26449
+ if (!result) return { nodes: [], consumed: 0 };
26450
+ return {
26451
+ nodes: Array.isArray(result) ? result : [result],
26452
+ consumed: 1
26453
+ };
26454
+ }
26455
+ });
26456
+ function createSingleAttrPropertyHandler(xmlName, sdName = null, attrName = "w:val", transformEncode = null, transformDecode = null) {
26457
+ if (!sdName) sdName = xmlName.split(":")[1];
26458
+ if (!transformEncode) transformEncode = (v2) => v2;
26459
+ if (!transformDecode) transformDecode = (v2) => v2;
26460
+ return {
26461
+ xmlName,
26462
+ sdNodeOrKeyName: sdName,
26463
+ encode: ({ nodes }) => {
26464
+ return transformEncode(nodes[0].attributes[attrName]) ?? void 0;
26465
+ },
26466
+ decode: ({ node: node2 }) => {
26467
+ const value = node2.attrs?.[sdName] != null ? transformDecode(node2.attrs[sdName]) : void 0;
26468
+ return value != null ? { [attrName]: value } : void 0;
26469
+ }
26470
+ };
26471
+ }
26472
+ function createMeasurementPropertyHandler(xmlName, sdName = null) {
26473
+ if (!sdName) sdName = xmlName.split(":")[1];
26474
+ return {
26475
+ xmlName,
26476
+ sdNodeOrKeyName: sdName,
26477
+ attributes: [
26478
+ createAttributeHandler("w:w", "value", parseInteger, integerToString),
26479
+ createAttributeHandler("w:type")
26480
+ ],
26481
+ encode: (_2, encodedAttrs) => {
26482
+ return encodedAttrs["value"] != null ? encodedAttrs : void 0;
26483
+ },
26484
+ decode: function({ node: node2 }) {
26485
+ const decodedAttrs = this.decodeAttributes({ node: { ...node2, attrs: node2.attrs[sdName] || {} } });
26486
+ return decodedAttrs["w:w"] != null ? decodedAttrs : void 0;
26487
+ }
26488
+ };
26489
+ }
26490
+ const createAttributeHandler = (xmlName, sdName = null, transformEncode = null, transformDecode = null) => {
26491
+ if (!transformEncode) transformEncode = (v2) => v2;
26492
+ if (!transformDecode) transformDecode = (v2) => v2;
26493
+ if (!sdName) sdName = xmlName.split(":")[1];
26494
+ return {
26495
+ xmlName,
26496
+ sdName,
26497
+ encode: (attributes) => transformEncode(attributes[xmlName]),
26498
+ decode: (attributes) => transformDecode(attributes[sdName])
26499
+ };
26500
+ };
26501
+ function encodeProperties(node2, translatorsByXmlName, asArray = false) {
26502
+ if (!node2?.elements || node2.elements.length === 0) {
26503
+ return asArray ? [] : {};
26504
+ }
26505
+ const attributes = asArray ? [] : {};
26506
+ node2.elements.forEach((el) => {
26507
+ const translator2 = translatorsByXmlName[el.name];
26508
+ if (translator2) {
26509
+ const encodedAttr = translator2.encode({ nodes: [el] });
26510
+ if (encodedAttr != null) {
26511
+ if (asArray) {
26512
+ attributes.push({ [translator2.sdNodeOrKeyName]: encodedAttr });
26513
+ } else {
26514
+ attributes[translator2.sdNodeOrKeyName] = encodedAttr;
26515
+ }
26516
+ }
26517
+ }
26518
+ });
26519
+ return attributes;
26520
+ }
26521
+ function decodeProperties(translatorsBySdName, properties) {
26522
+ if (!properties || typeof properties !== "object") {
26523
+ return [];
26524
+ }
26525
+ const elements = [];
26526
+ Object.keys(properties).forEach((key) => {
26527
+ const translator2 = translatorsBySdName[key];
26528
+ if (translator2) {
26529
+ const attributes = translator2.decode({ node: { attrs: { [key]: properties[key] } } });
26530
+ if (attributes != null) {
26531
+ elements.push({ name: translator2.xmlName, attributes });
26532
+ }
26533
+ }
26534
+ });
26535
+ return elements;
26536
+ }
26537
+ const parseBoolean = (value) => ["1", "true"].includes(value);
26538
+ const parseInteger = (value) => {
26539
+ if (value == null) return void 0;
26540
+ const intValue = parseInt(value, 10);
26541
+ return isNaN(intValue) ? void 0 : intValue;
26542
+ };
26543
+ const integerToString = (value) => {
26544
+ const intValue = parseInteger(value);
26545
+ return intValue != void 0 ? String(intValue) : void 0;
26546
+ };
26547
+ const translator$f = NodeTranslator.from({
26548
+ xmlName: "w:cantSplit",
26549
+ sdNodeOrKeyName: "cantSplit",
26550
+ encode: ({ nodes }) => ["1", "true"].includes(nodes[0].attributes?.["w:val"] ?? "1"),
26551
+ decode: ({ node: node2 }) => node2.attrs?.cantSplit ? {} : void 0
26552
+ });
26553
+ const translator$e = NodeTranslator.from({
26554
+ xmlName: "w:cnfStyle",
26555
+ sdNodeOrKeyName: "cnfStyle",
26556
+ attributes: [
26557
+ "w:evenHBand",
26558
+ "w:evenVBand",
26559
+ "w:firstColumn",
26560
+ "w:firstRow",
26561
+ "w:firstRowFirstColumn",
26562
+ "w:firstRowLastColumn",
26563
+ "w:lastColumn",
26564
+ "w:lastRow",
26565
+ "w:lastRowFirstColumn",
26566
+ "w:lastRowLastColumn",
26567
+ "w:oddHBand",
26568
+ "w:oddVBand",
26569
+ "w:val"
26570
+ ].map((attr) => createAttributeHandler(attr)),
26571
+ encode: (_2, encodedAttrs) => {
26572
+ Object.keys(encodedAttrs).forEach((key) => {
26573
+ encodedAttrs[key] = ["1", "true"].includes(encodedAttrs[key]);
26574
+ });
26575
+ return Object.keys(encodedAttrs).length > 0 ? encodedAttrs : void 0;
26576
+ },
26577
+ decode: ({ node: node2 }) => {
26578
+ if (!node2.attrs?.cnfStyle) return;
26579
+ const cnfStyleAttrs = {};
26580
+ Object.entries(node2.attrs.cnfStyle).forEach(([key, value]) => {
26581
+ cnfStyleAttrs[`w:${key}`] = value ? "1" : "0";
26582
+ });
26583
+ return Object.keys(cnfStyleAttrs).length > 0 ? cnfStyleAttrs : void 0;
26584
+ }
26585
+ });
26586
+ const translator$d = NodeTranslator.from(createSingleAttrPropertyHandler("w:divId"));
26587
+ const translator$c = NodeTranslator.from(
26588
+ createSingleAttrPropertyHandler(
26589
+ "w:gridAfter",
26590
+ null,
26591
+ "w:val",
26592
+ (v2) => parseInteger(v2) ?? void 0,
26593
+ (v2) => integerToString(v2)
26594
+ )
26595
+ );
26596
+ const translator$b = NodeTranslator.from(
26597
+ createSingleAttrPropertyHandler(
26598
+ "w:gridBefore",
26599
+ null,
26600
+ "w:val",
26601
+ (v2) => parseInteger(v2) ?? void 0,
26602
+ (v2) => integerToString(v2)
26603
+ )
26604
+ );
26605
+ const translator$a = NodeTranslator.from({
26606
+ xmlName: "w:hidden",
26607
+ sdNodeOrKeyName: "hidden",
26608
+ encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
26609
+ decode: ({ node: node2 }) => node2.attrs.hidden ? {} : void 0
26610
+ });
26611
+ const translator$9 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc"));
26612
+ const translator$8 = NodeTranslator.from(createMeasurementPropertyHandler("w:tblCellSpacing", "cellSpacing"));
26613
+ const translator$7 = NodeTranslator.from({
26614
+ xmlName: "w:tblHeader",
26615
+ sdNodeOrKeyName: "repeatHeader",
26616
+ encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.["w:val"] ?? "1"),
26617
+ decode: ({ node: node2 }) => node2.attrs.repeatHeader ? {} : void 0
26618
+ });
26619
+ const translator$6 = NodeTranslator.from({
26620
+ xmlName: "w:trHeight",
26621
+ sdNodeOrKeyName: "rowHeight",
26622
+ encode: ({ nodes }) => {
26623
+ const heightAttrs = {};
26624
+ const val = nodes[0].attributes["w:val"];
26625
+ if (val) {
26626
+ heightAttrs["value"] = parseInt(val, 10);
26627
+ }
26628
+ const rule = nodes[0].attributes["w:hRule"];
26629
+ if (rule) {
26630
+ heightAttrs["rule"] = rule;
26631
+ }
26632
+ return Object.keys(heightAttrs).length > 0 ? heightAttrs : void 0;
26633
+ },
26634
+ decode: ({ node: node2 }) => {
26635
+ if (!node2.attrs?.rowHeight) return;
26636
+ const heightAttrs = {};
26637
+ if (typeof node2.attrs.rowHeight.value === "number" && !isNaN(node2.attrs.rowHeight.value)) {
26638
+ heightAttrs["w:val"] = String(node2.attrs.rowHeight.value);
26639
+ }
26640
+ if (node2.attrs.rowHeight.rule) {
26641
+ heightAttrs["w:hRule"] = node2.attrs.rowHeight.rule;
26642
+ }
26643
+ return Object.keys(heightAttrs).length > 0 ? heightAttrs : void 0;
26644
+ }
26645
+ });
26646
+ const translator$5 = NodeTranslator.from(createMeasurementPropertyHandler("w:wAfter"));
26647
+ const translator$4 = NodeTranslator.from(createMeasurementPropertyHandler("w:wBefore"));
26648
+ const XML_NODE_NAME$3 = "w:trPr";
26649
+ const SD_ATTR_KEY = "tableRowProperties";
26650
+ const encode$3 = (params2) => {
26651
+ const { nodes } = params2;
26652
+ const node2 = nodes[0];
26653
+ let attributes = {
26654
+ cantSplit: false,
26655
+ hidden: false,
26656
+ repeatHeader: false
26657
+ };
26658
+ attributes = {
26659
+ ...attributes,
26660
+ ...encodeProperties(node2, propertyTranslatorsByXmlName)
26661
+ };
26662
+ return {
26663
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
26664
+ xmlName: XML_NODE_NAME$3,
26665
+ sdNodeOrKeyName: SD_ATTR_KEY,
26666
+ attributes
26667
+ };
26668
+ };
26669
+ const decode$3 = (params2) => {
26670
+ const { tableRowProperties = {} } = params2.node.attrs || {};
26671
+ const elements = decodeProperties(propertyTranslatorsBySdName, tableRowProperties);
26672
+ const newNode = {
26673
+ name: "w:trPr",
26674
+ type: "element",
26675
+ attributes: {},
26676
+ elements
26677
+ };
26678
+ return newNode;
26679
+ };
26680
+ const propertyTranslators = [
26681
+ translator$f,
26682
+ translator$e,
26683
+ translator$d,
26684
+ translator$c,
26685
+ translator$b,
26686
+ translator$a,
26687
+ translator$9,
26688
+ translator$8,
26689
+ translator$7,
26690
+ translator$6,
26691
+ translator$5,
26692
+ translator$4
26693
+ ];
26694
+ const propertyTranslatorsByXmlName = {};
26695
+ propertyTranslators.forEach((translator2) => {
26696
+ propertyTranslatorsByXmlName[translator2.xmlName] = translator2;
26697
+ });
26698
+ const propertyTranslatorsBySdName = {};
26699
+ propertyTranslators.forEach((translator2) => {
26700
+ propertyTranslatorsBySdName[translator2.sdNodeOrKeyName] = translator2;
26701
+ });
26702
+ const config$3 = {
26703
+ xmlName: XML_NODE_NAME$3,
26704
+ sdNodeOrKeyName: SD_ATTR_KEY,
26705
+ type: NodeTranslator.translatorTypes.ATTRIBUTE,
26706
+ encode: encode$3,
26707
+ decode: decode$3
26708
+ };
26709
+ const translator$3 = NodeTranslator.from(config$3);
26710
+ const XML_NODE_NAME$2 = "w:tr";
26711
+ const SD_NODE_NAME$2 = "tableRow";
26712
+ const validXmlAttributes$2 = ["w:rsidDel", "w:rsidR", "w:rsidRPr", "w:rsidTr", "w14:paraId", "w14:textId"].map(
26713
+ (xmlName) => createAttributeHandler(xmlName)
26714
+ );
26715
+ const encode$2 = (params2, encodedAttrs) => {
26716
+ const { row, table } = params2.extraParams;
26717
+ let tableRowProperties = {};
26718
+ const tPr = row.elements.find((el) => el.name === "w:trPr");
26719
+ if (tPr) {
26720
+ ({ attributes: tableRowProperties } = translator$3.encode({
26721
+ ...params2,
26722
+ nodes: [tPr]
26723
+ }));
26724
+ }
26725
+ encodedAttrs["tableRowProperties"] = Object.freeze(tableRowProperties);
26726
+ encodedAttrs["rowHeight"] = twipsToPixels(tableRowProperties["rowHeight"]?.value);
26727
+ encodedAttrs["cantSplit"] = tableRowProperties["cantSplit"];
26728
+ const gridColumnWidths = _getGridColumnWidths(table);
26729
+ const cellNodes = row.elements.filter((el) => el.name === "w:tc");
26730
+ let currentColumnIndex = 0;
26731
+ const content = cellNodes?.map((n) => {
26732
+ let columnWidth = gridColumnWidths?.[currentColumnIndex] || null;
26733
+ const result = translator$1.encode({
26734
+ ...params2,
26735
+ extraParams: {
26736
+ ...params2.extraParams,
26737
+ node: n,
26738
+ columnIndex: currentColumnIndex,
26739
+ columnWidth
26740
+ }
26741
+ });
26742
+ const tcPr = n.elements?.find((el) => el.name === "w:tcPr");
26743
+ const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
26744
+ const colspan = parseInt(colspanTag?.attributes["w:val"] || 1, 10);
26745
+ currentColumnIndex += colspan;
26746
+ return result;
26747
+ }) || [];
26748
+ const newNode = {
26749
+ type: "tableRow",
26750
+ content,
26751
+ attrs: encodedAttrs
26752
+ };
26753
+ return newNode;
26754
+ };
26755
+ const _getGridColumnWidths = (tableNode) => {
26756
+ const tblGrid = tableNode.elements.find((el) => el.name === "w:tblGrid");
26757
+ if (!tblGrid) return [];
26758
+ const columnWidths = tblGrid?.elements?.flatMap((el) => {
26759
+ if (el.name !== "w:gridCol") return [];
26760
+ return twipsToPixels(el.attributes["w:w"]);
26761
+ }) || [];
26762
+ return columnWidths;
26763
+ };
26764
+ const decode$2 = (params2, decodedAttrs) => {
26765
+ const { node: node2 } = params2;
26766
+ const elements = translateChildNodes(params2);
26767
+ if (node2.attrs?.tableRowProperties) {
26768
+ const tableRowProperties = { ...node2.attrs.tableRowProperties };
26769
+ if (node2.attrs.rowHeight != null) {
26770
+ const rowHeightPixels = twipsToPixels(node2.attrs.tableRowProperties["rowHeight"]?.value);
26771
+ if (rowHeightPixels !== node2.attrs.rowHeight) {
26772
+ tableRowProperties["rowHeight"] = { value: String(pixelsToTwips(node2.attrs["rowHeight"])) };
26773
+ }
26774
+ }
26775
+ tableRowProperties["cantSplit"] = node2.attrs["cantSplit"];
26776
+ const trPr = translator$3.decode({
26777
+ ...params2,
26778
+ node: { ...node2, attrs: { ...node2.attrs, tableRowProperties } }
26779
+ });
26780
+ if (trPr) elements.unshift(trPr);
26781
+ }
26782
+ return {
26783
+ name: "w:tr",
26784
+ attributes: decodedAttrs || {},
26785
+ elements
26786
+ };
26787
+ };
26432
26788
  const config$2 = {
26433
26789
  xmlName: XML_NODE_NAME$2,
26434
26790
  sdNodeOrKeyName: SD_NODE_NAME$2,
@@ -26501,7 +26857,16 @@ function handleTableNode(node2, params2) {
26501
26857
  attrs["borders"] = borderData;
26502
26858
  const content = [];
26503
26859
  rows.forEach((row) => {
26504
- const result = handleTableRowNode(row, node2, borderRowData, tblStyleTag, params2);
26860
+ const result = translator$2.encode({
26861
+ ...params2,
26862
+ nodes: [row],
26863
+ extraParams: {
26864
+ row,
26865
+ table: node2,
26866
+ rowBorders: borderRowData,
26867
+ styleTag: tblStyleTag
26868
+ }
26869
+ });
26505
26870
  if (result.content?.length) content.push(result);
26506
26871
  });
26507
26872
  return {
@@ -26510,31 +26875,6 @@ function handleTableNode(node2, params2) {
26510
26875
  attrs
26511
26876
  };
26512
26877
  }
26513
- function handleTableCellNode$1({
26514
- params: params2,
26515
- node: node2,
26516
- table,
26517
- row,
26518
- rowBorders,
26519
- styleTag,
26520
- columnIndex,
26521
- columnWidth = null
26522
- }) {
26523
- const translatorParams = {
26524
- ...params2,
26525
- extraParams: {
26526
- node: node2,
26527
- table,
26528
- row,
26529
- rowBorders,
26530
- styleTag,
26531
- columnIndex,
26532
- columnWidth
26533
- }
26534
- };
26535
- const schemaNode = translator$1.encode(translatorParams);
26536
- return schemaNode;
26537
- }
26538
26878
  function getReferencedTableStyles(tblStyleTag, docx) {
26539
26879
  if (!tblStyleTag) return null;
26540
26880
  const stylesToReturn = {};
@@ -26615,50 +26955,6 @@ function processTableBorders(borderElements) {
26615
26955
  rowBorders
26616
26956
  };
26617
26957
  }
26618
- function handleTableRowNode(node2, table, rowBorders, styleTag, params2) {
26619
- const attrs = {};
26620
- const tPr = node2.elements.find((el) => el.name === "w:trPr");
26621
- const rowHeightTag = tPr?.elements?.find((el) => el.name === "w:trHeight");
26622
- const rowHeight = rowHeightTag?.attributes["w:val"];
26623
- const cantSplitTag = tPr?.elements?.find((el) => el.name === "w:cantSplit");
26624
- if (cantSplitTag) {
26625
- attrs["cantSplit"] = true;
26626
- }
26627
- const borders = {};
26628
- if (rowBorders?.insideH) borders["bottom"] = rowBorders.insideH;
26629
- if (rowBorders?.insideV) borders["right"] = rowBorders.insideV;
26630
- attrs["borders"] = borders;
26631
- if (rowHeight) {
26632
- attrs["rowHeight"] = twipsToPixels(rowHeight);
26633
- }
26634
- const gridColumnWidths = getGridColumnWidths(table);
26635
- const cellNodes = node2.elements.filter((el) => el.name === "w:tc");
26636
- let currentColumnIndex = 0;
26637
- const content = cellNodes?.map((n) => {
26638
- let colWidth = gridColumnWidths?.[currentColumnIndex] || null;
26639
- const result = handleTableCellNode$1({
26640
- params: params2,
26641
- node: n,
26642
- table,
26643
- row: node2,
26644
- rowBorders: borders,
26645
- styleTag,
26646
- columnIndex: currentColumnIndex,
26647
- columnWidth: colWidth
26648
- });
26649
- const tcPr = n.elements?.find((el) => el.name === "w:tcPr");
26650
- const colspanTag = tcPr?.elements?.find((el) => el.name === "w:gridSpan");
26651
- const colspan = parseInt(colspanTag?.attributes["w:val"] || 1, 10);
26652
- currentColumnIndex += colspan;
26653
- return result;
26654
- }) || [];
26655
- const newNode = {
26656
- type: "tableRow",
26657
- content,
26658
- attrs
26659
- };
26660
- return newNode;
26661
- }
26662
26958
  const getGridColumnWidths = (tableNode) => {
26663
26959
  const tblGrid = tableNode.elements.find((el) => el.name === "w:tblGrid");
26664
26960
  if (!tblGrid) return [];
@@ -26681,6 +26977,14 @@ function handleTableCellNode({
26681
26977
  const { docx, nodeListHandler: nodeListHandler2 } = params2;
26682
26978
  const tcPr = node2.elements.find((el) => el.name === "w:tcPr");
26683
26979
  const borders = tcPr?.elements?.find((el) => el.name === "w:tcBorders");
26980
+ if (rowBorders?.insideH) {
26981
+ rowBorders["bottom"] = rowBorders.insideH;
26982
+ delete rowBorders.insideH;
26983
+ }
26984
+ if (rowBorders?.insideV) {
26985
+ rowBorders["right"] = rowBorders.insideV;
26986
+ delete rowBorders?.insideV;
26987
+ }
26684
26988
  const inlineBorders = processInlineCellBorders(borders, rowBorders);
26685
26989
  const gridColumnWidths = getGridColumnWidths(table);
26686
26990
  const tcWidth = tcPr?.elements?.find((el) => el.name === "w:tcW");
@@ -26991,7 +27295,7 @@ const validXmlAttributes = [
26991
27295
  _createAttributeHandler("r:id", "rId"),
26992
27296
  _createAttributeHandler("w:tgtFrame", "target")
26993
27297
  ];
26994
- const encode$h = (params2, encodedAttrs) => {
27298
+ const encode$j = (params2, encodedAttrs) => {
26995
27299
  const { nodes, docx, nodeListHandler: nodeListHandler2 } = params2;
26996
27300
  const node2 = nodes[0];
26997
27301
  let href = _resolveHref(docx, encodedAttrs);
@@ -27022,7 +27326,7 @@ const _resolveHref = (docx, encodedAttrs) => {
27022
27326
  }
27023
27327
  return href;
27024
27328
  };
27025
- function decode(params2, _2) {
27329
+ function decode(params2) {
27026
27330
  const { node: node2 } = params2;
27027
27331
  const linkMark = node2.marks.find((m2) => m2.type === "link");
27028
27332
  const linkAttrs = this.decodeAttributes({ ...params2, node: linkMark });
@@ -27070,7 +27374,7 @@ const config = {
27070
27374
  xmlName: XML_NODE_NAME,
27071
27375
  sdNodeOrKeyName: SD_NODE_NAME,
27072
27376
  type: NodeTranslator.translatorTypes.NODE,
27073
- encode: encode$h,
27377
+ encode: encode$j,
27074
27378
  decode,
27075
27379
  attributes: validXmlAttributes
27076
27380
  };
@@ -27081,19 +27385,19 @@ function exportSchemaToJson(params2) {
27081
27385
  doc: translateDocumentNode,
27082
27386
  body: translateBodyNode,
27083
27387
  heading: translateHeadingNode,
27084
- paragraph: translator$2,
27388
+ paragraph: translator$g,
27085
27389
  text: translateTextNode,
27086
27390
  bulletList: translateList,
27087
27391
  orderedList: translateList,
27088
- lineBreak: translator$4,
27392
+ lineBreak: translator$i,
27089
27393
  table: translateTable,
27090
- tableRow: translateTableRow,
27394
+ tableRow: translator$2,
27091
27395
  tableCell: translator$1,
27092
27396
  bookmarkStart: translateBookmarkStart,
27093
27397
  fieldAnnotation: translateFieldAnnotation,
27094
- tab: translator$3,
27398
+ tab: translator$h,
27095
27399
  image: translateImageNode,
27096
- hardBreak: translator$4,
27400
+ hardBreak: translator$i,
27097
27401
  commentRangeStart: () => translateCommentNode(params2, "Start"),
27098
27402
  commentRangeEnd: () => translateCommentNode(params2, "End"),
27099
27403
  commentReference: () => null,
@@ -27873,36 +28177,6 @@ function generateTableGrid(node2, params2) {
27873
28177
  elements
27874
28178
  };
27875
28179
  }
27876
- function translateTableRow(params2) {
27877
- const elements = translateChildNodes(params2);
27878
- const tableRowProperties = generateTableRowProperties(params2.node);
27879
- if (tableRowProperties.elements.length) elements.unshift(tableRowProperties);
27880
- return {
27881
- name: "w:tr",
27882
- elements
27883
- };
27884
- }
27885
- function generateTableRowProperties(node2) {
27886
- const { attrs } = node2;
27887
- const elements = [];
27888
- const { rowHeight, rowHeightType } = attrs;
27889
- if (rowHeight) {
27890
- const attributes = { "w:val": pixelsToTwips(rowHeight) };
27891
- if (rowHeightType) attributes["w:hRule"] = rowHeightType;
27892
- const rowHeightElement = {
27893
- name: "w:trHeight",
27894
- attributes
27895
- };
27896
- elements.push(rowHeightElement);
27897
- }
27898
- if (attrs?.cantSplit) {
27899
- elements.push({ name: "w:cantSplit" });
27900
- }
27901
- return {
27902
- name: "w:trPr",
27903
- elements
27904
- };
27905
- }
27906
28180
  function translateBookmarkStart(params2) {
27907
28181
  const bookmarkStartNode = {
27908
28182
  name: "w:bookmarkStart",
@@ -29122,21 +29396,6 @@ const trackChangeNodeHandlerEntity = {
29122
29396
  handlerName: "trackChangeNodeHandler",
29123
29397
  handler: handleTrackChangeNode
29124
29398
  };
29125
- const generateV2HandlerEntity = (handlerName, translator2) => ({
29126
- handlerName,
29127
- handler: (params2) => {
29128
- const { nodes } = params2;
29129
- if (nodes.length === 0 || nodes[0].name !== translator2.xmlName) {
29130
- return { nodes: [], consumed: 0 };
29131
- }
29132
- const result = translator2.encode(params2);
29133
- if (!result) return { nodes: [], consumed: 0 };
29134
- return {
29135
- nodes: Array.isArray(result) ? result : [result],
29136
- consumed: 1
29137
- };
29138
- }
29139
- });
29140
29399
  const hyperlinkNodeHandlerEntity = generateV2HandlerEntity("hyperlinkNodeHandler", translator);
29141
29400
  const handleRunNode = (params2) => {
29142
29401
  const { nodes, nodeListHandler: nodeListHandler2, parentStyleId, docx } = params2;
@@ -29249,7 +29508,7 @@ const handleParagraphNode = (params2) => {
29249
29508
  if (nodes.length === 0 || nodes[0].name !== "w:p") {
29250
29509
  return { nodes: [], consumed: 0 };
29251
29510
  }
29252
- const schemaNode = translator$2.encode(params2);
29511
+ const schemaNode = translator$g.encode(params2);
29253
29512
  const newNodes = schemaNode ? [schemaNode] : [];
29254
29513
  return { nodes: newNodes, consumed: 1 };
29255
29514
  };
@@ -29562,7 +29821,7 @@ const handler = (params2) => {
29562
29821
  if (nodes.length === 0 || nodes[0].name !== "w:br") {
29563
29822
  return { nodes: [], consumed: 0 };
29564
29823
  }
29565
- const result = translator$4.encode(params2);
29824
+ const result = translator$i.encode(params2);
29566
29825
  if (!result) return { nodes: [], consumed: 0 };
29567
29826
  return {
29568
29827
  nodes: [result],
@@ -30258,7 +30517,7 @@ const handleTabNode = (params2) => {
30258
30517
  if (!nodes.length || nodes[0].name !== "w:tab") {
30259
30518
  return { nodes: [], consumed: 0 };
30260
30519
  }
30261
- const node2 = translator$3.encode(params2);
30520
+ const node2 = translator$h.encode(params2);
30262
30521
  return { nodes: [node2], consumed: 1 };
30263
30522
  };
30264
30523
  const tabNodeEntityHandler = {
@@ -30455,7 +30714,7 @@ const createNodeListHandler = (nodeHandlers) => {
30455
30714
  }
30456
30715
  } catch (error) {
30457
30716
  console.debug("Import error", error);
30458
- editor?.emit("exception", { error });
30717
+ editor?.emit("exception", { error, editor });
30459
30718
  converter?.telemetry?.trackStatistic("error", {
30460
30719
  type: "processing_error",
30461
30720
  message: error.message,
@@ -30468,7 +30727,7 @@ const createNodeListHandler = (nodeHandlers) => {
30468
30727
  return processedElements;
30469
30728
  } catch (error) {
30470
30729
  console.debug("Error during import", error);
30471
- editor?.emit("exception", { error });
30730
+ editor?.emit("exception", { error, editor });
30472
30731
  converter?.telemetry?.trackStatistic("error", {
30473
30732
  type: "fatal_error",
30474
30733
  message: error.message,
@@ -30934,8 +31193,13 @@ const _SuperConverter = class _SuperConverter2 {
30934
31193
  return { typeface, panose };
30935
31194
  }
30936
31195
  getSchema(editor) {
30937
- this.getDocumentInternalId();
30938
- const result = createDocumentJson({ ...this.convertedXml, media: this.media }, this, editor);
31196
+ let result;
31197
+ try {
31198
+ this.getDocumentInternalId();
31199
+ result = createDocumentJson({ ...this.convertedXml, media: this.media }, this, editor);
31200
+ } catch (error) {
31201
+ editor?.emit("exception", { error, editor });
31202
+ }
30939
31203
  if (result) {
30940
31204
  this.savedTagsToRestore.push({ ...result.savedTagsToRestore });
30941
31205
  this.pageStyles = result.pageStyles;
@@ -47326,7 +47590,7 @@ function validateRelationshipsRoot(relsTree, relsKey, results) {
47326
47590
  }
47327
47591
  return { root: root2, wasFixed };
47328
47592
  }
47329
- function cleanupRootChildren(root2, results) {
47593
+ function cleanupRootChildren(root2) {
47330
47594
  const validChildren = root2.elements?.filter((child) => child?.type === "element" && child.name === "Relationship") || [];
47331
47595
  if (root2.elements?.length !== validChildren.length) {
47332
47596
  root2.elements = validChildren;
@@ -48323,85 +48587,89 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48323
48587
  getUpdatedDocs = false,
48324
48588
  fieldsHighlightColor = null
48325
48589
  } = {}) {
48326
- const json = __privateMethod$1(this, _Editor_instances, prepareDocumentForExport_fn).call(this, comments);
48327
- const documentXml = await this.converter.exportToDocx(
48328
- json,
48329
- this.schema,
48330
- this.storage.image.media,
48331
- isFinalDoc,
48332
- commentsType,
48333
- comments,
48334
- this,
48335
- exportJsonOnly,
48336
- fieldsHighlightColor
48337
- );
48338
- __privateMethod$1(this, _Editor_instances, validateDocumentExport_fn).call(this);
48339
- if (exportXmlOnly || exportJsonOnly) return documentXml;
48340
- const customXml = this.converter.schemaToXml(this.converter.convertedXml["docProps/custom.xml"].elements[0]);
48341
- const styles = this.converter.schemaToXml(this.converter.convertedXml["word/styles.xml"].elements[0]);
48342
- const customSettings = this.converter.schemaToXml(this.converter.convertedXml["word/settings.xml"].elements[0]);
48343
- const rels = this.converter.schemaToXml(this.converter.convertedXml["word/_rels/document.xml.rels"].elements[0]);
48344
- const media = this.converter.addedMedia;
48345
- const updatedHeadersFooters = {};
48346
- Object.entries(this.converter.convertedXml).forEach(([name, json2]) => {
48347
- if (name.includes("header") || name.includes("footer")) {
48348
- const resultXml = this.converter.schemaToXml(json2.elements[0]);
48349
- updatedHeadersFooters[name] = String(resultXml);
48350
- }
48351
- });
48352
- const numberingData = this.converter.convertedXml["word/numbering.xml"];
48353
- const numbering = this.converter.schemaToXml(numberingData.elements[0]);
48354
- const updatedDocs = {
48355
- ...this.options.customUpdatedFiles,
48356
- "word/document.xml": String(documentXml),
48357
- "docProps/custom.xml": String(customXml),
48358
- "word/settings.xml": String(customSettings),
48359
- "word/_rels/document.xml.rels": String(rels),
48360
- "word/numbering.xml": String(numbering),
48361
- // Replace & with & in styles.xml as DOCX viewers can't handle it
48362
- "word/styles.xml": String(styles).replace(/&/gi, "&"),
48363
- ...updatedHeadersFooters
48364
- };
48365
- if (comments.length) {
48366
- const commentsXml = this.converter.schemaToXml(this.converter.convertedXml["word/comments.xml"].elements[0]);
48367
- const commentsExtendedXml = this.converter.schemaToXml(
48368
- this.converter.convertedXml["word/commentsExtended.xml"].elements[0]
48369
- );
48370
- const commentsExtensibleXml = this.converter.schemaToXml(
48371
- this.converter.convertedXml["word/commentsExtensible.xml"].elements[0]
48372
- );
48373
- const commentsIdsXml = this.converter.schemaToXml(
48374
- this.converter.convertedXml["word/commentsIds.xml"].elements[0]
48590
+ try {
48591
+ const json = __privateMethod$1(this, _Editor_instances, prepareDocumentForExport_fn).call(this, comments);
48592
+ const documentXml = await this.converter.exportToDocx(
48593
+ json,
48594
+ this.schema,
48595
+ this.storage.image.media,
48596
+ isFinalDoc,
48597
+ commentsType,
48598
+ comments,
48599
+ this,
48600
+ exportJsonOnly,
48601
+ fieldsHighlightColor
48375
48602
  );
48376
- updatedDocs["word/comments.xml"] = String(commentsXml);
48377
- updatedDocs["word/commentsExtended.xml"] = String(commentsExtendedXml);
48378
- updatedDocs["word/commentsExtensible.xml"] = String(commentsExtensibleXml);
48379
- updatedDocs["word/commentsIds.xml"] = String(commentsIdsXml);
48380
- }
48381
- const zipper = new DocxZipper();
48382
- if (getUpdatedDocs) {
48383
- updatedDocs["[Content_Types].xml"] = await zipper.updateContentTypes(
48384
- {
48385
- files: this.options.content
48386
- },
48603
+ __privateMethod$1(this, _Editor_instances, validateDocumentExport_fn).call(this);
48604
+ if (exportXmlOnly || exportJsonOnly) return documentXml;
48605
+ const customXml = this.converter.schemaToXml(this.converter.convertedXml["docProps/custom.xml"].elements[0]);
48606
+ const styles = this.converter.schemaToXml(this.converter.convertedXml["word/styles.xml"].elements[0]);
48607
+ const customSettings = this.converter.schemaToXml(this.converter.convertedXml["word/settings.xml"].elements[0]);
48608
+ const rels = this.converter.schemaToXml(this.converter.convertedXml["word/_rels/document.xml.rels"].elements[0]);
48609
+ const media = this.converter.addedMedia;
48610
+ const updatedHeadersFooters = {};
48611
+ Object.entries(this.converter.convertedXml).forEach(([name, json2]) => {
48612
+ if (name.includes("header") || name.includes("footer")) {
48613
+ const resultXml = this.converter.schemaToXml(json2.elements[0]);
48614
+ updatedHeadersFooters[name] = String(resultXml);
48615
+ }
48616
+ });
48617
+ const numberingData = this.converter.convertedXml["word/numbering.xml"];
48618
+ const numbering = this.converter.schemaToXml(numberingData.elements[0]);
48619
+ const updatedDocs = {
48620
+ ...this.options.customUpdatedFiles,
48621
+ "word/document.xml": String(documentXml),
48622
+ "docProps/custom.xml": String(customXml),
48623
+ "word/settings.xml": String(customSettings),
48624
+ "word/_rels/document.xml.rels": String(rels),
48625
+ "word/numbering.xml": String(numbering),
48626
+ // Replace & with & in styles.xml as DOCX viewers can't handle it
48627
+ "word/styles.xml": String(styles).replace(/&/gi, "&"),
48628
+ ...updatedHeadersFooters
48629
+ };
48630
+ if (comments.length) {
48631
+ const commentsXml = this.converter.schemaToXml(this.converter.convertedXml["word/comments.xml"].elements[0]);
48632
+ const commentsExtendedXml = this.converter.schemaToXml(
48633
+ this.converter.convertedXml["word/commentsExtended.xml"].elements[0]
48634
+ );
48635
+ const commentsExtensibleXml = this.converter.schemaToXml(
48636
+ this.converter.convertedXml["word/commentsExtensible.xml"].elements[0]
48637
+ );
48638
+ const commentsIdsXml = this.converter.schemaToXml(
48639
+ this.converter.convertedXml["word/commentsIds.xml"].elements[0]
48640
+ );
48641
+ updatedDocs["word/comments.xml"] = String(commentsXml);
48642
+ updatedDocs["word/commentsExtended.xml"] = String(commentsExtendedXml);
48643
+ updatedDocs["word/commentsExtensible.xml"] = String(commentsExtensibleXml);
48644
+ updatedDocs["word/commentsIds.xml"] = String(commentsIdsXml);
48645
+ }
48646
+ const zipper = new DocxZipper();
48647
+ if (getUpdatedDocs) {
48648
+ updatedDocs["[Content_Types].xml"] = await zipper.updateContentTypes(
48649
+ {
48650
+ files: this.options.content
48651
+ },
48652
+ media,
48653
+ true
48654
+ );
48655
+ return updatedDocs;
48656
+ }
48657
+ const result = await zipper.updateZip({
48658
+ docx: this.options.content,
48659
+ updatedDocs,
48660
+ originalDocxFile: this.options.fileSource,
48387
48661
  media,
48388
- true
48389
- );
48390
- return updatedDocs;
48662
+ fonts: this.options.fonts,
48663
+ isHeadless: this.options.isHeadless
48664
+ });
48665
+ this.options.telemetry?.trackUsage("document_export", {
48666
+ documentType: "docx",
48667
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
48668
+ });
48669
+ return result;
48670
+ } catch (error) {
48671
+ this.emit("exception", { error, editor: this });
48391
48672
  }
48392
- const result = await zipper.updateZip({
48393
- docx: this.options.content,
48394
- updatedDocs,
48395
- originalDocxFile: this.options.fileSource,
48396
- media,
48397
- fonts: this.options.fonts,
48398
- isHeadless: this.options.isHeadless
48399
- });
48400
- this.options.telemetry?.trackUsage("document_export", {
48401
- documentType: "docx",
48402
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
48403
- });
48404
- return result;
48405
48673
  }
48406
48674
  /**
48407
48675
  * Destroy the editor and clean up resources
@@ -48422,7 +48690,8 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48422
48690
  }
48423
48691
  this.converter.headerEditors.length = 0;
48424
48692
  this.converter.footerEditors.length = 0;
48425
- } catch {
48693
+ } catch (error) {
48694
+ this.emit("exception", { error, editor: this });
48426
48695
  }
48427
48696
  }
48428
48697
  /**
@@ -48487,7 +48756,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
48487
48756
  this.initDefaultStyles();
48488
48757
  if (this.options.ydoc && this.options.collaborationProvider) {
48489
48758
  updateYdocDocxData(this);
48490
- this.initializeCollaborationData(true);
48759
+ this.initializeCollaborationData();
48491
48760
  } else {
48492
48761
  __privateMethod$1(this, _Editor_instances, insertNewFileData_fn).call(this);
48493
48762
  }
@@ -48647,7 +48916,6 @@ init_fn = function() {
48647
48916
  this.on("beforeCreate", this.options.onBeforeCreate);
48648
48917
  this.emit("beforeCreate", { editor: this });
48649
48918
  this.on("contentError", this.options.onContentError);
48650
- this.on("exception", this.options.onException);
48651
48919
  this.mount(this.options.element);
48652
48920
  this.on("create", this.options.onCreate);
48653
48921
  this.on("update", this.options.onUpdate);
@@ -48665,6 +48933,7 @@ init_fn = function() {
48665
48933
  this.on("paginationUpdate", this.options.onPaginationUpdate);
48666
48934
  this.on("comment-positions", this.options.onCommentLocationsUpdate);
48667
48935
  this.on("list-definitions-change", this.options.onListDefinitionsChange);
48936
+ this.on("exception", this.options.onException);
48668
48937
  if (!this.options.isHeadless) {
48669
48938
  this.initializeCollaborationData();
48670
48939
  this.initDefaultStyles();
@@ -48991,7 +49260,8 @@ endCollaboration_fn = function() {
48991
49260
  console.debug("🔗 [super-editor] Ending collaboration");
48992
49261
  if (this.options.collaborationProvider) this.options.collaborationProvider.disconnect();
48993
49262
  if (this.options.ydoc) this.options.ydoc.destroy();
48994
- } catch {
49263
+ } catch (error) {
49264
+ this.emit("exception", { error, editor: this });
48995
49265
  }
48996
49266
  };
48997
49267
  validateDocumentInit_fn = function() {
@@ -55999,7 +56269,49 @@ const TableRow = Node$1.create({
55999
56269
  if (!cantSplit) return {};
56000
56270
  return { "data-cant-split": "true" };
56001
56271
  }
56002
- }
56272
+ },
56273
+ /**
56274
+ * @category Attribute
56275
+ * @param {TableRowProperties} [tableRowProperties] - Properties for the table row.
56276
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 377-482
56277
+ */
56278
+ tableRowProperties: { rendered: false },
56279
+ /**
56280
+ * @category Attribute
56281
+ * @param {string} [rsidDel] - Unique identifier used to track the editing session when the row was deleted from the main document.
56282
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 472
56283
+ */
56284
+ rsidDel: { rendered: false },
56285
+ /**
56286
+ * @category Attribute
56287
+ * @param {string} [rsidR] - Unique identifier used to track the editing session when the table row was added to the main document.
56288
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 472
56289
+ */
56290
+ rsidR: { rendered: false },
56291
+ /**
56292
+ * @category Attribute
56293
+ * @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.
56294
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 473
56295
+ */
56296
+ rsidRPr: { rendered: false },
56297
+ /**
56298
+ * @category Attribute
56299
+ * @param {string} [rsidTr] - Unique identifier used to track the editing session when the table row's properties were last modified in this document.
56300
+ * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 473
56301
+ */
56302
+ rsidTr: { rendered: false },
56303
+ /**
56304
+ * @category Attribute
56305
+ * @param {string} [paraId] - A randomly generated unique identifier for the table row.
56306
+ * @see {@link https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/a0e7d2e2-2246-44c6-96e8-1cf009823615}
56307
+ */
56308
+ paraId: { rendered: false },
56309
+ /**
56310
+ * @category Attribute
56311
+ * @param {string} [textId] - A randomly generated unique identifier for the text of the table row.
56312
+ * @see {@link https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b7eeddec-7c50-47fb-88b6-1feec3ed832c}
56313
+ */
56314
+ textId: { rendered: false }
56003
56315
  };
56004
56316
  },
56005
56317
  parseDOM() {
@@ -58238,6 +58550,7 @@ const startImageUpload = async ({ editor, view, file }) => {
58238
58550
  file = processedImageResult.file;
58239
58551
  } catch (err) {
58240
58552
  console.warn("Error processing image:", err);
58553
+ editor.emit("exception", { error: err, editor });
58241
58554
  return;
58242
58555
  }
58243
58556
  await uploadImage({
@@ -58292,9 +58605,10 @@ async function uploadImage({ editor, view, file, size: size2, uploadHandler }) {
58292
58605
  view.dispatch(
58293
58606
  view.state.tr.replaceWith(placeholderPos, placeholderPos, imageNode).setMeta(ImagePlaceholderPluginKey, removeMeta)
58294
58607
  );
58295
- } catch {
58608
+ } catch (error) {
58296
58609
  let removeMeta = { type: "remove", id };
58297
58610
  view.dispatch(tr.setMeta(ImagePlaceholderPluginKey, removeMeta));
58611
+ editor.emit("exception", { error, editor });
58298
58612
  }
58299
58613
  }
58300
58614
  function addImageRelationship({ editor, path }) {
@@ -79833,7 +80147,9 @@ class SuperToolbar extends EventEmitter2 {
79833
80147
  } else if (typeof command2 === "function") {
79834
80148
  command2({ item, argument, option });
79835
80149
  } else {
79836
- throw new Error(`[super-toolbar 🎨] Command not found: ${command2}`);
80150
+ const error = new Error(`[super-toolbar 🎨] Command not found: ${command2}`);
80151
+ this.emit("exception", { error, editor: this.activeEditor });
80152
+ throw error;
79837
80153
  }
79838
80154
  this.updateToolbarState();
79839
80155
  }
@@ -81088,6 +81404,9 @@ const _sfc_main$1 = {
81088
81404
  return { content: docx, media, mediaFiles, fonts };
81089
81405
  } catch (err) {
81090
81406
  console.debug("Error loading new file data:", err);
81407
+ if (typeof props.options.onException === "function") {
81408
+ props.options.onException({ error: err, editor: null });
81409
+ }
81091
81410
  }
81092
81411
  };
81093
81412
  const initializeData = async () => {
@@ -81290,7 +81609,7 @@ const _sfc_main$1 = {
81290
81609
  };
81291
81610
  }
81292
81611
  };
81293
- const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-8b2f8c17"]]);
81612
+ const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-0c36dd72"]]);
81294
81613
  const _hoisted_1 = ["innerHTML"];
81295
81614
  const _sfc_main = {
81296
81615
  __name: "SuperInput",
@@ -81383,9 +81702,9 @@ const _sfc_main = {
81383
81702
  };
81384
81703
  const SuperInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4d5cff52"]]);
81385
81704
  const registeredHandlers = Object.freeze({
81386
- "w:br": translator$4,
81387
- "w:tab": translator$3,
81388
- "w:p": translator$2
81705
+ "w:br": translator$i,
81706
+ "w:tab": translator$h,
81707
+ "w:p": translator$g
81389
81708
  });
81390
81709
  const Extensions = {
81391
81710
  Node: Node$1,