tinyweb-office-cells 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/styling/Style.ts","../src/core/Cell.ts","../src/core/Cells.ts","../src/features/DataValidation.ts","../src/features/ConditionalFormat.ts","../src/features/Hyperlink.ts","../src/features/AutoFilter.ts","../src/features/PageBreak.ts","../src/io/CellValueHandler.ts","../src/features/FormulaEvaluator.ts","../src/core/Worksheet.ts","../src/io/SharedStrings.ts","../src/io/XmlDataValidationSaver.ts","../src/io/XmlConditionalFormatSaver.ts","../src/io/XmlHyperlinkHandler.ts","../src/io/XmlAutoFilterSaver.ts","../src/io/CommentXml.ts","../src/io/XmlSaver.ts","../src/features/DefinedName.ts","../src/io/XmlAutoFilterLoader.ts","../src/io/XmlConditionalFormatLoader.ts","../src/io/XmlDataValidationLoader.ts","../src/io/XmlLoader.ts","../src/core/Workbook.ts","../src/index.ts"],"names":["BorderType","DataValidationType","DataValidationOperator","DataValidationAlertStyle","DataValidationImeMode","FormulaEvaluator","escapeXml","Cell","ensureArray","attr","attrOpt","TYPE_MAP","JSZip","Style","partPath","SaveFormat","ws","idx","XmlLoader"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Aspose.Cells for Node.js - Style Module\n *\n * Provides classes for cell styling: Font, Fill, Border, Borders,\n * Alignment, NumberFormat, Protection, and Style.\n *\n * Compatible with Aspose.Cells for .NET API structure.\n */\n\n// ─── Font ──────────────────────────────────────────────────────────────────\n\nexport interface FontOptions {\n name?: string;\n size?: number;\n color?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n}\n\n/**\n * Represents font settings for a cell or range of cells.\n */\nexport class Font {\n name: string;\n size: number;\n color: string;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n\n constructor(options: FontOptions = {}) {\n this.name = options.name ?? 'Calibri';\n this.size = options.size ?? 11;\n this.color = options.color ?? 'FF000000';\n this.bold = options.bold ?? false;\n this.italic = options.italic ?? false;\n this.underline = options.underline ?? false;\n this.strikethrough = options.strikethrough ?? false;\n }\n\n /** .NET-style alias: snake_case getter */\n get is_bold(): boolean {\n return this.bold;\n }\n set is_bold(v: boolean) {\n this.bold = v;\n }\n\n /** .NET-style alias: camelCase getter */\n get isBold(): boolean {\n return this.bold;\n }\n set isBold(v: boolean) {\n this.bold = v;\n }\n\n get is_italic(): boolean {\n return this.italic;\n }\n set is_italic(v: boolean) {\n this.italic = v;\n }\n\n get isItalic(): boolean {\n return this.italic;\n }\n set isItalic(v: boolean) {\n this.italic = v;\n }\n}\n\n// ─── Fill ──────────────────────────────────────────────────────────────────\n\nexport interface FillOptions {\n patternType?: string;\n foregroundColor?: string;\n backgroundColor?: string;\n}\n\n/**\n * Represents fill settings for a cell or range of cells.\n */\nexport class Fill {\n patternType: string;\n foregroundColor: string;\n backgroundColor: string;\n\n constructor(options: FillOptions = {}) {\n this.patternType = options.patternType ?? 'none';\n this.foregroundColor = options.foregroundColor ?? 'FFFFFFFF';\n this.backgroundColor = options.backgroundColor ?? 'FFFFFFFF';\n }\n\n // snake_case aliases\n get pattern_type(): string { return this.patternType; }\n set pattern_type(v: string) { this.patternType = v; }\n get foreground_color(): string { return this.foregroundColor; }\n set foreground_color(v: string) { this.foregroundColor = v; }\n get background_color(): string { return this.backgroundColor; }\n set background_color(v: string) { this.backgroundColor = v; }\n\n /** Sets a solid fill pattern with specified color. */\n setSolidFill(color: string): void {\n this.patternType = 'solid';\n this.foregroundColor = color;\n this.backgroundColor = color;\n }\n /** snake_case alias */\n set_solid_fill(color: string): void { this.setSolidFill(color); }\n\n /** Sets a gradient fill (simplified as solid). */\n setGradientFill(startColor: string, endColor: string): void {\n this.patternType = 'solid';\n this.foregroundColor = startColor;\n this.backgroundColor = endColor;\n }\n set_gradient_fill(startColor: string, endColor: string): void { this.setGradientFill(startColor, endColor); }\n\n /** Sets a pattern fill with specified pattern type and colors. */\n setPatternFill(patternType: string, fgColor = 'FFFFFFFF', bgColor = 'FFFFFFFF'): void {\n this.patternType = patternType;\n this.foregroundColor = fgColor;\n this.backgroundColor = bgColor;\n }\n set_pattern_fill(patternType: string, fgColor = 'FFFFFFFF', bgColor = 'FFFFFFFF'): void {\n this.setPatternFill(patternType, fgColor, bgColor);\n }\n\n /** Sets no fill (transparent background). */\n setNoFill(): void {\n this.patternType = 'none';\n this.foregroundColor = 'FFFFFFFF';\n this.backgroundColor = 'FFFFFFFF';\n }\n set_no_fill(): void { this.setNoFill(); }\n}\n\n// ─── Border ────────────────────────────────────────────────────────────────\n\nexport interface BorderOptions {\n lineStyle?: string;\n color?: string;\n weight?: number;\n}\n\n/**\n * Represents border settings for a single side of a cell.\n */\nexport class Border {\n lineStyle: string;\n color: string;\n weight: number;\n\n constructor(options: BorderOptions = {}) {\n this.lineStyle = options.lineStyle ?? 'none';\n this.color = options.color ?? 'FF000000';\n this.weight = options.weight ?? 1;\n }\n\n // snake_case aliases\n get line_style(): string { return this.lineStyle; }\n set line_style(v: string) { this.lineStyle = v; }\n}\n\n// ─── BorderType enum ───────────────────────────────────────────────────────\n\nexport enum BorderType {\n TopBorder = 'top',\n BottomBorder = 'bottom',\n LeftBorder = 'left',\n RightBorder = 'right',\n DiagonalUp = 'diagonalUp',\n DiagonalDown = 'diagonalDown',\n}\n\n// ─── Borders ───────────────────────────────────────────────────────────────\n\n/**\n * Represents border settings for all sides of a cell.\n */\nexport class Borders {\n top: Border;\n bottom: Border;\n left: Border;\n right: Border;\n diagonal: Border;\n diagonalUp: boolean;\n diagonalDown: boolean;\n\n constructor() {\n this.top = new Border();\n this.bottom = new Border();\n this.left = new Border();\n this.right = new Border();\n this.diagonal = new Border();\n this.diagonalUp = false;\n this.diagonalDown = false;\n }\n\n // snake_case aliases\n get diagonal_up(): boolean { return this.diagonalUp; }\n set diagonal_up(v: boolean) { this.diagonalUp = v; }\n get diagonal_down(): boolean { return this.diagonalDown; }\n set diagonal_down(v: boolean) { this.diagonalDown = v; }\n\n /** Gets a border by BorderType. */\n getByBorderType(borderType: BorderType): Border {\n switch (borderType) {\n case BorderType.TopBorder: return this.top;\n case BorderType.BottomBorder: return this.bottom;\n case BorderType.LeftBorder: return this.left;\n case BorderType.RightBorder: return this.right;\n case BorderType.DiagonalUp:\n case BorderType.DiagonalDown:\n return this.diagonal;\n default:\n throw new Error(`Unknown border type: ${borderType}`);\n }\n }\n\n /** Sets border properties for a specific side or 'all'. */\n setBorder(side: string, lineStyle = 'none', color = 'FF000000', weight = 1): void {\n const apply = (b: Border): void => {\n b.lineStyle = lineStyle;\n b.color = color;\n b.weight = weight;\n };\n if (side === 'all') {\n apply(this.top);\n apply(this.bottom);\n apply(this.left);\n apply(this.right);\n } else if (side === 'top') {\n apply(this.top);\n } else if (side === 'bottom') {\n apply(this.bottom);\n } else if (side === 'left') {\n apply(this.left);\n } else if (side === 'right') {\n apply(this.right);\n }\n }\n set_border(side: string, lineStyle = 'none', color = 'FF000000', weight = 1): void {\n this.setBorder(side, lineStyle, color, weight);\n }\n}\n\n// ─── Alignment ─────────────────────────────────────────────────────────────\n\nexport interface AlignmentOptions {\n horizontal?: string;\n vertical?: string;\n wrapText?: boolean;\n indent?: number;\n textRotation?: number;\n shrinkToFit?: boolean;\n readingOrder?: number;\n relativeIndent?: number;\n}\n\n/**\n * Represents alignment settings for a cell.\n */\nexport class Alignment {\n horizontal: string;\n vertical: string;\n wrapText: boolean;\n indent: number;\n textRotation: number;\n shrinkToFit: boolean;\n readingOrder: number;\n relativeIndent: number;\n\n constructor(options: AlignmentOptions = {}) {\n this.horizontal = options.horizontal ?? 'general';\n this.vertical = options.vertical ?? 'bottom';\n this.wrapText = options.wrapText ?? false;\n this.indent = options.indent ?? 0;\n this.textRotation = options.textRotation ?? 0;\n this.shrinkToFit = options.shrinkToFit ?? false;\n this.readingOrder = options.readingOrder ?? 0;\n this.relativeIndent = options.relativeIndent ?? 0;\n }\n\n // snake_case aliases\n get wrap_text(): boolean { return this.wrapText; }\n set wrap_text(v: boolean) { this.wrapText = v; }\n get text_rotation(): number { return this.textRotation; }\n set text_rotation(v: number) { this.textRotation = v; }\n get shrink_to_fit(): boolean { return this.shrinkToFit; }\n set shrink_to_fit(v: boolean) { this.shrinkToFit = v; }\n get reading_order(): number { return this.readingOrder; }\n set reading_order(v: number) { this.readingOrder = v; }\n get relative_indent(): number { return this.relativeIndent; }\n set relative_indent(v: number) { this.relativeIndent = v; }\n}\n\n// ─── NumberFormat ──────────────────────────────────────────────────────────\n\n/**\n * Built-in number format lookup.\n */\nexport class NumberFormat {\n static readonly BUILTIN_FORMATS: Record<number, string> = {\n 0: 'General',\n 1: '0',\n 2: '0.00',\n 3: '#,##0',\n 4: '#,##0.00',\n 5: '$#,##0_);($#,##0)',\n 6: '$#,##0_);[Red]($#,##0)',\n 7: '$#,##0.00_);($#,##0.00)',\n 8: '$#,##0.00_);[Red]($#,##0.00)',\n 9: '0%',\n 10: '0.00%',\n 11: '0.00E+00',\n 12: '# ?/?',\n 13: '# ??/??',\n 14: 'mm-dd-yy',\n 15: 'd-mmm-yy',\n 16: 'd-mmm',\n 17: 'mmm-yy',\n 18: 'h:mm AM/PM',\n 19: 'h:mm:ss AM/PM',\n 20: 'h:mm',\n 21: 'h:mm:ss',\n 22: 'm/d/yy h:mm',\n 37: '#,##0_);(#,##0)',\n 38: '#,##0_);[Red](#,##0)',\n 39: '#,##0.00_);(#,##0.00)',\n 40: '#,##0.00_);[Red](#,##0.00)',\n 41: '_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)',\n 42: '_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)',\n 43: '_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)',\n 44: '_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)',\n 45: 'mm:ss',\n 46: '[h]:mm:ss',\n 47: 'mm:ss.0',\n 48: '##0.0E+0',\n 49: '@',\n };\n\n /** Gets a built-in format string by format ID. */\n static getBuiltinFormat(formatId: number): string {\n return NumberFormat.BUILTIN_FORMATS[formatId] ?? 'General';\n }\n static get_builtin_format(formatId: number): string {\n return NumberFormat.getBuiltinFormat(formatId);\n }\n\n /** Checks if a format code is a built-in format. */\n static isBuiltinFormat(formatCode: string): boolean {\n return Object.values(NumberFormat.BUILTIN_FORMATS).includes(formatCode);\n }\n static is_builtin_format(formatCode: string): boolean {\n return NumberFormat.isBuiltinFormat(formatCode);\n }\n\n /** Looks up the format ID for a built-in format code. */\n static lookupBuiltinFormat(formatCode: string): number | null {\n for (const [id, code] of Object.entries(NumberFormat.BUILTIN_FORMATS)) {\n if (code === formatCode) return Number(id);\n }\n return null;\n }\n static lookup_builtin_format(formatCode: string): number | null {\n return NumberFormat.lookupBuiltinFormat(formatCode);\n }\n}\n\n// ─── Protection ────────────────────────────────────────────────────────────\n\nexport interface ProtectionOptions {\n locked?: boolean;\n hidden?: boolean;\n}\n\n/**\n * Represents cell protection settings.\n */\nexport class Protection {\n locked: boolean;\n hidden: boolean;\n\n constructor(options: ProtectionOptions = {}) {\n this.locked = options.locked ?? true;\n this.hidden = options.hidden ?? false;\n }\n}\n\n// ─── Style ─────────────────────────────────────────────────────────────────\n\n/**\n * Represents formatting settings for a cell or range of cells.\n */\nexport class Style {\n font: Font;\n fill: Fill;\n borders: Borders;\n alignment: Alignment;\n numberFormat: string;\n protection: Protection;\n\n constructor() {\n this.font = new Font();\n this.fill = new Fill();\n this.borders = new Borders();\n this.alignment = new Alignment();\n this.numberFormat = 'General';\n this.protection = new Protection();\n }\n\n // snake_case alias\n get number_format(): string { return this.numberFormat; }\n set number_format(v: string) { this.numberFormat = v; }\n\n /** Creates a deep copy of this Style. */\n copy(): Style {\n const s = new Style();\n s.font = new Font({\n name: this.font.name,\n size: this.font.size,\n color: this.font.color,\n bold: this.font.bold,\n italic: this.font.italic,\n underline: this.font.underline,\n strikethrough: this.font.strikethrough,\n });\n s.fill = new Fill({\n patternType: this.fill.patternType,\n foregroundColor: this.fill.foregroundColor,\n backgroundColor: this.fill.backgroundColor,\n });\n s.borders = new Borders();\n s.borders.top = new Border({ lineStyle: this.borders.top.lineStyle, color: this.borders.top.color, weight: this.borders.top.weight });\n s.borders.bottom = new Border({ lineStyle: this.borders.bottom.lineStyle, color: this.borders.bottom.color, weight: this.borders.bottom.weight });\n s.borders.left = new Border({ lineStyle: this.borders.left.lineStyle, color: this.borders.left.color, weight: this.borders.left.weight });\n s.borders.right = new Border({ lineStyle: this.borders.right.lineStyle, color: this.borders.right.color, weight: this.borders.right.weight });\n s.borders.diagonal = new Border({ lineStyle: this.borders.diagonal.lineStyle, color: this.borders.diagonal.color, weight: this.borders.diagonal.weight });\n s.borders.diagonalUp = this.borders.diagonalUp;\n s.borders.diagonalDown = this.borders.diagonalDown;\n s.alignment = new Alignment({\n horizontal: this.alignment.horizontal,\n vertical: this.alignment.vertical,\n wrapText: this.alignment.wrapText,\n indent: this.alignment.indent,\n textRotation: this.alignment.textRotation,\n shrinkToFit: this.alignment.shrinkToFit,\n readingOrder: this.alignment.readingOrder,\n relativeIndent: this.alignment.relativeIndent,\n });\n s.numberFormat = this.numberFormat;\n s.protection = new Protection({ locked: this.protection.locked, hidden: this.protection.hidden });\n return s;\n }\n\n // ── Convenience methods (matching Python) ─────────────────────────────\n\n setFillColor(color: string): void { this.fill.setSolidFill(color); }\n set_fill_color(color: string): void { this.setFillColor(color); }\n\n setFillPattern(patternType: string, fgColor = 'FFFFFFFF', bgColor = 'FFFFFFFF'): void {\n this.fill.setPatternFill(patternType, fgColor, bgColor);\n }\n set_fill_pattern(patternType: string, fgColor = 'FFFFFFFF', bgColor = 'FFFFFFFF'): void {\n this.setFillPattern(patternType, fgColor, bgColor);\n }\n\n setNoFill(): void { this.fill.setNoFill(); }\n set_no_fill(): void { this.setNoFill(); }\n\n setBorderColor(side: string, color: string): void {\n const sides = side === 'all' ? ['top', 'bottom', 'left', 'right'] as const : [side] as const;\n for (const s of sides) {\n const b = (this.borders as unknown as Record<string, Border>)[s];\n if (b) b.color = color;\n }\n }\n set_border_color(side: string, color: string): void { this.setBorderColor(side, color); }\n\n setBorderStyle(side: string, style: string): void {\n const sides = side === 'all' ? ['top', 'bottom', 'left', 'right'] as const : [side] as const;\n for (const s of sides) {\n const b = (this.borders as unknown as Record<string, Border>)[s];\n if (b) b.lineStyle = style;\n }\n }\n set_border_style(side: string, style: string): void { this.setBorderStyle(side, style); }\n\n setBorder(side: string, lineStyle = 'none', color = 'FF000000', weight = 1): void {\n this.borders.setBorder(side, lineStyle, color, weight);\n }\n set_border(side: string, lineStyle = 'none', color = 'FF000000', weight = 1): void {\n this.setBorder(side, lineStyle, color, weight);\n }\n\n setDiagonalBorder(lineStyle = 'none', color = 'FF000000', weight = 1, up = false, down = false): void {\n this.borders.diagonal.lineStyle = lineStyle;\n this.borders.diagonal.color = color;\n this.borders.diagonal.weight = weight;\n this.borders.diagonalUp = up;\n this.borders.diagonalDown = down;\n }\n set_diagonal_border(lineStyle = 'none', color = 'FF000000', weight = 1, up = false, down = false): void {\n this.setDiagonalBorder(lineStyle, color, weight, up, down);\n }\n\n setHorizontalAlignment(alignment: string): void {\n const valid = ['general', 'left', 'center', 'right', 'fill', 'justify', 'centerContinuous', 'distributed'];\n if (!valid.includes(alignment)) throw new Error(`Invalid horizontal alignment: ${alignment}`);\n this.alignment.horizontal = alignment;\n }\n set_horizontal_alignment(alignment: string): void { this.setHorizontalAlignment(alignment); }\n\n setVerticalAlignment(alignment: string): void {\n const valid = ['top', 'center', 'bottom', 'justify', 'distributed'];\n if (!valid.includes(alignment)) throw new Error(`Invalid vertical alignment: ${alignment}`);\n this.alignment.vertical = alignment;\n }\n set_vertical_alignment(alignment: string): void { this.setVerticalAlignment(alignment); }\n\n setTextWrap(wrap = true): void { this.alignment.wrapText = wrap; }\n set_text_wrap(wrap = true): void { this.setTextWrap(wrap); }\n\n setShrinkToFit(shrink = true): void { this.alignment.shrinkToFit = shrink; }\n set_shrink_to_fit(shrink = true): void { this.setShrinkToFit(shrink); }\n\n setIndent(indent: number): void { this.alignment.indent = Math.max(0, indent); }\n set_indent(indent: number): void { this.setIndent(indent); }\n\n setTextRotation(rotation: number): void {\n if (rotation !== 255 && (rotation < 0 || rotation > 180)) {\n throw new Error('Text rotation must be 0-180 degrees or 255 for vertical text');\n }\n this.alignment.textRotation = rotation;\n }\n set_text_rotation(rotation: number): void { this.setTextRotation(rotation); }\n\n setReadingOrder(order: number): void {\n if (![0, 1, 2].includes(order)) {\n throw new Error('Reading order must be 0 (Context), 1 (Left-to-Right), or 2 (Right-to-Left)');\n }\n this.alignment.readingOrder = order;\n }\n set_reading_order(order: number): void { this.setReadingOrder(order); }\n\n setNumberFormat(formatCode: string): void { this.numberFormat = formatCode; }\n set_number_format(formatCode: string): void { this.setNumberFormat(formatCode); }\n\n setBuiltinNumberFormat(formatId: number): void {\n this.numberFormat = NumberFormat.getBuiltinFormat(formatId);\n }\n set_builtin_number_format(formatId: number): void { this.setBuiltinNumberFormat(formatId); }\n\n setLocked(locked = true): void { this.protection.locked = locked; }\n set_locked(locked = true): void { this.setLocked(locked); }\n\n setFormulaHidden(hidden = true): void { this.protection.hidden = hidden; }\n set_formula_hidden(hidden = true): void { this.setFormulaHidden(hidden); }\n}\n","/**\n * Aspose.Cells for Node.js - Cell Module\n *\n * Represents a single cell in a worksheet.\n * Compatible with Aspose.Cells for .NET API structure.\n */\n\nimport { Style } from '../styling/Style';\n\n// ─── Comment type ──────────────────────────────────────────────────────────\n\nexport interface CellComment {\n text: string;\n author: string;\n width?: number | null;\n height?: number | null;\n}\n\n// ─── Data type literals ────────────────────────────────────────────────────\n\nexport type CellDataType = 'none' | 'boolean' | 'numeric' | 'datetime' | 'string' | 'unknown';\n\n// ─── Cell value type ───────────────────────────────────────────────────────\n\nexport type CellValue = null | undefined | string | number | boolean | Date;\n\n// ─── Cell class ────────────────────────────────────────────────────────────\n\n/**\n * Represents a single cell in a worksheet.\n */\nexport class Cell {\n private _value: CellValue;\n private _formula: string | null;\n private _style: Style;\n private _comment: CellComment | null;\n /** Internal use for saving */\n _styleIndex: number;\n\n constructor(value: CellValue = null, formula: string | null = null) {\n this._value = value;\n this._formula = formula;\n this._style = new Style();\n this._comment = null;\n this._styleIndex = 0;\n }\n\n // ── Properties ──────────────────────────────────────────────────────────\n\n get value(): CellValue { return this._value; }\n set value(val: CellValue) { this._value = val; }\n\n get formula(): string | null { return this._formula; }\n set formula(val: string | null) { this._formula = val; }\n\n get style(): Style { return this._style; }\n set style(val: Style) { this._style = val; }\n\n get comment(): CellComment | null { return this._comment; }\n\n // ── Data type detection ─────────────────────────────────────────────────\n\n get dataType(): CellDataType {\n return this.getDataType();\n }\n /** snake_case alias */\n get data_type(): CellDataType {\n return this.getDataType();\n }\n\n private getDataType(): CellDataType {\n if (this._value === null || this._value === undefined) return 'none';\n if (typeof this._value === 'boolean') return 'boolean';\n if (typeof this._value === 'number') return 'numeric';\n if (this._value instanceof Date) return 'datetime';\n if (typeof this._value === 'string') {\n if (this._value.toUpperCase() === 'TRUE' || this._value.toUpperCase() === 'FALSE') {\n return 'boolean';\n }\n return 'string';\n }\n return 'unknown';\n }\n\n // ── Cell value methods ──────────────────────────────────────────────────\n\n isEmpty(): boolean { return this._value === null || this._value === undefined; }\n is_empty(): boolean { return this.isEmpty(); }\n\n clearValue(): void { this._value = null; }\n clear_value(): void { this.clearValue(); }\n\n clearFormula(): void { this._formula = null; }\n clear_formula(): void { this.clearFormula(); }\n\n clear(): void {\n this._value = null;\n this._formula = null;\n }\n\n // ── Comment methods ─────────────────────────────────────────────────────\n\n setComment(text: string, author = 'None', width?: number | null, height?: number | null): void {\n if (author === '') author = 'None';\n this._comment = { text, author, width: width ?? null, height: height ?? null };\n }\n /** snake_case alias */\n set_comment(text: string, author = 'None', width?: number | null, height?: number | null): void {\n this.setComment(text, author, width, height);\n }\n /** .NET-style alias */\n addComment(text: string, author = 'None'): void {\n this.setComment(text, author);\n }\n add_comment(text: string, author = 'None'): void {\n this.addComment(text, author);\n }\n\n getComment(): CellComment | null { return this._comment; }\n get_comment(): CellComment | null { return this.getComment(); }\n\n clearComment(): void { this._comment = null; }\n clear_comment(): void { this.clearComment(); }\n removeComment(): void { this.clearComment(); }\n remove_comment(): void { this.clearComment(); }\n\n hasComment(): boolean { return this._comment !== null; }\n has_comment(): boolean { return this.hasComment(); }\n\n setCommentSize(width: number, height: number): void {\n if (!this._comment) throw new Error('Cell has no comment. Call setComment() first.');\n this._comment.width = width;\n this._comment.height = height;\n }\n set_comment_size(width: number, height: number): void { this.setCommentSize(width, height); }\n\n getCommentSize(): [number, number] | null {\n if (!this._comment) return null;\n if (this._comment.width != null && this._comment.height != null) {\n return [this._comment.width, this._comment.height];\n }\n return null;\n }\n get_comment_size(): [number, number] | null { return this.getCommentSize(); }\n\n // ── Style methods ───────────────────────────────────────────────────────\n\n applyStyle(style: Style): void { this._style = style; }\n apply_style(style: Style): void { this.applyStyle(style); }\n setStyle(style: Style): void { this.applyStyle(style); }\n set_style(style: Style): void { this.applyStyle(style); }\n\n getStyle(): Style { return this._style; }\n get_style(): Style { return this.getStyle(); }\n\n clearStyle(): void { this._style = new Style(); }\n clear_style(): void { this.clearStyle(); }\n\n // ── Formula methods ─────────────────────────────────────────────────────\n\n hasFormula(): boolean { return this._formula !== null; }\n has_formula(): boolean { return this.hasFormula(); }\n\n isNumericValue(): boolean { return typeof this._value === 'number'; }\n is_numeric_value(): boolean { return this.isNumericValue(); }\n\n isTextValue(): boolean { return typeof this._value === 'string'; }\n is_text_value(): boolean { return this.isTextValue(); }\n\n isBooleanValue(): boolean { return this.dataType === 'boolean'; }\n is_boolean_value(): boolean { return this.isBooleanValue(); }\n\n isDateTimeValue(): boolean { return this.dataType === 'datetime'; }\n is_date_time_value(): boolean { return this.isDateTimeValue(); }\n\n /** Sets the value of the cell (.NET compatibility). */\n putValue(value: CellValue): void { this._value = value; }\n put_value(value: CellValue): void { this.putValue(value); }\n\n getValue(): CellValue { return this._value; }\n get_value(): CellValue { return this.getValue(); }\n\n // ── String representation ───────────────────────────────────────────────\n\n toString(): string {\n return this._value != null ? String(this._value) : '';\n }\n}\n","/**\n * Aspose.Cells for Node.js - Cells Module\n *\n * A1-keyed collection of cells in a worksheet.\n * Compatible with Aspose.Cells for .NET API structure.\n */\n\nimport { Cell, CellValue } from './Cell';\n\n// Forward-declare to avoid circular import at value level\n// Worksheet is only used for type-checking; the actual reference\n// is injected at runtime via the constructor.\nexport interface WorksheetLike {\n _mergedCells: string[];\n _rowHeights: Record<number, number>;\n _columnWidths: Record<number, number>;\n _hiddenRows: Set<number>;\n _hiddenColumns: Set<number>;\n}\n\n/**\n * Represents a collection of cells in a worksheet.\n */\nexport class Cells {\n /** Internal cell storage keyed by A1 reference. */\n _cells: Map<string, Cell>;\n /** Back-reference to owning worksheet (set at runtime). */\n _worksheet: WorksheetLike | null;\n\n constructor(worksheet: WorksheetLike | null = null) {\n this._cells = new Map();\n this._worksheet = worksheet;\n }\n\n private requireWorksheet(): void {\n if (!this._worksheet) throw new Error('Cells is not attached to a Worksheet');\n }\n\n /** Normalize tuple-like [row, col] into A1 key. */\n private normalizeKey(key: string | [number, number | string]): string {\n if (Array.isArray(key)) {\n const [row, col] = key;\n const colIdx = typeof col === 'string' ? Cells.columnIndexFromString(col) : col;\n return Cells.coordinateToString(row, colIdx);\n }\n return key;\n }\n\n // ── Cell access ─────────────────────────────────────────────────────────\n\n /** Gets a cell by its A1 reference. Creates if not exists. */\n get(key: string | [number, number | string]): Cell {\n const k = this.normalizeKey(key);\n let cell = this._cells.get(k);\n if (!cell) {\n cell = new Cell();\n this._cells.set(k, cell);\n }\n return cell;\n }\n\n /** Sets a cell value by A1 reference. */\n set(key: string | [number, number | string], value: Cell | CellValue): void {\n const k = this.normalizeKey(key);\n if (value instanceof Cell) {\n this._cells.set(k, value);\n } else {\n const cell = this.get(k);\n cell.value = value;\n }\n }\n\n /** Access cell by row/column (1-based). */\n cell(row: number, column: number | string): Cell {\n const colIdx = typeof column === 'string' ? Cells.columnIndexFromString(column) : column;\n const ref = `${Cells.columnLetterFromIndex(colIdx)}${row}`;\n return this.get(ref);\n }\n\n // ── Coordinate conversion (static) ──────────────────────────────────────\n\n static columnIndexFromString(column: string): number {\n if (!column) throw new Error('Column string cannot be empty');\n const upper = column.toUpperCase();\n let result = 0;\n for (const ch of upper) {\n if (ch < 'A' || ch > 'Z') throw new Error(`Invalid column character: ${ch}`);\n result = result * 26 + (ch.charCodeAt(0) - 64);\n }\n return result;\n }\n /** snake_case alias */\n static column_index_from_string(column: string): number { return Cells.columnIndexFromString(column); }\n\n static columnLetterFromIndex(index: number): string {\n if (index < 1) throw new Error('Column index must be >= 1');\n let result = '';\n let i = index;\n while (i > 0) {\n i--;\n result = String.fromCharCode(65 + (i % 26)) + result;\n i = Math.floor(i / 26);\n }\n return result;\n }\n static column_letter_from_index(index: number): string { return Cells.columnLetterFromIndex(index); }\n\n static coordinateFromString(coord: string): [number, number] {\n if (!coord) throw new Error('Coordinate cannot be empty');\n let colStr = '';\n let rowStr = '';\n for (const ch of coord) {\n if (/[a-zA-Z]/.test(ch)) colStr += ch;\n else if (/\\d/.test(ch)) rowStr += ch;\n else throw new Error(`Invalid character in coordinate: ${ch}`);\n }\n if (!colStr || !rowStr) throw new Error(`Invalid coordinate format: ${coord}`);\n return [parseInt(rowStr, 10), Cells.columnIndexFromString(colStr)];\n }\n static coordinate_from_string(coord: string): [number, number] { return Cells.coordinateFromString(coord); }\n\n static coordinateToString(row: number, column: number): string {\n if (row < 1 || column < 1) throw new Error('Row and column must be >= 1');\n return `${Cells.columnLetterFromIndex(column)}${row}`;\n }\n static coordinate_to_string(row: number, column: number): string { return Cells.coordinateToString(row, column); }\n\n // ── Iteration ───────────────────────────────────────────────────────────\n\n /** Iterates row-by-row, yielding arrays of Cell (or values). */\n *iterRows(options: { minRow?: number; maxRow?: number; minCol?: number; maxCol?: number; valuesOnly?: boolean } = {}): Generator<(Cell | CellValue)[]> {\n if (this._cells.size === 0) return;\n const rows = new Set<number>();\n const cols = new Set<number>();\n for (const ref of this._cells.keys()) {\n const [r, c] = Cells.coordinateFromString(ref);\n rows.add(r);\n cols.add(c);\n }\n const minRow = options.minRow ?? Math.min(...rows);\n const maxRow = options.maxRow ?? Math.max(...rows);\n const minCol = options.minCol ?? Math.min(...cols);\n const maxCol = options.maxCol ?? Math.max(...cols);\n\n for (let r = minRow; r <= maxRow; r++) {\n const rowCells: (Cell | CellValue)[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const cell = this.get(Cells.coordinateToString(r, c));\n rowCells.push(options.valuesOnly ? cell.value : cell);\n }\n yield rowCells;\n }\n }\n /** snake_case alias */\n *iter_rows(options: { minRow?: number; maxRow?: number; minCol?: number; maxCol?: number; valuesOnly?: boolean } = {}): Generator<(Cell | CellValue)[]> {\n yield* this.iterRows(options);\n }\n\n // ── Collection methods ──────────────────────────────────────────────────\n\n count(): number { return this._cells.size; }\n\n clear(): void { this._cells.clear(); }\n\n getCellByName(cellName: string): Cell { return this.get(cellName); }\n get_cell_by_name(cellName: string): Cell { return this.getCellByName(cellName); }\n\n setCellByName(cellName: string, value: CellValue): void { this.set(cellName, value); }\n set_cell_by_name(cellName: string, value: CellValue): void { this.setCellByName(cellName, value); }\n\n getCell(row: number, column: number): Cell { return this.cell(row, column); }\n get_cell(row: number, column: number): Cell { return this.getCell(row, column); }\n\n setCell(row: number, column: number, value: CellValue): void {\n const ref = Cells.coordinateToString(row, column);\n this.set(ref, value);\n }\n set_cell(row: number, column: number, value: CellValue): void { this.setCell(row, column, value); }\n\n // ── Row / Column dimensions ─────────────────────────────────────────────\n\n setRowHeight(row: number, height: number): void {\n this.requireWorksheet();\n if (row < 0) throw new Error('row must be >= 0');\n if (height <= 0) throw new Error('height must be > 0');\n this._worksheet!._rowHeights[row + 1] = height;\n }\n set_row_height(row: number, height: number): void { this.setRowHeight(row, height); }\n SetRowHeight(row: number, height: number): void { this.setRowHeight(row, height); }\n\n getRowHeight(row: number): number {\n this.requireWorksheet();\n if (row < 0) throw new Error('row must be >= 0');\n const h = this._worksheet!._rowHeights[row + 1];\n return h ?? 15; // Default Excel row height\n }\n get_row_height(row: number): number { return this.getRowHeight(row); }\n GetRowHeight(row: number): number { return this.getRowHeight(row); }\n\n setColumnWidth(column: number | string, width: number): void {\n this.requireWorksheet();\n let colIdx: number;\n if (typeof column === 'string') {\n colIdx = Cells.columnIndexFromString(column);\n } else {\n if (column < 0) throw new Error('column must be >= 0');\n colIdx = column + 1;\n }\n if (width <= 0) throw new Error('width must be > 0');\n this._worksheet!._columnWidths[colIdx] = width;\n }\n set_column_width(column: number | string, width: number): void { this.setColumnWidth(column, width); }\n SetColumnWidth(column: number | string, width: number): void { this.setColumnWidth(column, width); }\n\n getColumnWidth(column: number | string): number {\n this.requireWorksheet();\n let colIdx: number;\n if (typeof column === 'string') {\n colIdx = Cells.columnIndexFromString(column);\n } else {\n if (column < 0) throw new Error('column must be >= 0');\n colIdx = column + 1;\n }\n return this._worksheet!._columnWidths[colIdx] ?? 8.43; // Default Excel column width\n }\n get_column_width(column: number | string): number { return this.getColumnWidth(column); }\n GetColumnWidth(column: number | string): number { return this.getColumnWidth(column); }\n\n // ── Hide / unhide rows & columns ────────────────────────────────────────\n\n hideRow(row: number): void {\n this.requireWorksheet();\n if (row < 0) throw new Error('row must be >= 0');\n this._worksheet!._hiddenRows.add(row + 1);\n }\n hide_row(row: number): void { this.hideRow(row); }\n\n unhideRow(row: number): void {\n this.requireWorksheet();\n if (row < 0) throw new Error('row must be >= 0');\n this._worksheet!._hiddenRows.delete(row + 1);\n }\n unhide_row(row: number): void { this.unhideRow(row); }\n\n isRowHidden(row: number): boolean {\n this.requireWorksheet();\n if (row < 0) throw new Error('row must be >= 0');\n return this._worksheet!._hiddenRows.has(row + 1);\n }\n is_row_hidden(row: number): boolean { return this.isRowHidden(row); }\n IsRowHidden(row: number): boolean { return this.isRowHidden(row); }\n\n hideColumn(column: number | string): void {\n this.requireWorksheet();\n const colIdx = typeof column === 'string' ? Cells.columnIndexFromString(column) : column + 1;\n this._worksheet!._hiddenColumns.add(colIdx);\n }\n hide_column(column: number | string): void { this.hideColumn(column); }\n\n unhideColumn(column: number | string): void {\n this.requireWorksheet();\n const colIdx = typeof column === 'string' ? Cells.columnIndexFromString(column) : column + 1;\n this._worksheet!._hiddenColumns.delete(colIdx);\n }\n unhide_column(column: number | string): void { this.unhideColumn(column); }\n\n isColumnHidden(column: number | string): boolean {\n this.requireWorksheet();\n const colIdx = typeof column === 'string' ? Cells.columnIndexFromString(column) : column + 1;\n return this._worksheet!._hiddenColumns.has(colIdx);\n }\n is_column_hidden(column: number | string): boolean { return this.isColumnHidden(column); }\n IsColumnHidden(column: number | string): boolean { return this.isColumnHidden(column); }\n\n // ── Merge cells ─────────────────────────────────────────────────────────\n\n /** Merges a rectangular range. Row/column are 0-based. */\n merge(firstRow: number, firstColumn: number, totalRows: number, totalColumns: number): void {\n this.requireWorksheet();\n if (firstRow < 0) throw new Error('firstRow must be >= 0');\n if (firstColumn < 0) throw new Error('firstColumn must be >= 0');\n if (totalRows < 1) throw new Error('totalRows must be >= 1');\n if (totalColumns < 1) throw new Error('totalColumns must be >= 1');\n\n const startRef = Cells.coordinateToString(firstRow + 1, firstColumn + 1);\n const endRef = Cells.coordinateToString(firstRow + totalRows, firstColumn + totalColumns);\n const mergeRef = (startRef !== endRef ? `${startRef}:${endRef}` : startRef).toUpperCase();\n\n if (!this._worksheet!._mergedCells.includes(mergeRef)) {\n this._worksheet!._mergedCells.push(mergeRef);\n }\n }\n /** .NET alias */\n Merge(firstRow: number, firstColumn: number, totalRows: number, totalColumns: number): void {\n this.merge(firstRow, firstColumn, totalRows, totalColumns);\n }\n\n /** Unmerges a previously merged rectangular range. */\n unmerge(firstRow: number, firstColumn: number, totalRows: number, totalColumns: number): void {\n this.requireWorksheet();\n if (firstRow < 0) throw new Error('firstRow must be >= 0');\n if (firstColumn < 0) throw new Error('firstColumn must be >= 0');\n if (totalRows < 1) throw new Error('totalRows must be >= 1');\n if (totalColumns < 1) throw new Error('totalColumns must be >= 1');\n\n const startRef = Cells.coordinateToString(firstRow + 1, firstColumn + 1);\n const endRef = Cells.coordinateToString(firstRow + totalRows, firstColumn + totalColumns);\n const mergeRef = (startRef !== endRef ? `${startRef}:${endRef}` : startRef).toUpperCase();\n\n const idx = this._worksheet!._mergedCells.indexOf(mergeRef);\n if (idx !== -1) this._worksheet!._mergedCells.splice(idx, 1);\n }\n UnMerge(firstRow: number, firstColumn: number, totalRows: number, totalColumns: number): void {\n this.unmerge(firstRow, firstColumn, totalRows, totalColumns);\n }\n\n mergeRange(rangeRef: string): void {\n this.requireWorksheet();\n if (!rangeRef) throw new Error('rangeRef must be a non-empty string');\n const ref = rangeRef.toUpperCase();\n if (!this._worksheet!._mergedCells.includes(ref)) {\n this._worksheet!._mergedCells.push(ref);\n }\n }\n merge_range(rangeRef: string): void { this.mergeRange(rangeRef); }\n\n unmergeRange(rangeRef: string): void {\n this.requireWorksheet();\n if (!rangeRef) throw new Error('rangeRef must be a non-empty string');\n const ref = rangeRef.toUpperCase();\n const idx = this._worksheet!._mergedCells.indexOf(ref);\n if (idx !== -1) this._worksheet!._mergedCells.splice(idx, 1);\n }\n unmerge_range(rangeRef: string): void { this.unmergeRange(rangeRef); }\n\n getMergedCells(): string[] {\n this.requireWorksheet();\n return [...this._worksheet!._mergedCells];\n }\n get_merged_cells(): string[] { return this.getMergedCells(); }\n\n // ── Range methods ───────────────────────────────────────────────────────\n\n getRange(startRow: number, startColumn: number, endRow: number, endColumn: number): Cell[][] {\n const result: Cell[][] = [];\n for (let r = startRow; r <= endRow; r++) {\n const rowCells: Cell[] = [];\n for (let c = startColumn; c <= endColumn; c++) {\n rowCells.push(this.get(Cells.coordinateToString(r, c)));\n }\n result.push(rowCells);\n }\n return result;\n }\n get_range(startRow: number, startColumn: number, endRow: number, endColumn: number): Cell[][] {\n return this.getRange(startRow, startColumn, endRow, endColumn);\n }\n\n // ── Utility ─────────────────────────────────────────────────────────────\n\n hasCell(cellName: string): boolean { return this._cells.has(cellName); }\n has_cell(cellName: string): boolean { return this.hasCell(cellName); }\n\n deleteCell(cellName: string): void { this._cells.delete(cellName); }\n delete_cell(cellName: string): void { this.deleteCell(cellName); }\n\n getAllCells(): Map<string, Cell> { return new Map(this._cells); }\n get_all_cells(): Map<string, Cell> { return this.getAllCells(); }\n\n /** Track max data row (1-based). */\n get maxDataRow(): number {\n let max = 0;\n for (const ref of this._cells.keys()) {\n const [r] = Cells.coordinateFromString(ref);\n if (r > max) max = r;\n }\n return max;\n }\n get max_data_row(): number { return this.maxDataRow; }\n\n /** Track max data column (1-based). */\n get maxDataColumn(): number {\n let max = 0;\n for (const ref of this._cells.keys()) {\n const [, c] = Cells.coordinateFromString(ref);\n if (c > max) max = c;\n }\n return max;\n }\n get max_data_column(): number { return this.maxDataColumn; }\n\n // ── Iterator support ────────────────────────────────────────────────────\n\n [Symbol.iterator](): Iterator<[string, Cell]> {\n return this._cells.entries();\n }\n\n get length(): number { return this._cells.size; }\n}\n","/**\n * Data Validation Module\n *\n * Provides classes for Excel data validation according to ECMA-376 specification.\n * Data validation allows controlling what data can be entered into cells.\n *\n * References:\n * - ECMA-376 Part 4, Section 3.3.1.30 (dataValidation)\n */\n\n// ==================== Enums ====================\n\nexport enum DataValidationType {\n NONE = 0,\n WHOLE_NUMBER = 1,\n DECIMAL = 2,\n LIST = 3,\n DATE = 4,\n TIME = 5,\n TEXT_LENGTH = 6,\n CUSTOM = 7,\n}\n\nexport enum DataValidationOperator {\n BETWEEN = 0,\n NOT_BETWEEN = 1,\n EQUAL = 2,\n NOT_EQUAL = 3,\n GREATER_THAN = 4,\n LESS_THAN = 5,\n GREATER_THAN_OR_EQUAL = 6,\n LESS_THAN_OR_EQUAL = 7,\n}\n\nexport enum DataValidationAlertStyle {\n STOP = 0,\n WARNING = 1,\n INFORMATION = 2,\n}\n\nexport enum DataValidationImeMode {\n NO_CONTROL = 0,\n OFF = 1,\n ON = 2,\n DISABLED = 3,\n HIRAGANA = 4,\n FULL_KATAKANA = 5,\n HALF_KATAKANA = 6,\n FULL_ALPHA = 7,\n HALF_ALPHA = 8,\n FULL_HANGUL = 9,\n HALF_HANGUL = 10,\n}\n\n// ==================== DataValidation Class ====================\n\nexport class DataValidation {\n private _sqref: string | null;\n private _type: DataValidationType;\n private _operator: DataValidationOperator;\n private _formula1: string | null;\n private _formula2: string | null;\n private _alertStyle: DataValidationAlertStyle;\n private _showErrorMessage: boolean;\n private _errorTitle: string | null;\n private _errorMessage: string | null;\n private _showInputMessage: boolean;\n private _inputTitle: string | null;\n private _inputMessage: string | null;\n private _allowBlank: boolean;\n private _showDropdown: boolean;\n private _imeMode: DataValidationImeMode;\n\n constructor(sqref: string | null = null) {\n this._sqref = sqref;\n this._type = DataValidationType.NONE;\n this._operator = DataValidationOperator.BETWEEN;\n this._formula1 = null;\n this._formula2 = null;\n this._alertStyle = DataValidationAlertStyle.STOP;\n this._showErrorMessage = true;\n this._errorTitle = null;\n this._errorMessage = null;\n this._showInputMessage = false;\n this._inputTitle = null;\n this._inputMessage = null;\n this._allowBlank = true;\n this._showDropdown = true;\n this._imeMode = DataValidationImeMode.NO_CONTROL;\n }\n\n // ---- Cell Range ----\n\n get sqref(): string | null {\n return this._sqref;\n }\n set sqref(value: string | null) {\n this._sqref = value;\n }\n\n get ranges(): string[] {\n if (this._sqref) {\n return this._sqref.split(/\\s+/);\n }\n return [];\n }\n\n // ---- Validation Type and Operator ----\n\n get type(): DataValidationType {\n return this._type;\n }\n set type(value: DataValidationType) {\n this._type = value;\n }\n\n get operator(): DataValidationOperator {\n return this._operator;\n }\n set operator(value: DataValidationOperator) {\n this._operator = value;\n }\n\n // ---- Formulas ----\n\n get formula1(): string | null {\n return this._formula1;\n }\n set formula1(value: string | null) {\n this._formula1 = value;\n }\n\n get formula2(): string | null {\n return this._formula2;\n }\n set formula2(value: string | null) {\n this._formula2 = value;\n }\n\n // ---- Error Alert Settings ----\n\n get alertStyle(): DataValidationAlertStyle {\n return this._alertStyle;\n }\n set alertStyle(value: DataValidationAlertStyle) {\n this._alertStyle = value;\n }\n\n get showErrorMessage(): boolean {\n return this._showErrorMessage;\n }\n set showErrorMessage(value: boolean) {\n this._showErrorMessage = value;\n }\n\n /** Alias for showErrorMessage */\n get showError(): boolean {\n return this._showErrorMessage;\n }\n set showError(value: boolean) {\n this._showErrorMessage = value;\n }\n\n get errorTitle(): string | null {\n return this._errorTitle;\n }\n set errorTitle(value: string | null) {\n this._errorTitle = value;\n }\n\n get errorMessage(): string | null {\n return this._errorMessage;\n }\n set errorMessage(value: string | null) {\n this._errorMessage = value;\n }\n\n /** Alias for errorMessage */\n get error(): string | null {\n return this._errorMessage;\n }\n set error(value: string | null) {\n this._errorMessage = value;\n }\n\n // ---- Input Message Settings ----\n\n get showInputMessage(): boolean {\n return this._showInputMessage;\n }\n set showInputMessage(value: boolean) {\n this._showInputMessage = value;\n }\n\n /** Alias for showInputMessage */\n get showInput(): boolean {\n return this._showInputMessage;\n }\n set showInput(value: boolean) {\n this._showInputMessage = value;\n }\n\n get inputTitle(): string | null {\n return this._inputTitle;\n }\n set inputTitle(value: string | null) {\n this._inputTitle = value;\n }\n\n /** Alias for inputTitle */\n get promptTitle(): string | null {\n return this._inputTitle;\n }\n set promptTitle(value: string | null) {\n this._inputTitle = value;\n }\n\n get inputMessage(): string | null {\n return this._inputMessage;\n }\n set inputMessage(value: string | null) {\n this._inputMessage = value;\n }\n\n /** Alias for inputMessage */\n get prompt(): string | null {\n return this._inputMessage;\n }\n set prompt(value: string | null) {\n this._inputMessage = value;\n }\n\n // ---- Other Settings ----\n\n get allowBlank(): boolean {\n return this._allowBlank;\n }\n set allowBlank(value: boolean) {\n this._allowBlank = value;\n }\n\n /** Alias for allowBlank */\n get ignoreBlank(): boolean {\n return this._allowBlank;\n }\n set ignoreBlank(value: boolean) {\n this._allowBlank = value;\n }\n\n /**\n * Whether to show the in-cell dropdown for list validations.\n * Note: In ECMA-376, showDropDown=\"1\" means HIDE dropdown (counterintuitive).\n */\n get showDropdown(): boolean {\n return this._showDropdown;\n }\n set showDropdown(value: boolean) {\n this._showDropdown = value;\n }\n\n /** Alias for showDropdown */\n get inCellDropdown(): boolean {\n return this._showDropdown;\n }\n set inCellDropdown(value: boolean) {\n this._showDropdown = value;\n }\n\n get imeMode(): DataValidationImeMode {\n return this._imeMode;\n }\n set imeMode(value: DataValidationImeMode) {\n this._imeMode = value;\n }\n\n // ---- Methods ----\n\n add(\n validationType: DataValidationType,\n alertStyle?: DataValidationAlertStyle,\n operator?: DataValidationOperator,\n formula1?: string | null,\n formula2?: string | null,\n ): void {\n this._type = validationType;\n if (alertStyle !== undefined) this._alertStyle = alertStyle;\n if (operator !== undefined) this._operator = operator;\n if (formula1 !== undefined) this._formula1 = formula1;\n if (formula2 !== undefined) this._formula2 = formula2;\n }\n\n modify(options: {\n validationType?: DataValidationType;\n alertStyle?: DataValidationAlertStyle;\n operator?: DataValidationOperator;\n formula1?: string | null;\n formula2?: string | null;\n }): void {\n if (options.validationType !== undefined) this._type = options.validationType;\n if (options.alertStyle !== undefined) this._alertStyle = options.alertStyle;\n if (options.operator !== undefined) this._operator = options.operator;\n if (options.formula1 !== undefined) this._formula1 = options.formula1;\n if (options.formula2 !== undefined) this._formula2 = options.formula2;\n }\n\n delete(): void {\n this._type = DataValidationType.NONE;\n this._operator = DataValidationOperator.BETWEEN;\n this._formula1 = null;\n this._formula2 = null;\n this._alertStyle = DataValidationAlertStyle.STOP;\n this._showErrorMessage = true;\n this._errorTitle = null;\n this._errorMessage = null;\n this._showInputMessage = false;\n this._inputTitle = null;\n this._inputMessage = null;\n this._allowBlank = true;\n this._showDropdown = true;\n this._imeMode = DataValidationImeMode.NO_CONTROL;\n }\n\n copy(): DataValidation {\n const dv = new DataValidation(this._sqref);\n dv._type = this._type;\n dv._operator = this._operator;\n dv._formula1 = this._formula1;\n dv._formula2 = this._formula2;\n dv._alertStyle = this._alertStyle;\n dv._showErrorMessage = this._showErrorMessage;\n dv._errorTitle = this._errorTitle;\n dv._errorMessage = this._errorMessage;\n dv._showInputMessage = this._showInputMessage;\n dv._inputTitle = this._inputTitle;\n dv._inputMessage = this._inputMessage;\n dv._allowBlank = this._allowBlank;\n dv._showDropdown = this._showDropdown;\n dv._imeMode = this._imeMode;\n return dv;\n }\n}\n\n// ==================== DataValidationCollection ====================\n\nexport class DataValidationCollection {\n private _validations: DataValidation[] = [];\n private _disablePrompts = false;\n private _xWindow: number | null = null;\n private _yWindow: number | null = null;\n\n get count(): number {\n return this._validations.length;\n }\n\n get disablePrompts(): boolean {\n return this._disablePrompts;\n }\n set disablePrompts(value: boolean) {\n this._disablePrompts = value;\n }\n\n get xWindow(): number | null {\n return this._xWindow;\n }\n set xWindow(value: number | null) {\n this._xWindow = value;\n }\n\n get yWindow(): number | null {\n return this._yWindow;\n }\n set yWindow(value: number | null) {\n this._yWindow = value;\n }\n\n add(\n sqref: string,\n validationType?: DataValidationType,\n operator?: DataValidationOperator,\n formula1?: string | null,\n formula2?: string | null,\n ): DataValidation {\n const dv = new DataValidation(sqref);\n if (validationType !== undefined) dv.type = validationType;\n if (operator !== undefined) dv.operator = operator;\n if (formula1 !== undefined) dv.formula1 = formula1;\n if (formula2 !== undefined) dv.formula2 = formula2;\n this._validations.push(dv);\n return dv;\n }\n\n addValidation(validation: DataValidation): void {\n this._validations.push(validation);\n }\n\n remove(validation: DataValidation): boolean {\n const idx = this._validations.indexOf(validation);\n if (idx >= 0) {\n this._validations.splice(idx, 1);\n return true;\n }\n return false;\n }\n\n removeAt(index: number): void {\n if (index >= 0 && index < this._validations.length) {\n this._validations.splice(index, 1);\n }\n }\n\n removeByRange(sqref: string): void {\n this._validations = this._validations.filter((v) => v.sqref !== sqref);\n }\n\n clear(): void {\n this._validations = [];\n }\n\n getValidation(cellRef: string): DataValidation | null {\n for (const v of this._validations) {\n if (v.sqref && this._cellInRange(cellRef, v.sqref)) {\n return v;\n }\n }\n return null;\n }\n\n private _cellInRange(cellRef: string, sqref: string): boolean {\n const ranges = sqref.split(/\\s+/);\n for (const range of ranges) {\n if (range === cellRef) return true;\n const parts = range.split(':');\n if (parts.length === 2) {\n const [start, end] = parts;\n const cellCol = this._colFromRef(cellRef);\n const cellRow = this._rowFromRef(cellRef);\n const startCol = this._colFromRef(start);\n const startRow = this._rowFromRef(start);\n const endCol = this._colFromRef(end);\n const endRow = this._rowFromRef(end);\n if (\n cellCol >= startCol &&\n cellCol <= endCol &&\n cellRow >= startRow &&\n cellRow <= endRow\n ) {\n return true;\n }\n }\n }\n return false;\n }\n\n private _colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/);\n if (!match) return 0;\n let col = 0;\n for (const ch of match[1]) {\n col = col * 26 + (ch.charCodeAt(0) - 64);\n }\n return col;\n }\n\n private _rowFromRef(ref: string): number {\n const match = ref.match(/(\\d+)$/);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n get(index: number): DataValidation {\n if (index < 0 || index >= this._validations.length) {\n throw new Error(`Index ${index} out of range`);\n }\n return this._validations[index];\n }\n\n [Symbol.iterator](): Iterator<DataValidation> {\n let i = 0;\n const items = this._validations;\n return {\n next(): IteratorResult<DataValidation> {\n if (i < items.length) {\n return { value: items[i++], done: false };\n }\n return { value: undefined as any, done: true };\n },\n };\n }\n}\n","/**\n * Conditional Formatting Module\n *\n * Provides classes for Excel conditional formatting according to ECMA-376 specification.\n */\n\nimport { Font, Fill, Borders, Alignment } from '../styling/Style';\n\n// ==================== ConditionalFormat Class ====================\n\nexport class ConditionalFormat {\n // Type and identity\n private _type: string | null = null;\n private _range: string | null = null;\n private _stopIfTrue = false;\n private _priority = 0;\n\n // Cell value rule\n private _operator: string | null = null;\n private _formula1: string | null = null;\n private _formula2: string | null = null;\n\n // Text rule\n private _textOperator: string | null = null;\n private _textFormula: string | null = null;\n\n // Date rule\n private _dateOperator: string | null = null;\n private _dateFormula: string | null = null;\n\n // Duplicate/unique\n private _duplicate: boolean | null = null;\n\n // Top/Bottom\n private _top: boolean | null = null;\n private _percent = false;\n private _rank = 10;\n\n // Above/Below average\n private _above: boolean | null = null;\n private _stdDev = 0;\n\n // Color scale\n private _colorScaleType: string | null = null;\n private _minColor: string | null = null;\n private _midColor: string | null = null;\n private _maxColor: string | null = null;\n\n // Data bar\n private _barColor: string | null = null;\n private _negativeColor: string | null = null;\n private _showBorder = false;\n private _direction: string | null = null;\n private _barLength: [number, number] | null = null;\n\n // Icon set\n private _iconSetType: string | null = null;\n private _reverseIcons = false;\n private _showIconOnly = false;\n\n // Generic formula\n private _formula: string | null = null;\n\n // DXF styling\n private _font: Font | null = null;\n private _border: Borders | null = null;\n private _fill: Fill | null = null;\n private _alignment: Alignment | null = null;\n private _numberFormat: string | null = null;\n\n // Internal: dxfId for XML round-trip\n _dxfId: number | null = null;\n\n // ---- Type and identity ----\n\n get type(): string | null { return this._type; }\n set type(value: string | null) { this._type = value; }\n\n get range(): string | null { return this._range; }\n set range(value: string | null) { this._range = value; }\n\n get stopIfTrue(): boolean { return this._stopIfTrue; }\n set stopIfTrue(value: boolean) { this._stopIfTrue = value; }\n\n get priority(): number { return this._priority; }\n set priority(value: number) { this._priority = value; }\n\n // ---- Cell value rule ----\n\n get operator(): string | null { return this._operator; }\n set operator(value: string | null) { this._operator = value; }\n\n get formula1(): string | null { return this._formula1; }\n set formula1(value: string | null) { this._formula1 = value; }\n\n get formula2(): string | null { return this._formula2; }\n set formula2(value: string | null) { this._formula2 = value; }\n\n // ---- Text rule ----\n\n get textOperator(): string | null { return this._textOperator; }\n set textOperator(value: string | null) { this._textOperator = value; }\n\n get textFormula(): string | null { return this._textFormula; }\n set textFormula(value: string | null) { this._textFormula = value; }\n\n // ---- Date rule ----\n\n get dateOperator(): string | null { return this._dateOperator; }\n set dateOperator(value: string | null) { this._dateOperator = value; }\n\n get dateFormula(): string | null { return this._dateFormula; }\n set dateFormula(value: string | null) { this._dateFormula = value; }\n\n // ---- Duplicate/unique ----\n\n get duplicate(): boolean | null { return this._duplicate; }\n set duplicate(value: boolean | null) { this._duplicate = value; }\n\n // ---- Top/Bottom ----\n\n get top(): boolean | null { return this._top; }\n set top(value: boolean | null) { this._top = value; }\n\n get percent(): boolean { return this._percent; }\n set percent(value: boolean) { this._percent = value; }\n\n get rank(): number { return this._rank; }\n set rank(value: number) { this._rank = value; }\n\n // ---- Above/Below average ----\n\n get above(): boolean | null { return this._above; }\n set above(value: boolean | null) { this._above = value; }\n\n get stdDev(): number { return this._stdDev; }\n set stdDev(value: number) { this._stdDev = value; }\n\n // ---- Color scale ----\n\n get colorScaleType(): string | null { return this._colorScaleType; }\n set colorScaleType(value: string | null) { this._colorScaleType = value; }\n\n get minColor(): string | null { return this._minColor; }\n set minColor(value: string | null) { this._minColor = value; }\n\n get midColor(): string | null { return this._midColor; }\n set midColor(value: string | null) { this._midColor = value; }\n\n get maxColor(): string | null { return this._maxColor; }\n set maxColor(value: string | null) { this._maxColor = value; }\n\n // ---- Data bar ----\n\n get barColor(): string | null { return this._barColor; }\n set barColor(value: string | null) { this._barColor = value; }\n\n get negativeColor(): string | null { return this._negativeColor; }\n set negativeColor(value: string | null) { this._negativeColor = value; }\n\n get showBorder(): boolean { return this._showBorder; }\n set showBorder(value: boolean) { this._showBorder = value; }\n\n get direction(): string | null { return this._direction; }\n set direction(value: string | null) { this._direction = value; }\n\n get barLength(): [number, number] | null { return this._barLength; }\n set barLength(value: [number, number] | null) { this._barLength = value; }\n\n // ---- Icon set ----\n\n get iconSetType(): string | null { return this._iconSetType; }\n set iconSetType(value: string | null) { this._iconSetType = value; }\n\n get reverseIcons(): boolean { return this._reverseIcons; }\n set reverseIcons(value: boolean) { this._reverseIcons = value; }\n\n get showIconOnly(): boolean { return this._showIconOnly; }\n set showIconOnly(value: boolean) { this._showIconOnly = value; }\n\n // ---- Generic formula ----\n\n get formula(): string | null { return this._formula; }\n set formula(value: string | null) { this._formula = value; }\n\n // ---- DXF styling (lazily created) ----\n\n get font(): Font {\n if (!this._font) this._font = new Font();\n return this._font;\n }\n\n get border(): Borders {\n if (!this._border) this._border = new Borders();\n return this._border;\n }\n\n get fill(): Fill {\n if (!this._fill) this._fill = new Fill();\n return this._fill;\n }\n\n get alignment(): Alignment {\n if (!this._alignment) this._alignment = new Alignment();\n return this._alignment;\n }\n\n get numberFormat(): string | null { return this._numberFormat; }\n set numberFormat(value: string | null) { this._numberFormat = value; }\n\n hasFont(): boolean { return this._font !== null; }\n hasFill(): boolean { return this._fill !== null; }\n hasBorder(): boolean { return this._border !== null; }\n hasAlignment(): boolean { return this._alignment !== null; }\n}\n\n// ==================== ConditionalFormatCollection ====================\n\nexport class ConditionalFormatCollection {\n private _formats: ConditionalFormat[] = [];\n\n get count(): number {\n return this._formats.length;\n }\n\n add(): ConditionalFormat {\n const cf = new ConditionalFormat();\n cf.priority = this._formats.length + 1;\n this._formats.push(cf);\n return cf;\n }\n\n getByIndex(index: number): ConditionalFormat | null {\n if (index >= 0 && index < this._formats.length) {\n return this._formats[index];\n }\n return null;\n }\n\n getByRange(rangeStr: string): ConditionalFormat[] {\n return this._formats.filter((cf) => cf.range === rangeStr);\n }\n\n remove(cf: ConditionalFormat): boolean {\n const idx = this._formats.indexOf(cf);\n if (idx >= 0) {\n this._formats.splice(idx, 1);\n return true;\n }\n return false;\n }\n\n clear(): void {\n this._formats = [];\n }\n\n get(index: number): ConditionalFormat {\n if (index < 0 || index >= this._formats.length) {\n throw new Error(`Index ${index} out of range`);\n }\n return this._formats[index];\n }\n\n [Symbol.iterator](): Iterator<ConditionalFormat> {\n let i = 0;\n const items = this._formats;\n return {\n next(): IteratorResult<ConditionalFormat> {\n if (i < items.length) {\n return { value: items[i++], done: false };\n }\n return { value: undefined as any, done: true };\n },\n };\n }\n\n get length(): number {\n return this._formats.length;\n }\n}\n","/**\n * Hyperlink Module\n *\n * Provides classes for Excel hyperlinks according to ECMA-376 specification.\n */\n\nexport type HyperlinkType = 'external' | 'internal' | 'email' | 'unknown';\n\nexport class Hyperlink {\n private _range: string;\n private _address: string;\n private _subAddress: string;\n private _textToDisplay: string;\n private _screenTip: string;\n private _deleted = false;\n\n constructor(\n rangeAddress: string,\n address = '',\n subAddress = '',\n textToDisplay = '',\n screenTip = '',\n ) {\n this._range = rangeAddress;\n this._address = address;\n this._subAddress = subAddress;\n this._textToDisplay = textToDisplay;\n this._screenTip = screenTip;\n }\n\n get range(): string { return this._range; }\n set range(value: string) { this._range = value; }\n\n get address(): string { return this._address; }\n set address(value: string) { this._address = value; }\n\n get subAddress(): string { return this._subAddress; }\n set subAddress(value: string) { this._subAddress = value; }\n\n get textToDisplay(): string { return this._textToDisplay; }\n set textToDisplay(value: string) { this._textToDisplay = value; }\n\n get screenTip(): string { return this._screenTip; }\n set screenTip(value: string) { this._screenTip = value; }\n\n get type(): HyperlinkType {\n if (this._subAddress && !this._address) return 'internal';\n if (this._address) {\n if (this._address.startsWith('mailto:')) return 'email';\n return 'external';\n }\n return 'unknown';\n }\n\n delete(): void {\n this._deleted = true;\n }\n\n get isDeleted(): boolean {\n return this._deleted;\n }\n}\n\nexport class HyperlinkCollection {\n private _hyperlinks: Hyperlink[] = [];\n\n add(\n rangeAddress: string,\n address = '',\n subAddress = '',\n textToDisplay = '',\n screenTip = '',\n ): Hyperlink {\n // Validate range\n if (!rangeAddress || !rangeAddress.match(/^[A-Z]+\\d+(:[A-Z]+\\d+)?$/i)) {\n // Allow but don't strictly validate\n }\n\n const hl = new Hyperlink(rangeAddress, address, subAddress, textToDisplay, screenTip);\n this._hyperlinks.push(hl);\n return hl;\n }\n\n /** Add a pre-built hyperlink object */\n addHyperlink(hl: Hyperlink): void {\n this._hyperlinks.push(hl);\n }\n\n delete(indexOrHyperlink?: number | Hyperlink): void {\n if (typeof indexOrHyperlink === 'number') {\n if (indexOrHyperlink >= 0 && indexOrHyperlink < this._hyperlinks.length) {\n this._hyperlinks.splice(indexOrHyperlink, 1);\n }\n } else if (indexOrHyperlink instanceof Hyperlink) {\n const idx = this._hyperlinks.indexOf(indexOrHyperlink);\n if (idx >= 0) this._hyperlinks.splice(idx, 1);\n }\n }\n\n clear(): void {\n this._hyperlinks = [];\n }\n\n get count(): number {\n return this._hyperlinks.length;\n }\n\n get(index: number): Hyperlink {\n if (index < 0 || index >= this._hyperlinks.length) {\n throw new Error(`Index ${index} out of range`);\n }\n return this._hyperlinks[index];\n }\n\n [Symbol.iterator](): Iterator<Hyperlink> {\n let i = 0;\n const items = this._hyperlinks;\n return {\n next(): IteratorResult<Hyperlink> {\n if (i < items.length) {\n return { value: items[i++], done: false };\n }\n return { value: undefined as any, done: true };\n },\n };\n }\n}\n","/**\n * AutoFilter Module\n *\n * Provides classes for Excel auto-filter according to ECMA-376 specification.\n */\n\n// ==================== FilterColumn ====================\n\nexport interface CustomFilter {\n operator: string;\n value: string;\n}\n\nexport interface ColorFilter {\n color: string;\n cellColor: boolean;\n}\n\nexport interface DynamicFilter {\n type: string;\n value?: string;\n}\n\nexport interface Top10Filter {\n top: boolean;\n percent: boolean;\n val: number;\n}\n\nexport class FilterColumn {\n private _colId: number;\n private _filters: string[] = [];\n private _customFilters: CustomFilter[] = [];\n private _colorFilter: ColorFilter | null = null;\n private _dynamicFilter: DynamicFilter | null = null;\n private _top10Filter: Top10Filter | null = null;\n private _filterButton = true;\n\n constructor(colId: number) {\n this._colId = colId;\n }\n\n get colId(): number { return this._colId; }\n\n get filters(): string[] { return this._filters; }\n get customFilters(): CustomFilter[] { return this._customFilters; }\n\n get colorFilter(): ColorFilter | null { return this._colorFilter; }\n set colorFilter(value: ColorFilter | null) { this._colorFilter = value; }\n\n get dynamicFilter(): DynamicFilter | null { return this._dynamicFilter; }\n set dynamicFilter(value: DynamicFilter | null) { this._dynamicFilter = value; }\n\n get top10Filter(): Top10Filter | null { return this._top10Filter; }\n set top10Filter(value: Top10Filter | null) { this._top10Filter = value; }\n\n get filterButton(): boolean { return this._filterButton; }\n set filterButton(value: boolean) { this._filterButton = value; }\n\n addFilter(value: string): void {\n if (!this._filters.includes(value)) {\n this._filters.push(value);\n }\n }\n\n addCustomFilter(operator: string, value: string): void {\n this._customFilters.push({ operator, value });\n }\n\n clearFilters(): void {\n this._filters = [];\n this._customFilters = [];\n this._colorFilter = null;\n this._dynamicFilter = null;\n this._top10Filter = null;\n }\n}\n\n// ==================== SortState ====================\n\nexport interface SortState {\n ref: string;\n columnIndex: number;\n ascending: boolean;\n}\n\n// ==================== AutoFilter ====================\n\nexport class AutoFilter {\n private _range: string | null = null;\n private _filterColumns: Map<number, FilterColumn> = new Map();\n private _sortState: SortState | null = null;\n\n get range(): string | null { return this._range; }\n set range(value: string | null) { this._range = value; }\n\n get filterColumns(): Map<number, FilterColumn> { return this._filterColumns; }\n\n get sortState(): SortState | null { return this._sortState; }\n set sortState(value: SortState | null) { this._sortState = value; }\n\n setRange(startRow: number, startCol: number, endRow: number, endCol: number): void {\n const startColLetter = this._colToLetter(startCol);\n const endColLetter = this._colToLetter(endCol);\n this._range = `${startColLetter}${startRow + 1}:${endColLetter}${endRow + 1}`;\n }\n\n filter(colIndex: number, values: string[]): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.clearFilters();\n for (const v of values) {\n fc.addFilter(v);\n }\n return fc;\n }\n\n addFilter(colIndex: number, value: string): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.addFilter(value);\n return fc;\n }\n\n customFilter(colIndex: number, operator: string, value: string): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.addCustomFilter(operator, value);\n return fc;\n }\n\n filterByColor(colIndex: number, color: string, cellColor = true): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.colorFilter = { color, cellColor };\n return fc;\n }\n\n filterTop10(colIndex: number, top = true, percent = false, val = 10): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.top10Filter = { top, percent, val };\n return fc;\n }\n\n filterDynamic(colIndex: number, filterType: string, value?: string): FilterColumn {\n const fc = this._getOrCreateColumn(colIndex);\n fc.dynamicFilter = { type: filterType, value };\n return fc;\n }\n\n clearColumnFilter(colIndex: number): void {\n const fc = this._filterColumns.get(colIndex);\n if (fc) fc.clearFilters();\n }\n\n clearAllFilters(): void {\n for (const fc of this._filterColumns.values()) {\n fc.clearFilters();\n }\n }\n\n remove(): void {\n this._range = null;\n this._filterColumns.clear();\n this._sortState = null;\n }\n\n showFilterButton(colIndex: number, show = true): void {\n const fc = this._getOrCreateColumn(colIndex);\n fc.filterButton = show;\n }\n\n sort(colIndex: number, ascending = true): void {\n if (!this._range) return;\n this._sortState = {\n ref: this._range,\n columnIndex: colIndex,\n ascending,\n };\n }\n\n getFilterColumn(colIndex: number): FilterColumn | null {\n return this._filterColumns.get(colIndex) ?? null;\n }\n\n hasFilter(colIndex: number): boolean {\n const fc = this._filterColumns.get(colIndex);\n if (!fc) return false;\n return (\n fc.filters.length > 0 ||\n fc.customFilters.length > 0 ||\n fc.colorFilter !== null ||\n fc.dynamicFilter !== null ||\n fc.top10Filter !== null\n );\n }\n\n get hasAnyFilter(): boolean {\n return this._range !== null;\n }\n\n private _getOrCreateColumn(colIndex: number): FilterColumn {\n if (!this._filterColumns.has(colIndex)) {\n this._filterColumns.set(colIndex, new FilterColumn(colIndex));\n }\n return this._filterColumns.get(colIndex)!;\n }\n\n private _colToLetter(col: number): string {\n let result = '';\n let c = col;\n while (c >= 0) {\n result = String.fromCharCode(65 + (c % 26)) + result;\n c = Math.floor(c / 26) - 1;\n }\n return result;\n }\n}\n","/**\n * Aspose.Cells for Node.js - Page Break Module\n *\n * Manual page break collections aligned with Aspose.Cells/.NET API.\n * Ported from Python `page_break.py`.\n *\n * @module features/PageBreak\n */\n\nimport { Cells } from '../core/Cells';\n\n// ─── HorizontalPageBreakCollection ────────────────────────────────────────\n\n/**\n * Collection of manual horizontal page breaks (row breaks).\n */\nexport class HorizontalPageBreakCollection {\n /** @internal */\n _breaks: Set<number> = new Set();\n\n private _normalizeRow(rowOrCell: number | string): number {\n if (typeof rowOrCell === 'string') {\n const [row] = Cells.coordinateFromString(rowOrCell);\n return row - 1; // convert 1-based to 0-based\n }\n if (rowOrCell == null || rowOrCell < 0) {\n throw new Error('row must be >= 0');\n }\n return rowOrCell;\n }\n\n /**\n * Adds a manual horizontal page break.\n * @param rowOrCell 0-based row index or A1 cell reference.\n * @returns The 0-based row index.\n */\n add(rowOrCell: number | string): number {\n const row = this._normalizeRow(rowOrCell);\n this._breaks.add(row);\n return row;\n }\n\n /**\n * Removes the break at zero-based collection index.\n */\n removeAt(index: number): void {\n const list = this.toList();\n if (index < 0 || index >= list.length) {\n throw new RangeError(`Index ${index} out of range`);\n }\n this._breaks.delete(list[index]);\n }\n\n /**\n * Removes a manual horizontal page break by row/cell.\n */\n remove(rowOrCell: number | string): void {\n const row = this._normalizeRow(rowOrCell);\n this._breaks.delete(row);\n }\n\n /** Clears all manual horizontal page breaks. */\n clear(): void {\n this._breaks.clear();\n }\n\n get count(): number {\n return this._breaks.size;\n }\n\n /** Returns a sorted array of break rows. */\n toList(): number[] {\n return Array.from(this._breaks).sort((a, b) => a - b);\n }\n\n /** Alias */\n to_list(): number[] { return this.toList(); }\n\n get(index: number): number {\n return this.toList()[index];\n }\n\n [Symbol.iterator](): Iterator<number> {\n return this.toList()[Symbol.iterator]();\n }\n}\n\n// ─── VerticalPageBreakCollection ──────────────────────────────────────────\n\n/**\n * Collection of manual vertical page breaks (column breaks).\n */\nexport class VerticalPageBreakCollection {\n /** @internal */\n _breaks: Set<number> = new Set();\n\n private _normalizeColumn(columnOrCell: number | string): number {\n if (typeof columnOrCell === 'string') {\n // Check if it contains digits -> cell reference like \"B5\"\n if (/\\d/.test(columnOrCell)) {\n const [, col] = Cells.coordinateFromString(columnOrCell);\n return col - 1; // convert 1-based to 0-based\n }\n // Pure column letters like \"B\"\n return Cells.columnIndexFromString(columnOrCell) - 1;\n }\n if (columnOrCell == null || columnOrCell < 0) {\n throw new Error('column must be >= 0');\n }\n return columnOrCell;\n }\n\n /**\n * Adds a manual vertical page break.\n * @param columnOrCell 0-based column index, column letters, or A1 cell reference.\n * @returns The 0-based column index.\n */\n add(columnOrCell: number | string): number {\n const col = this._normalizeColumn(columnOrCell);\n this._breaks.add(col);\n return col;\n }\n\n /**\n * Removes a manual vertical page break by column/cell.\n */\n remove(columnOrCell: number | string): void {\n const col = this._normalizeColumn(columnOrCell);\n this._breaks.delete(col);\n }\n\n /**\n * Removes the break at zero-based collection index.\n */\n removeAt(index: number): void {\n const list = this.toList();\n if (index < 0 || index >= list.length) {\n throw new RangeError(`Index ${index} out of range`);\n }\n this._breaks.delete(list[index]);\n }\n\n /** Clears all manual vertical page breaks. */\n clear(): void {\n this._breaks.clear();\n }\n\n get count(): number {\n return this._breaks.size;\n }\n\n /** Returns a sorted array of break columns. */\n toList(): number[] {\n return Array.from(this._breaks).sort((a, b) => a - b);\n }\n\n /** Alias */\n to_list(): number[] { return this.toList(); }\n\n get(index: number): number {\n return this.toList()[index];\n }\n\n [Symbol.iterator](): Iterator<number> {\n return this.toList()[Symbol.iterator]();\n }\n}\n","/**\n * Cell Value Handler for XLSX serialisation.\n *\n * Provides type detection and value formatting for writing cell values\n * to OOXML worksheet XML, matching ECMA-376 §18.18.11 (ST_CellType).\n *\n * Cell types:\n * - 's' → shared string index\n * - 'str' → inline formula string result\n * - 'n' → number (including dates as serial numbers)\n * - 'b' → boolean (0 / 1)\n * - 'e' → error value\n */\n\nimport type { CellValue } from '../core/Cell';\n\n// ── Constants ───────────────────────────────────────────────────────────────\n\n/** Excel cell type constants matching ST_CellType */\nexport const CELL_TYPE_STRING = 's';\nexport const CELL_TYPE_INLINE_STRING = 'str';\nexport const CELL_TYPE_NUMBER = 'n';\nexport const CELL_TYPE_BOOLEAN = 'b';\nexport const CELL_TYPE_ERROR = 'e';\n\n/** Standard Excel error values */\nexport const ERROR_VALUES = new Set([\n '#NULL!',\n '#DIV/0!',\n '#VALUE!',\n '#REF!',\n '#NAME?',\n '#NUM!',\n '#N/A',\n '#GETTING_DATA',\n]);\n\n/**\n * Excel date epoch: 1899-12-30T00:00:00.000Z\n *\n * Excel uses a serial date system where day 1 = 1900-01-01.\n * Due to the intentional Lotus 1-2-3 leap year bug (1900 is treated as a\n * leap year), the epoch is effectively 1899-12-30.\n */\nconst EXCEL_EPOCH = new Date(Date.UTC(1899, 11, 30)); // 1899-12-30\nconst MS_PER_DAY = 86_400_000;\n\n// ── Public API ──────────────────────────────────────────────────────────────\n\nexport class CellValueHandler {\n /**\n * Determines the OOXML cell type for a JavaScript value.\n *\n * @param value - A cell value (string, number, boolean, Date, null, etc.)\n * @returns The OOXML cell type string, or `null` for empty cells.\n */\n static getCellType(value: CellValue): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return CELL_TYPE_BOOLEAN;\n }\n\n if (typeof value === 'number') {\n return CELL_TYPE_NUMBER;\n }\n\n if (value instanceof Date) {\n return CELL_TYPE_NUMBER; // Dates become serial numbers\n }\n\n if (typeof value === 'string') {\n if (value === '') return CELL_TYPE_STRING;\n if (ERROR_VALUES.has(value.toUpperCase())) return CELL_TYPE_ERROR;\n return CELL_TYPE_STRING;\n }\n\n // Fallback: convert to string\n return CELL_TYPE_STRING;\n }\n\n /**\n * Formats a cell value for writing into OOXML `<v>` element.\n *\n * @param value - The cell value.\n * @param cellType - Optional pre-determined cell type; auto-detected if omitted.\n * @returns A tuple of `[formattedString, cellType]`, or `[null, null]` for empty.\n */\n static formatValueForXml(\n value: CellValue,\n cellType?: string | null,\n ): [string | null, string | null] {\n if (value === null || value === undefined) {\n return [null, null];\n }\n\n const resolvedType = cellType ?? this.getCellType(value);\n if (resolvedType === null) {\n return [null, null];\n }\n\n switch (resolvedType) {\n case CELL_TYPE_BOOLEAN:\n return [value ? '1' : '0', CELL_TYPE_BOOLEAN];\n\n case CELL_TYPE_NUMBER: {\n if (value instanceof Date) {\n const serial = this.dateToExcelSerial(value);\n return [String(serial), CELL_TYPE_NUMBER];\n }\n if (typeof value === 'number') {\n if (!isFinite(value)) {\n return ['#NUM!', CELL_TYPE_ERROR];\n }\n // Use full precision; avoid scientific notation for moderate values\n return [numberToString(value), CELL_TYPE_NUMBER];\n }\n // Numeric string fallthrough\n return [String(value), CELL_TYPE_NUMBER];\n }\n\n case CELL_TYPE_ERROR:\n return [String(value).toUpperCase(), CELL_TYPE_ERROR];\n\n case CELL_TYPE_STRING:\n case CELL_TYPE_INLINE_STRING:\n default:\n return [String(value), CELL_TYPE_STRING];\n }\n }\n\n /**\n * Parses an OOXML cell value string back into a JavaScript value.\n *\n * @param valueStr - The raw string from the `<v>` element.\n * @param cellType - The cell type attribute ('s', 'n', 'b', 'e', 'str').\n * @param sharedStrings - Optional shared string table for type 's'.\n * @returns The parsed JavaScript value.\n */\n static parseValueFromXml(\n valueStr: string | null | undefined,\n cellType: string | null,\n sharedStrings?: string[],\n ): CellValue {\n if (valueStr === null || valueStr === undefined) {\n return null;\n }\n\n switch (cellType) {\n case CELL_TYPE_BOOLEAN:\n return valueStr === '1' || valueStr.toLowerCase() === 'true';\n\n case CELL_TYPE_STRING: {\n // Shared string index\n const idx = parseInt(valueStr, 10);\n if (sharedStrings && !isNaN(idx) && idx >= 0 && idx < sharedStrings.length) {\n return sharedStrings[idx];\n }\n return valueStr;\n }\n\n case CELL_TYPE_INLINE_STRING:\n return valueStr;\n\n case CELL_TYPE_ERROR:\n return valueStr;\n\n case CELL_TYPE_NUMBER: {\n const num = parseFloat(valueStr);\n if (isNaN(num)) return valueStr;\n return num;\n }\n\n default: {\n // No type specified – try number, then fall back to string\n const num = parseFloat(valueStr);\n if (!isNaN(num) && String(num) === valueStr.trim()) {\n return num;\n }\n return valueStr;\n }\n }\n }\n\n // ── Date Conversion ─────────────────────────────────────────────────────\n\n /**\n * Converts a JavaScript Date to an Excel serial date number.\n *\n * The serial number represents days since 1899-12-30 (Excel epoch).\n * Time-of-day is represented as the fractional part.\n *\n * @param dt - The Date to convert.\n * @returns The Excel serial date number.\n */\n static dateToExcelSerial(dt: Date): number {\n const utcMs =\n Date.UTC(\n dt.getFullYear(),\n dt.getMonth(),\n dt.getDate(),\n dt.getHours(),\n dt.getMinutes(),\n dt.getSeconds(),\n dt.getMilliseconds(),\n ) - EXCEL_EPOCH.getTime();\n\n let serial = utcMs / MS_PER_DAY;\n\n // Round to avoid floating-point noise (max 10 decimal digits)\n serial = Math.round(serial * 1e10) / 1e10;\n\n return serial;\n }\n\n /**\n * Converts an Excel serial date number to a JavaScript Date.\n *\n * @param serial - The Excel serial date number.\n * @returns A Date object.\n */\n static excelSerialToDate(serial: number): Date {\n const ms = serial * MS_PER_DAY + EXCEL_EPOCH.getTime();\n return new Date(ms);\n }\n\n // ── Error Detection ─────────────────────────────────────────────────────\n\n /**\n * Checks if a string value represents an Excel error.\n */\n static isErrorValue(value: string): boolean {\n return ERROR_VALUES.has(value.toUpperCase());\n }\n\n /**\n * Returns the normalized error string, or `null` if not an error.\n */\n static getErrorType(value: string): string | null {\n const upper = value.toUpperCase();\n if (ERROR_VALUES.has(upper)) return upper;\n return null;\n }\n}\n\n// ── Internal Helpers ────────────────────────────────────────────────────────\n\n/**\n * Converts a number to a string suitable for OOXML `<v>` elements.\n * Avoids unnecessary scientific notation for moderate values while\n * preserving full precision.\n */\nfunction numberToString(n: number): string {\n // toPrecision(15) matches Excel's 15-digit precision\n // but we prefer plain decimal notation\n const s = String(n);\n // JavaScript's String(n) already does a good job for most values\n return s;\n}\n","/**\n * Aspose.Cells for Node.js – Formula Evaluator Module\n *\n * Provides formula evaluation functionality for cells that have formulas.\n * Ported from Python `formula_evaluator.py` with significant enhancements.\n *\n * Supports:\n * - String, numeric, and boolean literals\n * - Cell references (A1 style, absolute $A$1, sheet-qualified Sheet1!A1)\n * - Range references (A1:B5)\n * - Arithmetic operators: + - * / ^\n * - Comparison operators: = <> < > <= >=\n * - String concatenation: &\n * - Built-in functions (SUM, IF, VLOOKUP, etc.)\n * - Defined names\n * - Nested formulas with recursive evaluation\n * - Error handling (#VALUE!, #REF!, #NAME?, #DIV/0!, #N/A)\n *\n * @module features/FormulaEvaluator\n */\n\nimport { Cells } from '../core/Cells';\nimport { CellValueHandler } from '../io/CellValueHandler';\n\n// Use interfaces to avoid circular imports\ninterface WorksheetLike {\n name: string;\n cells: CellsLike;\n}\n\ninterface CellLike {\n value: any;\n formula: string | null;\n hasFormula(): boolean;\n}\n\ninterface CellsLike {\n get(key: string): CellLike;\n _cells: Map<string, CellLike>;\n}\n\ninterface DefinedNameLike {\n name: string;\n refersTo: string;\n}\n\ninterface DefinedNameCollectionLike {\n toArray(): DefinedNameLike[];\n}\n\ninterface WorkbookPropertiesLike {\n definedNames: DefinedNameCollectionLike;\n}\n\ninterface WorkbookLike {\n worksheets: WorksheetLike[];\n properties: WorkbookPropertiesLike;\n}\n\n// ─── Token Types ──────────────────────────────────────────────────────────\n\nenum TokenType {\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n BOOLEAN = 'BOOLEAN',\n CELL_REF = 'CELL_REF',\n RANGE_REF = 'RANGE_REF',\n SHEET_REF = 'SHEET_REF',\n FUNCTION = 'FUNCTION',\n OPERATOR = 'OPERATOR',\n COMPARISON = 'COMPARISON',\n LPAREN = 'LPAREN',\n RPAREN = 'RPAREN',\n COMMA = 'COMMA',\n CONCAT = 'CONCAT',\n UNARY_MINUS = 'UNARY_MINUS',\n UNARY_PLUS = 'UNARY_PLUS',\n ERROR = 'ERROR',\n NAME = 'NAME',\n}\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\n// ─── Excel Errors ─────────────────────────────────────────────────────────\n\nconst ERRORS = {\n VALUE: '#VALUE!',\n REF: '#REF!',\n NAME: '#NAME?',\n DIV0: '#DIV/0!',\n NA: '#N/A',\n NUM: '#NUM!',\n NULL: '#NULL!',\n} as const;\n\nfunction isError(val: any): boolean {\n if (typeof val !== 'string') return false;\n return val === ERRORS.VALUE || val === ERRORS.REF || val === ERRORS.NAME ||\n val === ERRORS.DIV0 || val === ERRORS.NA || val === ERRORS.NUM || val === ERRORS.NULL;\n}\n\n// ─── Tokenizer ────────────────────────────────────────────────────────────\n\n/**\n * Tokenizes a formula string into an array of tokens.\n */\nfunction tokenize(formula: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n const len = formula.length;\n\n while (i < len) {\n const ch = formula[i];\n\n // Skip whitespace\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n i++;\n continue;\n }\n\n // String literal\n if (ch === '\"') {\n let str = '';\n i++; // skip opening quote\n while (i < len) {\n if (formula[i] === '\"') {\n if (i + 1 < len && formula[i + 1] === '\"') {\n // Escaped quote\n str += '\"';\n i += 2;\n } else {\n break;\n }\n } else {\n str += formula[i];\n i++;\n }\n }\n i++; // skip closing quote\n tokens.push({ type: TokenType.STRING, value: str });\n continue;\n }\n\n // Error values like #DIV/0!, #VALUE!, #REF!, #NAME?, #N/A, #NUM!, #NULL!\n if (ch === '#') {\n // Try to match known error patterns first\n const remaining = formula.substring(i);\n const errMatch = remaining.match(/^(#DIV\\/0!|#VALUE!|#REF!|#NAME\\?|#N\\/A|#NUM!|#NULL!)/i);\n if (errMatch) {\n tokens.push({ type: TokenType.ERROR, value: errMatch[1].toUpperCase() });\n i += errMatch[1].length;\n continue;\n }\n // Fallback: consume until delimiter\n let errStr = '#';\n i++;\n while (i < len && formula[i] !== ' ' && formula[i] !== ',' && formula[i] !== ')' && formula[i] !== '+' && formula[i] !== '-' && formula[i] !== '*' && formula[i] !== '&' && formula[i] !== '^' && formula[i] !== '=' && formula[i] !== '<' && formula[i] !== '>') {\n errStr += formula[i];\n i++;\n }\n tokens.push({ type: TokenType.ERROR, value: errStr });\n continue;\n }\n\n // Number\n if ((ch >= '0' && ch <= '9') || (ch === '.' && i + 1 < len && formula[i + 1] >= '0' && formula[i + 1] <= '9')) {\n let num = '';\n while (i < len && ((formula[i] >= '0' && formula[i] <= '9') || formula[i] === '.')) {\n num += formula[i];\n i++;\n }\n // Handle scientific notation\n if (i < len && (formula[i] === 'e' || formula[i] === 'E')) {\n num += formula[i];\n i++;\n if (i < len && (formula[i] === '+' || formula[i] === '-')) {\n num += formula[i];\n i++;\n }\n while (i < len && formula[i] >= '0' && formula[i] <= '9') {\n num += formula[i];\n i++;\n }\n }\n // Check for percent\n if (i < len && formula[i] === '%') {\n const val = parseFloat(num) / 100;\n tokens.push({ type: TokenType.NUMBER, value: String(val) });\n i++;\n } else {\n tokens.push({ type: TokenType.NUMBER, value: num });\n }\n continue;\n }\n\n // Operators and special chars\n if (ch === '(') {\n tokens.push({ type: TokenType.LPAREN, value: '(' });\n i++;\n continue;\n }\n if (ch === ')') {\n tokens.push({ type: TokenType.RPAREN, value: ')' });\n i++;\n continue;\n }\n if (ch === ',') {\n tokens.push({ type: TokenType.COMMA, value: ',' });\n i++;\n continue;\n }\n if (ch === '&') {\n tokens.push({ type: TokenType.CONCAT, value: '&' });\n i++;\n continue;\n }\n if (ch === '+') {\n // Check if unary\n if (tokens.length === 0 || tokens[tokens.length - 1].type === TokenType.LPAREN ||\n tokens[tokens.length - 1].type === TokenType.COMMA ||\n tokens[tokens.length - 1].type === TokenType.OPERATOR ||\n tokens[tokens.length - 1].type === TokenType.COMPARISON ||\n tokens[tokens.length - 1].type === TokenType.CONCAT) {\n tokens.push({ type: TokenType.UNARY_PLUS, value: '+' });\n } else {\n tokens.push({ type: TokenType.OPERATOR, value: '+' });\n }\n i++;\n continue;\n }\n if (ch === '-') {\n // Check if unary\n if (tokens.length === 0 || tokens[tokens.length - 1].type === TokenType.LPAREN ||\n tokens[tokens.length - 1].type === TokenType.COMMA ||\n tokens[tokens.length - 1].type === TokenType.OPERATOR ||\n tokens[tokens.length - 1].type === TokenType.COMPARISON ||\n tokens[tokens.length - 1].type === TokenType.CONCAT) {\n tokens.push({ type: TokenType.UNARY_MINUS, value: '-' });\n } else {\n tokens.push({ type: TokenType.OPERATOR, value: '-' });\n }\n i++;\n continue;\n }\n if (ch === '*' || ch === '/' || ch === '^') {\n tokens.push({ type: TokenType.OPERATOR, value: ch });\n i++;\n continue;\n }\n\n // Comparison operators\n if (ch === '<') {\n if (i + 1 < len && formula[i + 1] === '>') {\n tokens.push({ type: TokenType.COMPARISON, value: '<>' });\n i += 2;\n } else if (i + 1 < len && formula[i + 1] === '=') {\n tokens.push({ type: TokenType.COMPARISON, value: '<=' });\n i += 2;\n } else {\n tokens.push({ type: TokenType.COMPARISON, value: '<' });\n i++;\n }\n continue;\n }\n if (ch === '>') {\n if (i + 1 < len && formula[i + 1] === '=') {\n tokens.push({ type: TokenType.COMPARISON, value: '>=' });\n i += 2;\n } else {\n tokens.push({ type: TokenType.COMPARISON, value: '>' });\n i++;\n }\n continue;\n }\n if (ch === '=') {\n tokens.push({ type: TokenType.COMPARISON, value: '=' });\n i++;\n continue;\n }\n\n // Identifiers: cell refs, function names, booleans, named ranges\n if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch === '_' || ch === '$' || ch === '\\'') {\n // Handle quoted sheet names: 'Sheet Name'!A1\n if (ch === '\\'') {\n let sheetName = '';\n i++; // skip opening quote\n while (i < len && formula[i] !== '\\'') {\n sheetName += formula[i];\n i++;\n }\n i++; // skip closing quote\n if (i < len && formula[i] === '!') {\n i++; // skip !\n let cellPart = '';\n while (i < len && ((formula[i] >= 'A' && formula[i] <= 'Z') || (formula[i] >= 'a' && formula[i] <= 'z') || (formula[i] >= '0' && formula[i] <= '9') || formula[i] === '$' || formula[i] === ':')) {\n cellPart += formula[i];\n i++;\n }\n if (cellPart.includes(':')) {\n tokens.push({ type: TokenType.RANGE_REF, value: `'${sheetName}'!${cellPart}` });\n } else {\n tokens.push({ type: TokenType.SHEET_REF, value: `'${sheetName}'!${cellPart}` });\n }\n }\n continue;\n }\n\n let ident = '';\n while (i < len && ((formula[i] >= 'A' && formula[i] <= 'Z') || (formula[i] >= 'a' && formula[i] <= 'z') ||\n (formula[i] >= '0' && formula[i] <= '9') || formula[i] === '_' || formula[i] === '$' || formula[i] === '.')) {\n ident += formula[i];\n i++;\n }\n\n // Check for sheet reference: Sheet1!A1 or Sheet1!A1:B5\n if (i < len && formula[i] === '!') {\n const sheetName = ident;\n i++; // skip !\n let cellPart = '';\n while (i < len && ((formula[i] >= 'A' && formula[i] <= 'Z') || (formula[i] >= 'a' && formula[i] <= 'z') || (formula[i] >= '0' && formula[i] <= '9') || formula[i] === '$' || formula[i] === ':')) {\n cellPart += formula[i];\n i++;\n }\n if (cellPart.includes(':')) {\n tokens.push({ type: TokenType.RANGE_REF, value: `${sheetName}!${cellPart}` });\n } else {\n tokens.push({ type: TokenType.SHEET_REF, value: `${sheetName}!${cellPart}` });\n }\n continue;\n }\n\n // Check for range reference: A1:B5\n if (i < len && formula[i] === ':') {\n const startRef = ident;\n i++; // skip :\n let endRef = '';\n while (i < len && ((formula[i] >= 'A' && formula[i] <= 'Z') || (formula[i] >= 'a' && formula[i] <= 'z') || (formula[i] >= '0' && formula[i] <= '9') || formula[i] === '$')) {\n endRef += formula[i];\n i++;\n }\n tokens.push({ type: TokenType.RANGE_REF, value: `${startRef}:${endRef}` });\n continue;\n }\n\n // Check for function call (followed by parenthesis)\n if (i < len && formula[i] === '(') {\n tokens.push({ type: TokenType.FUNCTION, value: ident.toUpperCase() });\n continue;\n }\n\n // Check for boolean\n const upper = ident.toUpperCase();\n if (upper === 'TRUE' || upper === 'FALSE') {\n tokens.push({ type: TokenType.BOOLEAN, value: upper });\n continue;\n }\n\n // Check for cell reference pattern (letters followed by digits, possibly with $)\n const cleanIdent = ident.replace(/\\$/g, '');\n if (/^[A-Za-z]+[0-9]+$/.test(cleanIdent)) {\n tokens.push({ type: TokenType.CELL_REF, value: ident });\n continue;\n }\n\n // Must be a name (defined name or unknown identifier)\n tokens.push({ type: TokenType.NAME, value: ident });\n continue;\n }\n\n // Unknown character - skip\n i++;\n }\n\n return tokens;\n}\n\n// ─── Operator Precedence ──────────────────────────────────────────────────\n\nfunction precedence(op: string): number {\n switch (op) {\n case '^': return 5;\n case '*': case '/': return 4;\n case '+': case '-': return 3;\n case '&': return 2;\n case '=': case '<>': case '<': case '>': case '<=': case '>=': return 1;\n default: return 0;\n }\n}\n\nfunction isLeftAssociative(op: string): boolean {\n return op !== '^'; // ^ is right-associative\n}\n\n// ─── FormulaEvaluator ─────────────────────────────────────────────────────\n\n/**\n * Evaluates Excel formulas within a workbook context.\n *\n * Supports arithmetic, comparisons, string concatenation, cell references,\n * range references, defined names, and a comprehensive set of built-in functions.\n *\n * @example\n * ```ts\n * const evaluator = new FormulaEvaluator(workbook);\n * const result = evaluator.evaluate('=SUM(A1:A5)', worksheet);\n * ```\n */\nexport class FormulaEvaluator {\n private _workbook: WorkbookLike;\n private _definedNamesCache: Map<string, string> | null = null;\n private _evaluatingCells: Set<string> = new Set();\n private _maxDepth = 100;\n\n constructor(workbook: WorkbookLike) {\n this._workbook = workbook;\n }\n\n // ── Main API ────────────────────────────────────────────────────────────\n\n /**\n * Evaluate a formula and return the result.\n *\n * @param formula - The formula string (with or without leading '=').\n * @param worksheet - The worksheet context for cell references.\n * @returns The evaluated value, or an error string on failure.\n */\n evaluate(formula: string, worksheet?: WorksheetLike | null): any {\n if (formula == null) return null;\n\n // Remove leading '='\n let expr = formula;\n if (expr.startsWith('=')) {\n expr = expr.substring(1);\n }\n\n try {\n this._evaluatingCells.clear();\n const tokens = tokenize(expr);\n const result = this._evaluateTokens(tokens, worksheet ?? null);\n return result;\n } catch (e: any) {\n if (isError(e?.message)) return e.message;\n return ERRORS.VALUE;\n }\n }\n\n /**\n * Evaluate all formulas in all worksheets of the workbook.\n * Sets each cell's value to the evaluated result.\n */\n evaluateAll(singleSheet?: WorksheetLike): void {\n const sheets = singleSheet ? [singleSheet] : this._workbook.worksheets;\n for (const ws of sheets) {\n for (const [ref, cell] of ws.cells._cells.entries()) {\n if (cell.formula) {\n const result = this.evaluate(cell.formula, ws);\n if (result !== null && result !== undefined) {\n cell.value = result;\n }\n }\n }\n }\n }\n\n /** snake_case alias */\n evaluate_all(singleSheet?: WorksheetLike): void { this.evaluateAll(singleSheet); }\n\n // ── Token evaluation (recursive descent parser) ─────────────────────────\n\n private _evaluateTokens(tokens: Token[], worksheet: WorksheetLike | null): any {\n if (tokens.length === 0) return null;\n\n const { result } = this._parseExpression(tokens, 0, worksheet, 0);\n return result;\n }\n\n /**\n * Parse an expression with operator precedence (Pratt parser style).\n * Returns { result, pos } where pos is the next token index.\n */\n private _parseExpression(\n tokens: Token[],\n pos: number,\n worksheet: WorksheetLike | null,\n minPrec: number,\n ): { result: any; pos: number } {\n let { result: left, pos: nextPos } = this._parseAtom(tokens, pos, worksheet);\n\n while (nextPos < tokens.length) {\n const tok = tokens[nextPos];\n\n if (tok.type === TokenType.OPERATOR) {\n const prec = precedence(tok.value);\n if (prec < minPrec) break;\n const nextMinPrec = isLeftAssociative(tok.value) ? prec + 1 : prec;\n nextPos++;\n const { result: right, pos: rPos } = this._parseExpression(tokens, nextPos, worksheet, nextMinPrec);\n nextPos = rPos;\n left = this._applyArithmetic(tok.value, left, right);\n continue;\n }\n\n if (tok.type === TokenType.COMPARISON) {\n const prec = precedence(tok.value);\n if (prec < minPrec) break;\n nextPos++;\n const { result: right, pos: rPos } = this._parseExpression(tokens, nextPos, worksheet, prec + 1);\n nextPos = rPos;\n left = this._applyComparison(tok.value, left, right);\n continue;\n }\n\n if (tok.type === TokenType.CONCAT) {\n const prec = precedence('&');\n if (prec < minPrec) break;\n nextPos++;\n const { result: right, pos: rPos } = this._parseExpression(tokens, nextPos, worksheet, prec + 1);\n nextPos = rPos;\n left = String(left ?? '') + String(right ?? '');\n continue;\n }\n\n break;\n }\n\n return { result: left, pos: nextPos };\n }\n\n /**\n * Parse an atomic value (number, string, cell ref, function call, parenthesised expression, etc.)\n */\n private _parseAtom(\n tokens: Token[],\n pos: number,\n worksheet: WorksheetLike | null,\n ): { result: any; pos: number } {\n if (pos >= tokens.length) return { result: null, pos };\n\n const tok = tokens[pos];\n\n switch (tok.type) {\n case TokenType.NUMBER:\n return { result: parseFloat(tok.value), pos: pos + 1 };\n\n case TokenType.STRING:\n return { result: tok.value, pos: pos + 1 };\n\n case TokenType.BOOLEAN:\n return { result: tok.value === 'TRUE', pos: pos + 1 };\n\n case TokenType.ERROR:\n return { result: tok.value, pos: pos + 1 };\n\n case TokenType.UNARY_MINUS: {\n const { result, pos: nPos } = this._parseAtom(tokens, pos + 1, worksheet);\n const num = this._toNumber(result);\n if (isError(num)) return { result: num, pos: nPos };\n return { result: -(num as number), pos: nPos };\n }\n\n case TokenType.UNARY_PLUS: {\n const { result, pos: nPos } = this._parseAtom(tokens, pos + 1, worksheet);\n const num = this._toNumber(result);\n if (isError(num)) return { result: num, pos: nPos };\n return { result: +(num as number), pos: nPos };\n }\n\n case TokenType.LPAREN: {\n const { result, pos: nPos } = this._parseExpression(tokens, pos + 1, worksheet, 0);\n // Consume RPAREN\n const rPos = nPos < tokens.length && tokens[nPos].type === TokenType.RPAREN ? nPos + 1 : nPos;\n return { result, pos: rPos };\n }\n\n case TokenType.CELL_REF: {\n const val = this._resolveCellRef(tok.value, worksheet);\n return { result: val, pos: pos + 1 };\n }\n\n case TokenType.SHEET_REF: {\n const val = this._resolveSheetRef(tok.value, worksheet);\n return { result: val, pos: pos + 1 };\n }\n\n case TokenType.RANGE_REF: {\n // Range refs are typically only useful as function arguments\n // When used alone, return the array of values\n const vals = this._resolveRange(tok.value, worksheet);\n if (Array.isArray(vals) && vals.length === 1) return { result: vals[0], pos: pos + 1 };\n return { result: vals, pos: pos + 1 };\n }\n\n case TokenType.FUNCTION: {\n // Parse function arguments\n const funcName = tok.value;\n pos++; // skip function name\n // Consume LPAREN\n if (pos < tokens.length && tokens[pos].type === TokenType.LPAREN) {\n pos++;\n }\n\n const args: any[] = [];\n const argTokenGroups: Token[][] = [];\n let currentArgTokens: Token[] = [];\n let parenDepth = 0;\n\n // Collect raw tokens for each argument\n while (pos < tokens.length) {\n const t = tokens[pos];\n if (t.type === TokenType.RPAREN && parenDepth === 0) {\n if (currentArgTokens.length > 0) {\n argTokenGroups.push(currentArgTokens);\n }\n pos++;\n break;\n }\n if (t.type === TokenType.LPAREN) parenDepth++;\n if (t.type === TokenType.RPAREN) parenDepth--;\n if (t.type === TokenType.COMMA && parenDepth === 0) {\n argTokenGroups.push(currentArgTokens);\n currentArgTokens = [];\n pos++;\n continue;\n }\n currentArgTokens.push(t);\n pos++;\n }\n\n // Handle no-argument functions\n if (argTokenGroups.length === 0 && currentArgTokens.length === 0) {\n return { result: this._callFunction(funcName, [], worksheet), pos };\n }\n\n const result = this._callFunctionWithTokens(funcName, argTokenGroups, worksheet);\n return { result, pos };\n }\n\n case TokenType.NAME: {\n // Try to resolve as a defined name\n const names = this._getDefinedNames();\n const upperName = tok.value.toUpperCase();\n for (const [name, refersTo] of names.entries()) {\n if (name.toUpperCase() === upperName) {\n const resolved = this._resolveDefinedName(refersTo, worksheet);\n return { result: resolved, pos: pos + 1 };\n }\n }\n // Unknown name\n return { result: ERRORS.NAME, pos: pos + 1 };\n }\n\n default:\n return { result: null, pos: pos + 1 };\n }\n }\n\n // ── Defined Names ───────────────────────────────────────────────────────\n\n private _getDefinedNames(): Map<string, string> {\n if (this._definedNamesCache === null) {\n this._definedNamesCache = new Map();\n try {\n const names = this._workbook.properties.definedNames.toArray();\n for (const dn of names) {\n this._definedNamesCache.set(dn.name, dn.refersTo);\n }\n } catch {\n // No defined names available\n }\n }\n return this._definedNamesCache;\n }\n\n private _resolveDefinedName(refersTo: string, worksheet: WorksheetLike | null): any {\n // refersTo could be like \"Sheet1!$A$1:$B$5\" or \"Sheet1!$A$1\"\n const cleaned = refersTo.replace(/\\$/g, '');\n\n if (cleaned.includes(':')) {\n // It's a range\n return this._resolveRange(cleaned, worksheet);\n }\n\n if (cleaned.includes('!')) {\n return this._resolveSheetRef(cleaned, worksheet);\n }\n\n return this._resolveCellRef(cleaned, worksheet);\n }\n\n // ── Cell Reference Resolution ───────────────────────────────────────────\n\n private _resolveCellRef(ref: string, worksheet: WorksheetLike | null): any {\n if (!worksheet) return ERRORS.REF;\n const cleanRef = ref.replace(/\\$/g, '').toUpperCase();\n\n // Check for circular reference\n const cellKey = `${worksheet.name}!${cleanRef}`;\n if (this._evaluatingCells.has(cellKey)) {\n return 0; // Break circular ref\n }\n\n const cell = worksheet.cells._cells.get(cleanRef);\n if (!cell) return 0; // Empty cell returns 0 for numeric context, but we return 0\n\n if (cell.value !== null && cell.value !== undefined) {\n return cell.value;\n }\n\n // If cell has formula but no value, evaluate recursively\n if (cell.formula) {\n this._evaluatingCells.add(cellKey);\n try {\n const result = this.evaluate(cell.formula, worksheet);\n return result;\n } finally {\n this._evaluatingCells.delete(cellKey);\n }\n }\n\n return null;\n }\n\n private _resolveSheetRef(ref: string, _worksheet: WorksheetLike | null): any {\n let sheetPart: string;\n let cellPart: string;\n\n if (ref.includes('!')) {\n [sheetPart, cellPart] = ref.split('!', 2);\n } else {\n return ERRORS.REF;\n }\n\n // Remove quotes from sheet name\n sheetPart = sheetPart.replace(/^'|'$/g, '');\n\n const targetSheet = this._workbook.worksheets.find(ws => ws.name === sheetPart);\n if (!targetSheet) return ERRORS.REF;\n\n const cleanCell = cellPart.replace(/\\$/g, '');\n\n if (cleanCell.includes(':')) {\n return this._resolveRange(`${sheetPart}!${cleanCell}`, _worksheet);\n }\n\n return this._resolveCellRef(cleanCell, targetSheet);\n }\n\n /**\n * Resolves a range reference into an array of cell values.\n */\n private _resolveRange(rangeRef: string, worksheet: WorksheetLike | null): any[] {\n let sheetName: string | null = null;\n let rangePart: string;\n\n if (rangeRef.includes('!')) {\n const parts = rangeRef.split('!', 2);\n sheetName = parts[0].replace(/^'|'$/g, '');\n rangePart = parts[1];\n } else {\n rangePart = rangeRef;\n }\n\n const targetSheet = sheetName\n ? this._workbook.worksheets.find(ws => ws.name === sheetName)\n : worksheet;\n\n if (!targetSheet) return [];\n\n // Clean and parse range\n const cleanRange = rangePart.replace(/\\$/g, '');\n const [startRef, endRef] = cleanRange.split(':');\n\n try {\n const [startRow, startCol] = Cells.coordinateFromString(startRef.toUpperCase());\n const [endRow, endCol] = Cells.coordinateFromString(endRef.toUpperCase());\n\n const values: any[] = [];\n const minRow = Math.min(startRow, endRow);\n const maxRow = Math.max(startRow, endRow);\n const minCol = Math.min(startCol, endCol);\n const maxCol = Math.max(startCol, endCol);\n\n for (let r = minRow; r <= maxRow; r++) {\n for (let c = minCol; c <= maxCol; c++) {\n const cellRef = Cells.coordinateToString(r, c);\n const val = this._resolveCellRef(cellRef, targetSheet);\n values.push(val);\n }\n }\n\n return values;\n } catch {\n return [];\n }\n }\n\n /**\n * Resolves a range reference returning an array of arrays (rows x cols) for lookup functions.\n */\n private _resolveRange2D(rangeRef: string, worksheet: WorksheetLike | null): any[][] {\n let sheetName: string | null = null;\n let rangePart: string;\n\n if (rangeRef.includes('!')) {\n const parts = rangeRef.split('!', 2);\n sheetName = parts[0].replace(/^'|'$/g, '');\n rangePart = parts[1];\n } else {\n rangePart = rangeRef;\n }\n\n const targetSheet = sheetName\n ? this._workbook.worksheets.find(ws => ws.name === sheetName)\n : worksheet;\n\n if (!targetSheet) return [];\n\n const cleanRange = rangePart.replace(/\\$/g, '');\n const [startRef, endRef] = cleanRange.split(':');\n\n try {\n const [startRow, startCol] = Cells.coordinateFromString(startRef.toUpperCase());\n const [endRow, endCol] = Cells.coordinateFromString(endRef.toUpperCase());\n\n const rows: any[][] = [];\n const minRow = Math.min(startRow, endRow);\n const maxRow = Math.max(startRow, endRow);\n const minCol = Math.min(startCol, endCol);\n const maxCol = Math.max(startCol, endCol);\n\n for (let r = minRow; r <= maxRow; r++) {\n const row: any[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const cellRef = Cells.coordinateToString(r, c);\n const val = this._resolveCellRef(cellRef, targetSheet);\n row.push(val);\n }\n rows.push(row);\n }\n\n return rows;\n } catch {\n return [];\n }\n }\n\n // ── Arithmetic ──────────────────────────────────────────────────────────\n\n private _applyArithmetic(op: string, left: any, right: any): any {\n if (isError(left)) return left;\n if (isError(right)) return right;\n\n const l = this._toNumber(left);\n const r = this._toNumber(right);\n if (isError(l)) return l;\n if (isError(r)) return r;\n\n switch (op) {\n case '+': return (l as number) + (r as number);\n case '-': return (l as number) - (r as number);\n case '*': return (l as number) * (r as number);\n case '/':\n if ((r as number) === 0) return ERRORS.DIV0;\n return (l as number) / (r as number);\n case '^': return Math.pow(l as number, r as number);\n default: return ERRORS.VALUE;\n }\n }\n\n // ── Comparison ──────────────────────────────────────────────────────────\n\n private _applyComparison(op: string, left: any, right: any): any {\n if (isError(left)) return left;\n if (isError(right)) return right;\n\n // Try numeric comparison first\n const lNum = typeof left === 'number' ? left : (typeof left === 'boolean' ? (left ? 1 : 0) : NaN);\n const rNum = typeof right === 'number' ? right : (typeof right === 'boolean' ? (right ? 1 : 0) : NaN);\n\n if (!isNaN(lNum) && !isNaN(rNum)) {\n switch (op) {\n case '=': return lNum === rNum;\n case '<>': return lNum !== rNum;\n case '<': return lNum < rNum;\n case '>': return lNum > rNum;\n case '<=': return lNum <= rNum;\n case '>=': return lNum >= rNum;\n }\n }\n\n // String comparison\n const lStr = String(left ?? '').toLowerCase();\n const rStr = String(right ?? '').toLowerCase();\n\n switch (op) {\n case '=': return lStr === rStr;\n case '<>': return lStr !== rStr;\n case '<': return lStr < rStr;\n case '>': return lStr > rStr;\n case '<=': return lStr <= rStr;\n case '>=': return lStr >= rStr;\n }\n\n return false;\n }\n\n // ── Type Conversion ─────────────────────────────────────────────────────\n\n private _toNumber(val: any): number | string {\n if (val === null || val === undefined) return 0;\n if (typeof val === 'number') return val;\n if (typeof val === 'boolean') return val ? 1 : 0;\n if (typeof val === 'string') {\n if (isError(val)) return val;\n if (val === '') return 0;\n const num = Number(val);\n if (!isNaN(num)) return num;\n return ERRORS.VALUE;\n }\n return ERRORS.VALUE;\n }\n\n private _toBool(val: any): boolean {\n if (typeof val === 'boolean') return val;\n if (typeof val === 'number') return val !== 0;\n if (typeof val === 'string') {\n if (val.toUpperCase() === 'TRUE') return true;\n if (val.toUpperCase() === 'FALSE') return false;\n return val !== '';\n }\n return val != null;\n }\n\n // ── Flatten helper (for range arguments) ────────────────────────────────\n\n private _flattenArgs(args: any[]): any[] {\n const result: any[] = [];\n for (const arg of args) {\n if (Array.isArray(arg)) {\n result.push(...this._flattenArgs(arg));\n } else {\n result.push(arg);\n }\n }\n return result;\n }\n\n private _flattenNumeric(args: any[]): number[] {\n const flat = this._flattenArgs(args);\n const nums: number[] = [];\n for (const v of flat) {\n if (typeof v === 'number') nums.push(v);\n else if (typeof v === 'boolean') nums.push(v ? 1 : 0);\n else if (typeof v === 'string' && v !== '' && !isError(v)) {\n const n = Number(v);\n if (!isNaN(n)) nums.push(n);\n }\n }\n return nums;\n }\n\n // ── Function Dispatch ───────────────────────────────────────────────────\n\n /** Functions that need 2D arrays for their table/range argument */\n private static readonly _2D_FUNCS = new Set(['VLOOKUP', 'HLOOKUP', 'INDEX']);\n\n private _callFunctionWithTokens(\n funcName: string,\n argTokenGroups: Token[][],\n worksheet: WorksheetLike | null,\n ): any {\n // For functions that need raw range tokens (SUM, AVERAGE, etc.)\n // evaluate each argument group, keeping ranges as arrays\n const needs2D = FormulaEvaluator._2D_FUNCS.has(funcName);\n const evaluatedArgs: any[] = [];\n for (let i = 0; i < argTokenGroups.length; i++) {\n const argTokens = argTokenGroups[i];\n if (argTokens.length === 1 && argTokens[0].type === TokenType.RANGE_REF) {\n // For VLOOKUP/HLOOKUP/INDEX, the table array arg (index 1 for VLOOKUP/HLOOKUP, index 0 for INDEX) needs 2D\n const isTableArg =\n (needs2D && funcName !== 'INDEX' && i === 1) ||\n (funcName === 'INDEX' && i === 0);\n if (isTableArg) {\n evaluatedArgs.push(this._resolveRange2D(argTokens[0].value, worksheet));\n } else {\n evaluatedArgs.push(this._resolveRange(argTokens[0].value, worksheet));\n }\n } else {\n // Evaluate as expression\n const { result } = this._parseExpression(argTokens, 0, worksheet, 0);\n evaluatedArgs.push(result);\n }\n }\n\n return this._callFunction(funcName, evaluatedArgs, worksheet);\n }\n\n private _callFunction(funcName: string, args: any[], worksheet: WorksheetLike | null): any {\n switch (funcName) {\n // ── String Functions ──────────────────────────────────────────────\n case 'CONCATENATE':\n case 'CONCAT':\n return this._funcConcatenate(args);\n case 'TEXT':\n return this._funcText(args);\n case 'LEN':\n return this._funcLen(args);\n case 'TRIM':\n return this._funcTrim(args);\n case 'UPPER':\n return this._funcUpper(args);\n case 'LOWER':\n return this._funcLower(args);\n case 'LEFT':\n return this._funcLeft(args);\n case 'RIGHT':\n return this._funcRight(args);\n case 'MID':\n return this._funcMid(args);\n case 'SUBSTITUTE':\n return this._funcSubstitute(args);\n case 'REPT':\n return this._funcRept(args);\n\n // ── Logic Functions ───────────────────────────────────────────────\n case 'IF':\n return this._funcIf(args);\n case 'AND':\n return this._funcAnd(args);\n case 'OR':\n return this._funcOr(args);\n case 'NOT':\n return this._funcNot(args);\n\n // ── Math Functions ────────────────────────────────────────────────\n case 'SUM':\n return this._funcSum(args);\n case 'AVERAGE':\n return this._funcAverage(args);\n case 'MIN':\n return this._funcMin(args);\n case 'MAX':\n return this._funcMax(args);\n case 'COUNT':\n return this._funcCount(args);\n case 'COUNTA':\n return this._funcCountA(args);\n case 'ABS':\n return this._funcAbs(args);\n case 'ROUND':\n return this._funcRound(args);\n case 'ROUNDUP':\n return this._funcRoundUp(args);\n case 'ROUNDDOWN':\n return this._funcRoundDown(args);\n case 'INT':\n return this._funcInt(args);\n case 'MOD':\n return this._funcMod(args);\n case 'POWER':\n return this._funcPower(args);\n case 'SQRT':\n return this._funcSqrt(args);\n case 'CEILING':\n return this._funcCeiling(args);\n case 'FLOOR':\n return this._funcFloor(args);\n\n // ── Lookup Functions ──────────────────────────────────────────────\n case 'VLOOKUP':\n return this._funcVlookup(args, worksheet);\n case 'HLOOKUP':\n return this._funcHlookup(args, worksheet);\n case 'INDEX':\n return this._funcIndex(args);\n case 'MATCH':\n return this._funcMatch(args);\n\n // ── Date Functions ────────────────────────────────────────────────\n case 'TODAY':\n return this._funcToday();\n case 'NOW':\n return this._funcNow();\n case 'DATE':\n return this._funcDate(args);\n case 'YEAR':\n return this._funcYear(args);\n case 'MONTH':\n return this._funcMonth(args);\n case 'DAY':\n return this._funcDay(args);\n\n // ── Info Functions ────────────────────────────────────────────────\n case 'ISNUMBER':\n return this._funcIsNumber(args);\n case 'ISTEXT':\n return this._funcIsText(args);\n case 'ISBLANK':\n return this._funcIsBlank(args);\n case 'ISERROR':\n return this._funcIsError(args);\n case 'ISNA':\n return this._funcIsNa(args);\n\n // ── Other Functions ───────────────────────────────────────────────\n case 'VALUE':\n return this._funcValue(args);\n case 'CHOOSE':\n return this._funcChoose(args);\n\n default:\n return ERRORS.NAME;\n }\n }\n\n // ── String Function Implementations ─────────────────────────────────────\n\n private _funcConcatenate(args: any[]): string {\n const flat = this._flattenArgs(args);\n return flat.map(v => v == null ? '' : String(v)).join('');\n }\n\n private _funcText(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const value = args[0];\n const format = String(args[1] ?? '');\n if (value == null) return '';\n // Basic TEXT format support\n if (typeof value === 'number') {\n if (format === '0') return Math.round(value).toString();\n if (format === '0.00') return value.toFixed(2);\n if (/^0\\.0+$/.test(format)) {\n const decimals = format.length - 2;\n return value.toFixed(decimals);\n }\n }\n return String(value);\n }\n\n private _funcLen(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const val = args[0];\n if (val == null) return 0;\n return String(val).length;\n }\n\n private _funcTrim(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const val = args[0];\n if (val == null) return '';\n return String(val).split(/\\s+/).filter(s => s).join(' ');\n }\n\n private _funcUpper(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const val = args[0];\n if (val == null) return '';\n return String(val).toUpperCase();\n }\n\n private _funcLower(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const val = args[0];\n if (val == null) return '';\n return String(val).toLowerCase();\n }\n\n private _funcLeft(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const text = String(args[0] ?? '');\n const numChars = args.length >= 2 ? this._toNumber(args[1]) : 1;\n if (isError(numChars)) return numChars;\n return text.substring(0, numChars as number);\n }\n\n private _funcRight(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const text = String(args[0] ?? '');\n const numChars = args.length >= 2 ? this._toNumber(args[1]) : 1;\n if (isError(numChars)) return numChars;\n return text.substring(text.length - (numChars as number));\n }\n\n private _funcMid(args: any[]): any {\n if (args.length < 3) return ERRORS.VALUE;\n const text = String(args[0] ?? '');\n const startNum = this._toNumber(args[1]);\n const numChars = this._toNumber(args[2]);\n if (isError(startNum)) return startNum;\n if (isError(numChars)) return numChars;\n // Excel MID is 1-based\n return text.substring((startNum as number) - 1, (startNum as number) - 1 + (numChars as number));\n }\n\n private _funcSubstitute(args: any[]): any {\n if (args.length < 3) return ERRORS.VALUE;\n const text = String(args[0] ?? '');\n const oldText = String(args[1] ?? '');\n const newText = String(args[2] ?? '');\n if (args.length >= 4) {\n const instanceNum = this._toNumber(args[3]);\n if (isError(instanceNum)) return instanceNum;\n let count = 0;\n let result = '';\n let searchFrom = 0;\n while (true) {\n const idx = text.indexOf(oldText, searchFrom);\n if (idx === -1) {\n result += text.substring(searchFrom);\n break;\n }\n count++;\n if (count === instanceNum) {\n result += text.substring(searchFrom, idx) + newText;\n result += text.substring(idx + oldText.length);\n break;\n }\n result += text.substring(searchFrom, idx + oldText.length);\n searchFrom = idx + oldText.length;\n }\n return result;\n }\n return text.split(oldText).join(newText);\n }\n\n private _funcRept(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const text = String(args[0] ?? '');\n const times = this._toNumber(args[1]);\n if (isError(times)) return times;\n if ((times as number) < 0) return ERRORS.VALUE;\n return text.repeat(times as number);\n }\n\n // ── Logic Function Implementations ──────────────────────────────────────\n\n private _funcIf(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const condition = this._toBool(args[0]);\n if (condition) {\n return args[1];\n }\n return args.length > 2 ? args[2] : false;\n }\n\n private _funcAnd(args: any[]): any {\n const flat = this._flattenArgs(args);\n if (flat.length === 0) return ERRORS.VALUE;\n for (const v of flat) {\n if (isError(v)) return v;\n if (!this._toBool(v)) return false;\n }\n return true;\n }\n\n private _funcOr(args: any[]): any {\n const flat = this._flattenArgs(args);\n if (flat.length === 0) return ERRORS.VALUE;\n for (const v of flat) {\n if (isError(v)) return v;\n if (this._toBool(v)) return true;\n }\n return false;\n }\n\n private _funcNot(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n if (isError(args[0])) return args[0];\n return !this._toBool(args[0]);\n }\n\n // ── Math Function Implementations ───────────────────────────────────────\n\n private _funcSum(args: any[]): any {\n const nums = this._flattenNumeric(args);\n let sum = 0;\n for (const n of nums) sum += n;\n return sum;\n }\n\n private _funcAverage(args: any[]): any {\n const nums = this._flattenNumeric(args);\n if (nums.length === 0) return ERRORS.DIV0;\n let sum = 0;\n for (const n of nums) sum += n;\n return sum / nums.length;\n }\n\n private _funcMin(args: any[]): any {\n const nums = this._flattenNumeric(args);\n if (nums.length === 0) return 0;\n return Math.min(...nums);\n }\n\n private _funcMax(args: any[]): any {\n const nums = this._flattenNumeric(args);\n if (nums.length === 0) return 0;\n return Math.max(...nums);\n }\n\n private _funcCount(args: any[]): number {\n const flat = this._flattenArgs(args);\n let count = 0;\n for (const v of flat) {\n if (typeof v === 'number') count++;\n else if (typeof v === 'string' && v !== '' && !isError(v)) {\n const n = Number(v);\n if (!isNaN(n)) count++;\n }\n }\n return count;\n }\n\n private _funcCountA(args: any[]): number {\n const flat = this._flattenArgs(args);\n let count = 0;\n for (const v of flat) {\n if (v !== null && v !== undefined && v !== '') count++;\n }\n return count;\n }\n\n private _funcAbs(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n if (isError(num)) return num;\n return Math.abs(num as number);\n }\n\n private _funcRound(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const digits = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(digits)) return digits;\n const factor = Math.pow(10, digits as number);\n return Math.round((num as number) * factor) / factor;\n }\n\n private _funcRoundUp(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const digits = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(digits)) return digits;\n const factor = Math.pow(10, digits as number);\n const n = num as number;\n if (n >= 0) {\n return Math.ceil(n * factor) / factor;\n } else {\n return -Math.ceil(-n * factor) / factor;\n }\n }\n\n private _funcRoundDown(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const digits = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(digits)) return digits;\n const factor = Math.pow(10, digits as number);\n return Math.trunc((num as number) * factor) / factor;\n }\n\n private _funcInt(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n if (isError(num)) return num;\n return Math.floor(num as number);\n }\n\n private _funcMod(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const divisor = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(divisor)) return divisor;\n if ((divisor as number) === 0) return ERRORS.DIV0;\n // Excel MOD: result has same sign as divisor\n const n = num as number;\n const d = divisor as number;\n return n - d * Math.floor(n / d);\n }\n\n private _funcPower(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const base = this._toNumber(args[0]);\n const exp = this._toNumber(args[1]);\n if (isError(base)) return base;\n if (isError(exp)) return exp;\n return Math.pow(base as number, exp as number);\n }\n\n private _funcSqrt(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n if (isError(num)) return num;\n if ((num as number) < 0) return ERRORS.NUM;\n return Math.sqrt(num as number);\n }\n\n private _funcCeiling(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const significance = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(significance)) return significance;\n if ((significance as number) === 0) return 0;\n return Math.ceil((num as number) / (significance as number)) * (significance as number);\n }\n\n private _funcFloor(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const num = this._toNumber(args[0]);\n const significance = this._toNumber(args[1]);\n if (isError(num)) return num;\n if (isError(significance)) return significance;\n if ((significance as number) === 0) return ERRORS.DIV0;\n return Math.floor((num as number) / (significance as number)) * (significance as number);\n }\n\n // ── Lookup Function Implementations ─────────────────────────────────────\n\n private _funcVlookup(args: any[], worksheet: WorksheetLike | null): any {\n if (args.length < 3) return ERRORS.VALUE;\n const lookupValue = args[0];\n const tableArray = args[1]; // Should be an array (from range)\n const colIndexNum = this._toNumber(args[2]);\n if (isError(colIndexNum)) return colIndexNum;\n const rangeLookup = args.length >= 4 ? this._toBool(args[3]) : true;\n\n // tableArray should be a 2D-like flat array. We need the original range ref.\n // Since we already flattened it, we need to reconstruct.\n // For VLOOKUP, we need the 2D structure. We'll handle this via the token-level dispatch.\n if (!Array.isArray(tableArray)) return ERRORS.VALUE;\n\n // If tableArray is already flat, we can't determine dimensions reliably.\n // For the test scenarios, we'll attempt to work with 2D arrays\n // Since _callFunctionWithTokens resolves ranges to flat arrays,\n // we need a different approach for VLOOKUP.\n\n // Actually let's detect: if the first element is an array, it's 2D\n const is2D = tableArray.length > 0 && Array.isArray(tableArray[0]);\n let table2D: any[][];\n\n if (is2D) {\n table2D = tableArray as any[][];\n } else {\n // Flat array - can't determine columns. Assume it's a single column.\n table2D = tableArray.map((v: any) => [v]);\n }\n\n const colIdx = (colIndexNum as number) - 1;\n if (colIdx < 0) return ERRORS.VALUE;\n\n if (rangeLookup) {\n // Approximate match (sorted data, find largest value <= lookupValue)\n let lastMatch = -1;\n for (let r = 0; r < table2D.length; r++) {\n const cellVal = table2D[r][0];\n if (cellVal == null) continue;\n if (typeof lookupValue === 'number' && typeof cellVal === 'number') {\n if (cellVal <= lookupValue) lastMatch = r;\n else break;\n } else {\n const cmp = String(cellVal).toLowerCase().localeCompare(String(lookupValue).toLowerCase());\n if (cmp <= 0) lastMatch = r;\n else break;\n }\n }\n if (lastMatch === -1) return ERRORS.NA;\n if (colIdx >= table2D[lastMatch].length) return ERRORS.REF;\n return table2D[lastMatch][colIdx];\n } else {\n // Exact match\n for (let r = 0; r < table2D.length; r++) {\n const cellVal = table2D[r][0];\n if (this._valuesEqual(cellVal, lookupValue)) {\n if (colIdx >= table2D[r].length) return ERRORS.REF;\n return table2D[r][colIdx];\n }\n }\n return ERRORS.NA;\n }\n }\n\n private _funcHlookup(args: any[], worksheet: WorksheetLike | null): any {\n if (args.length < 3) return ERRORS.VALUE;\n const lookupValue = args[0];\n const tableArray = args[1];\n const rowIndexNum = this._toNumber(args[2]);\n if (isError(rowIndexNum)) return rowIndexNum;\n const rangeLookup = args.length >= 4 ? this._toBool(args[3]) : true;\n\n if (!Array.isArray(tableArray)) return ERRORS.VALUE;\n\n const is2D = tableArray.length > 0 && Array.isArray(tableArray[0]);\n let table2D: any[][];\n\n if (is2D) {\n table2D = tableArray as any[][];\n } else {\n // Single row\n table2D = [tableArray];\n }\n\n const rowIdx = (rowIndexNum as number) - 1;\n if (rowIdx < 0 || rowIdx >= table2D.length) return ERRORS.REF;\n\n if (table2D.length === 0) return ERRORS.NA;\n\n const firstRow = table2D[0];\n\n if (rangeLookup) {\n let lastMatch = -1;\n for (let c = 0; c < firstRow.length; c++) {\n const cellVal = firstRow[c];\n if (cellVal == null) continue;\n if (typeof lookupValue === 'number' && typeof cellVal === 'number') {\n if (cellVal <= lookupValue) lastMatch = c;\n else break;\n } else {\n const cmp = String(cellVal).toLowerCase().localeCompare(String(lookupValue).toLowerCase());\n if (cmp <= 0) lastMatch = c;\n else break;\n }\n }\n if (lastMatch === -1) return ERRORS.NA;\n return table2D[rowIdx][lastMatch];\n } else {\n for (let c = 0; c < firstRow.length; c++) {\n if (this._valuesEqual(firstRow[c], lookupValue)) {\n return table2D[rowIdx][c];\n }\n }\n return ERRORS.NA;\n }\n }\n\n private _funcIndex(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const arr = args[0];\n const rowNum = this._toNumber(args[1]);\n if (isError(rowNum)) return rowNum;\n\n if (!Array.isArray(arr)) return ERRORS.REF;\n\n const is2D = arr.length > 0 && Array.isArray(arr[0]);\n if (is2D) {\n const table2D = arr as any[][];\n const rIdx = (rowNum as number) - 1;\n if (rIdx < 0 || rIdx >= table2D.length) return ERRORS.REF;\n if (args.length >= 3) {\n const colNum = this._toNumber(args[2]);\n if (isError(colNum)) return colNum;\n const cIdx = (colNum as number) - 1;\n if (cIdx < 0 || cIdx >= table2D[rIdx].length) return ERRORS.REF;\n return table2D[rIdx][cIdx];\n }\n if (table2D[rIdx].length === 1) return table2D[rIdx][0];\n return table2D[rIdx];\n }\n\n // 1D array\n const idx = (rowNum as number) - 1;\n if (idx < 0 || idx >= arr.length) return ERRORS.REF;\n return arr[idx];\n }\n\n private _funcMatch(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const lookupValue = args[0];\n const lookupArray = args[1];\n const matchType = args.length >= 3 ? this._toNumber(args[2]) : 1;\n if (isError(matchType)) return matchType;\n\n if (!Array.isArray(lookupArray)) return ERRORS.NA;\n\n const flat = this._flattenArgs([lookupArray]);\n\n if ((matchType as number) === 0) {\n // Exact match\n for (let i = 0; i < flat.length; i++) {\n if (this._valuesEqual(flat[i], lookupValue)) return i + 1;\n }\n return ERRORS.NA;\n }\n\n if ((matchType as number) === 1) {\n // Largest value <= lookupValue (sorted ascending)\n let lastMatch = -1;\n for (let i = 0; i < flat.length; i++) {\n if (typeof lookupValue === 'number' && typeof flat[i] === 'number') {\n if (flat[i] <= lookupValue) lastMatch = i;\n else break;\n }\n }\n if (lastMatch === -1) return ERRORS.NA;\n return lastMatch + 1;\n }\n\n if ((matchType as number) === -1) {\n // Smallest value >= lookupValue (sorted descending)\n let lastMatch = -1;\n for (let i = 0; i < flat.length; i++) {\n if (typeof lookupValue === 'number' && typeof flat[i] === 'number') {\n if (flat[i] >= lookupValue) lastMatch = i;\n else break;\n }\n }\n if (lastMatch === -1) return ERRORS.NA;\n return lastMatch + 1;\n }\n\n return ERRORS.NA;\n }\n\n private _valuesEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a === 'number' && typeof b === 'number') return a === b;\n return String(a).toLowerCase() === String(b).toLowerCase();\n }\n\n // ── Date Function Implementations ───────────────────────────────────────\n\n private _funcToday(): number {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n return CellValueHandler.dateToExcelSerial(today);\n }\n\n private _funcNow(): number {\n return CellValueHandler.dateToExcelSerial(new Date());\n }\n\n private _funcDate(args: any[]): any {\n if (args.length < 3) return ERRORS.VALUE;\n const year = this._toNumber(args[0]);\n const month = this._toNumber(args[1]);\n const day = this._toNumber(args[2]);\n if (isError(year)) return year;\n if (isError(month)) return month;\n if (isError(day)) return day;\n const dt = new Date(year as number, (month as number) - 1, day as number);\n return CellValueHandler.dateToExcelSerial(dt);\n }\n\n private _funcYear(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const serial = this._toNumber(args[0]);\n if (isError(serial)) return serial;\n const dt = CellValueHandler.excelSerialToDate(serial as number);\n return dt.getFullYear();\n }\n\n private _funcMonth(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const serial = this._toNumber(args[0]);\n if (isError(serial)) return serial;\n const dt = CellValueHandler.excelSerialToDate(serial as number);\n return dt.getMonth() + 1;\n }\n\n private _funcDay(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const serial = this._toNumber(args[0]);\n if (isError(serial)) return serial;\n const dt = CellValueHandler.excelSerialToDate(serial as number);\n return dt.getDate();\n }\n\n // ── Info Function Implementations ───────────────────────────────────────\n\n private _funcIsNumber(args: any[]): boolean {\n if (args.length < 1) return false;\n return typeof args[0] === 'number';\n }\n\n private _funcIsText(args: any[]): boolean {\n if (args.length < 1) return false;\n return typeof args[0] === 'string' && !isError(args[0]);\n }\n\n private _funcIsBlank(args: any[]): boolean {\n if (args.length < 1) return true;\n return args[0] === null || args[0] === undefined || args[0] === '';\n }\n\n private _funcIsError(args: any[]): boolean {\n if (args.length < 1) return false;\n return isError(args[0]);\n }\n\n private _funcIsNa(args: any[]): boolean {\n if (args.length < 1) return false;\n return args[0] === ERRORS.NA;\n }\n\n // ── Other Function Implementations ──────────────────────────────────────\n\n private _funcValue(args: any[]): any {\n if (args.length < 1) return ERRORS.VALUE;\n const val = args[0];\n if (typeof val === 'number') return val;\n if (typeof val === 'string') {\n const num = Number(val);\n if (isNaN(num)) return ERRORS.VALUE;\n return num;\n }\n return ERRORS.VALUE;\n }\n\n private _funcChoose(args: any[]): any {\n if (args.length < 2) return ERRORS.VALUE;\n const indexNum = this._toNumber(args[0]);\n if (isError(indexNum)) return indexNum;\n const idx = indexNum as number;\n if (idx < 1 || idx >= args.length) return ERRORS.VALUE;\n return args[idx];\n }\n}\n","/**\n * Aspose.Cells for Node.js - Worksheet Module\n *\n * Represents a single worksheet in an Excel workbook.\n * Compatible with Aspose.Cells for .NET API structure.\n */\n\nimport { Cells } from './Cells';\nimport { Cell } from './Cell';\nimport { DataValidationCollection } from '../features/DataValidation';\nimport { ConditionalFormatCollection } from '../features/ConditionalFormat';\nimport { HyperlinkCollection } from '../features/Hyperlink';\nimport { AutoFilter } from '../features/AutoFilter';\nimport { HorizontalPageBreakCollection, VerticalPageBreakCollection } from '../features/PageBreak';\n\n// ─── SheetProtection ──────────────────────────────────────────────────────\n\nexport class SheetProtection {\n sheet = false;\n password: string | null = null;\n objects = false;\n scenarios = false;\n formatCells = false;\n formatColumns = false;\n formatRows = false;\n insertColumns = false;\n insertRows = false;\n insertHyperlinks = false;\n deleteColumns = false;\n deleteRows = false;\n selectLockedCells = true;\n selectUnlockedCells = true;\n sort = false;\n autoFilter = false;\n pivotTables = false;\n\n // snake_case aliases\n get format_cells(): boolean { return this.formatCells; }\n set format_cells(v: boolean) { this.formatCells = v; }\n get format_columns(): boolean { return this.formatColumns; }\n set format_columns(v: boolean) { this.formatColumns = v; }\n get format_rows(): boolean { return this.formatRows; }\n set format_rows(v: boolean) { this.formatRows = v; }\n get insert_columns(): boolean { return this.insertColumns; }\n set insert_columns(v: boolean) { this.insertColumns = v; }\n get insert_rows(): boolean { return this.insertRows; }\n set insert_rows(v: boolean) { this.insertRows = v; }\n get insert_hyperlinks(): boolean { return this.insertHyperlinks; }\n set insert_hyperlinks(v: boolean) { this.insertHyperlinks = v; }\n get delete_columns(): boolean { return this.deleteColumns; }\n set delete_columns(v: boolean) { this.deleteColumns = v; }\n get delete_rows(): boolean { return this.deleteRows; }\n set delete_rows(v: boolean) { this.deleteRows = v; }\n get select_locked_cells(): boolean { return this.selectLockedCells; }\n set select_locked_cells(v: boolean) { this.selectLockedCells = v; }\n get select_unlocked_cells(): boolean { return this.selectUnlockedCells; }\n set select_unlocked_cells(v: boolean) { this.selectUnlockedCells = v; }\n get auto_filter(): boolean { return this.autoFilter; }\n set auto_filter(v: boolean) { this.autoFilter = v; }\n get pivot_tables(): boolean { return this.pivotTables; }\n set pivot_tables(v: boolean) { this.pivotTables = v; }\n}\n\n// ─── SheetProtectionDictWrapper ───────────────────────────────────────────\n\nconst PROTECTION_KEYS = [\n 'protected', 'password', 'sheet', 'objects', 'scenarios',\n 'format_cells', 'format_columns', 'format_rows',\n 'insert_columns', 'insert_rows', 'insert_hyperlinks',\n 'delete_columns', 'delete_rows',\n 'select_locked_cells', 'select_unlocked_cells',\n 'sort', 'auto_filter', 'pivot_tables',\n] as const;\n\ntype ProtectionKey = typeof PROTECTION_KEYS[number];\n\n/**\n * Dictionary-like wrapper around SheetProtection for backward compatibility.\n */\nexport class SheetProtectionDictWrapper {\n private _protection: SheetProtection;\n\n constructor(sheetProtection: SheetProtection) {\n this._protection = sheetProtection;\n }\n\n get(key: ProtectionKey, defaultValue?: unknown): unknown {\n try {\n return this.getItem(key);\n } catch {\n return defaultValue;\n }\n }\n\n getItem(key: ProtectionKey): unknown {\n switch (key) {\n case 'protected':\n case 'sheet': return this._protection.sheet;\n case 'password': return this._protection.password;\n case 'objects': return this._protection.objects;\n case 'scenarios': return this._protection.scenarios;\n case 'format_cells': return this._protection.formatCells;\n case 'format_columns': return this._protection.formatColumns;\n case 'format_rows': return this._protection.formatRows;\n case 'insert_columns': return this._protection.insertColumns;\n case 'insert_rows': return this._protection.insertRows;\n case 'insert_hyperlinks': return this._protection.insertHyperlinks;\n case 'delete_columns': return this._protection.deleteColumns;\n case 'delete_rows': return this._protection.deleteRows;\n case 'select_locked_cells': return this._protection.selectLockedCells;\n case 'select_unlocked_cells': return this._protection.selectUnlockedCells;\n case 'sort': return this._protection.sort;\n case 'auto_filter': return this._protection.autoFilter;\n case 'pivot_tables': return this._protection.pivotTables;\n default: throw new Error(`Unknown protection key: ${key}`);\n }\n }\n\n setItem(key: ProtectionKey, value: unknown): void {\n switch (key) {\n case 'protected':\n case 'sheet': this._protection.sheet = value as boolean; break;\n case 'password': this._protection.password = value as string | null; break;\n case 'objects': this._protection.objects = value as boolean; break;\n case 'scenarios': this._protection.scenarios = value as boolean; break;\n case 'format_cells': this._protection.formatCells = value as boolean; break;\n case 'format_columns': this._protection.formatColumns = value as boolean; break;\n case 'format_rows': this._protection.formatRows = value as boolean; break;\n case 'insert_columns': this._protection.insertColumns = value as boolean; break;\n case 'insert_rows': this._protection.insertRows = value as boolean; break;\n case 'insert_hyperlinks': this._protection.insertHyperlinks = value as boolean; break;\n case 'delete_columns': this._protection.deleteColumns = value as boolean; break;\n case 'delete_rows': this._protection.deleteRows = value as boolean; break;\n case 'select_locked_cells': this._protection.selectLockedCells = value as boolean; break;\n case 'select_unlocked_cells': this._protection.selectUnlockedCells = value as boolean; break;\n case 'sort': this._protection.sort = value as boolean; break;\n case 'auto_filter': this._protection.autoFilter = value as boolean; break;\n case 'pivot_tables': this._protection.pivotTables = value as boolean; break;\n default: throw new Error(`Unknown protection key: ${key}`);\n }\n }\n}\n\n// ─── PageSetup ────────────────────────────────────────────────────────────\n\nexport interface PageSetup {\n orientation: string | null;\n paperSize: number | null;\n scale: number | null;\n fitToWidth: number | null;\n fitToHeight: number | null;\n fitToPage: boolean;\n}\n\nexport interface PageMargins {\n left: number;\n right: number;\n top: number;\n bottom: number;\n header: number;\n footer: number;\n}\n\n// ─── FreezePane ───────────────────────────────────────────────────────────\n\nexport interface FreezePane {\n row: number;\n column: number;\n freezedRows: number;\n freezedColumns: number;\n}\n\n// ─── Worksheet ────────────────────────────────────────────────────────────\n\n/**\n * Represents a single worksheet in an Excel workbook.\n */\nexport class Worksheet {\n private _name: string;\n private _cells: Cells;\n private _visible: boolean | 'veryHidden';\n private _tabColor: string | null;\n private _index: number;\n\n // Sheet protection\n private _protection: SheetProtection;\n\n // Page setup\n private _pageSetup: PageSetup;\n private _pageMargins: PageMargins;\n\n // Freeze panes\n private _freezePane: FreezePane | null;\n\n // Merge tracking\n _mergedCells: string[];\n\n // Row/Column dimensions (exposed for Cells to access)\n _rowHeights: Record<number, number>;\n _columnWidths: Record<number, number>;\n _hiddenRows: Set<number>;\n _hiddenColumns: Set<number>;\n\n // Print area\n private _printArea: string | null;\n\n // Round-trip fidelity: raw XML preservation\n _sourceXml: string | null;\n\n // Feature collections (Phase 4)\n private _dataValidations: DataValidationCollection;\n private _conditionalFormatting: ConditionalFormatCollection;\n private _hyperlinks: HyperlinkCollection;\n private _autoFilter: AutoFilter;\n private _horizontalPageBreaks: HorizontalPageBreakCollection;\n private _verticalPageBreaks: VerticalPageBreakCollection;\n\n // Workbook back-reference (set by Workbook)\n _workbook: unknown;\n\n constructor(name = 'Sheet1') {\n this._name = name;\n this._cells = new Cells(this);\n this._visible = true;\n this._tabColor = null;\n this._index = 0;\n this._protection = new SheetProtection();\n this._pageSetup = {\n orientation: null,\n paperSize: null,\n scale: null,\n fitToWidth: null,\n fitToHeight: null,\n fitToPage: false,\n };\n this._pageMargins = {\n left: 0.75,\n right: 0.75,\n top: 1.0,\n bottom: 1.0,\n header: 0.5,\n footer: 0.5,\n };\n this._freezePane = null;\n this._mergedCells = [];\n this._rowHeights = {};\n this._columnWidths = {};\n this._hiddenRows = new Set();\n this._hiddenColumns = new Set();\n this._printArea = null;\n this._sourceXml = null;\n this._dataValidations = new DataValidationCollection();\n this._conditionalFormatting = new ConditionalFormatCollection();\n this._hyperlinks = new HyperlinkCollection();\n this._autoFilter = new AutoFilter();\n this._horizontalPageBreaks = new HorizontalPageBreakCollection();\n this._verticalPageBreaks = new VerticalPageBreakCollection();\n this._workbook = null;\n }\n\n // ── Properties ──────────────────────────────────────────────────────────\n\n get name(): string { return this._name; }\n set name(v: string) { this._name = v; }\n\n get cells(): Cells { return this._cells; }\n\n get visible(): boolean | 'veryHidden' { return this._visible; }\n set visible(v: boolean | 'veryHidden') { this._visible = v; }\n\n /** Alias for visible */\n get isVisible(): boolean { return this._visible === true; }\n get is_visible(): boolean { return this.isVisible; }\n\n get tabColor(): string | null { return this._tabColor; }\n set tabColor(v: string | null) { this._tabColor = v; }\n get tab_color(): string | null { return this._tabColor; }\n set tab_color(v: string | null) { this._tabColor = v; }\n\n get index(): number { return this._index; }\n set index(v: number) { this._index = v; }\n\n get protection(): SheetProtectionDictWrapper {\n return new SheetProtectionDictWrapper(this._protection);\n }\n\n get pageSetup(): PageSetup { return this._pageSetup; }\n get page_setup(): PageSetup { return this._pageSetup; }\n\n get pageMargins(): PageMargins { return this._pageMargins; }\n get page_margins(): PageMargins { return this._pageMargins; }\n\n get printArea(): string | null { return this._printArea; }\n set printArea(v: string | null) {\n this._printArea = v ? this.normalizePrintArea(v) : null;\n }\n get print_area(): string | null { return this._printArea; }\n set print_area(v: string | null) { this.printArea = v; }\n\n get mergedCells(): string[] { return [...this._mergedCells]; }\n get merged_cells(): string[] { return this.mergedCells; }\n\n get freezePane(): FreezePane | null { return this._freezePane; }\n get freeze_pane(): FreezePane | null { return this._freezePane; }\n\n // Feature collections (Phase 4)\n get dataValidations(): DataValidationCollection { return this._dataValidations; }\n get data_validations(): DataValidationCollection { return this._dataValidations; }\n\n get conditionalFormatting(): ConditionalFormatCollection { return this._conditionalFormatting; }\n get conditional_formatting(): ConditionalFormatCollection { return this._conditionalFormatting; }\n\n get hyperlinks(): HyperlinkCollection { return this._hyperlinks; }\n\n get autoFilter(): AutoFilter { return this._autoFilter; }\n get auto_filter_obj(): AutoFilter { return this._autoFilter; }\n\n get horizontalPageBreaks(): HorizontalPageBreakCollection { return this._horizontalPageBreaks; }\n get horizontal_page_breaks(): HorizontalPageBreakCollection { return this._horizontalPageBreaks; }\n\n get verticalPageBreaks(): VerticalPageBreakCollection { return this._verticalPageBreaks; }\n get vertical_page_breaks(): VerticalPageBreakCollection { return this._verticalPageBreaks; }\n\n // ── Methods ─────────────────────────────────────────────────────────────\n\n rename(newName: string): void { this._name = newName; }\n\n setVisibility(value: boolean | 'veryHidden'): void {\n if (value !== true && value !== false && value !== 'veryHidden') {\n throw new Error(`Invalid visibility value: ${value}. Use true, false, or 'veryHidden'.`);\n }\n this._visible = value;\n }\n set_visibility(value: boolean | 'veryHidden'): void { this.setVisibility(value); }\n\n getVisibility(): boolean | 'veryHidden' { return this._visible; }\n get_visibility(): boolean | 'veryHidden' { return this.getVisibility(); }\n\n setTabColor(color: string | null): void {\n if (color !== null && color.length !== 8) {\n throw new Error(`Invalid tab color format: ${color}. Expected 8-char AARRGGBB hex string.`);\n }\n this._tabColor = color ? color.toUpperCase() : null;\n }\n set_tab_color(color: string | null): void { this.setTabColor(color); }\n\n getTabColor(): string | null { return this._tabColor; }\n get_tab_color(): string | null { return this.getTabColor(); }\n\n clearTabColor(): void { this._tabColor = null; }\n clear_tab_color(): void { this.clearTabColor(); }\n\n // ── Page setup methods ──────────────────────────────────────────────────\n\n setPageOrientation(orientation: 'portrait' | 'landscape'): void {\n if (orientation !== 'portrait' && orientation !== 'landscape') {\n throw new Error(`Invalid orientation: ${orientation}. Use 'portrait' or 'landscape'.`);\n }\n this._pageSetup.orientation = orientation;\n }\n set_page_orientation(orientation: 'portrait' | 'landscape'): void { this.setPageOrientation(orientation); }\n\n getPageOrientation(): string | null { return this._pageSetup.orientation; }\n get_page_orientation(): string | null { return this.getPageOrientation(); }\n\n setPaperSize(paperSize: number): void { this._pageSetup.paperSize = paperSize; }\n set_paper_size(paperSize: number): void { this.setPaperSize(paperSize); }\n\n getPaperSize(): number | null { return this._pageSetup.paperSize; }\n get_paper_size(): number | null { return this.getPaperSize(); }\n\n setPageMargins(options: Partial<PageMargins>): void {\n if (options.left != null) this._pageMargins.left = options.left;\n if (options.right != null) this._pageMargins.right = options.right;\n if (options.top != null) this._pageMargins.top = options.top;\n if (options.bottom != null) this._pageMargins.bottom = options.bottom;\n if (options.header != null) this._pageMargins.header = options.header;\n if (options.footer != null) this._pageMargins.footer = options.footer;\n }\n set_page_margins(options: Partial<PageMargins>): void { this.setPageMargins(options); }\n\n getPageMargins(): PageMargins { return { ...this._pageMargins }; }\n get_page_margins(): PageMargins { return this.getPageMargins(); }\n\n setFitToPages(width = 1, height = 1): void {\n this._pageSetup.fitToWidth = width;\n this._pageSetup.fitToHeight = height;\n this._pageSetup.fitToPage = true;\n }\n set_fit_to_pages(width = 1, height = 1): void { this.setFitToPages(width, height); }\n\n setPrintScale(scale: number): void {\n if (scale < 10 || scale > 400) throw new Error(`Print scale must be between 10 and 400, got ${scale}.`);\n this._pageSetup.scale = scale;\n }\n set_print_scale(scale: number): void { this.setPrintScale(scale); }\n\n // ── Print area ──────────────────────────────────────────────────────────\n\n setPrintArea(printArea: string): void { this.printArea = printArea; }\n set_print_area(printArea: string): void { this.setPrintArea(printArea); }\n SetPrintArea(printArea: string): void { this.setPrintArea(printArea); }\n\n clearPrintArea(): void { this._printArea = null; }\n clear_print_area(): void { this.clearPrintArea(); }\n ClearPrintArea(): void { this.clearPrintArea(); }\n\n private normalizePrintArea(printArea: string): string {\n if (!printArea || !printArea.trim()) throw new Error('print_area must be a non-empty string');\n const parts: string[] = [];\n for (const token of printArea.split(',')) {\n const part = token.trim().toUpperCase().replace(/\\$/g, '');\n if (!part) continue;\n if (part.includes(':')) {\n const [startRef, endRef] = part.split(':');\n Cells.coordinateFromString(startRef);\n Cells.coordinateFromString(endRef);\n parts.push(`${startRef}:${endRef}`);\n } else {\n Cells.coordinateFromString(part);\n parts.push(part);\n }\n }\n if (parts.length === 0) throw new Error('print_area must contain at least one valid range');\n return parts.join(',');\n }\n\n // ── Freeze pane ─────────────────────────────────────────────────────────\n\n setFreezePane(row: number, column: number, freezedRows?: number, freezedColumns?: number): void {\n this._freezePane = {\n row,\n column,\n freezedRows: freezedRows ?? row,\n freezedColumns: freezedColumns ?? column,\n };\n }\n set_freeze_pane(row: number, column: number, freezedRows?: number, freezedColumns?: number): void {\n this.setFreezePane(row, column, freezedRows, freezedColumns);\n }\n\n clearFreezePane(): void { this._freezePane = null; }\n clear_freeze_pane(): void { this.clearFreezePane(); }\n\n // ── Protection ──────────────────────────────────────────────────────────\n\n isProtected(): boolean { return this._protection.sheet; }\n is_protected(): boolean { return this.isProtected(); }\n\n protect(options: {\n password?: string | null;\n formatCells?: boolean;\n formatColumns?: boolean;\n formatRows?: boolean;\n insertColumns?: boolean;\n insertRows?: boolean;\n deleteColumns?: boolean;\n deleteRows?: boolean;\n sort?: boolean;\n autoFilter?: boolean;\n insertHyperlinks?: boolean;\n pivotTables?: boolean;\n selectLockedCells?: boolean;\n selectUnlockedCells?: boolean;\n objects?: boolean;\n scenarios?: boolean;\n } = {}): void {\n this._protection.sheet = true;\n if (options.password != null) this._protection.password = options.password;\n if (options.formatCells != null) this._protection.formatCells = options.formatCells;\n if (options.formatColumns != null) this._protection.formatColumns = options.formatColumns;\n if (options.formatRows != null) this._protection.formatRows = options.formatRows;\n if (options.insertColumns != null) this._protection.insertColumns = options.insertColumns;\n if (options.insertRows != null) this._protection.insertRows = options.insertRows;\n if (options.deleteColumns != null) this._protection.deleteColumns = options.deleteColumns;\n if (options.deleteRows != null) this._protection.deleteRows = options.deleteRows;\n if (options.sort != null) this._protection.sort = options.sort;\n if (options.autoFilter != null) this._protection.autoFilter = options.autoFilter;\n if (options.insertHyperlinks != null) this._protection.insertHyperlinks = options.insertHyperlinks;\n if (options.pivotTables != null) this._protection.pivotTables = options.pivotTables;\n if (options.selectLockedCells != null) this._protection.selectLockedCells = options.selectLockedCells;\n if (options.selectUnlockedCells != null) this._protection.selectUnlockedCells = options.selectUnlockedCells;\n if (options.objects != null) this._protection.objects = options.objects;\n if (options.scenarios != null) this._protection.scenarios = options.scenarios;\n }\n\n unprotect(_password?: string): void {\n this._protection.sheet = false;\n this._protection.password = null;\n }\n\n // ── Copy / placeholder methods ──────────────────────────────────────────\n\n copy(name?: string): Worksheet {\n const newWs = new Worksheet(name ?? `${this._name} (copy)`);\n for (const [ref, cell] of this._cells._cells.entries()) {\n const newCell = new Cell(cell.value, cell.formula);\n if (cell.style) newCell.style = cell.style.copy();\n newWs._cells._cells.set(ref, newCell);\n }\n newWs._mergedCells = [...this._mergedCells];\n newWs._printArea = this._printArea;\n return newWs;\n }\n\n /** Placeholder */\n delete(): void { /* handled by Workbook */ }\n /** Placeholder */\n move(_index: number): void { /* handled by Workbook */ }\n /** Placeholder */\n select(): void { /* handled by Workbook */ }\n /** Placeholder */\n activate(): void { /* handled by Workbook */ }\n /**\n * Evaluates every formula on this worksheet only.\n *\n * Delegates to the workbook-level FormulaEvaluator so that cross-sheet\n * references and defined names resolve correctly.\n */\n calculateFormula(): void {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { FormulaEvaluator } = require('../features/FormulaEvaluator');\n const evaluator = new FormulaEvaluator(this._workbook);\n evaluator.evaluateAll(this);\n }\n\n /** snake_case alias */\n calculate_formula(): void { this.calculateFormula(); }\n}\n","/**\n * Shared String Table for XLSX files.\n *\n * Manages deduplicated string storage per ECMA-376 §18.4 (Shared String Table).\n * Each unique string is stored once; cells reference strings by index.\n */\n\nexport class SharedStringTable {\n /** Ordered list of unique strings */\n private _strings: string[] = [];\n\n /** Reverse lookup: string → index */\n private _stringToIndex: Map<string, number> = new Map();\n\n /** Total reference count (including duplicates) */\n private _count: number = 0;\n\n // ── Properties ──────────────────────────────────────────────────────────\n\n /** Number of unique strings. */\n get uniqueCount(): number {\n return this._strings.length;\n }\n\n /** Total number of string references (≥ uniqueCount). */\n get count(): number {\n return this._count;\n }\n\n /** Direct access to the strings array (read-only copy). */\n get strings(): string[] {\n return [...this._strings];\n }\n\n // ── Methods ─────────────────────────────────────────────────────────────\n\n /**\n * Adds a string to the shared string table.\n *\n * If the string already exists, returns the existing index.\n * Always increments the total reference count.\n *\n * @param text - The string to add.\n * @returns The index of the string in the table.\n */\n addString(text: string): number {\n this._count++;\n\n const existing = this._stringToIndex.get(text);\n if (existing !== undefined) {\n return existing;\n }\n\n const index = this._strings.length;\n this._strings.push(text);\n this._stringToIndex.set(text, index);\n return index;\n }\n\n /**\n * Gets a string by its index.\n *\n * @param index - The 0-based index.\n * @returns The string at that index.\n * @throws {RangeError} If the index is out of range.\n */\n getString(index: number): string {\n if (index < 0 || index >= this._strings.length) {\n throw new RangeError(\n `String index ${index} out of range (0..${this._strings.length - 1})`,\n );\n }\n return this._strings[index];\n }\n\n /**\n * Serializes the shared string table to OOXML.\n *\n * Produces the content of `xl/sharedStrings.xml`.\n */\n toXml(): string {\n const parts: string[] = [];\n parts.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n parts.push(\n `<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"` +\n ` count=\"${this._count}\" uniqueCount=\"${this._strings.length}\">`,\n );\n\n for (const text of this._strings) {\n // Preserve leading/trailing whitespace with xml:space=\"preserve\"\n const needsPreserve = text !== text.trim();\n if (needsPreserve) {\n parts.push(`<si><t xml:space=\"preserve\">${escapeXml(text)}</t></si>`);\n } else {\n parts.push(`<si><t>${escapeXml(text)}</t></si>`);\n }\n }\n\n parts.push('</sst>');\n return parts.join('');\n }\n\n /**\n * Resets the table to empty state.\n */\n clear(): void {\n this._strings = [];\n this._stringToIndex.clear();\n this._count = 0;\n }\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Escapes special XML characters in text content.\n */\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","/**\n * XML Data Validation Saver\n *\n * Writes data validation settings to XLSX worksheet XML.\n */\n\nimport {\n DataValidation,\n DataValidationCollection,\n DataValidationType,\n DataValidationOperator,\n DataValidationAlertStyle,\n DataValidationImeMode,\n} from '../features/DataValidation';\n\n// Maps from enum → XML string\nconst TYPE_TO_XML: Record<number, string> = {\n [DataValidationType.NONE]: 'none',\n [DataValidationType.WHOLE_NUMBER]: 'whole',\n [DataValidationType.DECIMAL]: 'decimal',\n [DataValidationType.LIST]: 'list',\n [DataValidationType.DATE]: 'date',\n [DataValidationType.TIME]: 'time',\n [DataValidationType.TEXT_LENGTH]: 'textLength',\n [DataValidationType.CUSTOM]: 'custom',\n};\n\nconst OPERATOR_TO_XML: Record<number, string> = {\n [DataValidationOperator.BETWEEN]: 'between',\n [DataValidationOperator.NOT_BETWEEN]: 'notBetween',\n [DataValidationOperator.EQUAL]: 'equal',\n [DataValidationOperator.NOT_EQUAL]: 'notEqual',\n [DataValidationOperator.GREATER_THAN]: 'greaterThan',\n [DataValidationOperator.LESS_THAN]: 'lessThan',\n [DataValidationOperator.GREATER_THAN_OR_EQUAL]: 'greaterThanOrEqual',\n [DataValidationOperator.LESS_THAN_OR_EQUAL]: 'lessThanOrEqual',\n};\n\nconst ALERT_TO_XML: Record<number, string> = {\n [DataValidationAlertStyle.STOP]: 'stop',\n [DataValidationAlertStyle.WARNING]: 'warning',\n [DataValidationAlertStyle.INFORMATION]: 'information',\n};\n\nconst IME_TO_XML: Record<number, string> = {\n [DataValidationImeMode.NO_CONTROL]: 'noControl',\n [DataValidationImeMode.OFF]: 'off',\n [DataValidationImeMode.ON]: 'on',\n [DataValidationImeMode.DISABLED]: 'disabled',\n [DataValidationImeMode.HIRAGANA]: 'hiragana',\n [DataValidationImeMode.FULL_KATAKANA]: 'fullKatakana',\n [DataValidationImeMode.HALF_KATAKANA]: 'halfKatakana',\n [DataValidationImeMode.FULL_ALPHA]: 'fullAlpha',\n [DataValidationImeMode.HALF_ALPHA]: 'halfAlpha',\n [DataValidationImeMode.FULL_HANGUL]: 'fullHangul',\n [DataValidationImeMode.HALF_HANGUL]: 'halfHangul',\n};\n\nexport class DataValidationXmlSaver {\n private _escapeXml: (text: string) => string;\n\n constructor(escapeXml: (text: string) => string) {\n this._escapeXml = escapeXml;\n }\n\n formatDataValidationsXml(collection: DataValidationCollection): string {\n if (collection.count === 0) return '';\n\n const lines: string[] = [];\n const attrs: string[] = [`count=\"${collection.count}\"`];\n\n if (collection.disablePrompts) {\n attrs.push('disablePrompts=\"1\"');\n }\n if (collection.xWindow != null) {\n attrs.push(`xWindow=\"${collection.xWindow}\"`);\n }\n if (collection.yWindow != null) {\n attrs.push(`yWindow=\"${collection.yWindow}\"`);\n }\n\n lines.push(`<dataValidations ${attrs.join(' ')}>`);\n\n for (const dv of collection) {\n lines.push(this._formatDataValidationXml(dv));\n }\n\n lines.push('</dataValidations>');\n return lines.join('');\n }\n\n private _formatDataValidationXml(dv: DataValidation): string {\n const attrs: string[] = [];\n\n // Type\n const typeStr = TYPE_TO_XML[dv.type] ?? 'none';\n if (typeStr !== 'none') {\n attrs.push(`type=\"${typeStr}\"`);\n }\n\n // Operator (only emit if not default 'between' or if type needs it)\n const opStr = OPERATOR_TO_XML[dv.operator] ?? 'between';\n if (opStr !== 'between') {\n attrs.push(`operator=\"${opStr}\"`);\n }\n\n // Alert style\n const alertStr = ALERT_TO_XML[dv.alertStyle] ?? 'stop';\n if (alertStr !== 'stop') {\n attrs.push(`errorStyle=\"${alertStr}\"`);\n }\n\n // IME mode\n if (dv.imeMode !== DataValidationImeMode.NO_CONTROL) {\n const imeStr = IME_TO_XML[dv.imeMode];\n if (imeStr) attrs.push(`imeMode=\"${imeStr}\"`);\n }\n\n // Boolean attrs\n if (dv.allowBlank) {\n attrs.push('allowBlank=\"1\"');\n }\n\n // showDropDown: ECMA-376 inversion - showDropDown=\"1\" means HIDE dropdown\n if (!dv.showDropdown) {\n attrs.push('showDropDown=\"1\"');\n }\n\n if (dv.showInputMessage) {\n attrs.push('showInputMessage=\"1\"');\n }\n\n if (dv.showErrorMessage) {\n attrs.push('showErrorMessage=\"1\"');\n }\n\n // String attrs\n if (dv.errorTitle) {\n attrs.push(`errorTitle=\"${this._escapeXml(dv.errorTitle)}\"`);\n }\n\n if (dv.errorMessage) {\n attrs.push(`error=\"${this._escapeXml(dv.errorMessage)}\"`);\n }\n\n if (dv.inputTitle) {\n attrs.push(`promptTitle=\"${this._escapeXml(dv.inputTitle)}\"`);\n }\n\n if (dv.inputMessage) {\n attrs.push(`prompt=\"${this._escapeXml(dv.inputMessage)}\"`);\n }\n\n // sqref\n attrs.push(`sqref=\"${dv.sqref ?? ''}\"`);\n\n let xml = `<dataValidation ${attrs.join(' ')}>`;\n\n // Formulas\n if (dv.formula1 != null) {\n xml += `<formula1>${this._escapeXml(dv.formula1)}</formula1>`;\n }\n if (dv.formula2 != null) {\n xml += `<formula2>${this._escapeXml(dv.formula2)}</formula2>`;\n }\n\n xml += '</dataValidation>';\n return xml;\n }\n}\n","/**\n * XML Conditional Format Saver\n *\n * Writes conditional formatting rules to XLSX worksheet XML.\n */\n\nimport { ConditionalFormat, ConditionalFormatCollection } from '../features/ConditionalFormat';\n\n// Map internal type values to ECMA-376 cfRule type strings\nconst TYPE_MAP: Record<string, string> = {\n cellIs: 'cellIs',\n expression: 'expression',\n colorScale: 'colorScale',\n dataBar: 'dataBar',\n iconSet: 'iconSet',\n top10: 'top10',\n aboveAverage: 'aboveAverage',\n duplicateValues: 'duplicateValues',\n uniqueValues: 'uniqueValues',\n containsText: 'containsText',\n notContainsText: 'notContainsText',\n beginsWith: 'beginsWith',\n endsWith: 'endsWith',\n containsBlanks: 'containsBlanks',\n notContainsBlanks: 'notContainsBlanks',\n containsErrors: 'containsErrors',\n notContainsErrors: 'notContainsErrors',\n timePeriod: 'timePeriod',\n};\n\nexport class ConditionalFormatXmlSaver {\n private _escapeXml: (text: string) => string;\n\n constructor(escapeXml: (text: string) => string) {\n this._escapeXml = escapeXml;\n }\n\n /**\n * Formats conditional formatting XML. Returns DXF entries that need to be\n * added to the styles.xml dxfs collection.\n */\n formatConditionalFormattingXml(\n collection: ConditionalFormatCollection,\n startDxfId: number,\n ): { xml: string; dxfEntries: string[] } {\n if (collection.count === 0) return { xml: '', dxfEntries: [] };\n\n const dxfEntries: string[] = [];\n let dxfId = startDxfId;\n\n // Group by range\n const grouped = new Map<string, ConditionalFormat[]>();\n for (const cf of collection) {\n const range = cf.range ?? '';\n if (!grouped.has(range)) grouped.set(range, []);\n grouped.get(range)!.push(cf);\n }\n\n const lines: string[] = [];\n\n for (const [sqref, cfs] of grouped) {\n lines.push(`<conditionalFormatting sqref=\"${this._escapeXml(sqref)}\">`);\n\n for (const cf of cfs) {\n const hasDxf = cf.hasFont() || cf.hasFill() || cf.hasBorder() || cf.numberFormat != null;\n let cfDxfId: number | null = null;\n\n if (hasDxf) {\n cfDxfId = dxfId++;\n dxfEntries.push(this._formatDxfEntry(cf));\n }\n\n lines.push(this._formatCfRuleXml(cf, cfDxfId));\n }\n\n lines.push('</conditionalFormatting>');\n }\n\n return { xml: lines.join(''), dxfEntries };\n }\n\n private _formatCfRuleXml(cf: ConditionalFormat, dxfId: number | null): string {\n const attrs: string[] = [];\n const ruleType = cf.type ?? 'cellIs';\n attrs.push(`type=\"${TYPE_MAP[ruleType] ?? ruleType}\"`);\n\n if (dxfId !== null) {\n attrs.push(`dxfId=\"${dxfId}\"`);\n }\n\n attrs.push(`priority=\"${cf.priority}\"`);\n\n if (cf.stopIfTrue) {\n attrs.push('stopIfTrue=\"1\"');\n }\n\n // Operator\n if (cf.operator && (ruleType === 'cellIs' || ruleType === 'expression')) {\n attrs.push(`operator=\"${cf.operator}\"`);\n }\n\n // Text\n if (cf.textFormula && ['containsText', 'notContainsText', 'beginsWith', 'endsWith'].includes(ruleType)) {\n attrs.push(`text=\"${this._escapeXml(cf.textFormula)}\"`);\n }\n\n // TimePeriod\n if (cf.dateOperator && ruleType === 'timePeriod') {\n attrs.push(`timePeriod=\"${cf.dateOperator}\"`);\n }\n\n // aboveAverage\n if (ruleType === 'aboveAverage') {\n if (cf.above === false) {\n attrs.push('aboveAverage=\"0\"');\n }\n if (cf.stdDev > 0) {\n attrs.push(`stdDev=\"${cf.stdDev}\"`);\n }\n }\n\n // top10\n if (ruleType === 'top10') {\n if (cf.top === false) {\n attrs.push('bottom=\"1\"');\n }\n if (cf.percent) {\n attrs.push('percent=\"1\"');\n }\n attrs.push(`rank=\"${cf.rank}\"`);\n }\n\n let xml = `<cfRule ${attrs.join(' ')}>`;\n\n // Formulas\n if (cf.formula1 != null) {\n xml += `<formula>${this._escapeXml(cf.formula1)}</formula>`;\n }\n if (cf.formula2 != null) {\n xml += `<formula>${this._escapeXml(cf.formula2)}</formula>`;\n }\n\n // Auto-generate text rule formulas\n if (!cf.formula1 && cf.textFormula) {\n const firstCell = this._getFirstCellFromRange(cf.range ?? 'A1');\n const textFormula = this._buildTextRuleFormula(ruleType, cf.textFormula, firstCell);\n if (textFormula) {\n xml += `<formula>${this._escapeXml(textFormula)}</formula>`;\n }\n }\n\n // Color scale\n if (ruleType === 'colorScale' && cf.colorScaleType) {\n xml += this._formatColorScaleXml(cf);\n }\n\n // Data bar\n if (ruleType === 'dataBar' && cf.barColor) {\n xml += this._formatDataBarXml(cf);\n }\n\n // Icon set\n if (ruleType === 'iconSet' && cf.iconSetType) {\n xml += this._formatIconSetXml(cf);\n }\n\n xml += '</cfRule>';\n return xml;\n }\n\n private _formatColorScaleXml(cf: ConditionalFormat): string {\n let xml = '<colorScale>';\n if (cf.colorScaleType === '2color') {\n xml += '<cfvo type=\"min\"/><cfvo type=\"max\"/>';\n xml += `<color rgb=\"${cf.minColor ?? 'FFF8696B'}\"/>`;\n xml += `<color rgb=\"${cf.maxColor ?? 'FF63BE7B'}\"/>`;\n } else {\n xml += '<cfvo type=\"min\"/><cfvo type=\"percentile\" val=\"50\"/><cfvo type=\"max\"/>';\n xml += `<color rgb=\"${cf.minColor ?? 'FFF8696B'}\"/>`;\n xml += `<color rgb=\"${cf.midColor ?? 'FFFFEB84'}\"/>`;\n xml += `<color rgb=\"${cf.maxColor ?? 'FF63BE7B'}\"/>`;\n }\n xml += '</colorScale>';\n return xml;\n }\n\n private _formatDataBarXml(cf: ConditionalFormat): string {\n let xml = '<dataBar>';\n xml += '<cfvo type=\"min\"/><cfvo type=\"max\"/>';\n xml += `<color rgb=\"${cf.barColor ?? 'FF638EC6'}\"/>`;\n xml += '</dataBar>';\n return xml;\n }\n\n private _formatIconSetXml(cf: ConditionalFormat): string {\n const attrs: string[] = [];\n if (cf.iconSetType) attrs.push(`iconSet=\"${cf.iconSetType}\"`);\n if (cf.reverseIcons) attrs.push('reverse=\"1\"');\n if (cf.showIconOnly) attrs.push('showValue=\"0\"');\n\n let xml = `<iconSet ${attrs.join(' ')}>`;\n // Default 3-level thresholds\n xml += '<cfvo type=\"percent\" val=\"0\"/>';\n xml += '<cfvo type=\"percent\" val=\"33\"/>';\n xml += '<cfvo type=\"percent\" val=\"67\"/>';\n xml += '</iconSet>';\n return xml;\n }\n\n private _formatDxfEntry(cf: ConditionalFormat): string {\n let xml = '<dxf>';\n\n if (cf.hasFont()) {\n const f = cf.font;\n xml += '<font>';\n if (f.bold) xml += '<b/>';\n if (f.italic) xml += '<i/>';\n if (f.underline) xml += '<u/>';\n if (f.strikethrough) xml += '<strike/>';\n if (f.color && f.color !== 'FF000000') {\n xml += `<color rgb=\"${f.color}\"/>`;\n }\n if (f.name && f.name !== 'Calibri') {\n xml += `<name val=\"${this._escapeXml(f.name)}\"/>`;\n }\n if (f.size && f.size !== 11) {\n xml += `<sz val=\"${f.size}\"/>`;\n }\n xml += '</font>';\n }\n\n if (cf.hasFill()) {\n const fl = cf.fill;\n xml += '<fill><patternFill';\n if (fl.patternType !== 'none') {\n xml += ` patternType=\"${fl.patternType}\"`;\n }\n xml += '>';\n if (fl.foregroundColor && fl.foregroundColor !== 'FFFFFFFF') {\n xml += `<fgColor rgb=\"${fl.foregroundColor}\"/>`;\n }\n if (fl.backgroundColor && fl.backgroundColor !== 'FFFFFFFF') {\n xml += `<bgColor rgb=\"${fl.backgroundColor}\"/>`;\n }\n xml += '</patternFill></fill>';\n }\n\n if (cf.hasBorder()) {\n const b = cf.border;\n xml += '<border>';\n const sides = ['left', 'right', 'top', 'bottom'] as const;\n for (const side of sides) {\n const s = b[side];\n if (s.lineStyle !== 'none') {\n xml += `<${side} style=\"${s.lineStyle}\">`;\n xml += `<color rgb=\"${s.color}\"/>`;\n xml += `</${side}>`;\n } else {\n xml += `<${side}/>`;\n }\n }\n xml += '</border>';\n }\n\n if (cf.numberFormat != null) {\n xml += `<numFmt formatCode=\"${this._escapeXml(cf.numberFormat)}\"/>`;\n }\n\n xml += '</dxf>';\n return xml;\n }\n\n private _getFirstCellFromRange(range: string): string {\n const colonIdx = range.indexOf(':');\n if (colonIdx > 0) return range.substring(0, colonIdx);\n return range;\n }\n\n private _buildTextRuleFormula(ruleType: string, textValue: string, firstCell: string): string | null {\n switch (ruleType) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${textValue}\",${firstCell})))`;\n case 'notContainsText':\n return `ISERROR(SEARCH(\"${textValue}\",${firstCell}))`;\n case 'beginsWith':\n return `LEFT(${firstCell},${textValue.length})=\"${textValue}\"`;\n case 'endsWith':\n return `RIGHT(${firstCell},${textValue.length})=\"${textValue}\"`;\n default:\n return null;\n }\n }\n}\n","/**\n * XML Hyperlink Handler\n *\n * Loads and saves hyperlinks from/to XLSX worksheet XML and .rels files.\n */\n\nimport { Hyperlink, HyperlinkCollection } from '../features/Hyperlink';\n\nfunction ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val == null) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction attr(elem: any, name: string, defaultVal = ''): string {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : defaultVal;\n}\n\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n// ==================== Loader ====================\n\nexport class HyperlinkXmlLoader {\n loadHyperlinks(\n wsRoot: any,\n collection: HyperlinkCollection,\n relationships: Map<string, string>,\n ): void {\n const hlElems = ensureArray(wsRoot?.hyperlinks?.hyperlink);\n\n for (const hlElem of hlElems) {\n this._loadHyperlink(hlElem, collection, relationships);\n }\n }\n\n loadRelationships(relsXml: any): Map<string, string> {\n const rels = new Map<string, string>();\n if (!relsXml) return rels;\n\n const relationships = ensureArray(relsXml?.Relationships?.Relationship);\n for (const rel of relationships) {\n const id = attr(rel, 'Id', '');\n const target = attr(rel, 'Target', '');\n const type = attr(rel, 'Type', '');\n if (id && type.includes('hyperlink')) {\n rels.set(id, target);\n }\n }\n return rels;\n }\n\n private _loadHyperlink(\n elem: any,\n collection: HyperlinkCollection,\n relationships: Map<string, string>,\n ): void {\n const ref = attr(elem, 'ref', '');\n if (!ref) return;\n\n let address = '';\n let subAddress = '';\n const display = attr(elem, 'display', '');\n const tooltip = attr(elem, 'tooltip', '');\n\n // Check for relationship-based hyperlink (external)\n const rId = attr(elem, 'r:id', '') || attr(elem, 'id', '');\n if (rId && relationships.has(rId)) {\n address = relationships.get(rId)!;\n }\n\n // Internal location\n const location = attr(elem, 'location', '');\n if (location) {\n subAddress = location;\n }\n\n const hl = new Hyperlink(ref, address, subAddress, display, tooltip);\n collection.addHyperlink(hl);\n }\n}\n\n// ==================== Saver ====================\n\nexport interface HyperlinkRelationship {\n rId: string;\n target: string;\n}\n\nexport class HyperlinkXmlSaver {\n private _relIdCounter = 1;\n\n formatHyperlinksXml(collection: HyperlinkCollection): string {\n if (collection.count === 0) return '';\n\n const lines: string[] = ['<hyperlinks>'];\n\n for (const hl of collection) {\n if (hl.isDeleted) continue;\n lines.push(this._formatHyperlinkXml(hl));\n }\n\n lines.push('</hyperlinks>');\n return lines.join('');\n }\n\n private _formatHyperlinkXml(hl: Hyperlink): string {\n const attrs: string[] = [`ref=\"${escapeXml(hl.range)}\"`];\n\n if (hl.type === 'external' || hl.type === 'email') {\n const rId = `rId${this._relIdCounter++}`;\n attrs.push(`r:id=\"${rId}\"`);\n }\n\n if (hl.subAddress) {\n attrs.push(`location=\"${escapeXml(hl.subAddress)}\"`);\n }\n\n if (hl.textToDisplay) {\n attrs.push(`display=\"${escapeXml(hl.textToDisplay)}\"`);\n }\n\n if (hl.screenTip) {\n attrs.push(`tooltip=\"${escapeXml(hl.screenTip)}\"`);\n }\n\n return `<hyperlink ${attrs.join(' ')}/>`;\n }\n\n getHyperlinkRelationships(collection: HyperlinkCollection): HyperlinkRelationship[] {\n const rels: HyperlinkRelationship[] = [];\n // Re-use the same starting counter that was set via resetRelationshipCounter\n // so that rIds in .rels match those written in the worksheet XML\n let relId = this._relIdCounter;\n\n // Reset counter for next use since formatHyperlinksXml already advanced it\n // We need to rebuild from the same starting point\n // Actually, _relIdCounter was already advanced by formatHyperlinksXml,\n // so we compute the starting point from the current value minus the count of external links\n let externalCount = 0;\n for (const hl of collection) {\n if (hl.isDeleted) continue;\n if (hl.type === 'external' || hl.type === 'email') externalCount++;\n }\n const startRelId = this._relIdCounter - externalCount;\n\n let rid = startRelId;\n for (const hl of collection) {\n if (hl.isDeleted) continue;\n if (hl.type === 'external' || hl.type === 'email') {\n rels.push({\n rId: `rId${rid++}`,\n target: hl.address,\n });\n }\n }\n\n return rels;\n }\n\n resetRelationshipCounter(startRelId = 1): void {\n this._relIdCounter = startRelId;\n }\n}\n\n// ==================== Relationship Writer ====================\n\nexport class HyperlinkRelationshipWriter {\n static formatRelationshipsXml(\n relationships: HyperlinkRelationship[],\n existingRels: string[] = [],\n ): string {\n const lines: string[] = [];\n\n // Include existing relationships\n for (const rel of existingRels) {\n lines.push(rel);\n }\n\n // Add hyperlink relationships\n for (const rel of relationships) {\n lines.push(\n `<Relationship Id=\"${rel.rId}\" ` +\n `Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" ` +\n `Target=\"${escapeXml(rel.target)}\" TargetMode=\"External\"/>`,\n );\n }\n\n return lines.join('');\n }\n}\n","/**\n * XML AutoFilter Saver\n *\n * Writes auto-filter settings to XLSX worksheet XML.\n */\n\nimport { AutoFilter } from '../features/AutoFilter';\n\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\nexport class AutoFilterXmlSaver {\n formatAutoFilterXml(autoFilter: AutoFilter): string {\n if (!autoFilter.range) return '';\n\n const lines: string[] = [];\n lines.push(`<autoFilter ref=\"${escapeXml(autoFilter.range)}\">`);\n\n // Sort filter columns by column index\n const sortedCols = Array.from(autoFilter.filterColumns.entries()).sort(\n (a, b) => a[0] - b[0],\n );\n\n for (const [, fc] of sortedCols) {\n const hasContent =\n fc.filters.length > 0 ||\n fc.customFilters.length > 0 ||\n fc.colorFilter !== null ||\n fc.dynamicFilter !== null ||\n fc.top10Filter !== null;\n\n if (!hasContent && fc.filterButton) continue;\n\n const fcAttrs: string[] = [`colId=\"${fc.colId}\"`];\n if (!fc.filterButton) {\n fcAttrs.push('hiddenButton=\"1\"');\n }\n\n lines.push(`<filterColumn ${fcAttrs.join(' ')}>`);\n\n // Value filters\n if (fc.filters.length > 0) {\n lines.push('<filters>');\n for (const val of fc.filters) {\n lines.push(`<filter val=\"${escapeXml(val)}\"/>`);\n }\n lines.push('</filters>');\n }\n\n // Custom filters\n if (fc.customFilters.length > 0) {\n const andAttr = fc.customFilters.length > 1 ? ' and=\"1\"' : '';\n lines.push(`<customFilters${andAttr}>`);\n for (const cf of fc.customFilters) {\n lines.push(`<customFilter operator=\"${escapeXml(cf.operator)}\" val=\"${escapeXml(cf.value)}\"/>`);\n }\n lines.push('</customFilters>');\n }\n\n // Color filter\n if (fc.colorFilter) {\n const cellColorAttr = fc.colorFilter.cellColor ? '' : ' cellColor=\"0\"';\n lines.push(`<colorFilter dxfId=\"${escapeXml(fc.colorFilter.color)}\"${cellColorAttr}/>`);\n }\n\n // Dynamic filter\n if (fc.dynamicFilter) {\n const valAttr = fc.dynamicFilter.value ? ` val=\"${escapeXml(fc.dynamicFilter.value)}\"` : '';\n lines.push(`<dynamicFilter type=\"${escapeXml(fc.dynamicFilter.type)}\"${valAttr}/>`);\n }\n\n // Top10 filter\n if (fc.top10Filter) {\n const attrs: string[] = [];\n if (!fc.top10Filter.top) attrs.push('top=\"0\"');\n if (fc.top10Filter.percent) attrs.push('percent=\"1\"');\n attrs.push(`val=\"${fc.top10Filter.val}\"`);\n lines.push(`<top10 ${attrs.join(' ')}/>`);\n }\n\n lines.push('</filterColumn>');\n }\n\n // Sort state\n if (autoFilter.sortState) {\n const ss = autoFilter.sortState;\n const sortRef = this._calculateSortRefs(autoFilter.range, ss.columnIndex);\n lines.push(`<sortState ref=\"${escapeXml(ss.ref)}\">`);\n const descAttr = ss.ascending ? '' : ' descending=\"1\"';\n lines.push(`<sortCondition ref=\"${escapeXml(sortRef)}\"${descAttr}/>`);\n lines.push('</sortState>');\n }\n\n lines.push('</autoFilter>');\n return lines.join('');\n }\n\n private _calculateSortRefs(filterRange: string, columnIndex: number): string {\n const parts = filterRange.split(':');\n if (parts.length !== 2) return filterRange;\n\n const startCol = this._colFromRef(parts[0]);\n const targetCol = startCol + columnIndex;\n const colLetter = this._colToLetter(targetCol);\n\n const startRow = this._rowFromRef(parts[0]);\n const endRow = this._rowFromRef(parts[1]);\n\n return `${colLetter}${startRow}:${colLetter}${endRow}`;\n }\n\n private _colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/i);\n if (!match) return 0;\n let col = 0;\n for (const ch of match[1].toUpperCase()) {\n col = col * 26 + (ch.charCodeAt(0) - 64);\n }\n return col - 1;\n }\n\n private _rowFromRef(ref: string): number {\n const match = ref.match(/(\\d+)$/);\n return match ? parseInt(match[1], 10) : 1;\n }\n\n private _colToLetter(col: number): string {\n let result = '';\n let c = col;\n while (c >= 0) {\n result = String.fromCharCode(65 + (c % 26)) + result;\n c = Math.floor(c / 26) - 1;\n }\n return result;\n }\n}\n","/**\n * Comment XML Handler\n *\n * Reads and writes Excel comments (annotations) in XLSX format.\n * Comments are stored in xl/comments{n}.xml with VML drawings for positioning.\n */\n\nimport type JSZip from 'jszip';\nimport type { Worksheet } from '../core/Worksheet';\n\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n/** Sort key for cell references: row-major order */\nfunction cellReferenceSortKey(ref: string): [number, number] {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i);\n if (!match) return [0, 0];\n const col = match[1].toUpperCase();\n const row = parseInt(match[2], 10);\n let colNum = 0;\n for (const ch of col) {\n colNum = colNum * 26 + (ch.charCodeAt(0) - 64);\n }\n return [row, colNum];\n}\n\nfunction colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/i);\n if (!match) return 0;\n let col = 0;\n for (const ch of match[1].toUpperCase()) {\n col = col * 26 + (ch.charCodeAt(0) - 64);\n }\n return col - 1; // 0-based\n}\n\nfunction rowFromRef(ref: string): number {\n const match = ref.match(/(\\d+)$/);\n return match ? parseInt(match[1], 10) - 1 : 0; // 0-based\n}\n\n// ==================== Writer ====================\n\nexport class CommentXmlWriter {\n /**\n * Check if worksheet has any comments\n */\n static worksheetHasComments(worksheet: Worksheet): boolean {\n const cellsObj = (worksheet as any)._cells;\n const cells: Map<string, any> = cellsObj._cells ?? cellsObj;\n for (const cell of cells.values()) {\n if (cell.comment) return true;\n }\n return false;\n }\n\n /**\n * Write comments XML to the ZIP archive\n */\n writeCommentsXml(zip: JSZip, worksheet: Worksheet, sheetNum: number): void {\n const cellsObj = (worksheet as any)._cells;\n const cells: Map<string, any> = cellsObj._cells ?? cellsObj;\n const commentCells: Array<{ ref: string; text: string; author: string }> = [];\n\n for (const [ref, cell] of cells.entries()) {\n if (cell.comment) {\n commentCells.push({\n ref,\n text: cell.comment.text ?? '',\n author: cell.comment.author ?? 'None',\n });\n }\n }\n\n if (commentCells.length === 0) return;\n\n // Sort by cell reference\n commentCells.sort((a, b) => {\n const ka = cellReferenceSortKey(a.ref);\n const kb = cellReferenceSortKey(b.ref);\n return ka[0] - kb[0] || ka[1] - kb[1];\n });\n\n // Collect unique authors\n const authors = [...new Set(commentCells.map((c) => c.author))];\n\n const lines: string[] = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>',\n '<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n '<authors>',\n ];\n\n for (const author of authors) {\n lines.push(`<author>${escapeXml(author)}</author>`);\n }\n\n lines.push('</authors>');\n lines.push('<commentList>');\n\n for (const cc of commentCells) {\n const authorIdx = authors.indexOf(cc.author);\n lines.push(`<comment ref=\"${cc.ref}\" authorId=\"${authorIdx}\">`);\n lines.push('<text>');\n lines.push(`<r><t>${escapeXml(cc.text)}</t></r>`);\n lines.push('</text>');\n lines.push('</comment>');\n }\n\n lines.push('</commentList>');\n lines.push('</comments>');\n\n zip.file(`xl/comments${sheetNum}.xml`, lines.join(''));\n }\n\n /**\n * Write VML drawing XML for comment shapes\n */\n writeVmlDrawingXml(zip: JSZip, worksheet: Worksheet, sheetNum: number): void {\n const cellsObj = (worksheet as any)._cells;\n const cells: Map<string, any> = cellsObj._cells ?? cellsObj;\n const commentCells: Array<{ ref: string; width: number; height: number }> = [];\n\n for (const [ref, cell] of cells.entries()) {\n if (cell.comment) {\n const width = cell.comment.width ?? 108;\n const height = cell.comment.height ?? 59;\n commentCells.push({ ref, width, height });\n }\n }\n\n if (commentCells.length === 0) return;\n\n commentCells.sort((a, b) => {\n const ka = cellReferenceSortKey(a.ref);\n const kb = cellReferenceSortKey(b.ref);\n return ka[0] - kb[0] || ka[1] - kb[1];\n });\n\n const lines: string[] = [\n '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">',\n '<o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout>',\n '<v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\">',\n '<v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/>',\n '</v:shapetype>',\n ];\n\n for (let i = 0; i < commentCells.length; i++) {\n const cc = commentCells[i];\n const row = rowFromRef(cc.ref);\n const col = colFromRef(cc.ref);\n const anchor = this._calculateAnchor(row, col, cc.width, cc.height);\n\n lines.push(`<v:shape id=\"_x0000_s${1025 + i}\" type=\"#_x0000_t202\" `);\n lines.push(`style=\"position:absolute;margin-left:0;margin-top:0;width:${cc.width}pt;height:${cc.height}pt;z-index:${i + 1};visibility:hidden\" `);\n lines.push('fillcolor=\"#ffffe1\" o:insetmode=\"auto\">');\n lines.push('<v:fill color=\"#ffffe1\"/>');\n lines.push('<v:shadow on=\"t\" color=\"black\" obscured=\"t\"/>');\n lines.push('<v:path o:connecttype=\"none\"/>');\n lines.push('<v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox>');\n lines.push('<x:ClientData ObjectType=\"Note\">');\n lines.push('<x:MoveWithCells/>');\n lines.push('<x:SizeWithCells/>');\n lines.push(`<x:Anchor>${anchor}</x:Anchor>`);\n lines.push('<x:AutoFill>False</x:AutoFill>');\n lines.push(`<x:Row>${row}</x:Row>`);\n lines.push(`<x:Column>${col}</x:Column>`);\n lines.push('</x:ClientData>');\n lines.push('</v:shape>');\n }\n\n lines.push('</xml>');\n zip.file(`xl/drawings/vmlDrawing${sheetNum}.vml`, lines.join(''));\n }\n\n private _calculateAnchor(row: number, col: number, width: number, height: number): string {\n // Calculate anchor coordinates for VML\n // Format: leftCol, leftOffset, topRow, topOffset, rightCol, rightOffset, bottomRow, bottomOffset\n const colWidth = 64; // default column width in pixels approx\n const rowHeight = 20; // default row height in pixels approx\n\n const leftCol = col + 1;\n const leftOffset = 15;\n const topRow = row;\n const topOffset = 10;\n\n const widthPx = Math.round(width * 1.33);\n const heightPx = Math.round(height * 1.33);\n\n const rightCol = leftCol + Math.max(1, Math.floor(widthPx / colWidth));\n const rightOffset = widthPx % colWidth;\n const bottomRow = topRow + Math.max(1, Math.floor(heightPx / rowHeight));\n const bottomOffset = heightPx % rowHeight;\n\n return `${leftCol}, ${leftOffset}, ${topRow}, ${topOffset}, ${rightCol}, ${rightOffset}, ${bottomRow}, ${bottomOffset}`;\n }\n}\n\n// ==================== Reader ====================\n\nexport class CommentXmlReader {\n loadComments(zip: JSZip, worksheet: Worksheet, sheetNum: number): void {\n const commentsFile = zip.file(`xl/comments${sheetNum}.xml`);\n if (!commentsFile) return;\n\n // We'll load this asynchronously in the main loader\n // This is a sync placeholder - actual loading happens through the XmlLoader integration\n }\n\n /**\n * Parse comments XML and apply to worksheet\n */\n parseAndApplyComments(commentsRoot: any, worksheet: Worksheet): void {\n if (!commentsRoot?.comments) return;\n\n const comments = commentsRoot.comments;\n\n // Load authors\n const authors: string[] = [];\n const authorElems = this._ensureArray(comments?.authors?.author);\n for (const a of authorElems) {\n authors.push(typeof a === 'string' ? a : String(a));\n }\n\n // Load comment list\n const commentElems = this._ensureArray(comments?.commentList?.comment);\n for (const ce of commentElems) {\n const ref = ce?.['@_ref'];\n if (!ref) continue;\n\n const authorId = parseInt(ce?.['@_authorId'] ?? '0', 10);\n const author = authors[authorId] ?? 'None';\n\n // Extract text\n let text = '';\n const textElem = ce?.text;\n if (textElem) {\n const runs = this._ensureArray(textElem.r);\n if (runs.length > 0) {\n for (const r of runs) {\n const tVal = r?.t;\n if (tVal != null) {\n // t may be an array (from isArray parser config) or a single value\n const tArr = Array.isArray(tVal) ? tVal : [tVal];\n for (const t of tArr) {\n if (t != null) {\n text += typeof t === 'object' ? (t['#text'] ?? '') : String(t);\n }\n }\n }\n }\n } else if (textElem.t != null) {\n // t may be an array here too\n const tArr = Array.isArray(textElem.t) ? textElem.t : [textElem.t];\n for (const t of tArr) {\n if (t != null) {\n text += typeof t === 'object' ? (t['#text'] ?? '') : String(t);\n }\n }\n }\n }\n\n if (text) {\n // Access the cells map to set comment\n const cellsObj2 = (worksheet as any)._cells;\n const cells2: Map<string, any> = cellsObj2._cells ?? cellsObj2;\n const cell = cells2.get(ref);\n if (cell) {\n cell.setComment(text, author);\n } else {\n // Create cell with comment\n const { Cell } = require('../core/Cell');\n const newCell = new Cell();\n newCell.setComment(text, author);\n cells2.set(ref, newCell);\n }\n }\n }\n }\n\n /**\n * Parse VML drawing to get comment dimensions\n */\n parseAndApplyVmlDrawing(vmlContent: string, worksheet: Worksheet): void {\n // Simple regex-based parsing of VML to extract comment sizes\n const shapeRegex = /<v:shape[^>]*>[\\s\\S]*?<\\/v:shape>/gi;\n let match;\n\n while ((match = shapeRegex.exec(vmlContent)) !== null) {\n const shape = match[0];\n\n // Extract row and column\n const rowMatch = shape.match(/<x:Row>(\\d+)<\\/x:Row>/i);\n const colMatch = shape.match(/<x:Column>(\\d+)<\\/x:Column>/i);\n if (!rowMatch || !colMatch) continue;\n\n const row = parseInt(rowMatch[1], 10);\n const col = parseInt(colMatch[1], 10);\n\n // Extract width/height from style\n const widthMatch = shape.match(/width:\\s*([\\d.]+)pt/i);\n const heightMatch = shape.match(/height:\\s*([\\d.]+)pt/i);\n\n if (widthMatch && heightMatch) {\n const width = parseFloat(widthMatch[1]);\n const height = parseFloat(heightMatch[1]);\n\n // Convert col/row to cell reference\n const colLetter = this._colToLetter(col);\n const ref = `${colLetter}${row + 1}`;\n\n const cellsObj3 = (worksheet as any)._cells;\n const cells3: Map<string, any> = cellsObj3._cells ?? cellsObj3;\n const cell = cells3.get(ref);\n if (cell?.comment) {\n cell.comment.width = width;\n cell.comment.height = height;\n }\n }\n }\n }\n\n private _ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val == null) return [];\n return Array.isArray(val) ? val : [val];\n }\n\n private _colToLetter(col: number): string {\n let result = '';\n let c = col;\n while (c >= 0) {\n result = String.fromCharCode(65 + (c % 26)) + result;\n c = Math.floor(c / 26) - 1;\n }\n return result;\n }\n}\n","/**\n * XLSX XML Saver – writes a Workbook to an OOXML ZIP (.xlsx) archive.\n *\n * Ported from Python `xml_saver.py`. Phase 2 scope:\n * ✔ Content types, relationships, workbook.xml\n * ✔ Worksheet XML (sheetData, dimension, cols, merged cells, freeze panes,\n * sheet protection, page setup, page margins)\n * ✔ Styles XML (fonts, fills, borders, alignments, protection, number formats, cellXfs)\n * ✔ Shared strings XML\n * ✔ Core & extended properties (docProps)\n * ✗ Charts, pictures, shapes, tables, sparklines, conditional formatting,\n * hyperlinks, data validations, comments, autofilter, calc chain (future phases)\n *\n * @module io/XmlSaver\n */\n\nimport JSZip from 'jszip';\nimport { Workbook } from '../core/Workbook';\nimport { Worksheet } from '../core/Worksheet';\nimport { Cell, CellValue } from '../core/Cell';\nimport { Cells } from '../core/Cells';\nimport { SharedStringTable } from './SharedStrings';\nimport {\n CellValueHandler,\n CELL_TYPE_STRING,\n CELL_TYPE_BOOLEAN,\n CELL_TYPE_NUMBER,\n CELL_TYPE_ERROR,\n} from './CellValueHandler';\nimport {\n Font,\n Fill,\n Borders,\n Alignment,\n Protection,\n NumberFormat,\n Style,\n} from '../styling/Style';\n\n// Phase 4 feature savers\nimport { DataValidationXmlSaver } from './XmlDataValidationSaver';\nimport { ConditionalFormatXmlSaver } from './XmlConditionalFormatSaver';\nimport { HyperlinkXmlSaver, HyperlinkRelationshipWriter } from './XmlHyperlinkHandler';\nimport { AutoFilterXmlSaver } from './XmlAutoFilterSaver';\nimport { CommentXmlWriter } from './CommentXml';\n\n// ── Style data interfaces (internal, dict-like) ────────────────────────────\n\ninterface FontData {\n name: string;\n size: number;\n color: string;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n}\n\ninterface FillData {\n patternType: string;\n fgColor: string;\n bgColor: string;\n}\n\ninterface BorderSideData {\n style: string;\n color: string;\n}\n\ninterface BorderData {\n top: BorderSideData;\n bottom: BorderSideData;\n left: BorderSideData;\n right: BorderSideData;\n}\n\ninterface AlignmentData {\n horizontal: string;\n vertical: string;\n wrapText: boolean;\n indent: number;\n textRotation: number;\n shrinkToFit: boolean;\n readingOrder: number;\n relativeIndent: number;\n}\n\ninterface ProtectionData {\n locked: boolean;\n hidden: boolean;\n}\n\n/** A cell style composite key: [fontIdx, fillIdx, borderIdx, numFmtIdx, alignIdx, protIdx] */\ntype CellStyleKey = [number, number, number, number, number, number];\n\n// ── XMLSaver class ─────────────────────────────────────────────────────────\n\nexport class XmlSaver {\n private _workbook: Workbook;\n private _sharedStringTable: SharedStringTable;\n\n // Style registries: index → data\n private _fontStyles: Map<number, FontData> = new Map();\n private _fillStyles: Map<number, FillData> = new Map();\n private _borderStyles: Map<number, BorderData> = new Map();\n private _alignmentStyles: Map<number, AlignmentData> = new Map();\n private _protectionStyles: Map<number, ProtectionData> = new Map();\n private _numFormats: Map<number, string> = new Map();\n\n // Composite cell style key → xf index\n private _cellStyles: Map<string, number> = new Map();\n\n // Phase 4: DXF entries collected from conditional formatting\n private _dxfEntries: string[] = [];\n\n constructor(workbook: Workbook) {\n this._workbook = workbook;\n this._sharedStringTable = new SharedStringTable();\n }\n\n // ── Public API ──────────────────────────────────────────────────────────\n\n /**\n * Saves the workbook as an XLSX buffer (in-memory ZIP).\n *\n * @returns A `Buffer` containing the XLSX data.\n */\n async saveToBuffer(): Promise<Buffer> {\n const zip = new JSZip();\n\n // 1. Content Types\n this._writeContentTypes(zip);\n\n // 2. Root relationships\n this._writeRootRelationships(zip);\n\n // 3. Workbook relationships\n this._writeWorkbookRelationships(zip);\n\n // 4. Workbook XML\n this._writeWorkbookXml(zip);\n\n // 5. Worksheets (this populates shared strings + style registries + dxf entries)\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n this._writeWorksheetXml(zip, this._workbook.worksheets[i], i + 1);\n }\n\n // 5b. Comments (after worksheets, writes xl/commentsN.xml + VML drawings)\n const commentWriter = new CommentXmlWriter();\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n const ws = this._workbook.worksheets[i];\n if (CommentXmlWriter.worksheetHasComments(ws)) {\n commentWriter.writeCommentsXml(zip, ws, i + 1);\n commentWriter.writeVmlDrawingXml(zip, ws, i + 1);\n }\n }\n\n // 6. Styles XML (must come after worksheets so all styles + dxf entries are registered)\n this._writeStylesXml(zip);\n\n // 7. Shared strings XML\n this._writeSharedStringsXml(zip);\n\n // 8. Theme XML (minimal – always write to satisfy Excel)\n this._writeThemeXml(zip);\n\n // 9. Document properties\n this._writeCorePropertiesXml(zip);\n this._writeAppPropertiesXml(zip);\n\n // Generate ZIP buffer\n const buf = await zip.generateAsync({\n type: 'nodebuffer',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n return buf;\n }\n\n /**\n * Saves the workbook to a file path.\n *\n * @param filePath - Destination file path.\n */\n async saveToFile(filePath: string): Promise<void> {\n const fs = await import('fs');\n const path = await import('path');\n\n // Ensure output directory exists\n const dir = path.dirname(filePath);\n if (dir && dir !== '.') {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const buffer = await this.saveToBuffer();\n fs.writeFileSync(filePath, buffer);\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // [Content_Types].xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeContentTypes(zip: JSZip): void {\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">',\n );\n\n // Default extensions\n lines.push(\n ' <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>',\n );\n lines.push(' <Default Extension=\"xml\" ContentType=\"application/xml\"/>');\n\n // Overrides\n lines.push(\n ' <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>',\n );\n lines.push(\n ' <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>',\n );\n lines.push(\n ' <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>',\n );\n\n // Worksheet overrides\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n lines.push(\n ` <Override PartName=\"/xl/worksheets/sheet${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>`,\n );\n }\n\n // Comment and VML drawing overrides\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n const ws = this._workbook.worksheets[i];\n if (CommentXmlWriter.worksheetHasComments(ws)) {\n lines.push(\n ` <Override PartName=\"/xl/comments${i + 1}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\"/>`,\n );\n lines.push(\n ` <Override PartName=\"/xl/drawings/vmlDrawing${i + 1}.vml\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>`,\n );\n }\n }\n\n // Theme override\n lines.push(\n ' <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>',\n );\n\n // Document properties\n lines.push(\n ' <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>',\n );\n lines.push(\n ' <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>',\n );\n\n lines.push('</Types>');\n zip.file('[Content_Types].xml', lines.join('\\n'));\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // _rels/.rels\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeRootRelationships(zip: JSZip): void {\n const content = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>',\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">',\n ' <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>',\n ' <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>',\n ' <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>',\n '</Relationships>',\n ].join('\\n');\n zip.file('_rels/.rels', content);\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/_rels/workbook.xml.rels\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeWorkbookRelationships(zip: JSZip): void {\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">',\n );\n\n // Worksheet relationships\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n lines.push(\n ` <Relationship Id=\"rId${i + 1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet${i + 1}.xml\"/>`,\n );\n }\n\n // Styles, shared strings, theme\n lines.push(\n ' <Relationship Id=\"rId100\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>',\n );\n lines.push(\n ' <Relationship Id=\"rId101\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>',\n );\n lines.push(\n ' <Relationship Id=\"rId102\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>',\n );\n\n lines.push('</Relationships>');\n zip.file('xl/_rels/workbook.xml.rels', lines.join('\\n'));\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/workbook.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeWorkbookXml(zip: JSZip): void {\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n );\n\n // File version\n lines.push(\n ' <fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"9302\"/>',\n );\n\n // Workbook properties\n lines.push(' <workbookPr defaultThemeVersion=\"124226\"/>');\n\n // Book views\n const activeTab = this._workbook.properties.view.activeTab;\n lines.push(' <bookViews>');\n lines.push(\n ` <workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"16384\" windowHeight=\"8192\" activeTab=\"${activeTab}\"/>`,\n );\n lines.push(' </bookViews>');\n\n // Sheets\n lines.push(' <sheets>');\n for (let i = 0; i < this._workbook.worksheets.length; i++) {\n const ws = this._workbook.worksheets[i];\n let stateAttr = '';\n if (ws.visible === false) {\n stateAttr = ' state=\"hidden\"';\n } else if (ws.visible === 'veryHidden') {\n stateAttr = ' state=\"veryHidden\"';\n }\n lines.push(\n ` <sheet name=\"${escapeXml(ws.name)}\" sheetId=\"${i + 1}\"${stateAttr} r:id=\"rId${i + 1}\"/>`,\n );\n }\n lines.push(' </sheets>');\n\n // Defined names (ECMA-376 Section 18.2.6)\n const definedNames = this._workbook.properties.definedNames;\n if (definedNames.count > 0) {\n lines.push(' <definedNames>');\n for (const dn of definedNames) {\n const dnAttrs: string[] = [`name=\"${escapeXml(dn.name)}\"`];\n if (dn.localSheetId !== null) {\n dnAttrs.push(`localSheetId=\"${dn.localSheetId}\"`);\n }\n if (dn.hidden) {\n dnAttrs.push('hidden=\"1\"');\n }\n if (dn.comment) {\n dnAttrs.push(`comment=\"${escapeXml(dn.comment)}\"`);\n }\n lines.push(` <definedName ${dnAttrs.join(' ')}>${escapeXml(dn.refersTo)}</definedName>`);\n }\n lines.push(' </definedNames>');\n }\n\n // Calculation properties\n const calcMode = this._workbook.properties.calcMode || 'auto';\n lines.push(` <calcPr calcId=\"145621\" calcMode=\"${calcMode}\"/>`);\n\n lines.push('</workbook>');\n zip.file('xl/workbook.xml', lines.join('\\n'));\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/worksheets/sheetN.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeWorksheetXml(\n zip: JSZip,\n worksheet: Worksheet,\n sheetNum: number,\n ): void {\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n );\n\n // Dimension\n const dimRef = this._computeDimensionRef(worksheet);\n if (dimRef) {\n lines.push(` <dimension ref=\"${escapeXml(dimRef)}\"/>`);\n }\n\n // Sheet views\n const activeTab = this._workbook.properties.view.activeTab;\n const isActive = sheetNum - 1 === activeTab;\n lines.push(' <sheetViews>');\n\n let sheetViewAttrs = `workbookViewId=\"0\"`;\n if (isActive) sheetViewAttrs += ' tabSelected=\"1\"';\n\n // Freeze pane\n const fp = worksheet.freezePane;\n if (fp) {\n lines.push(` <sheetView ${sheetViewAttrs}>`);\n const topLeftCell = Cells.coordinateToString(\n fp.freezedRows + 1,\n fp.freezedColumns + 1,\n );\n lines.push(\n ` <pane xSplit=\"${fp.column}\" ySplit=\"${fp.row}\" topLeftCell=\"${topLeftCell}\" activePane=\"bottomRight\" state=\"frozen\"/>`,\n );\n lines.push(' </sheetView>');\n } else {\n lines.push(` <sheetView ${sheetViewAttrs}/>`);\n }\n lines.push(' </sheetViews>');\n\n // Sheet format properties\n lines.push(' <sheetFormatPr defaultRowHeight=\"15\"/>');\n\n // Column widths / hidden columns\n const colsXml = this._formatColsXml(worksheet);\n if (colsXml) {\n lines.push(colsXml);\n }\n\n // Sheet data\n lines.push(' <sheetData>');\n\n // Collect all cells\n const cellsMap = worksheet.cells._cells;\n const sortedRefs = Array.from(cellsMap.keys()).sort((a, b) => {\n const [ra, ca] = Cells.coordinateFromString(a);\n const [rb, cb] = Cells.coordinateFromString(b);\n return ra !== rb ? ra - rb : ca - cb;\n });\n\n // Group by row\n const rows = new Map<number, Array<[string, Cell]>>();\n for (const ref of sortedRefs) {\n const [row] = Cells.coordinateFromString(ref);\n if (!rows.has(row)) rows.set(row, []);\n rows.get(row)!.push([ref, cellsMap.get(ref)!]);\n }\n\n // Include rows with custom heights or hidden even if they have no cells\n const rowHeights: Record<number, number> = (worksheet as any)._rowHeights ?? {};\n for (const rowNum of Object.keys(rowHeights).map(Number)) {\n if (!rows.has(rowNum)) rows.set(rowNum, []);\n }\n const hiddenRows: Set<number> = (worksheet as any)._hiddenRows ?? new Set();\n for (const rowNum of hiddenRows) {\n if (!rows.has(rowNum)) rows.set(rowNum, []);\n }\n\n // Write rows in order\n const sortedRowNums = Array.from(rows.keys()).sort((a, b) => a - b);\n for (const rowNum of sortedRowNums) {\n const rowAttrs: string[] = [`r=\"${rowNum}\"`];\n\n // Custom row height\n const rh = rowHeights[rowNum];\n if (rh !== undefined) {\n rowAttrs.push(`ht=\"${rh}\"`);\n rowAttrs.push('customHeight=\"1\"');\n }\n\n // Hidden row\n if (hiddenRows.has(rowNum)) {\n rowAttrs.push('hidden=\"1\"');\n }\n\n const cellEntries = rows.get(rowNum)!;\n if (cellEntries.length === 0) {\n lines.push(` <row ${rowAttrs.join(' ')}/>`);\n } else {\n lines.push(` <row ${rowAttrs.join(' ')}>`);\n for (const [ref, cell] of cellEntries) {\n lines.push(this._formatCellXml(ref, cell));\n }\n lines.push(' </row>');\n }\n }\n\n lines.push(' </sheetData>');\n\n // Sheet protection\n const prot = (worksheet as any)._protection;\n if (prot && prot.sheet) {\n const protAttrs: string[] = ['sheet=\"1\"'];\n if (prot.password) protAttrs.push(`password=\"${escapeXml(prot.password)}\"`);\n if (!prot.formatCells) protAttrs.push('formatCells=\"0\"');\n if (!prot.formatColumns) protAttrs.push('formatColumns=\"0\"');\n if (!prot.formatRows) protAttrs.push('formatRows=\"0\"');\n if (!prot.insertColumns) protAttrs.push('insertColumns=\"0\"');\n if (!prot.insertRows) protAttrs.push('insertRows=\"0\"');\n if (!prot.deleteColumns) protAttrs.push('deleteColumns=\"0\"');\n if (!prot.deleteRows) protAttrs.push('deleteRows=\"0\"');\n if (!prot.sort) protAttrs.push('sort=\"0\"');\n if (!prot.autoFilter) protAttrs.push('autoFilter=\"0\"');\n if (!prot.insertHyperlinks) protAttrs.push('insertHyperlinks=\"0\"');\n if (!prot.pivotTables) protAttrs.push('pivotTables=\"0\"');\n if (prot.selectLockedCells) protAttrs.push('selectLockedCells=\"1\"');\n if (prot.selectUnlockedCells) protAttrs.push('selectUnlockedCells=\"1\"');\n if (prot.objects) protAttrs.push('objects=\"1\"');\n if (prot.scenarios) protAttrs.push('scenarios=\"1\"');\n lines.push(` <sheetProtection ${protAttrs.join(' ')}/>`);\n }\n\n // AutoFilter (ECMA-376 Section 18.3.1.2 - after sheetProtection, before mergeCells)\n if (worksheet.autoFilter.range !== null) {\n const autoFilterXml = new AutoFilterXmlSaver().formatAutoFilterXml(worksheet.autoFilter);\n if (autoFilterXml) lines.push(autoFilterXml);\n }\n\n // Merged cells\n const mergedCells: string[] = (worksheet as any)._mergedCells ?? [];\n if (mergedCells.length > 0) {\n lines.push(` <mergeCells count=\"${mergedCells.length}\">`);\n for (const mc of mergedCells) {\n lines.push(` <mergeCell ref=\"${escapeXml(mc)}\"/>`);\n }\n lines.push(' </mergeCells>');\n }\n\n // Conditional formatting (ECMA-376 Section 18.3.1.18 - after mergeCells)\n if (worksheet.conditionalFormatting.count > 0) {\n const cfSaver = new ConditionalFormatXmlSaver(escapeXml);\n const startDxfId = this._dxfEntries.length;\n const cfResult = cfSaver.formatConditionalFormattingXml(\n worksheet.conditionalFormatting,\n startDxfId,\n );\n if (cfResult.xml) lines.push(cfResult.xml);\n this._dxfEntries.push(...cfResult.dxfEntries);\n }\n\n // Data validations (ECMA-376 Section 18.3.1.30 - after conditionalFormatting)\n if (worksheet.dataValidations.count > 0) {\n const dvXml = new DataValidationXmlSaver(escapeXml).formatDataValidationsXml(worksheet.dataValidations);\n if (dvXml) lines.push(dvXml);\n }\n\n // Hyperlinks (ECMA-376 Section 18.3.1.48 - after dataValidations)\n const hlSaver = new HyperlinkXmlSaver();\n const nextRelId = CommentXmlWriter.worksheetHasComments(worksheet) ? 3 : 1;\n if (worksheet.hyperlinks.count > 0) {\n hlSaver.resetRelationshipCounter(nextRelId);\n const hlXml = hlSaver.formatHyperlinksXml(worksheet.hyperlinks);\n if (hlXml) lines.push(hlXml);\n }\n\n // Page margins\n const pm = worksheet.pageMargins;\n lines.push(\n ` <pageMargins left=\"${pm.left}\" right=\"${pm.right}\" top=\"${pm.top}\" bottom=\"${pm.bottom}\" header=\"${pm.header}\" footer=\"${pm.footer}\"/>`,\n );\n\n // Page setup\n const ps = worksheet.pageSetup;\n const psAttrs: string[] = [];\n if (ps.orientation) psAttrs.push(`orientation=\"${ps.orientation}\"`);\n if (ps.paperSize != null) psAttrs.push(`paperSize=\"${ps.paperSize}\"`);\n if (ps.fitToPage) {\n psAttrs.push('fitToPage=\"1\"');\n }\n if (ps.scale != null) psAttrs.push(`scale=\"${ps.scale}\"`);\n if (ps.fitToWidth != null) psAttrs.push(`fitToWidth=\"${ps.fitToWidth}\"`);\n if (ps.fitToHeight != null) psAttrs.push(`fitToHeight=\"${ps.fitToHeight}\"`);\n if (psAttrs.length > 0) {\n lines.push(` <pageSetup ${psAttrs.join(' ')}/>`);\n }\n\n // Row breaks / horizontal page breaks (ECMA-376 Section 18.3.1.73)\n const hBreaks = Array.from(worksheet.horizontalPageBreaks).sort((a, b) => a - b);\n if (hBreaks.length > 0) {\n lines.push(` <rowBreaks count=\"${hBreaks.length}\" manualBreakCount=\"${hBreaks.length}\">`);\n for (const row of hBreaks) {\n lines.push(` <brk id=\"${row}\" max=\"16383\" man=\"1\"/>`);\n }\n lines.push(' </rowBreaks>');\n }\n\n // Column breaks / vertical page breaks (ECMA-376 Section 18.3.1.17)\n const vBreaks = Array.from(worksheet.verticalPageBreaks).sort((a, b) => a - b);\n if (vBreaks.length > 0) {\n lines.push(` <colBreaks count=\"${vBreaks.length}\" manualBreakCount=\"${vBreaks.length}\">`);\n for (const col of vBreaks) {\n lines.push(` <brk id=\"${col}\" max=\"1048575\" man=\"1\"/>`);\n }\n lines.push(' </colBreaks>');\n }\n\n // Legacy drawing reference for comments\n if (CommentXmlWriter.worksheetHasComments(worksheet)) {\n lines.push(' <legacyDrawing r:id=\"rId1\"/>');\n }\n\n lines.push('</worksheet>');\n zip.file(`xl/worksheets/sheet${sheetNum}.xml`, lines.join('\\n'));\n\n // Write sheet-level .rels file if needed (hyperlinks + comments)\n const sheetRelsLines: string[] = [];\n\n // Comment relationships (rId1 = VML, rId2 = comments)\n if (CommentXmlWriter.worksheetHasComments(worksheet)) {\n sheetRelsLines.push(\n ` <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\" Target=\"../drawings/vmlDrawing${sheetNum}.vml\"/>`,\n );\n sheetRelsLines.push(\n ` <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\" Target=\"../comments${sheetNum}.xml\"/>`,\n );\n }\n\n // Hyperlink relationships\n if (worksheet.hyperlinks.count > 0) {\n const hlRels = hlSaver.getHyperlinkRelationships(worksheet.hyperlinks);\n for (const rel of hlRels) {\n sheetRelsLines.push(\n ` <Relationship Id=\"${rel.rId}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"${escapeXml(rel.target)}\" TargetMode=\"External\"/>`,\n );\n }\n }\n\n if (sheetRelsLines.length > 0) {\n const relsContent = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>',\n '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">',\n ...sheetRelsLines,\n '</Relationships>',\n ].join('\\n');\n zip.file(`xl/worksheets/_rels/sheet${sheetNum}.xml.rels`, relsContent);\n }\n }\n\n // ── Worksheet helpers ───────────────────────────────────────────────────\n\n /**\n * Computes the dimension reference string (e.g. \"A1:C10\") for a worksheet.\n */\n private _computeDimensionRef(worksheet: Worksheet): string | null {\n const cellsMap = worksheet.cells._cells;\n if (cellsMap.size === 0) return 'A1';\n\n let minRow = Infinity;\n let maxRow = -Infinity;\n let minCol = Infinity;\n let maxCol = -Infinity;\n\n for (const ref of cellsMap.keys()) {\n const [r, c] = Cells.coordinateFromString(ref);\n if (r < minRow) minRow = r;\n if (r > maxRow) maxRow = r;\n if (c < minCol) minCol = c;\n if (c > maxCol) maxCol = c;\n }\n\n // Also consider merged ranges\n const merged: string[] = (worksheet as any)._mergedCells ?? [];\n for (const mc of merged) {\n if (mc.includes(':')) {\n const [startRef, endRef] = mc.split(':');\n const [sr, sc] = Cells.coordinateFromString(startRef);\n const [er, ec] = Cells.coordinateFromString(endRef);\n if (sr < minRow) minRow = sr;\n if (er > maxRow) maxRow = er;\n if (sc < minCol) minCol = sc;\n if (ec > maxCol) maxCol = ec;\n }\n }\n\n if (!isFinite(minRow)) return 'A1';\n\n const startCell = Cells.coordinateToString(minRow, minCol);\n const endCell = Cells.coordinateToString(maxRow, maxCol);\n return startCell === endCell ? startCell : `${startCell}:${endCell}`;\n }\n\n /**\n * Formats <cols> XML for column widths and hidden columns.\n */\n private _formatColsXml(worksheet: Worksheet): string {\n const colWidths: Record<number, number> =\n (worksheet as any)._columnWidths ?? {};\n const hiddenCols: Set<number> =\n (worksheet as any)._hiddenColumns ?? new Set();\n\n const allColIndices = new Set<number>();\n for (const k of Object.keys(colWidths).map(Number)) allColIndices.add(k);\n for (const k of hiddenCols) allColIndices.add(k);\n\n if (allColIndices.size === 0) return '';\n\n const sorted = Array.from(allColIndices).sort((a, b) => a - b);\n const lines: string[] = [' <cols>'];\n\n for (const colIdx of sorted) {\n const attrs: string[] = [`min=\"${colIdx}\"`, `max=\"${colIdx}\"`];\n const w = colWidths[colIdx];\n if (w !== undefined) {\n attrs.push(`width=\"${w}\"`);\n attrs.push('customWidth=\"1\"');\n }\n if (hiddenCols.has(colIdx)) {\n attrs.push('hidden=\"1\"');\n }\n lines.push(` <col ${attrs.join(' ')}/>`);\n }\n\n lines.push(' </cols>');\n return lines.join('\\n');\n }\n\n /**\n * Formats a single cell as XML.\n */\n private _formatCellXml(ref: string, cell: Cell): string {\n const styleIdx = this._getOrCreateCellStyle(cell);\n const [valueStr, cellType] = CellValueHandler.formatValueForXml(cell.value);\n\n // Handle shared strings: strings are stored in the SST\n let actualValue = valueStr;\n let actualType = cellType;\n if (cellType === CELL_TYPE_STRING && valueStr !== null) {\n const ssIdx = this._sharedStringTable.addString(valueStr);\n actualValue = String(ssIdx);\n actualType = CELL_TYPE_STRING;\n }\n\n // Build cell XML\n const attrs: string[] = [`r=\"${ref}\"`];\n if (styleIdx > 0) attrs.push(`s=\"${styleIdx}\"`);\n if (actualType) attrs.push(`t=\"${actualType}\"`);\n\n let xml = ` <c ${attrs.join(' ')}>`;\n\n // Formula (must come before value per ECMA-376)\n const formula = cell.formula;\n if (formula) {\n xml += `<f>${escapeXml(formula)}</f>`;\n }\n\n // Value\n if (actualValue !== null) {\n xml += `<v>${escapeXml(actualValue)}</v>`;\n }\n\n xml += '</c>';\n return xml;\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/styles.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeStylesXml(zip: JSZip): void {\n // Register default styles first\n this._registerDefaultStyles();\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n );\n\n // Number formats (custom only, id >= 164)\n const customFmts = new Map<number, string>();\n for (const [id, code] of this._numFormats) {\n if (id >= 164) customFmts.set(id, code);\n }\n lines.push(` <numFmts count=\"${customFmts.size}\">`);\n for (const [id, code] of Array.from(customFmts.entries()).sort(\n (a, b) => a[0] - b[0],\n )) {\n lines.push(\n ` <numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(code)}\"/>`,\n );\n }\n lines.push(' </numFmts>');\n\n // Fonts\n const fontCount = this._fontStyles.size;\n lines.push(` <fonts count=\"${fontCount}\">`);\n for (const idx of sortedKeys(this._fontStyles)) {\n lines.push(this._formatFontXml(this._fontStyles.get(idx)!));\n }\n lines.push(' </fonts>');\n\n // Fills\n const fillCount = this._fillStyles.size;\n lines.push(` <fills count=\"${fillCount}\">`);\n for (const idx of sortedKeys(this._fillStyles)) {\n lines.push(this._formatFillXml(this._fillStyles.get(idx)!));\n }\n lines.push(' </fills>');\n\n // Borders\n const borderCount = this._borderStyles.size;\n lines.push(` <borders count=\"${borderCount}\">`);\n for (const idx of sortedKeys(this._borderStyles)) {\n lines.push(this._formatBorderXml(this._borderStyles.get(idx)!));\n }\n lines.push(' </borders>');\n\n // cellStyleXfs (base style)\n lines.push(' <cellStyleXfs count=\"1\">');\n lines.push(\n ' <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>',\n );\n lines.push(' </cellStyleXfs>');\n\n // cellXfs\n const xfCount = this._cellStyles.size + 1; // +1 for default xf at index 0\n lines.push(` <cellXfs count=\"${xfCount}\">`);\n // Default xf at index 0\n lines.push(\n ' <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>',\n );\n // Custom xfs sorted by index\n const xfEntries = Array.from(this._cellStyles.entries()).sort(\n (a, b) => a[1] - b[1],\n );\n for (const [keyStr, _xfIdx] of xfEntries) {\n const key = JSON.parse(keyStr) as CellStyleKey;\n const [fontIdx, fillIdx, borderIdx, numFmtIdx, alignIdx, protIdx] = key;\n const applyNumFmt =\n numFmtIdx !== 0 ? ' applyNumberFormat=\"1\"' : '';\n const applyProt = protIdx !== 0 ? ' applyProtection=\"1\"' : '';\n lines.push(\n ` <xf numFmtId=\"${numFmtIdx}\" fontId=\"${fontIdx}\" fillId=\"${fillIdx}\" borderId=\"${borderIdx}\" xfId=\"0\"${applyNumFmt}${applyProt}>`,\n );\n if (alignIdx > 0) {\n const ad = this._alignmentStyles.get(alignIdx);\n if (ad) lines.push(this._formatAlignmentXml(ad));\n }\n if (protIdx > 0) {\n const pd = this._protectionStyles.get(protIdx);\n if (pd) lines.push(this._formatProtectionXml(pd));\n }\n lines.push(' </xf>');\n }\n lines.push(' </cellXfs>');\n\n // Cell styles\n lines.push(' <cellStyles count=\"1\">');\n lines.push(' <cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/>');\n lines.push(' </cellStyles>');\n\n // Differential formatting (Phase 4: real DXF entries from conditional formatting)\n if (this._dxfEntries.length > 0) {\n lines.push(` <dxfs count=\"${this._dxfEntries.length}\">`);\n for (const dxfXml of this._dxfEntries) {\n lines.push(dxfXml);\n }\n lines.push(' </dxfs>');\n } else {\n lines.push(' <dxfs count=\"0\"/>');\n }\n\n lines.push('</styleSheet>');\n zip.file('xl/styles.xml', lines.join('\\n'));\n }\n\n // ── Style XML formatters ────────────────────────────────────────────────\n\n private _formatFontXml(fd: FontData): string {\n const parts: string[] = [' <font>'];\n if (fd.bold) parts.push(' <b/>');\n if (fd.italic) parts.push(' <i/>');\n if (fd.underline) parts.push(' <u/>');\n if (fd.strikethrough) parts.push(' <strike/>');\n parts.push(` <sz val=\"${fd.size}\"/>`);\n parts.push(` <color rgb=\"${fd.color}\"/>`);\n parts.push(` <name val=\"${escapeXml(fd.name)}\"/>`);\n parts.push(' </font>');\n return parts.join('\\n');\n }\n\n private _formatFillXml(fd: FillData): string {\n const pt = fd.patternType;\n if (pt === 'none' || pt === 'gray125') {\n return [\n ' <fill>',\n ` <patternFill patternType=\"${pt}\"/>`,\n ' </fill>',\n ].join('\\n');\n }\n return [\n ' <fill>',\n ` <patternFill patternType=\"${pt}\">`,\n ` <fgColor rgb=\"${fd.fgColor}\"/>`,\n ` <bgColor rgb=\"${fd.bgColor}\"/>`,\n ' </patternFill>',\n ' </fill>',\n ].join('\\n');\n }\n\n private _formatBorderXml(bd: BorderData): string {\n const parts: string[] = [' <border>'];\n for (const side of ['left', 'right', 'top', 'bottom'] as const) {\n const sd = bd[side];\n if (sd.style !== 'none') {\n parts.push(` <${side} style=\"${sd.style}\">`);\n parts.push(` <color rgb=\"${sd.color}\"/>`);\n parts.push(` </${side}>`);\n } else {\n parts.push(` <${side}/>`);\n }\n }\n parts.push(' <diagonal/>');\n parts.push(' </border>');\n return parts.join('\\n');\n }\n\n private _formatAlignmentXml(ad: AlignmentData): string {\n const attrs: string[] = [];\n if (ad.horizontal !== 'general') attrs.push(`horizontal=\"${ad.horizontal}\"`);\n if (ad.vertical !== 'bottom') attrs.push(`vertical=\"${ad.vertical}\"`);\n if (ad.wrapText) attrs.push('wrapText=\"1\"');\n if (ad.indent !== 0) attrs.push(`indent=\"${ad.indent}\"`);\n if (ad.textRotation !== 0) attrs.push(`textRotation=\"${ad.textRotation}\"`);\n if (ad.shrinkToFit) attrs.push('shrinkToFit=\"1\"');\n if (ad.readingOrder !== 0) attrs.push(`readingOrder=\"${ad.readingOrder}\"`);\n if (ad.relativeIndent !== 0)\n attrs.push(`relativeIndent=\"${ad.relativeIndent}\"`);\n return attrs.length > 0\n ? ` <alignment ${attrs.join(' ')}/>`\n : ' <alignment/>';\n }\n\n private _formatProtectionXml(pd: ProtectionData): string {\n const attrs: string[] = [];\n if (!pd.locked) attrs.push('locked=\"0\"');\n if (pd.hidden) attrs.push('hidden=\"1\"');\n if (attrs.length === 0) return '';\n return ` <protection ${attrs.join(' ')}/>`;\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // Style registration\n // ══════════════════════════════════════════════════════════════════════════\n\n private _registerDefaultStyles(): void {\n // Default font: Calibri 11pt black\n if (!this._fontStyles.has(0)) {\n this._fontStyles.set(0, {\n name: 'Calibri',\n size: 11,\n color: 'FF000000',\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n });\n }\n\n // Default fills: none + gray125\n if (!this._fillStyles.has(0)) {\n this._fillStyles.set(0, {\n patternType: 'none',\n fgColor: 'FFFFFFFF',\n bgColor: 'FFFFFFFF',\n });\n }\n if (!this._fillStyles.has(1)) {\n this._fillStyles.set(1, {\n patternType: 'gray125',\n fgColor: 'FFFFFFFF',\n bgColor: 'FFFFFFFF',\n });\n }\n\n // Default borders: none\n if (!this._borderStyles.has(0)) {\n this._borderStyles.set(0, {\n top: { style: 'none', color: 'FF000000' },\n bottom: { style: 'none', color: 'FF000000' },\n left: { style: 'none', color: 'FF000000' },\n right: { style: 'none', color: 'FF000000' },\n });\n }\n\n // Default alignment: general / bottom\n if (!this._alignmentStyles.has(0)) {\n this._alignmentStyles.set(0, {\n horizontal: 'general',\n vertical: 'bottom',\n wrapText: false,\n indent: 0,\n textRotation: 0,\n shrinkToFit: false,\n readingOrder: 0,\n relativeIndent: 0,\n });\n }\n\n // Default protection: locked=true, hidden=false\n if (!this._protectionStyles.has(0)) {\n this._protectionStyles.set(0, { locked: true, hidden: false });\n }\n }\n\n private _getOrCreateFontStyle(font: Font): number {\n // Check existing\n for (const [idx, fd] of this._fontStyles) {\n if (\n fd.name === font.name &&\n fd.size === font.size &&\n fd.color === font.color &&\n fd.bold === font.bold &&\n fd.italic === font.italic &&\n fd.underline === font.underline &&\n fd.strikethrough === font.strikethrough\n ) {\n return idx;\n }\n }\n const newIdx = this._fontStyles.size;\n this._fontStyles.set(newIdx, {\n name: font.name,\n size: font.size,\n color: font.color,\n bold: font.bold,\n italic: font.italic,\n underline: font.underline,\n strikethrough: font.strikethrough,\n });\n return newIdx;\n }\n\n private _getOrCreateFillStyle(fill: Fill): number {\n for (const [idx, fd] of this._fillStyles) {\n if (\n fd.patternType === fill.patternType &&\n fd.fgColor === fill.foregroundColor &&\n fd.bgColor === fill.backgroundColor\n ) {\n return idx;\n }\n }\n const newIdx = this._fillStyles.size;\n this._fillStyles.set(newIdx, {\n patternType: fill.patternType,\n fgColor: fill.foregroundColor,\n bgColor: fill.backgroundColor,\n });\n return newIdx;\n }\n\n private _getOrCreateBorderStyle(borders: Borders): number {\n for (const [idx, bd] of this._borderStyles) {\n if (\n bd.top.style === borders.top.lineStyle &&\n bd.top.color === borders.top.color &&\n bd.bottom.style === borders.bottom.lineStyle &&\n bd.bottom.color === borders.bottom.color &&\n bd.left.style === borders.left.lineStyle &&\n bd.left.color === borders.left.color &&\n bd.right.style === borders.right.lineStyle &&\n bd.right.color === borders.right.color\n ) {\n return idx;\n }\n }\n const newIdx = this._borderStyles.size;\n this._borderStyles.set(newIdx, {\n top: { style: borders.top.lineStyle, color: borders.top.color },\n bottom: { style: borders.bottom.lineStyle, color: borders.bottom.color },\n left: { style: borders.left.lineStyle, color: borders.left.color },\n right: { style: borders.right.lineStyle, color: borders.right.color },\n });\n return newIdx;\n }\n\n private _getOrCreateAlignmentStyle(alignment: Alignment): number {\n for (const [idx, ad] of this._alignmentStyles) {\n if (\n ad.horizontal === alignment.horizontal &&\n ad.vertical === alignment.vertical &&\n ad.wrapText === alignment.wrapText &&\n ad.indent === alignment.indent &&\n ad.textRotation === alignment.textRotation &&\n ad.shrinkToFit === alignment.shrinkToFit &&\n ad.readingOrder === alignment.readingOrder &&\n ad.relativeIndent === alignment.relativeIndent\n ) {\n return idx;\n }\n }\n const newIdx = this._alignmentStyles.size;\n this._alignmentStyles.set(newIdx, {\n horizontal: alignment.horizontal,\n vertical: alignment.vertical,\n wrapText: alignment.wrapText,\n indent: alignment.indent,\n textRotation: alignment.textRotation,\n shrinkToFit: alignment.shrinkToFit,\n readingOrder: alignment.readingOrder,\n relativeIndent: alignment.relativeIndent,\n });\n return newIdx;\n }\n\n private _getOrCreateProtectionStyle(protection: Protection): number {\n for (const [idx, pd] of this._protectionStyles) {\n if (\n pd.locked === protection.locked &&\n pd.hidden === protection.hidden\n ) {\n return idx;\n }\n }\n const newIdx = this._protectionStyles.size;\n this._protectionStyles.set(newIdx, {\n locked: protection.locked,\n hidden: protection.hidden,\n });\n return newIdx;\n }\n\n private _getOrCreateNumberFormatStyle(numberFormat: string): number {\n // Check built-in formats\n const builtinId = NumberFormat.lookupBuiltinFormat(numberFormat);\n if (builtinId !== null) return builtinId;\n\n // Also handle 'General' explicitly\n if (numberFormat === 'General') return 0;\n\n // Check existing custom formats\n for (const [id, code] of this._numFormats) {\n if (code === numberFormat) return id;\n }\n\n // Create new custom format (IDs start at 164)\n let newId = 164;\n for (const id of this._numFormats.keys()) {\n if (id >= newId) newId = id + 1;\n }\n this._numFormats.set(newId, numberFormat);\n return newId;\n }\n\n /**\n * Gets or creates a composite cellXfs style index for a cell.\n */\n private _getOrCreateCellStyle(cell: Cell): number {\n this._registerDefaultStyles();\n\n const style = cell.style;\n const fontIdx = this._getOrCreateFontStyle(style.font);\n const fillIdx = this._getOrCreateFillStyle(style.fill);\n const borderIdx = this._getOrCreateBorderStyle(style.borders);\n const numFmtIdx = this._getOrCreateNumberFormatStyle(\n style.numberFormat,\n );\n const alignIdx = this._getOrCreateAlignmentStyle(style.alignment);\n const protIdx = this._getOrCreateProtectionStyle(style.protection);\n\n // Default style → index 0\n if (\n fontIdx === 0 &&\n fillIdx === 0 &&\n borderIdx === 0 &&\n numFmtIdx === 0 &&\n alignIdx === 0 &&\n protIdx === 0\n ) {\n return 0;\n }\n\n const key: CellStyleKey = [\n fontIdx,\n fillIdx,\n borderIdx,\n numFmtIdx,\n alignIdx,\n protIdx,\n ];\n const keyStr = JSON.stringify(key);\n\n if (!this._cellStyles.has(keyStr)) {\n // Index starts at 1 (0 is the default)\n const nextIdx =\n this._cellStyles.size > 0\n ? Math.max(...Array.from(this._cellStyles.values())) + 1\n : 1;\n this._cellStyles.set(keyStr, nextIdx);\n }\n return this._cellStyles.get(keyStr)!;\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/sharedStrings.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeSharedStringsXml(zip: JSZip): void {\n zip.file('xl/sharedStrings.xml', this._sharedStringTable.toXml());\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // xl/theme/theme1.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeThemeXml(zip: JSZip): void {\n zip.file('xl/theme/theme1.xml', DEFAULT_THEME_XML);\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // docProps/core.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeCorePropertiesXml(zip: JSZip): void {\n const dp = this._workbook.documentProperties;\n const now = new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" ' +\n 'xmlns:dc=\"http://purl.org/dc/elements/1.1/\" ' +\n 'xmlns:dcterms=\"http://purl.org/dc/terms/\" ' +\n 'xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" ' +\n 'xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">',\n );\n\n if (dp.title) lines.push(` <dc:title>${escapeXml(dp.title)}</dc:title>`);\n if (dp.subject)\n lines.push(` <dc:subject>${escapeXml(dp.subject)}</dc:subject>`);\n if (dp.creator)\n lines.push(` <dc:creator>${escapeXml(dp.creator)}</dc:creator>`);\n if (dp.keywords)\n lines.push(` <cp:keywords>${escapeXml(dp.keywords)}</cp:keywords>`);\n if (dp.description)\n lines.push(\n ` <dc:description>${escapeXml(dp.description)}</dc:description>`,\n );\n if (dp.lastModifiedBy)\n lines.push(\n ` <cp:lastModifiedBy>${escapeXml(dp.lastModifiedBy)}</cp:lastModifiedBy>`,\n );\n if (dp.category)\n lines.push(` <cp:category>${escapeXml(dp.category)}</cp:category>`);\n\n lines.push(\n ` <dcterms:created xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:created>`,\n );\n lines.push(\n ` <dcterms:modified xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:modified>`,\n );\n\n lines.push('</cp:coreProperties>');\n zip.file('docProps/core.xml', lines.join('\\n'));\n }\n\n // ══════════════════════════════════════════════════════════════════════════\n // docProps/app.xml\n // ══════════════════════════════════════════════════════════════════════════\n\n private _writeAppPropertiesXml(zip: JSZip): void {\n const wsCount = this._workbook.worksheets.length;\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n lines.push(\n '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" ' +\n 'xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">',\n );\n lines.push(' <Application>Microsoft Excel</Application>');\n lines.push(' <DocSecurity>0</DocSecurity>');\n lines.push(' <ScaleCrop>false</ScaleCrop>');\n lines.push(' <LinksUpToDate>false</LinksUpToDate>');\n lines.push(' <SharedDoc>false</SharedDoc>');\n\n // Heading pairs & titles\n lines.push(' <HeadingPairs>');\n lines.push(' <vt:vector size=\"2\" baseType=\"variant\">');\n lines.push(' <vt:variant>');\n lines.push(' <vt:lpstr>Worksheets</vt:lpstr>');\n lines.push(' </vt:variant>');\n lines.push(' <vt:variant>');\n lines.push(` <vt:i4>${wsCount}</vt:i4>`);\n lines.push(' </vt:variant>');\n lines.push(' </vt:vector>');\n lines.push(' </HeadingPairs>');\n\n lines.push(' <TitlesOfParts>');\n lines.push(` <vt:vector size=\"${wsCount}\" baseType=\"lpstr\">`);\n for (const ws of this._workbook.worksheets) {\n lines.push(` <vt:lpstr>${escapeXml(ws.name)}</vt:lpstr>`);\n }\n lines.push(' </vt:vector>');\n lines.push(' </TitlesOfParts>');\n\n lines.push('</Properties>');\n zip.file('docProps/app.xml', lines.join('\\n'));\n }\n}\n\n// ══════════════════════════════════════════════════════════════════════════════\n// Utilities\n// ══════════════════════════════════════════════════════════════════════════════\n\n/** Escape XML special characters. */\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\n/** Sorted numeric keys of a Map<number, T>. */\nfunction sortedKeys<T>(map: Map<number, T>): number[] {\n return Array.from(map.keys()).sort((a, b) => a - b);\n}\n\n// ══════════════════════════════════════════════════════════════════════════════\n// Default theme XML (minimal Office theme for XLSX validity)\n// ══════════════════════════════════════════════════════════════════════════════\n\nconst DEFAULT_THEME_XML = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">\n <a:themeElements>\n <a:clrScheme name=\"Office\">\n <a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>\n <a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>\n <a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"Office\">\n <a:majorFont>\n <a:latin typeface=\"Cambria\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"Calibri\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:minorFont>\n </a:fontScheme>\n <a:fmtScheme name=\"Office\">\n <a:fillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:gradFill rotWithShape=\"1\">\n <a:gsLst>\n <a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>\n </a:gsLst>\n <a:lin ang=\"16200000\" scaled=\"1\"/>\n </a:gradFill>\n <a:gradFill rotWithShape=\"1\">\n <a:gsLst>\n <a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:shade val=\"51000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"80000\"><a:schemeClr val=\"phClr\"><a:shade val=\"93000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"94000\"/><a:satMod val=\"135000\"/></a:schemeClr></a:gs>\n </a:gsLst>\n <a:lin ang=\"16200000\" scaled=\"0\"/>\n </a:gradFill>\n </a:fillStyleLst>\n <a:lnStyleLst>\n <a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n <a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>\n </a:lnStyleLst>\n <a:effectStyleLst>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle>\n </a:effectStyleLst>\n <a:bgFillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:gradFill rotWithShape=\"1\">\n <a:gsLst>\n <a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs>\n </a:gsLst>\n <a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path>\n </a:gradFill>\n <a:gradFill rotWithShape=\"1\">\n <a:gsLst>\n <a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>\n <a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs>\n </a:gsLst>\n <a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path>\n </a:gradFill>\n </a:bgFillStyleLst>\n </a:fmtScheme>\n </a:themeElements>\n <a:objectDefaults/>\n <a:extraClrSchemeLst/>\n</a:theme>`;\n","/**\n * Aspose.Cells for Node.js - Defined Name Module\n *\n * Represents defined names (named ranges) in the workbook.\n * Ported from Python `workbook_properties.py` DefinedName/DefinedNameCollection.\n *\n * ECMA-376 Section: 18.2.5\n *\n * @module features/DefinedName\n */\n\n// ─── DefinedName ──────────────────────────────────────────────────────────\n\n/**\n * Represents a defined name in the workbook.\n */\nexport class DefinedName {\n private _name: string;\n private _refersTo: string;\n private _localSheetId: number | null;\n private _comment: string | null = null;\n private _description: string | null = null;\n private _hidden = false;\n\n constructor(name: string, refersTo: string, localSheetId: number | null = null) {\n this._name = name;\n this._refersTo = refersTo;\n this._localSheetId = localSheetId;\n }\n\n /** Name of the defined name. */\n get name(): string { return this._name; }\n set name(v: string) { this._name = v; }\n\n /** Formula or range that the name refers to. */\n get refersTo(): string { return this._refersTo; }\n set refersTo(v: string) { this._refersTo = v; }\n\n /** Sheet index for sheet-local names (null for global names). */\n get localSheetId(): number | null { return this._localSheetId; }\n set localSheetId(v: number | null) { this._localSheetId = v; }\n\n /** Comment associated with the name. */\n get comment(): string | null { return this._comment; }\n set comment(v: string | null) { this._comment = v; }\n\n /** Description of the name. */\n get description(): string | null { return this._description; }\n set description(v: string | null) { this._description = v; }\n\n /** Whether the name is hidden. */\n get hidden(): boolean { return this._hidden; }\n set hidden(v: boolean) { this._hidden = v; }\n\n // snake_case aliases\n get refers_to(): string { return this._refersTo; }\n set refers_to(v: string) { this._refersTo = v; }\n get local_sheet_id(): number | null { return this._localSheetId; }\n set local_sheet_id(v: number | null) { this._localSheetId = v; }\n}\n\n// ─── DefinedNameCollection ────────────────────────────────────────────────\n\n/**\n * Collection of defined names in the workbook.\n */\nexport class DefinedNameCollection {\n private _names: DefinedName[] = [];\n\n /**\n * Adds a defined name to the collection.\n *\n * @param nameOrDn Either a DefinedName object or a string name.\n * @param refersTo Formula or range (required if nameOrDn is a string).\n * @param localSheetId Sheet index for sheet-local names.\n * @returns The added DefinedName.\n */\n add(nameOrDn: DefinedName | string, refersTo?: string, localSheetId?: number | null): DefinedName {\n if (nameOrDn instanceof DefinedName) {\n this._names.push(nameOrDn);\n return nameOrDn;\n }\n const dn = new DefinedName(nameOrDn, refersTo ?? '', localSheetId ?? null);\n this._names.push(dn);\n return dn;\n }\n\n /**\n * Removes a defined name by name string.\n * @returns The removed DefinedName or null if not found.\n */\n remove(name: string): DefinedName | null {\n const idx = this._names.findIndex(dn => dn.name === name);\n if (idx >= 0) {\n return this._names.splice(idx, 1)[0];\n }\n return null;\n }\n\n /**\n * Gets a defined name by index or name string.\n */\n get(key: number | string): DefinedName {\n if (typeof key === 'number') {\n if (key < 0 || key >= this._names.length) {\n throw new RangeError(`Index ${key} out of range`);\n }\n return this._names[key];\n }\n const found = this._names.find(dn => dn.name === key);\n if (!found) {\n throw new Error(`Defined name '${key}' not found`);\n }\n return found;\n }\n\n /** Number of defined names. */\n get count(): number {\n return this._names.length;\n }\n\n /** Returns internal array (for iteration). */\n toArray(): DefinedName[] {\n return [...this._names];\n }\n\n [Symbol.iterator](): Iterator<DefinedName> {\n return this._names[Symbol.iterator]();\n }\n}\n","/**\n * XML AutoFilter Loader\n *\n * Loads auto-filter settings from XLSX worksheet XML.\n */\n\nimport { AutoFilter, FilterColumn } from '../features/AutoFilter';\n\nfunction ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val == null) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction attr(elem: any, name: string, defaultVal = ''): string {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : defaultVal;\n}\n\nfunction attrOpt(elem: any, name: string): string | null {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : null;\n}\n\nexport class AutoFilterXmlLoader {\n loadAutoFilter(wsRoot: any, autoFilter: AutoFilter): void {\n const afElem = wsRoot?.autoFilter;\n if (!afElem) return;\n\n const ref = attr(afElem, 'ref', '');\n if (!ref) return;\n\n autoFilter.range = ref;\n\n // Load filter columns\n const fcElems = ensureArray(afElem.filterColumn);\n for (const fcElem of fcElems) {\n const colId = parseInt(attr(fcElem, 'colId', '0'), 10);\n const fc = autoFilter.getFilterColumn(colId) ?? new FilterColumn(colId);\n\n // hiddenButton means HIDE the dropdown button\n const hiddenButton = attr(fcElem, 'hiddenButton', '');\n if (hiddenButton === '1' || hiddenButton === 'true') {\n fc.filterButton = false;\n }\n\n // Filters (value list)\n const filtersElem = fcElem.filters;\n if (filtersElem) {\n const filterElems = ensureArray(filtersElem.filter);\n for (const fe of filterElems) {\n const val = attr(fe, 'val', '');\n if (val) fc.addFilter(val);\n }\n }\n\n // Custom filters\n const customFiltersElem = fcElem.customFilters;\n if (customFiltersElem) {\n const customElems = ensureArray(customFiltersElem.customFilter);\n for (const ce of customElems) {\n const op = attr(ce, 'operator', 'equal');\n const val = attr(ce, 'val', '');\n fc.addCustomFilter(op, val);\n }\n }\n\n // Color filter\n const colorFilterElem = fcElem.colorFilter;\n if (colorFilterElem) {\n const color = attr(colorFilterElem, 'dxfId', '');\n const cellColor = attr(colorFilterElem, 'cellColor', '1') !== '0';\n fc.colorFilter = { color, cellColor };\n }\n\n // Dynamic filter\n const dynamicElem = fcElem.dynamicFilter;\n if (dynamicElem) {\n const type = attr(dynamicElem, 'type', '');\n const val = attrOpt(dynamicElem, 'val');\n fc.dynamicFilter = { type, value: val ?? undefined };\n }\n\n // Top10 filter\n const top10Elem = fcElem.top10;\n if (top10Elem) {\n const top = attr(top10Elem, 'top', '1') !== '0';\n const percent = attr(top10Elem, 'percent', '0') === '1';\n const val = parseInt(attr(top10Elem, 'val', '10'), 10);\n fc.top10Filter = { top, percent, val };\n }\n\n // Add to autoFilter if not already there\n if (!autoFilter.getFilterColumn(colId)) {\n autoFilter.filterColumns.set(colId, fc);\n } else {\n // Merge loaded data\n autoFilter.filterColumns.set(colId, fc);\n }\n }\n\n // Load sort state\n const sortStateElem = afElem.sortState;\n if (sortStateElem) {\n const sortRef = attr(sortStateElem, 'ref', '');\n const sortConditions = ensureArray(sortStateElem.sortCondition);\n if (sortConditions.length > 0) {\n const condRef = attr(sortConditions[0], 'ref', '');\n const descending = attr(sortConditions[0], 'descending', '');\n const colIndex = this._calculateSortColumnIndex(ref, condRef);\n autoFilter.sortState = {\n ref: sortRef || ref,\n columnIndex: colIndex,\n ascending: descending !== '1',\n };\n }\n }\n }\n\n private _calculateSortColumnIndex(filterRange: string, sortCondRef: string): number {\n if (!filterRange || !sortCondRef) return 0;\n\n const filterCol = this._colFromRef(filterRange.split(':')[0]);\n const sortCol = this._colFromRef(sortCondRef.split(':')[0]);\n return sortCol - filterCol;\n }\n\n private _colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/i);\n if (!match) return 0;\n let col = 0;\n for (const ch of match[1].toUpperCase()) {\n col = col * 26 + (ch.charCodeAt(0) - 64);\n }\n return col - 1;\n }\n}\n","/**\n * XML Conditional Format Loader\n *\n * Loads conditional formatting rules from XLSX worksheet XML.\n */\n\nimport { ConditionalFormat, ConditionalFormatCollection } from '../features/ConditionalFormat';\nimport type { LoaderFontData, LoaderFillData, LoaderBorderData } from './XmlLoader';\n\nfunction ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val == null) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction attr(elem: any, name: string, defaultVal = ''): string {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : defaultVal;\n}\n\nfunction attrOpt(elem: any, name: string): string | null {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : null;\n}\n\nexport class ConditionalFormatXmlLoader {\n private _dxfStyles: any[];\n\n constructor(dxfStyles: any[]) {\n this._dxfStyles = dxfStyles;\n }\n\n loadConditionalFormatting(wsRoot: any, collection: ConditionalFormatCollection): void {\n const cfElems = ensureArray(wsRoot?.conditionalFormatting);\n\n for (const cfElem of cfElems) {\n const sqref = attr(cfElem, 'sqref', '');\n if (!sqref) continue;\n\n const rules = ensureArray(cfElem.cfRule);\n for (const rule of rules) {\n const cf = collection.add();\n cf.range = sqref;\n this._loadCfRule(cf, rule);\n }\n }\n\n // Apply DXF styles\n this._applyDxfStyles(collection);\n }\n\n private _loadCfRule(cf: ConditionalFormat, rule: any): void {\n const ruleType = attr(rule, 'type', '');\n cf.type = ruleType || null;\n cf.priority = parseInt(attr(rule, 'priority', '0'), 10);\n\n const stopIfTrue = attr(rule, 'stopIfTrue', '');\n cf.stopIfTrue = stopIfTrue === '1' || stopIfTrue === 'true';\n\n const dxfId = attrOpt(rule, 'dxfId');\n if (dxfId !== null) {\n cf._dxfId = parseInt(dxfId, 10);\n }\n\n // Operator\n const op = attrOpt(rule, 'operator');\n if (op) cf.operator = op;\n\n // Text\n const text = attrOpt(rule, 'text');\n if (text) cf.textFormula = text;\n\n // TimePeriod (date rules)\n const timePeriod = attrOpt(rule, 'timePeriod');\n if (timePeriod) cf.dateOperator = timePeriod;\n\n // aboveAverage\n const aboveAvg = attrOpt(rule, 'aboveAverage');\n if (ruleType === 'aboveAverage') {\n cf.above = aboveAvg !== '0';\n }\n\n // stdDev\n const stdDev = attrOpt(rule, 'stdDev');\n if (stdDev) cf.stdDev = parseInt(stdDev, 10);\n\n // top/bottom\n if (ruleType === 'top10') {\n const bottom = attrOpt(rule, 'bottom');\n cf.top = bottom !== '1';\n const percent = attrOpt(rule, 'percent');\n cf.percent = percent === '1';\n const rank = attrOpt(rule, 'rank');\n if (rank) cf.rank = parseInt(rank, 10);\n }\n\n // Duplicate/unique\n if (ruleType === 'duplicateValues') cf.duplicate = true;\n if (ruleType === 'uniqueValues') cf.duplicate = false;\n\n // Formulas\n const formulas = ensureArray(rule.formula);\n if (formulas.length > 0) {\n cf.formula1 = String(formulas[0]);\n }\n if (formulas.length > 1) {\n cf.formula2 = String(formulas[1]);\n }\n\n // Color scale\n if (rule.colorScale) {\n this._loadColorScale(cf, rule.colorScale);\n }\n\n // Data bar\n if (rule.dataBar) {\n this._loadDataBar(cf, rule.dataBar);\n }\n\n // Icon set\n if (rule.iconSet) {\n this._loadIconSet(cf, rule.iconSet);\n }\n\n // Map ruleType to text/date operators\n if (ruleType === 'containsText') cf.textOperator = 'containsText';\n else if (ruleType === 'notContainsText') cf.textOperator = 'notContains';\n else if (ruleType === 'beginsWith') cf.textOperator = 'beginsWith';\n else if (ruleType === 'endsWith') cf.textOperator = 'endsWith';\n else if (ruleType === 'containsBlanks') cf.textOperator = 'containsBlanks';\n else if (ruleType === 'notContainsBlanks') cf.textOperator = 'notContainsBlanks';\n else if (ruleType === 'containsErrors') cf.textOperator = 'containsErrors';\n else if (ruleType === 'notContainsErrors') cf.textOperator = 'notContainsErrors';\n }\n\n private _loadColorScale(cf: ConditionalFormat, elem: any): void {\n const colors = ensureArray(elem.color);\n if (colors.length === 2) {\n cf.colorScaleType = '2color';\n cf.minColor = attrOpt(colors[0], 'rgb') ?? attrOpt(colors[0], 'theme');\n cf.maxColor = attrOpt(colors[1], 'rgb') ?? attrOpt(colors[1], 'theme');\n } else if (colors.length >= 3) {\n cf.colorScaleType = '3color';\n cf.minColor = attrOpt(colors[0], 'rgb') ?? attrOpt(colors[0], 'theme');\n cf.midColor = attrOpt(colors[1], 'rgb') ?? attrOpt(colors[1], 'theme');\n cf.maxColor = attrOpt(colors[2], 'rgb') ?? attrOpt(colors[2], 'theme');\n }\n }\n\n private _loadDataBar(cf: ConditionalFormat, elem: any): void {\n const colors = ensureArray(elem.color);\n if (colors.length > 0) {\n cf.barColor = attrOpt(colors[0], 'rgb');\n }\n if (colors.length > 1) {\n cf.negativeColor = attrOpt(colors[1], 'rgb');\n }\n const showValue = attrOpt(elem, 'showValue');\n if (showValue === '0') cf.showIconOnly = true;\n }\n\n private _loadIconSet(cf: ConditionalFormat, elem: any): void {\n const iconSet = attrOpt(elem, 'iconSet');\n if (iconSet) cf.iconSetType = iconSet;\n\n const reverse = attrOpt(elem, 'reverse');\n if (reverse === '1') cf.reverseIcons = true;\n\n const showValue = attrOpt(elem, 'showValue');\n if (showValue === '0') cf.showIconOnly = true;\n }\n\n private _applyDxfStyles(collection: ConditionalFormatCollection): void {\n for (const cf of collection) {\n if (cf._dxfId !== null && cf._dxfId >= 0 && cf._dxfId < this._dxfStyles.length) {\n const dxfData = this._dxfStyles[cf._dxfId];\n this._applyDxfData(cf, dxfData);\n }\n }\n }\n\n private _applyDxfData(cf: ConditionalFormat, dxfData: any): void {\n if (!dxfData) return;\n\n // Apply font\n if (dxfData.font) {\n const fd = dxfData.font as LoaderFontData;\n if (fd.name) cf.font.name = fd.name;\n if (fd.size) cf.font.size = fd.size;\n if (fd.color) cf.font.color = fd.color;\n if (fd.bold !== undefined) cf.font.bold = fd.bold;\n if (fd.italic !== undefined) cf.font.italic = fd.italic;\n if (fd.underline !== undefined) cf.font.underline = fd.underline;\n if (fd.strikethrough !== undefined) cf.font.strikethrough = fd.strikethrough;\n }\n\n // Apply fill\n if (dxfData.fill) {\n const fillD = dxfData.fill as LoaderFillData;\n if (fillD.pattern_type) cf.fill.patternType = fillD.pattern_type;\n if (fillD.fg_color) cf.fill.foregroundColor = fillD.fg_color;\n if (fillD.bg_color) cf.fill.backgroundColor = fillD.bg_color;\n }\n\n // Apply border\n if (dxfData.border) {\n const bd = dxfData.border as LoaderBorderData;\n if (bd.left?.style) cf.border.left.lineStyle = bd.left.style;\n if (bd.left?.color) cf.border.left.color = bd.left.color;\n if (bd.right?.style) cf.border.right.lineStyle = bd.right.style;\n if (bd.right?.color) cf.border.right.color = bd.right.color;\n if (bd.top?.style) cf.border.top.lineStyle = bd.top.style;\n if (bd.top?.color) cf.border.top.color = bd.top.color;\n if (bd.bottom?.style) cf.border.bottom.lineStyle = bd.bottom.style;\n if (bd.bottom?.color) cf.border.bottom.color = bd.bottom.color;\n }\n\n // Apply number format\n if (dxfData.numberFormat) {\n cf.numberFormat = dxfData.numberFormat;\n }\n }\n}\n","/**\n * XML Data Validation Loader\n *\n * Loads data validation settings from XLSX worksheet XML.\n */\n\nimport {\n DataValidation,\n DataValidationCollection,\n DataValidationType,\n DataValidationOperator,\n DataValidationAlertStyle,\n DataValidationImeMode,\n} from '../features/DataValidation';\n\n// Maps from XML string → enum\nconst TYPE_MAP: Record<string, DataValidationType> = {\n none: DataValidationType.NONE,\n whole: DataValidationType.WHOLE_NUMBER,\n decimal: DataValidationType.DECIMAL,\n list: DataValidationType.LIST,\n date: DataValidationType.DATE,\n time: DataValidationType.TIME,\n textLength: DataValidationType.TEXT_LENGTH,\n custom: DataValidationType.CUSTOM,\n};\n\nconst OPERATOR_MAP: Record<string, DataValidationOperator> = {\n between: DataValidationOperator.BETWEEN,\n notBetween: DataValidationOperator.NOT_BETWEEN,\n equal: DataValidationOperator.EQUAL,\n notEqual: DataValidationOperator.NOT_EQUAL,\n greaterThan: DataValidationOperator.GREATER_THAN,\n lessThan: DataValidationOperator.LESS_THAN,\n greaterThanOrEqual: DataValidationOperator.GREATER_THAN_OR_EQUAL,\n lessThanOrEqual: DataValidationOperator.LESS_THAN_OR_EQUAL,\n};\n\nconst ALERT_STYLE_MAP: Record<string, DataValidationAlertStyle> = {\n stop: DataValidationAlertStyle.STOP,\n warning: DataValidationAlertStyle.WARNING,\n information: DataValidationAlertStyle.INFORMATION,\n};\n\nconst IME_MODE_MAP: Record<string, DataValidationImeMode> = {\n noControl: DataValidationImeMode.NO_CONTROL,\n off: DataValidationImeMode.OFF,\n on: DataValidationImeMode.ON,\n disabled: DataValidationImeMode.DISABLED,\n hiragana: DataValidationImeMode.HIRAGANA,\n fullKatakana: DataValidationImeMode.FULL_KATAKANA,\n halfKatakana: DataValidationImeMode.HALF_KATAKANA,\n fullAlpha: DataValidationImeMode.FULL_ALPHA,\n halfAlpha: DataValidationImeMode.HALF_ALPHA,\n fullHangul: DataValidationImeMode.FULL_HANGUL,\n halfHangul: DataValidationImeMode.HALF_HANGUL,\n};\n\nfunction ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val == null) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction attr(elem: any, name: string, defaultVal = ''): string {\n const v = elem?.['@_' + name];\n return v != null ? String(v) : defaultVal;\n}\n\nexport class DataValidationXmlLoader {\n loadDataValidations(wsRoot: any, collection: DataValidationCollection): void {\n const dvs = wsRoot?.dataValidations;\n if (!dvs) return;\n\n // Load collection-level attributes\n const disablePrompts = attr(dvs, 'disablePrompts', '');\n if (disablePrompts === '1' || disablePrompts === 'true') {\n collection.disablePrompts = true;\n }\n const xWindow = attr(dvs, 'xWindow', '');\n if (xWindow) collection.xWindow = parseInt(xWindow, 10);\n const yWindow = attr(dvs, 'yWindow', '');\n if (yWindow) collection.yWindow = parseInt(yWindow, 10);\n\n const dvElems = ensureArray(dvs.dataValidation);\n for (const dvElem of dvElems) {\n this._loadDataValidation(dvElem, collection);\n }\n }\n\n private _loadDataValidation(dvElem: any, collection: DataValidationCollection): void {\n const sqref = attr(dvElem, 'sqref', '');\n if (!sqref) return;\n\n const dv = new DataValidation(sqref);\n\n // Type\n const typeStr = attr(dvElem, 'type', 'none');\n dv.type = TYPE_MAP[typeStr] ?? DataValidationType.NONE;\n\n // Operator\n const opStr = attr(dvElem, 'operator', 'between');\n dv.operator = OPERATOR_MAP[opStr] ?? DataValidationOperator.BETWEEN;\n\n // Alert style\n const alertStr = attr(dvElem, 'errorStyle', 'stop');\n dv.alertStyle = ALERT_STYLE_MAP[alertStr] ?? DataValidationAlertStyle.STOP;\n\n // IME mode\n const imeStr = attr(dvElem, 'imeMode', '');\n if (imeStr && IME_MODE_MAP[imeStr] !== undefined) {\n dv.imeMode = IME_MODE_MAP[imeStr];\n }\n\n // Boolean attributes\n const allowBlank = attr(dvElem, 'allowBlank', '');\n dv.allowBlank = allowBlank === '1' || allowBlank === 'true';\n\n const showInputMsg = attr(dvElem, 'showInputMessage', '');\n dv.showInputMessage = showInputMsg === '1' || showInputMsg === 'true';\n\n const showErrorMsg = attr(dvElem, 'showErrorMessage', '');\n dv.showErrorMessage = showErrorMsg === '1' || showErrorMsg === 'true';\n\n // showDropDown: In ECMA-376, showDropDown=\"1\" means HIDE the dropdown!\n const showDropDown = attr(dvElem, 'showDropDown', '');\n if (showDropDown === '1' || showDropDown === 'true') {\n dv.showDropdown = false; // inverted!\n } else {\n dv.showDropdown = true;\n }\n\n // String attributes\n const errorTitle = attr(dvElem, 'errorTitle', '');\n if (errorTitle) dv.errorTitle = errorTitle;\n\n const errorAttr = attr(dvElem, 'error', '');\n if (errorAttr) dv.errorMessage = errorAttr;\n\n const promptTitle = attr(dvElem, 'promptTitle', '');\n if (promptTitle) dv.inputTitle = promptTitle;\n\n const promptAttr = attr(dvElem, 'prompt', '');\n if (promptAttr) dv.inputMessage = promptAttr;\n\n // Formulas\n const formula1 = dvElem?.formula1;\n if (formula1 != null) {\n dv.formula1 = typeof formula1 === 'object' ? formula1['#text'] ?? String(formula1) : String(formula1);\n }\n\n const formula2 = dvElem?.formula2;\n if (formula2 != null) {\n dv.formula2 = typeof formula2 === 'object' ? formula2['#text'] ?? String(formula2) : String(formula2);\n }\n\n collection.addValidation(dv);\n }\n}\n","/**\n * tinyweb-cells – XML Loader Module (Phase 3)\n *\n * Reads OOXML (.xlsx) ZIP archives and populates Workbook objects.\n * Port of the Python `xml_loader.py`.\n *\n * ECMA-376 Compliant cell value import.\n */\n\nimport JSZip from 'jszip';\nimport { XMLParser } from 'fast-xml-parser';\nimport { Workbook } from '../core/Workbook';\nimport { Worksheet } from '../core/Worksheet';\nimport { Cell } from '../core/Cell';\nimport { Cells } from '../core/Cells';\nimport { CellValueHandler } from './CellValueHandler';\nimport { AutoFilterXmlLoader } from './XmlAutoFilterLoader';\nimport { ConditionalFormatXmlLoader } from './XmlConditionalFormatLoader';\nimport { DataValidationXmlLoader } from './XmlDataValidationLoader';\nimport { HyperlinkXmlLoader } from './XmlHyperlinkHandler';\nimport { CommentXmlReader } from './CommentXml';\nimport { DefinedName } from '../features/DefinedName';\nimport type { CellValue } from '../core/Cell';\n\n// ── Style data interfaces (loader-specific, richer than saver's) ───────────\n\nexport interface LoaderFontData {\n name: string;\n size: number;\n color: string;\n color_type: string | null;\n color_value: string | null;\n color_tint: string | null;\n family: string | null;\n charset: string | null;\n scheme: string | null;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n}\n\nexport interface LoaderFillData {\n pattern_type: string;\n fg_color: string;\n bg_color: string;\n fg_color_type: string | null;\n fg_color_value: string | null;\n fg_color_tint: number | null;\n bg_color_type: string | null;\n bg_color_value: string | null;\n bg_color_tint: number | null;\n}\n\nexport interface LoaderBorderSideData {\n style: string;\n color: string;\n}\n\nexport interface LoaderBorderData {\n top: LoaderBorderSideData;\n bottom: LoaderBorderSideData;\n left: LoaderBorderSideData;\n right: LoaderBorderSideData;\n}\n\nexport interface LoaderAlignmentData {\n horizontal: string;\n vertical: string;\n wrap_text: boolean;\n indent: number;\n text_rotation: number;\n shrink_to_fit: boolean;\n reading_order: number;\n relative_indent: number;\n}\n\nexport interface LoaderProtectionData {\n locked: boolean;\n hidden: boolean;\n}\n\n/** Cell style composite key: [fontIdx, fillIdx, borderIdx, numFmtIdx, alignIdx, protIdx] */\ntype CellStyleKey = [number, number, number, number, number, number];\n\n// ── Augment Workbook with loader-specific internal state ───────────────────\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ninterface WorkbookInternal {\n _worksheets: Worksheet[];\n _sharedStrings: string[];\n _styles: any[];\n _properties: any;\n _documentProperties: any;\n _sourceXml: Record<string, string>;\n\n // Loader style registries (numeric index → data)\n _loaderFontStyles: Map<number, LoaderFontData>;\n _loaderFillStyles: Map<number, LoaderFillData>;\n _loaderBorderStyles: Map<number, LoaderBorderData>;\n _loaderAlignmentStyles: Map<number, LoaderAlignmentData>;\n _loaderProtectionStyles: Map<number, LoaderProtectionData>;\n _loaderNumFormats: Map<number, string>;\n _loaderCellStyles: Map<string, number>;\n _loaderCellXfByIndex: Map<number, CellStyleKey>;\n\n // Source XML preservation for round-trip\n _sourceStylesXml: Buffer | null;\n _sourceCellXfsCount: number;\n _themeXml: Buffer | null;\n _contentTypeDefaults: Record<string, string>;\n _contentTypeOverrides: Record<string, string>;\n _sourceExtraWorkbookRels: any[];\n _sourceCalcChainBytes: Buffer | null;\n _sourceCalcChainRel: Record<string, any> | null;\n _dxfStyles: any[];\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n// ── Built-in number formats (ECMA-376 §18.8.30) ───────────────────────────\n\nconst BUILTIN_FORMATS: Record<number, string> = {\n 0: 'General',\n 1: '0',\n 2: '0.00',\n 3: '#,##0',\n 4: '#,##0.00',\n 5: '$#,##0_);($#,##0)',\n 6: '$#,##0_);[Red]($#,##0)',\n 7: '$#,##0.00_);($#,##0.00)',\n 8: '$#,##0.00_);[Red]($#,##0.00)',\n 9: '0%',\n 10: '0.00%',\n 11: '0.00E+00',\n 12: '# ?/?',\n 13: '# ??/??',\n 14: 'm/d/yyyy',\n 15: 'd-mmm-yy',\n 16: 'd-mmm',\n 17: 'mmm-yy',\n 18: 'h:mm AM/PM',\n 19: 'h:mm:ss AM/PM',\n 20: 'h:mm',\n 21: 'h:mm:ss',\n 22: 'm/d/yy h:mm',\n 37: '#,##0_);(#,##0)',\n 38: '#,##0_);[Red](#,##0)',\n 39: '#,##0.00_);(#,##0.00)',\n 40: '#,##0.00_);[Red](#,##0.00)',\n 45: 'mm:ss',\n 46: '[h]:mm:ss',\n 47: 'mm:ss.0',\n 48: '##0.0E+0',\n 49: '@',\n};\n\n// ── XML Parser configuration ───────────────────────────────────────────────\n\nfunction createParser(): XMLParser {\n return new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n isArray: (name: string) => {\n // Force these elements to always be arrays even when there's only one\n const arrayElements = new Set([\n 'sheet', 'row', 'c', 'si', 't', 'r', 'font', 'fill', 'border',\n 'xf', 'numFmt', 'mergeCell', 'col', 'Relationship',\n 'Override', 'Default', 'dxf', 'definedName',\n ]);\n return arrayElements.has(name);\n },\n removeNSPrefix: true,\n parseTagValue: false,\n trimValues: false,\n });\n}\n\n// ── Helper: extract text from attribute or return default ──────────────────\n\nfunction attr(elem: any, name: string, defaultVal = ''): string {\n if (!elem) return defaultVal;\n const key = `@_${name}`;\n return elem[key] !== undefined ? String(elem[key]) : defaultVal;\n}\n\nfunction attrOpt(elem: any, name: string): string | null {\n if (!elem) return null;\n const key = `@_${name}`;\n return elem[key] !== undefined ? String(elem[key]) : null;\n}\n\n// ── Helper: ensure value is always an array ────────────────────────────────\n\nfunction ensureArray<T>(val: T | T[] | undefined | null): T[] {\n if (val === undefined || val === null) return [];\n return Array.isArray(val) ? val : [val];\n}\n\n// ── Helper: regex-based raw XML extraction (for round-trip) ────────────────\n\nfunction extractRootExtraAttrs(xmlText: string, tagName: string): string {\n const regex = new RegExp(`<${tagName}\\\\b([^>]*)>`, 's');\n const match = regex.exec(xmlText);\n if (!match) return '';\n let attrs = match[1];\n attrs = attrs.replace(/\\s+xmlns=\"[^\"]*\"/g, '');\n attrs = attrs.replace(/\\s+xmlns:r=\"[^\"]*\"/g, '');\n return attrs.trim();\n}\n\nfunction extractRawElement(xmlText: string, tagName: string): string | null {\n // Escaped tag name for regex\n const escaped = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const patterns = [\n new RegExp(`(<${escaped}\\\\b[^>]*/>)`, 's'),\n new RegExp(`(<${escaped}\\\\b[^>]*>.*?</${escaped}>)`, 's'),\n ];\n for (const pattern of patterns) {\n const match = pattern.exec(xmlText);\n if (match) return match[1];\n }\n return null;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// XmlLoader class\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport class XmlLoader {\n private _workbook: Workbook;\n private _wb: WorkbookInternal;\n private _parser: XMLParser;\n\n // Content-type tracking\n private _contentTypeOverrides: Record<string, string> = {};\n private _contentTypeDefaults: Record<string, string> = {};\n\n constructor(workbook: Workbook) {\n this._workbook = workbook;\n this._wb = workbook as unknown as WorkbookInternal;\n this._parser = createParser();\n\n // Initialize loader-specific style registries on workbook\n this._wb._loaderFontStyles = new Map();\n this._wb._loaderFillStyles = new Map();\n this._wb._loaderBorderStyles = new Map();\n this._wb._loaderAlignmentStyles = new Map();\n this._wb._loaderProtectionStyles = new Map();\n this._wb._loaderNumFormats = new Map();\n this._wb._loaderCellStyles = new Map();\n this._wb._loaderCellXfByIndex = new Map();\n this._wb._sourceStylesXml = null;\n this._wb._sourceCellXfsCount = 0;\n this._wb._themeXml = null;\n this._wb._contentTypeDefaults = {};\n this._wb._contentTypeOverrides = {};\n this._wb._sourceExtraWorkbookRels = [];\n this._wb._sourceCalcChainBytes = null;\n this._wb._sourceCalcChainRel = null;\n this._wb._dxfStyles = [];\n }\n\n // ── Public API ──────────────────────────────────────────────────────────\n\n /**\n * Loads workbook data from a JSZip instance.\n */\n async loadWorkbook(zip: JSZip): Promise<void> {\n // Load workbook.xml\n const wbXmlBuf = await zip.file('xl/workbook.xml')?.async('nodebuffer');\n if (!wbXmlBuf) throw new Error('xl/workbook.xml not found in XLSX archive');\n const wbXmlText = wbXmlBuf.toString('utf-8');\n const wbRoot = this._parser.parse(wbXmlText);\n const workbookNode = wbRoot.workbook || wbRoot;\n\n // Preserve raw XML for round-trip\n this._wb._sourceXml['workbook_root_extra_attrs'] =\n extractRootExtraAttrs(wbXmlText, 'workbook');\n const altContent = extractRawElement(wbXmlText, 'mc:AlternateContent');\n if (altContent) this._wb._sourceXml['workbook_alt_content'] = altContent;\n const revPtr = extractRawElement(wbXmlText, 'xr:revisionPtr');\n if (revPtr) this._wb._sourceXml['workbook_revision_ptr'] = revPtr;\n const extLst = extractRawElement(wbXmlText, 'extLst');\n if (extLst) this._wb._sourceXml['workbook_extlst'] = extLst;\n\n // Load workbook properties\n this._loadWorkbookProperties(workbookNode);\n\n // Load document properties\n await this._loadDocumentProperties(zip);\n\n // Load content type overrides\n await this._loadContentTypeOverrides(zip);\n\n // Load theme\n await this._loadTheme(zip);\n\n // Load worksheet info (creates worksheet objects)\n this._loadWorksheetInfo(workbookNode);\n\n // Apply print areas from defined names\n this._applyPrintAreasFromDefinedNames(workbookNode);\n\n // Load extra workbook rels\n await this._loadExtraWorkbookRels(zip);\n\n // Load shared strings\n await this._loadSharedStrings(zip);\n\n // Load styles\n await this._loadStyles(zip);\n\n // Load worksheet data\n await this._loadWorksheetsData(zip);\n }\n\n /**\n * Loads a workbook from a Buffer.\n */\n static async loadFromBuffer(buffer: Buffer): Promise<Workbook> {\n const zip = await JSZip.loadAsync(buffer);\n const workbook = Object.create(Workbook.prototype) as Workbook;\n\n // Manually initialize internal state (bypass constructor's default sheet creation)\n const wb = workbook as unknown as WorkbookInternal;\n wb._worksheets = [];\n wb._styles = [];\n wb._sharedStrings = [];\n (workbook as any)._filePath = null;\n (workbook as any)._properties = new (\n await import('../core/Workbook')\n ).WorkbookProperties();\n (workbook as any)._documentProperties = null;\n wb._sourceXml = {};\n\n // Initialize saver-compatible style maps (Map<string, number>)\n (workbook as any)._fontStyles = new Map();\n (workbook as any)._fillStyles = new Map();\n (workbook as any)._borderStyles = new Map();\n (workbook as any)._alignmentStyles = new Map();\n (workbook as any)._protectionStyles = new Map();\n (workbook as any)._cellStyles = new Map();\n (workbook as any)._numFormats = new Map();\n\n // Push default style\n const { Style } = await import('../styling/Style');\n wb._styles.push(new Style());\n\n const loader = new XmlLoader(workbook);\n await loader.loadWorkbook(zip);\n return workbook;\n }\n\n /**\n * Loads a workbook from a file path.\n */\n static async loadFromFile(filePath: string): Promise<Workbook> {\n const fs = await import('fs');\n const buffer = fs.readFileSync(filePath);\n const workbook = await XmlLoader.loadFromBuffer(buffer);\n (workbook as any)._filePath = filePath;\n return workbook;\n }\n\n // ── Content Types ───────────────────────────────────────────────────────\n\n private async _loadContentTypeOverrides(zip: JSZip): Promise<void> {\n this._contentTypeDefaults = {};\n this._contentTypeOverrides = {};\n this._wb._contentTypeDefaults = {};\n this._wb._contentTypeOverrides = {};\n\n const file = zip.file('[Content_Types].xml');\n if (!file) return;\n\n try {\n const buf = await file.async('nodebuffer');\n const root = this._parser.parse(buf.toString('utf-8'));\n const types = root.Types || root;\n\n for (const def of ensureArray(types.Default)) {\n const ext = attrOpt(def, 'Extension');\n const ct = attrOpt(def, 'ContentType');\n if (ext && ct) {\n this._contentTypeDefaults[ext.toLowerCase()] = ct;\n this._wb._contentTypeDefaults[ext.toLowerCase()] = ct;\n }\n }\n\n for (const ov of ensureArray(types.Override)) {\n const partName = attrOpt(ov, 'PartName');\n const ct = attrOpt(ov, 'ContentType');\n if (partName && ct) {\n this._contentTypeOverrides[partName] = ct;\n this._wb._contentTypeOverrides[partName] = ct;\n }\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // ── Theme ───────────────────────────────────────────────────────────────\n\n private async _loadTheme(zip: JSZip): Promise<void> {\n const file = zip.file('xl/theme/theme1.xml');\n if (file) {\n this._wb._themeXml = await file.async('nodebuffer');\n } else {\n this._wb._themeXml = null;\n }\n }\n\n // ── Workbook Properties ─────────────────────────────────────────────────\n\n private _loadWorkbookProperties(workbookNode: any): void {\n const props = this._wb._properties;\n\n // File version\n const fv = workbookNode.fileVersion;\n if (fv && props.file_version) {\n props.file_version.appName = attr(fv, 'appName', 'xl');\n props.file_version.lastEdited = attr(fv, 'lastEdited', '5');\n props.file_version.lowestEdited = attr(fv, 'lowestEdited', '5');\n props.file_version.rupBuild = attr(fv, 'rupBuild', '9302');\n }\n\n // Workbook Pr\n const wbPr = workbookNode.workbookPr;\n if (wbPr && props.workbook_pr) {\n const dtvStr = attrOpt(wbPr, 'defaultThemeVersion');\n if (dtvStr) props.workbook_pr.defaultThemeVersion = dtvStr;\n }\n\n // Book views\n const bookViews = workbookNode.bookViews;\n if (bookViews) {\n const wbView = bookViews.workbookView;\n const view = Array.isArray(wbView) ? wbView[0] : wbView;\n if (view) {\n const tab = attrOpt(view, 'activeTab');\n if (tab !== null) props.view.activeTab = parseInt(tab, 10) || 0;\n }\n }\n\n // Calc properties\n const calcPr = workbookNode.calcPr;\n if (calcPr && props.calculation !== undefined) {\n const calcMode = attrOpt(calcPr, 'calcMode');\n if (calcMode) props.calcMode = calcMode;\n }\n\n // Load defined names (ECMA-376 Section 18.2.6)\n this._loadDefinedNames(workbookNode);\n }\n\n private _loadDefinedNames(workbookNode: any): void {\n const dnContainer = workbookNode.definedNames;\n if (!dnContainer) return;\n\n const dnElems = ensureArray(dnContainer.definedName);\n const collection = this._wb._properties.definedNames;\n\n for (const dnElem of dnElems) {\n // definedName element: name in attribute, value in text\n const name = dnElem?.['@_name'] ?? '';\n if (!name) continue;\n\n const refersTo = typeof dnElem === 'string'\n ? dnElem\n : (dnElem?.['#text'] ?? '');\n\n let localSheetId: number | null = null;\n const lsId = dnElem?.['@_localSheetId'];\n if (lsId != null) {\n localSheetId = parseInt(String(lsId), 10);\n }\n\n const dn = new DefinedName(name, String(refersTo), localSheetId);\n dn.hidden = dnElem?.['@_hidden'] === '1';\n const comment = dnElem?.['@_comment'];\n if (comment) dn.comment = String(comment);\n\n (collection as any)._names.push(dn);\n }\n }\n\n // ── Worksheet Info ──────────────────────────────────────────────────────\n\n private _loadWorksheetInfo(workbookNode: any): void {\n const sheetsNode = workbookNode.sheets;\n if (!sheetsNode) return;\n\n const sheets = ensureArray(sheetsNode.sheet);\n for (const sheet of sheets) {\n const sheetName = attr(sheet, 'name', 'Sheet');\n const ws = new Worksheet(sheetName);\n (ws as any)._workbook = this._workbook;\n\n // Load visibility state\n const state = attrOpt(sheet, 'state');\n if (state === 'hidden') {\n (ws as any)._visible = false;\n } else if (state === 'veryHidden') {\n (ws as any)._visible = 'veryHidden';\n }\n\n this._wb._worksheets.push(ws);\n }\n }\n\n // ── Print Areas from Defined Names ──────────────────────────────────────\n\n private _applyPrintAreasFromDefinedNames(workbookNode: any): void {\n const dnNode = workbookNode.definedNames;\n if (!dnNode) return;\n\n const names = ensureArray(dnNode.definedName);\n for (const dn of names) {\n const name = attr(dn, 'name');\n if (name !== '_xlnm.Print_Area') continue;\n\n const sheetIdStr = attrOpt(dn, 'localSheetId');\n if (sheetIdStr === null) continue;\n const sheetId = parseInt(sheetIdStr, 10);\n if (isNaN(sheetId) || sheetId < 0 || sheetId >= this._wb._worksheets.length) continue;\n\n const refersTo = typeof dn === 'object' && dn['#text']\n ? String(dn['#text'])\n : '';\n if (!refersTo) continue;\n\n const ws = this._wb._worksheets[sheetId];\n const printArea = this._extractPrintArea(refersTo);\n if (printArea) {\n (ws as any)._printArea = printArea;\n }\n }\n }\n\n private _extractPrintArea(refersTo: string): string | null {\n if (!refersTo) return null;\n const parts: string[] = [];\n for (let token of refersTo.split(',')) {\n token = token.trim();\n if (!token) continue;\n let addr = token;\n if (token.includes('!')) {\n addr = token.split('!')[1];\n }\n addr = addr.replace(/\\$/g, '').trim().toUpperCase();\n parts.push(addr);\n }\n return parts.length > 0 ? parts.join(',') : null;\n }\n\n // ── Shared Strings ──────────────────────────────────────────────────────\n\n private async _loadSharedStrings(zip: JSZip): Promise<void> {\n const file = zip.file('xl/sharedStrings.xml');\n if (!file) {\n this._wb._sharedStrings = [];\n return;\n }\n\n try {\n const buf = await file.async('nodebuffer');\n const root = this._parser.parse(buf.toString('utf-8'));\n const sst = root.sst || root;\n this._wb._sharedStrings = [];\n\n const siList = ensureArray(sst.si);\n for (const si of siList) {\n // Simple text: <si><t>text</t></si>\n if (si.t !== undefined) {\n const tArr = ensureArray(si.t);\n const texts: string[] = [];\n for (const t of tArr) {\n if (typeof t === 'string') {\n texts.push(t);\n } else if (t && t['#text'] !== undefined) {\n texts.push(String(t['#text']));\n } else if (typeof t === 'number') {\n texts.push(String(t));\n } else {\n texts.push('');\n }\n }\n this._wb._sharedStrings.push(texts.join(''));\n continue;\n }\n\n // Rich text: <si><r><t>text</t></r>...</si>\n if (si.r !== undefined) {\n const runs = ensureArray(si.r);\n const texts: string[] = [];\n for (const run of runs) {\n if (run.t !== undefined) {\n const tArr = ensureArray(run.t);\n for (const t of tArr) {\n if (typeof t === 'string') {\n texts.push(t);\n } else if (t && t['#text'] !== undefined) {\n texts.push(String(t['#text']));\n } else if (typeof t === 'number') {\n texts.push(String(t));\n } else {\n texts.push('');\n }\n }\n }\n }\n this._wb._sharedStrings.push(texts.join(''));\n continue;\n }\n\n // Fallback: empty string\n this._wb._sharedStrings.push('');\n }\n } catch {\n this._wb._sharedStrings = [];\n }\n }\n\n // ── Styles ──────────────────────────────────────────────────────────────\n\n private async _loadStyles(zip: JSZip): Promise<void> {\n const file = zip.file('xl/styles.xml');\n if (!file) return;\n\n try {\n const buf = await file.async('nodebuffer');\n this._wb._sourceStylesXml = buf;\n const root = this._parser.parse(buf.toString('utf-8'));\n const stylesRoot = root.styleSheet || root;\n\n // Count cellXfs\n const cellXfsElem = stylesRoot.cellXfs;\n if (cellXfsElem) {\n this._wb._sourceCellXfsCount = parseInt(attr(cellXfsElem, 'count', '0'), 10);\n }\n\n this._loadStylesXml(stylesRoot);\n this._loadDxfStyles(stylesRoot);\n } catch {\n // Use defaults on parse error\n }\n }\n\n private _loadStylesXml(stylesRoot: any): void {\n // Register built-in number formats\n for (const [id, code] of Object.entries(BUILTIN_FORMATS)) {\n this._wb._loaderNumFormats.set(Number(id), code);\n }\n\n // Load custom number formats\n const numFmtsNode = stylesRoot.numFmts;\n if (numFmtsNode) {\n const fmts = ensureArray(numFmtsNode.numFmt);\n for (const fmt of fmts) {\n const id = parseInt(attr(fmt, 'numFmtId', '0'), 10);\n const code = attr(fmt, 'formatCode', 'General');\n this._wb._loaderNumFormats.set(id, code);\n }\n }\n\n // Load fonts\n this._loadFonts(stylesRoot);\n\n // Load fills\n this._loadFills(stylesRoot);\n\n // Load borders\n this._loadBorders(stylesRoot);\n\n // Load cellXfs\n this._loadCellXfs(stylesRoot);\n }\n\n // ── Fonts ───────────────────────────────────────────────────────────────\n\n private _loadFonts(stylesRoot: any): void {\n const fontsNode = stylesRoot.fonts;\n if (!fontsNode) return;\n\n const fonts = ensureArray(fontsNode.font);\n for (let i = 0; i < fonts.length; i++) {\n const fontElem = fonts[i];\n\n const szElem = fontElem.sz;\n const colorElem = fontElem.color;\n const nameElem = fontElem.name;\n const familyElem = fontElem.family;\n const charsetElem = fontElem.charset;\n const schemeElem = fontElem.scheme;\n const bElem = fontElem.b;\n const iElem = fontElem.i;\n const uElem = fontElem.u;\n const strikeElem = fontElem.strike;\n\n let colorType: string | null = null;\n let colorValue: string | null = null;\n let colorTint: string | null = null;\n\n if (colorElem) {\n if (attrOpt(colorElem, 'rgb') !== null) {\n colorType = 'rgb';\n colorValue = attr(colorElem, 'rgb');\n } else if (attrOpt(colorElem, 'theme') !== null) {\n colorType = 'theme';\n colorValue = attr(colorElem, 'theme');\n } else if (attrOpt(colorElem, 'indexed') !== null) {\n colorType = 'indexed';\n colorValue = attr(colorElem, 'indexed');\n } else if (attrOpt(colorElem, 'auto') !== null) {\n colorType = 'auto';\n colorValue = attr(colorElem, 'auto');\n }\n if (attrOpt(colorElem, 'tint') !== null) {\n colorTint = attr(colorElem, 'tint');\n }\n }\n\n const fontData: LoaderFontData = {\n name: nameElem ? attr(nameElem, 'val', 'Calibri') : 'Calibri',\n size: szElem ? parseFloat(attr(szElem, 'val', '11')) : 11,\n color: colorType === 'rgb' && colorValue ? colorValue : 'FF000000',\n color_type: colorType,\n color_value: colorValue,\n color_tint: colorTint,\n family: familyElem ? attr(familyElem, 'val') : null,\n charset: charsetElem ? attr(charsetElem, 'val') : null,\n scheme: schemeElem ? attr(schemeElem, 'val') : null,\n bold: bElem !== undefined,\n italic: iElem !== undefined,\n underline: uElem !== undefined,\n strikethrough: strikeElem !== undefined,\n };\n\n this._wb._loaderFontStyles.set(i, fontData);\n\n // Update default style font (fontId=0)\n if (i === 0 && this._wb._styles.length > 0) {\n const defaultFont = this._wb._styles[0].font;\n defaultFont.name = fontData.name;\n defaultFont.size = fontData.size;\n defaultFont.bold = fontData.bold;\n defaultFont.italic = fontData.italic;\n defaultFont.underline = fontData.underline;\n defaultFont.strikethrough = fontData.strikethrough;\n if (fontData.color_type === 'rgb' && fontData.color_value) {\n defaultFont.color = fontData.color_value;\n }\n }\n }\n }\n\n // ── Fills ───────────────────────────────────────────────────────────────\n\n private _loadFills(stylesRoot: any): void {\n const fillsNode = stylesRoot.fills;\n if (!fillsNode) return;\n\n const fills = ensureArray(fillsNode.fill);\n for (let i = 0; i < fills.length; i++) {\n const fillElem = fills[i];\n const patternElem = fillElem.patternFill;\n const fgColorElem = patternElem ? patternElem.fgColor : null;\n const bgColorElem = patternElem ? patternElem.bgColor : null;\n\n const [fgType, fgValue, fgTint] = this._extractColorAttrs(fgColorElem);\n const [bgType, bgValue, bgTint] = this._extractColorAttrs(bgColorElem);\n\n const fgRgb = fgType === 'rgb' && fgValue ? fgValue : 'FFFFFFFF';\n const bgRgb = bgType === 'rgb' && bgValue ? bgValue : 'FFFFFFFF';\n\n const fillData: LoaderFillData = {\n pattern_type: patternElem ? attr(patternElem, 'patternType', 'none') : 'none',\n fg_color: fgRgb,\n bg_color: bgRgb,\n fg_color_type: fgType,\n fg_color_value: fgValue,\n fg_color_tint: fgTint,\n bg_color_type: bgType,\n bg_color_value: bgValue,\n bg_color_tint: bgTint,\n };\n\n this._wb._loaderFillStyles.set(i, fillData);\n }\n }\n\n private _extractColorAttrs(\n colorElem: any,\n ): [string, string | null, number | null] {\n if (!colorElem) return ['rgb', 'FFFFFFFF', null];\n\n const tintStr = attrOpt(colorElem, 'tint');\n const tint = tintStr !== null ? parseFloat(tintStr) : null;\n\n if (attrOpt(colorElem, 'rgb') !== null) {\n return ['rgb', attr(colorElem, 'rgb'), tint];\n }\n if (attrOpt(colorElem, 'theme') !== null) {\n return ['theme', attr(colorElem, 'theme'), tint];\n }\n if (attrOpt(colorElem, 'indexed') !== null) {\n return ['indexed', attr(colorElem, 'indexed'), tint];\n }\n if (attrOpt(colorElem, 'auto') !== null) {\n return ['auto', attr(colorElem, 'auto'), tint];\n }\n return ['rgb', 'FFFFFFFF', tint];\n }\n\n // ── Borders ─────────────────────────────────────────────────────────────\n\n private _loadBorders(stylesRoot: any): void {\n const bordersNode = stylesRoot.borders;\n if (!bordersNode) return;\n\n const borders = ensureArray(bordersNode.border);\n for (let i = 0; i < borders.length; i++) {\n if (i === 0) continue; // Skip default border\n\n const borderElem = borders[i];\n const loadSide = (side: string): LoaderBorderSideData => {\n const sideElem = borderElem[side];\n if (!sideElem) return { style: 'none', color: 'FF000000' };\n const style = attr(sideElem, 'style', 'none');\n const colorElem = sideElem.color;\n const color = colorElem ? attr(colorElem, 'rgb', 'FF000000') : 'FF000000';\n return { style, color };\n };\n\n const borderData: LoaderBorderData = {\n top: loadSide('top'),\n bottom: loadSide('bottom'),\n left: loadSide('left'),\n right: loadSide('right'),\n };\n\n this._wb._loaderBorderStyles.set(i, borderData);\n }\n }\n\n // ── Cell XFs ────────────────────────────────────────────────────────────\n\n private _loadCellXfs(stylesRoot: any): void {\n // Ensure default alignment/protection exist at index 0\n if (!this._wb._loaderAlignmentStyles.has(0)) {\n this._wb._loaderAlignmentStyles.set(0, {\n horizontal: 'general',\n vertical: 'bottom',\n wrap_text: false,\n indent: 0,\n text_rotation: 0,\n shrink_to_fit: false,\n reading_order: 0,\n relative_indent: 0,\n });\n }\n if (!this._wb._loaderProtectionStyles.has(0)) {\n this._wb._loaderProtectionStyles.set(0, {\n locked: true,\n hidden: false,\n });\n }\n\n const cellXfsNode = stylesRoot.cellXfs;\n if (!cellXfsNode) return;\n\n const xfs = ensureArray(cellXfsNode.xf);\n for (let i = 0; i < xfs.length; i++) {\n const xfElem = xfs[i];\n\n const fontIdx = parseInt(attr(xfElem, 'fontId', '0'), 10);\n const fillIdx = parseInt(attr(xfElem, 'fillId', '0'), 10);\n const borderIdx = parseInt(attr(xfElem, 'borderId', '0'), 10);\n const numFmtIdx = parseInt(attr(xfElem, 'numFmtId', '0'), 10);\n\n // Load alignment if present\n let alignmentIdx = 0;\n const alignElem = xfElem.alignment;\n if (alignElem) {\n const horizontal = attr(alignElem, 'horizontal', 'general');\n const vertical = attr(alignElem, 'vertical', 'bottom');\n const textRotation = parseInt(attr(alignElem, 'textRotation', '0'), 10);\n const wrapText = attr(alignElem, 'wrapText') === '1';\n const shrinkToFit = attr(alignElem, 'shrinkToFit') === '1';\n const indent = parseInt(attr(alignElem, 'indent', '0'), 10);\n const readingOrder = parseInt(attr(alignElem, 'readingOrder', '0'), 10);\n const relativeIndent = parseInt(attr(alignElem, 'relativeIndent', '0'), 10);\n\n // Check if this alignment already exists\n let found = false;\n for (const [idx, ad] of this._wb._loaderAlignmentStyles) {\n if (\n ad.horizontal === horizontal &&\n ad.vertical === vertical &&\n ad.wrap_text === wrapText &&\n ad.indent === indent &&\n ad.text_rotation === textRotation &&\n ad.shrink_to_fit === shrinkToFit &&\n ad.reading_order === readingOrder &&\n ad.relative_indent === relativeIndent\n ) {\n alignmentIdx = idx;\n found = true;\n break;\n }\n }\n\n if (!found) {\n alignmentIdx = this._wb._loaderAlignmentStyles.size;\n this._wb._loaderAlignmentStyles.set(alignmentIdx, {\n horizontal,\n vertical,\n wrap_text: wrapText,\n indent,\n text_rotation: textRotation,\n shrink_to_fit: shrinkToFit,\n reading_order: readingOrder,\n relative_indent: relativeIndent,\n });\n }\n }\n\n // Load protection if present\n let protectionIdx = 0;\n const protElem = xfElem.protection;\n if (protElem) {\n const locked = attr(protElem, 'locked', '1') === '1';\n const hidden = attr(protElem, 'hidden', '0') === '1';\n\n // Check if this protection already exists\n let found = false;\n for (const [idx, pd] of this._wb._loaderProtectionStyles) {\n if (pd.locked === locked && pd.hidden === hidden) {\n protectionIdx = idx;\n found = true;\n break;\n }\n }\n\n if (!found && !(locked && !hidden)) {\n protectionIdx = this._wb._loaderProtectionStyles.size;\n this._wb._loaderProtectionStyles.set(protectionIdx, {\n locked,\n hidden,\n });\n }\n }\n\n const cellStyleKey: CellStyleKey = [\n fontIdx, fillIdx, borderIdx, numFmtIdx, alignmentIdx, protectionIdx,\n ];\n const keyStr = JSON.stringify(cellStyleKey);\n this._wb._loaderCellStyles.set(keyStr, i);\n this._wb._loaderCellXfByIndex.set(i, cellStyleKey);\n }\n }\n\n // ── DXF Styles (conditional formatting) ─────────────────────────────────\n\n private _loadDxfStyles(stylesRoot: any): void {\n this._wb._dxfStyles = [];\n\n const dxfsNode = stylesRoot.dxfs;\n if (!dxfsNode) return;\n\n const dxfs = ensureArray(dxfsNode.dxf);\n for (const dxfElem of dxfs) {\n const dxfData: Record<string, any> = {};\n\n // Font\n const fontElem = dxfElem.font;\n if (fontElem) {\n const fontData: Record<string, any> = {};\n if (fontElem.b !== undefined) {\n fontData.bold = attr(fontElem.b, 'val', '1') !== '0';\n }\n if (fontElem.i !== undefined) {\n fontData.italic = attr(fontElem.i, 'val', '1') !== '0';\n }\n if (fontElem.u !== undefined) {\n fontData.underline = true;\n }\n if (fontElem.strike !== undefined) {\n fontData.strikethrough = true;\n }\n if (fontElem.color) {\n fontData.color = attr(fontElem.color, 'rgb', 'FF000000');\n }\n if (Object.keys(fontData).length > 0) {\n dxfData.font = fontData;\n }\n }\n\n // Fill\n const fillElem = dxfElem.fill;\n if (fillElem) {\n const patternElem = fillElem.patternFill;\n if (patternElem) {\n const fillData: Record<string, string> = {\n pattern_type: attr(patternElem, 'patternType', 'solid'),\n };\n if (patternElem.fgColor) {\n fillData.fg_color = attr(patternElem.fgColor, 'rgb', 'FFFFFFFF');\n }\n if (patternElem.bgColor) {\n fillData.bg_color = attr(patternElem.bgColor, 'rgb', 'FFFFFFFF');\n }\n dxfData.fill = fillData;\n }\n }\n\n // Border\n const borderElem = dxfElem.border;\n if (borderElem) {\n for (const side of ['left', 'right', 'top', 'bottom']) {\n const sideElem = borderElem[side];\n if (sideElem) {\n const style = attr(sideElem, 'style', 'thin');\n let color = 'FF000000';\n if (sideElem.color) {\n color = attr(sideElem.color, 'rgb', 'FF000000');\n }\n dxfData.border = { style, color };\n break;\n }\n }\n }\n\n this._wb._dxfStyles.push(dxfData);\n }\n }\n\n // ── Extra Workbook Rels ─────────────────────────────────────────────────\n\n private async _loadExtraWorkbookRels(zip: JSZip): Promise<void> {\n const file = zip.file('xl/_rels/workbook.xml.rels');\n if (!file) return;\n\n const buf = await file.async('nodebuffer');\n const root = this._parser.parse(buf.toString('utf-8'));\n const relsNode = root.Relationships || root;\n\n const NATIVE_TYPES = new Set([\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n ]);\n\n const extraRels: any[] = [];\n const rels = ensureArray(relsNode.Relationship);\n\n for (const rel of rels) {\n const relType = attr(rel, 'Type');\n const target = attr(rel, 'Target');\n const relId = attr(rel, 'Id');\n const targetMode = attr(rel, 'TargetMode');\n\n // Handle calcChain\n if (relType === 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain') {\n const partPath = target.startsWith('/') ? target.slice(1) : `xl/${target}`;\n try {\n const partFile = zip.file(partPath);\n if (partFile) {\n this._wb._sourceCalcChainBytes = await partFile.async('nodebuffer');\n this._wb._sourceCalcChainRel = {\n rel_id: relId,\n target,\n part_path: partPath,\n content_type:\n this._contentTypeOverrides[`/${partPath}`] ||\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml',\n };\n }\n } catch {\n // ignore\n }\n continue;\n }\n\n if (NATIVE_TYPES.has(relType)) continue;\n if (targetMode === 'External') continue;\n\n const partPath = target.startsWith('/') ? target.slice(1) : `xl/${target}`;\n\n let partBytes: Buffer | null = null;\n try {\n const partFile = zip.file(partPath);\n if (partFile) {\n partBytes = await partFile.async('nodebuffer');\n }\n } catch {\n // ignore\n }\n\n // Read part's own rels file\n const lastSlash = partPath.lastIndexOf('/');\n const dirPart = lastSlash >= 0 ? partPath.substring(0, lastSlash) : '';\n const filePart = lastSlash >= 0 ? partPath.substring(lastSlash + 1) : partPath;\n const partRelsPath = `${dirPart}/_rels/${filePart}.rels`;\n\n let partRelsBytes: Buffer | null = null;\n try {\n const rlsFile = zip.file(partRelsPath);\n if (rlsFile) {\n partRelsBytes = await rlsFile.async('nodebuffer');\n }\n } catch {\n // ignore\n }\n\n const contentType = this._contentTypeOverrides[`/${partPath}`] || null;\n\n extraRels.push({\n rel_id: relId,\n rel_type: relType,\n target,\n part_path: partPath,\n part_bytes: partBytes,\n part_rels_path: partRelsPath,\n part_rels_bytes: partRelsBytes,\n content_type: contentType,\n });\n }\n\n if (extraRels.length > 0) {\n this._wb._sourceExtraWorkbookRels = extraRels;\n }\n }\n\n // ── Worksheets Data ─────────────────────────────────────────────────────\n\n private async _loadWorksheetsData(zip: JSZip): Promise<void> {\n interface WsAndRoot {\n idx: number;\n ws: Worksheet;\n root: any | null;\n }\n\n const worksheetsAndRoots: WsAndRoot[] = [];\n\n for (let i = 0; i < this._wb._worksheets.length; i++) {\n const ws = this._wb._worksheets[i];\n const file = zip.file(`xl/worksheets/sheet${i + 1}.xml`);\n if (!file) {\n worksheetsAndRoots.push({ idx: i, ws, root: null });\n continue;\n }\n\n try {\n const buf = await file.async('nodebuffer');\n const xmlText = buf.toString('utf-8');\n const parsed = this._parser.parse(xmlText);\n const wsRoot = parsed.worksheet || parsed;\n\n // Preserve raw XML for round-trip\n (ws as any)._sourceXml = xmlText;\n\n const extraAttrs = extractRootExtraAttrs(xmlText, 'worksheet');\n if (extraAttrs) {\n (ws as any)._source_root_extra_attrs = extraAttrs;\n }\n\n const sheetPr = extractRawElement(xmlText, 'sheetPr');\n if (sheetPr) (ws as any)._source_sheet_pr_xml = sheetPr;\n\n const phoneticPr = extractRawElement(xmlText, 'phoneticPr');\n if (phoneticPr) (ws as any)._source_phonetic_pr_xml = phoneticPr;\n\n const dimensionXml = extractRawElement(xmlText, 'dimension');\n if (dimensionXml) {\n const m = /ref=\"([^\"]+)\"/.exec(dimensionXml);\n if (m) (ws as any)._source_dimension_ref = m[1];\n }\n\n // Load extra sheet rels\n await this._loadExtraSheetRels(zip, ws, i + 1);\n\n worksheetsAndRoots.push({ idx: i, ws, root: wsRoot });\n } catch {\n worksheetsAndRoots.push({ idx: i, ws, root: null });\n }\n }\n\n // Build map: comments part_path -> the worksheet that owns it via its rels.\n const claimedCommentsPaths = new Map<string, Worksheet>();\n for (const { ws } of worksheetsAndRoots) {\n for (const r of ((ws as any)._source_extra_sheet_rels ?? [])) {\n if ((r.rel_type ?? '').toLowerCase().includes('comments')) {\n claimedCommentsPaths.set(r.part_path, ws);\n }\n }\n }\n\n // Pre-load sheet rels for hyperlinks\n const sheetRelsMap = new Map<number, any>();\n for (const { idx } of worksheetsAndRoots) {\n const relsPath = `xl/worksheets/_rels/sheet${idx + 1}.xml.rels`;\n const relsFile = zip.file(relsPath);\n if (relsFile) {\n try {\n const relsBuf = await relsFile.async('nodebuffer');\n const relsRoot = this._parser.parse(relsBuf.toString('utf-8'));\n sheetRelsMap.set(idx, relsRoot);\n } catch {\n // ignore\n }\n }\n }\n\n // Main pass: load cell data, comments, hyperlinks\n const commentReader = new CommentXmlReader();\n const hlLoader = new HyperlinkXmlLoader();\n\n for (const { idx, ws, root } of worksheetsAndRoots) {\n if (root === null) continue;\n try {\n this._loadWorksheetData(ws, root);\n\n // Load comments for this worksheet\n const defaultCommentsPath = `xl/comments${idx + 1}.xml`;\n const commentsOwner = claimedCommentsPaths.get(defaultCommentsPath);\n if (commentsOwner == null || commentsOwner === ws) {\n await this._loadComments(zip, ws, idx + 1, commentReader);\n }\n\n // Load hyperlinks for this worksheet\n const relsRoot = sheetRelsMap.get(idx);\n const relationships = relsRoot\n ? hlLoader.loadRelationships(relsRoot)\n : new Map<string, string>();\n hlLoader.loadHyperlinks(root, ws.hyperlinks, relationships);\n } catch {\n // Skip worksheet on error\n }\n }\n }\n\n private async _loadComments(\n zip: JSZip,\n worksheet: Worksheet,\n sheetNum: number,\n reader: CommentXmlReader,\n ): Promise<void> {\n const commentsFile = zip.file(`xl/comments${sheetNum}.xml`);\n if (!commentsFile) return;\n\n try {\n const buf = await commentsFile.async('nodebuffer');\n const xmlText = buf.toString('utf-8');\n const parsed = this._parser.parse(xmlText);\n reader.parseAndApplyComments(parsed, worksheet);\n } catch {\n // Skip comments on error\n }\n\n // Load VML drawing for comment sizes\n const vmlFile = zip.file(`xl/drawings/vmlDrawing${sheetNum}.vml`);\n if (vmlFile) {\n try {\n const vmlBuf = await vmlFile.async('nodebuffer');\n const vmlContent = vmlBuf.toString('utf-8');\n reader.parseAndApplyVmlDrawing(vmlContent, worksheet);\n } catch {\n // Skip VML on error\n }\n }\n }\n\n // ── Extra Sheet Rels ────────────────────────────────────────────────────\n\n private async _loadExtraSheetRels(\n zip: JSZip,\n worksheet: Worksheet,\n sheetNum: number,\n ): Promise<void> {\n const relsPath = `xl/worksheets/_rels/sheet${sheetNum}.xml.rels`;\n const file = zip.file(relsPath);\n if (!file) return;\n\n const buf = await file.async('nodebuffer');\n const root = this._parser.parse(buf.toString('utf-8'));\n const relsNode = root.Relationships || root;\n\n const PRESERVED_TYPES = new Set([\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n ]);\n\n const extraRels: any[] = [];\n const rels = ensureArray(relsNode.Relationship);\n\n for (const rel of rels) {\n const relType = attr(rel, 'Type');\n const target = attr(rel, 'Target');\n const targetMode = attr(rel, 'TargetMode');\n const relId = attr(rel, 'Id');\n\n if (!PRESERVED_TYPES.has(relType)) continue;\n if (targetMode === 'External') continue;\n\n let partPath: string;\n if (target.startsWith('../')) {\n partPath = 'xl/' + target.slice(3);\n } else if (target.startsWith('/')) {\n partPath = target.slice(1);\n } else {\n partPath = 'xl/worksheets/' + target;\n }\n\n let partBytes: Buffer | null = null;\n try {\n const partFile = zip.file(partPath);\n if (partFile) {\n partBytes = await partFile.async('nodebuffer');\n }\n } catch {\n // ignore\n }\n\n extraRels.push({\n rel_id: relId,\n rel_type: relType,\n target,\n target_mode: targetMode,\n part_path: partPath,\n part_bytes: partBytes,\n });\n }\n\n if (extraRels.length > 0) {\n (worksheet as any)._source_extra_sheet_rels = extraRels;\n }\n }\n\n // ── Worksheet Data (cells, merges, columns, rows) ───────────────────────\n\n private _loadWorksheetData(worksheet: Worksheet, wsRoot: any): void {\n // Load column dimensions\n this._loadColumnDimensions(worksheet, wsRoot);\n\n // Load row heights\n this._loadRowHeights(worksheet, wsRoot);\n\n // Load merged cells\n this._loadMergedCells(worksheet, wsRoot);\n\n // Load freeze pane from sheetViews\n this._loadFreezePane(worksheet, wsRoot);\n\n // Load auto filter settings (ECMA-376 Section 18.3.1.2)\n new AutoFilterXmlLoader().loadAutoFilter(wsRoot, worksheet.autoFilter);\n\n // Load conditional formatting (ECMA-376 Section 18.3.1.18)\n new ConditionalFormatXmlLoader(this._wb._dxfStyles).loadConditionalFormatting(\n wsRoot, worksheet.conditionalFormatting,\n );\n\n // Load data validations (ECMA-376 Section 18.3.1.30, 18.3.1.31)\n new DataValidationXmlLoader().loadDataValidations(wsRoot, worksheet.dataValidations);\n\n // Load page breaks (ECMA-376 Section 18.3.1.14, 18.3.1.73)\n this._loadPageBreaks(worksheet, wsRoot);\n\n // Load cell data\n const sharedStrings = this._wb._sharedStrings;\n const sheetData = wsRoot.sheetData;\n if (!sheetData) return;\n\n const rows = ensureArray(sheetData.row);\n for (const rowElem of rows) {\n const cells = ensureArray(rowElem.c);\n for (const cellElem of cells) {\n const cellRef = attr(cellElem, 'r');\n if (!cellRef) continue;\n\n const cellType = attr(cellElem, 't', 'n'); // Default to numeric per ECMA-376\n\n // Check for formula\n let formula: string | null = null;\n if (cellElem.f !== undefined) {\n const fValue = cellElem.f;\n if (typeof fValue === 'string') {\n formula = fValue;\n } else if (fValue && fValue['#text'] !== undefined) {\n formula = String(fValue['#text']);\n } else if (typeof fValue === 'object') {\n // Self-closing <f/> with no text\n formula = null;\n }\n if (formula !== null && !formula.startsWith('=')) {\n formula = '=' + formula;\n }\n }\n\n // Get style index\n const sAttr = attrOpt(cellElem, 's');\n const styleIdx = sAttr !== null ? parseInt(sAttr, 10) : 0;\n\n // Get cell value\n let value: CellValue = null;\n if (cellElem.v !== undefined) {\n let valueStr: string | null = null;\n if (typeof cellElem.v === 'string') {\n valueStr = cellElem.v;\n } else if (typeof cellElem.v === 'number') {\n valueStr = String(cellElem.v);\n } else if (cellElem.v && cellElem.v['#text'] !== undefined) {\n valueStr = String(cellElem.v['#text']);\n }\n\n if (valueStr !== null) {\n value = CellValueHandler.parseValueFromXml(\n valueStr,\n cellType,\n sharedStrings,\n );\n }\n }\n\n // Create cell\n const cell = new Cell(value, formula);\n\n // Apply style\n this._applyCellStyle(cell, styleIdx);\n\n // Set cell on worksheet\n worksheet.cells.set(cellRef, cell);\n }\n }\n }\n\n // ── Merged Cells ────────────────────────────────────────────────────────\n\n private _loadMergedCells(worksheet: Worksheet, wsRoot: any): void {\n const mergeCellsNode = wsRoot.mergeCells;\n if (!mergeCellsNode) {\n (worksheet as any)._mergedCells = [];\n return;\n }\n\n const merged: string[] = [];\n const cells = ensureArray(mergeCellsNode.mergeCell);\n for (const mc of cells) {\n const ref = attrOpt(mc, 'ref');\n if (ref) {\n merged.push(ref.toUpperCase());\n }\n }\n (worksheet as any)._mergedCells = merged;\n }\n\n // ── Column Dimensions ───────────────────────────────────────────────────\n\n private _loadColumnDimensions(worksheet: Worksheet, wsRoot: any): void {\n const colsNode = wsRoot.cols;\n if (!colsNode) return;\n\n const wsAny = worksheet as any;\n if (!wsAny._columnWidths) wsAny._columnWidths = {};\n if (!wsAny._hiddenColumns) wsAny._hiddenColumns = new Set();\n\n const cols = ensureArray(colsNode.col);\n for (const colElem of cols) {\n const minVal = attrOpt(colElem, 'min');\n const maxVal = attrOpt(colElem, 'max');\n const widthVal = attrOpt(colElem, 'width');\n const hiddenVal = attrOpt(colElem, 'hidden');\n\n if (minVal === null || maxVal === null) continue;\n\n const minCol = Math.floor(parseFloat(minVal));\n const maxCol = Math.floor(parseFloat(maxVal));\n if (minCol < 1 || maxCol < minCol) continue;\n\n let width: number | null = null;\n if (widthVal !== null) {\n width = parseFloat(widthVal);\n if (isNaN(width) || width <= 0) width = null;\n }\n\n for (let colIdx = minCol; colIdx <= maxCol; colIdx++) {\n if (width !== null) {\n wsAny._columnWidths[colIdx] = width;\n }\n if (hiddenVal === '1' || hiddenVal === 'true' || hiddenVal === 'True') {\n wsAny._hiddenColumns.add(colIdx);\n }\n }\n }\n }\n\n // ── Row Heights ─────────────────────────────────────────────────────────\n\n private _loadRowHeights(worksheet: Worksheet, wsRoot: any): void {\n const wsAny = worksheet as any;\n if (!wsAny._rowHeights) wsAny._rowHeights = {};\n if (!wsAny._hiddenRows) wsAny._hiddenRows = new Set();\n\n const sheetData = wsRoot.sheetData;\n if (!sheetData) return;\n\n const rows = ensureArray(sheetData.row);\n for (const rowElem of rows) {\n const ht = attrOpt(rowElem, 'ht');\n const hiddenVal = attrOpt(rowElem, 'hidden');\n const rowNum = attrOpt(rowElem, 'r');\n\n if (ht === null && !(hiddenVal === '1' || hiddenVal === 'true' || hiddenVal === 'True')) {\n continue;\n }\n if (rowNum === null) continue;\n\n const rowIdx = parseInt(rowNum, 10);\n if (isNaN(rowIdx) || rowIdx < 1) continue;\n\n if (ht !== null) {\n const height = parseFloat(ht);\n if (!isNaN(height) && height > 0) {\n wsAny._rowHeights[rowIdx] = height;\n }\n }\n if (hiddenVal === '1' || hiddenVal === 'true' || hiddenVal === 'True') {\n wsAny._hiddenRows.add(rowIdx);\n }\n }\n }\n\n // ── Freeze Pane ─────────────────────────────────────────────────────────\n\n private _loadFreezePane(worksheet: Worksheet, wsRoot: any): void {\n const sheetViews = wsRoot.sheetViews;\n if (!sheetViews) return;\n\n const views = ensureArray(sheetViews.sheetView || sheetViews);\n if (views.length === 0) return;\n\n // Use the first sheetView (or sheetViews itself if it's the view)\n let view = views[0];\n if (view.sheetView) {\n view = Array.isArray(view.sheetView) ? view.sheetView[0] : view.sheetView;\n }\n\n const pane = view.pane;\n if (!pane) return;\n\n const state = attrOpt(pane, 'state');\n if (state !== 'frozen') return;\n\n const xSplit = parseInt(attr(pane, 'xSplit', '0'), 10);\n const ySplit = parseInt(attr(pane, 'ySplit', '0'), 10);\n\n if (xSplit > 0 || ySplit > 0) {\n worksheet.setFreezePane(ySplit, xSplit, ySplit, xSplit);\n }\n }\n\n /**\n * Loads manual page breaks from rowBreaks / colBreaks elements.\n * ECMA-376 Section 18.3.1.14 (colBreaks), 18.3.1.73 (rowBreaks).\n */\n private _loadPageBreaks(worksheet: Worksheet, wsRoot: any): void {\n // Horizontal page breaks (rowBreaks)\n const rowBreaks = wsRoot.rowBreaks;\n if (rowBreaks) {\n const brks = ensureArray(rowBreaks.brk);\n for (const brk of brks) {\n const id = brk?.['@_id'];\n if (id != null) {\n worksheet.horizontalPageBreaks.add(parseInt(String(id), 10));\n }\n }\n }\n\n // Vertical page breaks (colBreaks)\n const colBreaks = wsRoot.colBreaks;\n if (colBreaks) {\n const brks = ensureArray(colBreaks.brk);\n for (const brk of brks) {\n const id = brk?.['@_id'];\n if (id != null) {\n worksheet.verticalPageBreaks.add(parseInt(String(id), 10));\n }\n }\n }\n }\n\n // ── Apply Cell Style ────────────────────────────────────────────────────\n\n private _applyCellStyle(cell: Cell, styleIdx: number): void {\n // Look up the cellXf key by index\n let cellStyleKey: CellStyleKey | undefined =\n this._wb._loaderCellXfByIndex.get(styleIdx);\n\n if (!cellStyleKey) {\n // Fallback: search by value\n for (const [keyStr, idx] of this._wb._loaderCellStyles) {\n if (idx === styleIdx) {\n cellStyleKey = JSON.parse(keyStr) as CellStyleKey;\n break;\n }\n }\n }\n\n if (!cellStyleKey) return;\n\n // Preserve original style index\n (cell as any)._sourceStyleIdx = styleIdx;\n\n const [fontKey, fillKey, borderKey, numFmtKey, alignmentKey, protectionKey] =\n cellStyleKey;\n\n // Apply font\n const fontData = this._wb._loaderFontStyles.get(fontKey);\n if (fontData) {\n cell.style.font.name = fontData.name;\n cell.style.font.size = fontData.size;\n cell.style.font.color = fontData.color;\n cell.style.font.bold = fontData.bold;\n cell.style.font.italic = fontData.italic;\n cell.style.font.underline = fontData.underline;\n cell.style.font.strikethrough = fontData.strikethrough;\n }\n\n // Apply fill\n const fillData = this._wb._loaderFillStyles.get(fillKey);\n if (fillData) {\n cell.style.fill.patternType = fillData.pattern_type;\n cell.style.fill.foregroundColor = fillData.fg_color;\n cell.style.fill.backgroundColor = fillData.bg_color;\n }\n\n // Apply border\n const borderData = this._wb._loaderBorderStyles.get(borderKey);\n if (borderData) {\n cell.style.borders.top.lineStyle = borderData.top.style;\n cell.style.borders.top.color = borderData.top.color;\n cell.style.borders.bottom.lineStyle = borderData.bottom.style;\n cell.style.borders.bottom.color = borderData.bottom.color;\n cell.style.borders.left.lineStyle = borderData.left.style;\n cell.style.borders.left.color = borderData.left.color;\n cell.style.borders.right.lineStyle = borderData.right.style;\n cell.style.borders.right.color = borderData.right.color;\n }\n\n // Apply number format\n const numFmtCode = this._wb._loaderNumFormats.get(numFmtKey);\n if (numFmtCode !== undefined) {\n cell.style.numberFormat = numFmtCode;\n }\n\n // Apply alignment\n const alignData = this._wb._loaderAlignmentStyles.get(alignmentKey);\n if (alignData) {\n cell.style.alignment.horizontal = alignData.horizontal;\n cell.style.alignment.vertical = alignData.vertical;\n cell.style.alignment.wrapText = alignData.wrap_text;\n cell.style.alignment.indent = alignData.indent;\n cell.style.alignment.textRotation = alignData.text_rotation;\n cell.style.alignment.shrinkToFit = alignData.shrink_to_fit;\n cell.style.alignment.readingOrder = alignData.reading_order;\n cell.style.alignment.relativeIndent = alignData.relative_indent;\n }\n\n // Apply protection\n const protData = this._wb._loaderProtectionStyles.get(protectionKey);\n if (protData) {\n cell.style.protection.locked = protData.locked;\n cell.style.protection.hidden = protData.hidden;\n }\n }\n\n // ── Document Properties ─────────────────────────────────────────────────\n\n private async _loadDocumentProperties(zip: JSZip): Promise<void> {\n await this._loadCoreProperties(zip);\n await this._loadAppProperties(zip);\n }\n\n private async _loadCoreProperties(zip: JSZip): Promise<void> {\n const file = zip.file('docProps/core.xml');\n if (!file) return;\n\n try {\n const buf = await file.async('nodebuffer');\n // Use a separate parser for Dublin Core namespaces\n const coreParser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n removeNSPrefix: true,\n parseTagValue: false,\n trimValues: false,\n });\n const root = coreParser.parse(buf.toString('utf-8'));\n const coreProps = root.coreProperties || root['cp:coreProperties'] || root;\n\n const docProps = this._workbook.documentProperties;\n\n // Title, Subject, Creator, Description (Dublin Core)\n if (coreProps.title) {\n docProps.title = typeof coreProps.title === 'string'\n ? coreProps.title\n : coreProps.title['#text'] || '';\n }\n if (coreProps.subject) {\n docProps.subject = typeof coreProps.subject === 'string'\n ? coreProps.subject\n : coreProps.subject['#text'] || '';\n }\n if (coreProps.creator) {\n docProps.creator = typeof coreProps.creator === 'string'\n ? coreProps.creator\n : coreProps.creator['#text'] || '';\n }\n if (coreProps.description) {\n docProps.description = typeof coreProps.description === 'string'\n ? coreProps.description\n : coreProps.description['#text'] || '';\n }\n\n // OPC Core Properties\n if (coreProps.keywords) {\n docProps.keywords = typeof coreProps.keywords === 'string'\n ? coreProps.keywords\n : coreProps.keywords['#text'] || '';\n }\n if (coreProps.lastModifiedBy) {\n docProps.lastModifiedBy = typeof coreProps.lastModifiedBy === 'string'\n ? coreProps.lastModifiedBy\n : coreProps.lastModifiedBy['#text'] || '';\n }\n if (coreProps.revision) {\n docProps.revision = typeof coreProps.revision === 'string'\n ? coreProps.revision\n : coreProps.revision['#text'] || '';\n }\n if (coreProps.category) {\n docProps.category = typeof coreProps.category === 'string'\n ? coreProps.category\n : coreProps.category['#text'] || '';\n }\n\n // Dates\n if (coreProps.created) {\n const dateStr = typeof coreProps.created === 'string'\n ? coreProps.created\n : coreProps.created['#text'] || '';\n if (dateStr) docProps.created = this._parseDatetime(dateStr);\n }\n if (coreProps.modified) {\n const dateStr = typeof coreProps.modified === 'string'\n ? coreProps.modified\n : coreProps.modified['#text'] || '';\n if (dateStr) docProps.modified = this._parseDatetime(dateStr);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n private async _loadAppProperties(zip: JSZip): Promise<void> {\n const file = zip.file('docProps/app.xml');\n if (!file) return;\n\n try {\n const buf = await file.async('nodebuffer');\n const appParser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n removeNSPrefix: true,\n parseTagValue: false,\n trimValues: false,\n });\n const root = appParser.parse(buf.toString('utf-8'));\n const appProps = root.Properties || root;\n\n const docProps = this._workbook.documentProperties;\n\n if (appProps.Application) {\n docProps.application = typeof appProps.Application === 'string'\n ? appProps.Application\n : appProps.Application['#text'] || '';\n }\n if (appProps.AppVersion) {\n docProps.appVersion = typeof appProps.AppVersion === 'string'\n ? appProps.AppVersion\n : appProps.AppVersion['#text'] || '';\n }\n if (appProps.Company) {\n docProps.company = typeof appProps.Company === 'string'\n ? appProps.Company\n : appProps.Company['#text'] || '';\n }\n if (appProps.Manager) {\n docProps.manager = typeof appProps.Manager === 'string'\n ? appProps.Manager\n : appProps.Manager['#text'] || '';\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n private _parseDatetime(dateStr: string): Date | string {\n try {\n const d = new Date(dateStr);\n if (isNaN(d.getTime())) return dateStr;\n return d;\n } catch {\n return dateStr;\n }\n }\n}\n","/**\n * Aspose.Cells for Node.js – Workbook Module\n *\n * Provides Workbook class representing an Excel workbook, along with\n * SaveFormat enum and WorkbookProtection helper.\n *\n * Phase 2: XLSX save via XmlSaver (JSZip). Load still stubbed (Phase 3).\n */\n\nimport { Worksheet } from './Worksheet';\nimport { Style } from '../styling/Style';\nimport { XmlSaver } from '../io/XmlSaver';\nimport { DefinedNameCollection } from '../features/DefinedName';\n\n// ---------------------------------------------------------------------------\n// SaveFormat enum\n// ---------------------------------------------------------------------------\n\n/**\n * Specifies the format for saving a workbook.\n *\n * Compatible with Aspose.Cells for .NET SaveFormat enumeration.\n */\nexport enum SaveFormat {\n AUTO = 'auto',\n XLSX = 'xlsx',\n CSV = 'csv',\n TSV = 'tsv',\n MARKDOWN = 'markdown',\n JSON = 'json',\n}\n\nconst EXTENSION_FORMAT_MAP: Record<string, SaveFormat> = {\n '.xlsx': SaveFormat.XLSX,\n '.xlsm': SaveFormat.XLSX,\n '.csv': SaveFormat.CSV,\n '.tsv': SaveFormat.TSV,\n '.md': SaveFormat.MARKDOWN,\n '.markdown': SaveFormat.MARKDOWN,\n '.json': SaveFormat.JSON,\n};\n\n/**\n * Determine the {@link SaveFormat} from a file path's extension.\n *\n * @throws {Error} If the extension is unsupported.\n */\nexport function saveFormatFromExtension(filePath: string): SaveFormat {\n const dotIdx = filePath.lastIndexOf('.');\n if (dotIdx === -1) {\n throw new Error(`Unsupported file extension: (none)`);\n }\n const ext = filePath.slice(dotIdx).toLowerCase();\n const fmt = EXTENSION_FORMAT_MAP[ext];\n if (fmt === undefined) {\n throw new Error(`Unsupported file extension: ${ext}`);\n }\n return fmt;\n}\n\n/** Alias for .NET naming convention */\nexport const save_format_from_extension = saveFormatFromExtension;\n\n// ---------------------------------------------------------------------------\n// WorkbookProtection\n// ---------------------------------------------------------------------------\n\n/**\n * Holds workbook-level protection settings (structure / windows lock).\n */\nexport class WorkbookProtection {\n lockStructure: boolean = false;\n lockWindows: boolean = false;\n workbookPassword: string | null = null;\n\n /* .NET aliases */\n get lock_structure(): boolean { return this.lockStructure; }\n set lock_structure(v: boolean) { this.lockStructure = v; }\n\n get lock_windows(): boolean { return this.lockWindows; }\n set lock_windows(v: boolean) { this.lockWindows = v; }\n\n get workbook_password(): string | null { return this.workbookPassword; }\n set workbook_password(v: string | null) { this.workbookPassword = v; }\n}\n\n// ---------------------------------------------------------------------------\n// WorkbookProperties (lightweight stand-in until Phase 3)\n// ---------------------------------------------------------------------------\n\nexport interface WorkbookView {\n activeTab: number;\n /* .NET alias */\n active_tab: number;\n}\n\nexport class WorkbookProperties {\n /** Workbook protection settings */\n protection: WorkbookProtection = new WorkbookProtection();\n\n /** View settings (active tab, etc.) */\n private _view: WorkbookView;\n\n /** Calculation mode */\n calcMode: string = 'auto';\n\n /** Defined names collection */\n definedNames: DefinedNameCollection = new DefinedNameCollection();\n\n constructor() {\n const viewObj = { activeTab: 0 } as WorkbookView;\n // Implement active_tab as alias\n Object.defineProperty(viewObj, 'active_tab', {\n get() { return this.activeTab; },\n set(v: number) { this.activeTab = v; },\n enumerable: true,\n configurable: true,\n });\n this._view = viewObj;\n }\n\n get view(): WorkbookView { return this._view; }\n\n /* .NET aliases */\n get calc_mode(): string { return this.calcMode; }\n set calc_mode(v: string) { this.calcMode = v; }\n\n get defined_names(): DefinedNameCollection { return this.definedNames; }\n}\n\n// ---------------------------------------------------------------------------\n// DocumentProperties (stub – Phase 3)\n// ---------------------------------------------------------------------------\n\nexport class DocumentProperties {\n title: string = '';\n subject: string = '';\n creator: string = '';\n keywords: string = '';\n description: string = '';\n lastModifiedBy: string = '';\n category: string = '';\n revision: string = '';\n created: Date | string | null = null;\n modified: Date | string | null = null;\n\n /** Extended / App properties */\n application: string = '';\n appVersion: string = '';\n company: string = '';\n manager: string = '';\n\n /** Round-trip XML blobs */\n _coreXml: string | null = null;\n _appXml: string | null = null;\n\n /* .NET aliases */\n get last_modified_by(): string { return this.lastModifiedBy; }\n set last_modified_by(v: string) { this.lastModifiedBy = v; }\n}\n\n// ---------------------------------------------------------------------------\n// Workbook\n// ---------------------------------------------------------------------------\n\n/**\n * Represents an Excel workbook.\n *\n * Provides worksheet management, protection helpers, and (in later phases)\n * file I/O for XLSX, CSV, Markdown, and JSON.\n *\n * ```ts\n * const wb = new Workbook();\n * const ws = wb.worksheets[0];\n * ws.cells.get('A1').value = 'Hello';\n * ```\n */\nexport class Workbook {\n // -- internal state -------------------------------------------------------\n private _worksheets: Worksheet[] = [];\n private _styles: Style[] = [];\n private _sharedStrings: string[] = [];\n private _filePath: string | null = null;\n\n /** Workbook-level properties */\n private _properties: WorkbookProperties;\n\n /** Document properties (lazily created) */\n private _documentProperties: DocumentProperties | null = null;\n\n // Style management maps (used by XML saver in Phase 2/3)\n /** @internal */ _fontStyles: Map<string, number> = new Map();\n /** @internal */ _fillStyles: Map<string, number> = new Map();\n /** @internal */ _borderStyles: Map<string, number> = new Map();\n /** @internal */ _alignmentStyles: Map<string, number> = new Map();\n /** @internal */ _protectionStyles: Map<string, number> = new Map();\n /** @internal */ _cellStyles: Map<string, number> = new Map();\n /** @internal */ _numFormats: Map<string, number> = new Map();\n\n /** Round-trip: raw workbook-level XML blobs */\n _sourceXml: Record<string, string> = {};\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new Workbook.\n *\n * @param filePath - Reserved for Phase 2/3: path to an existing .xlsx to load.\n * @param password - Reserved for Phase 2/3: password for encrypted files.\n */\n constructor(filePath?: string | null, password?: string | null) {\n this._filePath = filePath ?? null;\n this._properties = new WorkbookProperties();\n\n // Default style\n this._styles.push(new Style());\n\n // TODO Phase 2/3: if filePath provided, call _load(filePath, password)\n // For now, always create a default empty workbook.\n const ws = new Worksheet('Sheet1');\n (ws as unknown as { _workbook: Workbook })._workbook = this;\n this._worksheets.push(ws);\n }\n\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n /** Gets collection of worksheets in the workbook. */\n get worksheets(): Worksheet[] {\n return this._worksheets;\n }\n\n /** Gets the file path of the workbook (null if not loaded from file). */\n get filePath(): string | null {\n return this._filePath;\n }\n\n /** Gets workbook properties (protection, view, calc settings). */\n get properties(): WorkbookProperties {\n return this._properties;\n }\n\n /** Gets document properties (title, author, etc.). Lazily created. */\n get documentProperties(): DocumentProperties {\n if (this._documentProperties === null) {\n this._documentProperties = new DocumentProperties();\n }\n return this._documentProperties;\n }\n\n /** Gets the internal styles array. */\n get styles(): Style[] {\n return this._styles;\n }\n\n /** Gets the shared strings table. */\n get sharedStrings(): string[] {\n return this._sharedStrings;\n }\n\n // .NET aliases\n get file_path(): string | null { return this.filePath; }\n get document_properties(): DocumentProperties { return this.documentProperties; }\n get shared_strings(): string[] { return this.sharedStrings; }\n\n // -------------------------------------------------------------------------\n // Worksheet management\n // -------------------------------------------------------------------------\n\n /**\n * Adds a new worksheet to the workbook.\n *\n * @param name - Optional name. Auto-generated as \"SheetN\" if omitted.\n * @returns The newly created Worksheet.\n */\n addWorksheet(name?: string): Worksheet {\n if (name === undefined || name === null) {\n const existing = new Set(this._worksheets.map(ws => ws.name));\n let i = 1;\n while (existing.has(`Sheet${i}`)) {\n i++;\n }\n name = `Sheet${i}`;\n }\n\n const ws = new Worksheet(name);\n (ws as unknown as { _workbook: Workbook })._workbook = this;\n this._worksheets.push(ws);\n return ws;\n }\n\n /** Alias for {@link addWorksheet}. */\n add_worksheet(name?: string): Worksheet { return this.addWorksheet(name); }\n\n /** Alias for {@link addWorksheet}. */\n createWorksheet(name?: string): Worksheet { return this.addWorksheet(name); }\n\n /** Alias for {@link addWorksheet}. */\n create_worksheet(name?: string): Worksheet { return this.addWorksheet(name); }\n\n /**\n * Gets a worksheet by index (0-based) or by name.\n *\n * @throws {RangeError} If numeric index is out of range.\n * @throws {Error} If no worksheet with the given name exists.\n */\n getWorksheet(indexOrName: number | string): Worksheet {\n if (typeof indexOrName === 'number') {\n if (indexOrName >= 0 && indexOrName < this._worksheets.length) {\n return this._worksheets[indexOrName];\n }\n throw new RangeError(`Worksheet index ${indexOrName} out of range`);\n }\n for (const ws of this._worksheets) {\n if (ws.name === indexOrName) {\n return ws;\n }\n }\n throw new Error(`Worksheet '${indexOrName}' not found`);\n }\n\n /** Alias */\n get_worksheet(indexOrName: number | string): Worksheet { return this.getWorksheet(indexOrName); }\n\n /**\n * Returns the worksheet with the given name, or `null` if not found.\n */\n getWorksheetByName(name: string): Worksheet | null {\n for (const ws of this._worksheets) {\n if (ws.name === name) {\n return ws;\n }\n }\n return null;\n }\n\n /** Alias */\n get_worksheet_by_name(name: string): Worksheet | null { return this.getWorksheetByName(name); }\n\n /**\n * Returns the worksheet at the given 0-based index, or `null` if out of range.\n */\n getWorksheetByIndex(index: number): Worksheet | null {\n if (Number.isInteger(index) && index >= 0 && index < this._worksheets.length) {\n return this._worksheets[index];\n }\n return null;\n }\n\n /** Alias */\n get_worksheet_by_index(index: number): Worksheet | null { return this.getWorksheetByIndex(index); }\n\n /**\n * Removes a worksheet by index, name, or direct reference.\n *\n * @throws {RangeError} If numeric index is out of range.\n * @throws {Error} If string name is not found.\n * @throws {TypeError} If argument is none of the above.\n */\n removeWorksheet(indexOrNameOrWs: number | string | Worksheet): void {\n if (typeof indexOrNameOrWs === 'number') {\n if (indexOrNameOrWs >= 0 && indexOrNameOrWs < this._worksheets.length) {\n this._worksheets.splice(indexOrNameOrWs, 1);\n return;\n }\n throw new RangeError(`Worksheet index ${indexOrNameOrWs} out of range`);\n }\n if (typeof indexOrNameOrWs === 'string') {\n const idx = this._worksheets.findIndex(ws => ws.name === indexOrNameOrWs);\n if (idx !== -1) {\n this._worksheets.splice(idx, 1);\n return;\n }\n throw new Error(`Worksheet '${indexOrNameOrWs}' not found`);\n }\n // Treat as Worksheet object reference\n const idx = this._worksheets.findIndex(ws => ws === indexOrNameOrWs);\n if (idx !== -1) {\n this._worksheets.splice(idx, 1);\n return;\n }\n throw new TypeError('removeWorksheet: argument must be number, string, or Worksheet');\n }\n\n /** Alias */\n remove_worksheet(indexOrNameOrWs: number | string | Worksheet): void {\n this.removeWorksheet(indexOrNameOrWs);\n }\n\n /**\n * Returns the currently active worksheet.\n */\n getActiveWorksheet(): Worksheet | null {\n if (this._worksheets.length === 0) return null;\n let idx = this._properties.view.activeTab;\n idx = Math.max(0, Math.min(idx, this._worksheets.length - 1));\n return this._worksheets[idx];\n }\n\n /** Alias */\n get_active_worksheet(): Worksheet | null { return this.getActiveWorksheet(); }\n\n /**\n * Sets the active worksheet by index, name, or Worksheet reference.\n */\n setActiveWorksheet(indexOrNameOrWs: number | string | Worksheet): void {\n let idx: number | undefined;\n if (typeof indexOrNameOrWs === 'number') {\n if (indexOrNameOrWs >= 0 && indexOrNameOrWs < this._worksheets.length) {\n idx = indexOrNameOrWs;\n }\n } else if (typeof indexOrNameOrWs === 'string') {\n idx = this._worksheets.findIndex(ws => ws.name === indexOrNameOrWs);\n if (idx === -1) idx = undefined;\n } else {\n idx = this._worksheets.findIndex(ws => ws === indexOrNameOrWs);\n if (idx === -1) idx = undefined;\n }\n if (idx !== undefined) {\n this._properties.view.activeTab = idx;\n }\n }\n\n /** Alias */\n set_active_worksheet(indexOrNameOrWs: number | string | Worksheet): void {\n this.setActiveWorksheet(indexOrNameOrWs);\n }\n\n /**\n * Copies a worksheet and appends the copy to the workbook.\n *\n * @returns The new worksheet, or `null` if source could not be resolved.\n */\n copyWorksheet(indexOrNameOrWs: number | string | Worksheet): Worksheet | null {\n let ws: Worksheet | null | undefined;\n if (typeof indexOrNameOrWs === 'number') {\n ws = this.getWorksheetByIndex(indexOrNameOrWs);\n } else if (typeof indexOrNameOrWs === 'string') {\n ws = this.getWorksheetByName(indexOrNameOrWs);\n } else if (indexOrNameOrWs instanceof Worksheet) {\n ws = indexOrNameOrWs;\n }\n if (!ws) return null;\n\n // Generate unique copy name\n const base = ws.name;\n const existing = new Set(this._worksheets.map(w => w.name));\n let copyName = `${base} (copy)`;\n if (existing.has(copyName)) {\n let i = 1;\n while (existing.has(`${base} (copy${i})`)) {\n i++;\n }\n copyName = `${base} (copy${i})`;\n }\n\n const newWs = ws.copy(copyName);\n (newWs as unknown as { _workbook: Workbook })._workbook = this;\n this._worksheets.push(newWs);\n return newWs;\n }\n\n /** Alias */\n copy_worksheet(indexOrNameOrWs: number | string | Worksheet): Worksheet | null {\n return this.copyWorksheet(indexOrNameOrWs);\n }\n\n // -------------------------------------------------------------------------\n // Protection\n // -------------------------------------------------------------------------\n\n /**\n * Protects the workbook structure/windows with an optional password.\n *\n * @param password - Optional password string.\n * @param lockStructure - Prevent adding/removing sheets (default true).\n * @param lockWindows - Prevent resizing windows (default false).\n */\n protect(password?: string | null, lockStructure: boolean = true, lockWindows: boolean = false): void {\n const prot = this._properties.protection;\n prot.lockStructure = lockStructure;\n prot.lockWindows = lockWindows;\n // In Phase 3, hash the password. For now store plain text.\n prot.workbookPassword = password ?? null;\n }\n\n /**\n * Removes workbook structure/window protection.\n */\n unprotect(_password?: string | null): void {\n const prot = this._properties.protection;\n prot.lockStructure = false;\n prot.lockWindows = false;\n prot.workbookPassword = null;\n }\n\n /**\n * Returns `true` if the workbook has structure or window protection enabled.\n */\n isProtected(): boolean {\n const prot = this._properties.protection;\n return prot.lockStructure || prot.lockWindows;\n }\n\n /** Alias */\n is_protected(): boolean { return this.isProtected(); }\n\n /**\n * Returns a snapshot of the current workbook protection settings.\n */\n get protection(): { lockStructure: boolean; lockWindows: boolean; password: string | null } {\n const prot = this._properties.protection;\n return {\n lockStructure: prot.lockStructure,\n lockWindows: prot.lockWindows,\n password: prot.workbookPassword,\n };\n }\n\n // -------------------------------------------------------------------------\n // Formula calculation (Phase 5)\n // -------------------------------------------------------------------------\n\n /**\n * Evaluates every formula in every worksheet of this workbook.\n *\n * Uses a lazy `require` to avoid circular-dependency issues between\n * Workbook and FormulaEvaluator.\n */\n calculateFormula(): void {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { FormulaEvaluator } = require('../features/FormulaEvaluator');\n const evaluator = new FormulaEvaluator(this);\n evaluator.evaluateAll();\n }\n\n /** snake_case alias */\n calculate_formula(): void { this.calculateFormula(); }\n\n // -------------------------------------------------------------------------\n // File I/O stubs (Phase 2/3)\n // -------------------------------------------------------------------------\n\n /**\n * Saves the workbook to a file.\n *\n * Currently supports XLSX format only (Phase 2). CSV, JSON, etc. will be\n * added in later phases.\n *\n * @param filePath Destination file path.\n * @param saveFormat Explicit format; defaults to AUTO (inferred from extension).\n * @param _options Reserved for future use (encryption options, etc.).\n * @param _password Reserved for future use (file-level password).\n */\n async save(\n filePath: string,\n saveFormat?: SaveFormat | null,\n _options?: unknown,\n _password?: string | null,\n ): Promise<void> {\n const fmt = saveFormat && saveFormat !== SaveFormat.AUTO\n ? saveFormat\n : saveFormatFromExtension(filePath);\n\n if (fmt !== SaveFormat.XLSX) {\n throw new Error(\n `Workbook.save(): format '${fmt}' is not yet supported. Only XLSX is implemented.`,\n );\n }\n\n const saver = new XmlSaver(this);\n await saver.saveToFile(filePath);\n }\n\n /**\n * Saves the workbook to an in-memory Buffer (XLSX format).\n *\n * @param saveFormat Explicit format; defaults to XLSX.\n * @returns A Buffer containing the XLSX ZIP archive.\n */\n async saveToBuffer(\n saveFormat: SaveFormat = SaveFormat.XLSX,\n ): Promise<Buffer> {\n if (saveFormat !== SaveFormat.XLSX && saveFormat !== SaveFormat.AUTO) {\n throw new Error(\n `Workbook.saveToBuffer(): format '${saveFormat}' is not yet supported. Only XLSX is implemented.`,\n );\n }\n\n const saver = new XmlSaver(this);\n return saver.saveToBuffer();\n }\n\n /** snake_case alias */\n async save_to_buffer(\n saveFormat: SaveFormat = SaveFormat.XLSX,\n ): Promise<Buffer> {\n return this.saveToBuffer(saveFormat);\n }\n\n /**\n * Loads a workbook from a file path (async).\n *\n * @param filePath Path to the .xlsx file.\n * @param _password Reserved for future encrypted workbook support.\n * @returns A Promise resolving to the loaded Workbook.\n */\n static async load(\n filePath: string,\n _password?: string | null,\n ): Promise<Workbook> {\n // Lazy import to avoid circular dependency at module load time\n const { XmlLoader } = await import('../io/XmlLoader');\n return XmlLoader.loadFromFile(filePath);\n }\n\n /**\n * Loads a workbook from a Buffer (async).\n *\n * @param buffer Buffer containing XLSX data.\n * @returns A Promise resolving to the loaded Workbook.\n */\n static async loadFromBuffer(\n buffer: Buffer,\n ): Promise<Workbook> {\n const { XmlLoader } = await import('../io/XmlLoader');\n return XmlLoader.loadFromBuffer(buffer);\n }\n\n // -------------------------------------------------------------------------\n // String representation\n // -------------------------------------------------------------------------\n\n toString(): string {\n return `Workbook(worksheets=${this._worksheets.length})`;\n }\n}\n","/**\n * tinyweb-cells – Public API surface\n *\n * Re-exports every class, enum, interface, and type that consumers need.\n */\n\n// ---------------------------------------------------------------------------\n// Styling\n// ---------------------------------------------------------------------------\nexport {\n Font,\n Fill,\n Border,\n BorderType,\n Borders,\n Alignment,\n NumberFormat,\n Protection,\n Style,\n} from './styling/Style';\n\n// ---------------------------------------------------------------------------\n// Core\n// ---------------------------------------------------------------------------\nexport {\n Cell,\n CellComment,\n CellDataType,\n CellValue,\n} from './core/Cell';\n\nexport {\n Cells,\n WorksheetLike,\n} from './core/Cells';\n\nexport {\n Worksheet,\n SheetProtection,\n SheetProtectionDictWrapper,\n PageSetup,\n PageMargins,\n FreezePane,\n} from './core/Worksheet';\n\nexport {\n Workbook,\n SaveFormat,\n saveFormatFromExtension,\n save_format_from_extension,\n WorkbookProtection,\n WorkbookProperties,\n WorkbookView,\n DocumentProperties,\n} from './core/Workbook';\n\n// ---------------------------------------------------------------------------\n// Features (Phase 4)\n// ---------------------------------------------------------------------------\nexport {\n DataValidation,\n DataValidationCollection,\n DataValidationType,\n DataValidationOperator,\n DataValidationAlertStyle,\n DataValidationImeMode,\n} from './features/DataValidation';\n\nexport {\n ConditionalFormat,\n ConditionalFormatCollection,\n} from './features/ConditionalFormat';\n\nexport {\n Hyperlink,\n HyperlinkCollection,\n} from './features/Hyperlink';\nexport type { HyperlinkType } from './features/Hyperlink';\n\nexport {\n AutoFilter,\n FilterColumn,\n} from './features/AutoFilter';\nexport type {\n CustomFilter,\n ColorFilter,\n DynamicFilter,\n Top10Filter,\n SortState,\n} from './features/AutoFilter';\n\nexport {\n HorizontalPageBreakCollection,\n VerticalPageBreakCollection,\n} from './features/PageBreak';\n\nexport {\n DefinedName,\n DefinedNameCollection,\n} from './features/DefinedName';\n\nexport {\n FormulaEvaluator,\n} from './features/FormulaEvaluator';\n\n// ---------------------------------------------------------------------------\n// I/O – Comment XML\n// ---------------------------------------------------------------------------\nexport { CommentXmlWriter, CommentXmlReader } from './io/CommentXml';\n\n// ---------------------------------------------------------------------------\n// I/O – Feature Loaders / Savers\n// ---------------------------------------------------------------------------\nexport { AutoFilterXmlLoader } from './io/XmlAutoFilterLoader';\nexport { AutoFilterXmlSaver } from './io/XmlAutoFilterSaver';\nexport { ConditionalFormatXmlLoader } from './io/XmlConditionalFormatLoader';\nexport { ConditionalFormatXmlSaver } from './io/XmlConditionalFormatSaver';\nexport { DataValidationXmlLoader } from './io/XmlDataValidationLoader';\nexport { DataValidationXmlSaver } from './io/XmlDataValidationSaver';\nexport {\n HyperlinkXmlLoader,\n HyperlinkXmlSaver,\n HyperlinkRelationshipWriter,\n} from './io/XmlHyperlinkHandler';\nexport type { HyperlinkRelationship } from './io/XmlHyperlinkHandler';\n\n// ---------------------------------------------------------------------------\n// I/O (Phase 2 + Phase 3)\n// ---------------------------------------------------------------------------\nexport { SharedStringTable } from './io/SharedStrings';\nexport {\n CellValueHandler,\n CELL_TYPE_STRING,\n CELL_TYPE_NUMBER,\n CELL_TYPE_BOOLEAN,\n CELL_TYPE_ERROR,\n} from './io/CellValueHandler';\nexport { XmlSaver } from './io/XmlSaver';\nexport { XmlLoader } from './io/XmlLoader';\n"]}