docxmlater 10.3.6 → 10.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +158 -7
  2. package/dist/core/Document.d.ts +98 -3
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +740 -50
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentContent.d.ts.map +1 -1
  7. package/dist/core/DocumentContent.js +0 -8
  8. package/dist/core/DocumentContent.js.map +1 -1
  9. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  10. package/dist/core/DocumentGenerator.js +9 -5
  11. package/dist/core/DocumentGenerator.js.map +1 -1
  12. package/dist/core/DocumentParser.d.ts.map +1 -1
  13. package/dist/core/DocumentParser.js +617 -104
  14. package/dist/core/DocumentParser.js.map +1 -1
  15. package/dist/core/RelationshipManager.d.ts.map +1 -1
  16. package/dist/core/RelationshipManager.js +4 -3
  17. package/dist/core/RelationshipManager.js.map +1 -1
  18. package/dist/elements/Bookmark.d.ts +7 -0
  19. package/dist/elements/Bookmark.d.ts.map +1 -1
  20. package/dist/elements/Bookmark.js +24 -4
  21. package/dist/elements/Bookmark.js.map +1 -1
  22. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  23. package/dist/elements/BookmarkManager.js +4 -3
  24. package/dist/elements/BookmarkManager.js.map +1 -1
  25. package/dist/elements/CommonTypes.d.ts +2 -2
  26. package/dist/elements/CommonTypes.d.ts.map +1 -1
  27. package/dist/elements/CommonTypes.js +14 -1
  28. package/dist/elements/CommonTypes.js.map +1 -1
  29. package/dist/elements/Field.d.ts +1 -1
  30. package/dist/elements/Field.d.ts.map +1 -1
  31. package/dist/elements/Field.js +1 -1
  32. package/dist/elements/Field.js.map +1 -1
  33. package/dist/elements/Footer.d.ts +2 -0
  34. package/dist/elements/Footer.d.ts.map +1 -1
  35. package/dist/elements/Footer.js +6 -0
  36. package/dist/elements/Footer.js.map +1 -1
  37. package/dist/elements/Header.d.ts +2 -0
  38. package/dist/elements/Header.d.ts.map +1 -1
  39. package/dist/elements/Header.js +6 -0
  40. package/dist/elements/Header.js.map +1 -1
  41. package/dist/elements/Image.d.ts.map +1 -1
  42. package/dist/elements/Image.js +3 -0
  43. package/dist/elements/Image.js.map +1 -1
  44. package/dist/elements/Paragraph.d.ts +81 -1
  45. package/dist/elements/Paragraph.d.ts.map +1 -1
  46. package/dist/elements/Paragraph.js +515 -21
  47. package/dist/elements/Paragraph.js.map +1 -1
  48. package/dist/elements/Revision.d.ts +0 -1
  49. package/dist/elements/Revision.d.ts.map +1 -1
  50. package/dist/elements/Revision.js +0 -12
  51. package/dist/elements/Revision.js.map +1 -1
  52. package/dist/elements/RevisionManager.d.ts +0 -1
  53. package/dist/elements/RevisionManager.d.ts.map +1 -1
  54. package/dist/elements/RevisionManager.js +0 -2
  55. package/dist/elements/RevisionManager.js.map +1 -1
  56. package/dist/elements/Run.d.ts +16 -4
  57. package/dist/elements/Run.d.ts.map +1 -1
  58. package/dist/elements/Run.js +114 -22
  59. package/dist/elements/Run.js.map +1 -1
  60. package/dist/elements/Section.d.ts +7 -1
  61. package/dist/elements/Section.d.ts.map +1 -1
  62. package/dist/elements/Section.js +185 -4
  63. package/dist/elements/Section.js.map +1 -1
  64. package/dist/elements/Shape.js.map +1 -1
  65. package/dist/elements/Table.d.ts +30 -1
  66. package/dist/elements/Table.d.ts.map +1 -1
  67. package/dist/elements/Table.js +357 -40
  68. package/dist/elements/Table.js.map +1 -1
  69. package/dist/elements/TableCell.d.ts +3 -0
  70. package/dist/elements/TableCell.d.ts.map +1 -1
  71. package/dist/elements/TableCell.js +30 -3
  72. package/dist/elements/TableCell.js.map +1 -1
  73. package/dist/elements/TableGridChange.d.ts +0 -1
  74. package/dist/elements/TableGridChange.d.ts.map +1 -1
  75. package/dist/elements/TableGridChange.js +0 -10
  76. package/dist/elements/TableGridChange.js.map +1 -1
  77. package/dist/elements/TableRow.d.ts +4 -0
  78. package/dist/elements/TableRow.d.ts.map +1 -1
  79. package/dist/elements/TableRow.js +31 -3
  80. package/dist/elements/TableRow.js.map +1 -1
  81. package/dist/formatting/AbstractNumbering.d.ts +5 -0
  82. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  83. package/dist/formatting/AbstractNumbering.js +22 -0
  84. package/dist/formatting/AbstractNumbering.js.map +1 -1
  85. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  86. package/dist/formatting/NumberingLevel.js +3 -3
  87. package/dist/formatting/NumberingLevel.js.map +1 -1
  88. package/dist/formatting/Style.d.ts +1 -0
  89. package/dist/formatting/Style.d.ts.map +1 -1
  90. package/dist/formatting/Style.js +25 -59
  91. package/dist/formatting/Style.js.map +1 -1
  92. package/dist/formatting/StylesManager.d.ts +1 -0
  93. package/dist/formatting/StylesManager.d.ts.map +1 -1
  94. package/dist/formatting/StylesManager.js +12 -0
  95. package/dist/formatting/StylesManager.js.map +1 -1
  96. package/dist/helpers/CleanupHelper.js.map +1 -1
  97. package/dist/images/ImageOptimizer.d.ts.map +1 -1
  98. package/dist/images/ImageOptimizer.js +0 -1
  99. package/dist/images/ImageOptimizer.js.map +1 -1
  100. package/dist/index.d.ts +1 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/managers/DrawingManager.d.ts.map +1 -1
  104. package/dist/managers/DrawingManager.js +4 -2
  105. package/dist/managers/DrawingManager.js.map +1 -1
  106. package/dist/types/formatting.d.ts +2 -2
  107. package/dist/types/formatting.d.ts.map +1 -1
  108. package/dist/types/formatting.js.map +1 -1
  109. package/dist/utils/ChangelogGenerator.d.ts +2 -2
  110. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  111. package/dist/utils/ChangelogGenerator.js +4 -5
  112. package/dist/utils/ChangelogGenerator.js.map +1 -1
  113. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  114. package/dist/utils/InMemoryRevisionAcceptor.js +0 -1
  115. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  116. package/dist/utils/RevisionAwareProcessor.d.ts +2 -2
  117. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  118. package/dist/utils/RevisionAwareProcessor.js +2 -2
  119. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  120. package/dist/utils/SelectiveRevisionAcceptor.d.ts +0 -2
  121. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  122. package/dist/utils/SelectiveRevisionAcceptor.js +0 -26
  123. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  124. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  125. package/dist/utils/ShadingResolver.js.map +1 -1
  126. package/dist/utils/acceptRevisions.js +1 -1
  127. package/dist/utils/acceptRevisions.js.map +1 -1
  128. package/dist/utils/stripTrackedChanges.js +1 -1
  129. package/dist/utils/stripTrackedChanges.js.map +1 -1
  130. package/dist/utils/units.d.ts.map +1 -1
  131. package/dist/utils/units.js +1 -1
  132. package/dist/utils/units.js.map +1 -1
  133. package/dist/validation/RevisionAutoFixer.d.ts +2 -1
  134. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  135. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  136. package/package.json +10 -1
  137. package/src/constants/CLAUDE.md +28 -0
  138. package/src/core/CLAUDE.md +4 -0
  139. package/src/core/Document.ts +1770 -83
  140. package/src/core/DocumentContent.ts +0 -11
  141. package/src/core/DocumentGenerator.ts +11 -12
  142. package/src/core/DocumentParser.ts +654 -141
  143. package/src/core/RelationshipManager.ts +6 -3
  144. package/src/elements/Bookmark.ts +39 -4
  145. package/src/elements/BookmarkManager.ts +4 -3
  146. package/src/elements/CLAUDE.md +18 -2
  147. package/src/elements/CommonTypes.ts +35 -8
  148. package/src/elements/Field.ts +1 -1
  149. package/src/elements/Footer.ts +23 -0
  150. package/src/elements/Header.ts +25 -0
  151. package/src/elements/Image.ts +5 -0
  152. package/src/elements/Paragraph.ts +1069 -41
  153. package/src/elements/Revision.ts +0 -19
  154. package/src/elements/RevisionManager.ts +1 -3
  155. package/src/elements/Run.ts +265 -35
  156. package/src/elements/Section.ts +214 -8
  157. package/src/elements/Shape.ts +1 -1
  158. package/src/elements/Table.ts +850 -61
  159. package/src/elements/TableCell.ts +84 -10
  160. package/src/elements/TableGridChange.ts +2 -16
  161. package/src/elements/TableRow.ts +94 -9
  162. package/src/formatting/AbstractNumbering.ts +42 -1
  163. package/src/formatting/CLAUDE.md +4 -0
  164. package/src/formatting/NumberingLevel.ts +11 -7
  165. package/src/formatting/Style.ts +39 -71
  166. package/src/formatting/StylesManager.ts +36 -0
  167. package/src/helpers/CleanupHelper.ts +1 -1
  168. package/src/images/ImageOptimizer.ts +0 -3
  169. package/src/index.ts +1 -1
  170. package/src/managers/DrawingManager.ts +5 -3
  171. package/src/tracking/CLAUDE.md +30 -0
  172. package/src/types/CLAUDE.md +39 -0
  173. package/src/types/formatting.ts +2 -2
  174. package/src/utils/CLAUDE.md +15 -0
  175. package/src/utils/ChangelogGenerator.ts +4 -5
  176. package/src/utils/InMemoryRevisionAcceptor.ts +0 -9
  177. package/src/utils/RevisionAwareProcessor.ts +2 -3
  178. package/src/utils/SelectiveRevisionAcceptor.ts +0 -39
  179. package/src/utils/ShadingResolver.ts +0 -1
  180. package/src/utils/acceptRevisions.ts +1 -1
  181. package/src/utils/stripTrackedChanges.ts +1 -1
  182. package/src/utils/units.ts +2 -1
  183. package/src/validation/CLAUDE.md +40 -0
  184. package/src/validation/RevisionAutoFixer.ts +2 -1
@@ -63,6 +63,7 @@ export declare class TableRow {
63
63
  message?: string;
64
64
  };
65
65
  setHeight(twips: number, rule?: RowFormatting['heightRule']): this;
66
+ setHeightRule(rule: RowFormatting['heightRule']): this;
66
67
  clearHeight(): this;
67
68
  setHeader(isHeader?: boolean): this;
68
69
  setCantSplit(cantSplit?: boolean): this;
@@ -90,6 +91,9 @@ export declare class TableRow {
90
91
  private buildTablePropertyExceptionsXML;
91
92
  private buildBordersXML;
92
93
  toXML(): XMLElement;
94
+ toArray(): string[];
95
+ getText(separator?: string): string;
96
+ clone(): TableRow;
93
97
  static create(cellCount?: number, formatting?: RowFormatting): TableRow;
94
98
  }
95
99
  //# sourceMappingURL=TableRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.d.ts","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableRow.d.ts","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TableRow = void 0;
4
+ const deepClone_1 = require("../utils/deepClone");
4
5
  const TableCell_1 = require("./TableCell");
5
6
  const XMLBuilder_1 = require("../xml/XMLBuilder");
6
7
  const logger_1 = require("../utils/logger");
@@ -108,6 +109,14 @@ class TableRow {
108
109
  }
109
110
  return this;
110
111
  }
112
+ setHeightRule(rule) {
113
+ const prevRule = this.formatting.heightRule;
114
+ this.formatting.heightRule = rule;
115
+ if (this.trackingContext?.isEnabled() && prevRule !== rule) {
116
+ this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);
117
+ }
118
+ return this;
119
+ }
111
120
  clearHeight() {
112
121
  delete this.formatting.height;
113
122
  delete this.formatting.heightRule;
@@ -408,6 +417,9 @@ class TableRow {
408
417
  if (prev.cnfStyle) {
409
418
  prevTrPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));
410
419
  }
420
+ if (prev.divId !== undefined) {
421
+ prevTrPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('divId', { 'w:val': prev.divId }));
422
+ }
411
423
  if (prev.gridBefore !== undefined) {
412
424
  prevTrPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('gridBefore', { 'w:val': prev.gridBefore }));
413
425
  }
@@ -456,20 +468,36 @@ class TableRow {
456
468
  trPrChildren.push(XMLBuilder_1.XMLBuilder.w('trPrChange', changeAttrs, [prevTrPr]));
457
469
  }
458
470
  const rowChildren = [];
