docxmlater 10.2.2 → 10.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -68,6 +68,7 @@ export declare class ComplexField {
68
68
  private resultRevisions;
69
69
  private _hasResultSection;
70
70
  private _formFieldData?;
71
+ private trackingContext?;
71
72
  constructor(properties: ComplexFieldProperties);
72
73
  getInstruction(): string;
73
74
  setInstruction(instruction: string): this;
@@ -88,6 +89,14 @@ export declare class ComplexField {
88
89
  updateInstruction(instruction: string): this;
89
90
  addResultContent(content: XMLElement): this;
90
91
  getResultContent(): XMLElement[];
92
+ _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void;
93
+ getAcceptedResultText(): string;
94
+ private extractTextFromRunXml;
95
+ setTrackedResult(newText: string, author: string, options?: {
96
+ formatting?: RunFormatting;
97
+ preserveFormatting?: boolean;
98
+ }): this;
99
+ private extractFirstVisibleRunProperties;
91
100
  setMultiParagraph(multiParagraph: boolean): this;
92
101
  isMultiParagraph(): boolean;
93
102
  setResultRevisions(revisions: Revision[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/elements/Field.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EACL,0BAA0B,EAG3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,UAAU,GACV,kBAAkB,GAClB,SAAS,GACT,UAAU,GACV,YAAY,GACZ,UAAU,GACV,WAAW,GACX,cAAc,GACd,SAAS,GACT,KAAK,GACL,WAAW,GACX,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,YAAY,GACZ,SAAS,GACT,aAAa,GACb,QAAQ,CAAC;AAKb,MAAM,WAAW,eAAe;IAE9B,IAAI,EAAE,SAAS,CAAC;IAEhB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAKD,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAgB;gBAMvB,UAAU,EAAE,eAAe;IAevC,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,WAAW;IAOnB,OAAO,IAAI,SAAS;IAOpB,cAAc,IAAI,MAAM;IAOxB,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAQ9C,aAAa,IAAI,aAAa,GAAG,SAAS;IAQ1C,gBAAgB,IAAI,OAAO;IAW3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAc7B,KAAK,IAAI,UAAU;IA4BnB,OAAO,CAAC,kBAAkB;IAgD1B,OAAO,CAAC,mBAAmB;IAkF3B,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAW1D,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAY1D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAarE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAarE,MAAM,CAAC,cAAc,CAAC,WAAW,UAAQ,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAW7E,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAWtD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAWrD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAa5D,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAkBtF,MAAM,CAAC,eAAe,CACpB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAAY,EACzB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,aAAa,GACzB,KAAK;IAsBR,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAwBxF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAoBhF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAmBxF,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,KAAK;IAY3E,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,GAAG,KAAK;CAGlD;AAKD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAMzD,MAAM,WAAW,sBAAsB;IAErC,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,qBAAqB,CAAC,EAAE,aAAa,CAAC;IAGtC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAGjC,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;IAG9B,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;IAG7B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAS7C,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAaD,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IACzC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAC,CAA6B;IAErD,OAAO,CAAC,eAAe,CAAkB;IAKzC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAM3B,UAAU,EAAE,sBAAsB;IAsB9C,cAAc,IAAI,MAAM;IAOxB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQzC,gBAAgB,IAAI,aAAa,GAAG,SAAS;IAO7C,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgC/B,gBAAgB,IAAI,OAAO;IAO3B,wBAAwB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAQzD,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IASpD,kBAAkB,IAAI,0BAA0B,GAAG,SAAS;IAO5D,gBAAgB,IAAI,OAAO;IAQ3B,eAAe,IAAI,MAAM,GAAG,SAAS;IAQrC,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAQzC,eAAe,IAAI,YAAY,EAAE;IAiBjC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAYzC,mBAAmB,IAAI,MAAM;IAQ7B,iBAAiB,IAAI,IAAI;IAgBzB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ5C,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAQ3C,gBAAgB,IAAI,UAAU,EAAE;IAOhC,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI;IAQhD,gBAAgB,IAAI,OAAO;IAS3B,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAS/C,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQ3C,kBAAkB,IAAI,QAAQ,EAAE;IAOhC,kBAAkB,IAAI,OAAO;IAQ7B,KAAK,IAAI,UAAU,EAAE;IAuGrB,OAAO,CAAC,mBAAmB;IAyE3B,OAAO,CAAC,sBAAsB;CA8I/B;AAKD,MAAM,WAAW,eAAe;IAE9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,YAAY,CA0C1E"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/elements/Field.ts"],"names":[],"mappings":"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"}
@@ -318,6 +318,7 @@ class ComplexField {
318
318
  resultRevisions = [];
319
319
  _hasResultSection = false;
320
320
  _formFieldData;
321
+ trackingContext;
321
322
  constructor(properties) {
322
323
  this.instruction = properties.instruction;
323
324
  this.result = properties.result;
@@ -406,6 +407,116 @@ class ComplexField {
406
407
  getResultContent() {
407
408
  return [...this.resultContent];
408
409
  }
410
+ _setTrackingContext(context) {
411
+ this.trackingContext = context;
412
+ }
413
+ getAcceptedResultText() {
414
+ if (this.resultContent.length === 0) {
415
+ return this.result || '';
416
+ }
417
+ let text = '';
418
+ for (const element of this.resultContent) {
419
+ if (element.name === 'w:r') {
420
+ text += this.extractTextFromRunXml(element);
421
+ }
422
+ else if (element.name === 'w:ins') {
423
+ for (const child of element.children || []) {
424
+ if (typeof child !== 'string' && child.name === 'w:r') {
425
+ text += this.extractTextFromRunXml(child);
426
+ }
427
+ }
428
+ }
429
+ }
430
+ return text || this.result || '';
431
+ }
432
+ extractTextFromRunXml(run) {
433
+ let text = '';
434
+ for (const child of run.children || []) {
435
+ if (typeof child !== 'string' && (child.name === 'w:t' || child.name === 'w:delText')) {
436
+ for (const t of child.children || []) {
437
+ if (typeof t === 'string')
438
+ text += t;
439
+ }
440
+ }
441
+ }
442
+ return text;
443
+ }
444
+ setTrackedResult(newText, author, options) {
445
+ const currentText = this.getAcceptedResultText();
446
+ if (currentText === newText)
447
+ return this;
448
+ const date = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
449
+ let delId, insId;
450
+ if (this.trackingContext) {
451
+ const rm = this.trackingContext.getRevisionManager();
452
+ delId = rm.consumeNextId();
453
+ insId = rm.consumeNextId();
454
+ }
455
+ else {
456
+ const base = Date.now() % 100000000;
457
+ delId = base;
458
+ insId = base + 1;
459
+ }
460
+ let rPr = null;
461
+ if (options?.formatting) {
462
+ rPr = this.createRunProperties(options.formatting);
463
+ }
464
+ else if (options?.preserveFormatting) {
465
+ rPr = this.extractFirstVisibleRunProperties();
466
+ }
467
+ const delRunChildren = [];
468
+ if (rPr)
469
+ delRunChildren.push(rPr);
470
+ delRunChildren.push({
471
+ name: 'w:delText',
472
+ attributes: { 'xml:space': 'preserve' },
473
+ children: [currentText],
474
+ });
475
+ const delElement = {
476
+ name: 'w:del',
477
+ attributes: { 'w:id': String(delId), 'w:author': author, 'w:date': date },
478
+ children: [{ name: 'w:r', children: delRunChildren }],
479
+ };
480
+ const insRunChildren = [];
481
+ if (rPr)
482
+ insRunChildren.push(rPr);
483
+ insRunChildren.push({
484
+ name: 'w:t',
485
+ attributes: { 'xml:space': 'preserve' },
486
+ children: [newText],
487
+ });
488
+ const insElement = {
489
+ name: 'w:ins',
490
+ attributes: { 'w:id': String(insId), 'w:author': author, 'w:date': date },
491
+ children: [{ name: 'w:r', children: insRunChildren }],
492
+ };
493
+ this.resultContent = [delElement, insElement];
494
+ this.result = newText;
495
+ this.resultRevisions = [];
496
+ return this;
497
+ }
498
+ extractFirstVisibleRunProperties() {
499
+ for (const element of this.resultContent) {
500
+ if (element.name === 'w:r') {
501
+ const rPr = (element.children || []).find((c) => typeof c !== 'string' && c.name === 'w:rPr');
502
+ if (rPr)
503
+ return rPr;
504
+ }
505
+ else if (element.name === 'w:ins') {
506
+ for (const child of element.children || []) {
507
+ if (typeof child !== 'string' && child.name === 'w:r') {
508
+ const rPr = (child.children || []).find((c) => typeof c !== 'string' && c.name === 'w:rPr');
509
+ if (rPr)
510
+ return rPr;
511
+ }
512
+ }
513
+ }
514
+ }
515
+ if (this.resultFormatting) {
516
+ return this.createRunProperties(this.resultFormatting);
517
+ }
518
+ return null;
519
+ }
409
520
  setMultiParagraph(multiParagraph) {
410
521
  this.multiParagraph = multiParagraph;
411
522
  return this;
@@ -484,10 +595,12 @@ class ComplexField {
484
595
  children: resultChildren,
485
596
  });
486
597
  }
487
- for (const revision of this.resultRevisions) {
488
- const revisionXml = revision.toXML();
489
- if (revisionXml) {
490
- runs.push(revisionXml);
598
+ if (this.resultContent.length === 0) {
599
+ for (const revision of this.resultRevisions) {
600
+ const revisionXml = revision.toXML();
601
+ if (revisionXml) {
602
+ runs.push(revisionXml);
603
+ }
491
604
  }
492
605
  }
493
606
  runs.push({
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/elements/Field.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Field - Represents a dynamic field in a Word document\n *\n * Fields are used for dynamic content like page numbers, dates, document properties, etc.\n * They are represented using the <w:fldSimple> element with field codes.\n */\n\nimport { XMLElement } from '../xml/XMLBuilder';\nimport { RunFormatting, FormFieldData } from './Run';\nimport {\n ParsedHyperlinkInstruction,\n parseHyperlinkInstruction,\n isHyperlinkInstruction,\n} from './FieldHelpers';\nimport type { Revision } from './Revision';\nimport { pointsToHalfPoints } from '../utils/units';\n\n/**\n * Common field types\n */\nexport type FieldType =\n | 'PAGE' // Current page number\n | 'NUMPAGES' // Total number of pages\n | 'DATE' // Current date\n | 'TIME' // Current time\n | 'AUTHOR' // Document author\n | 'TITLE' // Document title\n | 'FILENAME' // Document filename\n | 'FILENAMEWITHPATH' // Document filename with path\n | 'SUBJECT' // Document subject\n | 'KEYWORDS' // Document keywords\n | 'CREATEDATE' // Document creation date\n | 'SAVEDATE' // Last save date\n | 'PRINTDATE' // Last print date\n | 'SECTIONPAGES' // Pages in current section\n | 'SECTION' // Current section number\n | 'REF' // Cross-reference to bookmark\n | 'HYPERLINK' // Hyperlink field\n | 'SEQ' // Sequence numbering\n | 'TC' // Table of contents entry\n | 'XE' // Index entry\n | 'IF' // Conditional field\n | 'MERGEFIELD' // Mail merge field\n | 'INCLUDE' // Include text from external file\n | 'INCLUDETEXT' // Include text from external file (alias)\n | 'CUSTOM'; // Custom field type for unknown/specialized fields\n\n/**\n * Field properties\n */\nexport interface FieldProperties {\n /** Field type */\n type: FieldType;\n /** Field instruction (e.g., 'PAGE \\* MERGEFORMAT') */\n instruction?: string;\n /** Format switches (e.g., '\\\\* MERGEFORMAT') */\n format?: string;\n /** Date/time format (e.g., 'MMMM d, yyyy') */\n dateFormat?: string;\n /** Preserve formatting during updates */\n preserveFormatting?: boolean;\n /** Run formatting for field result */\n formatting?: RunFormatting;\n}\n\n/**\n * Represents a dynamic field\n */\nexport class Field {\n private type: FieldType;\n private instruction: string;\n private formatting?: RunFormatting;\n\n /**\n * Creates a new field\n * @param properties Field properties\n */\n constructor(properties: FieldProperties) {\n this.type = properties.type;\n this.formatting = properties.formatting;\n\n // Build field instruction\n if (properties.instruction) {\n this.instruction = properties.instruction;\n } else {\n this.instruction = this.buildInstruction(properties);\n }\n }\n\n /**\n * Builds field instruction from properties\n */\n private buildInstruction(properties: FieldProperties): string {\n let instruction = properties.type;\n\n // Add date format for date/time fields\n if (properties.dateFormat && this.isDateField(properties.type)) {\n instruction += ` \\\\@ \"${properties.dateFormat}\"`;\n }\n\n // Add format switch\n if (properties.format) {\n instruction += ` ${properties.format}`;\n } else if (properties.preserveFormatting !== false) {\n // Add MERGEFORMAT by default to preserve formatting\n instruction += ' \\\\* MERGEFORMAT';\n }\n\n return instruction;\n }\n\n /**\n * Checks if field type is a date field\n */\n private isDateField(type: FieldType): boolean {\n return ['DATE', 'TIME', 'CREATEDATE', 'SAVEDATE', 'PRINTDATE'].includes(type);\n }\n\n /**\n * Gets the field type\n */\n getType(): FieldType {\n return this.type;\n }\n\n /**\n * Gets the field instruction\n */\n getInstruction(): string {\n return this.instruction;\n }\n\n /**\n * Sets run formatting for the field\n */\n setFormatting(formatting: RunFormatting): this {\n this.formatting = formatting;\n return this;\n }\n\n /**\n * Gets run formatting\n */\n getFormatting(): RunFormatting | undefined {\n return this.formatting;\n }\n\n /**\n * Checks if this field is a HYPERLINK field\n * @returns True if the field type is HYPERLINK or instruction starts with HYPERLINK\n */\n isHyperlinkField(): boolean {\n return (\n this.type === 'HYPERLINK' || this.instruction.trim().toUpperCase().startsWith('HYPERLINK')\n );\n }\n\n /**\n * Sets text color for the field\n * @param color Color in hex format (e.g., '0000FF')\n * @returns This field for chaining\n */\n setColor(color: string): this {\n if (!this.formatting) {\n this.formatting = {};\n }\n this.formatting.color = color.replace('#', '');\n return this;\n }\n\n /**\n * Generates XML for the field.\n * Per ECMA-376, w:fldSimple is a paragraph-level element that CONTAINS w:r children.\n * Structure: <w:fldSimple w:instr=\"...\"><w:r><w:rPr/><w:t>...</w:t></w:r></w:fldSimple>\n * The fldSimple element should be added directly to paragraph children (not wrapped in w:r).\n */\n toXML(): XMLElement {\n // Build the inner run with optional formatting\n const runChildren: XMLElement[] = [];\n if (this.formatting) {\n runChildren.push(this.createRunProperties());\n }\n runChildren.push({\n name: 'w:t',\n children: [this.getPlaceholderText()],\n });\n\n return {\n name: 'w:fldSimple',\n attributes: {\n 'w:instr': this.instruction,\n },\n children: [\n {\n name: 'w:r',\n children: runChildren,\n },\n ],\n };\n }\n\n /**\n * Gets placeholder text for the field\n */\n private getPlaceholderText(): string {\n switch (this.type) {\n case 'PAGE':\n return '1';\n case 'NUMPAGES':\n return '1';\n case 'SECTIONPAGES':\n return '1';\n case 'SECTION':\n return '1';\n case 'DATE':\n return new Date().toLocaleDateString();\n case 'TIME':\n return new Date().toLocaleTimeString();\n case 'CREATEDATE':\n case 'SAVEDATE':\n case 'PRINTDATE':\n return new Date().toLocaleDateString();\n case 'FILENAME':\n return 'Document';\n case 'FILENAMEWITHPATH':\n return 'C:\\\\Document.docx';\n case 'AUTHOR':\n return 'Author';\n case 'TITLE':\n return 'Title';\n case 'SUBJECT':\n return 'Subject';\n case 'KEYWORDS':\n return 'Keywords';\n case 'REF':\n return '1'; // Reference typically shows page number or heading text\n case 'HYPERLINK':\n return 'Link'; // Hyperlink displays the link text\n case 'SEQ':\n return '1'; // Sequence shows the current number\n case 'TC':\n return ''; // TC fields are hidden\n case 'XE':\n return ''; // XE fields are hidden\n default:\n return '';\n }\n }\n\n /**\n * Creates run properties XML\n */\n private createRunProperties(): XMLElement {\n const children: XMLElement[] = [];\n\n if (!this.formatting) {\n return { name: 'w:rPr', children };\n }\n\n // Per ECMA-376 CT_RPr ordering:\n // rFonts → b → i → strike → color → sz/szCs → highlight → u\n\n if (this.formatting.font) {\n children.push({\n name: 'w:rFonts',\n attributes: {\n 'w:ascii': this.formatting.font,\n 'w:hAnsi': this.formatting.font,\n 'w:cs': this.formatting.font,\n },\n selfClosing: true,\n });\n }\n\n if (this.formatting.bold) {\n children.push({ name: 'w:b', selfClosing: true });\n }\n\n if (this.formatting.italic) {\n children.push({ name: 'w:i', selfClosing: true });\n }\n\n if (this.formatting.strike) {\n children.push({ name: 'w:strike', selfClosing: true });\n }\n\n if (this.formatting.color) {\n const color = this.formatting.color.replace('#', '');\n children.push({\n name: 'w:color',\n attributes: { 'w:val': color },\n selfClosing: true,\n });\n }\n\n if (this.formatting.size) {\n const sizeValue = pointsToHalfPoints(this.formatting.size).toString();\n children.push({\n name: 'w:sz',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n children.push({\n name: 'w:szCs',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n }\n\n if (this.formatting.highlight) {\n children.push({\n name: 'w:highlight',\n attributes: { 'w:val': this.formatting.highlight },\n selfClosing: true,\n });\n }\n\n if (this.formatting.underline) {\n const val =\n typeof this.formatting.underline === 'string' ? this.formatting.underline : 'single';\n children.push({\n name: 'w:u',\n attributes: { 'w:val': val },\n selfClosing: true,\n });\n }\n\n return { name: 'w:rPr', children };\n }\n\n /**\n * Creates a page number field\n * @param formatting Optional run formatting\n */\n static createPageNumber(formatting?: RunFormatting): Field {\n return new Field({\n type: 'PAGE',\n formatting,\n });\n }\n\n /**\n * Creates a total pages field\n * @param formatting Optional run formatting\n */\n static createTotalPages(formatting?: RunFormatting): Field {\n return new Field({\n type: 'NUMPAGES',\n formatting,\n });\n }\n\n /**\n * Creates a date field\n * @param format Date format (e.g., 'MMMM d, yyyy')\n * @param formatting Optional run formatting\n */\n static createDate(format?: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'DATE',\n dateFormat: format,\n formatting,\n });\n }\n\n /**\n * Creates a time field\n * @param format Time format\n * @param formatting Optional run formatting\n */\n static createTime(format?: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'TIME',\n dateFormat: format,\n formatting,\n });\n }\n\n /**\n * Creates a filename field\n * @param includePath Whether to include full path\n * @param formatting Optional run formatting\n */\n static createFilename(includePath = false, formatting?: RunFormatting): Field {\n return new Field({\n type: includePath ? 'FILENAMEWITHPATH' : 'FILENAME',\n formatting,\n });\n }\n\n /**\n * Creates an author field\n * @param formatting Optional run formatting\n */\n static createAuthor(formatting?: RunFormatting): Field {\n return new Field({\n type: 'AUTHOR',\n formatting,\n });\n }\n\n /**\n * Creates a title field\n * @param formatting Optional run formatting\n */\n static createTitle(formatting?: RunFormatting): Field {\n return new Field({\n type: 'TITLE',\n formatting,\n });\n }\n\n /**\n * Creates a section pages field (pages in current section)\n * @param formatting Optional run formatting\n */\n static createSectionPages(formatting?: RunFormatting): Field {\n return new Field({\n type: 'SECTIONPAGES',\n formatting,\n });\n }\n\n /**\n * Creates a cross-reference field\n * @param bookmark Bookmark name to reference\n * @param format Reference format (\\h for hyperlink, \\p for page number, etc.)\n * @param formatting Optional run formatting\n */\n static createRef(bookmark: string, format?: string, formatting?: RunFormatting): Field {\n const formatSwitch = format || '\\\\h'; // Default to hyperlink format\n const instruction = `REF ${bookmark} ${formatSwitch} \\\\* MERGEFORMAT`;\n\n return new Field({\n type: 'REF',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a hyperlink field\n * @param url The URL to link to\n * @param displayText The text to display\n * @param tooltip Optional tooltip text\n * @param formatting Optional run formatting\n */\n static createHyperlink(\n url: string,\n displayText: string = url,\n tooltip?: string,\n formatting?: RunFormatting\n ): Field {\n let instruction = `HYPERLINK \"${url}\"`;\n\n if (tooltip) {\n instruction += ` \\\\o \"${tooltip}\"`;\n }\n\n instruction += ' \\\\* MERGEFORMAT';\n\n return new Field({\n type: 'HYPERLINK',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a sequence numbering field\n * @param identifier Sequence identifier (e.g., 'Figure', 'Table')\n * @param format Number format (\\* ARABIC, \\* ROMAN, etc.)\n * @param formatting Optional run formatting\n */\n static createSeq(identifier: string, format?: string, formatting?: RunFormatting): Field {\n let instruction = `SEQ ${identifier}`;\n\n if (format) {\n instruction += ` ${format}`;\n } else {\n instruction += ' \\\\* ARABIC'; // Default to Arabic numerals\n }\n\n instruction += ' \\\\* MERGEFORMAT';\n\n return new Field({\n type: 'SEQ',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a table of contents entry field (TC)\n * @param text Entry text\n * @param level TOC level (1-9)\n * @param formatting Optional run formatting\n */\n static createTCEntry(text: string, level = 1, formatting?: RunFormatting): Field {\n if (level < 1 || level > 9) {\n throw new Error('TC level must be between 1 and 9');\n }\n\n const instruction = `TC \"${text}\" \\\\f C \\\\l ${level}`;\n\n return new Field({\n type: 'TC',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates an index entry field (XE)\n * @param text Entry text\n * @param subEntry Optional sub-entry text\n * @param formatting Optional run formatting\n */\n static createXEEntry(text: string, subEntry?: string, formatting?: RunFormatting): Field {\n let instruction = `XE \"${text}\"`;\n\n if (subEntry) {\n instruction += `:${subEntry}`;\n }\n\n return new Field({\n type: 'XE',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a custom field with instruction\n * @param instruction Field instruction code\n * @param formatting Optional run formatting\n */\n static createCustom(instruction: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'PAGE', // Placeholder type\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a field from properties\n * @param properties Field properties\n */\n static create(properties: FieldProperties): Field {\n return new Field(properties);\n }\n}\n\n/**\n * Field character type for complex fields\n */\nexport type FieldCharType = 'begin' | 'separate' | 'end';\n\n/**\n * Complex field properties\n * Complex fields use begin/separate/end structure instead of fldSimple\n */\nexport interface ComplexFieldProperties {\n /** Field instruction (e.g., \" TOC \\\\o \\\"1-3\\\" \\\\h \\\\z \\\\u \") */\n instruction: string;\n\n /** Current field result text (optional) */\n result?: string;\n\n /** Run formatting for instruction */\n instructionFormatting?: RunFormatting;\n\n /** Run formatting for result */\n resultFormatting?: RunFormatting;\n\n /** Nested fields to include within this field */\n nestedFields?: ComplexField[];\n\n /** Custom XML content for result section */\n resultContent?: XMLElement[];\n\n /** Whether field spans multiple paragraphs */\n multiParagraph?: boolean;\n\n /** Parsed HYPERLINK instruction components (auto-populated if instruction is HYPERLINK) */\n parsedHyperlink?: ParsedHyperlinkInstruction;\n\n /**\n * Whether the field has a result section (w:fldSep was present during parsing)\n * Per ECMA-376, fields without results skip the separator element.\n * This flag distinguishes between:\n * - hasResult=true, result=\"\" → Field had separator but result was empty\n * - hasResult=false, result=\"\" → Field never had a result section (empty field)\n */\n hasResult?: boolean;\n\n /** Form field data (w:ffData) from begin field char per ECMA-376 §17.16.17 */\n formFieldData?: FormFieldData;\n}\n\n/**\n * Represents a complex field (begin/separate/end structure)\n * Used for TOC, cross-references, and other advanced fields\n *\n * Structure:\n * <w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>\n * <w:r><w:instrText>INSTRUCTION</w:instrText></w:r>\n * <w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>\n * <w:r><w:t>RESULT</w:t></w:r>\n * <w:r><w:fldChar w:fldCharType=\"end\"/></w:r>\n */\nexport class ComplexField {\n private instruction: string;\n private result?: string;\n private instructionFormatting?: RunFormatting;\n private resultFormatting?: RunFormatting;\n private nestedFields: ComplexField[];\n private resultContent: XMLElement[];\n private multiParagraph: boolean;\n private parsedHyperlink?: ParsedHyperlinkInstruction;\n /** Revisions that wrap the result section (for tracked changes in field content) */\n private resultRevisions: Revision[] = [];\n /**\n * Whether the field has a result section (w:fldSep was present during parsing)\n * Per ECMA-376, fields without results skip the separator element.\n */\n private _hasResultSection = false;\n private _formFieldData?: FormFieldData;\n\n /**\n * Creates a new complex field\n * @param properties Complex field properties\n */\n constructor(properties: ComplexFieldProperties) {\n this.instruction = properties.instruction;\n this.result = properties.result;\n this.instructionFormatting = properties.instructionFormatting;\n this.resultFormatting = properties.resultFormatting;\n this.nestedFields = properties.nestedFields || [];\n this.resultContent = properties.resultContent || [];\n this.multiParagraph = properties.multiParagraph || false;\n this._hasResultSection = properties.hasResult ?? false;\n this._formFieldData = properties.formFieldData;\n\n // Auto-parse HYPERLINK instruction if provided or detected\n if (properties.parsedHyperlink) {\n this.parsedHyperlink = properties.parsedHyperlink;\n } else if (isHyperlinkInstruction(this.instruction)) {\n this.parsedHyperlink = parseHyperlinkInstruction(this.instruction) || undefined;\n }\n }\n\n /**\n * Gets the field instruction\n */\n getInstruction(): string {\n return this.instruction;\n }\n\n /**\n * Sets the field instruction\n */\n setInstruction(instruction: string): this {\n this.instruction = instruction;\n return this;\n }\n\n /**\n * Gets form field data (w:ffData) if present\n */\n getFormFieldData(): FormFieldData | undefined {\n return this._formFieldData;\n }\n\n /**\n * Gets the field result text\n */\n getResult(): string | undefined {\n return this.result;\n }\n\n /**\n * Sets the field result text\n */\n setResult(result: string): this {\n this.result = result;\n this.resultRevisions = []; // Clear orphaned revisions from old text\n this.resultContent = []; // Clear raw XML content since we have new text\n return this;\n }\n\n /**\n * Checks if the field has a result section\n *\n * Per ECMA-376, complex fields may or may not have a result section.\n * Fields without results (like TOC markers or empty PAGE fields) skip\n * the w:fldSep (separator) element entirely.\n *\n * This method distinguishes between:\n * - `hasResultSection() === true && getResult() === \"\"` → Field had separator but result was empty\n * - `hasResultSection() === false && getResult() === undefined` → Field never had a result section\n *\n * @returns True if the field has a result section (w:fldSep was present)\n *\n * @example\n * ```typescript\n * const field = paragraph.getFields()[0];\n * if (field instanceof ComplexField) {\n * if (field.hasResultSection()) {\n * console.log('Field result:', field.getResult());\n * } else {\n * console.log('Field has no result section (empty field)');\n * }\n * }\n * ```\n */\n hasResultSection(): boolean {\n return this._hasResultSection;\n }\n\n /**\n * Sets instruction formatting\n */\n setInstructionFormatting(formatting: RunFormatting): this {\n this.instructionFormatting = formatting;\n return this;\n }\n\n /**\n * Sets result formatting\n */\n setResultFormatting(formatting: RunFormatting): this {\n this.resultFormatting = formatting;\n return this;\n }\n\n /**\n * Gets the parsed HYPERLINK instruction components\n * Returns undefined if this is not a HYPERLINK field\n */\n getParsedHyperlink(): ParsedHyperlinkInstruction | undefined {\n return this.parsedHyperlink;\n }\n\n /**\n * Checks if this field is a HYPERLINK field\n */\n isHyperlinkField(): boolean {\n return this.parsedHyperlink !== undefined;\n }\n\n /**\n * Gets the full URL for HYPERLINK fields (combining base URL and anchor)\n * Returns undefined if not a HYPERLINK field\n */\n getHyperlinkUrl(): string | undefined {\n return this.parsedHyperlink?.fullUrl;\n }\n\n /**\n * Adds a nested field within this field\n * Nested fields appear between instruction and separator\n */\n addNestedField(field: ComplexField): this {\n this.nestedFields.push(field);\n return this;\n }\n\n /**\n * Gets all nested fields\n */\n getNestedFields(): ComplexField[] {\n return [...this.nestedFields];\n }\n\n /**\n * Removes a nested field at the specified index\n * @param index - Index of the nested field to remove (0-based)\n * @returns True if removed, false if index out of bounds\n *\n * @example\n * ```typescript\n * const field = new ComplexField({ instruction: 'TOC' });\n * field.addNestedField(nested1);\n * field.addNestedField(nested2);\n * field.removeNestedField(0); // Removes nested1\n * ```\n */\n removeNestedField(index: number): boolean {\n if (index < 0 || index >= this.nestedFields.length) {\n return false;\n }\n this.nestedFields.splice(index, 1);\n return true;\n }\n\n /**\n * Gets the count of nested fields\n * @returns Number of nested fields\n */\n getNestedFieldCount(): number {\n return this.nestedFields.length;\n }\n\n /**\n * Clears all nested fields\n * @returns This field for chaining\n */\n clearNestedFields(): this {\n this.nestedFields = [];\n return this;\n }\n\n /**\n * Updates the field instruction\n * @param instruction - New field instruction (e.g., 'TOC \\\\o \"1-3\"')\n * @returns This field for chaining\n *\n * @example\n * ```typescript\n * const field = new ComplexField({ instruction: 'DATE' });\n * field.updateInstruction('DATE \\\\@ \"yyyy-MM-dd\"');\n * ```\n */\n updateInstruction(instruction: string): this {\n this.instruction = instruction;\n return this;\n }\n\n /**\n * Adds custom XML content to the result section\n */\n addResultContent(content: XMLElement): this {\n this.resultContent.push(content);\n return this;\n }\n\n /**\n * Gets result content XML elements\n */\n getResultContent(): XMLElement[] {\n return [...this.resultContent];\n }\n\n /**\n * Sets whether this field spans multiple paragraphs\n */\n setMultiParagraph(multiParagraph: boolean): this {\n this.multiParagraph = multiParagraph;\n return this;\n }\n\n /**\n * Gets whether this field spans multiple paragraphs\n */\n isMultiParagraph(): boolean {\n return this.multiParagraph;\n }\n\n /**\n * Sets revisions that wrap the result section\n * These are tracked changes (w:ins, w:del) that need to wrap the result AND end marker\n * @param revisions Array of Revision objects\n */\n setResultRevisions(revisions: Revision[]): this {\n this.resultRevisions = revisions;\n return this;\n }\n\n /**\n * Adds a revision to the result section\n * @param revision Revision to add\n */\n addResultRevision(revision: Revision): this {\n this.resultRevisions.push(revision);\n return this;\n }\n\n /**\n * Gets revisions that wrap the result section\n */\n getResultRevisions(): Revision[] {\n return [...this.resultRevisions];\n }\n\n /**\n * Checks if this field has revisions in the result section\n */\n hasResultRevisions(): boolean {\n return this.resultRevisions.length > 0;\n }\n\n /**\n * Generates XML for the complex field\n * Returns array of run elements (begin, instr, sep, result, end)\n */\n toXML(): XMLElement[] {\n const runs: XMLElement[] = [];\n\n // 1. Begin marker run\n const beginFldChar: XMLElement = this._formFieldData\n ? this.buildFldCharWithFfData()\n : {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'begin' },\n selfClosing: true,\n };\n runs.push({\n name: 'w:r',\n children: [beginFldChar],\n });\n\n // 2. Instruction run\n const instrChildren: XMLElement[] = [];\n if (this.instructionFormatting) {\n instrChildren.push(this.createRunProperties(this.instructionFormatting));\n }\n instrChildren.push({\n name: 'w:instrText',\n attributes: { 'xml:space': 'preserve' },\n children: [this.instruction],\n });\n runs.push({\n name: 'w:r',\n children: instrChildren,\n });\n\n // 2a. Nested fields (if any)\n for (const nestedField of this.nestedFields) {\n runs.push(...nestedField.toXML());\n }\n\n // 3. Separator run\n runs.push({\n name: 'w:r',\n children: [\n {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'separate' },\n selfClosing: true,\n },\n ],\n });\n\n // 4. Result content (prioritize custom XML content, then simple text)\n // Design note: For INCLUDEPICTURE fields, the parser stores the w:drawing\n // content in resultContent so it survives the parser→generator round-trip.\n // When flattenFieldCodes() is active, the full field structure is emitted\n // here, then _postProcessDocumentXml() strips the INCLUDEPICTURE scaffolding\n // (fldChar/instrText runs) from the final XML while preserving the drawing.\n // Non-INCLUDEPICTURE fields emit their complete structure unchanged.\n if (this.resultContent.length > 0) {\n // Use custom XML content\n runs.push(...this.resultContent);\n } else if (this.result) {\n // Use simple text result\n const resultChildren: XMLElement[] = [];\n if (this.resultFormatting) {\n resultChildren.push(this.createRunProperties(this.resultFormatting));\n }\n resultChildren.push({\n name: 'w:t',\n attributes: { 'xml:space': 'preserve' },\n children: [this.result],\n });\n runs.push({\n name: 'w:r',\n children: resultChildren,\n });\n }\n\n // 4a. Result revisions (tracked changes within the result section)\n // These MUST appear between the separator and end marker per ECMA-376\n // The revisions contain the actual field result content wrapped in w:ins or w:del\n for (const revision of this.resultRevisions) {\n const revisionXml = revision.toXML();\n if (revisionXml) {\n runs.push(revisionXml);\n }\n }\n\n // 5. End marker run\n runs.push({\n name: 'w:r',\n children: [\n {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'end' },\n selfClosing: true,\n },\n ],\n });\n\n return runs;\n }\n\n /**\n * Creates run properties XML from formatting\n */\n private createRunProperties(formatting: RunFormatting): XMLElement {\n const children: XMLElement[] = [];\n\n if (formatting.bold) {\n children.push({ name: 'w:b', selfClosing: true });\n }\n\n if (formatting.italic) {\n children.push({ name: 'w:i', selfClosing: true });\n }\n\n if (formatting.underline) {\n const val = typeof formatting.underline === 'string' ? formatting.underline : 'single';\n children.push({\n name: 'w:u',\n attributes: { 'w:val': val },\n selfClosing: true,\n });\n }\n\n if (formatting.strike) {\n children.push({ name: 'w:strike', selfClosing: true });\n }\n\n if (formatting.font) {\n children.push({\n name: 'w:rFonts',\n attributes: {\n 'w:ascii': formatting.font,\n 'w:hAnsi': formatting.font,\n 'w:cs': formatting.font,\n },\n selfClosing: true,\n });\n }\n\n if (formatting.size) {\n const sizeValue = pointsToHalfPoints(formatting.size).toString();\n children.push({\n name: 'w:sz',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n children.push({\n name: 'w:szCs',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n }\n\n if (formatting.color) {\n const color = formatting.color.replace('#', '');\n children.push({\n name: 'w:color',\n attributes: { 'w:val': color },\n selfClosing: true,\n });\n }\n\n if (formatting.highlight) {\n children.push({\n name: 'w:highlight',\n attributes: { 'w:val': formatting.highlight },\n selfClosing: true,\n });\n }\n\n return { name: 'w:rPr', children };\n }\n\n /**\n * Builds a w:fldChar begin element with w:ffData child\n */\n private buildFldCharWithFfData(): XMLElement {\n const ffd = this._formFieldData!;\n const ffDataChildren: (string | XMLElement)[] = [];\n\n if (ffd.name) {\n ffDataChildren.push({ name: 'w:name', attributes: { 'w:val': ffd.name }, selfClosing: true });\n }\n if (ffd.enabled !== undefined) {\n if (ffd.enabled) {\n ffDataChildren.push({ name: 'w:enabled', selfClosing: true });\n } else {\n ffDataChildren.push({ name: 'w:enabled', attributes: { 'w:val': '0' }, selfClosing: true });\n }\n }\n if (ffd.calcOnExit !== undefined) {\n ffDataChildren.push({\n name: 'w:calcOnExit',\n attributes: { 'w:val': ffd.calcOnExit ? '1' : '0' },\n selfClosing: true,\n });\n }\n if (ffd.helpText) {\n ffDataChildren.push({\n name: 'w:helpText',\n attributes: { 'w:type': 'text', 'w:val': ffd.helpText },\n selfClosing: true,\n });\n }\n if (ffd.statusText) {\n ffDataChildren.push({\n name: 'w:statusText',\n attributes: { 'w:type': 'text', 'w:val': ffd.statusText },\n selfClosing: true,\n });\n }\n if (ffd.entryMacro) {\n ffDataChildren.push({\n name: 'w:entryMacro',\n attributes: { 'w:val': ffd.entryMacro },\n selfClosing: true,\n });\n }\n if (ffd.exitMacro) {\n ffDataChildren.push({\n name: 'w:exitMacro',\n attributes: { 'w:val': ffd.exitMacro },\n selfClosing: true,\n });\n }\n\n if (ffd.fieldType) {\n switch (ffd.fieldType.type) {\n case 'textInput': {\n const tiChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.inputType)\n tiChildren.push({\n name: 'w:type',\n attributes: { 'w:val': ffd.fieldType.inputType },\n selfClosing: true,\n });\n if (ffd.fieldType.defaultValue)\n tiChildren.push({\n name: 'w:default',\n attributes: { 'w:val': ffd.fieldType.defaultValue },\n selfClosing: true,\n });\n if (ffd.fieldType.maxLength !== undefined)\n tiChildren.push({\n name: 'w:maxLength',\n attributes: { 'w:val': String(ffd.fieldType.maxLength) },\n selfClosing: true,\n });\n if (ffd.fieldType.format)\n tiChildren.push({\n name: 'w:format',\n attributes: { 'w:val': ffd.fieldType.format },\n selfClosing: true,\n });\n ffDataChildren.push({ name: 'w:textInput', children: tiChildren });\n break;\n }\n case 'checkBox': {\n const cbChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.size === 'auto') {\n cbChildren.push({ name: 'w:sizeAuto', selfClosing: true });\n } else if (ffd.fieldType.size !== undefined) {\n cbChildren.push({\n name: 'w:size',\n attributes: { 'w:val': String(ffd.fieldType.size) },\n selfClosing: true,\n });\n }\n if (ffd.fieldType.defaultChecked !== undefined)\n cbChildren.push({\n name: 'w:default',\n attributes: { 'w:val': ffd.fieldType.defaultChecked ? '1' : '0' },\n selfClosing: true,\n });\n if (ffd.fieldType.checked !== undefined)\n cbChildren.push({\n name: 'w:checked',\n attributes: { 'w:val': ffd.fieldType.checked ? '1' : '0' },\n selfClosing: true,\n });\n ffDataChildren.push({ name: 'w:checkBox', children: cbChildren });\n break;\n }\n case 'dropDownList': {\n const ddChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.result !== undefined)\n ddChildren.push({\n name: 'w:result',\n attributes: { 'w:val': String(ffd.fieldType.result) },\n selfClosing: true,\n });\n if (ffd.fieldType.defaultResult !== undefined)\n ddChildren.push({\n name: 'w:default',\n attributes: { 'w:val': String(ffd.fieldType.defaultResult) },\n selfClosing: true,\n });\n if (ffd.fieldType.listEntries) {\n for (const entry of ffd.fieldType.listEntries) {\n ddChildren.push({\n name: 'w:listEntry',\n attributes: { 'w:val': entry },\n selfClosing: true,\n });\n }\n }\n ffDataChildren.push({ name: 'w:ddList', children: ddChildren });\n break;\n }\n }\n }\n\n return {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'begin' },\n children: [{ name: 'w:ffData', children: ffDataChildren }],\n };\n }\n}\n\n/**\n * TOC field options\n */\nexport interface TOCFieldOptions {\n /** Heading levels to include (e.g., \"1-3\" for levels 1-3) */\n levels?: string;\n\n /** Make entries hyperlinks (\\h switch) */\n hyperlinks?: boolean;\n\n /** Hide tab leaders and page numbers in Web Layout (\\z switch) */\n hideInWebLayout?: boolean;\n\n /** Use outline levels (\\u switch) */\n useOutlineLevels?: boolean;\n\n /** Omit page numbers (\\n switch) */\n omitPageNumbers?: boolean;\n\n /** Custom styles to use (\\t switch) */\n customStyles?: string;\n}\n\n/**\n * Creates a TOC (Table of Contents) complex field\n * Generates proper field instruction with switches\n *\n * @param options TOC field options\n * @returns ComplexField configured for TOC\n *\n * @example\n * const toc = createTOCField({ levels: '1-3', hyperlinks: true });\n * // Generates: TOC \\o \"1-3\" \\h \\z \\u\n */\nexport function createTOCField(options: TOCFieldOptions = {}): ComplexField {\n // Build instruction string\n let instruction = ' TOC';\n\n // Add outline levels switch\n if (options.levels !== undefined) {\n instruction += ` \\\\o \"${options.levels}\"`;\n } else {\n instruction += ' \\\\o \"1-3\"'; // Default: levels 1-3\n }\n\n // Add hyperlinks switch\n if (options.hyperlinks !== false) {\n instruction += ' \\\\h';\n }\n\n // Add hide in web layout switch\n if (options.hideInWebLayout !== false) {\n instruction += ' \\\\z';\n }\n\n // Add use outline levels switch\n if (options.useOutlineLevels !== false) {\n instruction += ' \\\\u';\n }\n\n // Add omit page numbers switch\n if (options.omitPageNumbers) {\n instruction += ' \\\\n';\n }\n\n // Add custom styles switch\n if (options.customStyles) {\n instruction += ` \\\\t \"${options.customStyles}\"`;\n }\n\n instruction += ' '; // Trailing space per Microsoft convention\n\n return new ComplexField({\n instruction,\n result: 'Table of Contents', // Placeholder result\n });\n}\n"]}
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/elements/Field.ts"],"names":[],"mappings":";;;AAi4CA,wCA0CC;AAl6CD,iDAIwB;AAExB,0CAAoD;AAqDpD,MAAa,KAAK;IACR,IAAI,CAAY;IAChB,WAAW,CAAS;IACpB,UAAU,CAAiB;IAMnC,YAAY,UAA2B;QACrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QAGxC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAKO,gBAAgB,CAAC,UAA2B;QAClD,IAAI,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;QAGlC,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,WAAW,IAAI,SAAS,UAAU,CAAC,UAAU,GAAG,CAAC;QACnD,CAAC;QAGD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,WAAW,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACzC,CAAC;aAAM,IAAI,UAAU,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;YAEnD,WAAW,IAAI,kBAAkB,CAAC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAKO,WAAW,CAAC,IAAe;QACjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,aAAa,CAAC,UAAyB;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAMD,gBAAgB;QACd,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAC3F,CAAC;IACJ,CAAC;IAOD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,KAAK;QAEH,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SACtC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE;gBACV,SAAS,EAAE,IAAI,CAAC,WAAW;aAC5B;YACD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,WAAW;iBACtB;aACF;SACF,CAAC;IACJ,CAAC;IAKO,kBAAkB;QACxB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO,GAAG,CAAC;YACb,KAAK,UAAU;gBACb,OAAO,GAAG,CAAC;YACb,KAAK,cAAc;gBACjB,OAAO,GAAG,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,GAAG,CAAC;YACb,KAAK,MAAM;gBACT,OAAO,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACzC,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW;gBACd,OAAO,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACzC,KAAK,UAAU;gBACb,OAAO,UAAU,CAAC;YACpB,KAAK,kBAAkB;gBACrB,OAAO,mBAAmB,CAAC;YAC7B,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,UAAU;gBACb,OAAO,UAAU,CAAC;YACpB,KAAK,KAAK;gBACR,OAAO,GAAG,CAAC;YACb,KAAK,WAAW;gBACd,OAAO,MAAM,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,GAAG,CAAC;YACb,KAAK,IAAI;gBACP,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI;gBACP,OAAO,EAAE,CAAC;YACZ;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAKO,mBAAmB;QACzB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACrC,CAAC;QAKD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE;oBACV,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;oBAC/B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;oBAC/B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;iBAC7B;gBACD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC9B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;gBAClC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;gBAClC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBAClD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,GACP,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACvF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC5B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IAMD,MAAM,CAAC,gBAAgB,CAAC,UAA0B;QAChD,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,MAAM;YACZ,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,gBAAgB,CAAC,UAA0B;QAChD,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,UAAU;YAChB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,MAAe,EAAE,UAA0B;QAC3D,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM;YAClB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,MAAe,EAAE,UAA0B;QAC3D,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM;YAClB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,cAAc,CAAC,WAAW,GAAG,KAAK,EAAE,UAA0B;QACnE,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU;YACnD,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,YAAY,CAAC,UAA0B;QAC5C,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,WAAW,CAAC,UAA0B;QAC3C,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,OAAO;YACb,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,kBAAkB,CAAC,UAA0B;QAClD,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,cAAc;YACpB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAQD,MAAM,CAAC,SAAS,CAAC,QAAgB,EAAE,MAAe,EAAE,UAA0B;QAC5E,MAAM,YAAY,GAAG,MAAM,IAAI,KAAK,CAAC;QACrC,MAAM,WAAW,GAAG,OAAO,QAAQ,IAAI,YAAY,kBAAkB,CAAC;QAEtE,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,KAAK;YACX,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IASD,MAAM,CAAC,eAAe,CACpB,GAAW,EACX,cAAsB,GAAG,EACzB,OAAgB,EAChB,UAA0B;QAE1B,IAAI,WAAW,GAAG,cAAc,GAAG,GAAG,CAAC;QAEvC,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,IAAI,SAAS,OAAO,GAAG,CAAC;QACrC,CAAC;QAED,WAAW,IAAI,kBAAkB,CAAC;QAElC,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAQD,MAAM,CAAC,SAAS,CAAC,UAAkB,EAAE,MAAe,EAAE,UAA0B;QAC9E,IAAI,WAAW,GAAG,OAAO,UAAU,EAAE,CAAC;QAEtC,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,IAAI,IAAI,MAAM,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,WAAW,IAAI,aAAa,CAAC;QAC/B,CAAC;QAED,WAAW,IAAI,kBAAkB,CAAC;QAElC,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,KAAK;YACX,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAQD,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC,EAAE,UAA0B;QACtE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,IAAI,eAAe,KAAK,EAAE,CAAC;QAEtD,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,IAAI;YACV,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAQD,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,QAAiB,EAAE,UAA0B;QAC9E,IAAI,WAAW,GAAG,OAAO,IAAI,GAAG,CAAC;QAEjC,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,IAAI,IAAI,QAAQ,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,IAAI;YACV,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,YAAY,CAAC,WAAmB,EAAE,UAA0B;QACjE,OAAO,IAAI,KAAK,CAAC;YACf,IAAI,EAAE,MAAM;YACZ,WAAW;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,MAAM,CAAC,UAA2B;QACvC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;CACF;AApeD,sBAoeC;AA4DD,MAAa,YAAY;IACf,WAAW,CAAS;IACpB,MAAM,CAAU;IAChB,qBAAqB,CAAiB;IACtC,gBAAgB,CAAiB;IACjC,YAAY,CAAiB;IAC7B,aAAa,CAAe;IAC5B,cAAc,CAAU;IACxB,eAAe,CAA8B;IAE7C,eAAe,GAAe,EAAE,CAAC;IAKjC,iBAAiB,GAAG,KAAK,CAAC;IAC1B,cAAc,CAAiB;IAC/B,eAAe,CAAyD;IAMhF,YAAY,UAAkC;QAC5C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,KAAK,CAAC;QACzD,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC;QAG/C,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;QACpD,CAAC;aAAM,IAAI,IAAA,qCAAsB,EAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,eAAe,GAAG,IAAA,wCAAyB,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAClF,CAAC;IACH,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAKD,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IA2BD,gBAAgB;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAKD,wBAAwB,CAAC,UAAyB;QAChD,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,mBAAmB,CAAC,UAAyB;QAC3C,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IAC5C,CAAC;IAMD,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;IACvC,CAAC;IAMD,cAAc,CAAC,KAAmB;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAeD,iBAAiB,CAAC,KAAa;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,mBAAmB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAMD,iBAAiB;QACf,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAaD,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,gBAAgB,CAAC,OAAmB;QAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAMD,mBAAmB,CAAC,OAA8D;QAChF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAOD,qBAAqB;QACnB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACpC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACtD,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;QAEH,CAAC;QACD,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,CAAC;IAKO,qBAAqB,CAAC,GAAe;QAC3C,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;gBACtF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,IAAI,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAWD,gBAAgB,CACd,OAAe,EACf,MAAc,EACd,OAGC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjD,IAAI,WAAW,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAEzC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAGhE,IAAI,KAAa,EAAE,KAAa,CAAC;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACrD,KAAK,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;YAC3B,KAAK,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACpC,KAAK,GAAG,IAAI,CAAC;YACb,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;QACnB,CAAC;QAGD,IAAI,GAAG,GAAsB,IAAI,CAAC;QAClC,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;YACvC,GAAG,GAAG,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAChD,CAAC;QAGD,MAAM,cAAc,GAA4B,EAAE,CAAC;QACnD,IAAI,GAAG;YAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;YACvC,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SACtD,CAAC;QAGF,MAAM,cAAc,GAA4B,EAAE,CAAC;QACnD,IAAI,GAAG;YAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;YACvC,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CAAC,CAAC;QACH,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SACtD,CAAC;QAGF,IAAI,CAAC,aAAa,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,gCAAgC;QACtC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CACvC,CAAC,CAAC,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CACpE,CAAC;gBACF,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC;YACtB,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACpC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACtD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CACrC,CAAC,CAAC,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CACpE,CAAC;wBACF,IAAI,GAAG;4BAAE,OAAO,GAAG,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,iBAAiB,CAAC,cAAuB;QACvC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAOD,kBAAkB,CAAC,SAAqB;QACtC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,iBAAiB,CAAC,QAAkB;QAClC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,kBAAkB;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAKD,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAMD,KAAK;QACH,MAAM,IAAI,GAAiB,EAAE,CAAC;QAG9B,MAAM,YAAY,GAAe,IAAI,CAAC,cAAc;YAClD,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC/B,CAAC,CAAC;gBACE,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;gBACxC,WAAW,EAAE,IAAI;aAClB,CAAC;QACN,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB,CAAC,CAAC;QAGH,MAAM,aAAa,GAAiB,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;YACvC,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAGH,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;oBAC3C,WAAW,EAAE,IAAI;iBAClB;aACF;SACF,CAAC,CAAC;QASH,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAElC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAEvB,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;gBACvC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC;QACL,CAAC;QAMD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;oBACtC,WAAW,EAAE,IAAI;iBAClB;aACF;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,mBAAmB,CAAC,UAAyB;QACnD,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACvF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC5B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE;oBACV,SAAS,EAAE,UAAU,CAAC,IAAI;oBAC1B,SAAS,EAAE,UAAU,CAAC,IAAI;oBAC1B,MAAM,EAAE,UAAU,CAAC,IAAI;iBACxB;gBACD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;gBAClC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;gBAClC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC9B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE;gBAC7C,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IAKO,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAe,CAAC;QACjC,MAAM,cAAc,GAA4B,EAAE,CAAC;QAEnD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;gBACnD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE;gBACvD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE;gBACzD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE;gBACvC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE;gBACtC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,QAAQ,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC3B,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,UAAU,GAA4B,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS;wBACzB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE;4BAChD,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,YAAY;wBAC5B,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;4BACnD,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;wBACvC,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,aAAa;4BACnB,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;4BACxD,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM;wBACtB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,UAAU;4BAChB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;4BAC7C,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;oBACnE,MAAM;gBACR,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,UAAU,GAA4B,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAClC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7D,CAAC;yBAAM,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC5C,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;4BACnD,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc,KAAK,SAAS;wBAC5C,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;4BACjE,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS;wBACrC,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;4BAC1D,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;oBAClE,MAAM;gBACR,CAAC;gBACD,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,UAAU,GAA4B,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS;wBACpC,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,UAAU;4BAChB,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;4BACrD,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,aAAa,KAAK,SAAS;wBAC3C,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;4BAC5D,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;wBAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;4BAC9C,UAAU,CAAC,IAAI,CAAC;gCACd,IAAI,EAAE,aAAa;gCACnB,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gCAC9B,WAAW,EAAE,IAAI;6BAClB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBACD,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;YACxC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC;CACF;AAzvBD,oCAyvBC;AAoCD,SAAgB,cAAc,CAAC,UAA2B,EAAE;IAE1D,IAAI,WAAW,GAAG,MAAM,CAAC;IAGzB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,WAAW,IAAI,SAAS,OAAO,CAAC,MAAM,GAAG,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,WAAW,IAAI,YAAY,CAAC;IAC9B,CAAC;IAGD,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACjC,WAAW,IAAI,MAAM,CAAC;IACxB,CAAC;IAGD,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;QACtC,WAAW,IAAI,MAAM,CAAC;IACxB,CAAC;IAGD,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvC,WAAW,IAAI,MAAM,CAAC;IACxB,CAAC;IAGD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,WAAW,IAAI,MAAM,CAAC;IACxB,CAAC;IAGD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,WAAW,IAAI,SAAS,OAAO,CAAC,YAAY,GAAG,CAAC;IAClD,CAAC;IAED,WAAW,IAAI,GAAG,CAAC;IAEnB,OAAO,IAAI,YAAY,CAAC;QACtB,WAAW;QACX,MAAM,EAAE,mBAAmB;KAC5B,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Field - Represents a dynamic field in a Word document\n *\n * Fields are used for dynamic content like page numbers, dates, document properties, etc.\n * They are represented using the <w:fldSimple> element with field codes.\n */\n\nimport { XMLElement } from '../xml/XMLBuilder';\nimport { RunFormatting, FormFieldData } from './Run';\nimport {\n ParsedHyperlinkInstruction,\n parseHyperlinkInstruction,\n isHyperlinkInstruction,\n} from './FieldHelpers';\nimport type { Revision } from './Revision';\nimport { pointsToHalfPoints } from '../utils/units';\n\n/**\n * Common field types\n */\nexport type FieldType =\n | 'PAGE' // Current page number\n | 'NUMPAGES' // Total number of pages\n | 'DATE' // Current date\n | 'TIME' // Current time\n | 'AUTHOR' // Document author\n | 'TITLE' // Document title\n | 'FILENAME' // Document filename\n | 'FILENAMEWITHPATH' // Document filename with path\n | 'SUBJECT' // Document subject\n | 'KEYWORDS' // Document keywords\n | 'CREATEDATE' // Document creation date\n | 'SAVEDATE' // Last save date\n | 'PRINTDATE' // Last print date\n | 'SECTIONPAGES' // Pages in current section\n | 'SECTION' // Current section number\n | 'REF' // Cross-reference to bookmark\n | 'HYPERLINK' // Hyperlink field\n | 'SEQ' // Sequence numbering\n | 'TC' // Table of contents entry\n | 'XE' // Index entry\n | 'IF' // Conditional field\n | 'MERGEFIELD' // Mail merge field\n | 'INCLUDE' // Include text from external file\n | 'INCLUDETEXT' // Include text from external file (alias)\n | 'CUSTOM'; // Custom field type for unknown/specialized fields\n\n/**\n * Field properties\n */\nexport interface FieldProperties {\n /** Field type */\n type: FieldType;\n /** Field instruction (e.g., 'PAGE \\* MERGEFORMAT') */\n instruction?: string;\n /** Format switches (e.g., '\\\\* MERGEFORMAT') */\n format?: string;\n /** Date/time format (e.g., 'MMMM d, yyyy') */\n dateFormat?: string;\n /** Preserve formatting during updates */\n preserveFormatting?: boolean;\n /** Run formatting for field result */\n formatting?: RunFormatting;\n}\n\n/**\n * Represents a dynamic field\n */\nexport class Field {\n private type: FieldType;\n private instruction: string;\n private formatting?: RunFormatting;\n\n /**\n * Creates a new field\n * @param properties Field properties\n */\n constructor(properties: FieldProperties) {\n this.type = properties.type;\n this.formatting = properties.formatting;\n\n // Build field instruction\n if (properties.instruction) {\n this.instruction = properties.instruction;\n } else {\n this.instruction = this.buildInstruction(properties);\n }\n }\n\n /**\n * Builds field instruction from properties\n */\n private buildInstruction(properties: FieldProperties): string {\n let instruction = properties.type;\n\n // Add date format for date/time fields\n if (properties.dateFormat && this.isDateField(properties.type)) {\n instruction += ` \\\\@ \"${properties.dateFormat}\"`;\n }\n\n // Add format switch\n if (properties.format) {\n instruction += ` ${properties.format}`;\n } else if (properties.preserveFormatting !== false) {\n // Add MERGEFORMAT by default to preserve formatting\n instruction += ' \\\\* MERGEFORMAT';\n }\n\n return instruction;\n }\n\n /**\n * Checks if field type is a date field\n */\n private isDateField(type: FieldType): boolean {\n return ['DATE', 'TIME', 'CREATEDATE', 'SAVEDATE', 'PRINTDATE'].includes(type);\n }\n\n /**\n * Gets the field type\n */\n getType(): FieldType {\n return this.type;\n }\n\n /**\n * Gets the field instruction\n */\n getInstruction(): string {\n return this.instruction;\n }\n\n /**\n * Sets run formatting for the field\n */\n setFormatting(formatting: RunFormatting): this {\n this.formatting = formatting;\n return this;\n }\n\n /**\n * Gets run formatting\n */\n getFormatting(): RunFormatting | undefined {\n return this.formatting;\n }\n\n /**\n * Checks if this field is a HYPERLINK field\n * @returns True if the field type is HYPERLINK or instruction starts with HYPERLINK\n */\n isHyperlinkField(): boolean {\n return (\n this.type === 'HYPERLINK' || this.instruction.trim().toUpperCase().startsWith('HYPERLINK')\n );\n }\n\n /**\n * Sets text color for the field\n * @param color Color in hex format (e.g., '0000FF')\n * @returns This field for chaining\n */\n setColor(color: string): this {\n if (!this.formatting) {\n this.formatting = {};\n }\n this.formatting.color = color.replace('#', '');\n return this;\n }\n\n /**\n * Generates XML for the field.\n * Per ECMA-376, w:fldSimple is a paragraph-level element that CONTAINS w:r children.\n * Structure: <w:fldSimple w:instr=\"...\"><w:r><w:rPr/><w:t>...</w:t></w:r></w:fldSimple>\n * The fldSimple element should be added directly to paragraph children (not wrapped in w:r).\n */\n toXML(): XMLElement {\n // Build the inner run with optional formatting\n const runChildren: XMLElement[] = [];\n if (this.formatting) {\n runChildren.push(this.createRunProperties());\n }\n runChildren.push({\n name: 'w:t',\n children: [this.getPlaceholderText()],\n });\n\n return {\n name: 'w:fldSimple',\n attributes: {\n 'w:instr': this.instruction,\n },\n children: [\n {\n name: 'w:r',\n children: runChildren,\n },\n ],\n };\n }\n\n /**\n * Gets placeholder text for the field\n */\n private getPlaceholderText(): string {\n switch (this.type) {\n case 'PAGE':\n return '1';\n case 'NUMPAGES':\n return '1';\n case 'SECTIONPAGES':\n return '1';\n case 'SECTION':\n return '1';\n case 'DATE':\n return new Date().toLocaleDateString();\n case 'TIME':\n return new Date().toLocaleTimeString();\n case 'CREATEDATE':\n case 'SAVEDATE':\n case 'PRINTDATE':\n return new Date().toLocaleDateString();\n case 'FILENAME':\n return 'Document';\n case 'FILENAMEWITHPATH':\n return 'C:\\\\Document.docx';\n case 'AUTHOR':\n return 'Author';\n case 'TITLE':\n return 'Title';\n case 'SUBJECT':\n return 'Subject';\n case 'KEYWORDS':\n return 'Keywords';\n case 'REF':\n return '1'; // Reference typically shows page number or heading text\n case 'HYPERLINK':\n return 'Link'; // Hyperlink displays the link text\n case 'SEQ':\n return '1'; // Sequence shows the current number\n case 'TC':\n return ''; // TC fields are hidden\n case 'XE':\n return ''; // XE fields are hidden\n default:\n return '';\n }\n }\n\n /**\n * Creates run properties XML\n */\n private createRunProperties(): XMLElement {\n const children: XMLElement[] = [];\n\n if (!this.formatting) {\n return { name: 'w:rPr', children };\n }\n\n // Per ECMA-376 CT_RPr ordering:\n // rFonts → b → i → strike → color → sz/szCs → highlight → u\n\n if (this.formatting.font) {\n children.push({\n name: 'w:rFonts',\n attributes: {\n 'w:ascii': this.formatting.font,\n 'w:hAnsi': this.formatting.font,\n 'w:cs': this.formatting.font,\n },\n selfClosing: true,\n });\n }\n\n if (this.formatting.bold) {\n children.push({ name: 'w:b', selfClosing: true });\n }\n\n if (this.formatting.italic) {\n children.push({ name: 'w:i', selfClosing: true });\n }\n\n if (this.formatting.strike) {\n children.push({ name: 'w:strike', selfClosing: true });\n }\n\n if (this.formatting.color) {\n const color = this.formatting.color.replace('#', '');\n children.push({\n name: 'w:color',\n attributes: { 'w:val': color },\n selfClosing: true,\n });\n }\n\n if (this.formatting.size) {\n const sizeValue = pointsToHalfPoints(this.formatting.size).toString();\n children.push({\n name: 'w:sz',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n children.push({\n name: 'w:szCs',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n }\n\n if (this.formatting.highlight) {\n children.push({\n name: 'w:highlight',\n attributes: { 'w:val': this.formatting.highlight },\n selfClosing: true,\n });\n }\n\n if (this.formatting.underline) {\n const val =\n typeof this.formatting.underline === 'string' ? this.formatting.underline : 'single';\n children.push({\n name: 'w:u',\n attributes: { 'w:val': val },\n selfClosing: true,\n });\n }\n\n return { name: 'w:rPr', children };\n }\n\n /**\n * Creates a page number field\n * @param formatting Optional run formatting\n */\n static createPageNumber(formatting?: RunFormatting): Field {\n return new Field({\n type: 'PAGE',\n formatting,\n });\n }\n\n /**\n * Creates a total pages field\n * @param formatting Optional run formatting\n */\n static createTotalPages(formatting?: RunFormatting): Field {\n return new Field({\n type: 'NUMPAGES',\n formatting,\n });\n }\n\n /**\n * Creates a date field\n * @param format Date format (e.g., 'MMMM d, yyyy')\n * @param formatting Optional run formatting\n */\n static createDate(format?: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'DATE',\n dateFormat: format,\n formatting,\n });\n }\n\n /**\n * Creates a time field\n * @param format Time format\n * @param formatting Optional run formatting\n */\n static createTime(format?: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'TIME',\n dateFormat: format,\n formatting,\n });\n }\n\n /**\n * Creates a filename field\n * @param includePath Whether to include full path\n * @param formatting Optional run formatting\n */\n static createFilename(includePath = false, formatting?: RunFormatting): Field {\n return new Field({\n type: includePath ? 'FILENAMEWITHPATH' : 'FILENAME',\n formatting,\n });\n }\n\n /**\n * Creates an author field\n * @param formatting Optional run formatting\n */\n static createAuthor(formatting?: RunFormatting): Field {\n return new Field({\n type: 'AUTHOR',\n formatting,\n });\n }\n\n /**\n * Creates a title field\n * @param formatting Optional run formatting\n */\n static createTitle(formatting?: RunFormatting): Field {\n return new Field({\n type: 'TITLE',\n formatting,\n });\n }\n\n /**\n * Creates a section pages field (pages in current section)\n * @param formatting Optional run formatting\n */\n static createSectionPages(formatting?: RunFormatting): Field {\n return new Field({\n type: 'SECTIONPAGES',\n formatting,\n });\n }\n\n /**\n * Creates a cross-reference field\n * @param bookmark Bookmark name to reference\n * @param format Reference format (\\h for hyperlink, \\p for page number, etc.)\n * @param formatting Optional run formatting\n */\n static createRef(bookmark: string, format?: string, formatting?: RunFormatting): Field {\n const formatSwitch = format || '\\\\h'; // Default to hyperlink format\n const instruction = `REF ${bookmark} ${formatSwitch} \\\\* MERGEFORMAT`;\n\n return new Field({\n type: 'REF',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a hyperlink field\n * @param url The URL to link to\n * @param displayText The text to display\n * @param tooltip Optional tooltip text\n * @param formatting Optional run formatting\n */\n static createHyperlink(\n url: string,\n displayText: string = url,\n tooltip?: string,\n formatting?: RunFormatting\n ): Field {\n let instruction = `HYPERLINK \"${url}\"`;\n\n if (tooltip) {\n instruction += ` \\\\o \"${tooltip}\"`;\n }\n\n instruction += ' \\\\* MERGEFORMAT';\n\n return new Field({\n type: 'HYPERLINK',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a sequence numbering field\n * @param identifier Sequence identifier (e.g., 'Figure', 'Table')\n * @param format Number format (\\* ARABIC, \\* ROMAN, etc.)\n * @param formatting Optional run formatting\n */\n static createSeq(identifier: string, format?: string, formatting?: RunFormatting): Field {\n let instruction = `SEQ ${identifier}`;\n\n if (format) {\n instruction += ` ${format}`;\n } else {\n instruction += ' \\\\* ARABIC'; // Default to Arabic numerals\n }\n\n instruction += ' \\\\* MERGEFORMAT';\n\n return new Field({\n type: 'SEQ',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a table of contents entry field (TC)\n * @param text Entry text\n * @param level TOC level (1-9)\n * @param formatting Optional run formatting\n */\n static createTCEntry(text: string, level = 1, formatting?: RunFormatting): Field {\n if (level < 1 || level > 9) {\n throw new Error('TC level must be between 1 and 9');\n }\n\n const instruction = `TC \"${text}\" \\\\f C \\\\l ${level}`;\n\n return new Field({\n type: 'TC',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates an index entry field (XE)\n * @param text Entry text\n * @param subEntry Optional sub-entry text\n * @param formatting Optional run formatting\n */\n static createXEEntry(text: string, subEntry?: string, formatting?: RunFormatting): Field {\n let instruction = `XE \"${text}\"`;\n\n if (subEntry) {\n instruction += `:${subEntry}`;\n }\n\n return new Field({\n type: 'XE',\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a custom field with instruction\n * @param instruction Field instruction code\n * @param formatting Optional run formatting\n */\n static createCustom(instruction: string, formatting?: RunFormatting): Field {\n return new Field({\n type: 'PAGE', // Placeholder type\n instruction,\n formatting,\n });\n }\n\n /**\n * Creates a field from properties\n * @param properties Field properties\n */\n static create(properties: FieldProperties): Field {\n return new Field(properties);\n }\n}\n\n/**\n * Field character type for complex fields\n */\nexport type FieldCharType = 'begin' | 'separate' | 'end';\n\n/**\n * Complex field properties\n * Complex fields use begin/separate/end structure instead of fldSimple\n */\nexport interface ComplexFieldProperties {\n /** Field instruction (e.g., \" TOC \\\\o \\\"1-3\\\" \\\\h \\\\z \\\\u \") */\n instruction: string;\n\n /** Current field result text (optional) */\n result?: string;\n\n /** Run formatting for instruction */\n instructionFormatting?: RunFormatting;\n\n /** Run formatting for result */\n resultFormatting?: RunFormatting;\n\n /** Nested fields to include within this field */\n nestedFields?: ComplexField[];\n\n /** Custom XML content for result section */\n resultContent?: XMLElement[];\n\n /** Whether field spans multiple paragraphs */\n multiParagraph?: boolean;\n\n /** Parsed HYPERLINK instruction components (auto-populated if instruction is HYPERLINK) */\n parsedHyperlink?: ParsedHyperlinkInstruction;\n\n /**\n * Whether the field has a result section (w:fldSep was present during parsing)\n * Per ECMA-376, fields without results skip the separator element.\n * This flag distinguishes between:\n * - hasResult=true, result=\"\" → Field had separator but result was empty\n * - hasResult=false, result=\"\" → Field never had a result section (empty field)\n */\n hasResult?: boolean;\n\n /** Form field data (w:ffData) from begin field char per ECMA-376 §17.16.17 */\n formFieldData?: FormFieldData;\n}\n\n/**\n * Represents a complex field (begin/separate/end structure)\n * Used for TOC, cross-references, and other advanced fields\n *\n * Structure:\n * <w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>\n * <w:r><w:instrText>INSTRUCTION</w:instrText></w:r>\n * <w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>\n * <w:r><w:t>RESULT</w:t></w:r>\n * <w:r><w:fldChar w:fldCharType=\"end\"/></w:r>\n */\nexport class ComplexField {\n private instruction: string;\n private result?: string;\n private instructionFormatting?: RunFormatting;\n private resultFormatting?: RunFormatting;\n private nestedFields: ComplexField[];\n private resultContent: XMLElement[];\n private multiParagraph: boolean;\n private parsedHyperlink?: ParsedHyperlinkInstruction;\n /** Revisions that wrap the result section (for tracked changes in field content) */\n private resultRevisions: Revision[] = [];\n /**\n * Whether the field has a result section (w:fldSep was present during parsing)\n * Per ECMA-376, fields without results skip the separator element.\n */\n private _hasResultSection = false;\n private _formFieldData?: FormFieldData;\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n\n /**\n * Creates a new complex field\n * @param properties Complex field properties\n */\n constructor(properties: ComplexFieldProperties) {\n this.instruction = properties.instruction;\n this.result = properties.result;\n this.instructionFormatting = properties.instructionFormatting;\n this.resultFormatting = properties.resultFormatting;\n this.nestedFields = properties.nestedFields || [];\n this.resultContent = properties.resultContent || [];\n this.multiParagraph = properties.multiParagraph || false;\n this._hasResultSection = properties.hasResult ?? false;\n this._formFieldData = properties.formFieldData;\n\n // Auto-parse HYPERLINK instruction if provided or detected\n if (properties.parsedHyperlink) {\n this.parsedHyperlink = properties.parsedHyperlink;\n } else if (isHyperlinkInstruction(this.instruction)) {\n this.parsedHyperlink = parseHyperlinkInstruction(this.instruction) || undefined;\n }\n }\n\n /**\n * Gets the field instruction\n */\n getInstruction(): string {\n return this.instruction;\n }\n\n /**\n * Sets the field instruction\n */\n setInstruction(instruction: string): this {\n this.instruction = instruction;\n return this;\n }\n\n /**\n * Gets form field data (w:ffData) if present\n */\n getFormFieldData(): FormFieldData | undefined {\n return this._formFieldData;\n }\n\n /**\n * Gets the field result text\n */\n getResult(): string | undefined {\n return this.result;\n }\n\n /**\n * Sets the field result text\n */\n setResult(result: string): this {\n this.result = result;\n this.resultRevisions = []; // Clear orphaned revisions from old text\n this.resultContent = []; // Clear raw XML content since we have new text\n return this;\n }\n\n /**\n * Checks if the field has a result section\n *\n * Per ECMA-376, complex fields may or may not have a result section.\n * Fields without results (like TOC markers or empty PAGE fields) skip\n * the w:fldSep (separator) element entirely.\n *\n * This method distinguishes between:\n * - `hasResultSection() === true && getResult() === \"\"` → Field had separator but result was empty\n * - `hasResultSection() === false && getResult() === undefined` → Field never had a result section\n *\n * @returns True if the field has a result section (w:fldSep was present)\n *\n * @example\n * ```typescript\n * const field = paragraph.getFields()[0];\n * if (field instanceof ComplexField) {\n * if (field.hasResultSection()) {\n * console.log('Field result:', field.getResult());\n * } else {\n * console.log('Field has no result section (empty field)');\n * }\n * }\n * ```\n */\n hasResultSection(): boolean {\n return this._hasResultSection;\n }\n\n /**\n * Sets instruction formatting\n */\n setInstructionFormatting(formatting: RunFormatting): this {\n this.instructionFormatting = formatting;\n return this;\n }\n\n /**\n * Sets result formatting\n */\n setResultFormatting(formatting: RunFormatting): this {\n this.resultFormatting = formatting;\n return this;\n }\n\n /**\n * Gets the parsed HYPERLINK instruction components\n * Returns undefined if this is not a HYPERLINK field\n */\n getParsedHyperlink(): ParsedHyperlinkInstruction | undefined {\n return this.parsedHyperlink;\n }\n\n /**\n * Checks if this field is a HYPERLINK field\n */\n isHyperlinkField(): boolean {\n return this.parsedHyperlink !== undefined;\n }\n\n /**\n * Gets the full URL for HYPERLINK fields (combining base URL and anchor)\n * Returns undefined if not a HYPERLINK field\n */\n getHyperlinkUrl(): string | undefined {\n return this.parsedHyperlink?.fullUrl;\n }\n\n /**\n * Adds a nested field within this field\n * Nested fields appear between instruction and separator\n */\n addNestedField(field: ComplexField): this {\n this.nestedFields.push(field);\n return this;\n }\n\n /**\n * Gets all nested fields\n */\n getNestedFields(): ComplexField[] {\n return [...this.nestedFields];\n }\n\n /**\n * Removes a nested field at the specified index\n * @param index - Index of the nested field to remove (0-based)\n * @returns True if removed, false if index out of bounds\n *\n * @example\n * ```typescript\n * const field = new ComplexField({ instruction: 'TOC' });\n * field.addNestedField(nested1);\n * field.addNestedField(nested2);\n * field.removeNestedField(0); // Removes nested1\n * ```\n */\n removeNestedField(index: number): boolean {\n if (index < 0 || index >= this.nestedFields.length) {\n return false;\n }\n this.nestedFields.splice(index, 1);\n return true;\n }\n\n /**\n * Gets the count of nested fields\n * @returns Number of nested fields\n */\n getNestedFieldCount(): number {\n return this.nestedFields.length;\n }\n\n /**\n * Clears all nested fields\n * @returns This field for chaining\n */\n clearNestedFields(): this {\n this.nestedFields = [];\n return this;\n }\n\n /**\n * Updates the field instruction\n * @param instruction - New field instruction (e.g., 'TOC \\\\o \"1-3\"')\n * @returns This field for chaining\n *\n * @example\n * ```typescript\n * const field = new ComplexField({ instruction: 'DATE' });\n * field.updateInstruction('DATE \\\\@ \"yyyy-MM-dd\"');\n * ```\n */\n updateInstruction(instruction: string): this {\n this.instruction = instruction;\n return this;\n }\n\n /**\n * Adds custom XML content to the result section\n */\n addResultContent(content: XMLElement): this {\n this.resultContent.push(content);\n return this;\n }\n\n /**\n * Gets result content XML elements\n */\n getResultContent(): XMLElement[] {\n return [...this.resultContent];\n }\n\n /**\n * Sets the tracking context for automatic change tracking\n * @internal\n */\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\n this.trackingContext = context;\n }\n\n /**\n * Gets the accepted (visible) text from resultContent XMLElements.\n * Processes w:r (plain runs), w:ins (accepted insertions), skips w:del/w:moveFrom.\n * Falls back to this.result if resultContent is empty.\n */\n getAcceptedResultText(): string {\n if (this.resultContent.length === 0) {\n return this.result || '';\n }\n let text = '';\n for (const element of this.resultContent) {\n if (element.name === 'w:r') {\n text += this.extractTextFromRunXml(element);\n } else if (element.name === 'w:ins') {\n for (const child of element.children || []) {\n if (typeof child !== 'string' && child.name === 'w:r') {\n text += this.extractTextFromRunXml(child);\n }\n }\n }\n // Skip w:del, w:moveFrom (deleted/moved text not visible)\n }\n return text || this.result || '';\n }\n\n /**\n * Extracts text content from a w:r (run) XMLElement\n */\n private extractTextFromRunXml(run: XMLElement): string {\n let text = '';\n for (const child of run.children || []) {\n if (typeof child !== 'string' && (child.name === 'w:t' || child.name === 'w:delText')) {\n for (const t of child.children || []) {\n if (typeof t === 'string') text += t;\n }\n }\n }\n return text;\n }\n\n /**\n * Sets the field result with tracked changes (del/ins pair).\n * Creates a w:del wrapping the old text and a w:ins wrapping the new text,\n * preserving formatting from the original result runs.\n *\n * @param newText - New result text to display\n * @param author - Author name for the revision\n * @param options - Optional formatting control\n */\n setTrackedResult(\n newText: string,\n author: string,\n options?: {\n formatting?: RunFormatting;\n preserveFormatting?: boolean;\n }\n ): this {\n const currentText = this.getAcceptedResultText();\n if (currentText === newText) return this; // No-op if unchanged\n\n const date = new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n\n // Get revision IDs from TrackingContext if available, else Date.now()-based\n let delId: number, insId: number;\n if (this.trackingContext) {\n const rm = this.trackingContext.getRevisionManager();\n delId = rm.consumeNextId();\n insId = rm.consumeNextId();\n } else {\n const base = Date.now() % 100000000;\n delId = base;\n insId = base + 1;\n }\n\n // Resolve formatting: explicit > preserve > resultFormatting\n let rPr: XMLElement | null = null;\n if (options?.formatting) {\n rPr = this.createRunProperties(options.formatting);\n } else if (options?.preserveFormatting) {\n rPr = this.extractFirstVisibleRunProperties();\n }\n\n // Build <w:del> with old text\n const delRunChildren: (string | XMLElement)[] = [];\n if (rPr) delRunChildren.push(rPr);\n delRunChildren.push({\n name: 'w:delText',\n attributes: { 'xml:space': 'preserve' },\n children: [currentText],\n });\n const delElement: XMLElement = {\n name: 'w:del',\n attributes: { 'w:id': String(delId), 'w:author': author, 'w:date': date },\n children: [{ name: 'w:r', children: delRunChildren }],\n };\n\n // Build <w:ins> with new text\n const insRunChildren: (string | XMLElement)[] = [];\n if (rPr) insRunChildren.push(rPr);\n insRunChildren.push({\n name: 'w:t',\n attributes: { 'xml:space': 'preserve' },\n children: [newText],\n });\n const insElement: XMLElement = {\n name: 'w:ins',\n attributes: { 'w:id': String(insId), 'w:author': author, 'w:date': date },\n children: [{ name: 'w:r', children: insRunChildren }],\n };\n\n // Replace content: resultContent takes priority in toXML()\n this.resultContent = [delElement, insElement];\n this.result = newText;\n this.resultRevisions = [];\n\n return this;\n }\n\n /**\n * Extracts w:rPr from the first visible run in resultContent\n */\n private extractFirstVisibleRunProperties(): XMLElement | null {\n for (const element of this.resultContent) {\n if (element.name === 'w:r') {\n const rPr = (element.children || []).find(\n (c): c is XMLElement => typeof c !== 'string' && c.name === 'w:rPr'\n );\n if (rPr) return rPr;\n } else if (element.name === 'w:ins') {\n for (const child of element.children || []) {\n if (typeof child !== 'string' && child.name === 'w:r') {\n const rPr = (child.children || []).find(\n (c): c is XMLElement => typeof c !== 'string' && c.name === 'w:rPr'\n );\n if (rPr) return rPr;\n }\n }\n }\n }\n // Fall back to resultFormatting\n if (this.resultFormatting) {\n return this.createRunProperties(this.resultFormatting);\n }\n return null;\n }\n\n /**\n * Sets whether this field spans multiple paragraphs\n */\n setMultiParagraph(multiParagraph: boolean): this {\n this.multiParagraph = multiParagraph;\n return this;\n }\n\n /**\n * Gets whether this field spans multiple paragraphs\n */\n isMultiParagraph(): boolean {\n return this.multiParagraph;\n }\n\n /**\n * Sets revisions that wrap the result section\n * These are tracked changes (w:ins, w:del) that need to wrap the result AND end marker\n * @param revisions Array of Revision objects\n */\n setResultRevisions(revisions: Revision[]): this {\n this.resultRevisions = revisions;\n return this;\n }\n\n /**\n * Adds a revision to the result section\n * @param revision Revision to add\n */\n addResultRevision(revision: Revision): this {\n this.resultRevisions.push(revision);\n return this;\n }\n\n /**\n * Gets revisions that wrap the result section\n */\n getResultRevisions(): Revision[] {\n return [...this.resultRevisions];\n }\n\n /**\n * Checks if this field has revisions in the result section\n */\n hasResultRevisions(): boolean {\n return this.resultRevisions.length > 0;\n }\n\n /**\n * Generates XML for the complex field\n * Returns array of run elements (begin, instr, sep, result, end)\n */\n toXML(): XMLElement[] {\n const runs: XMLElement[] = [];\n\n // 1. Begin marker run\n const beginFldChar: XMLElement = this._formFieldData\n ? this.buildFldCharWithFfData()\n : {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'begin' },\n selfClosing: true,\n };\n runs.push({\n name: 'w:r',\n children: [beginFldChar],\n });\n\n // 2. Instruction run\n const instrChildren: XMLElement[] = [];\n if (this.instructionFormatting) {\n instrChildren.push(this.createRunProperties(this.instructionFormatting));\n }\n instrChildren.push({\n name: 'w:instrText',\n attributes: { 'xml:space': 'preserve' },\n children: [this.instruction],\n });\n runs.push({\n name: 'w:r',\n children: instrChildren,\n });\n\n // 2a. Nested fields (if any)\n for (const nestedField of this.nestedFields) {\n runs.push(...nestedField.toXML());\n }\n\n // 3. Separator run\n runs.push({\n name: 'w:r',\n children: [\n {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'separate' },\n selfClosing: true,\n },\n ],\n });\n\n // 4. Result content (prioritize custom XML content, then simple text)\n // Design note: For INCLUDEPICTURE fields, the parser stores the w:drawing\n // content in resultContent so it survives the parser→generator round-trip.\n // When flattenFieldCodes() is active, the full field structure is emitted\n // here, then _postProcessDocumentXml() strips the INCLUDEPICTURE scaffolding\n // (fldChar/instrText runs) from the final XML while preserving the drawing.\n // Non-INCLUDEPICTURE fields emit their complete structure unchanged.\n if (this.resultContent.length > 0) {\n // Use custom XML content\n runs.push(...this.resultContent);\n } else if (this.result) {\n // Use simple text result\n const resultChildren: XMLElement[] = [];\n if (this.resultFormatting) {\n resultChildren.push(this.createRunProperties(this.resultFormatting));\n }\n resultChildren.push({\n name: 'w:t',\n attributes: { 'xml:space': 'preserve' },\n children: [this.result],\n });\n runs.push({\n name: 'w:r',\n children: resultChildren,\n });\n }\n\n // 4a. Result revisions — only when NOT using resultContent\n // When resultContent is populated (e.g., by DocumentParser with interleaved revision XML),\n // it already includes revision elements in the correct interleaved position.\n // Emitting them again here would cause duplication.\n if (this.resultContent.length === 0) {\n for (const revision of this.resultRevisions) {\n const revisionXml = revision.toXML();\n if (revisionXml) {\n runs.push(revisionXml);\n }\n }\n }\n\n // 5. End marker run\n runs.push({\n name: 'w:r',\n children: [\n {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'end' },\n selfClosing: true,\n },\n ],\n });\n\n return runs;\n }\n\n /**\n * Creates run properties XML from formatting\n */\n private createRunProperties(formatting: RunFormatting): XMLElement {\n const children: XMLElement[] = [];\n\n if (formatting.bold) {\n children.push({ name: 'w:b', selfClosing: true });\n }\n\n if (formatting.italic) {\n children.push({ name: 'w:i', selfClosing: true });\n }\n\n if (formatting.underline) {\n const val = typeof formatting.underline === 'string' ? formatting.underline : 'single';\n children.push({\n name: 'w:u',\n attributes: { 'w:val': val },\n selfClosing: true,\n });\n }\n\n if (formatting.strike) {\n children.push({ name: 'w:strike', selfClosing: true });\n }\n\n if (formatting.font) {\n children.push({\n name: 'w:rFonts',\n attributes: {\n 'w:ascii': formatting.font,\n 'w:hAnsi': formatting.font,\n 'w:cs': formatting.font,\n },\n selfClosing: true,\n });\n }\n\n if (formatting.size) {\n const sizeValue = pointsToHalfPoints(formatting.size).toString();\n children.push({\n name: 'w:sz',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n children.push({\n name: 'w:szCs',\n attributes: { 'w:val': sizeValue },\n selfClosing: true,\n });\n }\n\n if (formatting.color) {\n const color = formatting.color.replace('#', '');\n children.push({\n name: 'w:color',\n attributes: { 'w:val': color },\n selfClosing: true,\n });\n }\n\n if (formatting.highlight) {\n children.push({\n name: 'w:highlight',\n attributes: { 'w:val': formatting.highlight },\n selfClosing: true,\n });\n }\n\n return { name: 'w:rPr', children };\n }\n\n /**\n * Builds a w:fldChar begin element with w:ffData child\n */\n private buildFldCharWithFfData(): XMLElement {\n const ffd = this._formFieldData!;\n const ffDataChildren: (string | XMLElement)[] = [];\n\n if (ffd.name) {\n ffDataChildren.push({ name: 'w:name', attributes: { 'w:val': ffd.name }, selfClosing: true });\n }\n if (ffd.enabled !== undefined) {\n if (ffd.enabled) {\n ffDataChildren.push({ name: 'w:enabled', selfClosing: true });\n } else {\n ffDataChildren.push({ name: 'w:enabled', attributes: { 'w:val': '0' }, selfClosing: true });\n }\n }\n if (ffd.calcOnExit !== undefined) {\n ffDataChildren.push({\n name: 'w:calcOnExit',\n attributes: { 'w:val': ffd.calcOnExit ? '1' : '0' },\n selfClosing: true,\n });\n }\n if (ffd.helpText) {\n ffDataChildren.push({\n name: 'w:helpText',\n attributes: { 'w:type': 'text', 'w:val': ffd.helpText },\n selfClosing: true,\n });\n }\n if (ffd.statusText) {\n ffDataChildren.push({\n name: 'w:statusText',\n attributes: { 'w:type': 'text', 'w:val': ffd.statusText },\n selfClosing: true,\n });\n }\n if (ffd.entryMacro) {\n ffDataChildren.push({\n name: 'w:entryMacro',\n attributes: { 'w:val': ffd.entryMacro },\n selfClosing: true,\n });\n }\n if (ffd.exitMacro) {\n ffDataChildren.push({\n name: 'w:exitMacro',\n attributes: { 'w:val': ffd.exitMacro },\n selfClosing: true,\n });\n }\n\n if (ffd.fieldType) {\n switch (ffd.fieldType.type) {\n case 'textInput': {\n const tiChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.inputType)\n tiChildren.push({\n name: 'w:type',\n attributes: { 'w:val': ffd.fieldType.inputType },\n selfClosing: true,\n });\n if (ffd.fieldType.defaultValue)\n tiChildren.push({\n name: 'w:default',\n attributes: { 'w:val': ffd.fieldType.defaultValue },\n selfClosing: true,\n });\n if (ffd.fieldType.maxLength !== undefined)\n tiChildren.push({\n name: 'w:maxLength',\n attributes: { 'w:val': String(ffd.fieldType.maxLength) },\n selfClosing: true,\n });\n if (ffd.fieldType.format)\n tiChildren.push({\n name: 'w:format',\n attributes: { 'w:val': ffd.fieldType.format },\n selfClosing: true,\n });\n ffDataChildren.push({ name: 'w:textInput', children: tiChildren });\n break;\n }\n case 'checkBox': {\n const cbChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.size === 'auto') {\n cbChildren.push({ name: 'w:sizeAuto', selfClosing: true });\n } else if (ffd.fieldType.size !== undefined) {\n cbChildren.push({\n name: 'w:size',\n attributes: { 'w:val': String(ffd.fieldType.size) },\n selfClosing: true,\n });\n }\n if (ffd.fieldType.defaultChecked !== undefined)\n cbChildren.push({\n name: 'w:default',\n attributes: { 'w:val': ffd.fieldType.defaultChecked ? '1' : '0' },\n selfClosing: true,\n });\n if (ffd.fieldType.checked !== undefined)\n cbChildren.push({\n name: 'w:checked',\n attributes: { 'w:val': ffd.fieldType.checked ? '1' : '0' },\n selfClosing: true,\n });\n ffDataChildren.push({ name: 'w:checkBox', children: cbChildren });\n break;\n }\n case 'dropDownList': {\n const ddChildren: (string | XMLElement)[] = [];\n if (ffd.fieldType.result !== undefined)\n ddChildren.push({\n name: 'w:result',\n attributes: { 'w:val': String(ffd.fieldType.result) },\n selfClosing: true,\n });\n if (ffd.fieldType.defaultResult !== undefined)\n ddChildren.push({\n name: 'w:default',\n attributes: { 'w:val': String(ffd.fieldType.defaultResult) },\n selfClosing: true,\n });\n if (ffd.fieldType.listEntries) {\n for (const entry of ffd.fieldType.listEntries) {\n ddChildren.push({\n name: 'w:listEntry',\n attributes: { 'w:val': entry },\n selfClosing: true,\n });\n }\n }\n ffDataChildren.push({ name: 'w:ddList', children: ddChildren });\n break;\n }\n }\n }\n\n return {\n name: 'w:fldChar',\n attributes: { 'w:fldCharType': 'begin' },\n children: [{ name: 'w:ffData', children: ffDataChildren }],\n };\n }\n}\n\n/**\n * TOC field options\n */\nexport interface TOCFieldOptions {\n /** Heading levels to include (e.g., \"1-3\" for levels 1-3) */\n levels?: string;\n\n /** Make entries hyperlinks (\\h switch) */\n hyperlinks?: boolean;\n\n /** Hide tab leaders and page numbers in Web Layout (\\z switch) */\n hideInWebLayout?: boolean;\n\n /** Use outline levels (\\u switch) */\n useOutlineLevels?: boolean;\n\n /** Omit page numbers (\\n switch) */\n omitPageNumbers?: boolean;\n\n /** Custom styles to use (\\t switch) */\n customStyles?: string;\n}\n\n/**\n * Creates a TOC (Table of Contents) complex field\n * Generates proper field instruction with switches\n *\n * @param options TOC field options\n * @returns ComplexField configured for TOC\n *\n * @example\n * const toc = createTOCField({ levels: '1-3', hyperlinks: true });\n * // Generates: TOC \\o \"1-3\" \\h \\z \\u\n */\nexport function createTOCField(options: TOCFieldOptions = {}): ComplexField {\n // Build instruction string\n let instruction = ' TOC';\n\n // Add outline levels switch\n if (options.levels !== undefined) {\n instruction += ` \\\\o \"${options.levels}\"`;\n } else {\n instruction += ' \\\\o \"1-3\"'; // Default: levels 1-3\n }\n\n // Add hyperlinks switch\n if (options.hyperlinks !== false) {\n instruction += ' \\\\h';\n }\n\n // Add hide in web layout switch\n if (options.hideInWebLayout !== false) {\n instruction += ' \\\\z';\n }\n\n // Add use outline levels switch\n if (options.useOutlineLevels !== false) {\n instruction += ' \\\\u';\n }\n\n // Add omit page numbers switch\n if (options.omitPageNumbers) {\n instruction += ' \\\\n';\n }\n\n // Add custom styles switch\n if (options.customStyles) {\n instruction += ` \\\\t \"${options.customStyles}\"`;\n }\n\n instruction += ' '; // Trailing space per Microsoft convention\n\n return new ComplexField({\n instruction,\n result: 'Table of Contents', // Placeholder result\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryRevisionAcceptor.d.ts","sourceRoot":"","sources":["../../src/utils/InMemoryRevisionAcceptor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoB9D,MAAM,WAAW,sBAAsB;IAErC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,qBAAqB;IAEpC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC;IAEtB,uBAAuB,EAAE,MAAM,CAAC;IAEhC,aAAa,EAAE,MAAM,CAAC;IAEtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAoCD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkEzD;AAaD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CA2PvB;AAuKD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAWnE;AAKD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE,CAG1E;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAa7E"}
1
+ {"version":3,"file":"InMemoryRevisionAcceptor.d.ts","sourceRoot":"","sources":["../../src/utils/InMemoryRevisionAcceptor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoB9D,MAAM,WAAW,sBAAsB;IAErC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,qBAAqB;IAEpC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,CAAC;IAEtB,uBAAuB,EAAE,MAAM,CAAC;IAEhC,aAAa,EAAE,MAAM,CAAC;IAEtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAoCD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkEzD;AAaD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CA2PvB;AAkMD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAWnE;AAKD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE,CAG1E;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAa7E"}
@@ -352,16 +352,36 @@ function acceptRevisionsInParagraph(paragraph, options) {
352
352
  }
353
353
  else if (item instanceof Field_1.ComplexField && item.hasResultRevisions()) {
354
354
  const fieldRevisions = item.getResultRevisions();
355
+ let mergedResult = item.getResult() || '';
356
+ const revisionsToKeep = [];
355
357
  for (const rev of fieldRevisions) {
356
358
  const revType = rev.getType();
357
- if (revType === 'insert' && options.acceptInsertions)
359
+ if (revType === 'insert' && options.acceptInsertions) {
360
+ for (const child of rev.getRuns()) {
361
+ mergedResult += child.getText() || '';
362
+ }
358
363
  result.insertionsAccepted++;
359
- else if (revType === 'delete' && options.acceptDeletions)
364
+ }
365
+ else if (revType === 'delete' && options.acceptDeletions) {
360
366
  result.deletionsAccepted++;
361
- else if ((revType === 'moveFrom' || revType === 'moveTo') && options.acceptMoves)
367
+ }
368
+ else if (revType === 'moveTo' && options.acceptMoves) {
369
+ for (const child of rev.getRuns()) {
370
+ mergedResult += child.getText() || '';
371
+ }
362
372
  result.movesAccepted++;
373
+ }
374
+ else if (revType === 'moveFrom' && options.acceptMoves) {
375
+ result.movesAccepted++;
376
+ }
377
+ else {
378
+ revisionsToKeep.push(rev);
379
+ }
380
+ }
381
+ item.setResult(mergedResult);
382
+ if (revisionsToKeep.length > 0) {
383
+ item.setResultRevisions(revisionsToKeep);
363
384
  }
364
- item.setResultRevisions([]);
365
385
  newContent.push(item);
366
386
  }
367
387
  else {