docxmlater 10.3.3 → 10.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +14 -5
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/RelationshipManager.js +2 -2
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +18 -3
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Table.d.ts +4 -0
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +30 -4
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +14 -0
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +60 -24
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/package.json +1 -1
- package/src/core/DocumentParser.ts +25 -5
- package/src/core/RelationshipManager.ts +3 -3
- package/src/elements/Section.ts +19 -3
- package/src/elements/Table.ts +55 -4
- package/src/elements/TableCell.ts +15 -2
- package/src/tracking/DocumentTrackingContext.ts +76 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/elements/Table.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Table - Represents a table in a document\n */\n\nimport { Paragraph } from './Paragraph';\nimport { TableRow, RowFormatting } from './TableRow';\nimport { TableCell, CellFormatting } from './TableCell';\nimport { Run } from './Run';\nimport { Revision } from './Revision';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { deepClone } from '../utils/deepClone';\nimport {\n TableAlignment as CommonTableAlignment,\n BorderStyle,\n BorderDefinition,\n TableBorderDefinitions,\n HorizontalAnchor,\n VerticalAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n WidthType,\n ShadingPattern,\n ShadingConfig,\n buildShadingAttributes,\n} from './CommonTypes';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Table alignment\n * @see CommonTypes.TableAlignment\n */\nexport type TableAlignment = CommonTableAlignment;\n\n/**\n * Table layout type\n */\nexport type TableLayout = 'auto' | 'autofit' | 'fixed';\n\n/**\n * Table border definition (same as cell borders)\n * @see CommonTypes.BorderDefinition\n */\nexport interface TableBorder {\n style?: BorderStyle;\n size?: number;\n space?: number; // Border spacing (padding) in points\n color?: string;\n}\n\n/**\n * Table borders\n * @see CommonTypes.TableBorderDefinitions\n */\nexport interface TableBorders {\n top?: TableBorder;\n bottom?: TableBorder;\n left?: TableBorder;\n right?: TableBorder;\n insideH?: TableBorder; // Inside horizontal borders\n insideV?: TableBorder; // Inside vertical borders\n}\n\n/**\n * Horizontal anchor for table positioning\n * @see CommonTypes.HorizontalAnchor\n */\nexport type TableHorizontalAnchor = HorizontalAnchor;\n\n/**\n * Vertical anchor for table positioning\n * @see CommonTypes.VerticalAnchor\n */\nexport type TableVerticalAnchor = VerticalAnchor;\n\n/**\n * Horizontal alignment for relative table positioning\n * @see CommonTypes.HorizontalAlignment\n */\nexport type TableHorizontalAlignment = HorizontalAlignment;\n\n/**\n * Vertical alignment for relative table positioning\n * @see CommonTypes.VerticalAlignment\n */\nexport type TableVerticalAlignment = VerticalAlignment;\n\n/**\n * Table positioning properties (for floating tables)\n * Per ECMA-376 Part 1 §17.4.57 (tblpPr)\n */\nexport interface TablePositionProperties {\n /** Horizontal position in twips (absolute positioning) */\n x?: number;\n /** Vertical position in twips (absolute positioning) */\n y?: number;\n /** Horizontal anchor/positioning base */\n horizontalAnchor?: TableHorizontalAnchor;\n /** Vertical anchor/positioning base */\n verticalAnchor?: TableVerticalAnchor;\n /** Horizontal alignment (relative positioning) */\n horizontalAlignment?: TableHorizontalAlignment;\n /** Vertical alignment (relative positioning) */\n verticalAlignment?: TableVerticalAlignment;\n /** Left padding from anchor in twips */\n leftFromText?: number;\n /** Right padding from anchor in twips */\n rightFromText?: number;\n /** Top padding from anchor in twips */\n topFromText?: number;\n /** Bottom padding from anchor in twips */\n bottomFromText?: number;\n}\n\n/**\n * Table width type\n */\nexport type TableWidthType = 'auto' | 'dxa' | 'pct';\n\n/**\n * Table shading/background\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type TableShading = ShadingConfig;\n\n/**\n * Table formatting options\n */\n/**\n * Table cell margins (padding inside cells)\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n */\nexport interface TableCellMargins {\n /** Top margin in twips */\n top?: number;\n /** Bottom margin in twips */\n bottom?: number;\n /** Left margin in twips */\n left?: number;\n /** Right margin in twips */\n right?: number;\n}\n\n/**\n * Table formatting options\n */\nexport interface TableFormatting {\n style?: string; // Table style ID (e.g., 'Table1', 'TableGrid')\n width?: number; // Table width in twips\n widthType?: TableWidthType; // Width type (auto, dxa=twips, pct=percentage)\n alignment?: TableAlignment;\n layout?: TableLayout;\n borders?: TableBorders;\n cellSpacing?: number; // Cell spacing in twips\n cellSpacingType?: TableWidthType; // Cell spacing type\n cellMargins?: TableCellMargins; // Default cell margins (padding) for all cells\n indent?: number; // Left indent in twips\n tblLook?: string; // Table look flags (appearance settings)\n shading?: TableShading; // Table background shading\n // Batch 1 properties\n position?: TablePositionProperties; // Floating table positioning\n overlap?: boolean; // Allow table overlap with other floating tables\n bidiVisual?: boolean; // Right-to-left table layout\n tableGrid?: number[]; // Column widths in twips\n caption?: string; // Table caption for accessibility\n description?: string; // Table description for accessibility\n tblStyleRowBandSize?: number; // Number of rows in each row band for style alternation\n tblStyleColBandSize?: number; // Number of columns in each column band for style alternation\n}\n\n/**\n * First row formatting options for table headers\n */\nexport interface FirstRowFormattingOptions {\n /** Text alignment in cells */\n alignment?: 'left' | 'center' | 'right';\n /** Bold text */\n bold?: boolean;\n /** Italic text */\n italic?: boolean;\n /** Underline text */\n underline?: boolean | 'single' | 'double' | 'thick' | 'dotted' | 'dash';\n /** Spacing before paragraph (in twips) */\n spacingBefore?: number;\n /** Spacing after paragraph (in twips) */\n spacingAfter?: number;\n /** Background color (hex without #) */\n shading?: string;\n}\n\n/**\n * Represents a table\n */\n/**\n * Table property change tracking (w:tblPrChange)\n * Per ECMA-376 Part 1 §17.13.5.36\n */\nexport interface TblPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\nexport class Table {\n private rows: TableRow[] = [];\n private formatting: TableFormatting;\n /** StylesManager reference for conditional formatting resolution */\n private _stylesManager?: import('../formatting/StylesManager').StylesManager;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table property change tracking (w:tblPrChange) */\n private tblPrChange?: TblPrChange;\n\n /**\n * Creates a new Table\n * @param rows - Number of rows to create (optional)\n * @param columns - Number of columns per row (optional)\n * @param formatting - Table formatting options\n */\n constructor(rows?: number, columns?: number, formatting: TableFormatting = {}) {\n // Set default width if not specified\n // Per ECMA-376, tables require <w:tblW> element for Word compatibility\n // Default: Letter page width (12240 twips) minus standard margins (2*1440 twips) = 9360 twips\n if (formatting.width === undefined) {\n formatting.width = 9360; // ~6.5 inches\n }\n\n this.formatting = formatting;\n\n if (rows !== undefined && rows > 0 && columns !== undefined && columns > 0) {\n for (let i = 0; i < rows; i++) {\n const row = new TableRow(columns);\n row._setParentTable(this);\n this.rows.push(row);\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 property change tracking info\n */\n getTblPrChange(): TblPrChange | undefined {\n return this.tblPrChange;\n }\n\n /**\n * Sets the table property change tracking info\n */\n setTblPrChange(change: TblPrChange | undefined): void {\n this.tblPrChange = change;\n }\n\n /**\n * Clears the table property change tracking\n */\n clearTblPrChange(): void {\n this.tblPrChange = undefined;\n }\n\n /**\n * Adds a row to the table\n *\n * Appends a TableRow instance to the end of the table.\n *\n * @param row - The TableRow instance to add\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * const table = new Table();\n * const row = new TableRow(3);\n * table.addRow(row);\n * ```\n */\n addRow(row: TableRow): this {\n this.rows.push(row);\n row._setParentTable(this);\n return this;\n }\n\n /**\n * Creates a new row and adds it to the table\n *\n * Convenience method that creates a TableRow and appends it in one operation.\n *\n * @param cellCount - Number of cells to create in the row\n * @param formatting - Optional row formatting properties\n * @returns The created TableRow instance for further customization\n *\n * @example\n * ```typescript\n * const table = new Table();\n * const row = table.createRow(4);\n * row.getCell(0)?.addParagraph(new Paragraph().addText('Cell 1'));\n * ```\n */\n createRow(cellCount?: number, formatting?: RowFormatting): TableRow {\n const row = new TableRow(cellCount, formatting);\n this.rows.push(row);\n row._setParentTable(this);\n return row;\n }\n\n /**\n * Gets a row by its index\n *\n * @param index - The row index (0-based, where 0 is the first row)\n * @returns The TableRow at the specified index, or undefined if index is out of bounds\n *\n * @example\n * ```typescript\n * const firstRow = table.getRow(0);\n * const secondRow = table.getRow(1);\n * if (firstRow) {\n * console.log(`First row has ${firstRow.getCellCount()} cells`);\n * }\n * ```\n */\n getRow(index: number): TableRow | undefined {\n return this.rows[index];\n }\n\n /**\n * Gets all rows in the table\n *\n * Returns a copy of the rows array to prevent external modification.\n *\n * @returns Array of all TableRow instances\n *\n * @example\n * ```typescript\n * const rows = table.getRows();\n * console.log(`Table has ${rows.length} rows`);\n * for (const row of rows) {\n * console.log(`Row has ${row.getCellCount()} cells`);\n * }\n * ```\n */\n getRows(): TableRow[] {\n return [...this.rows];\n }\n\n /**\n * Gets the first paragraph in the table (first cell of first row)\n * @returns The first paragraph, or null if the table is empty\n */\n getFirstParagraph(): Paragraph | null {\n if (this.rows.length === 0) return null;\n const firstRow = this.rows[0];\n if (!firstRow) return null;\n const cells = firstRow.getCells();\n if (cells.length === 0) return null;\n const paras = cells[0]?.getParagraphs();\n return paras && paras.length > 0 ? (paras[0] ?? null) : null;\n }\n\n /**\n * Gets the last paragraph in the table (last cell of last row)\n * @returns The last paragraph, or null if the table is empty\n */\n getLastParagraph(): Paragraph | null {\n for (let r = this.rows.length - 1; r >= 0; r--) {\n const row = this.rows[r];\n if (!row) continue;\n const cells = row.getCells();\n for (let c = cells.length - 1; c >= 0; c--) {\n const cell = cells[c];\n if (!cell) continue;\n const paras = cell.getParagraphs();\n if (paras.length > 0) {\n return paras[paras.length - 1] ?? null;\n }\n }\n }\n return null;\n }\n\n /**\n * Gets the total number of rows in the table\n *\n * @returns Number of rows\n *\n * @example\n * ```typescript\n * console.log(`Table has ${table.getRowCount()} rows`);\n * ```\n */\n getRowCount(): number {\n return this.rows.length;\n }\n\n /**\n * Gets a specific cell by row and column indices\n *\n * @param rowIndex - The row index (0-based)\n * @param columnIndex - The column index (0-based)\n * @returns The TableCell at the specified position, or undefined if indices are out of bounds\n *\n * @example\n * ```typescript\n * const cell = table.getCell(0, 0); // Top-left cell\n * if (cell) {\n * cell.addParagraph(new Paragraph().addText('A1'));\n * }\n *\n * // Access cell in third row, second column\n * const cell2 = table.getCell(2, 1);\n * ```\n */\n getCell(rowIndex: number, columnIndex: number): TableCell | undefined {\n const row = this.getRow(rowIndex);\n return row ? row.getCell(columnIndex) : undefined;\n }\n\n /**\n * Sets the table width\n *\n * Defines the total width of the table. Use with {@link setWidthType}\n * to specify if width is in twips, percentage, or auto.\n *\n * @param twips - Width value (interpretation depends on widthType)\n * - For 'dxa' (default): Width in twips (1/20th of a point)\n * - For 'pct': Percentage * 50 (e.g., 5000 = 100%)\n * - For 'auto': Value is ignored\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setWidth(9360); // 6.5 inches in twips\n * table.setWidth(5000).setWidthType('pct'); // 100% width\n * ```\n */\n setWidth(twips: number): this {\n const prev = this.formatting.width;\n this.formatting.width = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'width', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets table horizontal alignment\n *\n * Controls where the table is positioned horizontally on the page.\n *\n * @param alignment - Alignment value ('left' |'center' | 'right')\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setAlignment('center'); // Center the table on page\n * table.setAlignment('right'); // Align table to right margin\n * ```\n */\n setAlignment(alignment: TableAlignment): this {\n const prev = this.formatting.alignment;\n this.formatting.alignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'alignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets table layout algorithm\n *\n * Controls how table column widths are calculated.\n *\n * @param layout - Layout type\n * - 'auto': Columns auto-fit to content and window width\n * - 'fixed': Columns use fixed widths (faster rendering)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setLayout('auto'); // Auto-fit to window\n * table.setLayout('fixed'); // Use fixed column widths\n * ```\n */\n setLayout(layout: TableLayout): this {\n const prev = this.formatting.layout;\n // Normalize \"auto\" to \"autofit\" per ECMA-376 ST_TblLayoutType (§17.18.87)\n this.formatting.layout = layout === 'auto' ? 'autofit' : layout;\n if (this.trackingContext?.isEnabled() && prev !== this.formatting.layout) {\n this.trackingContext.trackTableChange(this, 'layout', prev, this.formatting.layout);\n }\n return this;\n }\n\n /**\n * Sets table borders\n *\n * Defines borders for all sides of the table and interior borders.\n * By default, also applies borders to all cells within the table for consistency.\n *\n * @param borders - Border definitions for each edge\n * @param borders.top - Top border of table\n * @param borders.bottom - Bottom border of table\n * @param borders.left - Left border of table\n * @param borders.right - Right border of table\n * @param borders.insideH - Horizontal borders between rows\n * @param borders.insideV - Vertical borders between columns\n * @param options - Additional options\n * @param options.applyToCells - Whether to also set borders on all cells (default: true)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // Set borders on table AND all cells (default behavior)\n * table.setBorders({\n * top: { style: 'single', size: 4, color: '000000' },\n * bottom: { style: 'single', size: 4, color: '000000' },\n * insideH: { style: 'single', size: 2, color: 'CCCCCC' },\n * insideV: { style: 'single', size: 2, color: 'CCCCCC' }\n * });\n *\n * // Set only table-level borders (no cell borders)\n * table.setBorders({ top: { style: 'single', size: 4 } }, { applyToCells: false });\n * ```\n */\n setBorders(borders: TableBorders, options?: { applyToCells?: boolean }): this {\n const prev = this.formatting.borders;\n // Set table-level borders (w:tblBorders)\n this.formatting.borders = borders;\n if (this.trackingContext?.isEnabled() && prev !== borders) {\n this.trackingContext.trackTableChange(this, 'borders', prev, borders);\n }\n\n // Also apply to all cells for consistency (default: true)\n if (options?.applyToCells !== false) {\n const cellBorders = {\n top: borders.top,\n bottom: borders.bottom,\n left: borders.left,\n right: borders.right,\n };\n\n for (const row of this.rows) {\n // Update row-level table property exceptions if they have borders\n // Per ECMA-376, w:tblPrEx can contain border overrides that must also be updated\n const exceptions = row.getTablePropertyExceptions();\n if (exceptions?.borders) {\n row.setTablePropertyExceptions({\n ...exceptions,\n borders: borders, // Use full table borders for row-level exceptions\n });\n }\n\n // Update cell borders\n for (const cell of row.getCells()) {\n cell.setBorders(cellBorders);\n }\n }\n }\n\n return this;\n }\n\n /**\n * Sets all borders to the same style\n *\n * Convenience method that applies identical borders to all edges\n * (top, bottom, left, right, insideH, insideV) and all cells.\n *\n * @param border - Border definition to apply uniformly\n * @param options - Additional options\n * @param options.applyToCells - Whether to also set borders on all cells (default: true)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // Apply single black border to all edges and cells\n * table.setAllBorders({\n * style: 'single',\n * size: 4,\n * color: '000000'\n * });\n *\n * // Apply only to table, not individual cells\n * table.setAllBorders({ style: 'single', size: 4 }, { applyToCells: false });\n * ```\n */\n setAllBorders(border: TableBorder, options?: { applyToCells?: boolean }): this {\n return this.setBorders(\n {\n top: border,\n bottom: border,\n left: border,\n right: border,\n insideH: border,\n insideV: border,\n },\n options\n );\n }\n\n /**\n * Sets shading (background color) for the first row of the table\n * Useful for header rows in data tables\n * @param color - Hex color without # (e.g., 'DFDFDF' for light gray)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.setFirstRowShading('DFDFDF'); // Light gray header\n * ```\n */\n setFirstRowShading(color: string): this {\n if (this.rows.length > 0) {\n const firstRow = this.rows[0];\n if (firstRow) {\n for (const cell of firstRow.getCells()) {\n cell.setShading({ fill: color });\n }\n }\n }\n return this;\n }\n\n /**\n * Sets comprehensive formatting for the first row of the table\n *\n * This is ideal for formatting table headers with alignment, text formatting,\n * spacing, and background color in a single call.\n *\n * @param options - Formatting options for the first row\n * @returns This table for chaining\n * @example\n * ```typescript\n * // Create a formatted table header\n * table.setFirstRowFormatting({\n * alignment: 'center',\n * bold: true,\n * spacingBefore: 120,\n * spacingAfter: 120,\n * shading: 'DFDFDF'\n * });\n *\n * // Format header with underline and custom spacing\n * table.setFirstRowFormatting({\n * alignment: 'left',\n * bold: true,\n * underline: 'single',\n * spacingAfter: 80\n * });\n * ```\n */\n setFirstRowFormatting(options: FirstRowFormattingOptions): this {\n if (this.rows.length === 0) {\n return this; // No rows to format\n }\n\n const firstRow = this.rows[0];\n if (!firstRow) {\n return this;\n }\n\n // Apply formatting to each cell in the first row\n for (const cell of firstRow.getCells()) {\n const paragraphs = cell.getParagraphs();\n\n // Apply shading to the cell if specified\n if (options.shading) {\n cell.setShading({ fill: options.shading });\n }\n\n // Apply formatting to each paragraph in the cell\n for (const para of paragraphs) {\n // Apply paragraph alignment\n if (options.alignment) {\n para.setAlignment(options.alignment as any);\n }\n\n // Apply spacing\n if (options.spacingBefore !== undefined) {\n para.setSpaceBefore(options.spacingBefore);\n }\n if (options.spacingAfter !== undefined) {\n para.setSpaceAfter(options.spacingAfter);\n }\n\n // Apply run formatting to all runs in the paragraph\n const runs = para.getRuns();\n for (const run of runs) {\n // Apply formatting using run's setter methods\n if (options.bold !== undefined) {\n run.setBold(options.bold);\n }\n if (options.italic !== undefined) {\n run.setItalic(options.italic);\n }\n if (options.underline !== undefined) {\n run.setUnderline(options.underline);\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * Sets cell spacing\n * @param twips - Cell spacing in twips\n * @returns This table for chaining\n */\n setCellSpacing(twips: number): this {\n const prev = this.formatting.cellSpacing;\n this.formatting.cellSpacing = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'cellSpacing', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets left indent\n * @param twips - Indent in twips\n * @returns This table for chaining\n */\n setIndent(twips: number): this {\n const prev = this.formatting.indent;\n this.formatting.indent = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'indent', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets table style reference\n * @param style - Table style ID (e.g., 'Table1', 'TableGrid')\n * @returns This table for chaining\n */\n setStyle(style: string): this {\n const prev = this.formatting.style;\n this.formatting.style = style;\n if (this.trackingContext?.isEnabled() && prev !== style) {\n this.trackingContext.trackTableChange(this, 'style', prev, style);\n }\n return this;\n }\n\n /**\n * Sets table look flags (appearance settings)\n * @param tblLook - Table look value (e.g., '0000', '04A0')\n * @returns This table for chaining\n */\n setTblLook(tblLook: string): this {\n const prev = this.formatting.tblLook;\n this.formatting.tblLook = tblLook;\n if (this.trackingContext?.isEnabled() && prev !== tblLook) {\n this.trackingContext.trackTableChange(this, 'tblLook', prev, tblLook);\n }\n return this;\n }\n\n /**\n * Sets the number of rows in each row band for table style alternation\n * Per ECMA-376 Part 1 §17.4.52\n * @param size - Number of rows per band (default: 1)\n * @returns This table for chaining\n */\n setStyleRowBandSize(size: number): this {\n const prev = this.formatting.tblStyleRowBandSize;\n this.formatting.tblStyleRowBandSize = size;\n if (this.trackingContext?.isEnabled() && prev !== size) {\n this.trackingContext.trackTableChange(this, 'tblStyleRowBandSize', prev, size);\n }\n return this;\n }\n\n /**\n * Sets the number of columns in each column band for table style alternation\n * Per ECMA-376 Part 1 §17.4.51\n * @param size - Number of columns per band (default: 1)\n * @returns This table for chaining\n */\n setStyleColBandSize(size: number): this {\n const prev = this.formatting.tblStyleColBandSize;\n this.formatting.tblStyleColBandSize = size;\n if (this.trackingContext?.isEnabled() && prev !== size) {\n this.trackingContext.trackTableChange(this, 'tblStyleColBandSize', prev, size);\n }\n return this;\n }\n\n /**\n * Decodes tblLook hex string into boolean flags\n * Per ECMA-376 Part 1 Section 17.4.56\n * @returns Object with boolean flags for each tblLook property\n */\n getTblLookFlags(): {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n noHBand: boolean;\n noVBand: boolean;\n } {\n const hex = this.formatting.tblLook || '0000';\n const value = parseInt(hex, 16) || 0;\n\n return {\n firstRow: (value & 0x0020) !== 0,\n lastRow: (value & 0x0040) !== 0,\n firstColumn: (value & 0x0080) !== 0,\n lastColumn: (value & 0x0100) !== 0,\n noHBand: (value & 0x0200) !== 0,\n noVBand: (value & 0x0400) !== 0,\n };\n }\n\n /**\n * Applies conditional formatting to table cells based on rules\n *\n * Enables advanced table formatting including:\n * - Automatic header row detection and styling\n * - Alternating row colors (zebra striping)\n * - Content-based formatting rules\n *\n * @param rules - Conditional formatting rules\n * @returns This table for chaining\n *\n * @example\n * ```typescript\n * // Apply header formatting and alternating rows\n * table.applyConditionalFormatting({\n * headerRow: true,\n * alternatingRows: {\n * even: { shading: { fill: 'F0F0F0' } },\n * odd: { shading: { fill: 'FFFFFF' } }\n * }\n * });\n *\n * // Custom header formatting\n * table.applyConditionalFormatting({\n * headerRow: {\n * shading: { fill: '4472C4' },\n * textColor: 'FFFFFF'\n * }\n * });\n *\n * // Content-based formatting\n * table.applyConditionalFormatting({\n * contentRules: [\n * {\n * condition: (text, row, col) => parseFloat(text) > 1000,\n * formatting: { shading: { fill: 'FFD700' } } // Gold for large numbers\n * },\n * {\n * condition: (text) => text.toLowerCase().includes('error'),\n * formatting: { shading: { fill: 'FF0000' } } // Red for errors\n * }\n * ]\n * });\n *\n * // Combined rules\n * table.applyConditionalFormatting({\n * headerRow: { shading: { fill: '2F5496' } },\n * alternatingRows: {\n * even: { shading: { fill: 'D9E1F2' } }\n * },\n * contentRules: [\n * {\n * condition: (text, row, col) => col === 0 && row > 0,\n * formatting: { textColor: '000000' }\n * }\n * ]\n * });\n * ```\n */\n applyConditionalFormatting(rules: {\n headerRow?: boolean | Partial<CellFormatting>;\n alternatingRows?: {\n even?: Partial<CellFormatting>;\n odd?: Partial<CellFormatting>;\n };\n contentRules?: {\n condition: (cellText: string, rowIndex: number, colIndex: number) => boolean;\n formatting: Partial<CellFormatting>;\n }[];\n }): this {\n const rows = this.getRows();\n\n // Apply header row formatting\n if (rules.headerRow && rows.length > 0) {\n const headerFormatting: Partial<CellFormatting> =\n rules.headerRow === true\n ? { shading: { fill: '4472C4' } } // Default blue header\n : rules.headerRow;\n\n const headerRow = rows[0];\n if (headerRow) {\n for (const cell of headerRow.getCells()) {\n this.applyCellFormatting(cell, headerFormatting);\n }\n }\n }\n\n // Apply alternating rows\n if (rules.alternatingRows) {\n rows.forEach((row, index) => {\n const isEven = index % 2 === 0;\n const formatting = isEven ? rules.alternatingRows?.even : rules.alternatingRows?.odd;\n\n if (formatting) {\n for (const cell of row.getCells()) {\n this.applyCellFormatting(cell, formatting);\n }\n }\n });\n }\n\n // Apply content-based rules\n if (rules.contentRules && rules.contentRules.length > 0) {\n rows.forEach((row, rowIndex) => {\n row.getCells().forEach((cell, colIndex) => {\n const cellText = cell\n .getParagraphs()\n .map((p) => p.getText())\n .join('');\n\n for (const rule of rules.contentRules!) {\n if (rule.condition(cellText, rowIndex, colIndex)) {\n this.applyCellFormatting(cell, rule.formatting);\n }\n }\n });\n });\n }\n\n return this;\n }\n\n /**\n * Helper method to apply formatting to a cell\n * @private\n */\n private applyCellFormatting(cell: TableCell, formatting: Partial<CellFormatting>): void {\n // Apply shading\n if (formatting.shading) {\n cell.setShading(formatting.shading);\n }\n\n // Apply borders\n if (formatting.borders) {\n cell.setBorders(formatting.borders);\n }\n\n // Apply text direction\n if (formatting.textDirection) {\n cell.setTextDirection(formatting.textDirection);\n }\n\n // Apply vertical alignment\n if (formatting.verticalAlignment) {\n cell.setVerticalAlignment(formatting.verticalAlignment);\n }\n\n // Apply width\n if (formatting.width !== undefined) {\n cell.setWidth(formatting.width);\n }\n\n // Apply margins\n if (formatting.margins) {\n cell.setMargins(formatting.margins);\n }\n }\n\n /**\n * Sets table positioning properties for floating tables\n * Per ECMA-376 Part 1 §17.4.57\n * @param position - Table position properties\n * @returns This table for chaining\n * @example\n * ```typescript\n * // Position table at absolute coordinates\n * table.setPosition({\n * x: 1440, // 1 inch from left\n * y: 1440, // 1 inch from top\n * horizontalAnchor: 'page',\n * verticalAnchor: 'page'\n * });\n *\n * // Position table with relative alignment\n * table.setPosition({\n * horizontalAlignment: 'center',\n * verticalAlignment: 'top',\n * horizontalAnchor: 'margin',\n * verticalAnchor: 'page'\n * });\n * ```\n */\n setPosition(position: TablePositionProperties): this {\n const prev = this.formatting.position;\n this.formatting.position = position;\n if (this.trackingContext?.isEnabled() && prev !== position) {\n this.trackingContext.trackTableChange(this, 'position', prev, position);\n }\n return this;\n }\n\n /**\n * Sets whether table can overlap with other floating tables\n * Per ECMA-376 Part 1 §17.4.30\n * @param overlap - True to allow overlap, false to prevent\n * @returns This table for chaining\n */\n setOverlap(overlap: boolean): this {\n const prev = this.formatting.overlap;\n this.formatting.overlap = overlap;\n if (this.trackingContext?.isEnabled() && prev !== overlap) {\n this.trackingContext.trackTableChange(this, 'overlap', prev, overlap);\n }\n return this;\n }\n\n /**\n * Sets bidirectional (right-to-left) visual layout\n * Per ECMA-376 Part 1 §17.4.1\n * @param bidi - True for RTL layout, false for LTR\n * @returns This table for chaining\n */\n setBidiVisual(bidi: boolean): this {\n const prev = this.formatting.bidiVisual;\n this.formatting.bidiVisual = bidi;\n if (this.trackingContext?.isEnabled() && prev !== bidi) {\n this.trackingContext.trackTableChange(this, 'bidiVisual', prev, bidi);\n }\n return this;\n }\n\n /**\n * Sets table grid column widths\n * Per ECMA-376 Part 1 §17.4.49\n * @param widths - Array of column widths in twips\n * @returns This table for chaining\n * @example\n * ```typescript\n * // 3 columns: 2 inches, 3 inches, 2 inches\n * table.setTableGrid([2880, 4320, 2880]);\n * ```\n */\n setTableGrid(widths: number[]): this {\n const prev = this.formatting.tableGrid;\n this.formatting.tableGrid = widths;\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackTableChange(this, 'tableGrid', prev, widths);\n }\n return this;\n }\n\n /**\n * Sets table caption for accessibility\n * Per ECMA-376 Part 1 §17.4.58\n * @param caption - Table caption text\n * @returns This table for chaining\n */\n setCaption(caption: string): this {\n const prev = this.formatting.caption;\n this.formatting.caption = caption;\n if (this.trackingContext?.isEnabled() && prev !== caption) {\n this.trackingContext.trackTableChange(this, 'caption', prev, caption);\n }\n return this;\n }\n\n /**\n * Sets table description for accessibility\n * Per ECMA-376 Part 1 §17.4.63\n * @param description - Table description text\n * @returns This table for chaining\n */\n setDescription(description: string): this {\n const prev = this.formatting.description;\n this.formatting.description = description;\n if (this.trackingContext?.isEnabled() && prev !== description) {\n this.trackingContext.trackTableChange(this, 'description', prev, description);\n }\n return this;\n }\n\n /**\n * Sets table-level shading (background)\n *\n * Per ECMA-376 Part 1 §17.4.56 (w:shd), this sets the default\n * background shading for the entire table. Individual cells can\n * override this with their own shading.\n *\n * @param shading - Table shading configuration\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setShading({ fill: 'F0F0F0' }); // Light gray background\n * table.setShading({ fill: 'FFFFFF', pattern: 'pct12', color: '000000' });\n * ```\n */\n setShading(shading: TableShading): this {\n const prev = this.formatting.shading;\n this.formatting.shading = shading;\n if (this.trackingContext?.isEnabled() && prev !== shading) {\n this.trackingContext.trackTableChange(this, 'shading', prev, shading);\n }\n return this;\n }\n\n /**\n * Gets table-level shading configuration\n * @returns Table shading or undefined if not set\n */\n getShading(): TableShading | undefined {\n return this.formatting.shading;\n }\n\n /**\n * Sets table width type\n *\n * Defines how the table width value should be interpreted.\n * Per ECMA-376 Part 1 §17.4.64\n *\n * @param type - Width interpretation type\n * - 'auto': Automatic width (ignores width value)\n * - 'dxa': Width in twips (1/20th of a point)\n * - 'pct': Width as percentage (value * 50 = percentage, e.g., 5000 = 100%)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setWidth(5000).setWidthType('pct'); // 100% page width\n * table.setWidth(9360).setWidthType('dxa'); // 6.5 inches (absolute)\n * table.setWidthType('auto'); // Auto-fit content\n * ```\n */\n setWidthType(type: TableWidthType): this {\n const prev = this.formatting.widthType;\n this.formatting.widthType = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackTableChange(this, 'widthType', prev, type);\n }\n return this;\n }\n\n /**\n * Sets cell spacing type\n * @param type - Cell spacing type\n * @returns This table for chaining\n */\n setCellSpacingType(type: TableWidthType): this {\n const prev = this.formatting.cellSpacingType;\n this.formatting.cellSpacingType = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prev, type);\n }\n return this;\n }\n\n /**\n * Gets a copy of the table formatting\n *\n * Returns a copy of all formatting properties including width, alignment,\n * layout, borders, and other table-level settings.\n *\n * @returns Copy of the table formatting object\n *\n * @example\n * ```typescript\n * const formatting = table.getFormatting();\n * console.log(`Width: ${formatting.width} twips`);\n * console.log(`Layout: ${formatting.layout}`);\n * ```\n */\n getFormatting(): TableFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the table width in twips\n * @returns Width in twips or undefined if not set\n */\n getWidth(): number | undefined {\n return this.formatting.width;\n }\n\n /**\n * Gets the table width type\n * @returns Width type ('auto', 'dxa', 'pct', 'nil') or undefined\n */\n getWidthType(): string | undefined {\n return this.formatting.widthType;\n }\n\n /**\n * Gets the table horizontal alignment\n * @returns Alignment ('left', 'center', 'right') or undefined\n */\n getAlignment(): string | undefined {\n return this.formatting.alignment;\n }\n\n /**\n * Gets the table layout type\n * @returns Layout ('autofit', 'fixed') or undefined\n */\n getLayout(): string | undefined {\n return this.formatting.layout;\n }\n\n /**\n * Gets the table left indentation in twips\n * @returns Indent in twips or undefined if not set\n */\n getIndent(): number | undefined {\n return this.formatting.indent;\n }\n\n /**\n * Gets the table borders\n * @returns Borders object or undefined\n */\n getBorders(): TableFormatting['borders'] | undefined {\n return this.formatting.borders;\n }\n\n /**\n * Gets the column widths (table grid)\n * @returns Array of column widths in twips\n */\n getColumnWidths(): number[] {\n return [...(this.formatting.tableGrid || [])];\n }\n\n /**\n * Gets the cell spacing value\n * @returns Cell spacing in twips or undefined\n */\n getCellSpacing(): number | undefined {\n return this.formatting.cellSpacing;\n }\n\n /**\n * Gets the default cell margins (padding) for all cells\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n * @returns Cell margins object or undefined if not set\n */\n getCellMargins(): TableCellMargins | undefined {\n return this.formatting.cellMargins;\n }\n\n /**\n * Sets the default cell margins (padding) for all cells\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n * @param margins - Cell margins in twips\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.setCellMargins({ top: 43, left: 115, bottom: 43, right: 115 });\n * ```\n */\n setCellMargins(margins: TableCellMargins): this {\n const prev = this.formatting.cellMargins;\n this.formatting.cellMargins = margins;\n if (this.trackingContext?.isEnabled() && prev !== margins) {\n this.trackingContext.trackTableChange(this, 'cellMargins', prev, margins);\n }\n return this;\n }\n\n /**\n * Gets the table style ID\n * @returns Style ID or undefined if not set\n */\n getStyle(): string | undefined {\n return this.formatting.style;\n }\n\n /**\n * Gets the raw table look (tblLook) value\n * @returns Table look hex string or undefined if not set\n */\n getTblLook(): string | undefined {\n return this.formatting.tblLook;\n }\n\n /**\n * Gets the table position properties for floating tables\n * @returns Table position properties or undefined if not set\n */\n getPosition(): TablePositionProperties | undefined {\n return this.formatting.position ? { ...this.formatting.position } : undefined;\n }\n\n /**\n * Gets whether table can overlap with other floating tables\n * @returns True if overlap is allowed, false if not, undefined if not set\n */\n getOverlap(): boolean | undefined {\n return this.formatting.overlap;\n }\n\n /**\n * Gets whether bidirectional (RTL) visual layout is enabled\n * @returns True if RTL layout, false if LTR, undefined if not set\n */\n getBidiVisual(): boolean | undefined {\n return this.formatting.bidiVisual;\n }\n\n /**\n * Gets the table grid column widths\n * @returns Array of column widths in twips, or undefined if not set\n */\n getTableGrid(): number[] | undefined {\n return this.formatting.tableGrid ? [...this.formatting.tableGrid] : undefined;\n }\n\n /**\n * Gets the table caption for accessibility\n * @returns Caption text or undefined if not set\n */\n getCaption(): string | undefined {\n return this.formatting.caption;\n }\n\n /**\n * Gets the table description for accessibility\n * @returns Description text or undefined if not set\n */\n getDescription(): string | undefined {\n return this.formatting.description;\n }\n\n /**\n * Gets the cell spacing type\n * @returns Cell spacing type or undefined if not set\n */\n getCellSpacingType(): TableWidthType | undefined {\n return this.formatting.cellSpacingType;\n }\n\n // ============================================================================\n // Checker Methods\n // ============================================================================\n\n /**\n * Checks if the table has any rows\n * @returns True if table has rows\n */\n hasRows(): boolean {\n return this.rows.length > 0;\n }\n\n /**\n * Checks if the table is a floating table (has positioning)\n * @returns True if table has positioning properties\n */\n isFloating(): boolean {\n return this.formatting.position !== undefined;\n }\n\n /**\n * Checks if the table has a style applied\n * @returns True if table has a style\n */\n hasStyle(): boolean {\n return this.formatting.style !== undefined && this.formatting.style !== '';\n }\n\n /**\n * Sets the StylesManager reference for conditional formatting resolution.\n * Propagates to all paragraphs in all cells.\n * @internal\n */\n _setStylesManager(manager: import('../formatting/StylesManager').StylesManager): void {\n this._stylesManager = manager;\n // Propagate to all paragraphs in all cells\n for (const row of this.rows) {\n for (const cell of row.getCells()) {\n for (const para of cell.getParagraphs()) {\n para._setStylesManager(manager);\n }\n }\n }\n }\n\n /**\n * Gets the StylesManager reference for conditional formatting resolution.\n * @internal\n */\n _getStylesManager(): import('../formatting/StylesManager').StylesManager | undefined {\n return this._stylesManager;\n }\n\n /**\n * Converts the table to WordprocessingML XML element\n * @returns XMLElement representing the table\n */\n toXML(): XMLElement {\n const tblPrChildren: XMLElement[] = [];\n\n // CT_TblPr element order per ECMA-376:\n // tblStyle, tblpPr, tblOverlap, bidiVisual, tblStyleRowBandSize, tblStyleColBandSize,\n // tblW, jc, tblCellSpacing, tblInd, tblBorders, shd, tblLayout, tblCellMar, tblLook,\n // tblCaption, tblDescription, tblPrChange\n\n // 1. tblStyle\n if (this.formatting.style) {\n tblPrChildren.push(XMLBuilder.wSelf('tblStyle', { 'w:val': this.formatting.style }));\n }\n\n // 2. tblpPr - table positioning properties (floating tables)\n if (this.formatting.position) {\n const pos = this.formatting.position;\n const posAttrs: Record<string, string | number> = {};\n\n if (pos.x !== undefined) posAttrs['w:tblpX'] = pos.x;\n if (pos.y !== undefined) posAttrs['w:tblpY'] = pos.y;\n if (pos.horizontalAnchor) posAttrs['w:horzAnchor'] = pos.horizontalAnchor;\n if (pos.verticalAnchor) posAttrs['w:vertAnchor'] = pos.verticalAnchor;\n if (pos.horizontalAlignment) posAttrs['w:tblpXSpec'] = pos.horizontalAlignment;\n if (pos.verticalAlignment) posAttrs['w:tblpYSpec'] = pos.verticalAlignment;\n if (pos.leftFromText !== undefined) posAttrs['w:leftFromText'] = pos.leftFromText;\n if (pos.rightFromText !== undefined) posAttrs['w:rightFromText'] = pos.rightFromText;\n if (pos.topFromText !== undefined) posAttrs['w:topFromText'] = pos.topFromText;\n if (pos.bottomFromText !== undefined) posAttrs['w:bottomFromText'] = pos.bottomFromText;\n\n if (Object.keys(posAttrs).length > 0) {\n tblPrChildren.push(XMLBuilder.wSelf('tblpPr', posAttrs));\n }\n }\n\n // 3. tblOverlap\n if (this.formatting.overlap !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblOverlap', {\n 'w:val': this.formatting.overlap ? 'overlap' : 'never',\n })\n );\n }\n\n // 4. bidiVisual\n if (this.formatting.bidiVisual) {\n tblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));\n }\n\n // 5-6. tblStyleRowBandSize / tblStyleColBandSize\n // Only valid within table style definitions (CT_TblPrBase in w:style),\n // not in direct tblPr. Style.ts handles serialization in style context.\n // Values are preserved in formatting for round-trip and style use.\n\n // 7. tblW\n if (this.formatting.width !== undefined) {\n const widthType = this.formatting.widthType || 'dxa';\n tblPrChildren.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': this.formatting.width,\n 'w:type': widthType,\n })\n );\n }\n\n // 8. jc (alignment)\n if (this.formatting.alignment) {\n tblPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': this.formatting.alignment }));\n }\n\n // 9. tblCellSpacing\n if (this.formatting.cellSpacing !== undefined) {\n const cellSpacingType = this.formatting.cellSpacingType || 'dxa';\n tblPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': this.formatting.cellSpacing,\n 'w:type': cellSpacingType,\n })\n );\n }\n\n // 10. tblInd\n if (this.formatting.indent !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblInd', {\n 'w:w': this.formatting.indent,\n 'w:type': 'dxa',\n })\n );\n }\n\n // 11. tblBorders\n if (this.formatting.borders) {\n const borderElements: XMLElement[] = [];\n const borders = this.formatting.borders;\n\n if (borders.top) {\n borderElements.push(XMLBuilder.createBorder('top', borders.top));\n }\n if (borders.left) {\n borderElements.push(XMLBuilder.createBorder('left', borders.left));\n }\n if (borders.bottom) {\n borderElements.push(XMLBuilder.createBorder('bottom', borders.bottom));\n }\n if (borders.right) {\n borderElements.push(XMLBuilder.createBorder('right', borders.right));\n }\n if (borders.insideH) {\n borderElements.push(XMLBuilder.createBorder('insideH', borders.insideH));\n }\n if (borders.insideV) {\n borderElements.push(XMLBuilder.createBorder('insideV', borders.insideV));\n }\n\n if (borderElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblBorders', undefined, borderElements));\n }\n }\n\n // 12. shd (table shading/background)\n if (this.formatting.shading) {\n const shdAttrs = buildShadingAttributes(this.formatting.shading);\n if (Object.keys(shdAttrs).length > 0) {\n tblPrChildren.push(XMLBuilder.wSelf('shd', shdAttrs));\n }\n }\n\n // 13. tblLayout\n if (this.formatting.layout) {\n tblPrChildren.push(XMLBuilder.wSelf('tblLayout', { 'w:type': this.formatting.layout }));\n }\n\n // 14. tblCellMar\n if (this.formatting.cellMargins) {\n const marginElements: XMLElement[] = [];\n if (this.formatting.cellMargins.top !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('top', {\n 'w:w': this.formatting.cellMargins.top,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.left !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('left', {\n 'w:w': this.formatting.cellMargins.left,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.bottom !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': this.formatting.cellMargins.bottom,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.right !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('right', {\n 'w:w': this.formatting.cellMargins.right,\n 'w:type': 'dxa',\n })\n );\n }\n if (marginElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblCellMar', undefined, marginElements));\n }\n }\n\n // 15. tblLook\n if (this.formatting.tblLook) {\n tblPrChildren.push(XMLBuilder.wSelf('tblLook', { 'w:val': this.formatting.tblLook }));\n }\n\n // Add table caption (accessibility)\n if (this.formatting.caption) {\n tblPrChildren.push(XMLBuilder.wSelf('tblCaption', { 'w:val': this.formatting.caption }));\n }\n\n // Add table description (accessibility)\n if (this.formatting.description) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblDescription', {\n 'w:val': this.formatting.description,\n })\n );\n }\n\n // Add table property change (w:tblPrChange) per ECMA-376 Part 1 §17.13.5.36\n // Must be last child of w:tblPr\n if (this.tblPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.tblPrChange.id,\n 'w:author': this.tblPrChange.author,\n 'w:date': this.tblPrChange.date,\n };\n const prevTblPrChildren: XMLElement[] = [];\n const prev = this.tblPrChange.previousProperties;\n if (prev) {\n if (prev.style) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblStyle', { 'w:val': prev.style }));\n }\n if (prev.width !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': prev.width,\n 'w:type': prev.widthType || 'dxa',\n })\n );\n }\n if (prev.alignment) {\n prevTblPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': prev.alignment }));\n }\n if (prev.indent !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblInd', { 'w:w': prev.indent, 'w:type': 'dxa' })\n );\n }\n if (prev.borders) {\n const borderChildren: XMLElement[] = [];\n const bNames = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const;\n for (const name of bNames) {\n const b = prev.borders[name];\n if (b) {\n const bAttrs: Record<string, string | number> = {};\n if (b.style) bAttrs['w:val'] = b.style;\n if (b.size !== undefined) bAttrs['w:sz'] = b.size;\n if (b.color) bAttrs['w:color'] = b.color;\n borderChildren.push(XMLBuilder.wSelf(name, bAttrs));\n }\n }\n if (borderChildren.length > 0) {\n prevTblPrChildren.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\n }\n }\n if (prev.shading) {\n const shadingAttrs = buildShadingAttributes(prev.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n prevTblPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n if (prev.layout) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblLayout', { 'w:type': prev.layout }));\n }\n if (prev.cellSpacing !== undefined) {\n const csAttrs: Record<string, string | number> = {\n 'w:w': prev.cellSpacing,\n 'w:type': prev.cellSpacingType || 'dxa',\n };\n prevTblPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', csAttrs));\n }\n if (prev.bidiVisual) {\n prevTblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));\n }\n if (prev.cellMargins) {\n const cmChildren: XMLElement[] = [];\n for (const side of ['top', 'start', 'bottom', 'end'] as const) {\n const val = (prev.cellMargins as Record<string, number | undefined>)[side];\n if (val !== undefined) {\n cmChildren.push(XMLBuilder.wSelf(side, { 'w:w': val, 'w:type': 'dxa' }));\n }\n }\n if (cmChildren.length > 0) {\n prevTblPrChildren.push(XMLBuilder.w('tblCellMar', undefined, cmChildren));\n }\n }\n if (prev.tblLook) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblLook', { 'w:val': prev.tblLook }));\n }\n if (prev.tblStyleRowBandSize !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblStyleRowBandSize', { 'w:val': prev.tblStyleRowBandSize })\n );\n }\n if (prev.tblStyleColBandSize !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblStyleColBandSize', { 'w:val': prev.tblStyleColBandSize })\n );\n }\n if (prev.overlap) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblOverlap', { 'w:val': prev.overlap }));\n }\n if (prev.caption) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblCaption', { 'w:val': prev.caption }));\n }\n if (prev.description) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblDescription', { 'w:val': prev.description }));\n }\n }\n const prevTblPr = XMLBuilder.w('tblPr', undefined, prevTblPrChildren);\n tblPrChildren.push(XMLBuilder.w('tblPrChange', changeAttrs, [prevTblPr]));\n }\n\n // Build table element\n const tableChildren: XMLElement[] = [];\n\n // Add table properties\n tableChildren.push(XMLBuilder.w('tblPr', undefined, tblPrChildren));\n\n // Add table grid (column definitions)\n // Per ECMA-376 Part 1 §17.4.49, w:tblGrid MUST be present in w:tbl\n // Use custom tableGrid if specified, otherwise auto-generate\n // CRITICAL: Use getTotalGridSpan() instead of getCellCount() to account for\n // cells with gridSpan (column span). A row with 2 cells where one spans 4 columns\n // should generate 5 grid columns, not 2.\n const gridWidths = this.formatting.tableGrid;\n const maxColumns = gridWidths\n ? gridWidths.length\n : Math.max(...this.rows.map((row) => row.getTotalGridSpan()), 0);\n\n // Always generate tblGrid - use at least 1 column for empty tables\n const gridColumnCount = maxColumns > 0 ? maxColumns : 1;\n const tblGridChildren: XMLElement[] = [];\n\n for (let i = 0; i < gridColumnCount; i++) {\n if (gridWidths?.[i] !== undefined) {\n // Use specified grid width\n tblGridChildren.push(XMLBuilder.wSelf('gridCol', { 'w:w': gridWidths[i] }));\n } else {\n // Auto width (default to 2880 twips = 2 inches)\n tblGridChildren.push(XMLBuilder.wSelf('gridCol', { 'w:w': 2880 }));\n }\n }\n tableChildren.push(XMLBuilder.w('tblGrid', undefined, tblGridChildren));\n\n // Add rows\n for (const row of this.rows) {\n tableChildren.push(row.toXML());\n }\n\n return XMLBuilder.w('tbl', undefined, tableChildren);\n }\n\n /**\n * Removes a row from the table\n *\n * Deletes the row at the specified index and shifts subsequent rows up.\n *\n * @param index - The row index to remove (0-based)\n * @returns True if the row was removed, false if index was invalid\n *\n * @example\n * ```typescript\n * table.removeRow(0); // Remove first row\n * table.removeRow(2); // Remove third row\n * ```\n */\n removeRow(index: number): boolean {\n if (index >= 0 && index < this.rows.length) {\n // When tracking enabled, mark cells with cellDel and wrap content in w:del\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n const row = this.rows[index]!;\n for (const cell of row.getCells()) {\n const cellDelRevision = Revision.createTableCellDelete(author, []);\n cell.setCellRevision(cellDelRevision);\n // Wrap paragraph runs in w:del so content appears as deleted\n for (const para of cell.getParagraphs()) {\n const runs = para.getRuns();\n if (runs.length > 0) {\n const deletion = Revision.createDeletion(author, runs);\n para.addRevision(deletion);\n }\n }\n }\n return true;\n }\n this.rows.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Inserts a row at a specific position\n *\n * Inserts a new row at the specified index. If no row is provided,\n * creates an empty row with columns matching the table's column count.\n *\n * @param index - Position to insert at (0-based, clamped to valid range)\n * @param row - Optional TableRow to insert (creates new row if not provided)\n * @returns The inserted TableRow instance\n *\n * @example\n * ```typescript\n * // Insert empty row at beginning\n * const row = table.insertRow(0);\n *\n * // Insert custom row in the middle\n * const customRow = new TableRow(3);\n * table.insertRow(2, customRow);\n * ```\n */\n insertRow(index: number, row?: TableRow): TableRow {\n // Clamp index to valid range\n if (index < 0) index = 0;\n if (index > this.rows.length) index = this.rows.length;\n\n // Create new row if not provided, matching the column count\n if (!row) {\n const columnCount = this.getColumnCount();\n row = new TableRow(columnCount);\n }\n\n // Insert the row\n this.rows.splice(index, 0, row);\n\n // When tracking enabled, mark every cell in the new row with cellIns\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (const cell of row.getCells()) {\n const revision = Revision.createTableCellInsert(author, []);\n cell.setCellRevision(revision);\n }\n }\n\n return row;\n }\n\n /**\n * Adds a column to all rows in the table\n *\n * Inserts a new cell in each row at the specified position.\n * If no index is provided, adds the column at the end.\n *\n * @param index - Optional position to insert the column (0-based, defaults to end)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.addColumn(); // Add column at end\n * table.addColumn(0); // Insert column at beginning\n * table.addColumn(2); // Insert column at position 2\n * ```\n */\n addColumn(index?: number): this {\n const isTracking = this.trackingContext?.isEnabled();\n const author = isTracking ? this.trackingContext!.getAuthor() : '';\n\n for (const row of this.rows) {\n const cell = new TableCell();\n\n // Mark cell as inserted when tracking\n if (isTracking) {\n const revision = Revision.createTableCellInsert(author, []);\n cell.setCellRevision(revision);\n }\n\n const cells = row.getCells();\n\n if (index === undefined || index >= cells.length) {\n // Add to end\n row.addCell(cell);\n } else {\n // Insert at specific position\n const idx = Math.max(0, index);\n row.insertCellAt(idx, cell);\n }\n }\n return this;\n }\n\n /**\n * Removes a column from all rows in the table\n *\n * Deletes the cell at the specified column index in every row.\n *\n * @param index - The column index to remove (0-based)\n * @returns True if the column was removed from at least one row, false if index was invalid\n *\n * @example\n * ```typescript\n * table.removeColumn(0); // Remove first column\n * table.removeColumn(2); // Remove third column\n * ```\n */\n removeColumn(index: number): boolean {\n if (index < 0 || this.rows.length === 0) {\n return false;\n }\n\n // When tracking enabled, mark cells with cellDel instead of removing\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n let marked = false;\n for (const row of this.rows) {\n const cells = row.getCells();\n if (index < cells.length) {\n const revision = Revision.createTableCellDelete(author, []);\n cells[index]!.setCellRevision(revision);\n marked = true;\n }\n }\n return marked;\n }\n\n let removed = false;\n for (const row of this.rows) {\n const cells = row.getCells();\n if (index < cells.length) {\n row.removeCellAt(index);\n removed = true;\n }\n }\n\n return removed;\n }\n\n /**\n * Gets the maximum column count across all rows\n *\n * Returns the highest number of cells in any row. Useful since\n * rows may have different numbers of cells.\n *\n * @returns Maximum number of columns in the table\n *\n * @example\n * ```typescript\n * console.log(`Table has up to ${table.getColumnCount()} columns`);\n * ```\n */\n getColumnCount(): number {\n if (this.rows.length === 0) {\n return 0;\n }\n return Math.max(...this.rows.map((row) => row.getCellCount()));\n }\n\n /**\n * Sets specific widths for table columns\n *\n * Defines the width of each column. Use null for auto-width columns.\n *\n * @param widths - Array of column widths in twips (null = auto width)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // First column 2\", second column 3\", third auto\n * table.setColumnWidths([2880, 4320, null]);\n * ```\n */\n setColumnWidths(widths: (number | null)[]): this {\n // Use tableGrid (the property that toXML() actually reads)\n // Convert null values to undefined for auto-width handling in toXML()\n this.formatting.tableGrid = widths.map((w) => (w === null ? undefined : w)) as number[];\n return this;\n }\n\n /**\n * Creates a new Table instance\n *\n * Factory method for creating a table with specified dimensions and formatting.\n *\n * @param rows - Number of rows to create\n * @param columns - Number of columns per row\n * @param formatting - Optional table formatting properties\n * @returns New Table instance\n *\n * @example\n * ```typescript\n * const table = Table.create(3, 4); // 3 rows × 4 columns\n * const styledTable = Table.create(2, 3, {\n * alignment: 'center',\n * layout: 'auto'\n * });\n * ```\n */\n static create(rows?: number, columns?: number, formatting?: TableFormatting): Table {\n return new Table(rows, columns, formatting);\n }\n\n /**\n * Merges cells into a single cell (uses columnSpan and rowSpan)\n * @param startRow - Starting row index (0-based)\n * @param startCol - Starting column index (0-based)\n * @param endRow - Ending row index (0-based, inclusive)\n * @param endCol - Ending column index (0-based, inclusive)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.mergeCells(0, 0, 0, 2); // Merge cells across columns in first row\n * table.mergeCells(0, 0, 2, 0); // Merge cells down rows in first column\n * ```\n */\n mergeCells(startRow: number, startCol: number, endRow: number, endCol: number): this {\n // Validate bounds\n if (startRow < 0 || endRow >= this.rows.length || startCol < 0 || endCol < 0) {\n return this;\n }\n\n // Validate that end position is >= start position\n if (endRow < startRow || endCol < startCol) {\n return this;\n }\n\n const cell = this.getCell(startRow, startCol);\n if (!cell) {\n return this;\n }\n\n // Check for merge conflicts - cells already part of another merge region\n // This prevents undefined behavior when merging overlapping regions\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const checkCell = this.getCell(row, col);\n if (!checkCell) continue;\n\n // Check if cell is already part of a vertical merge\n const vMerge = checkCell.getVerticalMerge();\n if (vMerge) {\n // Allow if this is the start cell and it's a 'restart' (we'll overwrite it)\n if (row === startRow && col === startCol && vMerge === 'restart') {\n continue;\n }\n // Cell is part of an existing vertical merge - conflict\n throw new Error(\n `Cannot merge cells: Cell at row ${row}, column ${col} is already part of a vertical merge region. ` +\n `Use splitCell() or clear existing merges before creating new merge regions.`\n );\n }\n\n // Check if cell has a column span > 1 (already part of horizontal merge)\n const colSpan = checkCell.getColumnSpan();\n if (colSpan > 1) {\n // Allow if this is the start cell (we'll overwrite its span)\n if (row === startRow && col === startCol) {\n continue;\n }\n // Cell has existing column span - conflict\n throw new Error(\n `Cannot merge cells: Cell at row ${row}, column ${col} already has a column span of ${colSpan}. ` +\n `Use splitCell() or clear existing merges before creating new merge regions.`\n );\n }\n }\n }\n\n // Set column span if merging horizontally\n if (endCol > startCol) {\n cell.setColumnSpan(endCol - startCol + 1);\n }\n\n // Set vertical merge if merging vertically\n if (endRow > startRow) {\n // First cell starts the merge region\n cell.setVerticalMerge('restart');\n\n // Subsequent cells continue the merge\n for (let row = startRow + 1; row <= endRow; row++) {\n const mergeCell = this.getCell(row, startCol);\n if (mergeCell) {\n mergeCell.setVerticalMerge('continue');\n // If also merging horizontally, set column span on all merged cells\n if (endCol > startCol) {\n mergeCell.setColumnSpan(endCol - startCol + 1);\n }\n }\n }\n }\n\n // When tracking, mark absorbed cells with cellMerge\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n // Skip the start cell\n if (row === startRow && col === startCol) continue;\n const absorbedCell = this.getCell(row, col);\n if (absorbedCell) {\n const revision = Revision.createTableCellMerge(author, []);\n absorbedCell.setCellRevision(revision);\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * Splits a cell (removes column/row span)\n * @param row - Row index (0-based)\n * @param col - Column index (0-based)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.splitCell(0, 0); // Remove any spanning from cell\n * ```\n */\n splitCell(row: number, col: number): this {\n const cell = this.getCell(row, col);\n if (cell) {\n cell.setColumnSpan(1); // Reset to single cell\n cell.setVerticalMerge(undefined); // Clear vertical merge\n }\n return this;\n }\n\n /**\n * Checks if a merge region would conflict with existing merges\n * @param startRow - Starting row index (0-based)\n * @param startCol - Starting column index (0-based)\n * @param endRow - Ending row index (0-based, inclusive)\n * @param endCol - Ending column index (0-based, inclusive)\n * @returns Object with valid flag and list of conflicts found\n * @example\n * ```typescript\n * const result = table.canMergeCells(0, 0, 2, 2);\n * if (!result.valid) {\n * console.log('Conflicts:', result.conflicts);\n * }\n * ```\n */\n canMergeCells(\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number\n ): { valid: boolean; conflicts: string[] } {\n const conflicts: string[] = [];\n\n // Validate bounds\n if (\n startRow < 0 ||\n endRow >= this.rows.length ||\n startCol < 0 ||\n endCol < 0 ||\n endRow < startRow ||\n endCol < startCol\n ) {\n conflicts.push('Invalid cell range specified');\n return { valid: false, conflicts };\n }\n\n // Check each cell in the proposed merge region\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const checkCell = this.getCell(row, col);\n if (!checkCell) {\n conflicts.push(`Cell at row ${row}, column ${col} does not exist`);\n continue;\n }\n\n // Check if cell is already part of a vertical merge\n const vMerge = checkCell.getVerticalMerge();\n if (vMerge) {\n // Allow if this is the start cell and it's a 'restart'\n if (!(row === startRow && col === startCol && vMerge === 'restart')) {\n conflicts.push(\n `Cell at row ${row}, column ${col} is part of a vertical merge (${vMerge})`\n );\n }\n }\n\n // Check if cell has a column span > 1\n const colSpan = checkCell.getColumnSpan();\n if (colSpan > 1) {\n // Allow if this is the start cell\n if (!(row === startRow && col === startCol)) {\n conflicts.push(`Cell at row ${row}, column ${col} has column span of ${colSpan}`);\n }\n }\n }\n }\n\n return { valid: conflicts.length === 0, conflicts };\n }\n\n /**\n * Moves cell contents from one position to another\n * @param fromRow - Source row index\n * @param fromCol - Source column index\n * @param toRow - Target row index\n * @param toCol - Target column index\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.moveCell(0, 0, 1, 1); // Move cell from [0,0] to [1,1]\n * ```\n */\n moveCell(fromRow: number, fromCol: number, toRow: number, toCol: number): this {\n const fromCell = this.getCell(fromRow, fromCol);\n const toCell = this.getCell(toRow, toCol);\n\n if (!fromCell || !toCell) {\n return this;\n }\n\n // Copy all paragraphs from source to target\n const paragraphs = fromCell.getParagraphs();\n for (const para of paragraphs) {\n toCell.addParagraph(para);\n }\n\n // Copy formatting\n const formatting = fromCell.getFormatting();\n if (formatting.shading) toCell.setShading(formatting.shading);\n if (formatting.borders) toCell.setBorders(formatting.borders);\n if (formatting.width) toCell.setWidth(formatting.width);\n if (formatting.verticalAlignment) toCell.setVerticalAlignment(formatting.verticalAlignment);\n\n // Clear source cell (replace with empty paragraph)\n const row = this.getRow(fromRow);\n if (row) {\n const cells = row.getCells();\n cells[fromCol] = new TableCell();\n }\n\n return this;\n }\n\n /**\n * Swaps contents of two cells\n * @param row1 - First cell row index\n * @param col1 - First cell column index\n * @param row2 - Second cell row index\n * @param col2 - Second cell column index\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.swapCells(0, 0, 1, 1); // Swap cells at [0,0] and [1,1]\n * ```\n */\n swapCells(row1: number, col1: number, row2: number, col2: number): this {\n const row1Obj = this.getRow(row1);\n const row2Obj = this.getRow(row2);\n\n if (!row1Obj || !row2Obj) {\n return this;\n }\n\n const cells1 = row1Obj.getCells();\n const cells2 = row2Obj.getCells();\n\n if (col1 >= cells1.length || col2 >= cells2.length) {\n return this;\n }\n\n // Swap cells\n const temp = cells1[col1];\n cells1[col1] = cells2[col2]!;\n cells2[col2] = temp!;\n\n return this;\n }\n\n /**\n * Sets the width of a specific column\n *\n * Defines the width for a single column without affecting others.\n *\n * @param columnIndex - The column index (0-based)\n * @param width - Width in twips (1/20th of a point)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setColumnWidth(0, 2880); // First column = 2 inches\n * table.setColumnWidth(1, 1440); // Second column = 1 inch\n * ```\n */\n setColumnWidth(columnIndex: number, width: number): this {\n // Use tableGrid (the property that toXML() actually reads)\n const tableGrid = this.formatting.tableGrid || [];\n tableGrid[columnIndex] = width;\n this.formatting.tableGrid = tableGrid;\n return this;\n }\n\n /**\n * Inserts multiple rows at once\n * @param startIndex - Position to insert at (0-based)\n * @param count - Number of rows to insert\n * @returns Array of inserted rows\n * @example\n * ```typescript\n * const rows = table.insertRows(2, 3); // Insert 3 rows at position 2\n * ```\n */\n insertRows(startIndex: number, count: number): TableRow[] {\n const insertedRows: TableRow[] = [];\n const columnCount = this.getColumnCount();\n\n for (let i = 0; i < count; i++) {\n const row = new TableRow(columnCount);\n this.insertRow(startIndex + i, row);\n insertedRows.push(row);\n }\n\n return insertedRows;\n }\n\n /**\n * Removes multiple rows at once\n * @param startIndex - Starting position (0-based)\n * @param count - Number of rows to remove\n * @returns True if rows were removed\n * @example\n * ```typescript\n * table.removeRows(2, 3); // Remove 3 rows starting at position 2\n * ```\n */\n removeRows(startIndex: number, count: number): boolean {\n if (startIndex < 0 || startIndex >= this.rows.length || count <= 0) {\n return false;\n }\n\n const actualCount = Math.min(count, this.rows.length - startIndex);\n\n // When tracking enabled, mark each row's cells with cellDel + w:del\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (let i = startIndex; i < startIndex + actualCount; i++) {\n const row = this.rows[i]!;\n for (const cell of row.getCells()) {\n const cellDelRevision = Revision.createTableCellDelete(author, []);\n cell.setCellRevision(cellDelRevision);\n for (const para of cell.getParagraphs()) {\n const runs = para.getRuns();\n if (runs.length > 0) {\n const deletion = Revision.createDeletion(author, runs);\n para.addRevision(deletion);\n }\n }\n }\n }\n return true;\n }\n\n this.rows.splice(startIndex, actualCount);\n return actualCount > 0;\n }\n\n /**\n * Sorts table rows by the content of a specified column\n *\n * Sorts all rows based on the text content of cells in the given column.\n * By default, excludes the first row (header row) from sorting.\n *\n * @param columnIndex - Column to sort by (0-based)\n * @param options - Sort options\n * @param options.ascending - Sort ascending (default: true)\n * @param options.numeric - Treat values as numbers (default: false, string sort)\n * @param options.skipHeaderRow - Skip first row from sorting (default: true)\n * @returns This table for chaining\n *\n * @example\n * ```typescript\n * // Sort by first column alphabetically\n * table.sortRows(0);\n *\n * // Sort by third column numerically, descending\n * table.sortRows(2, { numeric: true, ascending: false });\n *\n * // Sort all rows including header\n * table.sortRows(0, { skipHeaderRow: false });\n * ```\n */\n sortRows(\n columnIndex: number,\n options?: { ascending?: boolean; numeric?: boolean; skipHeaderRow?: boolean }\n ): this {\n const ascending = options?.ascending ?? true;\n const numeric = options?.numeric ?? false;\n const skipHeaderRow = options?.skipHeaderRow ?? true;\n\n if (this.rows.length <= 1) {\n return this; // Nothing to sort\n }\n\n // Determine which rows to sort\n const headerRow = skipHeaderRow ? this.rows.shift() : null;\n const rowsToSort = [...this.rows];\n\n // Sort the rows\n rowsToSort.sort((a, b) => {\n const cellA = a.getCell(columnIndex);\n const cellB = b.getCell(columnIndex);\n\n const textA = cellA?.getText().trim() || '';\n const textB = cellB?.getText().trim() || '';\n\n let comparison: number;\n if (numeric) {\n const numA = parseFloat(textA) || 0;\n const numB = parseFloat(textB) || 0;\n comparison = numA - numB;\n } else {\n comparison = textA.localeCompare(textB);\n }\n\n return ascending ? comparison : -comparison;\n });\n\n // Reconstruct rows array\n this.rows = headerRow ? [headerRow, ...rowsToSort] : rowsToSort;\n\n return this;\n }\n\n /**\n * Creates a deep clone of this table\n *\n * Creates a new Table with copies of all rows, cells, content, and formatting.\n * The clone is completely independent of the original.\n *\n * @returns New Table instance with the same structure and content\n *\n * @example\n * ```typescript\n * const original = new Table(2, 3);\n * original.getCell(0, 0)?.addParagraph(new Paragraph().addText('Data'));\n *\n * const copy = original.clone();\n * copy.getCell(0, 0)?.addParagraph(new Paragraph().addText(' - Modified'));\n * // Original table unchanged\n * ```\n */\n clone(): Table {\n // Clone formatting\n const clonedFormatting: TableFormatting = deepClone(this.formatting);\n\n // Create new table with same structure\n const clonedTable = new Table(0, 0, clonedFormatting);\n\n // Clone all rows\n for (const row of this.rows) {\n // Clone row by creating new cells with same content\n const cells = row.getCells();\n const clonedRow = new TableRow(0);\n\n for (const cell of cells) {\n const cellFormatting = cell.getFormatting();\n const clonedCell = new TableCell(deepClone(cellFormatting));\n\n // Clone paragraphs in cell\n for (const para of cell.getParagraphs()) {\n clonedCell.addParagraph(para.clone());\n }\n\n clonedRow.addCell(clonedCell);\n }\n\n clonedTable.addRow(clonedRow);\n }\n\n return clonedTable;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/elements/Table.ts"],"names":[],"mappings":";;;AAKA,yCAAqD;AACrD,2CAAwD;AAExD,yCAAsC;AACtC,kDAA2D;AAC3D,kDAA+C;AAC/C,uDAAoD;AAEpD,+CAauB;AA6HvB,SAAS,sBAAsB,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO;QACL,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAChD,WAAW,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC/C,eAAe,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACnD,cAAc,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAClD,WAAW,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC/C,WAAW,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KAChD,CAAC;AACJ,CAAC;AA+DD,MAAa,KAAK;IACR,IAAI,GAAe,EAAE,CAAC;IACtB,UAAU,CAAkB;IAE5B,cAAc,CAAuD;IAErE,eAAe,CAAyD;IAExE,WAAW,CAAe;IAE1B,aAAa,CAAmB;IAQxC,YAAY,IAAa,EAAE,OAAgB,EAAE,aAA8B,EAAE;QAI3E,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAOD,mBAAmB,CAAC,OAA8D;QAChF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,cAAc,CAAC,MAA+B;QAC5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,CAAC;IAKD,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAKD,gBAAgB,CAAC,MAAmC;QAClD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IAC9B,CAAC;IAiBD,MAAM,CAAC,GAAa;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAkBD,SAAS,CAAC,SAAkB,EAAE,UAA0B;QACtD,MAAM,GAAG,GAAG,IAAI,mBAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAiBD,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAkBD,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAMD,iBAAiB;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;QACxC,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAMD,gBAAgB;QACd,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IAoBD,OAAO,CAAC,QAAgB,EAAE,WAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAoBD,QAAQ,CAAC,KAAa;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAgBD,YAAY,CAAC,SAAyB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAkBD,SAAS,CAAC,MAAmB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAEpC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACzE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAiCD,UAAU,CAAC,OAAqB,EAAE,OAAoC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAGD,IAAI,OAAO,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAG5B,MAAM,UAAU,GAAG,GAAG,CAAC,0BAA0B,EAAE,CAAC;gBACpD,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;oBACxB,GAAG,CAAC,0BAA0B,CAAC;wBAC7B,GAAG,UAAU;wBACb,OAAO,EAAE,OAAO;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAGD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IA0BD,aAAa,CAAC,MAAmB,EAAE,OAAoC;QACrE,OAAO,IAAI,CAAC,UAAU,CACpB;YACE,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;SAChB,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAYD,kBAAkB,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IA8BD,qBAAqB,CAAC,OAAkC;QACtD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAGxC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;YAGD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAE9B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAgB,CAAC,CAAC;gBAC9C,CAAC;gBAGD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACxC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACvC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC3C,CAAC;gBAGD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBAEvB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACjC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChC,CAAC;oBACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;wBACpC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,cAAc,CAAC,KAAa;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,SAAS,CAAC,KAAa;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,QAAQ,CAAC,KAAa;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,UAAU,CAAC,OAAe;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,mBAAmB,CAAC,IAAY;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,mBAAmB,CAAC,IAAY;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,eAAe;QAQb,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO;YACL,QAAQ,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAChC,OAAO,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,WAAW,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACnC,UAAU,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,OAAO,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,OAAO,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;SAChC,CAAC;IACJ,CAAC;IA6DD,0BAA0B,CAAC,KAU1B;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAG5B,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,gBAAgB,GACpB,KAAK,CAAC,SAAS,KAAK,IAAI;gBACtB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACjC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC;gBAErF,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;wBAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;gBAC7B,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACxC,MAAM,QAAQ,GAAG,IAAI;yBAClB,aAAa,EAAE;yBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;yBACvB,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEZ,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAa,EAAE,CAAC;wBACvC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;4BACjD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAMO,mBAAmB,CAAC,IAAe,EAAE,UAAmC;QAE9E,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAGD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QAGD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACjC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC1D,CAAC;QAGD,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IA0BD,WAAW,CAAC,QAAiC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,UAAU,CAAC,OAAgB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,aAAa,CAAC,IAAa;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAaD,YAAY,CAAC,MAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC;QACnC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC;YAG9C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;gBAClE,IAAI,CAAC,aAAa,GAAG,iCAAe,CAAC,MAAM,CACzC,eAAe,CAAC,aAAa,EAAE,EAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAChC,IAAI,IAAI,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,UAAU,CAAC,OAAe;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,cAAc,CAAC,WAAmB;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAkBD,UAAU,CAAC,OAAqB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAqBD,YAAY,CAAC,IAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,kBAAkB,CAAC,IAAoB;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAiBD,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAUD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAMD,eAAe;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACrC,CAAC;IAOD,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACrC,CAAC;IAYD,cAAc,CAAC,OAAyB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAMD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACpC,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACrC,CAAC;IAMD,kBAAkB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;IACzC,CAAC;IAUD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC;IAChD,CAAC;IAMD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;IAC7E,CAAC;IAOD,iBAAiB,CAAC,OAA4D;QAC5E,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAMD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAMD,KAAK;QACH,MAAM,aAAa,GAAiB,EAAE,CAAC;QAQvC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACrC,MAAM,QAAQ,GAAoC,EAAE,CAAC;YAErD,IAAI,GAAG,CAAC,CAAC,KAAK,SAAS;gBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,GAAG,CAAC,CAAC,KAAK,SAAS;gBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,GAAG,CAAC,gBAAgB;gBAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC;YAC1E,IAAI,GAAG,CAAC,cAAc;gBAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;YACtE,IAAI,GAAG,CAAC,mBAAmB;gBAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC;YAC/E,IAAI,GAAG,CAAC,iBAAiB;gBAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC;YAC3E,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS;gBAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC;YAClF,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS;gBAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;YACrF,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;gBAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;YAC/E,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS;gBAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;YAExF,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE;gBAC7B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;aACvD,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;QAQD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC;YACrD,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE;gBACvB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;gBAC5B,QAAQ,EAAE,SAAS;aACpB,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,CAAC;YACjE,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;gBAClC,QAAQ,EAAE,eAAe;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACzB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAExC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAA,oCAAsB,EAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAClD,cAAc,CAAC,IAAI,CACjB,uBAAU,CAAC,KAAK,CAAC,KAAK,EAAE;oBACtB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;oBACtC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnD,cAAc,CAAC,IAAI,CACjB,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE;oBACvB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI;oBACvC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrD,cAAc,CAAC,IAAI,CACjB,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;oBACzB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM;oBACzC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACpD,cAAc,CAAC,IAAI,CACjB,uBAAU,CAAC,KAAK,CAAC,OAAO,EAAE;oBACxB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK;oBACxC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAC7E,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAChB,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;aACrC,CAAC,CACH,CAAC;QACJ,CAAC;QAID,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,WAAW,GAAoC;gBACnD,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC3B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBACnC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;aAChC,CAAC;YACF,MAAM,iBAAiB,GAAiB,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;YACjD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7B,iBAAiB,CAAC,IAAI,CACpB,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;qBAClC,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC9B,iBAAiB,CAAC,IAAI,CACpB,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CACpE,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,cAAc,GAAiB,EAAE,CAAC;oBACxC,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;oBACjF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;wBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7B,IAAI,CAAC,EAAE,CAAC;4BACN,MAAM,MAAM,GAAoC,EAAE,CAAC;4BACnD,IAAI,CAAC,CAAC,KAAK;gCAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;4BACvC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;gCAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BAClD,IAAI,CAAC,CAAC,KAAK;gCAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;4BACzC,cAAc,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;wBACtD,CAAC;oBACH,CAAC;oBACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,YAAY,GAAG,IAAA,oCAAsB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzC,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACnF,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAoC;wBAC/C,KAAK,EAAE,IAAI,CAAC,WAAW;wBACvB,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;qBACxC,CAAC;oBACF,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;gBACzD,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,UAAU,GAAiB,EAAE,CAAC;oBACpC,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAU,EAAE,CAAC;wBAC9D,MAAM,GAAG,GAAI,IAAI,CAAC,WAAkD,CAAC,IAAI,CAAC,CAAC;wBAC3E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;4BACtB,UAAU,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC3E,CAAC;oBACH,CAAC;oBACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1B,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5F,CAAC;gBACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBAC3C,iBAAiB,CAAC,IAAI,CACpB,uBAAU,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAC/E,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBAC3C,iBAAiB,CAAC,IAAI,CACpB,uBAAU,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAC/E,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,iBAAiB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,uBAAU,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACtE,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAGD,MAAM,aAAa,GAAiB,EAAE,CAAC;QAGvC,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QAQpE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7C,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,UAAU,CAAC,MAAM;YACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAGnE,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,eAAe,GAAiB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAElC,eAAe,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBAEN,eAAe,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QAGxE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,uBAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAgBD,SAAS,CAAC,KAAa;QACrB,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAE3C,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,MAAM,eAAe,GAAG,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACnE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;oBAEtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;wBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpB,MAAM,QAAQ,GAAG,mBAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;4BACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAsBD,SAAS,CAAC,KAAa,EAAE,GAAc;QAErC,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAGvD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,GAAG,GAAG,IAAI,mBAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAGhC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAkBD,SAAS,CAAC,KAAc;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,qBAAS,EAAE,CAAC;YAG7B,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEjD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBAEN,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAgBD,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAChD,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC5D,KAAK,CAAC,KAAK,CAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACxC,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAeD,cAAc;QACZ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAgBD,eAAe,CAAC,MAAyB;QAGvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAa,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC;IAqBD,MAAM,CAAC,MAAM,CAAC,IAAa,EAAE,OAAgB,EAAE,UAA4B;QACzE,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAeD,UAAU,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;QAE3E,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAID,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC9C,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAGzB,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBAEX,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACjE,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,YAAY,GAAG,+CAA+C;wBAClG,6EAA6E,CAChF,CAAC;gBACJ,CAAC;gBAGD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC1C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAEhB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;wBACzC,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,YAAY,GAAG,iCAAiC,OAAO,IAAI;wBAC/F,6EAA6E,CAChF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;QAGD,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;YAEtB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAGjC,KAAK,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACd,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBAEvC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;wBACtB,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAChD,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC9C,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;oBAE9C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ;wBAAE,SAAS;oBACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5C,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,QAAQ,GAAG,mBAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;wBAC3D,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,SAAS,CAAC,GAAW,EAAE,GAAW;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAiBD,aAAa,CACX,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAc;QAEd,MAAM,SAAS,GAAa,EAAE,CAAC;QAG/B,IACE,QAAQ,GAAG,CAAC;YACZ,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAC1B,QAAQ,GAAG,CAAC;YACZ,MAAM,GAAG,CAAC;YACV,MAAM,GAAG,QAAQ;YACjB,MAAM,GAAG,QAAQ,EACjB,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACrC,CAAC;QAGD,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC9C,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,IAAI,CAAC,eAAe,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC;oBACnE,SAAS;gBACX,CAAC;gBAGD,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBAEX,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;wBACpE,SAAS,CAAC,IAAI,CACZ,eAAe,GAAG,YAAY,GAAG,iCAAiC,MAAM,GAAG,CAC5E,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAGD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC1C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAEhB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;wBAC5C,SAAS,CAAC,IAAI,CAAC,eAAe,GAAG,YAAY,GAAG,uBAAuB,OAAO,EAAE,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACtD,CAAC;IAcD,QAAQ,CAAC,OAAe,EAAE,OAAe,EAAE,KAAa,EAAE,KAAa;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAGD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,OAAO;YAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,OAAO;YAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,KAAK;YAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,iBAAiB;YAAE,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAG5F,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,qBAAS,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAcD,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAElC,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAK,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;IAiBD,cAAc,CAAC,WAAmB,EAAE,KAAa;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC;QAClD,SAAS,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,UAAU,CAAC,UAAkB,EAAE,KAAa;QAC1C,MAAM,YAAY,GAAe,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,mBAAQ,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACpC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAYD,UAAU,CAAC,UAAkB,EAAE,KAAa;QAC1C,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;QAGnE,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAClC,MAAM,eAAe,GAAG,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACnE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;oBACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;wBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpB,MAAM,QAAQ,GAAG,mBAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;4BACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC7B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;IA2BD,QAAQ,CACN,WAAmB,EACnB,OAA6E;QAE7E,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;QAC1C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC;QAErD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAGlC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAErC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAE5C,IAAI,UAAkB,CAAC;YACvB,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9C,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAEhE,OAAO,IAAI,CAAC;IACd,CAAC;IAoBD,KAAK;QAEH,MAAM,gBAAgB,GAAoB,IAAA,qBAAS,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGrE,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAGtD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,mBAAQ,CAAC,CAAC,CAAC,CAAC;YAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,IAAA,qBAAS,EAAC,cAAc,CAAC,CAAC,CAAC;gBAG5D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBACxC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxC,CAAC;gBAED,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AArvED,sBAqvEC","sourcesContent":["/**\n * Table - Represents a table in a document\n */\n\nimport { Paragraph } from './Paragraph';\nimport { TableRow, RowFormatting } from './TableRow';\nimport { TableCell, CellFormatting } from './TableCell';\nimport { Run } from './Run';\nimport { Revision } from './Revision';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { deepClone } from '../utils/deepClone';\nimport { TableGridChange } from './TableGridChange';\nimport { formatDateForXml } from '../utils/dateFormatting';\nimport {\n TableAlignment as CommonTableAlignment,\n BorderStyle,\n BorderDefinition,\n TableBorderDefinitions,\n HorizontalAnchor,\n VerticalAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n WidthType,\n ShadingPattern,\n ShadingConfig,\n buildShadingAttributes,\n} from './CommonTypes';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Table alignment\n * @see CommonTypes.TableAlignment\n */\nexport type TableAlignment = CommonTableAlignment;\n\n/**\n * Table layout type\n */\nexport type TableLayout = 'auto' | 'autofit' | 'fixed';\n\n/**\n * Table border definition (same as cell borders)\n * @see CommonTypes.BorderDefinition\n */\nexport interface TableBorder {\n style?: BorderStyle;\n size?: number;\n space?: number; // Border spacing (padding) in points\n color?: string;\n}\n\n/**\n * Table borders\n * @see CommonTypes.TableBorderDefinitions\n */\nexport interface TableBorders {\n top?: TableBorder;\n bottom?: TableBorder;\n left?: TableBorder;\n right?: TableBorder;\n insideH?: TableBorder; // Inside horizontal borders\n insideV?: TableBorder; // Inside vertical borders\n}\n\n/**\n * Horizontal anchor for table positioning\n * @see CommonTypes.HorizontalAnchor\n */\nexport type TableHorizontalAnchor = HorizontalAnchor;\n\n/**\n * Vertical anchor for table positioning\n * @see CommonTypes.VerticalAnchor\n */\nexport type TableVerticalAnchor = VerticalAnchor;\n\n/**\n * Horizontal alignment for relative table positioning\n * @see CommonTypes.HorizontalAlignment\n */\nexport type TableHorizontalAlignment = HorizontalAlignment;\n\n/**\n * Vertical alignment for relative table positioning\n * @see CommonTypes.VerticalAlignment\n */\nexport type TableVerticalAlignment = VerticalAlignment;\n\n/**\n * Table positioning properties (for floating tables)\n * Per ECMA-376 Part 1 §17.4.57 (tblpPr)\n */\nexport interface TablePositionProperties {\n /** Horizontal position in twips (absolute positioning) */\n x?: number;\n /** Vertical position in twips (absolute positioning) */\n y?: number;\n /** Horizontal anchor/positioning base */\n horizontalAnchor?: TableHorizontalAnchor;\n /** Vertical anchor/positioning base */\n verticalAnchor?: TableVerticalAnchor;\n /** Horizontal alignment (relative positioning) */\n horizontalAlignment?: TableHorizontalAlignment;\n /** Vertical alignment (relative positioning) */\n verticalAlignment?: TableVerticalAlignment;\n /** Left padding from anchor in twips */\n leftFromText?: number;\n /** Right padding from anchor in twips */\n rightFromText?: number;\n /** Top padding from anchor in twips */\n topFromText?: number;\n /** Bottom padding from anchor in twips */\n bottomFromText?: number;\n}\n\n/**\n * Table width type\n */\nexport type TableWidthType = 'auto' | 'dxa' | 'pct';\n\n/**\n * Table shading/background\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type TableShading = ShadingConfig;\n\n/**\n * Table formatting options\n */\n/**\n * Table cell margins (padding inside cells)\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n */\nexport interface TableCellMargins {\n /** Top margin in twips */\n top?: number;\n /** Bottom margin in twips */\n bottom?: number;\n /** Left margin in twips */\n left?: number;\n /** Right margin in twips */\n right?: number;\n}\n\n/**\n * Builds tblLook attributes including extended attributes (firstRow, lastRow, etc.)\n * Per ECMA-376 Part 1 §17.4.57, Word expects both w:val and the extended boolean attributes.\n */\nfunction buildTblLookAttributes(hex: string): Record<string, string> {\n const value = parseInt(hex, 16) || 0;\n return {\n 'w:val': hex,\n 'w:firstRow': (value & 0x0020) !== 0 ? '1' : '0',\n 'w:lastRow': (value & 0x0040) !== 0 ? '1' : '0',\n 'w:firstColumn': (value & 0x0080) !== 0 ? '1' : '0',\n 'w:lastColumn': (value & 0x0100) !== 0 ? '1' : '0',\n 'w:noHBand': (value & 0x0200) !== 0 ? '1' : '0',\n 'w:noVBand': (value & 0x0400) !== 0 ? '1' : '0',\n };\n}\n\n/**\n * Table formatting options\n */\nexport interface TableFormatting {\n style?: string; // Table style ID (e.g., 'Table1', 'TableGrid')\n width?: number; // Table width in twips\n widthType?: TableWidthType; // Width type (auto, dxa=twips, pct=percentage)\n alignment?: TableAlignment;\n layout?: TableLayout;\n borders?: TableBorders;\n cellSpacing?: number; // Cell spacing in twips\n cellSpacingType?: TableWidthType; // Cell spacing type\n cellMargins?: TableCellMargins; // Default cell margins (padding) for all cells\n indent?: number; // Left indent in twips\n tblLook?: string; // Table look flags (appearance settings)\n shading?: TableShading; // Table background shading\n // Batch 1 properties\n position?: TablePositionProperties; // Floating table positioning\n overlap?: boolean; // Allow table overlap with other floating tables\n bidiVisual?: boolean; // Right-to-left table layout\n tableGrid?: number[]; // Column widths in twips\n caption?: string; // Table caption for accessibility\n description?: string; // Table description for accessibility\n tblStyleRowBandSize?: number; // Number of rows in each row band for style alternation\n tblStyleColBandSize?: number; // Number of columns in each column band for style alternation\n}\n\n/**\n * First row formatting options for table headers\n */\nexport interface FirstRowFormattingOptions {\n /** Text alignment in cells */\n alignment?: 'left' | 'center' | 'right';\n /** Bold text */\n bold?: boolean;\n /** Italic text */\n italic?: boolean;\n /** Underline text */\n underline?: boolean | 'single' | 'double' | 'thick' | 'dotted' | 'dash';\n /** Spacing before paragraph (in twips) */\n spacingBefore?: number;\n /** Spacing after paragraph (in twips) */\n spacingAfter?: number;\n /** Background color (hex without #) */\n shading?: string;\n}\n\n/**\n * Represents a table\n */\n/**\n * Table property change tracking (w:tblPrChange)\n * Per ECMA-376 Part 1 §17.13.5.36\n */\nexport interface TblPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\nexport class Table {\n private rows: TableRow[] = [];\n private formatting: TableFormatting;\n /** StylesManager reference for conditional formatting resolution */\n private _stylesManager?: import('../formatting/StylesManager').StylesManager;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table property change tracking (w:tblPrChange) */\n private tblPrChange?: TblPrChange;\n /** Table grid change tracking (w:tblGridChange) per ECMA-376 §17.13.5.35 */\n private tblGridChange?: TableGridChange;\n\n /**\n * Creates a new Table\n * @param rows - Number of rows to create (optional)\n * @param columns - Number of columns per row (optional)\n * @param formatting - Table formatting options\n */\n constructor(rows?: number, columns?: number, formatting: TableFormatting = {}) {\n // Set default width if not specified\n // Per ECMA-376, tables require <w:tblW> element for Word compatibility\n // Default: Letter page width (12240 twips) minus standard margins (2*1440 twips) = 9360 twips\n if (formatting.width === undefined) {\n formatting.width = 9360; // ~6.5 inches\n }\n\n this.formatting = formatting;\n\n if (rows !== undefined && rows > 0 && columns !== undefined && columns > 0) {\n for (let i = 0; i < rows; i++) {\n const row = new TableRow(columns);\n row._setParentTable(this);\n this.rows.push(row);\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 property change tracking info\n */\n getTblPrChange(): TblPrChange | undefined {\n return this.tblPrChange;\n }\n\n /**\n * Sets the table property change tracking info\n */\n setTblPrChange(change: TblPrChange | undefined): void {\n this.tblPrChange = change;\n }\n\n /**\n * Clears the table property change tracking\n */\n clearTblPrChange(): void {\n this.tblPrChange = undefined;\n }\n\n /**\n * Gets the table grid change tracking info\n */\n getTblGridChange(): TableGridChange | undefined {\n return this.tblGridChange;\n }\n\n /**\n * Sets the table grid change tracking info\n */\n setTblGridChange(change: TableGridChange | undefined): void {\n this.tblGridChange = change;\n }\n\n /**\n * Adds a row to the table\n *\n * Appends a TableRow instance to the end of the table.\n *\n * @param row - The TableRow instance to add\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * const table = new Table();\n * const row = new TableRow(3);\n * table.addRow(row);\n * ```\n */\n addRow(row: TableRow): this {\n this.rows.push(row);\n row._setParentTable(this);\n return this;\n }\n\n /**\n * Creates a new row and adds it to the table\n *\n * Convenience method that creates a TableRow and appends it in one operation.\n *\n * @param cellCount - Number of cells to create in the row\n * @param formatting - Optional row formatting properties\n * @returns The created TableRow instance for further customization\n *\n * @example\n * ```typescript\n * const table = new Table();\n * const row = table.createRow(4);\n * row.getCell(0)?.addParagraph(new Paragraph().addText('Cell 1'));\n * ```\n */\n createRow(cellCount?: number, formatting?: RowFormatting): TableRow {\n const row = new TableRow(cellCount, formatting);\n this.rows.push(row);\n row._setParentTable(this);\n return row;\n }\n\n /**\n * Gets a row by its index\n *\n * @param index - The row index (0-based, where 0 is the first row)\n * @returns The TableRow at the specified index, or undefined if index is out of bounds\n *\n * @example\n * ```typescript\n * const firstRow = table.getRow(0);\n * const secondRow = table.getRow(1);\n * if (firstRow) {\n * console.log(`First row has ${firstRow.getCellCount()} cells`);\n * }\n * ```\n */\n getRow(index: number): TableRow | undefined {\n return this.rows[index];\n }\n\n /**\n * Gets all rows in the table\n *\n * Returns a copy of the rows array to prevent external modification.\n *\n * @returns Array of all TableRow instances\n *\n * @example\n * ```typescript\n * const rows = table.getRows();\n * console.log(`Table has ${rows.length} rows`);\n * for (const row of rows) {\n * console.log(`Row has ${row.getCellCount()} cells`);\n * }\n * ```\n */\n getRows(): TableRow[] {\n return [...this.rows];\n }\n\n /**\n * Gets the first paragraph in the table (first cell of first row)\n * @returns The first paragraph, or null if the table is empty\n */\n getFirstParagraph(): Paragraph | null {\n if (this.rows.length === 0) return null;\n const firstRow = this.rows[0];\n if (!firstRow) return null;\n const cells = firstRow.getCells();\n if (cells.length === 0) return null;\n const paras = cells[0]?.getParagraphs();\n return paras && paras.length > 0 ? (paras[0] ?? null) : null;\n }\n\n /**\n * Gets the last paragraph in the table (last cell of last row)\n * @returns The last paragraph, or null if the table is empty\n */\n getLastParagraph(): Paragraph | null {\n for (let r = this.rows.length - 1; r >= 0; r--) {\n const row = this.rows[r];\n if (!row) continue;\n const cells = row.getCells();\n for (let c = cells.length - 1; c >= 0; c--) {\n const cell = cells[c];\n if (!cell) continue;\n const paras = cell.getParagraphs();\n if (paras.length > 0) {\n return paras[paras.length - 1] ?? null;\n }\n }\n }\n return null;\n }\n\n /**\n * Gets the total number of rows in the table\n *\n * @returns Number of rows\n *\n * @example\n * ```typescript\n * console.log(`Table has ${table.getRowCount()} rows`);\n * ```\n */\n getRowCount(): number {\n return this.rows.length;\n }\n\n /**\n * Gets a specific cell by row and column indices\n *\n * @param rowIndex - The row index (0-based)\n * @param columnIndex - The column index (0-based)\n * @returns The TableCell at the specified position, or undefined if indices are out of bounds\n *\n * @example\n * ```typescript\n * const cell = table.getCell(0, 0); // Top-left cell\n * if (cell) {\n * cell.addParagraph(new Paragraph().addText('A1'));\n * }\n *\n * // Access cell in third row, second column\n * const cell2 = table.getCell(2, 1);\n * ```\n */\n getCell(rowIndex: number, columnIndex: number): TableCell | undefined {\n const row = this.getRow(rowIndex);\n return row ? row.getCell(columnIndex) : undefined;\n }\n\n /**\n * Sets the table width\n *\n * Defines the total width of the table. Use with {@link setWidthType}\n * to specify if width is in twips, percentage, or auto.\n *\n * @param twips - Width value (interpretation depends on widthType)\n * - For 'dxa' (default): Width in twips (1/20th of a point)\n * - For 'pct': Percentage * 50 (e.g., 5000 = 100%)\n * - For 'auto': Value is ignored\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setWidth(9360); // 6.5 inches in twips\n * table.setWidth(5000).setWidthType('pct'); // 100% width\n * ```\n */\n setWidth(twips: number): this {\n const prev = this.formatting.width;\n this.formatting.width = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'width', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets table horizontal alignment\n *\n * Controls where the table is positioned horizontally on the page.\n *\n * @param alignment - Alignment value ('left' |'center' | 'right')\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setAlignment('center'); // Center the table on page\n * table.setAlignment('right'); // Align table to right margin\n * ```\n */\n setAlignment(alignment: TableAlignment): this {\n const prev = this.formatting.alignment;\n this.formatting.alignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'alignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets table layout algorithm\n *\n * Controls how table column widths are calculated.\n *\n * @param layout - Layout type\n * - 'auto': Columns auto-fit to content and window width\n * - 'fixed': Columns use fixed widths (faster rendering)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setLayout('auto'); // Auto-fit to window\n * table.setLayout('fixed'); // Use fixed column widths\n * ```\n */\n setLayout(layout: TableLayout): this {\n const prev = this.formatting.layout;\n // Normalize \"auto\" to \"autofit\" per ECMA-376 ST_TblLayoutType (§17.18.87)\n this.formatting.layout = layout === 'auto' ? 'autofit' : layout;\n if (this.trackingContext?.isEnabled() && prev !== this.formatting.layout) {\n this.trackingContext.trackTableChange(this, 'layout', prev, this.formatting.layout);\n }\n return this;\n }\n\n /**\n * Sets table borders\n *\n * Defines borders for all sides of the table and interior borders.\n * By default, also applies borders to all cells within the table for consistency.\n *\n * @param borders - Border definitions for each edge\n * @param borders.top - Top border of table\n * @param borders.bottom - Bottom border of table\n * @param borders.left - Left border of table\n * @param borders.right - Right border of table\n * @param borders.insideH - Horizontal borders between rows\n * @param borders.insideV - Vertical borders between columns\n * @param options - Additional options\n * @param options.applyToCells - Whether to also set borders on all cells (default: true)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // Set borders on table AND all cells (default behavior)\n * table.setBorders({\n * top: { style: 'single', size: 4, color: '000000' },\n * bottom: { style: 'single', size: 4, color: '000000' },\n * insideH: { style: 'single', size: 2, color: 'CCCCCC' },\n * insideV: { style: 'single', size: 2, color: 'CCCCCC' }\n * });\n *\n * // Set only table-level borders (no cell borders)\n * table.setBorders({ top: { style: 'single', size: 4 } }, { applyToCells: false });\n * ```\n */\n setBorders(borders: TableBorders, options?: { applyToCells?: boolean }): this {\n const prev = this.formatting.borders;\n // Set table-level borders (w:tblBorders)\n this.formatting.borders = borders;\n if (this.trackingContext?.isEnabled() && prev !== borders) {\n this.trackingContext.trackTableChange(this, 'borders', prev, borders);\n }\n\n // Also apply to all cells for consistency (default: true)\n if (options?.applyToCells !== false) {\n const cellBorders = {\n top: borders.top,\n bottom: borders.bottom,\n left: borders.left,\n right: borders.right,\n };\n\n for (const row of this.rows) {\n // Update row-level table property exceptions if they have borders\n // Per ECMA-376, w:tblPrEx can contain border overrides that must also be updated\n const exceptions = row.getTablePropertyExceptions();\n if (exceptions?.borders) {\n row.setTablePropertyExceptions({\n ...exceptions,\n borders: borders, // Use full table borders for row-level exceptions\n });\n }\n\n // Update cell borders\n for (const cell of row.getCells()) {\n cell.setBorders(cellBorders);\n }\n }\n }\n\n return this;\n }\n\n /**\n * Sets all borders to the same style\n *\n * Convenience method that applies identical borders to all edges\n * (top, bottom, left, right, insideH, insideV) and all cells.\n *\n * @param border - Border definition to apply uniformly\n * @param options - Additional options\n * @param options.applyToCells - Whether to also set borders on all cells (default: true)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // Apply single black border to all edges and cells\n * table.setAllBorders({\n * style: 'single',\n * size: 4,\n * color: '000000'\n * });\n *\n * // Apply only to table, not individual cells\n * table.setAllBorders({ style: 'single', size: 4 }, { applyToCells: false });\n * ```\n */\n setAllBorders(border: TableBorder, options?: { applyToCells?: boolean }): this {\n return this.setBorders(\n {\n top: border,\n bottom: border,\n left: border,\n right: border,\n insideH: border,\n insideV: border,\n },\n options\n );\n }\n\n /**\n * Sets shading (background color) for the first row of the table\n * Useful for header rows in data tables\n * @param color - Hex color without # (e.g., 'DFDFDF' for light gray)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.setFirstRowShading('DFDFDF'); // Light gray header\n * ```\n */\n setFirstRowShading(color: string): this {\n if (this.rows.length > 0) {\n const firstRow = this.rows[0];\n if (firstRow) {\n for (const cell of firstRow.getCells()) {\n cell.setShading({ fill: color });\n }\n }\n }\n return this;\n }\n\n /**\n * Sets comprehensive formatting for the first row of the table\n *\n * This is ideal for formatting table headers with alignment, text formatting,\n * spacing, and background color in a single call.\n *\n * @param options - Formatting options for the first row\n * @returns This table for chaining\n * @example\n * ```typescript\n * // Create a formatted table header\n * table.setFirstRowFormatting({\n * alignment: 'center',\n * bold: true,\n * spacingBefore: 120,\n * spacingAfter: 120,\n * shading: 'DFDFDF'\n * });\n *\n * // Format header with underline and custom spacing\n * table.setFirstRowFormatting({\n * alignment: 'left',\n * bold: true,\n * underline: 'single',\n * spacingAfter: 80\n * });\n * ```\n */\n setFirstRowFormatting(options: FirstRowFormattingOptions): this {\n if (this.rows.length === 0) {\n return this; // No rows to format\n }\n\n const firstRow = this.rows[0];\n if (!firstRow) {\n return this;\n }\n\n // Apply formatting to each cell in the first row\n for (const cell of firstRow.getCells()) {\n const paragraphs = cell.getParagraphs();\n\n // Apply shading to the cell if specified\n if (options.shading) {\n cell.setShading({ fill: options.shading });\n }\n\n // Apply formatting to each paragraph in the cell\n for (const para of paragraphs) {\n // Apply paragraph alignment\n if (options.alignment) {\n para.setAlignment(options.alignment as any);\n }\n\n // Apply spacing\n if (options.spacingBefore !== undefined) {\n para.setSpaceBefore(options.spacingBefore);\n }\n if (options.spacingAfter !== undefined) {\n para.setSpaceAfter(options.spacingAfter);\n }\n\n // Apply run formatting to all runs in the paragraph\n const runs = para.getRuns();\n for (const run of runs) {\n // Apply formatting using run's setter methods\n if (options.bold !== undefined) {\n run.setBold(options.bold);\n }\n if (options.italic !== undefined) {\n run.setItalic(options.italic);\n }\n if (options.underline !== undefined) {\n run.setUnderline(options.underline);\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * Sets cell spacing\n * @param twips - Cell spacing in twips\n * @returns This table for chaining\n */\n setCellSpacing(twips: number): this {\n const prev = this.formatting.cellSpacing;\n this.formatting.cellSpacing = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'cellSpacing', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets left indent\n * @param twips - Indent in twips\n * @returns This table for chaining\n */\n setIndent(twips: number): this {\n const prev = this.formatting.indent;\n this.formatting.indent = twips;\n if (this.trackingContext?.isEnabled() && prev !== twips) {\n this.trackingContext.trackTableChange(this, 'indent', prev, twips);\n }\n return this;\n }\n\n /**\n * Sets table style reference\n * @param style - Table style ID (e.g., 'Table1', 'TableGrid')\n * @returns This table for chaining\n */\n setStyle(style: string): this {\n const prev = this.formatting.style;\n this.formatting.style = style;\n if (this.trackingContext?.isEnabled() && prev !== style) {\n this.trackingContext.trackTableChange(this, 'style', prev, style);\n }\n return this;\n }\n\n /**\n * Sets table look flags (appearance settings)\n * @param tblLook - Table look value (e.g., '0000', '04A0')\n * @returns This table for chaining\n */\n setTblLook(tblLook: string): this {\n const prev = this.formatting.tblLook;\n this.formatting.tblLook = tblLook;\n if (this.trackingContext?.isEnabled() && prev !== tblLook) {\n this.trackingContext.trackTableChange(this, 'tblLook', prev, tblLook);\n }\n return this;\n }\n\n /**\n * Sets the number of rows in each row band for table style alternation\n * Per ECMA-376 Part 1 §17.4.52\n * @param size - Number of rows per band (default: 1)\n * @returns This table for chaining\n */\n setStyleRowBandSize(size: number): this {\n const prev = this.formatting.tblStyleRowBandSize;\n this.formatting.tblStyleRowBandSize = size;\n if (this.trackingContext?.isEnabled() && prev !== size) {\n this.trackingContext.trackTableChange(this, 'tblStyleRowBandSize', prev, size);\n }\n return this;\n }\n\n /**\n * Sets the number of columns in each column band for table style alternation\n * Per ECMA-376 Part 1 §17.4.51\n * @param size - Number of columns per band (default: 1)\n * @returns This table for chaining\n */\n setStyleColBandSize(size: number): this {\n const prev = this.formatting.tblStyleColBandSize;\n this.formatting.tblStyleColBandSize = size;\n if (this.trackingContext?.isEnabled() && prev !== size) {\n this.trackingContext.trackTableChange(this, 'tblStyleColBandSize', prev, size);\n }\n return this;\n }\n\n /**\n * Decodes tblLook hex string into boolean flags\n * Per ECMA-376 Part 1 Section 17.4.56\n * @returns Object with boolean flags for each tblLook property\n */\n getTblLookFlags(): {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n noHBand: boolean;\n noVBand: boolean;\n } {\n const hex = this.formatting.tblLook || '0000';\n const value = parseInt(hex, 16) || 0;\n\n return {\n firstRow: (value & 0x0020) !== 0,\n lastRow: (value & 0x0040) !== 0,\n firstColumn: (value & 0x0080) !== 0,\n lastColumn: (value & 0x0100) !== 0,\n noHBand: (value & 0x0200) !== 0,\n noVBand: (value & 0x0400) !== 0,\n };\n }\n\n /**\n * Applies conditional formatting to table cells based on rules\n *\n * Enables advanced table formatting including:\n * - Automatic header row detection and styling\n * - Alternating row colors (zebra striping)\n * - Content-based formatting rules\n *\n * @param rules - Conditional formatting rules\n * @returns This table for chaining\n *\n * @example\n * ```typescript\n * // Apply header formatting and alternating rows\n * table.applyConditionalFormatting({\n * headerRow: true,\n * alternatingRows: {\n * even: { shading: { fill: 'F0F0F0' } },\n * odd: { shading: { fill: 'FFFFFF' } }\n * }\n * });\n *\n * // Custom header formatting\n * table.applyConditionalFormatting({\n * headerRow: {\n * shading: { fill: '4472C4' },\n * textColor: 'FFFFFF'\n * }\n * });\n *\n * // Content-based formatting\n * table.applyConditionalFormatting({\n * contentRules: [\n * {\n * condition: (text, row, col) => parseFloat(text) > 1000,\n * formatting: { shading: { fill: 'FFD700' } } // Gold for large numbers\n * },\n * {\n * condition: (text) => text.toLowerCase().includes('error'),\n * formatting: { shading: { fill: 'FF0000' } } // Red for errors\n * }\n * ]\n * });\n *\n * // Combined rules\n * table.applyConditionalFormatting({\n * headerRow: { shading: { fill: '2F5496' } },\n * alternatingRows: {\n * even: { shading: { fill: 'D9E1F2' } }\n * },\n * contentRules: [\n * {\n * condition: (text, row, col) => col === 0 && row > 0,\n * formatting: { textColor: '000000' }\n * }\n * ]\n * });\n * ```\n */\n applyConditionalFormatting(rules: {\n headerRow?: boolean | Partial<CellFormatting>;\n alternatingRows?: {\n even?: Partial<CellFormatting>;\n odd?: Partial<CellFormatting>;\n };\n contentRules?: {\n condition: (cellText: string, rowIndex: number, colIndex: number) => boolean;\n formatting: Partial<CellFormatting>;\n }[];\n }): this {\n const rows = this.getRows();\n\n // Apply header row formatting\n if (rules.headerRow && rows.length > 0) {\n const headerFormatting: Partial<CellFormatting> =\n rules.headerRow === true\n ? { shading: { fill: '4472C4' } } // Default blue header\n : rules.headerRow;\n\n const headerRow = rows[0];\n if (headerRow) {\n for (const cell of headerRow.getCells()) {\n this.applyCellFormatting(cell, headerFormatting);\n }\n }\n }\n\n // Apply alternating rows\n if (rules.alternatingRows) {\n rows.forEach((row, index) => {\n const isEven = index % 2 === 0;\n const formatting = isEven ? rules.alternatingRows?.even : rules.alternatingRows?.odd;\n\n if (formatting) {\n for (const cell of row.getCells()) {\n this.applyCellFormatting(cell, formatting);\n }\n }\n });\n }\n\n // Apply content-based rules\n if (rules.contentRules && rules.contentRules.length > 0) {\n rows.forEach((row, rowIndex) => {\n row.getCells().forEach((cell, colIndex) => {\n const cellText = cell\n .getParagraphs()\n .map((p) => p.getText())\n .join('');\n\n for (const rule of rules.contentRules!) {\n if (rule.condition(cellText, rowIndex, colIndex)) {\n this.applyCellFormatting(cell, rule.formatting);\n }\n }\n });\n });\n }\n\n return this;\n }\n\n /**\n * Helper method to apply formatting to a cell\n * @private\n */\n private applyCellFormatting(cell: TableCell, formatting: Partial<CellFormatting>): void {\n // Apply shading\n if (formatting.shading) {\n cell.setShading(formatting.shading);\n }\n\n // Apply borders\n if (formatting.borders) {\n cell.setBorders(formatting.borders);\n }\n\n // Apply text direction\n if (formatting.textDirection) {\n cell.setTextDirection(formatting.textDirection);\n }\n\n // Apply vertical alignment\n if (formatting.verticalAlignment) {\n cell.setVerticalAlignment(formatting.verticalAlignment);\n }\n\n // Apply width\n if (formatting.width !== undefined) {\n cell.setWidth(formatting.width);\n }\n\n // Apply margins\n if (formatting.margins) {\n cell.setMargins(formatting.margins);\n }\n }\n\n /**\n * Sets table positioning properties for floating tables\n * Per ECMA-376 Part 1 §17.4.57\n * @param position - Table position properties\n * @returns This table for chaining\n * @example\n * ```typescript\n * // Position table at absolute coordinates\n * table.setPosition({\n * x: 1440, // 1 inch from left\n * y: 1440, // 1 inch from top\n * horizontalAnchor: 'page',\n * verticalAnchor: 'page'\n * });\n *\n * // Position table with relative alignment\n * table.setPosition({\n * horizontalAlignment: 'center',\n * verticalAlignment: 'top',\n * horizontalAnchor: 'margin',\n * verticalAnchor: 'page'\n * });\n * ```\n */\n setPosition(position: TablePositionProperties): this {\n const prev = this.formatting.position;\n this.formatting.position = position;\n if (this.trackingContext?.isEnabled() && prev !== position) {\n this.trackingContext.trackTableChange(this, 'position', prev, position);\n }\n return this;\n }\n\n /**\n * Sets whether table can overlap with other floating tables\n * Per ECMA-376 Part 1 §17.4.30\n * @param overlap - True to allow overlap, false to prevent\n * @returns This table for chaining\n */\n setOverlap(overlap: boolean): this {\n const prev = this.formatting.overlap;\n this.formatting.overlap = overlap;\n if (this.trackingContext?.isEnabled() && prev !== overlap) {\n this.trackingContext.trackTableChange(this, 'overlap', prev, overlap);\n }\n return this;\n }\n\n /**\n * Sets bidirectional (right-to-left) visual layout\n * Per ECMA-376 Part 1 §17.4.1\n * @param bidi - True for RTL layout, false for LTR\n * @returns This table for chaining\n */\n setBidiVisual(bidi: boolean): this {\n const prev = this.formatting.bidiVisual;\n this.formatting.bidiVisual = bidi;\n if (this.trackingContext?.isEnabled() && prev !== bidi) {\n this.trackingContext.trackTableChange(this, 'bidiVisual', prev, bidi);\n }\n return this;\n }\n\n /**\n * Sets table grid column widths\n * Per ECMA-376 Part 1 §17.4.49\n * @param widths - Array of column widths in twips\n * @returns This table for chaining\n * @example\n * ```typescript\n * // 3 columns: 2 inches, 3 inches, 2 inches\n * table.setTableGrid([2880, 4320, 2880]);\n * ```\n */\n setTableGrid(widths: number[]): this {\n const prev = this.formatting.tableGrid;\n this.formatting.tableGrid = widths;\n if (this.trackingContext?.isEnabled() && prev) {\n // Create tblGridChange (not tblPrChange) per ECMA-376 §17.13.5.35\n // Only create if there was a previous grid to record\n if (!this.tblGridChange) {\n const revisionManager = this.trackingContext.getRevisionManager();\n this.tblGridChange = TableGridChange.create(\n revisionManager.consumeNextId(),\n prev.map((w) => ({ width: w })),\n this.trackingContext.getAuthor(),\n new Date()\n );\n }\n }\n return this;\n }\n\n /**\n * Sets table caption for accessibility\n * Per ECMA-376 Part 1 §17.4.58\n * @param caption - Table caption text\n * @returns This table for chaining\n */\n setCaption(caption: string): this {\n const prev = this.formatting.caption;\n this.formatting.caption = caption;\n if (this.trackingContext?.isEnabled() && prev !== caption) {\n this.trackingContext.trackTableChange(this, 'caption', prev, caption);\n }\n return this;\n }\n\n /**\n * Sets table description for accessibility\n * Per ECMA-376 Part 1 §17.4.63\n * @param description - Table description text\n * @returns This table for chaining\n */\n setDescription(description: string): this {\n const prev = this.formatting.description;\n this.formatting.description = description;\n if (this.trackingContext?.isEnabled() && prev !== description) {\n this.trackingContext.trackTableChange(this, 'description', prev, description);\n }\n return this;\n }\n\n /**\n * Sets table-level shading (background)\n *\n * Per ECMA-376 Part 1 §17.4.56 (w:shd), this sets the default\n * background shading for the entire table. Individual cells can\n * override this with their own shading.\n *\n * @param shading - Table shading configuration\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setShading({ fill: 'F0F0F0' }); // Light gray background\n * table.setShading({ fill: 'FFFFFF', pattern: 'pct12', color: '000000' });\n * ```\n */\n setShading(shading: TableShading): this {\n const prev = this.formatting.shading;\n this.formatting.shading = shading;\n if (this.trackingContext?.isEnabled() && prev !== shading) {\n this.trackingContext.trackTableChange(this, 'shading', prev, shading);\n }\n return this;\n }\n\n /**\n * Gets table-level shading configuration\n * @returns Table shading or undefined if not set\n */\n getShading(): TableShading | undefined {\n return this.formatting.shading;\n }\n\n /**\n * Sets table width type\n *\n * Defines how the table width value should be interpreted.\n * Per ECMA-376 Part 1 §17.4.64\n *\n * @param type - Width interpretation type\n * - 'auto': Automatic width (ignores width value)\n * - 'dxa': Width in twips (1/20th of a point)\n * - 'pct': Width as percentage (value * 50 = percentage, e.g., 5000 = 100%)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setWidth(5000).setWidthType('pct'); // 100% page width\n * table.setWidth(9360).setWidthType('dxa'); // 6.5 inches (absolute)\n * table.setWidthType('auto'); // Auto-fit content\n * ```\n */\n setWidthType(type: TableWidthType): this {\n const prev = this.formatting.widthType;\n this.formatting.widthType = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackTableChange(this, 'widthType', prev, type);\n }\n return this;\n }\n\n /**\n * Sets cell spacing type\n * @param type - Cell spacing type\n * @returns This table for chaining\n */\n setCellSpacingType(type: TableWidthType): this {\n const prev = this.formatting.cellSpacingType;\n this.formatting.cellSpacingType = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prev, type);\n }\n return this;\n }\n\n /**\n * Gets a copy of the table formatting\n *\n * Returns a copy of all formatting properties including width, alignment,\n * layout, borders, and other table-level settings.\n *\n * @returns Copy of the table formatting object\n *\n * @example\n * ```typescript\n * const formatting = table.getFormatting();\n * console.log(`Width: ${formatting.width} twips`);\n * console.log(`Layout: ${formatting.layout}`);\n * ```\n */\n getFormatting(): TableFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the table width in twips\n * @returns Width in twips or undefined if not set\n */\n getWidth(): number | undefined {\n return this.formatting.width;\n }\n\n /**\n * Gets the table width type\n * @returns Width type ('auto', 'dxa', 'pct', 'nil') or undefined\n */\n getWidthType(): string | undefined {\n return this.formatting.widthType;\n }\n\n /**\n * Gets the table horizontal alignment\n * @returns Alignment ('left', 'center', 'right') or undefined\n */\n getAlignment(): string | undefined {\n return this.formatting.alignment;\n }\n\n /**\n * Gets the table layout type\n * @returns Layout ('autofit', 'fixed') or undefined\n */\n getLayout(): string | undefined {\n return this.formatting.layout;\n }\n\n /**\n * Gets the table left indentation in twips\n * @returns Indent in twips or undefined if not set\n */\n getIndent(): number | undefined {\n return this.formatting.indent;\n }\n\n /**\n * Gets the table borders\n * @returns Borders object or undefined\n */\n getBorders(): TableFormatting['borders'] | undefined {\n return this.formatting.borders;\n }\n\n /**\n * Gets the column widths (table grid)\n * @returns Array of column widths in twips\n */\n getColumnWidths(): number[] {\n return [...(this.formatting.tableGrid || [])];\n }\n\n /**\n * Gets the cell spacing value\n * @returns Cell spacing in twips or undefined\n */\n getCellSpacing(): number | undefined {\n return this.formatting.cellSpacing;\n }\n\n /**\n * Gets the default cell margins (padding) for all cells\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n * @returns Cell margins object or undefined if not set\n */\n getCellMargins(): TableCellMargins | undefined {\n return this.formatting.cellMargins;\n }\n\n /**\n * Sets the default cell margins (padding) for all cells\n * Per ECMA-376 Part 1 §17.4.42 (tblCellMar)\n * @param margins - Cell margins in twips\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.setCellMargins({ top: 43, left: 115, bottom: 43, right: 115 });\n * ```\n */\n setCellMargins(margins: TableCellMargins): this {\n const prev = this.formatting.cellMargins;\n this.formatting.cellMargins = margins;\n if (this.trackingContext?.isEnabled() && prev !== margins) {\n this.trackingContext.trackTableChange(this, 'cellMargins', prev, margins);\n }\n return this;\n }\n\n /**\n * Gets the table style ID\n * @returns Style ID or undefined if not set\n */\n getStyle(): string | undefined {\n return this.formatting.style;\n }\n\n /**\n * Gets the raw table look (tblLook) value\n * @returns Table look hex string or undefined if not set\n */\n getTblLook(): string | undefined {\n return this.formatting.tblLook;\n }\n\n /**\n * Gets the table position properties for floating tables\n * @returns Table position properties or undefined if not set\n */\n getPosition(): TablePositionProperties | undefined {\n return this.formatting.position ? { ...this.formatting.position } : undefined;\n }\n\n /**\n * Gets whether table can overlap with other floating tables\n * @returns True if overlap is allowed, false if not, undefined if not set\n */\n getOverlap(): boolean | undefined {\n return this.formatting.overlap;\n }\n\n /**\n * Gets whether bidirectional (RTL) visual layout is enabled\n * @returns True if RTL layout, false if LTR, undefined if not set\n */\n getBidiVisual(): boolean | undefined {\n return this.formatting.bidiVisual;\n }\n\n /**\n * Gets the table grid column widths\n * @returns Array of column widths in twips, or undefined if not set\n */\n getTableGrid(): number[] | undefined {\n return this.formatting.tableGrid ? [...this.formatting.tableGrid] : undefined;\n }\n\n /**\n * Gets the table caption for accessibility\n * @returns Caption text or undefined if not set\n */\n getCaption(): string | undefined {\n return this.formatting.caption;\n }\n\n /**\n * Gets the table description for accessibility\n * @returns Description text or undefined if not set\n */\n getDescription(): string | undefined {\n return this.formatting.description;\n }\n\n /**\n * Gets the cell spacing type\n * @returns Cell spacing type or undefined if not set\n */\n getCellSpacingType(): TableWidthType | undefined {\n return this.formatting.cellSpacingType;\n }\n\n // ============================================================================\n // Checker Methods\n // ============================================================================\n\n /**\n * Checks if the table has any rows\n * @returns True if table has rows\n */\n hasRows(): boolean {\n return this.rows.length > 0;\n }\n\n /**\n * Checks if the table is a floating table (has positioning)\n * @returns True if table has positioning properties\n */\n isFloating(): boolean {\n return this.formatting.position !== undefined;\n }\n\n /**\n * Checks if the table has a style applied\n * @returns True if table has a style\n */\n hasStyle(): boolean {\n return this.formatting.style !== undefined && this.formatting.style !== '';\n }\n\n /**\n * Sets the StylesManager reference for conditional formatting resolution.\n * Propagates to all paragraphs in all cells.\n * @internal\n */\n _setStylesManager(manager: import('../formatting/StylesManager').StylesManager): void {\n this._stylesManager = manager;\n // Propagate to all paragraphs in all cells\n for (const row of this.rows) {\n for (const cell of row.getCells()) {\n for (const para of cell.getParagraphs()) {\n para._setStylesManager(manager);\n }\n }\n }\n }\n\n /**\n * Gets the StylesManager reference for conditional formatting resolution.\n * @internal\n */\n _getStylesManager(): import('../formatting/StylesManager').StylesManager | undefined {\n return this._stylesManager;\n }\n\n /**\n * Converts the table to WordprocessingML XML element\n * @returns XMLElement representing the table\n */\n toXML(): XMLElement {\n const tblPrChildren: XMLElement[] = [];\n\n // CT_TblPr element order per ECMA-376:\n // tblStyle, tblpPr, tblOverlap, bidiVisual, tblStyleRowBandSize, tblStyleColBandSize,\n // tblW, jc, tblCellSpacing, tblInd, tblBorders, shd, tblLayout, tblCellMar, tblLook,\n // tblCaption, tblDescription, tblPrChange\n\n // 1. tblStyle\n if (this.formatting.style) {\n tblPrChildren.push(XMLBuilder.wSelf('tblStyle', { 'w:val': this.formatting.style }));\n }\n\n // 2. tblpPr - table positioning properties (floating tables)\n if (this.formatting.position) {\n const pos = this.formatting.position;\n const posAttrs: Record<string, string | number> = {};\n\n if (pos.x !== undefined) posAttrs['w:tblpX'] = pos.x;\n if (pos.y !== undefined) posAttrs['w:tblpY'] = pos.y;\n if (pos.horizontalAnchor) posAttrs['w:horzAnchor'] = pos.horizontalAnchor;\n if (pos.verticalAnchor) posAttrs['w:vertAnchor'] = pos.verticalAnchor;\n if (pos.horizontalAlignment) posAttrs['w:tblpXSpec'] = pos.horizontalAlignment;\n if (pos.verticalAlignment) posAttrs['w:tblpYSpec'] = pos.verticalAlignment;\n if (pos.leftFromText !== undefined) posAttrs['w:leftFromText'] = pos.leftFromText;\n if (pos.rightFromText !== undefined) posAttrs['w:rightFromText'] = pos.rightFromText;\n if (pos.topFromText !== undefined) posAttrs['w:topFromText'] = pos.topFromText;\n if (pos.bottomFromText !== undefined) posAttrs['w:bottomFromText'] = pos.bottomFromText;\n\n if (Object.keys(posAttrs).length > 0) {\n tblPrChildren.push(XMLBuilder.wSelf('tblpPr', posAttrs));\n }\n }\n\n // 3. tblOverlap\n if (this.formatting.overlap !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblOverlap', {\n 'w:val': this.formatting.overlap ? 'overlap' : 'never',\n })\n );\n }\n\n // 4. bidiVisual\n if (this.formatting.bidiVisual) {\n tblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));\n }\n\n // 5-6. tblStyleRowBandSize / tblStyleColBandSize\n // Only valid within table style definitions (CT_TblPrBase in w:style),\n // not in direct tblPr. Style.ts handles serialization in style context.\n // Values are preserved in formatting for round-trip and style use.\n\n // 7. tblW\n if (this.formatting.width !== undefined) {\n const widthType = this.formatting.widthType || 'dxa';\n tblPrChildren.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': this.formatting.width,\n 'w:type': widthType,\n })\n );\n }\n\n // 8. jc (alignment)\n if (this.formatting.alignment) {\n tblPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': this.formatting.alignment }));\n }\n\n // 9. tblCellSpacing\n if (this.formatting.cellSpacing !== undefined) {\n const cellSpacingType = this.formatting.cellSpacingType || 'dxa';\n tblPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': this.formatting.cellSpacing,\n 'w:type': cellSpacingType,\n })\n );\n }\n\n // 10. tblInd\n if (this.formatting.indent !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblInd', {\n 'w:w': this.formatting.indent,\n 'w:type': 'dxa',\n })\n );\n }\n\n // 11. tblBorders\n if (this.formatting.borders) {\n const borderElements: XMLElement[] = [];\n const borders = this.formatting.borders;\n\n if (borders.top) {\n borderElements.push(XMLBuilder.createBorder('top', borders.top));\n }\n if (borders.left) {\n borderElements.push(XMLBuilder.createBorder('left', borders.left));\n }\n if (borders.bottom) {\n borderElements.push(XMLBuilder.createBorder('bottom', borders.bottom));\n }\n if (borders.right) {\n borderElements.push(XMLBuilder.createBorder('right', borders.right));\n }\n if (borders.insideH) {\n borderElements.push(XMLBuilder.createBorder('insideH', borders.insideH));\n }\n if (borders.insideV) {\n borderElements.push(XMLBuilder.createBorder('insideV', borders.insideV));\n }\n\n if (borderElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblBorders', undefined, borderElements));\n }\n }\n\n // 12. shd (table shading/background)\n if (this.formatting.shading) {\n const shdAttrs = buildShadingAttributes(this.formatting.shading);\n if (Object.keys(shdAttrs).length > 0) {\n tblPrChildren.push(XMLBuilder.wSelf('shd', shdAttrs));\n }\n }\n\n // 13. tblLayout\n if (this.formatting.layout) {\n tblPrChildren.push(XMLBuilder.wSelf('tblLayout', { 'w:type': this.formatting.layout }));\n }\n\n // 14. tblCellMar\n if (this.formatting.cellMargins) {\n const marginElements: XMLElement[] = [];\n if (this.formatting.cellMargins.top !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('top', {\n 'w:w': this.formatting.cellMargins.top,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.left !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('left', {\n 'w:w': this.formatting.cellMargins.left,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.bottom !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': this.formatting.cellMargins.bottom,\n 'w:type': 'dxa',\n })\n );\n }\n if (this.formatting.cellMargins.right !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('right', {\n 'w:w': this.formatting.cellMargins.right,\n 'w:type': 'dxa',\n })\n );\n }\n if (marginElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblCellMar', undefined, marginElements));\n }\n }\n\n // 15. tblLook\n if (this.formatting.tblLook) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblLook', buildTblLookAttributes(this.formatting.tblLook))\n );\n }\n\n // Add table caption (accessibility)\n if (this.formatting.caption) {\n tblPrChildren.push(XMLBuilder.wSelf('tblCaption', { 'w:val': this.formatting.caption }));\n }\n\n // Add table description (accessibility)\n if (this.formatting.description) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblDescription', {\n 'w:val': this.formatting.description,\n })\n );\n }\n\n // Add table property change (w:tblPrChange) per ECMA-376 Part 1 §17.13.5.36\n // Must be last child of w:tblPr\n if (this.tblPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.tblPrChange.id,\n 'w:author': this.tblPrChange.author,\n 'w:date': this.tblPrChange.date,\n };\n const prevTblPrChildren: XMLElement[] = [];\n const prev = this.tblPrChange.previousProperties;\n if (prev) {\n if (prev.style) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblStyle', { 'w:val': prev.style }));\n }\n if (prev.width !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblW', {\n 'w:w': prev.width,\n 'w:type': prev.widthType || 'dxa',\n })\n );\n }\n if (prev.alignment) {\n prevTblPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': prev.alignment }));\n }\n if (prev.indent !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblInd', { 'w:w': prev.indent, 'w:type': 'dxa' })\n );\n }\n if (prev.borders) {\n const borderChildren: XMLElement[] = [];\n const bNames = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const;\n for (const name of bNames) {\n const b = prev.borders[name];\n if (b) {\n const bAttrs: Record<string, string | number> = {};\n if (b.style) bAttrs['w:val'] = b.style;\n if (b.size !== undefined) bAttrs['w:sz'] = b.size;\n if (b.color) bAttrs['w:color'] = b.color;\n borderChildren.push(XMLBuilder.wSelf(name, bAttrs));\n }\n }\n if (borderChildren.length > 0) {\n prevTblPrChildren.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\n }\n }\n if (prev.shading) {\n const shadingAttrs = buildShadingAttributes(prev.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n prevTblPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n if (prev.layout) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblLayout', { 'w:type': prev.layout }));\n }\n if (prev.cellSpacing !== undefined) {\n const csAttrs: Record<string, string | number> = {\n 'w:w': prev.cellSpacing,\n 'w:type': prev.cellSpacingType || 'dxa',\n };\n prevTblPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', csAttrs));\n }\n if (prev.bidiVisual) {\n prevTblPrChildren.push(XMLBuilder.wSelf('bidiVisual'));\n }\n if (prev.cellMargins) {\n const cmChildren: XMLElement[] = [];\n for (const side of ['top', 'start', 'bottom', 'end'] as const) {\n const val = (prev.cellMargins as Record<string, number | undefined>)[side];\n if (val !== undefined) {\n cmChildren.push(XMLBuilder.wSelf(side, { 'w:w': val, 'w:type': 'dxa' }));\n }\n }\n if (cmChildren.length > 0) {\n prevTblPrChildren.push(XMLBuilder.w('tblCellMar', undefined, cmChildren));\n }\n }\n if (prev.tblLook) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblLook', buildTblLookAttributes(prev.tblLook)));\n }\n if (prev.tblStyleRowBandSize !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblStyleRowBandSize', { 'w:val': prev.tblStyleRowBandSize })\n );\n }\n if (prev.tblStyleColBandSize !== undefined) {\n prevTblPrChildren.push(\n XMLBuilder.wSelf('tblStyleColBandSize', { 'w:val': prev.tblStyleColBandSize })\n );\n }\n if (prev.overlap) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblOverlap', { 'w:val': prev.overlap }));\n }\n if (prev.caption) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblCaption', { 'w:val': prev.caption }));\n }\n if (prev.description) {\n prevTblPrChildren.push(XMLBuilder.wSelf('tblDescription', { 'w:val': prev.description }));\n }\n }\n const prevTblPr = XMLBuilder.w('tblPr', undefined, prevTblPrChildren);\n tblPrChildren.push(XMLBuilder.w('tblPrChange', changeAttrs, [prevTblPr]));\n }\n\n // Build table element\n const tableChildren: XMLElement[] = [];\n\n // Add table properties\n tableChildren.push(XMLBuilder.w('tblPr', undefined, tblPrChildren));\n\n // Add table grid (column definitions)\n // Per ECMA-376 Part 1 §17.4.49, w:tblGrid MUST be present in w:tbl\n // Use custom tableGrid if specified, otherwise auto-generate\n // CRITICAL: Use getTotalGridSpan() instead of getCellCount() to account for\n // cells with gridSpan (column span). A row with 2 cells where one spans 4 columns\n // should generate 5 grid columns, not 2.\n const gridWidths = this.formatting.tableGrid;\n const maxColumns = gridWidths\n ? gridWidths.length\n : Math.max(...this.rows.map((row) => row.getTotalGridSpan()), 0);\n\n // Always generate tblGrid - use at least 1 column for empty tables\n const gridColumnCount = maxColumns > 0 ? maxColumns : 1;\n const tblGridChildren: XMLElement[] = [];\n\n for (let i = 0; i < gridColumnCount; i++) {\n if (gridWidths?.[i] !== undefined) {\n // Use specified grid width\n tblGridChildren.push(XMLBuilder.wSelf('gridCol', { 'w:w': gridWidths[i] }));\n } else {\n // Auto width (default to 2880 twips = 2 inches)\n tblGridChildren.push(XMLBuilder.wSelf('gridCol', { 'w:w': 2880 }));\n }\n }\n // Add tblGridChange if present (per ECMA-376 §17.13.5.35, must be last child of tblGrid)\n if (this.tblGridChange) {\n tblGridChildren.push(this.tblGridChange.toXML());\n }\n tableChildren.push(XMLBuilder.w('tblGrid', undefined, tblGridChildren));\n\n // Add rows\n for (const row of this.rows) {\n tableChildren.push(row.toXML());\n }\n\n return XMLBuilder.w('tbl', undefined, tableChildren);\n }\n\n /**\n * Removes a row from the table\n *\n * Deletes the row at the specified index and shifts subsequent rows up.\n *\n * @param index - The row index to remove (0-based)\n * @returns True if the row was removed, false if index was invalid\n *\n * @example\n * ```typescript\n * table.removeRow(0); // Remove first row\n * table.removeRow(2); // Remove third row\n * ```\n */\n removeRow(index: number): boolean {\n if (index >= 0 && index < this.rows.length) {\n // When tracking enabled, mark cells with cellDel and wrap content in w:del\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n const row = this.rows[index]!;\n for (const cell of row.getCells()) {\n const cellDelRevision = Revision.createTableCellDelete(author, []);\n cell.setCellRevision(cellDelRevision);\n // Wrap paragraph runs in w:del so content appears as deleted\n for (const para of cell.getParagraphs()) {\n const runs = para.getRuns();\n if (runs.length > 0) {\n const deletion = Revision.createDeletion(author, runs);\n para.addRevision(deletion);\n }\n }\n }\n return true;\n }\n this.rows.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Inserts a row at a specific position\n *\n * Inserts a new row at the specified index. If no row is provided,\n * creates an empty row with columns matching the table's column count.\n *\n * @param index - Position to insert at (0-based, clamped to valid range)\n * @param row - Optional TableRow to insert (creates new row if not provided)\n * @returns The inserted TableRow instance\n *\n * @example\n * ```typescript\n * // Insert empty row at beginning\n * const row = table.insertRow(0);\n *\n * // Insert custom row in the middle\n * const customRow = new TableRow(3);\n * table.insertRow(2, customRow);\n * ```\n */\n insertRow(index: number, row?: TableRow): TableRow {\n // Clamp index to valid range\n if (index < 0) index = 0;\n if (index > this.rows.length) index = this.rows.length;\n\n // Create new row if not provided, matching the column count\n if (!row) {\n const columnCount = this.getColumnCount();\n row = new TableRow(columnCount);\n }\n\n // Insert the row\n this.rows.splice(index, 0, row);\n\n // When tracking enabled, mark every cell in the new row with cellIns\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (const cell of row.getCells()) {\n const revision = Revision.createTableCellInsert(author, []);\n cell.setCellRevision(revision);\n }\n }\n\n return row;\n }\n\n /**\n * Adds a column to all rows in the table\n *\n * Inserts a new cell in each row at the specified position.\n * If no index is provided, adds the column at the end.\n *\n * @param index - Optional position to insert the column (0-based, defaults to end)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.addColumn(); // Add column at end\n * table.addColumn(0); // Insert column at beginning\n * table.addColumn(2); // Insert column at position 2\n * ```\n */\n addColumn(index?: number): this {\n const isTracking = this.trackingContext?.isEnabled();\n const author = isTracking ? this.trackingContext!.getAuthor() : '';\n\n for (const row of this.rows) {\n const cell = new TableCell();\n\n // Mark cell as inserted when tracking\n if (isTracking) {\n const revision = Revision.createTableCellInsert(author, []);\n cell.setCellRevision(revision);\n }\n\n const cells = row.getCells();\n\n if (index === undefined || index >= cells.length) {\n // Add to end\n row.addCell(cell);\n } else {\n // Insert at specific position\n const idx = Math.max(0, index);\n row.insertCellAt(idx, cell);\n }\n }\n return this;\n }\n\n /**\n * Removes a column from all rows in the table\n *\n * Deletes the cell at the specified column index in every row.\n *\n * @param index - The column index to remove (0-based)\n * @returns True if the column was removed from at least one row, false if index was invalid\n *\n * @example\n * ```typescript\n * table.removeColumn(0); // Remove first column\n * table.removeColumn(2); // Remove third column\n * ```\n */\n removeColumn(index: number): boolean {\n if (index < 0 || this.rows.length === 0) {\n return false;\n }\n\n // When tracking enabled, mark cells with cellDel instead of removing\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n let marked = false;\n for (const row of this.rows) {\n const cells = row.getCells();\n if (index < cells.length) {\n const revision = Revision.createTableCellDelete(author, []);\n cells[index]!.setCellRevision(revision);\n marked = true;\n }\n }\n return marked;\n }\n\n let removed = false;\n for (const row of this.rows) {\n const cells = row.getCells();\n if (index < cells.length) {\n row.removeCellAt(index);\n removed = true;\n }\n }\n\n return removed;\n }\n\n /**\n * Gets the maximum column count across all rows\n *\n * Returns the highest number of cells in any row. Useful since\n * rows may have different numbers of cells.\n *\n * @returns Maximum number of columns in the table\n *\n * @example\n * ```typescript\n * console.log(`Table has up to ${table.getColumnCount()} columns`);\n * ```\n */\n getColumnCount(): number {\n if (this.rows.length === 0) {\n return 0;\n }\n return Math.max(...this.rows.map((row) => row.getCellCount()));\n }\n\n /**\n * Sets specific widths for table columns\n *\n * Defines the width of each column. Use null for auto-width columns.\n *\n * @param widths - Array of column widths in twips (null = auto width)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * // First column 2\", second column 3\", third auto\n * table.setColumnWidths([2880, 4320, null]);\n * ```\n */\n setColumnWidths(widths: (number | null)[]): this {\n // Use tableGrid (the property that toXML() actually reads)\n // Convert null values to undefined for auto-width handling in toXML()\n this.formatting.tableGrid = widths.map((w) => (w === null ? undefined : w)) as number[];\n return this;\n }\n\n /**\n * Creates a new Table instance\n *\n * Factory method for creating a table with specified dimensions and formatting.\n *\n * @param rows - Number of rows to create\n * @param columns - Number of columns per row\n * @param formatting - Optional table formatting properties\n * @returns New Table instance\n *\n * @example\n * ```typescript\n * const table = Table.create(3, 4); // 3 rows × 4 columns\n * const styledTable = Table.create(2, 3, {\n * alignment: 'center',\n * layout: 'auto'\n * });\n * ```\n */\n static create(rows?: number, columns?: number, formatting?: TableFormatting): Table {\n return new Table(rows, columns, formatting);\n }\n\n /**\n * Merges cells into a single cell (uses columnSpan and rowSpan)\n * @param startRow - Starting row index (0-based)\n * @param startCol - Starting column index (0-based)\n * @param endRow - Ending row index (0-based, inclusive)\n * @param endCol - Ending column index (0-based, inclusive)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.mergeCells(0, 0, 0, 2); // Merge cells across columns in first row\n * table.mergeCells(0, 0, 2, 0); // Merge cells down rows in first column\n * ```\n */\n mergeCells(startRow: number, startCol: number, endRow: number, endCol: number): this {\n // Validate bounds\n if (startRow < 0 || endRow >= this.rows.length || startCol < 0 || endCol < 0) {\n return this;\n }\n\n // Validate that end position is >= start position\n if (endRow < startRow || endCol < startCol) {\n return this;\n }\n\n const cell = this.getCell(startRow, startCol);\n if (!cell) {\n return this;\n }\n\n // Check for merge conflicts - cells already part of another merge region\n // This prevents undefined behavior when merging overlapping regions\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const checkCell = this.getCell(row, col);\n if (!checkCell) continue;\n\n // Check if cell is already part of a vertical merge\n const vMerge = checkCell.getVerticalMerge();\n if (vMerge) {\n // Allow if this is the start cell and it's a 'restart' (we'll overwrite it)\n if (row === startRow && col === startCol && vMerge === 'restart') {\n continue;\n }\n // Cell is part of an existing vertical merge - conflict\n throw new Error(\n `Cannot merge cells: Cell at row ${row}, column ${col} is already part of a vertical merge region. ` +\n `Use splitCell() or clear existing merges before creating new merge regions.`\n );\n }\n\n // Check if cell has a column span > 1 (already part of horizontal merge)\n const colSpan = checkCell.getColumnSpan();\n if (colSpan > 1) {\n // Allow if this is the start cell (we'll overwrite its span)\n if (row === startRow && col === startCol) {\n continue;\n }\n // Cell has existing column span - conflict\n throw new Error(\n `Cannot merge cells: Cell at row ${row}, column ${col} already has a column span of ${colSpan}. ` +\n `Use splitCell() or clear existing merges before creating new merge regions.`\n );\n }\n }\n }\n\n // Set column span if merging horizontally\n if (endCol > startCol) {\n cell.setColumnSpan(endCol - startCol + 1);\n }\n\n // Set vertical merge if merging vertically\n if (endRow > startRow) {\n // First cell starts the merge region\n cell.setVerticalMerge('restart');\n\n // Subsequent cells continue the merge\n for (let row = startRow + 1; row <= endRow; row++) {\n const mergeCell = this.getCell(row, startCol);\n if (mergeCell) {\n mergeCell.setVerticalMerge('continue');\n // If also merging horizontally, set column span on all merged cells\n if (endCol > startCol) {\n mergeCell.setColumnSpan(endCol - startCol + 1);\n }\n }\n }\n }\n\n // When tracking, mark absorbed cells with cellMerge\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n // Skip the start cell\n if (row === startRow && col === startCol) continue;\n const absorbedCell = this.getCell(row, col);\n if (absorbedCell) {\n const revision = Revision.createTableCellMerge(author, []);\n absorbedCell.setCellRevision(revision);\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * Splits a cell (removes column/row span)\n * @param row - Row index (0-based)\n * @param col - Column index (0-based)\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.splitCell(0, 0); // Remove any spanning from cell\n * ```\n */\n splitCell(row: number, col: number): this {\n const cell = this.getCell(row, col);\n if (cell) {\n cell.setColumnSpan(1); // Reset to single cell\n cell.setVerticalMerge(undefined); // Clear vertical merge\n }\n return this;\n }\n\n /**\n * Checks if a merge region would conflict with existing merges\n * @param startRow - Starting row index (0-based)\n * @param startCol - Starting column index (0-based)\n * @param endRow - Ending row index (0-based, inclusive)\n * @param endCol - Ending column index (0-based, inclusive)\n * @returns Object with valid flag and list of conflicts found\n * @example\n * ```typescript\n * const result = table.canMergeCells(0, 0, 2, 2);\n * if (!result.valid) {\n * console.log('Conflicts:', result.conflicts);\n * }\n * ```\n */\n canMergeCells(\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number\n ): { valid: boolean; conflicts: string[] } {\n const conflicts: string[] = [];\n\n // Validate bounds\n if (\n startRow < 0 ||\n endRow >= this.rows.length ||\n startCol < 0 ||\n endCol < 0 ||\n endRow < startRow ||\n endCol < startCol\n ) {\n conflicts.push('Invalid cell range specified');\n return { valid: false, conflicts };\n }\n\n // Check each cell in the proposed merge region\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const checkCell = this.getCell(row, col);\n if (!checkCell) {\n conflicts.push(`Cell at row ${row}, column ${col} does not exist`);\n continue;\n }\n\n // Check if cell is already part of a vertical merge\n const vMerge = checkCell.getVerticalMerge();\n if (vMerge) {\n // Allow if this is the start cell and it's a 'restart'\n if (!(row === startRow && col === startCol && vMerge === 'restart')) {\n conflicts.push(\n `Cell at row ${row}, column ${col} is part of a vertical merge (${vMerge})`\n );\n }\n }\n\n // Check if cell has a column span > 1\n const colSpan = checkCell.getColumnSpan();\n if (colSpan > 1) {\n // Allow if this is the start cell\n if (!(row === startRow && col === startCol)) {\n conflicts.push(`Cell at row ${row}, column ${col} has column span of ${colSpan}`);\n }\n }\n }\n }\n\n return { valid: conflicts.length === 0, conflicts };\n }\n\n /**\n * Moves cell contents from one position to another\n * @param fromRow - Source row index\n * @param fromCol - Source column index\n * @param toRow - Target row index\n * @param toCol - Target column index\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.moveCell(0, 0, 1, 1); // Move cell from [0,0] to [1,1]\n * ```\n */\n moveCell(fromRow: number, fromCol: number, toRow: number, toCol: number): this {\n const fromCell = this.getCell(fromRow, fromCol);\n const toCell = this.getCell(toRow, toCol);\n\n if (!fromCell || !toCell) {\n return this;\n }\n\n // Copy all paragraphs from source to target\n const paragraphs = fromCell.getParagraphs();\n for (const para of paragraphs) {\n toCell.addParagraph(para);\n }\n\n // Copy formatting\n const formatting = fromCell.getFormatting();\n if (formatting.shading) toCell.setShading(formatting.shading);\n if (formatting.borders) toCell.setBorders(formatting.borders);\n if (formatting.width) toCell.setWidth(formatting.width);\n if (formatting.verticalAlignment) toCell.setVerticalAlignment(formatting.verticalAlignment);\n\n // Clear source cell (replace with empty paragraph)\n const row = this.getRow(fromRow);\n if (row) {\n const cells = row.getCells();\n cells[fromCol] = new TableCell();\n }\n\n return this;\n }\n\n /**\n * Swaps contents of two cells\n * @param row1 - First cell row index\n * @param col1 - First cell column index\n * @param row2 - Second cell row index\n * @param col2 - Second cell column index\n * @returns This table for chaining\n * @example\n * ```typescript\n * table.swapCells(0, 0, 1, 1); // Swap cells at [0,0] and [1,1]\n * ```\n */\n swapCells(row1: number, col1: number, row2: number, col2: number): this {\n const row1Obj = this.getRow(row1);\n const row2Obj = this.getRow(row2);\n\n if (!row1Obj || !row2Obj) {\n return this;\n }\n\n const cells1 = row1Obj.getCells();\n const cells2 = row2Obj.getCells();\n\n if (col1 >= cells1.length || col2 >= cells2.length) {\n return this;\n }\n\n // Swap cells\n const temp = cells1[col1];\n cells1[col1] = cells2[col2]!;\n cells2[col2] = temp!;\n\n return this;\n }\n\n /**\n * Sets the width of a specific column\n *\n * Defines the width for a single column without affecting others.\n *\n * @param columnIndex - The column index (0-based)\n * @param width - Width in twips (1/20th of a point)\n * @returns This table instance for method chaining\n *\n * @example\n * ```typescript\n * table.setColumnWidth(0, 2880); // First column = 2 inches\n * table.setColumnWidth(1, 1440); // Second column = 1 inch\n * ```\n */\n setColumnWidth(columnIndex: number, width: number): this {\n // Use tableGrid (the property that toXML() actually reads)\n const tableGrid = this.formatting.tableGrid || [];\n tableGrid[columnIndex] = width;\n this.formatting.tableGrid = tableGrid;\n return this;\n }\n\n /**\n * Inserts multiple rows at once\n * @param startIndex - Position to insert at (0-based)\n * @param count - Number of rows to insert\n * @returns Array of inserted rows\n * @example\n * ```typescript\n * const rows = table.insertRows(2, 3); // Insert 3 rows at position 2\n * ```\n */\n insertRows(startIndex: number, count: number): TableRow[] {\n const insertedRows: TableRow[] = [];\n const columnCount = this.getColumnCount();\n\n for (let i = 0; i < count; i++) {\n const row = new TableRow(columnCount);\n this.insertRow(startIndex + i, row);\n insertedRows.push(row);\n }\n\n return insertedRows;\n }\n\n /**\n * Removes multiple rows at once\n * @param startIndex - Starting position (0-based)\n * @param count - Number of rows to remove\n * @returns True if rows were removed\n * @example\n * ```typescript\n * table.removeRows(2, 3); // Remove 3 rows starting at position 2\n * ```\n */\n removeRows(startIndex: number, count: number): boolean {\n if (startIndex < 0 || startIndex >= this.rows.length || count <= 0) {\n return false;\n }\n\n const actualCount = Math.min(count, this.rows.length - startIndex);\n\n // When tracking enabled, mark each row's cells with cellDel + w:del\n if (this.trackingContext?.isEnabled()) {\n const author = this.trackingContext.getAuthor();\n for (let i = startIndex; i < startIndex + actualCount; i++) {\n const row = this.rows[i]!;\n for (const cell of row.getCells()) {\n const cellDelRevision = Revision.createTableCellDelete(author, []);\n cell.setCellRevision(cellDelRevision);\n for (const para of cell.getParagraphs()) {\n const runs = para.getRuns();\n if (runs.length > 0) {\n const deletion = Revision.createDeletion(author, runs);\n para.addRevision(deletion);\n }\n }\n }\n }\n return true;\n }\n\n this.rows.splice(startIndex, actualCount);\n return actualCount > 0;\n }\n\n /**\n * Sorts table rows by the content of a specified column\n *\n * Sorts all rows based on the text content of cells in the given column.\n * By default, excludes the first row (header row) from sorting.\n *\n * @param columnIndex - Column to sort by (0-based)\n * @param options - Sort options\n * @param options.ascending - Sort ascending (default: true)\n * @param options.numeric - Treat values as numbers (default: false, string sort)\n * @param options.skipHeaderRow - Skip first row from sorting (default: true)\n * @returns This table for chaining\n *\n * @example\n * ```typescript\n * // Sort by first column alphabetically\n * table.sortRows(0);\n *\n * // Sort by third column numerically, descending\n * table.sortRows(2, { numeric: true, ascending: false });\n *\n * // Sort all rows including header\n * table.sortRows(0, { skipHeaderRow: false });\n * ```\n */\n sortRows(\n columnIndex: number,\n options?: { ascending?: boolean; numeric?: boolean; skipHeaderRow?: boolean }\n ): this {\n const ascending = options?.ascending ?? true;\n const numeric = options?.numeric ?? false;\n const skipHeaderRow = options?.skipHeaderRow ?? true;\n\n if (this.rows.length <= 1) {\n return this; // Nothing to sort\n }\n\n // Determine which rows to sort\n const headerRow = skipHeaderRow ? this.rows.shift() : null;\n const rowsToSort = [...this.rows];\n\n // Sort the rows\n rowsToSort.sort((a, b) => {\n const cellA = a.getCell(columnIndex);\n const cellB = b.getCell(columnIndex);\n\n const textA = cellA?.getText().trim() || '';\n const textB = cellB?.getText().trim() || '';\n\n let comparison: number;\n if (numeric) {\n const numA = parseFloat(textA) || 0;\n const numB = parseFloat(textB) || 0;\n comparison = numA - numB;\n } else {\n comparison = textA.localeCompare(textB);\n }\n\n return ascending ? comparison : -comparison;\n });\n\n // Reconstruct rows array\n this.rows = headerRow ? [headerRow, ...rowsToSort] : rowsToSort;\n\n return this;\n }\n\n /**\n * Creates a deep clone of this table\n *\n * Creates a new Table with copies of all rows, cells, content, and formatting.\n * The clone is completely independent of the original.\n *\n * @returns New Table instance with the same structure and content\n *\n * @example\n * ```typescript\n * const original = new Table(2, 3);\n * original.getCell(0, 0)?.addParagraph(new Paragraph().addText('Data'));\n *\n * const copy = original.clone();\n * copy.getCell(0, 0)?.addParagraph(new Paragraph().addText(' - Modified'));\n * // Original table unchanged\n * ```\n */\n clone(): Table {\n // Clone formatting\n const clonedFormatting: TableFormatting = deepClone(this.formatting);\n\n // Create new table with same structure\n const clonedTable = new Table(0, 0, clonedFormatting);\n\n // Clone all rows\n for (const row of this.rows) {\n // Clone row by creating new cells with same content\n const cells = row.getCells();\n const clonedRow = new TableRow(0);\n\n for (const cell of cells) {\n const cellFormatting = cell.getFormatting();\n const clonedCell = new TableCell(deepClone(cellFormatting));\n\n // Clone paragraphs in cell\n for (const para of cell.getParagraphs()) {\n clonedCell.addParagraph(para.clone());\n }\n\n clonedRow.addCell(clonedCell);\n }\n\n clonedTable.addRow(clonedRow);\n }\n\n return clonedTable;\n }\n}\n"]}
|