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":"TableCell.d.ts","sourceRoot":"","sources":["../../src/elements/TableCell.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TableCell.d.ts","sourceRoot":"","sources":["../../src/elements/TableCell.ts"],"names":[],"mappings":"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"}
|
|
@@ -657,6 +657,20 @@ class TableCell {
|
|
|
657
657
|
'w:type': prev.widthType || 'dxa',
|
|
658
658
|
}));
|
|
659
659
|
}
|
|
660
|
+
if (prev.columnSpan && prev.columnSpan > 1) {
|
|
661
|
+
prevTcPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('gridSpan', { 'w:val': prev.columnSpan }));
|
|
662
|
+
}
|
|
663
|
+
if (prev.hMerge) {
|
|
664
|
+
prevTcPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('hMerge', { 'w:val': prev.hMerge }));
|
|
665
|
+
}
|
|
666
|
+
if (prev.vMerge) {
|
|
667
|
+
if (prev.vMerge === 'restart') {
|
|
668
|
+
prevTcPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('vMerge', { 'w:val': 'restart' }));
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
prevTcPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('vMerge'));
|
|
672
|
+
}
|
|
673
|
+
}
|
|
660
674
|
if (prev.borders) {
|
|
661
675
|
const borderElements = [];
|
|
662
676
|
if (prev.borders.top)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCell.js","sourceRoot":"","sources":["../../src/elements/TableCell.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TableCell - Represents a cell in a table\n */\n\nimport { formatDateForXml } from '../utils/dateFormatting';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { Paragraph, TextDirection } from './Paragraph';\nimport { Revision } from './Revision';\nimport {\n BorderStyle as CommonBorderStyle,\n BorderDefinition,\n FourSidedBorders,\n CellVerticalAlignment as CommonCellVerticalAlignment,\n ShadingConfig,\n ShadingPattern,\n buildShadingAttributes,\n WidthType,\n} from './CommonTypes';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Cell border style\n * @see CommonTypes.BorderStyle\n */\nexport type BorderStyle = CommonBorderStyle;\n\n/**\n * Cell border definition\n * @see CommonTypes.BorderDefinition\n */\nexport interface CellBorder {\n style?: BorderStyle;\n size?: number; // Size in eighths of a point\n color?: string; // Hex color without #\n}\n\n/**\n * Cell borders\n * @see CommonTypes.FourSidedBorders\n */\nexport interface CellBorders {\n top?: CellBorder;\n bottom?: CellBorder;\n left?: CellBorder;\n right?: CellBorder;\n /** Diagonal border from top-left to bottom-right per ECMA-376 Part 1 §17.4.84 */\n tl2br?: CellBorder;\n /** Diagonal border from top-right to bottom-left per ECMA-376 Part 1 §17.4.85 */\n tr2bl?: CellBorder;\n}\n\n/**\n * Cell shading/background\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type CellShading = ShadingConfig;\n\n/**\n * Vertical alignment in cell\n * @see CommonTypes.CellVerticalAlignment\n */\nexport type CellVerticalAlignment = CommonCellVerticalAlignment;\n\n/**\n * Cell margins (spacing inside cell borders)\n * Per ECMA-376 Part 1 §17.4.43\n */\nexport interface CellMargins {\n top?: number; // Margin in twips\n bottom?: number; // Margin in twips\n left?: number; // Margin in twips\n right?: number; // Margin in twips\n}\n\n/**\n * Cell width type\n * Per ECMA-376 Part 1 §17.18.87\n */\nexport type CellWidthType = 'auto' | 'dxa' | 'pct';\n\n/**\n * Vertical merge type for cells\n * Per ECMA-376 Part 1 §17.4.85\n */\nexport type VerticalMerge = 'restart' | 'continue';\n\n/**\n * Cell formatting options\n */\nexport interface CellFormatting {\n width?: number; // Width in twips\n widthType?: CellWidthType; // Width type (auto, dxa, pct)\n borders?: CellBorders;\n shading?: CellShading;\n verticalAlignment?: CellVerticalAlignment;\n columnSpan?: number; // Number of columns to span (gridSpan)\n rowSpan?: number; // Number of rows to span (gridSpan)\n margins?: CellMargins; // Cell margins (spacing inside borders)\n textDirection?: TextDirection; // Text flow direction\n fitText?: boolean; // Fit text to cell width\n noWrap?: boolean; // Prevent text wrapping\n hideMark?: boolean; // Hide end-of-cell mark\n cnfStyle?: string; // Conditional formatting style (14-char binary string)\n vMerge?: VerticalMerge; // Vertical cell merge\n hMerge?: 'restart' | 'continue'; // Legacy horizontal merge (w:hMerge) per ECMA-376 Part 1 §17.4.22\n /** Cell headers attribute for accessibility per ECMA-376 Part 1 §17.4.26 */\n headers?: string;\n}\n\n/**\n * Raw nested content stored as XML to preserve nested tables/SDTs\n * Position indicates after which paragraph index the content appears\n */\nexport interface RawNestedContent {\n position: number; // Content appears after this paragraph index\n xml: string; // Raw XML content\n type: 'table' | 'sdt'; // Type of nested content\n}\n\n/**\n * Table cell property change tracking (w:tcPrChange)\n * Per ECMA-376 Part 1 §17.13.5.37\n */\nexport interface TcPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\n/**\n * Represents a table cell\n */\nexport class TableCell {\n private paragraphs: Paragraph[] = [];\n private formatting: CellFormatting;\n /** Raw nested content (tables, SDTs) stored as XML for passthrough */\n private rawNestedContent: RawNestedContent[] = [];\n /** Parent row reference (if cell is inside a table row) */\n private _parentRow?: import('./TableRow').TableRow;\n /** Table cell revision (w:cellIns, w:cellDel, w:cellMerge) per ECMA-376 Part 1 §17.13.5.4-5.6 */\n private cellRevision?: Revision;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table cell property change tracking (w:tcPrChange) */\n private tcPrChange?: TcPrChange;\n\n /**\n * Creates a new TableCell\n * @param formatting - Cell formatting options\n */\n constructor(formatting: CellFormatting = {}) {\n this.formatting = formatting;\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 cell property change tracking info\n * @returns tcPrChange or undefined\n */\n getTcPrChange(): TcPrChange | undefined {\n return this.tcPrChange;\n }\n\n /**\n * Sets the table cell property change tracking info\n * @param change - Property change info or undefined to clear\n */\n setTcPrChange(change: TcPrChange | undefined): void {\n this.tcPrChange = change;\n }\n\n /**\n * Clears the table cell property change tracking\n */\n clearTcPrChange(): void {\n this.tcPrChange = undefined;\n }\n\n /**\n * Adds a paragraph to the cell\n * @param paragraph - Paragraph to add\n * @returns This cell for chaining\n */\n addParagraph(paragraph: Paragraph): this {\n this.paragraphs.push(paragraph);\n paragraph._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n paragraph._setStylesManager(stylesManager);\n }\n return this;\n }\n\n /**\n * Creates and adds a new paragraph with text\n * @param text - Text content\n * @returns The created paragraph\n */\n createParagraph(text?: string): Paragraph {\n const para = new Paragraph();\n if (text) {\n para.addText(text);\n }\n this.paragraphs.push(para);\n para._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n para._setStylesManager(stylesManager);\n }\n return para;\n }\n\n /**\n * Gets all paragraphs in the cell\n * @returns Array of paragraphs\n */\n getParagraphs(): Paragraph[] {\n return [...this.paragraphs];\n }\n\n /**\n * Removes a paragraph at the specified index\n * @param index - Index of paragraph to remove\n * @returns True if removed, false if index out of bounds\n */\n removeParagraph(index: number): boolean {\n if (index < 0 || index >= this.paragraphs.length) {\n return false;\n }\n\n // When tracking enabled, wrap content in w:del instead of removing\n if (this.trackingContext?.isEnabled()) {\n const paragraph = this.paragraphs[index]!;\n const runs = paragraph.getRuns();\n if (runs.length > 0) {\n const author = this.trackingContext.getAuthor();\n const deletion = Revision.createDeletion(author, runs);\n this.trackingContext.getRevisionManager().register(deletion);\n paragraph.addRevision(deletion);\n }\n return true;\n }\n\n const removed = this.paragraphs.splice(index, 1);\n const removedPara = removed[0];\n if (removedPara) {\n removedPara._setParentCell(undefined);\n }\n\n // Update raw nested content positions\n // Any nested content positioned AFTER the removed paragraph needs its position decremented\n // This maintains correct relative positioning for nested tables, SDTs, etc.\n for (const item of this.rawNestedContent) {\n if (item.position > index) {\n item.position--;\n }\n }\n\n return true;\n }\n\n /**\n * Adds a paragraph at the specified index\n * @param index - Index to insert at\n * @param paragraph - Paragraph to add\n * @returns This cell for chaining\n */\n addParagraphAt(index: number, paragraph: Paragraph): this {\n if (index < 0) {\n index = 0;\n }\n\n // Determine actual insertion index\n const actualIndex = index >= this.paragraphs.length ? this.paragraphs.length : index;\n\n if (index >= this.paragraphs.length) {\n this.paragraphs.push(paragraph);\n } else {\n this.paragraphs.splice(index, 0, paragraph);\n }\n\n // Update raw nested content positions\n // Any nested content positioned AT OR AFTER the insertion point needs its position incremented\n // This maintains correct relative positioning for nested tables, SDTs, etc.\n for (const item of this.rawNestedContent) {\n if (item.position >= actualIndex) {\n item.position++;\n }\n }\n\n paragraph._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n paragraph._setStylesManager(stylesManager);\n }\n\n // When tracking enabled, wrap paragraph content in w:ins revision\n if (this.trackingContext?.isEnabled()) {\n const runs = paragraph.getRuns();\n if (runs.length > 0) {\n const author = this.trackingContext.getAuthor();\n const insertion = Revision.createInsertion(author, runs);\n this.trackingContext.getRevisionManager().register(insertion);\n paragraph.addRevision(insertion);\n }\n }\n\n return this;\n }\n\n /**\n * Gets the text content of all paragraphs\n * @returns Combined text\n */\n getText(): string {\n return this.paragraphs.map((p) => p.getText()).join('\\n');\n }\n\n /**\n * Gets all fields from paragraphs in this cell\n *\n * Collects all Field and ComplexField instances from every paragraph\n * in the table cell.\n *\n * @returns Array of fields (Field and ComplexField instances)\n *\n * @example\n * ```typescript\n * const cell = table.getCell(0, 0);\n * const fields = cell?.getFields() || [];\n * console.log(`Cell has ${fields.length} fields`);\n * ```\n */\n getFields(): (import('./Field').Field | import('./Field').ComplexField)[] {\n const fields: (import('./Field').Field | import('./Field').ComplexField)[] = [];\n for (const para of this.paragraphs) {\n fields.push(...para.getFields());\n }\n return fields;\n }\n\n /**\n * Finds fields matching a predicate function\n *\n * Searches through all fields in the cell and returns those matching\n * the specified criteria.\n *\n * @param predicate - Function to test each field\n * @returns Array of matching fields\n *\n * @example\n * ```typescript\n * // Find all PAGE fields\n * const pageFields = cell.findFields(f =>\n * f.getInstruction().startsWith('PAGE')\n * );\n *\n * // Find fields with specific switches\n * const mergeFields = cell.findFields(f =>\n * f.getInstruction().includes('MERGEFIELD')\n * );\n * ```\n */\n findFields(\n predicate: (field: import('./Field').Field | import('./Field').ComplexField) => boolean\n ): (import('./Field').Field | import('./Field').ComplexField)[] {\n return this.getFields().filter(predicate);\n }\n\n /**\n * Removes all fields from paragraphs in this cell\n *\n * Iterates through each paragraph and removes all fields,\n * preserving text content.\n *\n * @returns Count of fields removed\n *\n * @example\n * ```typescript\n * const count = cell.removeAllFields();\n * console.log(`Removed ${count} fields from cell`);\n * ```\n */\n removeAllFields(): number {\n let count = 0;\n for (const para of this.paragraphs) {\n count += para.removeAllFields();\n }\n return count;\n }\n\n /**\n * Sets cell width\n * @param twips - Width in twips\n * @returns This cell for chaining\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 cell borders\n * @param borders - Border definitions\n * @returns This cell for chaining\n */\n setBorders(borders: CellBorders): this {\n const prev = this.formatting.borders;\n this.formatting.borders = borders;\n if (this.trackingContext?.isEnabled() && prev !== borders) {\n this.trackingContext.trackTableChange(this, 'borders', prev, borders);\n }\n return this;\n }\n\n /**\n * Sets cell shading/background\n * @param shading - Shading definition\n * @returns This cell for chaining\n */\n setShading(shading: CellShading): 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 * Sets vertical alignment\n * @param alignment - Vertical alignment\n * @returns This cell for chaining\n */\n setVerticalAlignment(alignment: CellVerticalAlignment): this {\n const prev = this.formatting.verticalAlignment;\n this.formatting.verticalAlignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'verticalAlignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets column span (merge cells horizontally)\n * @param span - Number of columns to span\n * @returns This cell for chaining\n */\n setColumnSpan(span: number): this {\n const prev = this.formatting.columnSpan;\n this.formatting.columnSpan = span;\n if (this.trackingContext?.isEnabled() && prev !== span) {\n this.trackingContext.trackTableChange(this, 'columnSpan', prev, span);\n }\n return this;\n }\n\n /**\n * Gets the number of columns this cell spans (gridSpan)\n * @returns Column span, defaults to 1 if not set\n */\n getColumnSpan(): number {\n return this.formatting.columnSpan || 1;\n }\n\n /**\n * Gets whether to fit text to cell width\n * @returns true if fit text is enabled, false otherwise\n */\n getFitText(): boolean {\n return this.formatting.fitText ?? false;\n }\n\n /**\n * Gets whether text wrapping is prevented in cell\n * @returns true if no-wrap is enabled, false otherwise\n */\n getNoWrap(): boolean {\n return this.formatting.noWrap ?? false;\n }\n\n /**\n * Gets whether the end-of-cell mark is hidden\n * @returns true if hidden, false otherwise\n */\n getHideMark(): boolean {\n return this.formatting.hideMark ?? false;\n }\n\n /**\n * Gets the conditional formatting style (cnfStyle) for this cell\n * @returns 14-character binary string or undefined if not set\n */\n getCnfStyle(): string | undefined {\n return this.formatting.cnfStyle;\n }\n\n /**\n * Validates a margin value\n * @param value - Margin value in twips\n * @param side - Name of the margin side (for error messages)\n * @throws {Error} If margin is negative or exceeds maximum\n * @private\n */\n private validateMargin(value: number | undefined, side: string): void {\n if (value === undefined) return;\n\n // Margins must be non-negative\n if (value < 0) {\n throw new Error(`Invalid ${side} margin: ${value} twips. Cell margins cannot be negative.`);\n }\n\n // Maximum reasonable margin (1 inch = 1440 twips)\n // Word typically allows up to several inches, but we set a reasonable limit\n const MAX_MARGIN_TWIPS = 14400; // 10 inches\n if (value > MAX_MARGIN_TWIPS) {\n throw new Error(\n `Invalid ${side} margin: ${value} twips exceeds maximum of ${MAX_MARGIN_TWIPS} twips (10 inches).`\n );\n }\n }\n\n /**\n * Sets cell margins (spacing inside cell borders)\n * Per ECMA-376 Part 1 §17.4.43\n * @param margins - Margin definitions for each side\n * @returns This cell for chaining\n * @throws {Error} If any margin value is negative or exceeds maximum\n */\n setMargins(margins: CellMargins): this {\n // Validate each margin\n this.validateMargin(margins.top, 'top');\n this.validateMargin(margins.bottom, 'bottom');\n this.validateMargin(margins.left, 'left');\n this.validateMargin(margins.right, 'right');\n\n const prev = this.formatting.margins;\n this.formatting.margins = margins;\n if (this.trackingContext?.isEnabled() && prev !== margins) {\n this.trackingContext.trackTableChange(this, 'margins', prev, margins);\n }\n return this;\n }\n\n /**\n * Sets all cell margins to the same value\n * @param margin - Margin in twips to apply to all sides\n * @returns This cell for chaining\n * @throws {Error} If margin value is negative or exceeds maximum\n */\n setAllMargins(margin: number): this {\n this.validateMargin(margin, 'all');\n return this.setMargins({ top: margin, bottom: margin, left: margin, right: margin });\n }\n\n /**\n * Sets text direction for cell content\n * Per ECMA-376 Part 1 §17.4.72\n * @param direction - Text flow direction\n * - 'lrTb': Left-to-right, top-to-bottom (default)\n * - 'tbRl': Top-to-bottom, right-to-left (vertical text, East Asian)\n * - 'btLr': Bottom-to-top, left-to-right (vertical text)\n * - 'lrTbV': Left-to-right, top-to-bottom, vertical\n * - 'tbRlV': Top-to-bottom, right-to-left, vertical\n * - 'tbLrV': Top-to-bottom, left-to-right, vertical\n * @returns This cell for chaining\n */\n setTextDirection(direction: TextDirection): this {\n const prev = this.formatting.textDirection;\n this.formatting.textDirection = direction;\n if (this.trackingContext?.isEnabled() && prev !== direction) {\n this.trackingContext.trackTableChange(this, 'textDirection', prev, direction);\n }\n return this;\n }\n\n /**\n * Sets whether to fit text to cell width\n * Per ECMA-376 Part 1 §17.4.68\n * @param fit - Whether to expand/compress text to fit cell width\n * @returns This cell for chaining\n */\n setFitText(fit = true): this {\n const prev = this.formatting.fitText;\n this.formatting.fitText = fit;\n if (this.trackingContext?.isEnabled() && prev !== fit) {\n this.trackingContext.trackTableChange(this, 'fitText', prev, fit);\n }\n return this;\n }\n\n /**\n * Sets whether to prevent text wrapping in cell\n * Per ECMA-376 Part 1 §17.4.34\n * @param noWrap - Whether to prevent wrapping (default: true)\n * @returns This cell for chaining\n */\n setNoWrap(noWrap = true): this {\n const prev = this.formatting.noWrap;\n this.formatting.noWrap = noWrap;\n if (this.trackingContext?.isEnabled() && prev !== noWrap) {\n this.trackingContext.trackTableChange(this, 'noWrap', prev, noWrap);\n }\n return this;\n }\n\n /**\n * Sets whether to hide the end-of-cell mark\n * Per ECMA-376 Part 1 §17.4.24\n * @param hide - Whether to ignore cell end mark in height calculations (default: true)\n * @returns This cell for chaining\n */\n setHideMark(hide = true): this {\n const prev = this.formatting.hideMark;\n this.formatting.hideMark = hide;\n if (this.trackingContext?.isEnabled() && prev !== hide) {\n this.trackingContext.trackTableChange(this, 'hideMark', prev, hide);\n }\n return this;\n }\n\n /**\n * Sets conditional formatting style for this cell\n * Per ECMA-376 Part 1 §17.4.7\n * @param cnfStyle - 14-character binary string representing which conditional formats to apply\n * Each bit position controls a different conditional format (e.g., \"100000000000\" for first row)\n * @returns This cell for chaining\n */\n setConditionalStyle(cnfStyle: string): this {\n const prev = this.formatting.cnfStyle;\n this.formatting.cnfStyle = cnfStyle;\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\n }\n return this;\n }\n\n /**\n * Sets cell width with type specification\n * Per ECMA-376 Part 1 §17.4.81\n * @param width - Width value\n * @param type - Width type: 'auto' (automatic), 'dxa' (twips), or 'pct' (percentage * 50)\n * @returns This cell for chaining\n */\n setWidthType(width: number, type: CellWidthType = 'dxa'): this {\n const prevWidth = this.formatting.width;\n const prevType = this.formatting.widthType;\n this.formatting.width = width;\n this.formatting.widthType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'width', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'widthType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets vertical merge for this cell\n * Per ECMA-376 Part 1 §17.4.85\n * @param merge - Vertical merge type:\n * - 'restart': Start a new vertically merged region (top cell)\n * - 'continue': Continue the current vertically merged region (cells below)\n * @returns This cell for chaining\n */\n setVerticalMerge(merge: VerticalMerge | undefined): this {\n const prev = this.formatting.vMerge;\n this.formatting.vMerge = merge;\n if (this.trackingContext?.isEnabled() && prev !== merge) {\n this.trackingContext.trackTableChange(this, 'vMerge', prev, merge);\n }\n return this;\n }\n\n /**\n * Sets the legacy horizontal merge state per ECMA-376 Part 1 §17.4.22\n * @param merge - 'restart' to start a new merge region, 'continue' to continue, or undefined to clear\n * @returns This cell for chaining\n */\n setHorizontalMerge(merge: 'restart' | 'continue' | undefined): this {\n const prev = this.formatting.hMerge;\n this.formatting.hMerge = merge;\n if (this.trackingContext?.isEnabled() && prev !== merge) {\n this.trackingContext.trackTableChange(this, 'hMerge', prev, merge);\n }\n return this;\n }\n\n // ============================================================================\n // CELL REVISIONS (w:cellIns, w:cellDel, w:cellMerge)\n // ============================================================================\n\n /**\n * Sets the revision marker for this cell\n * Per ECMA-376 Part 1 §17.13.5.4-5.6\n *\n * Table cell revisions track structural changes to table cells:\n * - tableCellInsert (w:cellIns): Cell was inserted\n * - tableCellDelete (w:cellDel): Cell was deleted\n * - tableCellMerge (w:cellMerge): Cell merge/split operation\n *\n * @param revision - Revision marker for this cell\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * const revision = new Revision({\n * id: 1,\n * author: 'Alice',\n * date: new Date(),\n * type: 'tableCellInsert',\n * content: [],\n * });\n * cell.setCellRevision(revision);\n * ```\n */\n setCellRevision(revision: Revision): this {\n this.cellRevision = revision;\n return this;\n }\n\n /**\n * Gets the revision marker for this cell\n *\n * @returns The cell revision if present, undefined otherwise\n *\n * @example\n * ```typescript\n * const revision = cell.getCellRevision();\n * if (revision) {\n * console.log(`Cell ${revision.getType()} by ${revision.getAuthor()}`);\n * }\n * ```\n */\n getCellRevision(): Revision | undefined {\n return this.cellRevision;\n }\n\n /**\n * Checks if this cell has a revision marker\n *\n * @returns True if cell has a revision (insert, delete, or merge)\n */\n hasCellRevision(): boolean {\n return this.cellRevision !== undefined;\n }\n\n /**\n * Clears the revision marker for this cell\n *\n * @returns This cell for chaining\n */\n clearCellRevision(): this {\n this.cellRevision = undefined;\n return this;\n }\n\n // ============================================================================\n // CONVENIENCE METHODS (for easier paragraph manipulation)\n // ============================================================================\n\n /**\n * Sets text alignment for all paragraphs in the cell\n *\n * Applies the specified horizontal alignment to every paragraph\n * in this cell.\n *\n * @param alignment - Paragraph alignment (left, center, right, both)\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * cell.setTextAlignment('center');\n * ```\n */\n setTextAlignment(alignment: import('./Paragraph').ParagraphAlignment): this {\n for (const para of this.paragraphs) {\n para.setAlignment(alignment);\n }\n return this;\n }\n\n /**\n * Sets the style for all paragraphs in the cell\n *\n * Applies the specified style ID to every paragraph in this cell.\n *\n * @param styleId - Style ID to apply\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * cell.setAllParagraphsStyle('TableContent');\n * ```\n */\n setAllParagraphsStyle(styleId: string): this {\n for (const para of this.paragraphs) {\n para.setStyle(styleId);\n }\n return this;\n }\n\n /**\n * Sets font for all runs in the cell\n *\n * Applies the specified font to every text run in every paragraph\n * in this cell.\n *\n * @param fontName - Font name to apply\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsFont('Arial');\n * ```\n */\n setAllRunsFont(fontName: string): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setFont(fontName);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Sets font size for all runs in the cell\n *\n * Applies the specified font size to every text run in every paragraph\n * in this cell.\n *\n * @param size - Font size in half-points (e.g., 24 = 12pt)\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsSize(22); // 11pt\n * ```\n */\n setAllRunsSize(size: number): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setSize(size);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Sets color for all runs in the cell\n *\n * Applies the specified color to every text run in every paragraph\n * in this cell.\n *\n * @param color - Hex color code (e.g., 'FF0000', '#0000FF')\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsColor('000000'); // Black\n * ```\n */\n setAllRunsColor(color: string): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setColor(color);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Gets the cell formatting\n * @returns Cell formatting\n */\n getFormatting(): CellFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the cell 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 cell 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 vertical alignment of cell content\n * @returns Vertical alignment ('top', 'center', 'bottom') or undefined\n */\n getVerticalAlignment(): string | undefined {\n return this.formatting.verticalAlignment;\n }\n\n /**\n * Gets the vertical merge state\n * @returns Vertical merge state ('restart', 'continue') or undefined\n */\n getVerticalMerge(): VerticalMerge | undefined {\n return this.formatting.vMerge;\n }\n\n /**\n * Gets the legacy horizontal merge state\n * @returns Horizontal merge state ('restart', 'continue') or undefined\n */\n getHorizontalMerge(): 'restart' | 'continue' | undefined {\n return this.formatting.hMerge;\n }\n\n /**\n * Sets the cell headers attribute for accessibility\n * Links data cells to header cells per ECMA-376 Part 1 §17.4.26\n * @param headers - Space-separated list of header cell IDs\n * @returns This cell for chaining\n */\n setHeaders(headers: string): this {\n this.formatting.headers = headers;\n return this;\n }\n\n /**\n * Gets the cell headers attribute\n * @returns Headers string or undefined\n */\n getHeaders(): string | undefined {\n return this.formatting.headers;\n }\n\n /**\n * Gets the cell margins\n * @returns Margins object with top, right, bottom, left or undefined\n */\n getMargins(): CellMargins | undefined {\n return this.formatting.margins;\n }\n\n /**\n * Gets the cell borders\n * @returns Borders object or undefined\n */\n getBorders(): CellBorders | undefined {\n return this.formatting.borders;\n }\n\n /**\n * Gets the cell shading/background\n * @returns Shading object or undefined\n */\n getShading(): CellShading | undefined {\n return this.formatting.shading;\n }\n\n /**\n * Gets the text direction for the cell\n * @returns Text direction or undefined\n */\n getTextDirection(): string | undefined {\n return this.formatting.textDirection;\n }\n\n // ============================================================================\n // RAW NESTED CONTENT (Tables, SDTs preserved as XML)\n // ============================================================================\n\n /**\n * Adds raw nested content (table or SDT) to the cell\n * Used during parsing to preserve nested tables that cannot be fully modeled\n * @param position - Paragraph index after which this content appears (0 = before first paragraph)\n * @param xml - Raw XML content\n * @param type - Type of content ('table' or 'sdt')\n * @returns This cell for chaining\n */\n addRawNestedContent(position: number, xml: string, type: 'table' | 'sdt' = 'table'): this {\n this.rawNestedContent.push({ position, xml, type });\n return this;\n }\n\n /**\n * Gets all raw nested content in this cell\n * @returns Array of raw nested content items\n */\n getRawNestedContent(): RawNestedContent[] {\n return [...this.rawNestedContent];\n }\n\n /**\n * Checks if this cell has any nested tables\n * @returns True if cell contains nested tables stored as raw XML\n */\n hasNestedTables(): boolean {\n return this.rawNestedContent.some((c) => c.type === 'table');\n }\n\n /**\n * Checks if this cell has any raw nested content (tables or SDTs)\n * @returns True if cell contains any raw nested content\n */\n hasRawNestedContent(): boolean {\n return this.rawNestedContent.length > 0;\n }\n\n /**\n * Clears all raw nested content from this cell\n * @returns This cell for chaining\n */\n clearRawNestedContent(): this {\n this.rawNestedContent = [];\n return this;\n }\n\n /**\n * Updates raw nested content at a specific index\n * Used for revision acceptance in nested tables\n * @param index - Index in the rawNestedContent array\n * @param xml - New XML content\n * @returns True if updated, false if index out of bounds\n */\n updateRawNestedContent(index: number, xml: string): boolean {\n if (index < 0 || index >= this.rawNestedContent.length) {\n return false;\n }\n const item = this.rawNestedContent[index];\n if (item) {\n item.xml = xml;\n return true;\n }\n return false;\n }\n\n // ============================================================================\n // TRAILING BLANK PARAGRAPH REMOVAL\n // ============================================================================\n\n /**\n * Removes trailing blank paragraphs from this cell.\n * A trailing blank is a blank paragraph at the end of the cell, after all content.\n * This respects ECMA-376 requirement of at least one paragraph per cell.\n *\n * @param options.ignorePreserveFlag - If true, removes trailing blanks even if marked preserved (default: false)\n * @returns Number of paragraphs removed\n *\n * @example\n * ```typescript\n * // Remove trailing blanks, respecting preserve flags\n * const removed = cell.removeTrailingBlankParagraphs();\n *\n * // Remove all trailing blanks, ignoring preserve flags\n * const removed = cell.removeTrailingBlankParagraphs({ ignorePreserveFlag: true });\n * ```\n */\n removeTrailingBlankParagraphs(options?: { ignorePreserveFlag?: boolean }): number {\n let removed = 0;\n const ignorePreserve = options?.ignorePreserveFlag ?? false;\n\n // Work backwards from end of paragraphs array\n while (this.paragraphs.length > 1) {\n const lastIndex = this.paragraphs.length - 1;\n const lastPara = this.paragraphs[lastIndex];\n\n if (!lastPara) break;\n\n // Check if this is a blank paragraph\n const isBlank = this.isParaBlank(lastPara);\n\n // Stop if not blank\n if (!isBlank) break;\n\n // Stop if preserved and we're respecting preserve flags\n if (!ignorePreserve && lastPara.isPreserved()) break;\n\n // Check if there's raw nested content positioned after this paragraph\n // If so, we should NOT remove this trailing blank as it maintains structure\n const hasContentAfter = this.rawNestedContent.some((item) => item.position >= lastIndex);\n if (hasContentAfter) break;\n\n this.removeParagraph(lastIndex);\n removed++;\n }\n\n return removed;\n }\n\n /**\n * Checks if a paragraph is blank (no meaningful content).\n * A paragraph is considered blank if it has no text, images, shapes, hyperlinks, fields,\n * cnfStyle (conditional formatting), or other structural elements.\n *\n * IMPORTANT: cnfStyle preservation is critical! When a paragraph with cnfStyle is removed,\n * Word may apply default table style conditional formatting to the cell, causing unexpected\n * shading changes. A paragraph with cnfStyle=\"000000000000\" (no conditionals) keeps the cell\n * from matching table style conditionals like firstRow or band1Horz.\n *\n * @private\n */\n private isParaBlank(para: Paragraph): boolean {\n // Check for text content\n const text = para.getText().trim();\n if (text !== '') return false;\n\n // Check for cnfStyle (conditional formatting) - critical for shading preservation\n // Even a \"blank\" cnfStyle like \"000000000000\" is meaningful as it prevents\n // the cell from inheriting table style conditional formatting\n const cnfStyle = para.getTableConditionalStyle();\n if (cnfStyle && cnfStyle !== '') {\n return false;\n }\n\n // Check all content items for non-text elements\n const content = para.getContent();\n for (const item of content) {\n // Cast to unknown first for safe duck-typing checks\n const itemAny = item as unknown as Record<string, unknown>;\n\n // ImageRun check - ImageRun has getImageElement method\n if (item && typeof itemAny.getImageElement === 'function') {\n return false;\n }\n\n // Shape check - Shape has getShapeType method\n if (item && typeof itemAny.getShapeType === 'function') {\n return false;\n }\n\n // TextBox check - TextBox has getTextContent method\n if (item && typeof itemAny.getTextContent === 'function') {\n return false;\n }\n\n // Hyperlink check - Hyperlink has getUrl method\n if (item && typeof itemAny.getUrl === 'function') {\n return false;\n }\n\n // Field check - Field has getInstruction method\n if (item && typeof itemAny.getInstruction === 'function') {\n return false;\n }\n\n // Revision check - check if revision contains meaningful content\n if (item && typeof itemAny.getText === 'function') {\n const itemText = (itemAny.getText as () => string)().trim();\n if (itemText !== '') return false;\n\n // Also check if revision contains non-text elements (hyperlinks, images, shapes, textboxes)\n if (typeof itemAny.getContent === 'function') {\n const revContent = (itemAny.getContent as () => unknown[])();\n for (const revItem of revContent) {\n const revItemAny = revItem as Record<string, unknown>;\n // Check if revision content is a Hyperlink using duck typing (getUrl method)\n if (revItem && typeof revItemAny.getUrl === 'function') {\n return false; // Revision contains hyperlink - not blank\n }\n // Check if revision content is an ImageRun (getImageElement method)\n if (revItem && typeof revItemAny.getImageElement === 'function') {\n return false; // Revision contains image - not blank\n }\n // Check if revision content is a Shape (getShapeType method)\n if (revItem && typeof revItemAny.getShapeType === 'function') {\n return false; // Revision contains shape - not blank\n }\n // Check if revision content is a TextBox (getTextContent method)\n if (revItem && typeof revItemAny.getTextContent === 'function') {\n return false; // Revision contains textbox - not blank\n }\n }\n }\n }\n }\n\n // Check for bookmarks (they count as content)\n if (para.getBookmarksStart().length > 0 || para.getBookmarksEnd().length > 0) {\n return false;\n }\n\n // Check for comments (start/end markers)\n if (typeof para.getCommentsStart === 'function') {\n const commentsStart = para.getCommentsStart();\n if (commentsStart && commentsStart.length > 0) {\n return false;\n }\n }\n if (typeof para.getCommentsEnd === 'function') {\n const commentsEnd = para.getCommentsEnd();\n if (commentsEnd && commentsEnd.length > 0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Sets the parent row reference for this cell.\n * Called by TableRow when adding cells.\n * @internal\n */\n _setParentRow(row: import('./TableRow').TableRow | undefined): void {\n this._parentRow = row;\n }\n\n /**\n * Gets the parent row reference for this cell.\n * @internal\n */\n _getParentRow(): import('./TableRow').TableRow | undefined {\n return this._parentRow;\n }\n\n /**\n * Gets the table style ID by traversing up the parent chain.\n * @returns Table style ID or undefined if not in a table or no style set\n */\n getTableStyleId(): string | undefined {\n const row = this._parentRow;\n if (!row) return undefined;\n\n const table = row._getParentTable();\n if (!table) return undefined;\n\n return table.getFormatting().style;\n }\n\n /**\n * Converts the cell to WordprocessingML XML element\n * @returns XMLElement representing the cell\n */\n toXML(): XMLElement {\n const tcPrChildren: XMLElement[] = [];\n\n // tcPr children ordered per ECMA-376 CT_TcPr:\n // cnfStyle → tcW → gridSpan → hMerge → vMerge → tcBorders → shd → noWrap → tcMar →\n // textDirection → tcFitText → vAlign → hideMark →\n // cellIns/cellDel/cellMerge → tcPrChange\n\n // cnfStyle - conditional formatting style (MUST be first child per CT_TcPr)\n if (this.formatting.cnfStyle) {\n tcPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\n }\n\n // tcW - cell width\n if (this.formatting.width !== undefined) {\n const widthAttrs: Record<string, string | number> = {\n 'w:w': this.formatting.width,\n 'w:type': this.formatting.widthType || 'dxa',\n };\n tcPrChildren.push(XMLBuilder.wSelf('tcW', widthAttrs));\n }\n\n // gridSpan - column span\n if (this.formatting.columnSpan && this.formatting.columnSpan > 1) {\n tcPrChildren.push(XMLBuilder.wSelf('gridSpan', { 'w:val': this.formatting.columnSpan }));\n }\n\n // hMerge - legacy horizontal merge\n if (this.formatting.hMerge) {\n tcPrChildren.push(XMLBuilder.wSelf('hMerge', { 'w:val': this.formatting.hMerge }));\n }\n\n // vMerge - vertical merge\n // Per OOXML, <w:vMerge/> without val means \"continue\" (default).\n // Only \"restart\" needs an explicit w:val attribute.\n if (this.formatting.vMerge) {\n if (this.formatting.vMerge === 'restart') {\n tcPrChildren.push(XMLBuilder.wSelf('vMerge', { 'w:val': 'restart' }));\n } else {\n tcPrChildren.push(XMLBuilder.wSelf('vMerge'));\n }\n }\n\n // tcBorders - cell borders\n if (this.formatting.borders) {\n const borderElements: XMLElement[] = [];\n const borders = this.formatting.borders;\n\n // Ordered per ECMA-376 CT_TcBorders: top, left, bottom, right, insideH, insideV, tl2br, tr2bl\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.tl2br) {\n borderElements.push(XMLBuilder.createBorder('tl2br', borders.tl2br));\n }\n if (borders.tr2bl) {\n borderElements.push(XMLBuilder.createBorder('tr2bl', borders.tr2bl));\n }\n\n if (borderElements.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcBorders', undefined, borderElements));\n }\n }\n\n // shd - shading\n if (this.formatting.shading) {\n const shadingAttrs = buildShadingAttributes(this.formatting.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n tcPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n\n // noWrap\n if (this.formatting.noWrap) {\n tcPrChildren.push(XMLBuilder.wSelf('noWrap'));\n }\n\n // tcMar - cell margins (ordered per CT_TcMar: top, left, bottom, right)\n if (this.formatting.margins) {\n const margins = this.formatting.margins;\n const marginChildren: XMLElement[] = [];\n\n if (margins.top !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('top', {\n 'w:w': margins.top.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.left !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('left', {\n 'w:w': margins.left.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.bottom !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': margins.bottom.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.right !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('right', {\n 'w:w': margins.right.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n\n if (marginChildren.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcMar', undefined, marginChildren));\n }\n }\n\n // textDirection\n if (this.formatting.textDirection) {\n tcPrChildren.push(\n XMLBuilder.wSelf('textDirection', {\n 'w:val': this.formatting.textDirection,\n })\n );\n }\n\n // tcFitText\n if (this.formatting.fitText) {\n tcPrChildren.push(XMLBuilder.wSelf('tcFitText'));\n }\n\n // vAlign - vertical alignment\n if (this.formatting.verticalAlignment) {\n tcPrChildren.push(\n XMLBuilder.wSelf('vAlign', {\n 'w:val': this.formatting.verticalAlignment,\n })\n );\n }\n\n // hideMark\n if (this.formatting.hideMark) {\n tcPrChildren.push(XMLBuilder.wSelf('hideMark'));\n }\n\n // Note: w:headers (cell headers for accessibility) is defined in ECMA-376 Part 1 §17.4.26\n // but is NOT included in the Transitional schema and fails OOXML validation.\n // The property is preserved in memory for reading but not generated in XML.\n\n // Add cell revision markers (w:cellIns, w:cellDel, w:cellMerge) per ECMA-376 Part 1 §17.13.5.4-5.6\n if (this.cellRevision) {\n const revType = this.cellRevision.getType();\n const attrs: Record<string, string | number> = {\n 'w:id': this.cellRevision.getId(),\n 'w:author': this.cellRevision.getAuthor(),\n 'w:date': formatDateForXml(this.cellRevision.getDate()),\n };\n\n if (revType === 'tableCellInsert') {\n tcPrChildren.push(XMLBuilder.wSelf('cellIns', attrs));\n } else if (revType === 'tableCellDelete') {\n tcPrChildren.push(XMLBuilder.wSelf('cellDel', attrs));\n } else if (revType === 'tableCellMerge') {\n // Add vMerge and vMergeOrig attributes if present\n // ST_AnnotationVMerge: \"cont\" | \"rest\" (not \"continue\" / \"restart\")\n const mergeMap: Record<string, string> = { continue: 'cont', restart: 'rest' };\n const prevProps = this.cellRevision.getPreviousProperties();\n if (prevProps?.vMerge) {\n attrs['w:vMerge'] = mergeMap[prevProps.vMerge] || prevProps.vMerge;\n }\n if (prevProps?.vMergeOrig) {\n attrs['w:vMergeOrig'] = mergeMap[prevProps.vMergeOrig] || prevProps.vMergeOrig;\n }\n tcPrChildren.push(XMLBuilder.wSelf('cellMerge', attrs));\n }\n }\n\n // Add table cell property change (w:tcPrChange) per ECMA-376 Part 1 §17.13.5.37\n // Must be last child of w:tcPr\n if (this.tcPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.tcPrChange.id,\n 'w:author': this.tcPrChange.author,\n 'w:date': this.tcPrChange.date,\n };\n const prevTcPrChildren: XMLElement[] = [];\n const prev = this.tcPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_TcPr: tcW → tcBorders → shd → noWrap → tcMar →\n // textDirection → tcFitText → vAlign → hideMark → cnfStyle\n if (prev.width !== undefined) {\n prevTcPrChildren.push(\n XMLBuilder.wSelf('tcW', {\n 'w:w': prev.width,\n 'w:type': prev.widthType || 'dxa',\n })\n );\n }\n if (prev.borders) {\n const borderElements: XMLElement[] = [];\n if (prev.borders.top)\n borderElements.push(XMLBuilder.createBorder('top', prev.borders.top));\n if (prev.borders.left)\n borderElements.push(XMLBuilder.createBorder('left', prev.borders.left));\n if (prev.borders.bottom)\n borderElements.push(XMLBuilder.createBorder('bottom', prev.borders.bottom));\n if (prev.borders.right)\n borderElements.push(XMLBuilder.createBorder('right', prev.borders.right));\n if (borderElements.length > 0) {\n prevTcPrChildren.push(XMLBuilder.w('tcBorders', undefined, borderElements));\n }\n }\n if (prev.shading) {\n const shadingAttrs = buildShadingAttributes(prev.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n prevTcPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n if (prev.noWrap) {\n prevTcPrChildren.push(XMLBuilder.wSelf('noWrap'));\n }\n if (prev.margins) {\n const marginChildren: XMLElement[] = [];\n if (prev.margins.top !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('top', { 'w:w': prev.margins.top.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.left !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('left', { 'w:w': prev.margins.left.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.bottom !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('bottom', { 'w:w': prev.margins.bottom.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.right !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('right', { 'w:w': prev.margins.right.toString(), 'w:type': 'dxa' })\n );\n }\n if (marginChildren.length > 0) {\n prevTcPrChildren.push(XMLBuilder.w('tcMar', undefined, marginChildren));\n }\n }\n if (prev.textDirection) {\n prevTcPrChildren.push(XMLBuilder.wSelf('textDirection', { 'w:val': prev.textDirection }));\n }\n if (prev.fitText) {\n prevTcPrChildren.push(XMLBuilder.wSelf('tcFitText'));\n }\n if (prev.verticalAlignment) {\n prevTcPrChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': prev.verticalAlignment }));\n }\n if (prev.hideMark) {\n prevTcPrChildren.push(XMLBuilder.wSelf('hideMark'));\n }\n if (prev.cnfStyle) {\n prevTcPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\n }\n }\n const prevTcPr =\n prevTcPrChildren.length > 0\n ? XMLBuilder.w('tcPr', undefined, prevTcPrChildren)\n : XMLBuilder.w('tcPr', undefined, []);\n tcPrChildren.push(XMLBuilder.w('tcPrChange', changeAttrs, [prevTcPr]));\n }\n\n // Build cell element\n const cellChildren: XMLElement[] = [];\n\n // Add cell properties if there are any\n if (tcPrChildren.length > 0) {\n cellChildren.push(XMLBuilder.w('tcPr', undefined, tcPrChildren));\n }\n\n // Add paragraphs and raw nested content in correct order\n // Raw nested content (tables, SDTs) are interspersed with paragraphs\n if (this.paragraphs.length > 0 || this.rawNestedContent.length > 0) {\n // Sort raw content by position\n const sortedRaw = [...this.rawNestedContent].sort((a, b) => a.position - b.position);\n let rawIndex = 0;\n\n for (let i = 0; i < this.paragraphs.length; i++) {\n // Insert any raw content that comes before this paragraph (position <= i)\n let rawItem = sortedRaw[rawIndex];\n while (rawIndex < sortedRaw.length && rawItem && rawItem.position <= i) {\n // Use __rawXml element for passthrough (supported by XMLBuilder)\n cellChildren.push({\n name: '__rawXml',\n rawXml: rawItem.xml,\n });\n rawIndex++;\n rawItem = sortedRaw[rawIndex];\n }\n const para = this.paragraphs[i];\n if (para) {\n cellChildren.push(para.toXML());\n }\n }\n\n // Insert any remaining raw content after all paragraphs\n while (rawIndex < sortedRaw.length) {\n const rawItem = sortedRaw[rawIndex];\n if (rawItem) {\n cellChildren.push({\n name: '__rawXml',\n rawXml: rawItem.xml,\n });\n }\n rawIndex++;\n }\n\n // If we only have raw content and no paragraphs, we need at least one empty paragraph\n // per ECMA-376 (table cell must contain at least one block-level element)\n if (this.paragraphs.length === 0) {\n cellChildren.push(new Paragraph().toXML());\n }\n } else {\n // Empty cell needs at least one empty paragraph\n cellChildren.push(new Paragraph().toXML());\n }\n\n return XMLBuilder.w('tc', undefined, cellChildren);\n }\n\n /**\n * Creates a new TableCell\n * @param formatting - Cell formatting\n * @returns New TableCell instance\n */\n static create(formatting?: CellFormatting): TableCell {\n return new TableCell(formatting);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TableCell.js","sourceRoot":"","sources":["../../src/elements/TableCell.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TableCell - Represents a cell in a table\n */\n\nimport { formatDateForXml } from '../utils/dateFormatting';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { Paragraph, TextDirection } from './Paragraph';\nimport { Revision } from './Revision';\nimport {\n BorderStyle as CommonBorderStyle,\n BorderDefinition,\n FourSidedBorders,\n CellVerticalAlignment as CommonCellVerticalAlignment,\n ShadingConfig,\n ShadingPattern,\n buildShadingAttributes,\n WidthType,\n} from './CommonTypes';\n\n// ============================================================================\n// RE-EXPORTED TYPES (for backward compatibility)\n// ============================================================================\n\n/**\n * Cell border style\n * @see CommonTypes.BorderStyle\n */\nexport type BorderStyle = CommonBorderStyle;\n\n/**\n * Cell border definition\n * @see CommonTypes.BorderDefinition\n */\nexport interface CellBorder {\n style?: BorderStyle;\n size?: number; // Size in eighths of a point\n color?: string; // Hex color without #\n}\n\n/**\n * Cell borders\n * @see CommonTypes.FourSidedBorders\n */\nexport interface CellBorders {\n top?: CellBorder;\n bottom?: CellBorder;\n left?: CellBorder;\n right?: CellBorder;\n /** Diagonal border from top-left to bottom-right per ECMA-376 Part 1 §17.4.84 */\n tl2br?: CellBorder;\n /** Diagonal border from top-right to bottom-left per ECMA-376 Part 1 §17.4.85 */\n tr2bl?: CellBorder;\n}\n\n/**\n * Cell shading/background\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type CellShading = ShadingConfig;\n\n/**\n * Vertical alignment in cell\n * @see CommonTypes.CellVerticalAlignment\n */\nexport type CellVerticalAlignment = CommonCellVerticalAlignment;\n\n/**\n * Cell margins (spacing inside cell borders)\n * Per ECMA-376 Part 1 §17.4.43\n */\nexport interface CellMargins {\n top?: number; // Margin in twips\n bottom?: number; // Margin in twips\n left?: number; // Margin in twips\n right?: number; // Margin in twips\n}\n\n/**\n * Cell width type\n * Per ECMA-376 Part 1 §17.18.87\n */\nexport type CellWidthType = 'auto' | 'dxa' | 'pct';\n\n/**\n * Vertical merge type for cells\n * Per ECMA-376 Part 1 §17.4.85\n */\nexport type VerticalMerge = 'restart' | 'continue';\n\n/**\n * Cell formatting options\n */\nexport interface CellFormatting {\n width?: number; // Width in twips\n widthType?: CellWidthType; // Width type (auto, dxa, pct)\n borders?: CellBorders;\n shading?: CellShading;\n verticalAlignment?: CellVerticalAlignment;\n columnSpan?: number; // Number of columns to span (gridSpan)\n rowSpan?: number; // Number of rows to span (gridSpan)\n margins?: CellMargins; // Cell margins (spacing inside borders)\n textDirection?: TextDirection; // Text flow direction\n fitText?: boolean; // Fit text to cell width\n noWrap?: boolean; // Prevent text wrapping\n hideMark?: boolean; // Hide end-of-cell mark\n cnfStyle?: string; // Conditional formatting style (14-char binary string)\n vMerge?: VerticalMerge; // Vertical cell merge\n hMerge?: 'restart' | 'continue'; // Legacy horizontal merge (w:hMerge) per ECMA-376 Part 1 §17.4.22\n /** Cell headers attribute for accessibility per ECMA-376 Part 1 §17.4.26 */\n headers?: string;\n}\n\n/**\n * Raw nested content stored as XML to preserve nested tables/SDTs\n * Position indicates after which paragraph index the content appears\n */\nexport interface RawNestedContent {\n position: number; // Content appears after this paragraph index\n xml: string; // Raw XML content\n type: 'table' | 'sdt'; // Type of nested content\n}\n\n/**\n * Table cell property change tracking (w:tcPrChange)\n * Per ECMA-376 Part 1 §17.13.5.37\n */\nexport interface TcPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\n/**\n * Represents a table cell\n */\nexport class TableCell {\n private paragraphs: Paragraph[] = [];\n private formatting: CellFormatting;\n /** Raw nested content (tables, SDTs) stored as XML for passthrough */\n private rawNestedContent: RawNestedContent[] = [];\n /** Parent row reference (if cell is inside a table row) */\n private _parentRow?: import('./TableRow').TableRow;\n /** Table cell revision (w:cellIns, w:cellDel, w:cellMerge) per ECMA-376 Part 1 §17.13.5.4-5.6 */\n private cellRevision?: Revision;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Table cell property change tracking (w:tcPrChange) */\n private tcPrChange?: TcPrChange;\n\n /**\n * Creates a new TableCell\n * @param formatting - Cell formatting options\n */\n constructor(formatting: CellFormatting = {}) {\n this.formatting = formatting;\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 cell property change tracking info\n * @returns tcPrChange or undefined\n */\n getTcPrChange(): TcPrChange | undefined {\n return this.tcPrChange;\n }\n\n /**\n * Sets the table cell property change tracking info\n * @param change - Property change info or undefined to clear\n */\n setTcPrChange(change: TcPrChange | undefined): void {\n this.tcPrChange = change;\n }\n\n /**\n * Clears the table cell property change tracking\n */\n clearTcPrChange(): void {\n this.tcPrChange = undefined;\n }\n\n /**\n * Adds a paragraph to the cell\n * @param paragraph - Paragraph to add\n * @returns This cell for chaining\n */\n addParagraph(paragraph: Paragraph): this {\n this.paragraphs.push(paragraph);\n paragraph._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n paragraph._setStylesManager(stylesManager);\n }\n return this;\n }\n\n /**\n * Creates and adds a new paragraph with text\n * @param text - Text content\n * @returns The created paragraph\n */\n createParagraph(text?: string): Paragraph {\n const para = new Paragraph();\n if (text) {\n para.addText(text);\n }\n this.paragraphs.push(para);\n para._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n para._setStylesManager(stylesManager);\n }\n return para;\n }\n\n /**\n * Gets all paragraphs in the cell\n * @returns Array of paragraphs\n */\n getParagraphs(): Paragraph[] {\n return [...this.paragraphs];\n }\n\n /**\n * Removes a paragraph at the specified index\n * @param index - Index of paragraph to remove\n * @returns True if removed, false if index out of bounds\n */\n removeParagraph(index: number): boolean {\n if (index < 0 || index >= this.paragraphs.length) {\n return false;\n }\n\n // When tracking enabled, wrap content in w:del instead of removing\n if (this.trackingContext?.isEnabled()) {\n const paragraph = this.paragraphs[index]!;\n const runs = paragraph.getRuns();\n if (runs.length > 0) {\n const author = this.trackingContext.getAuthor();\n const deletion = Revision.createDeletion(author, runs);\n this.trackingContext.getRevisionManager().register(deletion);\n paragraph.addRevision(deletion);\n }\n return true;\n }\n\n const removed = this.paragraphs.splice(index, 1);\n const removedPara = removed[0];\n if (removedPara) {\n removedPara._setParentCell(undefined);\n }\n\n // Update raw nested content positions\n // Any nested content positioned AFTER the removed paragraph needs its position decremented\n // This maintains correct relative positioning for nested tables, SDTs, etc.\n for (const item of this.rawNestedContent) {\n if (item.position > index) {\n item.position--;\n }\n }\n\n return true;\n }\n\n /**\n * Adds a paragraph at the specified index\n * @param index - Index to insert at\n * @param paragraph - Paragraph to add\n * @returns This cell for chaining\n */\n addParagraphAt(index: number, paragraph: Paragraph): this {\n if (index < 0) {\n index = 0;\n }\n\n // Determine actual insertion index\n const actualIndex = index >= this.paragraphs.length ? this.paragraphs.length : index;\n\n if (index >= this.paragraphs.length) {\n this.paragraphs.push(paragraph);\n } else {\n this.paragraphs.splice(index, 0, paragraph);\n }\n\n // Update raw nested content positions\n // Any nested content positioned AT OR AFTER the insertion point needs its position incremented\n // This maintains correct relative positioning for nested tables, SDTs, etc.\n for (const item of this.rawNestedContent) {\n if (item.position >= actualIndex) {\n item.position++;\n }\n }\n\n paragraph._setParentCell(this);\n // Propagate StylesManager from table if available\n const stylesManager = this._parentRow?._getParentTable()?._getStylesManager();\n if (stylesManager) {\n paragraph._setStylesManager(stylesManager);\n }\n\n // When tracking enabled, wrap paragraph content in w:ins revision\n if (this.trackingContext?.isEnabled()) {\n const runs = paragraph.getRuns();\n if (runs.length > 0) {\n const author = this.trackingContext.getAuthor();\n const insertion = Revision.createInsertion(author, runs);\n this.trackingContext.getRevisionManager().register(insertion);\n paragraph.addRevision(insertion);\n }\n }\n\n return this;\n }\n\n /**\n * Gets the text content of all paragraphs\n * @returns Combined text\n */\n getText(): string {\n return this.paragraphs.map((p) => p.getText()).join('\\n');\n }\n\n /**\n * Gets all fields from paragraphs in this cell\n *\n * Collects all Field and ComplexField instances from every paragraph\n * in the table cell.\n *\n * @returns Array of fields (Field and ComplexField instances)\n *\n * @example\n * ```typescript\n * const cell = table.getCell(0, 0);\n * const fields = cell?.getFields() || [];\n * console.log(`Cell has ${fields.length} fields`);\n * ```\n */\n getFields(): (import('./Field').Field | import('./Field').ComplexField)[] {\n const fields: (import('./Field').Field | import('./Field').ComplexField)[] = [];\n for (const para of this.paragraphs) {\n fields.push(...para.getFields());\n }\n return fields;\n }\n\n /**\n * Finds fields matching a predicate function\n *\n * Searches through all fields in the cell and returns those matching\n * the specified criteria.\n *\n * @param predicate - Function to test each field\n * @returns Array of matching fields\n *\n * @example\n * ```typescript\n * // Find all PAGE fields\n * const pageFields = cell.findFields(f =>\n * f.getInstruction().startsWith('PAGE')\n * );\n *\n * // Find fields with specific switches\n * const mergeFields = cell.findFields(f =>\n * f.getInstruction().includes('MERGEFIELD')\n * );\n * ```\n */\n findFields(\n predicate: (field: import('./Field').Field | import('./Field').ComplexField) => boolean\n ): (import('./Field').Field | import('./Field').ComplexField)[] {\n return this.getFields().filter(predicate);\n }\n\n /**\n * Removes all fields from paragraphs in this cell\n *\n * Iterates through each paragraph and removes all fields,\n * preserving text content.\n *\n * @returns Count of fields removed\n *\n * @example\n * ```typescript\n * const count = cell.removeAllFields();\n * console.log(`Removed ${count} fields from cell`);\n * ```\n */\n removeAllFields(): number {\n let count = 0;\n for (const para of this.paragraphs) {\n count += para.removeAllFields();\n }\n return count;\n }\n\n /**\n * Sets cell width\n * @param twips - Width in twips\n * @returns This cell for chaining\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 cell borders\n * @param borders - Border definitions\n * @returns This cell for chaining\n */\n setBorders(borders: CellBorders): this {\n const prev = this.formatting.borders;\n this.formatting.borders = borders;\n if (this.trackingContext?.isEnabled() && prev !== borders) {\n this.trackingContext.trackTableChange(this, 'borders', prev, borders);\n }\n return this;\n }\n\n /**\n * Sets cell shading/background\n * @param shading - Shading definition\n * @returns This cell for chaining\n */\n setShading(shading: CellShading): 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 * Sets vertical alignment\n * @param alignment - Vertical alignment\n * @returns This cell for chaining\n */\n setVerticalAlignment(alignment: CellVerticalAlignment): this {\n const prev = this.formatting.verticalAlignment;\n this.formatting.verticalAlignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackTableChange(this, 'verticalAlignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets column span (merge cells horizontally)\n * @param span - Number of columns to span\n * @returns This cell for chaining\n */\n setColumnSpan(span: number): this {\n const prev = this.formatting.columnSpan;\n this.formatting.columnSpan = span;\n if (this.trackingContext?.isEnabled() && prev !== span) {\n this.trackingContext.trackTableChange(this, 'columnSpan', prev, span);\n }\n return this;\n }\n\n /**\n * Gets the number of columns this cell spans (gridSpan)\n * @returns Column span, defaults to 1 if not set\n */\n getColumnSpan(): number {\n return this.formatting.columnSpan || 1;\n }\n\n /**\n * Gets whether to fit text to cell width\n * @returns true if fit text is enabled, false otherwise\n */\n getFitText(): boolean {\n return this.formatting.fitText ?? false;\n }\n\n /**\n * Gets whether text wrapping is prevented in cell\n * @returns true if no-wrap is enabled, false otherwise\n */\n getNoWrap(): boolean {\n return this.formatting.noWrap ?? false;\n }\n\n /**\n * Gets whether the end-of-cell mark is hidden\n * @returns true if hidden, false otherwise\n */\n getHideMark(): boolean {\n return this.formatting.hideMark ?? false;\n }\n\n /**\n * Gets the conditional formatting style (cnfStyle) for this cell\n * @returns 14-character binary string or undefined if not set\n */\n getCnfStyle(): string | undefined {\n return this.formatting.cnfStyle;\n }\n\n /**\n * Validates a margin value\n * @param value - Margin value in twips\n * @param side - Name of the margin side (for error messages)\n * @throws {Error} If margin is negative or exceeds maximum\n * @private\n */\n private validateMargin(value: number | undefined, side: string): void {\n if (value === undefined) return;\n\n // Margins must be non-negative\n if (value < 0) {\n throw new Error(`Invalid ${side} margin: ${value} twips. Cell margins cannot be negative.`);\n }\n\n // Maximum reasonable margin (1 inch = 1440 twips)\n // Word typically allows up to several inches, but we set a reasonable limit\n const MAX_MARGIN_TWIPS = 14400; // 10 inches\n if (value > MAX_MARGIN_TWIPS) {\n throw new Error(\n `Invalid ${side} margin: ${value} twips exceeds maximum of ${MAX_MARGIN_TWIPS} twips (10 inches).`\n );\n }\n }\n\n /**\n * Sets cell margins (spacing inside cell borders)\n * Per ECMA-376 Part 1 §17.4.43\n * @param margins - Margin definitions for each side\n * @returns This cell for chaining\n * @throws {Error} If any margin value is negative or exceeds maximum\n */\n setMargins(margins: CellMargins): this {\n // Validate each margin\n this.validateMargin(margins.top, 'top');\n this.validateMargin(margins.bottom, 'bottom');\n this.validateMargin(margins.left, 'left');\n this.validateMargin(margins.right, 'right');\n\n const prev = this.formatting.margins;\n this.formatting.margins = margins;\n if (this.trackingContext?.isEnabled() && prev !== margins) {\n this.trackingContext.trackTableChange(this, 'margins', prev, margins);\n }\n return this;\n }\n\n /**\n * Sets all cell margins to the same value\n * @param margin - Margin in twips to apply to all sides\n * @returns This cell for chaining\n * @throws {Error} If margin value is negative or exceeds maximum\n */\n setAllMargins(margin: number): this {\n this.validateMargin(margin, 'all');\n return this.setMargins({ top: margin, bottom: margin, left: margin, right: margin });\n }\n\n /**\n * Sets text direction for cell content\n * Per ECMA-376 Part 1 §17.4.72\n * @param direction - Text flow direction\n * - 'lrTb': Left-to-right, top-to-bottom (default)\n * - 'tbRl': Top-to-bottom, right-to-left (vertical text, East Asian)\n * - 'btLr': Bottom-to-top, left-to-right (vertical text)\n * - 'lrTbV': Left-to-right, top-to-bottom, vertical\n * - 'tbRlV': Top-to-bottom, right-to-left, vertical\n * - 'tbLrV': Top-to-bottom, left-to-right, vertical\n * @returns This cell for chaining\n */\n setTextDirection(direction: TextDirection): this {\n const prev = this.formatting.textDirection;\n this.formatting.textDirection = direction;\n if (this.trackingContext?.isEnabled() && prev !== direction) {\n this.trackingContext.trackTableChange(this, 'textDirection', prev, direction);\n }\n return this;\n }\n\n /**\n * Sets whether to fit text to cell width\n * Per ECMA-376 Part 1 §17.4.68\n * @param fit - Whether to expand/compress text to fit cell width\n * @returns This cell for chaining\n */\n setFitText(fit = true): this {\n const prev = this.formatting.fitText;\n this.formatting.fitText = fit;\n if (this.trackingContext?.isEnabled() && prev !== fit) {\n this.trackingContext.trackTableChange(this, 'fitText', prev, fit);\n }\n return this;\n }\n\n /**\n * Sets whether to prevent text wrapping in cell\n * Per ECMA-376 Part 1 §17.4.34\n * @param noWrap - Whether to prevent wrapping (default: true)\n * @returns This cell for chaining\n */\n setNoWrap(noWrap = true): this {\n const prev = this.formatting.noWrap;\n this.formatting.noWrap = noWrap;\n if (this.trackingContext?.isEnabled() && prev !== noWrap) {\n this.trackingContext.trackTableChange(this, 'noWrap', prev, noWrap);\n }\n return this;\n }\n\n /**\n * Sets whether to hide the end-of-cell mark\n * Per ECMA-376 Part 1 §17.4.24\n * @param hide - Whether to ignore cell end mark in height calculations (default: true)\n * @returns This cell for chaining\n */\n setHideMark(hide = true): this {\n const prev = this.formatting.hideMark;\n this.formatting.hideMark = hide;\n if (this.trackingContext?.isEnabled() && prev !== hide) {\n this.trackingContext.trackTableChange(this, 'hideMark', prev, hide);\n }\n return this;\n }\n\n /**\n * Sets conditional formatting style for this cell\n * Per ECMA-376 Part 1 §17.4.7\n * @param cnfStyle - 14-character binary string representing which conditional formats to apply\n * Each bit position controls a different conditional format (e.g., \"100000000000\" for first row)\n * @returns This cell for chaining\n */\n setConditionalStyle(cnfStyle: string): this {\n const prev = this.formatting.cnfStyle;\n this.formatting.cnfStyle = cnfStyle;\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\n }\n return this;\n }\n\n /**\n * Sets cell width with type specification\n * Per ECMA-376 Part 1 §17.4.81\n * @param width - Width value\n * @param type - Width type: 'auto' (automatic), 'dxa' (twips), or 'pct' (percentage * 50)\n * @returns This cell for chaining\n */\n setWidthType(width: number, type: CellWidthType = 'dxa'): this {\n const prevWidth = this.formatting.width;\n const prevType = this.formatting.widthType;\n this.formatting.width = width;\n this.formatting.widthType = type;\n if (this.trackingContext?.isEnabled()) {\n if (prevWidth !== width) {\n this.trackingContext.trackTableChange(this, 'width', prevWidth, width);\n }\n if (prevType !== type) {\n this.trackingContext.trackTableChange(this, 'widthType', prevType, type);\n }\n }\n return this;\n }\n\n /**\n * Sets vertical merge for this cell\n * Per ECMA-376 Part 1 §17.4.85\n * @param merge - Vertical merge type:\n * - 'restart': Start a new vertically merged region (top cell)\n * - 'continue': Continue the current vertically merged region (cells below)\n * @returns This cell for chaining\n */\n setVerticalMerge(merge: VerticalMerge | undefined): this {\n const prev = this.formatting.vMerge;\n this.formatting.vMerge = merge;\n if (this.trackingContext?.isEnabled() && prev !== merge) {\n this.trackingContext.trackTableChange(this, 'vMerge', prev, merge);\n }\n return this;\n }\n\n /**\n * Sets the legacy horizontal merge state per ECMA-376 Part 1 §17.4.22\n * @param merge - 'restart' to start a new merge region, 'continue' to continue, or undefined to clear\n * @returns This cell for chaining\n */\n setHorizontalMerge(merge: 'restart' | 'continue' | undefined): this {\n const prev = this.formatting.hMerge;\n this.formatting.hMerge = merge;\n if (this.trackingContext?.isEnabled() && prev !== merge) {\n this.trackingContext.trackTableChange(this, 'hMerge', prev, merge);\n }\n return this;\n }\n\n // ============================================================================\n // CELL REVISIONS (w:cellIns, w:cellDel, w:cellMerge)\n // ============================================================================\n\n /**\n * Sets the revision marker for this cell\n * Per ECMA-376 Part 1 §17.13.5.4-5.6\n *\n * Table cell revisions track structural changes to table cells:\n * - tableCellInsert (w:cellIns): Cell was inserted\n * - tableCellDelete (w:cellDel): Cell was deleted\n * - tableCellMerge (w:cellMerge): Cell merge/split operation\n *\n * @param revision - Revision marker for this cell\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * const revision = new Revision({\n * id: 1,\n * author: 'Alice',\n * date: new Date(),\n * type: 'tableCellInsert',\n * content: [],\n * });\n * cell.setCellRevision(revision);\n * ```\n */\n setCellRevision(revision: Revision): this {\n this.cellRevision = revision;\n return this;\n }\n\n /**\n * Gets the revision marker for this cell\n *\n * @returns The cell revision if present, undefined otherwise\n *\n * @example\n * ```typescript\n * const revision = cell.getCellRevision();\n * if (revision) {\n * console.log(`Cell ${revision.getType()} by ${revision.getAuthor()}`);\n * }\n * ```\n */\n getCellRevision(): Revision | undefined {\n return this.cellRevision;\n }\n\n /**\n * Checks if this cell has a revision marker\n *\n * @returns True if cell has a revision (insert, delete, or merge)\n */\n hasCellRevision(): boolean {\n return this.cellRevision !== undefined;\n }\n\n /**\n * Clears the revision marker for this cell\n *\n * @returns This cell for chaining\n */\n clearCellRevision(): this {\n this.cellRevision = undefined;\n return this;\n }\n\n // ============================================================================\n // CONVENIENCE METHODS (for easier paragraph manipulation)\n // ============================================================================\n\n /**\n * Sets text alignment for all paragraphs in the cell\n *\n * Applies the specified horizontal alignment to every paragraph\n * in this cell.\n *\n * @param alignment - Paragraph alignment (left, center, right, both)\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * cell.setTextAlignment('center');\n * ```\n */\n setTextAlignment(alignment: import('./Paragraph').ParagraphAlignment): this {\n for (const para of this.paragraphs) {\n para.setAlignment(alignment);\n }\n return this;\n }\n\n /**\n * Sets the style for all paragraphs in the cell\n *\n * Applies the specified style ID to every paragraph in this cell.\n *\n * @param styleId - Style ID to apply\n * @returns This cell for chaining\n *\n * @example\n * ```typescript\n * cell.setAllParagraphsStyle('TableContent');\n * ```\n */\n setAllParagraphsStyle(styleId: string): this {\n for (const para of this.paragraphs) {\n para.setStyle(styleId);\n }\n return this;\n }\n\n /**\n * Sets font for all runs in the cell\n *\n * Applies the specified font to every text run in every paragraph\n * in this cell.\n *\n * @param fontName - Font name to apply\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsFont('Arial');\n * ```\n */\n setAllRunsFont(fontName: string): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setFont(fontName);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Sets font size for all runs in the cell\n *\n * Applies the specified font size to every text run in every paragraph\n * in this cell.\n *\n * @param size - Font size in half-points (e.g., 24 = 12pt)\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsSize(22); // 11pt\n * ```\n */\n setAllRunsSize(size: number): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setSize(size);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Sets color for all runs in the cell\n *\n * Applies the specified color to every text run in every paragraph\n * in this cell.\n *\n * @param color - Hex color code (e.g., 'FF0000', '#0000FF')\n * @returns Number of runs modified\n *\n * @example\n * ```typescript\n * const count = cell.setAllRunsColor('000000'); // Black\n * ```\n */\n setAllRunsColor(color: string): number {\n let count = 0;\n for (const para of this.paragraphs) {\n for (const run of para.getRuns()) {\n run.setColor(color);\n count++;\n }\n }\n return count;\n }\n\n /**\n * Gets the cell formatting\n * @returns Cell formatting\n */\n getFormatting(): CellFormatting {\n return { ...this.formatting };\n }\n\n // ============================================================================\n // Individual Formatting Getters\n // ============================================================================\n\n /**\n * Gets the cell 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 cell 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 vertical alignment of cell content\n * @returns Vertical alignment ('top', 'center', 'bottom') or undefined\n */\n getVerticalAlignment(): string | undefined {\n return this.formatting.verticalAlignment;\n }\n\n /**\n * Gets the vertical merge state\n * @returns Vertical merge state ('restart', 'continue') or undefined\n */\n getVerticalMerge(): VerticalMerge | undefined {\n return this.formatting.vMerge;\n }\n\n /**\n * Gets the legacy horizontal merge state\n * @returns Horizontal merge state ('restart', 'continue') or undefined\n */\n getHorizontalMerge(): 'restart' | 'continue' | undefined {\n return this.formatting.hMerge;\n }\n\n /**\n * Sets the cell headers attribute for accessibility\n * Links data cells to header cells per ECMA-376 Part 1 §17.4.26\n * @param headers - Space-separated list of header cell IDs\n * @returns This cell for chaining\n */\n setHeaders(headers: string): this {\n this.formatting.headers = headers;\n return this;\n }\n\n /**\n * Gets the cell headers attribute\n * @returns Headers string or undefined\n */\n getHeaders(): string | undefined {\n return this.formatting.headers;\n }\n\n /**\n * Gets the cell margins\n * @returns Margins object with top, right, bottom, left or undefined\n */\n getMargins(): CellMargins | undefined {\n return this.formatting.margins;\n }\n\n /**\n * Gets the cell borders\n * @returns Borders object or undefined\n */\n getBorders(): CellBorders | undefined {\n return this.formatting.borders;\n }\n\n /**\n * Gets the cell shading/background\n * @returns Shading object or undefined\n */\n getShading(): CellShading | undefined {\n return this.formatting.shading;\n }\n\n /**\n * Gets the text direction for the cell\n * @returns Text direction or undefined\n */\n getTextDirection(): string | undefined {\n return this.formatting.textDirection;\n }\n\n // ============================================================================\n // RAW NESTED CONTENT (Tables, SDTs preserved as XML)\n // ============================================================================\n\n /**\n * Adds raw nested content (table or SDT) to the cell\n * Used during parsing to preserve nested tables that cannot be fully modeled\n * @param position - Paragraph index after which this content appears (0 = before first paragraph)\n * @param xml - Raw XML content\n * @param type - Type of content ('table' or 'sdt')\n * @returns This cell for chaining\n */\n addRawNestedContent(position: number, xml: string, type: 'table' | 'sdt' = 'table'): this {\n this.rawNestedContent.push({ position, xml, type });\n return this;\n }\n\n /**\n * Gets all raw nested content in this cell\n * @returns Array of raw nested content items\n */\n getRawNestedContent(): RawNestedContent[] {\n return [...this.rawNestedContent];\n }\n\n /**\n * Checks if this cell has any nested tables\n * @returns True if cell contains nested tables stored as raw XML\n */\n hasNestedTables(): boolean {\n return this.rawNestedContent.some((c) => c.type === 'table');\n }\n\n /**\n * Checks if this cell has any raw nested content (tables or SDTs)\n * @returns True if cell contains any raw nested content\n */\n hasRawNestedContent(): boolean {\n return this.rawNestedContent.length > 0;\n }\n\n /**\n * Clears all raw nested content from this cell\n * @returns This cell for chaining\n */\n clearRawNestedContent(): this {\n this.rawNestedContent = [];\n return this;\n }\n\n /**\n * Updates raw nested content at a specific index\n * Used for revision acceptance in nested tables\n * @param index - Index in the rawNestedContent array\n * @param xml - New XML content\n * @returns True if updated, false if index out of bounds\n */\n updateRawNestedContent(index: number, xml: string): boolean {\n if (index < 0 || index >= this.rawNestedContent.length) {\n return false;\n }\n const item = this.rawNestedContent[index];\n if (item) {\n item.xml = xml;\n return true;\n }\n return false;\n }\n\n // ============================================================================\n // TRAILING BLANK PARAGRAPH REMOVAL\n // ============================================================================\n\n /**\n * Removes trailing blank paragraphs from this cell.\n * A trailing blank is a blank paragraph at the end of the cell, after all content.\n * This respects ECMA-376 requirement of at least one paragraph per cell.\n *\n * @param options.ignorePreserveFlag - If true, removes trailing blanks even if marked preserved (default: false)\n * @returns Number of paragraphs removed\n *\n * @example\n * ```typescript\n * // Remove trailing blanks, respecting preserve flags\n * const removed = cell.removeTrailingBlankParagraphs();\n *\n * // Remove all trailing blanks, ignoring preserve flags\n * const removed = cell.removeTrailingBlankParagraphs({ ignorePreserveFlag: true });\n * ```\n */\n removeTrailingBlankParagraphs(options?: { ignorePreserveFlag?: boolean }): number {\n let removed = 0;\n const ignorePreserve = options?.ignorePreserveFlag ?? false;\n\n // Work backwards from end of paragraphs array\n while (this.paragraphs.length > 1) {\n const lastIndex = this.paragraphs.length - 1;\n const lastPara = this.paragraphs[lastIndex];\n\n if (!lastPara) break;\n\n // Check if this is a blank paragraph\n const isBlank = this.isParaBlank(lastPara);\n\n // Stop if not blank\n if (!isBlank) break;\n\n // Stop if preserved and we're respecting preserve flags\n if (!ignorePreserve && lastPara.isPreserved()) break;\n\n // Check if there's raw nested content positioned after this paragraph\n // If so, we should NOT remove this trailing blank as it maintains structure\n const hasContentAfter = this.rawNestedContent.some((item) => item.position >= lastIndex);\n if (hasContentAfter) break;\n\n this.removeParagraph(lastIndex);\n removed++;\n }\n\n return removed;\n }\n\n /**\n * Checks if a paragraph is blank (no meaningful content).\n * A paragraph is considered blank if it has no text, images, shapes, hyperlinks, fields,\n * cnfStyle (conditional formatting), or other structural elements.\n *\n * IMPORTANT: cnfStyle preservation is critical! When a paragraph with cnfStyle is removed,\n * Word may apply default table style conditional formatting to the cell, causing unexpected\n * shading changes. A paragraph with cnfStyle=\"000000000000\" (no conditionals) keeps the cell\n * from matching table style conditionals like firstRow or band1Horz.\n *\n * @private\n */\n private isParaBlank(para: Paragraph): boolean {\n // Check for text content\n const text = para.getText().trim();\n if (text !== '') return false;\n\n // Check for cnfStyle (conditional formatting) - critical for shading preservation\n // Even a \"blank\" cnfStyle like \"000000000000\" is meaningful as it prevents\n // the cell from inheriting table style conditional formatting\n const cnfStyle = para.getTableConditionalStyle();\n if (cnfStyle && cnfStyle !== '') {\n return false;\n }\n\n // Check all content items for non-text elements\n const content = para.getContent();\n for (const item of content) {\n // Cast to unknown first for safe duck-typing checks\n const itemAny = item as unknown as Record<string, unknown>;\n\n // ImageRun check - ImageRun has getImageElement method\n if (item && typeof itemAny.getImageElement === 'function') {\n return false;\n }\n\n // Shape check - Shape has getShapeType method\n if (item && typeof itemAny.getShapeType === 'function') {\n return false;\n }\n\n // TextBox check - TextBox has getTextContent method\n if (item && typeof itemAny.getTextContent === 'function') {\n return false;\n }\n\n // Hyperlink check - Hyperlink has getUrl method\n if (item && typeof itemAny.getUrl === 'function') {\n return false;\n }\n\n // Field check - Field has getInstruction method\n if (item && typeof itemAny.getInstruction === 'function') {\n return false;\n }\n\n // Revision check - check if revision contains meaningful content\n if (item && typeof itemAny.getText === 'function') {\n const itemText = (itemAny.getText as () => string)().trim();\n if (itemText !== '') return false;\n\n // Also check if revision contains non-text elements (hyperlinks, images, shapes, textboxes)\n if (typeof itemAny.getContent === 'function') {\n const revContent = (itemAny.getContent as () => unknown[])();\n for (const revItem of revContent) {\n const revItemAny = revItem as Record<string, unknown>;\n // Check if revision content is a Hyperlink using duck typing (getUrl method)\n if (revItem && typeof revItemAny.getUrl === 'function') {\n return false; // Revision contains hyperlink - not blank\n }\n // Check if revision content is an ImageRun (getImageElement method)\n if (revItem && typeof revItemAny.getImageElement === 'function') {\n return false; // Revision contains image - not blank\n }\n // Check if revision content is a Shape (getShapeType method)\n if (revItem && typeof revItemAny.getShapeType === 'function') {\n return false; // Revision contains shape - not blank\n }\n // Check if revision content is a TextBox (getTextContent method)\n if (revItem && typeof revItemAny.getTextContent === 'function') {\n return false; // Revision contains textbox - not blank\n }\n }\n }\n }\n }\n\n // Check for bookmarks (they count as content)\n if (para.getBookmarksStart().length > 0 || para.getBookmarksEnd().length > 0) {\n return false;\n }\n\n // Check for comments (start/end markers)\n if (typeof para.getCommentsStart === 'function') {\n const commentsStart = para.getCommentsStart();\n if (commentsStart && commentsStart.length > 0) {\n return false;\n }\n }\n if (typeof para.getCommentsEnd === 'function') {\n const commentsEnd = para.getCommentsEnd();\n if (commentsEnd && commentsEnd.length > 0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Sets the parent row reference for this cell.\n * Called by TableRow when adding cells.\n * @internal\n */\n _setParentRow(row: import('./TableRow').TableRow | undefined): void {\n this._parentRow = row;\n }\n\n /**\n * Gets the parent row reference for this cell.\n * @internal\n */\n _getParentRow(): import('./TableRow').TableRow | undefined {\n return this._parentRow;\n }\n\n /**\n * Gets the table style ID by traversing up the parent chain.\n * @returns Table style ID or undefined if not in a table or no style set\n */\n getTableStyleId(): string | undefined {\n const row = this._parentRow;\n if (!row) return undefined;\n\n const table = row._getParentTable();\n if (!table) return undefined;\n\n return table.getFormatting().style;\n }\n\n /**\n * Converts the cell to WordprocessingML XML element\n * @returns XMLElement representing the cell\n */\n toXML(): XMLElement {\n const tcPrChildren: XMLElement[] = [];\n\n // tcPr children ordered per ECMA-376 CT_TcPr:\n // cnfStyle → tcW → gridSpan → hMerge → vMerge → tcBorders → shd → noWrap → tcMar →\n // textDirection → tcFitText → vAlign → hideMark →\n // cellIns/cellDel/cellMerge → tcPrChange\n\n // cnfStyle - conditional formatting style (MUST be first child per CT_TcPr)\n if (this.formatting.cnfStyle) {\n tcPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\n }\n\n // tcW - cell width\n if (this.formatting.width !== undefined) {\n const widthAttrs: Record<string, string | number> = {\n 'w:w': this.formatting.width,\n 'w:type': this.formatting.widthType || 'dxa',\n };\n tcPrChildren.push(XMLBuilder.wSelf('tcW', widthAttrs));\n }\n\n // gridSpan - column span\n if (this.formatting.columnSpan && this.formatting.columnSpan > 1) {\n tcPrChildren.push(XMLBuilder.wSelf('gridSpan', { 'w:val': this.formatting.columnSpan }));\n }\n\n // hMerge - legacy horizontal merge\n if (this.formatting.hMerge) {\n tcPrChildren.push(XMLBuilder.wSelf('hMerge', { 'w:val': this.formatting.hMerge }));\n }\n\n // vMerge - vertical merge\n // Per OOXML, <w:vMerge/> without val means \"continue\" (default).\n // Only \"restart\" needs an explicit w:val attribute.\n if (this.formatting.vMerge) {\n if (this.formatting.vMerge === 'restart') {\n tcPrChildren.push(XMLBuilder.wSelf('vMerge', { 'w:val': 'restart' }));\n } else {\n tcPrChildren.push(XMLBuilder.wSelf('vMerge'));\n }\n }\n\n // tcBorders - cell borders\n if (this.formatting.borders) {\n const borderElements: XMLElement[] = [];\n const borders = this.formatting.borders;\n\n // Ordered per ECMA-376 CT_TcBorders: top, left, bottom, right, insideH, insideV, tl2br, tr2bl\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.tl2br) {\n borderElements.push(XMLBuilder.createBorder('tl2br', borders.tl2br));\n }\n if (borders.tr2bl) {\n borderElements.push(XMLBuilder.createBorder('tr2bl', borders.tr2bl));\n }\n\n if (borderElements.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcBorders', undefined, borderElements));\n }\n }\n\n // shd - shading\n if (this.formatting.shading) {\n const shadingAttrs = buildShadingAttributes(this.formatting.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n tcPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n\n // noWrap\n if (this.formatting.noWrap) {\n tcPrChildren.push(XMLBuilder.wSelf('noWrap'));\n }\n\n // tcMar - cell margins (ordered per CT_TcMar: top, left, bottom, right)\n if (this.formatting.margins) {\n const margins = this.formatting.margins;\n const marginChildren: XMLElement[] = [];\n\n if (margins.top !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('top', {\n 'w:w': margins.top.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.left !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('left', {\n 'w:w': margins.left.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.bottom !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': margins.bottom.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n if (margins.right !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('right', {\n 'w:w': margins.right.toString(),\n 'w:type': 'dxa',\n })\n );\n }\n\n if (marginChildren.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcMar', undefined, marginChildren));\n }\n }\n\n // textDirection\n if (this.formatting.textDirection) {\n tcPrChildren.push(\n XMLBuilder.wSelf('textDirection', {\n 'w:val': this.formatting.textDirection,\n })\n );\n }\n\n // tcFitText\n if (this.formatting.fitText) {\n tcPrChildren.push(XMLBuilder.wSelf('tcFitText'));\n }\n\n // vAlign - vertical alignment\n if (this.formatting.verticalAlignment) {\n tcPrChildren.push(\n XMLBuilder.wSelf('vAlign', {\n 'w:val': this.formatting.verticalAlignment,\n })\n );\n }\n\n // hideMark\n if (this.formatting.hideMark) {\n tcPrChildren.push(XMLBuilder.wSelf('hideMark'));\n }\n\n // Note: w:headers (cell headers for accessibility) is defined in ECMA-376 Part 1 §17.4.26\n // but is NOT included in the Transitional schema and fails OOXML validation.\n // The property is preserved in memory for reading but not generated in XML.\n\n // Add cell revision markers (w:cellIns, w:cellDel, w:cellMerge) per ECMA-376 Part 1 §17.13.5.4-5.6\n if (this.cellRevision) {\n const revType = this.cellRevision.getType();\n const attrs: Record<string, string | number> = {\n 'w:id': this.cellRevision.getId(),\n 'w:author': this.cellRevision.getAuthor(),\n 'w:date': formatDateForXml(this.cellRevision.getDate()),\n };\n\n if (revType === 'tableCellInsert') {\n tcPrChildren.push(XMLBuilder.wSelf('cellIns', attrs));\n } else if (revType === 'tableCellDelete') {\n tcPrChildren.push(XMLBuilder.wSelf('cellDel', attrs));\n } else if (revType === 'tableCellMerge') {\n // Add vMerge and vMergeOrig attributes if present\n // ST_AnnotationVMerge: \"cont\" | \"rest\" (not \"continue\" / \"restart\")\n const mergeMap: Record<string, string> = { continue: 'cont', restart: 'rest' };\n const prevProps = this.cellRevision.getPreviousProperties();\n if (prevProps?.vMerge) {\n attrs['w:vMerge'] = mergeMap[prevProps.vMerge] || prevProps.vMerge;\n }\n if (prevProps?.vMergeOrig) {\n attrs['w:vMergeOrig'] = mergeMap[prevProps.vMergeOrig] || prevProps.vMergeOrig;\n }\n tcPrChildren.push(XMLBuilder.wSelf('cellMerge', attrs));\n }\n }\n\n // Add table cell property change (w:tcPrChange) per ECMA-376 Part 1 §17.13.5.37\n // Must be last child of w:tcPr\n if (this.tcPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.tcPrChange.id,\n 'w:author': this.tcPrChange.author,\n 'w:date': this.tcPrChange.date,\n };\n const prevTcPrChildren: XMLElement[] = [];\n const prev = this.tcPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_TcPr: tcW → gridSpan → hMerge → vMerge → tcBorders → shd →\n // noWrap → tcMar → textDirection → tcFitText → vAlign → hideMark → cnfStyle\n if (prev.width !== undefined) {\n prevTcPrChildren.push(\n XMLBuilder.wSelf('tcW', {\n 'w:w': prev.width,\n 'w:type': prev.widthType || 'dxa',\n })\n );\n }\n if (prev.columnSpan && prev.columnSpan > 1) {\n prevTcPrChildren.push(XMLBuilder.wSelf('gridSpan', { 'w:val': prev.columnSpan }));\n }\n if (prev.hMerge) {\n prevTcPrChildren.push(XMLBuilder.wSelf('hMerge', { 'w:val': prev.hMerge }));\n }\n if (prev.vMerge) {\n if (prev.vMerge === 'restart') {\n prevTcPrChildren.push(XMLBuilder.wSelf('vMerge', { 'w:val': 'restart' }));\n } else {\n prevTcPrChildren.push(XMLBuilder.wSelf('vMerge'));\n }\n }\n if (prev.borders) {\n const borderElements: XMLElement[] = [];\n if (prev.borders.top)\n borderElements.push(XMLBuilder.createBorder('top', prev.borders.top));\n if (prev.borders.left)\n borderElements.push(XMLBuilder.createBorder('left', prev.borders.left));\n if (prev.borders.bottom)\n borderElements.push(XMLBuilder.createBorder('bottom', prev.borders.bottom));\n if (prev.borders.right)\n borderElements.push(XMLBuilder.createBorder('right', prev.borders.right));\n if (borderElements.length > 0) {\n prevTcPrChildren.push(XMLBuilder.w('tcBorders', undefined, borderElements));\n }\n }\n if (prev.shading) {\n const shadingAttrs = buildShadingAttributes(prev.shading);\n if (Object.keys(shadingAttrs).length > 0) {\n prevTcPrChildren.push(XMLBuilder.wSelf('shd', shadingAttrs));\n }\n }\n if (prev.noWrap) {\n prevTcPrChildren.push(XMLBuilder.wSelf('noWrap'));\n }\n if (prev.margins) {\n const marginChildren: XMLElement[] = [];\n if (prev.margins.top !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('top', { 'w:w': prev.margins.top.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.left !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('left', { 'w:w': prev.margins.left.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.bottom !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('bottom', { 'w:w': prev.margins.bottom.toString(), 'w:type': 'dxa' })\n );\n }\n if (prev.margins.right !== undefined) {\n marginChildren.push(\n XMLBuilder.wSelf('right', { 'w:w': prev.margins.right.toString(), 'w:type': 'dxa' })\n );\n }\n if (marginChildren.length > 0) {\n prevTcPrChildren.push(XMLBuilder.w('tcMar', undefined, marginChildren));\n }\n }\n if (prev.textDirection) {\n prevTcPrChildren.push(XMLBuilder.wSelf('textDirection', { 'w:val': prev.textDirection }));\n }\n if (prev.fitText) {\n prevTcPrChildren.push(XMLBuilder.wSelf('tcFitText'));\n }\n if (prev.verticalAlignment) {\n prevTcPrChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': prev.verticalAlignment }));\n }\n if (prev.hideMark) {\n prevTcPrChildren.push(XMLBuilder.wSelf('hideMark'));\n }\n if (prev.cnfStyle) {\n prevTcPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\n }\n }\n const prevTcPr =\n prevTcPrChildren.length > 0\n ? XMLBuilder.w('tcPr', undefined, prevTcPrChildren)\n : XMLBuilder.w('tcPr', undefined, []);\n tcPrChildren.push(XMLBuilder.w('tcPrChange', changeAttrs, [prevTcPr]));\n }\n\n // Build cell element\n const cellChildren: XMLElement[] = [];\n\n // Add cell properties if there are any\n if (tcPrChildren.length > 0) {\n cellChildren.push(XMLBuilder.w('tcPr', undefined, tcPrChildren));\n }\n\n // Add paragraphs and raw nested content in correct order\n // Raw nested content (tables, SDTs) are interspersed with paragraphs\n if (this.paragraphs.length > 0 || this.rawNestedContent.length > 0) {\n // Sort raw content by position\n const sortedRaw = [...this.rawNestedContent].sort((a, b) => a.position - b.position);\n let rawIndex = 0;\n\n for (let i = 0; i < this.paragraphs.length; i++) {\n // Insert any raw content that comes before this paragraph (position <= i)\n let rawItem = sortedRaw[rawIndex];\n while (rawIndex < sortedRaw.length && rawItem && rawItem.position <= i) {\n // Use __rawXml element for passthrough (supported by XMLBuilder)\n cellChildren.push({\n name: '__rawXml',\n rawXml: rawItem.xml,\n });\n rawIndex++;\n rawItem = sortedRaw[rawIndex];\n }\n const para = this.paragraphs[i];\n if (para) {\n cellChildren.push(para.toXML());\n }\n }\n\n // Insert any remaining raw content after all paragraphs\n while (rawIndex < sortedRaw.length) {\n const rawItem = sortedRaw[rawIndex];\n if (rawItem) {\n cellChildren.push({\n name: '__rawXml',\n rawXml: rawItem.xml,\n });\n }\n rawIndex++;\n }\n\n // If we only have raw content and no paragraphs, we need at least one empty paragraph\n // per ECMA-376 (table cell must contain at least one block-level element)\n if (this.paragraphs.length === 0) {\n cellChildren.push(new Paragraph().toXML());\n }\n } else {\n // Empty cell needs at least one empty paragraph\n cellChildren.push(new Paragraph().toXML());\n }\n\n return XMLBuilder.w('tc', undefined, cellChildren);\n }\n\n /**\n * Creates a new TableCell\n * @param formatting - Cell formatting\n * @returns New TableCell instance\n */\n static create(formatting?: CellFormatting): TableCell {\n return new TableCell(formatting);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentTrackingContext.d.ts","sourceRoot":"","sources":["../../src/tracking/DocumentTrackingContext.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAsB,MAAM,iBAAiB,CAAC;AAM1D,OAAO,KAAK,EAAE,eAAe,EAAiB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM1F,MAAM,WAAW,qBAAqB;IAEpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAKD,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,YAAY,CAAiC;IAGrD,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAuB1C;gBAMS,eAAe,EAAE,eAAe;IAQ5C,MAAM,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAa7C,OAAO,IAAI,IAAI;IAUf,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY/B,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI,MAAM;IAInB,kBAAkB,IAAI,eAAe;IAIrC,wBAAwB,IAAI,OAAO;IAInC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB9F,4BAA4B,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAgBP,oBAAoB,CAClB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAiBP,gBAAgB,CACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IA4BP,kBAAkB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAgBP,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB7D,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB5D,mBAAmB,IAAI,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"DocumentTrackingContext.d.ts","sourceRoot":"","sources":["../../src/tracking/DocumentTrackingContext.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAsB,MAAM,iBAAiB,CAAC;AAM1D,OAAO,KAAK,EAAE,eAAe,EAAiB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM1F,MAAM,WAAW,qBAAqB;IAEpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAKD,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,YAAY,CAAiC;IAGrD,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAuB1C;gBAMS,eAAe,EAAE,eAAe;IAQ5C,MAAM,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAa7C,OAAO,IAAI,IAAI;IAUf,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY/B,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI,MAAM;IAInB,kBAAkB,IAAI,eAAe;IAIrC,wBAAwB,IAAI,OAAO;IAInC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB9F,4BAA4B,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAgBP,oBAAoB,CAClB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAiBP,gBAAgB,CACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IA4BP,kBAAkB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI;IAgBP,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB7D,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB5D,mBAAmB,IAAI,QAAQ,EAAE;IA6NjC,OAAO,CAAC,sBAAsB;IAyC9B,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAYtB,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ;IAOpD,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ;IAOnD,eAAe,IAAI,MAAM;IAOzB,iBAAiB,IAAI,OAAO;IAO5B,mBAAmB,IAAI,IAAI;CAG5B"}
|
|
@@ -294,38 +294,74 @@ class DocumentTrackingContext {
|
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
296
|
for (const [cell, changes] of cellChanges) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
const currentFormatting = cell.getFormatting();
|
|
298
|
+
const fullPrevProps = {};
|
|
299
|
+
for (const [key, value] of Object.entries(currentFormatting)) {
|
|
300
|
+
if (value !== undefined) {
|
|
301
|
+
fullPrevProps[key] = value;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
let latestTimestamp = 0;
|
|
305
|
+
for (const change of changes) {
|
|
306
|
+
if (change.previousValue !== undefined) {
|
|
307
|
+
fullPrevProps[change.property] = change.previousValue;
|
|
302
308
|
}
|
|
303
309
|
else {
|
|
304
|
-
|
|
305
|
-
author: this.author,
|
|
306
|
-
date,
|
|
307
|
-
id: String(getNextId()),
|
|
308
|
-
previousProperties: prevProps,
|
|
309
|
-
});
|
|
310
|
+
delete fullPrevProps[change.property];
|
|
310
311
|
}
|
|
311
|
-
|
|
312
|
+
if (change.timestamp > latestTimestamp) {
|
|
313
|
+
latestTimestamp = change.timestamp;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
|
|
317
|
+
const existing = cell.getTcPrChange();
|
|
318
|
+
if (existing) {
|
|
319
|
+
const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };
|
|
320
|
+
cell.setTcPrChange({ ...existing, previousProperties: merged });
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
cell.setTcPrChange({
|
|
324
|
+
author: this.author,
|
|
325
|
+
date,
|
|
326
|
+
id: String(this.revisionManager.consumeNextId()),
|
|
327
|
+
previousProperties: fullPrevProps,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
312
330
|
}
|
|
313
331
|
for (const [section, changes] of sectionChanges) {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
332
|
+
const currentProps = section.getProperties();
|
|
333
|
+
const fullPrevProps = {};
|
|
334
|
+
for (const [key, value] of Object.entries(currentProps)) {
|
|
335
|
+
if (value !== undefined) {
|
|
336
|
+
fullPrevProps[key] = value;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
let latestTimestamp = 0;
|
|
340
|
+
for (const change of changes) {
|
|
341
|
+
if (change.previousValue !== undefined) {
|
|
342
|
+
fullPrevProps[change.property] = change.previousValue;
|
|
319
343
|
}
|
|
320
344
|
else {
|
|
321
|
-
|
|
322
|
-
author: this.author,
|
|
323
|
-
date,
|
|
324
|
-
id: String(getNextId()),
|
|
325
|
-
previousProperties: prevProps,
|
|
326
|
-
});
|
|
345
|
+
delete fullPrevProps[change.property];
|
|
327
346
|
}
|
|
328
|
-
|
|
347
|
+
if (change.timestamp > latestTimestamp) {
|
|
348
|
+
latestTimestamp = change.timestamp;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const date = (0, dateFormatting_1.formatDateForXml)(new Date(latestTimestamp));
|
|
352
|
+
const existing = section.getSectPrChange();
|
|
353
|
+
if (existing) {
|
|
354
|
+
const merged = { ...fullPrevProps, ...(existing.previousProperties || {}) };
|
|
355
|
+
section.setSectPrChange({ ...existing, previousProperties: merged });
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
section.setSectPrChange({
|
|
359
|
+
author: this.author,
|
|
360
|
+
date,
|
|
361
|
+
id: String(this.revisionManager.consumeNextId()),
|
|
362
|
+
previousProperties: fullPrevProps,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
329
365
|
}
|
|
330
366
|
for (const [run, changes] of runChanges) {
|
|
331
367
|
this.applyRunPrChange(run, changes);
|