459
- if (trPrChildren.length > 0) {
460
- rowChildren.push(XMLBuilder_1.XMLBuilder.w('trPr', undefined, trPrChildren));
461
- }
462
471
  if (this.formatting.tablePropertyExceptions) {
463
472
  const tblPrExChildren = this.buildTablePropertyExceptionsXML(this.formatting.tablePropertyExceptions);
464
473
  if (tblPrExChildren.length > 0) {
465
474
  rowChildren.push(XMLBuilder_1.XMLBuilder.w('tblPrEx', undefined, tblPrExChildren));
466
475
  }
467
476
  }
477
+ if (trPrChildren.length > 0) {
478
+ rowChildren.push(XMLBuilder_1.XMLBuilder.w('trPr', undefined, trPrChildren));
479
+ }
468
480
  for (const cell of this.cells) {
469
481
  rowChildren.push(cell.toXML());
470
482
  }
471
483
  return XMLBuilder_1.XMLBuilder.w('tr', undefined, rowChildren);
472
484
  }
485
+ toArray() {
486
+ return this.cells.map((cell) => cell.getText());
487
+ }
488
+ getText(separator = '\t') {
489
+ return this.cells.map((cell) => cell.getText()).join(separator);
490
+ }
491
+ clone() {
492
+ const clonedRow = new TableRow(0, (0, deepClone_1.deepClone)(this.formatting));
493
+ for (const cell of this.cells) {
494
+ clonedRow.addCell(cell.clone());
495
+ }
496
+ if (this.trPrChange) {
497
+ clonedRow.setTrPrChange((0, deepClone_1.deepClone)(this.trPrChange));
498
+ }
499
+ return clonedRow;
500
+ }
473
501
  static create(cellCount, formatting) {
474
502
  return new TableRow(cellCount, formatting);
475
503
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TableRow - Represents a row in a table\n */\n\nimport { TableCell } from './TableCell';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { TableBorder, TableBorders } from './Table';\nimport {\n BasicShadingPattern,\n RowJustification as CommonRowJustification,\n ShadingConfig,\n buildShadingAttributes,\n} from './CommonTypes';\nimport { defaultLogger } from '../utils/logger';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Row justification/alignment options\n * @see CommonTypes.RowJustification\n */\nexport type RowJustification = CommonRowJustification;\n\n/**\n * Shading pattern values per ECMA-376\n * @see CommonTypes.BasicShadingPattern for the canonical definition\n */\nexport type ShadingPattern = BasicShadingPattern;\n\n/**\n * Shading configuration\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type Shading = ShadingConfig;\n\n/**\n * Table property exceptions - overrides table-level properties for this row\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\n */\nexport interface TablePropertyExceptions {\n /** Border overrides for this row */\n borders?: TableBorders;\n /** Shading override for this row */\n shading?: Shading;\n /** Cell spacing override in twips */\n cellSpacing?: number;\n /** Table width override in twips */\n width?: number;\n /** Table indentation override in twips */\n indentation?: number;\n /** Table justification override */\n justification?: RowJustification;\n}\n\n/**\n * Row formatting options\n */\nexport interface RowFormatting {\n height?: number; // Height in twips\n heightRule?: 'auto' | 'exact' | 'atLeast';\n isHeader?: boolean; // Whether this is a header row\n cantSplit?: boolean; // Prevent row from breaking across pages\n justification?: RowJustification; // Row justification/alignment\n hidden?: boolean; // Hide row\n gridBefore?: number; // Grid columns before first cell\n gridAfter?: number; // Grid columns after last cell\n tablePropertyExceptions?: TablePropertyExceptions; // Table property exceptions for this row\n wBefore?: number; // Width before row in twips (per ECMA-376 §17.4.83)\n wBeforeType?: string; // Width before type (dxa, pct, auto)\n wAfter?: number; // Width after row in twips (per ECMA-376 §17.4.82)\n wAfterType?: string; // Width after type (dxa, pct, auto)\n cellSpacing?: number; // Row-level cell spacing override in twips\n cellSpacingType?: string; // Cell spacing type (dxa, pct)\n cnfStyle?: string; // Conditional formatting bitmask (per ECMA-376 §17.3.1.8)\n divId?: number; // HTML div association (per ECMA-376 §17.4.9)\n}\n\n/**\n * Table row property change tracking (w:trPrChange)\n * Per ECMA-376 Part 1 §17.13.5.38\n */\nexport interface TrPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\n/**\n * Represents a table row\n */\nexport class TableRow {\n private cells: TableCell[] = [];\n private formatting: RowFormatting;\n /** Parent table reference (if row is inside a table) */\n private _parentTable?: import('./Table').Table;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table row property change tracking (w:trPrChange) */\n private trPrChange?: TrPrChange;\n\n /**\n * Creates a new TableRow\n * @param cellCount - Number of cells to create (optional)\n * @param formatting - Row formatting options\n */\n constructor(cellCount?: number, formatting: RowFormatting = {}) {\n this.formatting = formatting;\n\n if (cellCount !== undefined && cellCount > 0) {\n for (let i = 0; i < cellCount; i++) {\n const cell = new TableCell();\n cell._setParentRow(this);\n this.cells.push(cell);\n }\n }\n }\n\n /**\n * Sets the tracking context for automatic change tracking.\n * Called by Document when track changes is enabled.\n * @internal\n */\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\n this.trackingContext = context;\n }\n\n /**\n * Gets the table row property change tracking info\n */\n getTrPrChange(): TrPrChange | undefined {\n return this.trPrChange;\n }\n\n /**\n * Sets the table row property change tracking info\n */\n setTrPrChange(change: TrPrChange | undefined): void {\n this.trPrChange = change;\n }\n\n /**\n * Clears the table row property change tracking\n */\n clearTrPrChange(): void {\n this.trPrChange = undefined;\n }\n\n /**\n * Adds a cell to the row\n * @param cell - Cell to add\n * @returns This row for chaining\n */\n addCell(cell: TableCell): this {\n this.cells.push(cell);\n cell._setParentRow(this);\n return this;\n }\n\n /**\n * Creates and adds a new cell\n * @param text - Optional text content for the cell\n * @returns The created cell\n */\n createCell(text?: string): TableCell {\n const cell = new TableCell();\n if (text) {\n cell.createParagraph(text);\n }\n this.cells.push(cell);\n cell._setParentRow(this);\n return cell;\n }\n\n /**\n * Gets a cell by index\n * @param index - Cell index (0-based)\n * @returns The cell at the index, or undefined\n */\n getCell(index: number): TableCell | undefined {\n return this.cells[index];\n }\n\n /**\n * Inserts a cell at the specified index\n * @param index - Position to insert (0-based)\n * @param cell - Cell to insert\n */\n insertCellAt(index: number, cell: TableCell): void {\n this.cells.splice(index, 0, cell);\n cell._setParentRow(this);\n }\n\n /**\n * Removes and returns the cell at the specified index\n * @param index - Position to remove (0-based)\n * @returns The removed cell, or undefined if index is out of bounds\n */\n removeCellAt(index: number): TableCell | undefined {\n if (index < 0 || index >= this.cells.length) return undefined;\n const removed = this.cells.splice(index, 1);\n const cell = removed[0];\n if (cell) cell._setParentRow(undefined);\n return cell;\n }\n\n /**\n * Gets all cells in the row\n * @returns Array of cells\n */\n getCells(): TableCell[] {\n return [...this.cells];\n }\n\n /**\n * Gets the number of cells in the row\n * @returns Number of cells\n */\n getCellCount(): number {\n return this.cells.length;\n }\n\n /**\n * Calculates the total grid span of the row (considering column spans)\n *\n * For tables with merged cells, this returns the number of logical columns\n * this row spans based on the columnSpan values of each cell.\n *\n * @returns Total grid span (sum of all cell spans, where unspanned cells count as 1)\n *\n * @example\n * ```typescript\n * // Row with 3 cells, middle one spanning 2 columns\n * const row = new TableRow();\n * row.createCell('A'); // span = 1\n * row.createCell('B').setColumnSpan(2); // span = 2\n * row.createCell('C'); // span = 1\n * row.getTotalGridSpan(); // Returns 4\n * ```\n */\n getTotalGridSpan(): number {\n let totalSpan = 0;\n for (const cell of this.cells) {\n const formatting = cell.getFormatting();\n totalSpan += formatting.columnSpan || 1;\n }\n return totalSpan;\n }\n\n /**\n * Validates the row's grid alignment\n *\n * Checks if the total grid span matches the expected column count.\n * Logs a warning if there's a mismatch, which can indicate:\n * - Missing cells (grid span < expected)\n * - Extra cells (grid span > expected)\n * - Incorrect columnSpan values\n *\n * @param expectedColumns - Expected number of columns in the table grid\n * @returns Object with validation result and details\n *\n * @example\n * ```typescript\n * const result = row.validateGridAlignment(4);\n * if (!result.isValid) {\n * console.log(result.message); // \"Row has 3 grid columns but expected 4\"\n * }\n * ```\n */\n validateGridAlignment(expectedColumns: number): {\n isValid: boolean;\n actualSpan: number;\n message?: string;\n } {\n const actualSpan = this.getTotalGridSpan();\n\n if (actualSpan === expectedColumns) {\n return { isValid: true, actualSpan };\n }\n\n const message =\n `Row grid alignment mismatch: has ${actualSpan} grid columns but expected ${expectedColumns}. ` +\n `Cell count: ${this.cells.length}. ` +\n (actualSpan < expectedColumns\n ? 'Missing cells or incorrect columnSpan values.'\n : 'Extra cells or excessive columnSpan values.');\n\n defaultLogger.warn(`[TableRow] ${message}`);\n\n return {\n isValid: false,\n actualSpan,\n message,\n };\n }\n\n /**\n * Sets row height\n * @param twips - Height in twips\n * @param rule - Height rule\n * @returns This row for chaining\n */\n setHeight(twips: number, rule: RowFormatting['heightRule'] = 'atLeast'): this {\n const prevHeight = this.formatting.height;\n const prevRule = this.formatting.heightRule;\n this.formatting.height = twips;\n this.formatting.heightRule = rule;\n if (this.trackingContext?.isEnabled()) {\n if (prevHeight !== twips) {\n this.trackingContext.trackTableChange(this, 'height', prevHeight, twips);\n }\n if (prevRule !== rule) {\n this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);\n }\n }\n return this;\n }\n\n /**\n * Clears the row height, allowing Word to auto-size the row based on content\n * @returns This row for chaining\n */\n clearHeight(): this {\n delete this.formatting.height;\n delete this.formatting.heightRule;\n return this;\n }\n\n /**\n * Sets whether this is a header row\n * @param isHeader - Whether this is a header row\n * @returns This row for chaining\n */\n setHeader(isHeader = true): this {\n const prev = this.formatting.isHeader;\n this.formatting.isHeader = isHeader;\n if (this.trackingContext?.isEnabled() && prev !== isHeader) {\n this.trackingContext.trackTableChange(this, 'isHeader', prev, isHeader);\n }\n return this;\n }\n\n /**\n * Sets whether row can split across pages\n * @param cantSplit - Whether to prevent splitting\n * @returns This row for chaining\n */\n setCantSplit(cantSplit = true): this {\n const prev = this.formatting.cantSplit;\n this.formatting.cantSplit = cantSplit;\n if (this.trackingContext?.isEnabled() && prev !== cantSplit) {\n this.trackingContext.trackTableChange(this, 'cantSplit', prev, cantSplit);\n }\n return this;\n }\n\n /**\n * Sets row justification/alignment\n * Per ECMA-376 Part 1 §17.4.79 (w:jc)\n * @param alignment - Row justification ('left' | 'center' | 'right' | 'start' | 'end')\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setJustification('center'); // Center-align the entire row\n * ```\n */\n setJustification(alignment: RowJustification): this {\n const prev = this.formatting.justification;\n this.formatting.justification = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'justification', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets whether row is hidden\n * Per ECMA-376 Part 1 §17.4.23 (w:hidden)\n * @param hidden - Whether to hide the row\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setHidden(true); // Hide this row from display\n * ```\n */\n setHidden(hidden = true): this {\n const prev = this.formatting.hidden;\n this.formatting.hidden = hidden;\n if (this.trackingContext?.isEnabled() && prev !== hidden) {\n this.trackingContext.trackTableChange(this, 'hidden', prev, hidden);\n }\n return this;\n }\n\n /**\n * Sets grid columns before first cell\n * Per ECMA-376 Part 1 §17.4.15 (w:gridBefore)\n * Specifies number of grid columns that must be skipped before the first cell\n * @param columns - Number of grid columns to skip before first cell\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setGridBefore(2); // Skip 2 columns before first cell\n * ```\n */\n setGridBefore(columns: number): this {\n const prev = this.formatting.gridBefore;\n this.formatting.gridBefore = columns;\n if (this.trackingContext?.isEnabled() && prev !== columns) {\n this.trackingContext.trackTableChange(this, 'gridBefore', prev, columns);\n }\n return this;\n }\n\n /**\n * Sets grid columns after last cell\n * Per ECMA-376 Part 1 §17.4.14 (w:gridAfter)\n * Specifies number of grid columns that must be left after the last cell\n * @param columns - Number of grid columns to leave after last cell\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setGridAfter(1); // Leave 1 column after last cell\n * ```\n */\n setGridAfter(columns: number): this {\n const prev = this.formatting.gridAfter;\n this.formatting.gridAfter = columns;\n if (this.trackingContext?.isEnabled() && prev !== columns) {\n this.trackingContext.trackTableChange(this, 'gridAfter', prev, columns);\n }\n return this;\n }\n\n /**\n * Sets table property exceptions for this row\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\n *\n * Allows this row to override table-level properties like borders, shading, and cell spacing.\n * Typically used when merging tables or preserving formatting from legacy documents.\n *\n * @param exceptions - Table property exceptions configuration\n * @returns This row for chaining\n * @example\n * ```typescript\n * // Override borders for this row\n * row.setTablePropertyExceptions({\n * borders: {\n * top: { style: 'single', size: 8, color: 'FF0000' },\n * bottom: { style: 'single', size: 8, color: 'FF0000' }\n * },\n * shading: { fill: 'FFFF00', pattern: 'clear' }\n * });\n * ```\n */\n setTablePropertyExceptions(exceptions: TablePropertyExceptions): this {\n const prev = this.formatting.tablePropertyExceptions;\n this.formatting.tablePropertyExceptions = exceptions;\n if (this.trackingContext?.isEnabled() && prev !== exceptions) {\n this.trackingContext.trackTableChange(this, 'tablePropertyExceptions', prev, exceptions);\n }\n return this;\n }\n\n /**\n * Sets width before row (w:wBefore) per ECMA-376 Part 1 §17.4.83\n * @param width - Width in twips\n * @param type - Width type (dxa, pct, auto)\n * @returns This row for chaining\n */\n setWBefore(width: number, type = 'dxa'): this {\n const prevWidth = this.formatting.wBefore;\n const prevType = this.formatting.wBeforeType;\n this.formatting.wBefore = width;\n this.formatting.wBeforeType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'wBefore', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'wBeforeType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets width after row (w:wAfter) per ECMA-376 Part 1 §17.4.82\n * @param width - Width in twips\n * @param type - Width type (dxa, pct, auto)\n * @returns This row for chaining\n */\n setWAfter(width: number, type = 'dxa'): this {\n const prevWidth = this.formatting.wAfter;\n const prevType = this.formatting.wAfterType;\n this.formatting.wAfter = width;\n this.formatting.wAfterType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'wAfter', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'wAfterType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets row-level cell spacing override (w:tblCellSpacing on row)\n * @param spacing - Cell spacing in twips\n * @param type - Spacing type (dxa, pct)\n * @returns This row for chaining\n */\n setRowCellSpacing(spacing: number, type = 'dxa'): this {\n const prevSpacing = this.formatting.cellSpacing;\n const prevType = this.formatting.cellSpacingType;\n this.formatting.cellSpacing = spacing;\n this.formatting.cellSpacingType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevSpacing !== spacing) {\n this.trackingContext.trackTableChange(this, 'cellSpacing', prevSpacing, spacing);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets conditional formatting bitmask for this row (w:cnfStyle)\n * Per ECMA-376 Part 1 §17.3.1.8\n * @param cnfStyle - Binary string (e.g., '100000000000' for firstRow)\n * @returns This row for chaining\n */\n setCnfStyle(cnfStyle: string): this {\n const prev = this.formatting.cnfStyle;\n this.formatting.cnfStyle = cnfStyle;\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\n }\n return this;\n }\n\n /**\n * Sets the HTML div ID for web round-trip\n * Per ECMA-376 Part 1 §17.4.9\n * @param id - Div ID number\n * @returns This row for chaining\n */\n setDivId(id: number): this {\n this.formatting.divId = id;\n return this;\n }\n\n /**\n * Gets the HTML div ID\n * @returns Div ID or undefined\n */\n getDivId(): number | undefined {\n return this.formatting.divId;\n }\n\n /**\n * Gets table property exceptions\n * @returns Table property exceptions or undefined\n */\n getTablePropertyExceptions(): TablePropertyExceptions | undefined {\n return this.formatting.tablePropertyExceptions;\n }\n\n /**\n * Gets the row formatting\n * @returns Row formatting\n */\n getFormatting(): RowFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the row height in twips\n * @returns Height in twips or undefined if not set\n */\n getHeight(): number | undefined {\n return this.formatting.height;\n }\n\n /**\n * Gets the row height rule\n * @returns Height rule ('auto', 'exact', 'atLeast') or undefined\n */\n getHeightRule(): string | undefined {\n return this.formatting.heightRule;\n }\n\n /**\n * Checks if this row is marked as a header row\n * @returns True if this is a header row\n */\n getIsHeader(): boolean {\n return this.formatting.isHeader ?? false;\n }\n\n /**\n * Gets whether the row can split across pages\n * @returns True if row cannot split\n */\n getCantSplit(): boolean {\n return this.formatting.cantSplit ?? false;\n }\n\n /**\n * Gets the row justification (alignment)\n * @returns Justification ('left', 'center', 'right') or undefined\n */\n getJustification(): string | undefined {\n return this.formatting.justification;\n }\n\n /**\n * Checks if this row is hidden\n * @returns True if row is hidden\n */\n isHidden(): boolean {\n return this.formatting.hidden ?? false;\n }\n\n /**\n * Sets the parent table reference for this row.\n * Called by Table when adding rows.\n * @internal\n */\n _setParentTable(table: import('./Table').Table | undefined): void {\n this._parentTable = table;\n }\n\n /**\n * Gets the parent table reference for this row.\n * @internal\n */\n _getParentTable(): import('./Table').Table | undefined {\n return this._parentTable;\n }\n\n /**\n * Builds XML for table property exceptions\n * Per ECMA-376 Part 1 §17.4.61\n * @private\n */\n private buildTablePropertyExceptionsXML(exceptions: TablePropertyExceptions): XMLElement[] {\n const children: XMLElement[] = [];\n\n // Add table width exception (w:tblW)\n if (exceptions.width !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': exceptions.width,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table justification exception (w:jc)\n if (exceptions.justification) {\n children.push(XMLBuilder.wSelf('jc', { 'w:val': exceptions.justification }));\n }\n\n // Add cell spacing exception (w:tblCellSpacing)\n if (exceptions.cellSpacing !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': exceptions.cellSpacing,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table indentation exception (w:tblInd)\n if (exceptions.indentation !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblInd', {\n 'w:w': exceptions.indentation,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table borders exception (w:tblBorders)\n if (exceptions.borders) {\n const borderChildren = this.buildBordersXML(exceptions.borders);\n if (borderChildren.length > 0) {\n children.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\n }\n }\n\n // Add shading exception (w:shd)\n if (exceptions.shading) {\n const shdAttrs: Record<string, string> = {};\n if (exceptions.shading.pattern) shdAttrs['w:val'] = exceptions.shading.pattern;\n if (exceptions.shading.color) shdAttrs['w:color'] = exceptions.shading.color;\n if (exceptions.shading.fill) shdAttrs['w:fill'] = exceptions.shading.fill;\n if (exceptions.shading.themeColor) shdAttrs['w:themeColor'] = exceptions.shading.themeColor;\n if (exceptions.shading.themeFill) shdAttrs['w:themeFill'] = exceptions.shading.themeFill;\n if (exceptions.shading.themeFillShade)\n shdAttrs['w:themeFillShade'] = exceptions.shading.themeFillShade;\n if (exceptions.shading.themeFillTint)\n shdAttrs['w:themeFillTint'] = exceptions.shading.themeFillTint;\n if (exceptions.shading.themeShade) shdAttrs['w:themeShade'] = exceptions.shading.themeShade;\n if (exceptions.shading.themeTint) shdAttrs['w:themeTint'] = exceptions.shading.themeTint;\n children.push(XMLBuilder.w('shd', shdAttrs));\n }\n\n return children;\n }\n\n /**\n * Builds XML for table borders\n * @private\n */\n private buildBordersXML(borders: TableBorders): XMLElement[] {\n const children: XMLElement[] = [];\n\n const borderNames: (keyof TableBorders)[] = [\n 'top',\n 'left',\n 'bottom',\n 'right',\n 'insideH',\n 'insideV',\n ];\n\n for (const name of borderNames) {\n const border = borders[name];\n if (border) {\n const attrs: Record<string, string | number> = {};\n if (border.style) attrs['w:val'] = border.style;\n if (border.size !== undefined) attrs['w:sz'] = border.size;\n if (border.space !== undefined) attrs['w:space'] = border.space;\n if (border.color) attrs['w:color'] = border.color;\n\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf(name, attrs));\n }\n }\n }\n\n return children;\n }\n\n /**\n * Converts the row to WordprocessingML XML element\n * @returns XMLElement representing the row\n */\n toXML(): XMLElement {\n const trPrChildren: XMLElement[] = [];\n\n // Ordered per CT_TrPr (ECMA-376 §17.4.79):\n // cnfStyle → divId → gridBefore → gridAfter → wBefore → wAfter →\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\n\n // 1. cnfStyle (conditional formatting bitmask)\n if (this.formatting.cnfStyle) {\n trPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\n }\n\n // 2. divId\n if (this.formatting.divId !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': this.formatting.divId }));\n }\n\n // 3. gridBefore\n if (this.formatting.gridBefore !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': this.formatting.gridBefore }));\n }\n\n // 4. gridAfter\n if (this.formatting.gridAfter !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': this.formatting.gridAfter }));\n }\n\n // 5. wBefore\n if (this.formatting.wBefore !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('wBefore', {\n 'w:w': this.formatting.wBefore,\n 'w:type': this.formatting.wBeforeType || 'dxa',\n })\n );\n }\n\n // 6. wAfter\n if (this.formatting.wAfter !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('wAfter', {\n 'w:w': this.formatting.wAfter,\n 'w:type': this.formatting.wAfterType || 'dxa',\n })\n );\n }\n\n // 7. cantSplit\n if (this.formatting.cantSplit) {\n trPrChildren.push(XMLBuilder.wSelf('cantSplit'));\n }\n\n // 8. trHeight\n if (this.formatting.height !== undefined) {\n const attrs: Record<string, string | number> = {\n 'w:val': this.formatting.height,\n };\n if (this.formatting.heightRule) {\n attrs['w:hRule'] = this.formatting.heightRule;\n }\n trPrChildren.push(XMLBuilder.wSelf('trHeight', attrs));\n }\n\n // 9. tblHeader\n if (this.formatting.isHeader) {\n trPrChildren.push(XMLBuilder.wSelf('tblHeader'));\n }\n\n // 10. tblCellSpacing\n if (this.formatting.cellSpacing !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': this.formatting.cellSpacing,\n 'w:type': this.formatting.cellSpacingType || 'dxa',\n })\n );\n }\n\n // 11. jc (map 'start'/'end' to valid ST_JcTable values)\n if (this.formatting.justification) {\n const jcMap: Record<string, string> = { start: 'left', end: 'right' };\n const jcVal = jcMap[this.formatting.justification] || this.formatting.justification;\n trPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcVal }));\n }\n\n // 12. hidden\n if (this.formatting.hidden) {\n trPrChildren.push(XMLBuilder.wSelf('hidden'));\n }\n\n // Add table row property change (w:trPrChange) per ECMA-376 Part 1 §17.13.5.38\n // Must be last child of w:trPr\n if (this.trPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.trPrChange.id,\n 'w:author': this.trPrChange.author,\n 'w:date': this.trPrChange.date,\n };\n const prevTrPrChildren: XMLElement[] = [];\n const prev = this.trPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_TrPr: cnfStyle → gridBefore → gridAfter → wBefore → wAfter →\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\n if (prev.cnfStyle) {\n prevTrPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\n }\n if (prev.gridBefore !== undefined) {\n prevTrPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': prev.gridBefore }));\n }\n if (prev.gridAfter !== undefined) {\n prevTrPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': prev.gridAfter }));\n }\n if (prev.wBefore !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('wBefore', {\n 'w:w': prev.wBefore,\n 'w:type': prev.wBeforeType || 'dxa',\n })\n );\n }\n if (prev.wAfter !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('wAfter', {\n 'w:w': prev.wAfter,\n 'w:type': prev.wAfterType || 'dxa',\n })\n );\n }\n if (prev.cantSplit) {\n prevTrPrChildren.push(XMLBuilder.wSelf('cantSplit'));\n }\n if (prev.height !== undefined) {\n const heightAttrs: Record<string, string | number> = { 'w:val': prev.height };\n if (prev.heightRule) heightAttrs['w:hRule'] = prev.heightRule;\n prevTrPrChildren.push(XMLBuilder.wSelf('trHeight', heightAttrs));\n }\n if (prev.isHeader) {\n prevTrPrChildren.push(XMLBuilder.wSelf('tblHeader'));\n }\n if (prev.cellSpacing !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': prev.cellSpacing,\n 'w:type': prev.cellSpacingType || 'dxa',\n })\n );\n }\n if (prev.justification) {\n const jcPrevMap: Record<string, string> = { start: 'left', end: 'right' };\n prevTrPrChildren.push(\n XMLBuilder.wSelf('jc', { 'w:val': jcPrevMap[prev.justification] || prev.justification })\n );\n }\n if (prev.hidden) {\n prevTrPrChildren.push(XMLBuilder.wSelf('hidden'));\n }\n }\n const prevTrPr = XMLBuilder.w('trPr', undefined, prevTrPrChildren);\n trPrChildren.push(XMLBuilder.w('trPrChange', changeAttrs, [prevTrPr]));\n }\n\n // Build row element\n const rowChildren: XMLElement[] = [];\n\n // Add row properties if there are any\n if (trPrChildren.length > 0) {\n rowChildren.push(XMLBuilder.w('trPr', undefined, trPrChildren));\n }\n\n // Add table property exceptions (tblPrEx) if present\n if (this.formatting.tablePropertyExceptions) {\n const tblPrExChildren = this.buildTablePropertyExceptionsXML(\n this.formatting.tablePropertyExceptions\n );\n if (tblPrExChildren.length > 0) {\n rowChildren.push(XMLBuilder.w('tblPrEx', undefined, tblPrExChildren));\n }\n }\n\n // Add all cells - each cell is independent\n // Note: gridSpan (columnSpan) means a single cell spans multiple columns in the grid,\n // it does NOT mean subsequent cells should be skipped. Each cell in the array\n // represents a distinct cell that should be output to the XML.\n for (const cell of this.cells) {\n rowChildren.push(cell.toXML());\n }\n\n return XMLBuilder.w('tr', undefined, rowChildren);\n }\n\n /**\n * Creates a new TableRow\n * @param cellCount - Number of cells to create\n * @param formatting - Row formatting\n * @returns New TableRow instance\n */\n static create(cellCount?: number, formatting?: RowFormatting): TableRow {\n return new TableRow(cellCount, formatting);\n }\n}\n"]}
1
+ {"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TableRow - Represents a row in a table\n */\n\nimport { deepClone } from '../utils/deepClone';\nimport { TableCell } from './TableCell';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { TableBorders } from './Table';\nimport {\n BasicShadingPattern,\n RowJustification as CommonRowJustification,\n ShadingConfig,\n} from './CommonTypes';\nimport { defaultLogger } from '../utils/logger';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Row justification/alignment options\n * @see CommonTypes.RowJustification\n */\nexport type RowJustification = CommonRowJustification;\n\n/**\n * Shading pattern values per ECMA-376\n * @see CommonTypes.BasicShadingPattern for the canonical definition\n */\nexport type ShadingPattern = BasicShadingPattern;\n\n/**\n * Shading configuration\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type Shading = ShadingConfig;\n\n/**\n * Table property exceptions - overrides table-level properties for this row\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\n */\nexport interface TablePropertyExceptions {\n /** Border overrides for this row */\n borders?: TableBorders;\n /** Shading override for this row */\n shading?: Shading;\n /** Cell spacing override in twips */\n cellSpacing?: number;\n /** Table width override in twips */\n width?: number;\n /** Table indentation override in twips */\n indentation?: number;\n /** Table justification override */\n justification?: RowJustification;\n}\n\n/**\n * Row formatting options\n */\nexport interface RowFormatting {\n height?: number; // Height in twips\n heightRule?: 'auto' | 'exact' | 'atLeast';\n isHeader?: boolean; // Whether this is a header row\n cantSplit?: boolean; // Prevent row from breaking across pages\n justification?: RowJustification; // Row justification/alignment\n hidden?: boolean; // Hide row\n gridBefore?: number; // Grid columns before first cell\n gridAfter?: number; // Grid columns after last cell\n tablePropertyExceptions?: TablePropertyExceptions; // Table property exceptions for this row\n wBefore?: number; // Width before row in twips (per ECMA-376 §17.4.83)\n wBeforeType?: string; // Width before type (dxa, pct, auto)\n wAfter?: number; // Width after row in twips (per ECMA-376 §17.4.82)\n wAfterType?: string; // Width after type (dxa, pct, auto)\n cellSpacing?: number; // Row-level cell spacing override in twips\n cellSpacingType?: string; // Cell spacing type (dxa, pct)\n cnfStyle?: string; // Conditional formatting bitmask (per ECMA-376 §17.3.1.8)\n divId?: number; // HTML div association (per ECMA-376 §17.4.9)\n}\n\n/**\n * Table row property change tracking (w:trPrChange)\n * Per ECMA-376 Part 1 §17.13.5.38\n */\nexport interface TrPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\n/**\n * Represents a table row\n */\nexport class TableRow {\n private cells: TableCell[] = [];\n private formatting: RowFormatting;\n /** Parent table reference (if row is inside a table) */\n private _parentTable?: import('./Table').Table;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table row property change tracking (w:trPrChange) */\n private trPrChange?: TrPrChange;\n\n /**\n * Creates a new TableRow\n * @param cellCount - Number of cells to create (optional)\n * @param formatting - Row formatting options\n */\n constructor(cellCount?: number, formatting: RowFormatting = {}) {\n this.formatting = formatting;\n\n if (cellCount !== undefined && cellCount > 0) {\n for (let i = 0; i < cellCount; i++) {\n const cell = new TableCell();\n cell._setParentRow(this);\n this.cells.push(cell);\n }\n }\n }\n\n /**\n * Sets the tracking context for automatic change tracking.\n * Called by Document when track changes is enabled.\n * @internal\n */\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\n this.trackingContext = context;\n }\n\n /**\n * Gets the table row property change tracking info\n */\n getTrPrChange(): TrPrChange | undefined {\n return this.trPrChange;\n }\n\n /**\n * Sets the table row property change tracking info\n */\n setTrPrChange(change: TrPrChange | undefined): void {\n this.trPrChange = change;\n }\n\n /**\n * Clears the table row property change tracking\n */\n clearTrPrChange(): void {\n this.trPrChange = undefined;\n }\n\n /**\n * Adds a cell to the row\n * @param cell - Cell to add\n * @returns This row for chaining\n */\n addCell(cell: TableCell): this {\n this.cells.push(cell);\n cell._setParentRow(this);\n return this;\n }\n\n /**\n * Creates and adds a new cell\n * @param text - Optional text content for the cell\n * @returns The created cell\n */\n createCell(text?: string): TableCell {\n const cell = new TableCell();\n if (text) {\n cell.createParagraph(text);\n }\n this.cells.push(cell);\n cell._setParentRow(this);\n return cell;\n }\n\n /**\n * Gets a cell by index\n * @param index - Cell index (0-based)\n * @returns The cell at the index, or undefined\n */\n getCell(index: number): TableCell | undefined {\n return this.cells[index];\n }\n\n /**\n * Inserts a cell at the specified index\n * @param index - Position to insert (0-based)\n * @param cell - Cell to insert\n */\n insertCellAt(index: number, cell: TableCell): void {\n this.cells.splice(index, 0, cell);\n cell._setParentRow(this);\n }\n\n /**\n * Removes and returns the cell at the specified index\n * @param index - Position to remove (0-based)\n * @returns The removed cell, or undefined if index is out of bounds\n */\n removeCellAt(index: number): TableCell | undefined {\n if (index < 0 || index >= this.cells.length) return undefined;\n const removed = this.cells.splice(index, 1);\n const cell = removed[0];\n if (cell) cell._setParentRow(undefined);\n return cell;\n }\n\n /**\n * Gets all cells in the row\n * @returns Array of cells\n */\n getCells(): TableCell[] {\n return [...this.cells];\n }\n\n /**\n * Gets the number of cells in the row\n * @returns Number of cells\n */\n getCellCount(): number {\n return this.cells.length;\n }\n\n /**\n * Calculates the total grid span of the row (considering column spans)\n *\n * For tables with merged cells, this returns the number of logical columns\n * this row spans based on the columnSpan values of each cell.\n *\n * @returns Total grid span (sum of all cell spans, where unspanned cells count as 1)\n *\n * @example\n * ```typescript\n * // Row with 3 cells, middle one spanning 2 columns\n * const row = new TableRow();\n * row.createCell('A'); // span = 1\n * row.createCell('B').setColumnSpan(2); // span = 2\n * row.createCell('C'); // span = 1\n * row.getTotalGridSpan(); // Returns 4\n * ```\n */\n getTotalGridSpan(): number {\n let totalSpan = 0;\n for (const cell of this.cells) {\n const formatting = cell.getFormatting();\n totalSpan += formatting.columnSpan || 1;\n }\n return totalSpan;\n }\n\n /**\n * Validates the row's grid alignment\n *\n * Checks if the total grid span matches the expected column count.\n * Logs a warning if there's a mismatch, which can indicate:\n * - Missing cells (grid span < expected)\n * - Extra cells (grid span > expected)\n * - Incorrect columnSpan values\n *\n * @param expectedColumns - Expected number of columns in the table grid\n * @returns Object with validation result and details\n *\n * @example\n * ```typescript\n * const result = row.validateGridAlignment(4);\n * if (!result.isValid) {\n * console.log(result.message); // \"Row has 3 grid columns but expected 4\"\n * }\n * ```\n */\n validateGridAlignment(expectedColumns: number): {\n isValid: boolean;\n actualSpan: number;\n message?: string;\n } {\n const actualSpan = this.getTotalGridSpan();\n\n if (actualSpan === expectedColumns) {\n return { isValid: true, actualSpan };\n }\n\n const message =\n `Row grid alignment mismatch: has ${actualSpan} grid columns but expected ${expectedColumns}. ` +\n `Cell count: ${this.cells.length}. ` +\n (actualSpan < expectedColumns\n ? 'Missing cells or incorrect columnSpan values.'\n : 'Extra cells or excessive columnSpan values.');\n\n defaultLogger.warn(`[TableRow] ${message}`);\n\n return {\n isValid: false,\n actualSpan,\n message,\n };\n }\n\n /**\n * Sets row height\n * @param twips - Height in twips\n * @param rule - Height rule\n * @returns This row for chaining\n */\n setHeight(twips: number, rule: RowFormatting['heightRule'] = 'atLeast'): this {\n const prevHeight = this.formatting.height;\n const prevRule = this.formatting.heightRule;\n this.formatting.height = twips;\n this.formatting.heightRule = rule;\n if (this.trackingContext?.isEnabled()) {\n if (prevHeight !== twips) {\n this.trackingContext.trackTableChange(this, 'height', prevHeight, twips);\n }\n if (prevRule !== rule) {\n this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);\n }\n }\n return this;\n }\n\n /**\n * Sets the height rule independently of the height value.\n * Per ECMA-376 §17.18.33, valid values are \"auto\", \"atLeast\", \"exact\".\n * When undefined, the w:hRule attribute is omitted (defaults to \"auto\" per spec).\n * @param rule - Height rule, or undefined to omit (use spec default \"auto\")\n * @returns This row for chaining\n */\n setHeightRule(rule: RowFormatting['heightRule']): this {\n const prevRule = this.formatting.heightRule;\n this.formatting.heightRule = rule;\n if (this.trackingContext?.isEnabled() && prevRule !== rule) {\n this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);\n }\n return this;\n }\n\n /**\n * Clears the row height, allowing Word to auto-size the row based on content\n * @returns This row for chaining\n */\n clearHeight(): this {\n delete this.formatting.height;\n delete this.formatting.heightRule;\n return this;\n }\n\n /**\n * Sets whether this is a header row\n * @param isHeader - Whether this is a header row\n * @returns This row for chaining\n */\n setHeader(isHeader = true): this {\n const prev = this.formatting.isHeader;\n this.formatting.isHeader = isHeader;\n if (this.trackingContext?.isEnabled() && prev !== isHeader) {\n this.trackingContext.trackTableChange(this, 'isHeader', prev, isHeader);\n }\n return this;\n }\n\n /**\n * Sets whether row can split across pages\n * @param cantSplit - Whether to prevent splitting\n * @returns This row for chaining\n */\n setCantSplit(cantSplit = true): this {\n const prev = this.formatting.cantSplit;\n this.formatting.cantSplit = cantSplit;\n if (this.trackingContext?.isEnabled() && prev !== cantSplit) {\n this.trackingContext.trackTableChange(this, 'cantSplit', prev, cantSplit);\n }\n return this;\n }\n\n /**\n * Sets row justification/alignment\n * Per ECMA-376 Part 1 §17.4.79 (w:jc)\n * @param alignment - Row justification ('left' | 'center' | 'right' | 'start' | 'end')\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setJustification('center'); // Center-align the entire row\n * ```\n */\n setJustification(alignment: RowJustification): this {\n const prev = this.formatting.justification;\n this.formatting.justification = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'justification', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets whether row is hidden\n * Per ECMA-376 Part 1 §17.4.23 (w:hidden)\n * @param hidden - Whether to hide the row\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setHidden(true); // Hide this row from display\n * ```\n */\n setHidden(hidden = true): this {\n const prev = this.formatting.hidden;\n this.formatting.hidden = hidden;\n if (this.trackingContext?.isEnabled() && prev !== hidden) {\n this.trackingContext.trackTableChange(this, 'hidden', prev, hidden);\n }\n return this;\n }\n\n /**\n * Sets grid columns before first cell\n * Per ECMA-376 Part 1 §17.4.15 (w:gridBefore)\n * Specifies number of grid columns that must be skipped before the first cell\n * @param columns - Number of grid columns to skip before first cell\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setGridBefore(2); // Skip 2 columns before first cell\n * ```\n */\n setGridBefore(columns: number): this {\n const prev = this.formatting.gridBefore;\n this.formatting.gridBefore = columns;\n if (this.trackingContext?.isEnabled() && prev !== columns) {\n this.trackingContext.trackTableChange(this, 'gridBefore', prev, columns);\n }\n return this;\n }\n\n /**\n * Sets grid columns after last cell\n * Per ECMA-376 Part 1 §17.4.14 (w:gridAfter)\n * Specifies number of grid columns that must be left after the last cell\n * @param columns - Number of grid columns to leave after last cell\n * @returns This row for chaining\n * @example\n * ```typescript\n * row.setGridAfter(1); // Leave 1 column after last cell\n * ```\n */\n setGridAfter(columns: number): this {\n const prev = this.formatting.gridAfter;\n this.formatting.gridAfter = columns;\n if (this.trackingContext?.isEnabled() && prev !== columns) {\n this.trackingContext.trackTableChange(this, 'gridAfter', prev, columns);\n }\n return this;\n }\n\n /**\n * Sets table property exceptions for this row\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\n *\n * Allows this row to override table-level properties like borders, shading, and cell spacing.\n * Typically used when merging tables or preserving formatting from legacy documents.\n *\n * @param exceptions - Table property exceptions configuration\n * @returns This row for chaining\n * @example\n * ```typescript\n * // Override borders for this row\n * row.setTablePropertyExceptions({\n * borders: {\n * top: { style: 'single', size: 8, color: 'FF0000' },\n * bottom: { style: 'single', size: 8, color: 'FF0000' }\n * },\n * shading: { fill: 'FFFF00', pattern: 'clear' }\n * });\n * ```\n */\n setTablePropertyExceptions(exceptions: TablePropertyExceptions): this {\n const prev = this.formatting.tablePropertyExceptions;\n this.formatting.tablePropertyExceptions = exceptions;\n if (this.trackingContext?.isEnabled() && prev !== exceptions) {\n this.trackingContext.trackTableChange(this, 'tablePropertyExceptions', prev, exceptions);\n }\n return this;\n }\n\n /**\n * Sets width before row (w:wBefore) per ECMA-376 Part 1 §17.4.83\n * @param width - Width in twips\n * @param type - Width type (dxa, pct, auto)\n * @returns This row for chaining\n */\n setWBefore(width: number, type = 'dxa'): this {\n const prevWidth = this.formatting.wBefore;\n const prevType = this.formatting.wBeforeType;\n this.formatting.wBefore = width;\n this.formatting.wBeforeType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'wBefore', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'wBeforeType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets width after row (w:wAfter) per ECMA-376 Part 1 §17.4.82\n * @param width - Width in twips\n * @param type - Width type (dxa, pct, auto)\n * @returns This row for chaining\n */\n setWAfter(width: number, type = 'dxa'): this {\n const prevWidth = this.formatting.wAfter;\n const prevType = this.formatting.wAfterType;\n this.formatting.wAfter = width;\n this.formatting.wAfterType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'wAfter', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'wAfterType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets row-level cell spacing override (w:tblCellSpacing on row)\n * @param spacing - Cell spacing in twips\n * @param type - Spacing type (dxa, pct)\n * @returns This row for chaining\n */\n setRowCellSpacing(spacing: number, type = 'dxa'): this {\n const prevSpacing = this.formatting.cellSpacing;\n const prevType = this.formatting.cellSpacingType;\n this.formatting.cellSpacing = spacing;\n this.formatting.cellSpacingType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevSpacing !== spacing) {\n this.trackingContext.trackTableChange(this, 'cellSpacing', prevSpacing, spacing);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets conditional formatting bitmask for this row (w:cnfStyle)\n * Per ECMA-376 Part 1 §17.3.1.8\n * @param cnfStyle - Binary string (e.g., '100000000000' for firstRow)\n * @returns This row for chaining\n */\n setCnfStyle(cnfStyle: string): this {\n const prev = this.formatting.cnfStyle;\n this.formatting.cnfStyle = cnfStyle;\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\n }\n return this;\n }\n\n /**\n * Sets the HTML div ID for web round-trip\n * Per ECMA-376 Part 1 §17.4.9\n * @param id - Div ID number\n * @returns This row for chaining\n */\n setDivId(id: number): this {\n this.formatting.divId = id;\n return this;\n }\n\n /**\n * Gets the HTML div ID\n * @returns Div ID or undefined\n */\n getDivId(): number | undefined {\n return this.formatting.divId;\n }\n\n /**\n * Gets table property exceptions\n * @returns Table property exceptions or undefined\n */\n getTablePropertyExceptions(): TablePropertyExceptions | undefined {\n return this.formatting.tablePropertyExceptions;\n }\n\n /**\n * Gets the row formatting\n * @returns Row formatting\n */\n getFormatting(): RowFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the row height in twips\n * @returns Height in twips or undefined if not set\n */\n getHeight(): number | undefined {\n return this.formatting.height;\n }\n\n /**\n * Gets the row height rule\n * @returns Height rule ('auto', 'exact', 'atLeast') or undefined\n */\n getHeightRule(): string | undefined {\n return this.formatting.heightRule;\n }\n\n /**\n * Checks if this row is marked as a header row\n * @returns True if this is a header row\n */\n getIsHeader(): boolean {\n return this.formatting.isHeader ?? false;\n }\n\n /**\n * Gets whether the row can split across pages\n * @returns True if row cannot split\n */\n getCantSplit(): boolean {\n return this.formatting.cantSplit ?? false;\n }\n\n /**\n * Gets the row justification (alignment)\n * @returns Justification ('left', 'center', 'right') or undefined\n */\n getJustification(): string | undefined {\n return this.formatting.justification;\n }\n\n /**\n * Checks if this row is hidden\n * @returns True if row is hidden\n */\n isHidden(): boolean {\n return this.formatting.hidden ?? false;\n }\n\n /**\n * Sets the parent table reference for this row.\n * Called by Table when adding rows.\n * @internal\n */\n _setParentTable(table: import('./Table').Table | undefined): void {\n this._parentTable = table;\n }\n\n /**\n * Gets the parent table reference for this row.\n * @internal\n */\n _getParentTable(): import('./Table').Table | undefined {\n return this._parentTable;\n }\n\n /**\n * Builds XML for table property exceptions\n * Per ECMA-376 Part 1 §17.4.61\n * @private\n */\n private buildTablePropertyExceptionsXML(exceptions: TablePropertyExceptions): XMLElement[] {\n const children: XMLElement[] = [];\n\n // Add table width exception (w:tblW)\n if (exceptions.width !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': exceptions.width,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table justification exception (w:jc)\n if (exceptions.justification) {\n children.push(XMLBuilder.wSelf('jc', { 'w:val': exceptions.justification }));\n }\n\n // Add cell spacing exception (w:tblCellSpacing)\n if (exceptions.cellSpacing !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': exceptions.cellSpacing,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table indentation exception (w:tblInd)\n if (exceptions.indentation !== undefined) {\n children.push(\n XMLBuilder.wSelf('tblInd', {\n 'w:w': exceptions.indentation,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Add table borders exception (w:tblBorders)\n if (exceptions.borders) {\n const borderChildren = this.buildBordersXML(exceptions.borders);\n if (borderChildren.length > 0) {\n children.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\n }\n }\n\n // Add shading exception (w:shd)\n if (exceptions.shading) {\n const shdAttrs: Record<string, string> = {};\n if (exceptions.shading.pattern) shdAttrs['w:val'] = exceptions.shading.pattern;\n if (exceptions.shading.color) shdAttrs['w:color'] = exceptions.shading.color;\n if (exceptions.shading.fill) shdAttrs['w:fill'] = exceptions.shading.fill;\n if (exceptions.shading.themeColor) shdAttrs['w:themeColor'] = exceptions.shading.themeColor;\n if (exceptions.shading.themeFill) shdAttrs['w:themeFill'] = exceptions.shading.themeFill;\n if (exceptions.shading.themeFillShade)\n shdAttrs['w:themeFillShade'] = exceptions.shading.themeFillShade;\n if (exceptions.shading.themeFillTint)\n shdAttrs['w:themeFillTint'] = exceptions.shading.themeFillTint;\n if (exceptions.shading.themeShade) shdAttrs['w:themeShade'] = exceptions.shading.themeShade;\n if (exceptions.shading.themeTint) shdAttrs['w:themeTint'] = exceptions.shading.themeTint;\n children.push(XMLBuilder.w('shd', shdAttrs));\n }\n\n return children;\n }\n\n /**\n * Builds XML for table borders\n * @private\n */\n private buildBordersXML(borders: TableBorders): XMLElement[] {\n const children: XMLElement[] = [];\n\n const borderNames: (keyof TableBorders)[] = [\n 'top',\n 'left',\n 'bottom',\n 'right',\n 'insideH',\n 'insideV',\n ];\n\n for (const name of borderNames) {\n const border = borders[name];\n if (border) {\n const attrs: Record<string, string | number> = {};\n if (border.style) attrs['w:val'] = border.style;\n if (border.size !== undefined) attrs['w:sz'] = border.size;\n if (border.space !== undefined) attrs['w:space'] = border.space;\n if (border.color) attrs['w:color'] = border.color;\n\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf(name, attrs));\n }\n }\n }\n\n return children;\n }\n\n /**\n * Converts the row to WordprocessingML XML element\n * @returns XMLElement representing the row\n */\n toXML(): XMLElement {\n const trPrChildren: XMLElement[] = [];\n\n // Ordered per CT_TrPr (ECMA-376 §17.4.79):\n // cnfStyle → divId → gridBefore → gridAfter → wBefore → wAfter →\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\n\n // 1. cnfStyle (conditional formatting bitmask)\n if (this.formatting.cnfStyle) {\n trPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\n }\n\n // 2. divId\n if (this.formatting.divId !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': this.formatting.divId }));\n }\n\n // 3. gridBefore\n if (this.formatting.gridBefore !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': this.formatting.gridBefore }));\n }\n\n // 4. gridAfter\n if (this.formatting.gridAfter !== undefined) {\n trPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': this.formatting.gridAfter }));\n }\n\n // 5. wBefore\n if (this.formatting.wBefore !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('wBefore', {\n 'w:w': this.formatting.wBefore,\n 'w:type': this.formatting.wBeforeType || 'dxa',\n })\n );\n }\n\n // 6. wAfter\n if (this.formatting.wAfter !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('wAfter', {\n 'w:w': this.formatting.wAfter,\n 'w:type': this.formatting.wAfterType || 'dxa',\n })\n );\n }\n\n // 7. cantSplit\n if (this.formatting.cantSplit) {\n trPrChildren.push(XMLBuilder.wSelf('cantSplit'));\n }\n\n // 8. trHeight\n if (this.formatting.height !== undefined) {\n const attrs: Record<string, string | number> = {\n 'w:val': this.formatting.height,\n };\n if (this.formatting.heightRule) {\n attrs['w:hRule'] = this.formatting.heightRule;\n }\n trPrChildren.push(XMLBuilder.wSelf('trHeight', attrs));\n }\n\n // 9. tblHeader\n if (this.formatting.isHeader) {\n trPrChildren.push(XMLBuilder.wSelf('tblHeader'));\n }\n\n // 10. tblCellSpacing\n if (this.formatting.cellSpacing !== undefined) {\n trPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': this.formatting.cellSpacing,\n 'w:type': this.formatting.cellSpacingType || 'dxa',\n })\n );\n }\n\n // 11. jc (map 'start'/'end' to valid ST_JcTable values)\n if (this.formatting.justification) {\n const jcMap: Record<string, string> = { start: 'left', end: 'right' };\n const jcVal = jcMap[this.formatting.justification] || this.formatting.justification;\n trPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcVal }));\n }\n\n // 12. hidden\n if (this.formatting.hidden) {\n trPrChildren.push(XMLBuilder.wSelf('hidden'));\n }\n\n // Add table row property change (w:trPrChange) per ECMA-376 Part 1 §17.13.5.38\n // Must be last child of w:trPr\n if (this.trPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.trPrChange.id,\n 'w:author': this.trPrChange.author,\n 'w:date': this.trPrChange.date,\n };\n const prevTrPrChildren: XMLElement[] = [];\n const prev = this.trPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_TrPr (ECMA-376 §17.4.79):\n // cnfStyle → divId → gridBefore → gridAfter → wBefore → wAfter →\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\n if (prev.cnfStyle) {\n prevTrPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\n }\n if (prev.divId !== undefined) {\n prevTrPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': prev.divId }));\n }\n if (prev.gridBefore !== undefined) {\n prevTrPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': prev.gridBefore }));\n }\n if (prev.gridAfter !== undefined) {\n prevTrPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': prev.gridAfter }));\n }\n if (prev.wBefore !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('wBefore', {\n 'w:w': prev.wBefore,\n 'w:type': prev.wBeforeType || 'dxa',\n })\n );\n }\n if (prev.wAfter !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('wAfter', {\n 'w:w': prev.wAfter,\n 'w:type': prev.wAfterType || 'dxa',\n })\n );\n }\n if (prev.cantSplit) {\n prevTrPrChildren.push(XMLBuilder.wSelf('cantSplit'));\n }\n if (prev.height !== undefined) {\n const heightAttrs: Record<string, string | number> = { 'w:val': prev.height };\n if (prev.heightRule) heightAttrs['w:hRule'] = prev.heightRule;\n prevTrPrChildren.push(XMLBuilder.wSelf('trHeight', heightAttrs));\n }\n if (prev.isHeader) {\n prevTrPrChildren.push(XMLBuilder.wSelf('tblHeader'));\n }\n if (prev.cellSpacing !== undefined) {\n prevTrPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': prev.cellSpacing,\n 'w:type': prev.cellSpacingType || 'dxa',\n })\n );\n }\n if (prev.justification) {\n const jcPrevMap: Record<string, string> = { start: 'left', end: 'right' };\n prevTrPrChildren.push(\n XMLBuilder.wSelf('jc', { 'w:val': jcPrevMap[prev.justification] || prev.justification })\n );\n }\n if (prev.hidden) {\n prevTrPrChildren.push(XMLBuilder.wSelf('hidden'));\n }\n }\n const prevTrPr = XMLBuilder.w('trPr', undefined, prevTrPrChildren);\n trPrChildren.push(XMLBuilder.w('trPrChange', changeAttrs, [prevTrPr]));\n }\n\n // Build row element\n // Per ECMA-376 §17.4.78 (CT_Row): tblPrEx → trPr → tc*\n const rowChildren: XMLElement[] = [];\n\n // Add table property exceptions (tblPrEx) - must come BEFORE trPr per CT_Row\n if (this.formatting.tablePropertyExceptions) {\n const tblPrExChildren = this.buildTablePropertyExceptionsXML(\n this.formatting.tablePropertyExceptions\n );\n if (tblPrExChildren.length > 0) {\n rowChildren.push(XMLBuilder.w('tblPrEx', undefined, tblPrExChildren));\n }\n }\n\n // Add row properties if there are any\n if (trPrChildren.length > 0) {\n rowChildren.push(XMLBuilder.w('trPr', undefined, trPrChildren));\n }\n\n // Add all cells - each cell is independent\n // Note: gridSpan (columnSpan) means a single cell spans multiple columns in the grid,\n // it does NOT mean subsequent cells should be skipped. Each cell in the array\n // represents a distinct cell that should be output to the XML.\n for (const cell of this.cells) {\n rowChildren.push(cell.toXML());\n }\n\n return XMLBuilder.w('tr', undefined, rowChildren);\n }\n\n /**\n * Gets the text content of all cells as a string array\n *\n * @returns Array of cell text values\n *\n * @example\n * ```typescript\n * const values = row.toArray(); // ['Alice', '30', 'NYC']\n * ```\n */\n toArray(): string[] {\n return this.cells.map((cell) => cell.getText());\n }\n\n /**\n * Gets the concatenated text of all cells, separated by a delimiter\n *\n * @param separator - Separator between cell texts (default: tab)\n * @returns Concatenated cell text\n *\n * @example\n * ```typescript\n * console.log(row.getText()); // \"Alice\\t30\\tNYC\"\n * console.log(row.getText(', ')); // \"Alice, 30, NYC\"\n * ```\n */\n getText(separator = '\\t'): string {\n return this.cells.map((cell) => cell.getText()).join(separator);\n }\n\n /**\n * Creates a deep clone of this row\n *\n * Copies all cells (via TableCell.clone()), formatting, and property change\n * tracking. The clone is independent of the original. Parent table reference\n * is NOT copied (set by Table.addRow/insertRow).\n *\n * @returns New TableRow instance with the same structure and content\n *\n * @example\n * ```typescript\n * const row = new TableRow(3);\n * row.getCell(0)?.createParagraph('Cell A');\n * row.setHeader(true);\n *\n * const copy = row.clone();\n * copy.getCell(0)?.createParagraph('Modified');\n * // Original row unchanged\n * ```\n */\n clone(): TableRow {\n const clonedRow = new TableRow(0, deepClone(this.formatting));\n\n for (const cell of this.cells) {\n clonedRow.addCell(cell.clone());\n }\n\n if (this.trPrChange) {\n clonedRow.setTrPrChange(deepClone(this.trPrChange));\n }\n\n return clonedRow;\n }\n\n /**\n * Creates a new TableRow\n * @param cellCount - Number of cells to create\n * @param formatting - Row formatting\n * @returns New TableRow instance\n */\n static create(cellCount?: number, formatting?: RowFormatting): TableRow {\n return new TableRow(cellCount, formatting);\n }\n}\n"]}
@@ -8,6 +8,7 @@ export interface AbstractNumberingProperties {
8
8
  numStyleLink?: string;
9
9
  styleLink?: string;
10
10
  tmpl?: string;
11
+ nsid?: string;
11
12
  }
12
13
  export declare class AbstractNumbering {
13
14
  private abstractNumId;
@@ -17,10 +18,14 @@ export declare class AbstractNumbering {
17
18
  private numStyleLink?;
18
19
  private styleLink?;
19
20
  private tmpl?;
21
+ private nsid?;
20
22
  constructor(idOrProps: number | AbstractNumberingProperties, name?: string);
21
23
  private validate;
22
24
  getAbstractNumId(): number;
23
25
  getId(): number;
26
+ getNsid(): string | undefined;
27
+ setNsid(nsid: string): void;
28
+ private static generateNsid;
24
29
  getName(): string | undefined;
25
30
  setName(name: string): this;
26
31
  getMultiLevelType(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,2BAA2B;IAE1C,aAAa,EAAE,MAAM,CAAC;IAGtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAS;gBAOV,SAAS,EAAE,MAAM,GAAG,2BAA2B,EAAE,IAAI,CAAC,EAAE,MAAM;IAgC1E,OAAO,CAAC,QAAQ;IAahB,gBAAgB,IAAI,MAAM;IAO1B,KAAK,IAAI,MAAM;IAOf,OAAO,IAAI,MAAM,GAAG,SAAS;IAQ7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,iBAAiB,IAAI,MAAM;IAc3B,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,IAAI;IAchF,eAAe,IAAI,MAAM,GAAG,SAAS;IAQrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ/C,YAAY,IAAI,MAAM,GAAG,SAAS;IAQlC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ5C,WAAW,IAAI,MAAM,GAAG,SAAS;IAQjC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS/B,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAerC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IASzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOxD,YAAY,IAAI,cAAc,EAAE;IAOhC,SAAS,IAAI,cAAc,EAAE;IAO7B,aAAa,IAAI,MAAM;IAQvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQrC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAOxC,KAAK,IAAI,UAAU;IAgFnB,MAAM,CAAC,gBAAgB,CACrB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,iBAAiB;IA2BpB,MAAM,CAAC,kBAAkB,CACvB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,GAAE,CAAC,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC,EAMjF,GACA,iBAAiB;IAyCpB,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IA0BrE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IAyClE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,2BAA2B,GAAG,iBAAiB;IASzE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CA+D/C"}
1
+ {"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,14 @@ class AbstractNumbering {
12
12
  numStyleLink;
13
13
  styleLink;
14
14
  tmpl;
15
+ nsid;
15
16
  constructor(idOrProps, name) {
16
17
  if (typeof idOrProps === 'number') {
17
18
  this.abstractNumId = idOrProps;
18
19
  this.name = name;
19
20
  this.levels = new Map();
20
21
  this.multiLevelType = 1;
22
+ this.nsid = AbstractNumbering.generateNsid();
21
23
  }
22
24
  else {
23
25
  const properties = idOrProps;
@@ -28,6 +30,7 @@ class AbstractNumbering {
28
30
  this.numStyleLink = properties.numStyleLink;
29
31
  this.styleLink = properties.styleLink;
30
32
  this.tmpl = properties.tmpl;
33
+ this.nsid = properties.nsid ?? AbstractNumbering.generateNsid();
31
34
  if (properties.levels) {
32
35
  properties.levels.forEach((level) => {
33
36
  this.addLevel(level);
@@ -50,6 +53,19 @@ class AbstractNumbering {
50
53
  getId() {
51
54
  return this.abstractNumId;
52
55
  }
56
+ getNsid() {
57
+ return this.nsid;
58
+ }
59
+ setNsid(nsid) {
60
+ this.nsid = nsid;
61
+ }
62
+ static generateNsid() {
63
+ const hex = Math.floor(Math.random() * 0xffffffff)
64
+ .toString(16)
65
+ .toUpperCase()
66
+ .padStart(8, '0');
67
+ return hex;
68
+ }
53
69
  getName() {
54
70
  return this.name;
55
71
  }
@@ -133,6 +149,9 @@ class AbstractNumbering {
133
149
  }
134
150
  toXML() {
135
151
  const children = [];
152
+ if (this.nsid) {
153
+ children.push(XMLBuilder_1.XMLBuilder.wSelf('nsid', { 'w:val': this.nsid }));
154
+ }
136
155
  let multiLevelTypeValue;
137
156
  if (this.multiLevelType === 1) {
138
157
  multiLevelTypeValue = 'multilevel';
@@ -279,6 +298,8 @@ class AbstractNumbering {
279
298
  const styleLink = styleLinkMatch?.[1] || undefined;
280
299
  const tmplMatch = /<w:tmpl[^>]*w:val="([^"]+)"/.exec(xml);
281
300
  const tmpl = tmplMatch?.[1] || undefined;
301
+ const nsidMatch = /<w:nsid[^>]*w:val="([^"]+)"/.exec(xml);
302
+ const nsid = nsidMatch?.[1] || undefined;
282
303
  const abstractNum = new AbstractNumbering({
283
304
  abstractNumId,
284
305
  name,
@@ -286,6 +307,7 @@ class AbstractNumbering {
286
307
  numStyleLink,
287
308
  styleLink,
288
309
  tmpl,
310
+ nsid,
289
311
  });
290
312
  const lvlRegex = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/g;
291
313
  const lvlMatches = xml.match(lvlRegex);
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AbstractNumbering - Defines a multi-level numbering scheme\n *\n * An abstract numbering definition is a template that defines up to 9 levels of\n * list formatting. It's referenced by numbering instances which link it to actual\n * paragraphs in the document.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { NumberingLevel } from './NumberingLevel';\nimport { defaultLogger } from '../utils/logger';\n\n/**\n * Properties for creating an abstract numbering definition\n */\nexport interface AbstractNumberingProperties {\n /** Unique identifier for this abstract numbering */\n abstractNumId: number;\n\n /** Optional name for the numbering scheme */\n name?: string;\n\n /** The numbering levels (up to 9 levels, 0-8) */\n levels?: NumberingLevel[];\n\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\n multiLevelType?: number;\n\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\n numStyleLink?: string;\n\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\n styleLink?: string;\n\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\n tmpl?: string;\n}\n\n/**\n * Represents an abstract numbering definition\n *\n * Abstract numbering defines the template for a multi-level list. Each instance\n * of a list in the document references an abstract numbering definition.\n */\nexport class AbstractNumbering {\n private abstractNumId: number;\n private name?: string;\n private levels: Map<number, NumberingLevel>;\n private multiLevelType: number;\n private numStyleLink?: string;\n private styleLink?: string;\n private tmpl?: string;\n\n /**\n * Creates a new abstract numbering definition\n * @param idOrProps The abstract numbering ID (number) or properties object\n * @param name Optional name (if first param is a number)\n */\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\n // Support both simple (numId) and object constructor patterns\n if (typeof idOrProps === 'number') {\n // Simple constructor: new AbstractNumbering(id)\n this.abstractNumId = idOrProps;\n this.name = name;\n this.levels = new Map();\n this.multiLevelType = 1; // default multilevel\n } else {\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\n const properties = idOrProps;\n this.abstractNumId = properties.abstractNumId;\n this.name = properties.name;\n this.levels = new Map();\n this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\n this.numStyleLink = properties.numStyleLink;\n this.styleLink = properties.styleLink;\n this.tmpl = properties.tmpl;\n\n if (properties.levels) {\n properties.levels.forEach((level) => {\n this.addLevel(level);\n });\n }\n }\n\n this.validate();\n }\n\n /**\n * Validates the abstract numbering\n */\n private validate(): void {\n if (this.abstractNumId < 0) {\n throw new Error('Abstract numbering ID must be non-negative');\n }\n\n if (this.levels.size > 9) {\n throw new Error('Cannot have more than 9 levels (0-8)');\n }\n }\n\n /**\n * Gets the abstract numbering ID\n */\n getAbstractNumId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Alias for getAbstractNumId for backward compatibility\n */\n getId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Gets the name\n */\n getName(): string | undefined {\n return this.name;\n }\n\n /**\n * Sets the name\n * @param name The numbering scheme name\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the multi-level type\n */\n getMultiLevelType(): string {\n if (this.multiLevelType === 1) {\n return 'multilevel';\n } else if (this.multiLevelType === 2) {\n return 'hybridMultilevel';\n } else {\n return 'singleLevel';\n }\n }\n\n /**\n * Sets the multi-level type\n * @param type The multi-level type ('multilevel' or 'singleLevel')\n */\n setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this {\n if (type === 'multilevel') {\n this.multiLevelType = 1;\n } else if (type === 'hybridMultilevel') {\n this.multiLevelType = 2;\n } else {\n this.multiLevelType = 0;\n }\n return this;\n }\n\n /**\n * Gets the numStyleLink (reference to a numbering style definition)\n */\n getNumStyleLink(): string | undefined {\n return this.numStyleLink;\n }\n\n /**\n * Sets the numStyleLink\n * @param link The numbering style name\n */\n setNumStyleLink(link: string | undefined): this {\n this.numStyleLink = link;\n return this;\n }\n\n /**\n * Gets the styleLink (reference to a style that uses this abstract numbering)\n */\n getStyleLink(): string | undefined {\n return this.styleLink;\n }\n\n /**\n * Sets the styleLink\n * @param link The style name\n */\n setStyleLink(link: string | undefined): this {\n this.styleLink = link;\n return this;\n }\n\n /**\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\n */\n getTemplate(): string | undefined {\n return this.tmpl;\n }\n\n /**\n * Sets the template code\n * @param tmpl 8-char hex string identifying the template\n */\n setTemplate(tmpl: string): this {\n this.tmpl = tmpl;\n return this;\n }\n\n /**\n * Adds a numbering level\n * @param level The numbering level to add\n */\n addLevel(level: NumberingLevel): this {\n const levelIndex = level.getLevel();\n\n if (levelIndex < 0 || levelIndex > 8) {\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\n }\n\n this.levels.set(levelIndex, level);\n return this;\n }\n\n /**\n * Adds multiple numbering levels at once\n * @param levels The numbering levels to add\n */\n addLevels(levels: NumberingLevel[]): this {\n levels.forEach((level) => this.addLevel(level));\n return this;\n }\n\n /**\n * Gets a numbering level by index\n * @param levelIndex The level index (0-8)\n */\n getLevel(levelIndex: number): NumberingLevel | undefined {\n return this.levels.get(levelIndex);\n }\n\n /**\n * Gets all levels\n */\n getAllLevels(): NumberingLevel[] {\n return Array.from(this.levels.values()).sort((a, b) => a.getLevel() - b.getLevel());\n }\n\n /**\n * Alias for getAllLevels for backward compatibility\n */\n getLevels(): NumberingLevel[] {\n return this.getAllLevels();\n }\n\n /**\n * Gets the number of levels defined\n */\n getLevelCount(): number {\n return this.levels.size;\n }\n\n /**\n * Checks if a level exists\n * @param levelIndex The level index (0-8)\n */\n hasLevel(levelIndex: number): boolean {\n return this.levels.has(levelIndex);\n }\n\n /**\n * Removes a level\n * @param levelIndex The level index (0-8)\n */\n removeLevel(levelIndex: number): boolean {\n return this.levels.delete(levelIndex);\n }\n\n /**\n * Generates the WordprocessingML XML for this abstract numbering\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\n\n // Add multiLevelType\n let multiLevelTypeValue: string;\n if (this.multiLevelType === 1) {\n multiLevelTypeValue = 'multilevel';\n } else if (this.multiLevelType === 2) {\n multiLevelTypeValue = 'hybridMultilevel';\n } else {\n multiLevelTypeValue = 'singleLevel';\n }\n\n children.push(\n XMLBuilder.wSelf('multiLevelType', {\n 'w:val': multiLevelTypeValue,\n })\n );\n\n // Add template code (position 3 per CT_AbstractNum)\n if (this.tmpl) {\n children.push(XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));\n }\n\n // Add name if present\n if (this.name) {\n children.push(XMLBuilder.wSelf('name', { 'w:val': this.name }));\n }\n\n // Add styleLink / numStyleLink if present\n if (this.styleLink) {\n children.push(XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));\n }\n if (this.numStyleLink) {\n children.push(XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));\n }\n\n // Add all levels in order\n const sortedLevels = this.getAllLevels();\n sortedLevels.forEach((level) => {\n children.push(level.toXML());\n });\n\n // If no levels defined, add a default level 0\n if (sortedLevels.length === 0) {\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\n }\n\n return XMLBuilder.w(\n 'abstractNum',\n { 'w:abstractNumId': this.abstractNumId.toString() },\n children\n );\n }\n\n /**\n * Creates a bullet list abstract numbering with specified levels\n *\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\n *\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\n *\n * @example\n * // Standard bullet list\n * const bulletList = AbstractNumbering.createBulletList(1);\n *\n * @example\n * // Custom bullets using helper method\n * const bullets = [];\n * for (let i = 0; i < 9; i++) {\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\n * bullets.push(symbol);\n * }\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\n */\n static createBulletList(\n abstractNumId: number,\n levels = 9,\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Bullet List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n if (bullets && bullets.length > 0) {\n // Custom bullets provided - use them with default font\n const bullet = bullets[i % bullets.length] || '•';\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\n } else {\n // No custom bullets - use Word-native encoding (correct font per level)\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\n }\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a numbered list abstract numbering with specified levels\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param formats Array of formats for each level\n */\n static createNumberedList(\n abstractNumId: number,\n levels = 9,\n formats: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[] = [\n 'decimal',\n 'lowerLetter',\n 'lowerRoman',\n 'upperLetter',\n 'upperRoman',\n ]\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Numbered List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n const format = formats[i % formats.length] || 'decimal';\n const template = `%${i + 1}.`;\n\n let level: NumberingLevel;\n switch (format) {\n case 'lowerLetter':\n level = NumberingLevel.createLowerLetterLevel(i, template);\n break;\n case 'lowerRoman':\n level = NumberingLevel.createLowerRomanLevel(i, template);\n break;\n case 'upperLetter':\n level = NumberingLevel.createUpperLetterLevel(i, template);\n break;\n case 'upperRoman':\n level = NumberingLevel.createUpperRomanLevel(i, template);\n break;\n case 'decimal':\n default:\n level = NumberingLevel.createDecimalLevel(i, template);\n break;\n }\n\n abstractNum.addLevel(level);\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a multi-level list with mixed formats\n * @param abstractNumId The abstract numbering ID\n */\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Multi-Level List',\n multiLevelType: 1,\n });\n\n // Level 0: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, '%1.'));\n\n // Level 1: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, '%2.'));\n\n // Level 2: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, '%3.'));\n\n // Level 3: 1, 2, 3, ... (with more indent)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, '%4.'));\n\n return abstractNum;\n }\n\n /**\n * Creates an outline list abstract numbering\n * @param abstractNumId The abstract numbering ID\n */\n static createOutlineList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Outline List',\n multiLevelType: 1,\n });\n\n // Level 0: I, II, III, ...\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, '%1.'));\n\n // Level 1: A, B, C, ...\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, '%2.'));\n\n // Level 2: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, '%3.'));\n\n // Level 3: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, '%4.'));\n\n // Level 4: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, '%5.'));\n\n // Level 5: A, B, C, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, '%6.'));\n\n // Level 6: 1, 2, 3, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, '%7.'));\n\n // Level 7: a, b, c, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, '%8.'));\n\n // Level 8: i, ii, iii, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, '%9.'));\n\n return abstractNum;\n }\n\n /**\n * Factory method for creating an abstract numbering definition\n * @param properties The abstract numbering properties\n */\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\n return new AbstractNumbering(properties);\n }\n\n /**\n * Creates an AbstractNumbering from XML element\n * @param xml The XML string of the <w:abstractNum> element\n * @returns AbstractNumbering instance\n */\n static fromXML(xml: string): AbstractNumbering {\n // Extract abstractNumId (required)\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\n if (!abstractNumIdMatch?.[1]) {\n throw new Error('Missing required w:abstractNumId attribute');\n }\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\n\n // Extract name (optional)\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\n\n // Extract multiLevelType (optional)\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n let multiLevelType = 1; // default to multilevel\n if (multiLevelTypeMatch?.[1]) {\n const value = multiLevelTypeMatch[1];\n if (value === 'singleLevel') multiLevelType = 0;\n else if (value === 'multilevel') multiLevelType = 1;\n else if (value === 'hybridMultilevel') multiLevelType = 2;\n }\n\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\n\n // Extract styleLink (optional, ECMA-376 §17.9.27)\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const styleLink = styleLinkMatch?.[1] || undefined;\n\n // Extract template code (optional, ECMA-376 §17.9.30)\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const tmpl = tmplMatch?.[1] || undefined;\n\n // Create abstract numbering\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name,\n multiLevelType,\n numStyleLink,\n styleLink,\n tmpl,\n });\n\n // Extract and parse all levels\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\n const lvlMatches = xml.match(lvlRegex);\n\n if (lvlMatches) {\n for (const lvlXml of lvlMatches) {\n try {\n const level = NumberingLevel.fromXML(lvlXml);\n abstractNum.addLevel(level);\n } catch (error: unknown) {\n // Skip malformed levels but continue parsing\n defaultLogger.warn(`Failed to parse level: ${error}`);\n }\n }\n }\n\n return abstractNum;\n }\n}\n"]}
1
+ {"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":";;;AAQA,kDAA2D;AAC3D,qDAAkD;AAClD,4CAAgD;AAqChD,MAAa,iBAAiB;IACpB,aAAa,CAAS;IACtB,IAAI,CAAU;IACd,MAAM,CAA8B;IACpC,cAAc,CAAS;IACvB,YAAY,CAAU;IACtB,SAAS,CAAU;IACnB,IAAI,CAAU;IACd,IAAI,CAAU;IAOtB,YAAY,SAA+C,EAAE,IAAa;QAExE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAElC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YAEN,MAAM,UAAU,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;YAC9C,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;YAEhE,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtB,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAKO,QAAQ;QACd,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAKD,KAAK;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAKD,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAKO,MAAM,CAAC,YAAY;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC;aAC/C,QAAQ,CAAC,EAAE,CAAC;aACZ,WAAW,EAAE;aACb,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAMD,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,iBAAiB;QACf,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,kBAAkB,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAMD,iBAAiB,CAAC,IAAuD;QACvE,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAMD,eAAe,CAAC,IAAwB;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAMD,YAAY,CAAC,IAAwB;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAMD,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ,CAAC,KAAqB;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEpC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,SAAS,CAAC,MAAwB;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAKD,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAMD,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAMD,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAKD,KAAK;QACH,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAKlC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,IAAI,mBAA2B,CAAC;QAChC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC9B,mBAAmB,GAAG,YAAY,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACrC,mBAAmB,GAAG,kBAAkB,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,aAAa,CAAC;QACtC,CAAC;QAED,QAAQ,CAAC,IAAI,CACX,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;YACjC,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CACH,CAAC;QAGF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAGD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAGH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,uBAAU,CAAC,CAAC,CACjB,aAAa,EACb,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,EACpD,QAAQ,CACT,CAAC;IACJ,CAAC;IAyBD,MAAM,CAAC,gBAAgB,CACrB,aAAqB,EACrB,MAAM,GAAG,CAAC,EACV,OAAkB;QAElB,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,aAAa;YACnB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAElC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBAClD,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBAEN,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAQD,MAAM,CAAC,kBAAkB,CACvB,aAAqB,EACrB,MAAM,GAAG,CAAC,EACV,UAAuF;QACrF,SAAS;QACT,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;KACb;QAED,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,eAAe;YACrB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAE9B,IAAI,KAAqB,CAAC;YAC1B,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,aAAa;oBAChB,KAAK,GAAG,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,GAAG,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,GAAG,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,GAAG,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,SAAS,CAAC;gBACf;oBACE,KAAK,GAAG,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM;YACV,CAAC;YAED,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,oBAAoB,CAAC,aAAqB;QAC/C,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,kBAAkB;YACxB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAGH,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAElE,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,iBAAiB,CAAC,aAAqB;QAC5C,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,cAAc;YACpB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAGH,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAErE,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,MAAM,CAAC,UAAuC;QACnD,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAOD,MAAM,CAAC,OAAO,CAAC,GAAW;QAExB,MAAM,kBAAkB,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAG1D,MAAM,SAAS,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAIvD,MAAM,mBAAmB,GAAG,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,aAAa;gBAAE,cAAc,GAAG,CAAC,CAAC;iBAC3C,IAAI,KAAK,KAAK,YAAY;gBAAE,cAAc,GAAG,CAAC,CAAC;iBAC/C,IAAI,KAAK,KAAK,kBAAkB;gBAAE,cAAc,GAAG,CAAC,CAAC;QAC5D,CAAC;QAGD,MAAM,iBAAiB,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGzD,MAAM,cAAc,GAAG,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGnD,MAAM,SAAS,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGzC,MAAM,SAAS,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGzC,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI;YACJ,cAAc;YACd,YAAY;YACZ,SAAS;YACT,IAAI;YACJ,IAAI;SACL,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,gCAAgC,CAAC;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,+BAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC7C,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBAExB,sBAAa,CAAC,IAAI,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AA7jBD,8CA6jBC","sourcesContent":["/**\n * AbstractNumbering - Defines a multi-level numbering scheme\n *\n * An abstract numbering definition is a template that defines up to 9 levels of\n * list formatting. It's referenced by numbering instances which link it to actual\n * paragraphs in the document.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { NumberingLevel } from './NumberingLevel';\nimport { defaultLogger } from '../utils/logger';\n\n/**\n * Properties for creating an abstract numbering definition\n */\nexport interface AbstractNumberingProperties {\n /** Unique identifier for this abstract numbering */\n abstractNumId: number;\n\n /** Optional name for the numbering scheme */\n name?: string;\n\n /** The numbering levels (up to 9 levels, 0-8) */\n levels?: NumberingLevel[];\n\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\n multiLevelType?: number;\n\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\n numStyleLink?: string;\n\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\n styleLink?: string;\n\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\n tmpl?: string;\n\n /** Namespace-scoped unique ID (ECMA-376 §17.9.17) - 8-char hex string */\n nsid?: string;\n}\n\n/**\n * Represents an abstract numbering definition\n *\n * Abstract numbering defines the template for a multi-level list. Each instance\n * of a list in the document references an abstract numbering definition.\n */\nexport class AbstractNumbering {\n private abstractNumId: number;\n private name?: string;\n private levels: Map<number, NumberingLevel>;\n private multiLevelType: number;\n private numStyleLink?: string;\n private styleLink?: string;\n private tmpl?: string;\n private nsid?: string;\n\n /**\n * Creates a new abstract numbering definition\n * @param idOrProps The abstract numbering ID (number) or properties object\n * @param name Optional name (if first param is a number)\n */\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\n // Support both simple (numId) and object constructor patterns\n if (typeof idOrProps === 'number') {\n // Simple constructor: new AbstractNumbering(id)\n this.abstractNumId = idOrProps;\n this.name = name;\n this.levels = new Map();\n this.multiLevelType = 1; // default multilevel\n this.nsid = AbstractNumbering.generateNsid();\n } else {\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\n const properties = idOrProps;\n this.abstractNumId = properties.abstractNumId;\n this.name = properties.name;\n this.levels = new Map();\n this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\n this.numStyleLink = properties.numStyleLink;\n this.styleLink = properties.styleLink;\n this.tmpl = properties.tmpl;\n this.nsid = properties.nsid ?? AbstractNumbering.generateNsid();\n\n if (properties.levels) {\n properties.levels.forEach((level) => {\n this.addLevel(level);\n });\n }\n }\n\n this.validate();\n }\n\n /**\n * Validates the abstract numbering\n */\n private validate(): void {\n if (this.abstractNumId < 0) {\n throw new Error('Abstract numbering ID must be non-negative');\n }\n\n if (this.levels.size > 9) {\n throw new Error('Cannot have more than 9 levels (0-8)');\n }\n }\n\n /**\n * Gets the abstract numbering ID\n */\n getAbstractNumId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Alias for getAbstractNumId for backward compatibility\n */\n getId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Gets the namespace-scoped unique ID (ECMA-376 §17.9.17)\n */\n getNsid(): string | undefined {\n return this.nsid;\n }\n\n /**\n * Sets the namespace-scoped unique ID\n */\n setNsid(nsid: string): void {\n this.nsid = nsid;\n }\n\n /**\n * Generates a random 8-character uppercase hex nsid value\n */\n private static generateNsid(): string {\n const hex = Math.floor(Math.random() * 0xffffffff)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0');\n return hex;\n }\n\n /**\n * Gets the name\n */\n getName(): string | undefined {\n return this.name;\n }\n\n /**\n * Sets the name\n * @param name The numbering scheme name\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the multi-level type\n */\n getMultiLevelType(): string {\n if (this.multiLevelType === 1) {\n return 'multilevel';\n } else if (this.multiLevelType === 2) {\n return 'hybridMultilevel';\n } else {\n return 'singleLevel';\n }\n }\n\n /**\n * Sets the multi-level type\n * @param type The multi-level type ('multilevel' or 'singleLevel')\n */\n setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this {\n if (type === 'multilevel') {\n this.multiLevelType = 1;\n } else if (type === 'hybridMultilevel') {\n this.multiLevelType = 2;\n } else {\n this.multiLevelType = 0;\n }\n return this;\n }\n\n /**\n * Gets the numStyleLink (reference to a numbering style definition)\n */\n getNumStyleLink(): string | undefined {\n return this.numStyleLink;\n }\n\n /**\n * Sets the numStyleLink\n * @param link The numbering style name\n */\n setNumStyleLink(link: string | undefined): this {\n this.numStyleLink = link;\n return this;\n }\n\n /**\n * Gets the styleLink (reference to a style that uses this abstract numbering)\n */\n getStyleLink(): string | undefined {\n return this.styleLink;\n }\n\n /**\n * Sets the styleLink\n * @param link The style name\n */\n setStyleLink(link: string | undefined): this {\n this.styleLink = link;\n return this;\n }\n\n /**\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\n */\n getTemplate(): string | undefined {\n return this.tmpl;\n }\n\n /**\n * Sets the template code\n * @param tmpl 8-char hex string identifying the template\n */\n setTemplate(tmpl: string): this {\n this.tmpl = tmpl;\n return this;\n }\n\n /**\n * Adds a numbering level\n * @param level The numbering level to add\n */\n addLevel(level: NumberingLevel): this {\n const levelIndex = level.getLevel();\n\n if (levelIndex < 0 || levelIndex > 8) {\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\n }\n\n this.levels.set(levelIndex, level);\n return this;\n }\n\n /**\n * Adds multiple numbering levels at once\n * @param levels The numbering levels to add\n */\n addLevels(levels: NumberingLevel[]): this {\n levels.forEach((level) => this.addLevel(level));\n return this;\n }\n\n /**\n * Gets a numbering level by index\n * @param levelIndex The level index (0-8)\n */\n getLevel(levelIndex: number): NumberingLevel | undefined {\n return this.levels.get(levelIndex);\n }\n\n /**\n * Gets all levels\n */\n getAllLevels(): NumberingLevel[] {\n return Array.from(this.levels.values()).sort((a, b) => a.getLevel() - b.getLevel());\n }\n\n /**\n * Alias for getAllLevels for backward compatibility\n */\n getLevels(): NumberingLevel[] {\n return this.getAllLevels();\n }\n\n /**\n * Gets the number of levels defined\n */\n getLevelCount(): number {\n return this.levels.size;\n }\n\n /**\n * Checks if a level exists\n * @param levelIndex The level index (0-8)\n */\n hasLevel(levelIndex: number): boolean {\n return this.levels.has(levelIndex);\n }\n\n /**\n * Removes a level\n * @param levelIndex The level index (0-8)\n */\n removeLevel(levelIndex: number): boolean {\n return this.levels.delete(levelIndex);\n }\n\n /**\n * Generates the WordprocessingML XML for this abstract numbering\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\n\n // 1. nsid (ECMA-376 §17.9.17) — namespace-scoped unique identifier\n if (this.nsid) {\n children.push(XMLBuilder.wSelf('nsid', { 'w:val': this.nsid }));\n }\n\n // 2. multiLevelType\n let multiLevelTypeValue: string;\n if (this.multiLevelType === 1) {\n multiLevelTypeValue = 'multilevel';\n } else if (this.multiLevelType === 2) {\n multiLevelTypeValue = 'hybridMultilevel';\n } else {\n multiLevelTypeValue = 'singleLevel';\n }\n\n children.push(\n XMLBuilder.wSelf('multiLevelType', {\n 'w:val': multiLevelTypeValue,\n })\n );\n\n // Add template code (position 3 per CT_AbstractNum)\n if (this.tmpl) {\n children.push(XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));\n }\n\n // Add name if present\n if (this.name) {\n children.push(XMLBuilder.wSelf('name', { 'w:val': this.name }));\n }\n\n // Add styleLink / numStyleLink if present\n if (this.styleLink) {\n children.push(XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));\n }\n if (this.numStyleLink) {\n children.push(XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));\n }\n\n // Add all levels in order\n const sortedLevels = this.getAllLevels();\n sortedLevels.forEach((level) => {\n children.push(level.toXML());\n });\n\n // If no levels defined, add a default level 0\n if (sortedLevels.length === 0) {\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\n }\n\n return XMLBuilder.w(\n 'abstractNum',\n { 'w:abstractNumId': this.abstractNumId.toString() },\n children\n );\n }\n\n /**\n * Creates a bullet list abstract numbering with specified levels\n *\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\n *\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\n *\n * @example\n * // Standard bullet list\n * const bulletList = AbstractNumbering.createBulletList(1);\n *\n * @example\n * // Custom bullets using helper method\n * const bullets = [];\n * for (let i = 0; i < 9; i++) {\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\n * bullets.push(symbol);\n * }\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\n */\n static createBulletList(\n abstractNumId: number,\n levels = 9,\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Bullet List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n if (bullets && bullets.length > 0) {\n // Custom bullets provided - use them with default font\n const bullet = bullets[i % bullets.length] || '•';\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\n } else {\n // No custom bullets - use Word-native encoding (correct font per level)\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\n }\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a numbered list abstract numbering with specified levels\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param formats Array of formats for each level\n */\n static createNumberedList(\n abstractNumId: number,\n levels = 9,\n formats: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[] = [\n 'decimal',\n 'lowerLetter',\n 'lowerRoman',\n 'upperLetter',\n 'upperRoman',\n ]\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Numbered List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n const format = formats[i % formats.length] || 'decimal';\n const template = `%${i + 1}.`;\n\n let level: NumberingLevel;\n switch (format) {\n case 'lowerLetter':\n level = NumberingLevel.createLowerLetterLevel(i, template);\n break;\n case 'lowerRoman':\n level = NumberingLevel.createLowerRomanLevel(i, template);\n break;\n case 'upperLetter':\n level = NumberingLevel.createUpperLetterLevel(i, template);\n break;\n case 'upperRoman':\n level = NumberingLevel.createUpperRomanLevel(i, template);\n break;\n case 'decimal':\n default:\n level = NumberingLevel.createDecimalLevel(i, template);\n break;\n }\n\n abstractNum.addLevel(level);\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a multi-level list with mixed formats\n * @param abstractNumId The abstract numbering ID\n */\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Multi-Level List',\n multiLevelType: 1,\n });\n\n // Level 0: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, '%1.'));\n\n // Level 1: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, '%2.'));\n\n // Level 2: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, '%3.'));\n\n // Level 3: 1, 2, 3, ... (with more indent)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, '%4.'));\n\n return abstractNum;\n }\n\n /**\n * Creates an outline list abstract numbering\n * @param abstractNumId The abstract numbering ID\n */\n static createOutlineList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Outline List',\n multiLevelType: 1,\n });\n\n // Level 0: I, II, III, ...\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, '%1.'));\n\n // Level 1: A, B, C, ...\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, '%2.'));\n\n // Level 2: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, '%3.'));\n\n // Level 3: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, '%4.'));\n\n // Level 4: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, '%5.'));\n\n // Level 5: A, B, C, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, '%6.'));\n\n // Level 6: 1, 2, 3, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, '%7.'));\n\n // Level 7: a, b, c, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, '%8.'));\n\n // Level 8: i, ii, iii, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, '%9.'));\n\n return abstractNum;\n }\n\n /**\n * Factory method for creating an abstract numbering definition\n * @param properties The abstract numbering properties\n */\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\n return new AbstractNumbering(properties);\n }\n\n /**\n * Creates an AbstractNumbering from XML element\n * @param xml The XML string of the <w:abstractNum> element\n * @returns AbstractNumbering instance\n */\n static fromXML(xml: string): AbstractNumbering {\n // Extract abstractNumId (required)\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\n if (!abstractNumIdMatch?.[1]) {\n throw new Error('Missing required w:abstractNumId attribute');\n }\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\n\n // Extract name (optional)\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\n\n // Extract multiLevelType (optional)\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n let multiLevelType = 1; // default to multilevel\n if (multiLevelTypeMatch?.[1]) {\n const value = multiLevelTypeMatch[1];\n if (value === 'singleLevel') multiLevelType = 0;\n else if (value === 'multilevel') multiLevelType = 1;\n else if (value === 'hybridMultilevel') multiLevelType = 2;\n }\n\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\n\n // Extract styleLink (optional, ECMA-376 §17.9.27)\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const styleLink = styleLinkMatch?.[1] || undefined;\n\n // Extract template code (optional, ECMA-376 §17.9.30)\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const tmpl = tmplMatch?.[1] || undefined;\n\n // Extract nsid (optional, ECMA-376 §17.9.17) — 8-char hex namespace ID\n const nsidMatch = /<w:nsid[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const nsid = nsidMatch?.[1] || undefined;\n\n // Create abstract numbering\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name,\n multiLevelType,\n numStyleLink,\n styleLink,\n tmpl,\n nsid,\n });\n\n // Extract and parse all levels\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\n const lvlMatches = xml.match(lvlRegex);\n\n if (lvlMatches) {\n for (const lvlXml of lvlMatches) {\n try {\n const level = NumberingLevel.fromXML(lvlXml);\n abstractNum.addLevel(level);\n } catch (error: unknown) {\n // Skip malformed levels but continue parsing\n defaultLogger.warn(`Failed to parse level: ${error}`);\n }\n }\n }\n\n return abstractNum;\n }\n}\n"]}