sheetra 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.
- package/LICENSE +201 -0
- package/README.md +32 -0
- package/dist/index.esm.js +2392 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2419 -0
- package/dist/index.js.map +1 -0
- package/dist/types/builders/export-builder.d.ts +20 -0
- package/dist/types/builders/section-builder.d.ts +142 -0
- package/dist/types/builders/sheet-builder.d.ts +297 -0
- package/dist/types/core/cell.d.ts +16 -0
- package/dist/types/core/column.d.ts +13 -0
- package/dist/types/core/row.d.ts +20 -0
- package/dist/types/core/styles.d.ts +23 -0
- package/dist/types/core/workbook.d.ts +19 -0
- package/dist/types/core/worksheet.d.ts +32 -0
- package/dist/types/formatters/date-formatter.d.ts +7 -0
- package/dist/types/formatters/index.d.ts +3 -0
- package/dist/types/formatters/number-formatter.d.ts +6 -0
- package/dist/types/formatters/string-formatter.d.ts +310 -0
- package/dist/types/index.d.ts +1730 -0
- package/dist/types/types/cell.types.d.ts +288 -0
- package/dist/types/types/export.types.d.ts +303 -0
- package/dist/types/types/index.d.ts +13 -0
- package/dist/types/types/workbook.types.d.ts +500 -0
- package/dist/types/utils/constants.d.ts +10 -0
- package/dist/types/utils/helpers.d.ts +36 -0
- package/dist/types/utils/validators.d.ts +3 -0
- package/dist/types/writers/csv-writer.d.ts +6 -0
- package/dist/types/writers/excel-writer.d.ts +16 -0
- package/dist/types/writers/index.d.ts +4 -0
- package/dist/types/writers/json-writer.d.ts +6 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/formatters/date-formatter.ts","../src/formatters/number-formatter.ts","../src/core/cell.ts","../src/core/row.ts","../src/core/column.ts","../src/core/worksheet.ts","../src/writers/csv-writer.ts","../src/writers/json-writer.ts","../src/writers/excel-writer.ts","../src/core/workbook.ts","../src/core/styles.ts","../src/builders/export-builder.ts","../src/builders/sheet-builder.ts","../src/builders/section-builder.ts","../src/utils/helpers.ts","../src/index.ts"],"sourcesContent":["export class DateFormatter {\n static format(date: Date | string | number, format?: string): string {\n const d = this.parseDate(date);\n if (!d) return '';\n\n if (format) {\n return this.formatWithPattern(d, format);\n }\n\n // Default format: YYYY-MM-DD\n return d.toISOString().split('T')[0];\n }\n\n static toExcelDate(date: Date | string | number): number {\n const d = this.parseDate(date);\n if (!d) return 0;\n\n // Excel date starts from 1900-01-01\n const excelEpoch = new Date(1900, 0, 1);\n const diffTime = d.getTime() - excelEpoch.getTime();\n const diffDays = diffTime / (1000 * 60 * 60 * 24);\n \n // Add 1 because Excel thinks 1900-01-01 is day 1\n // Subtract 1 for the 1900 leap year bug\n return diffDays + 1;\n }\n\n private static parseDate(date: Date | string | number): Date | null {\n if (date instanceof Date) {\n return date;\n }\n \n if (typeof date === 'string' || typeof date === 'number') {\n const d = new Date(date);\n if (!isNaN(d.getTime())) {\n return d;\n }\n }\n \n return null;\n }\n\n private static formatWithPattern(date: Date, pattern: string): string {\n const map: Record<string, string> = {\n 'YYYY': date.getFullYear().toString(),\n 'YY': date.getFullYear().toString().slice(-2),\n 'MM': this.pad(date.getMonth() + 1),\n 'M': (date.getMonth() + 1).toString(),\n 'DD': this.pad(date.getDate()),\n 'D': date.getDate().toString(),\n 'HH': this.pad(date.getHours()),\n 'H': date.getHours().toString(),\n 'mm': this.pad(date.getMinutes()),\n 'm': date.getMinutes().toString(),\n 'ss': this.pad(date.getSeconds()),\n 's': date.getSeconds().toString()\n };\n\n return pattern.replace(/YYYY|YY|MM|M|DD|D|HH|H|mm|m|ss|s/g, match => map[match] || match);\n }\n\n private static pad(num: number): string {\n return num.toString().padStart(2, '0');\n }\n}","export class NumberFormatter {\n static format(value: number, format?: string): string {\n if (value === null || value === undefined) return '';\n\n if (format) {\n return this.formatWithPattern(value, format);\n }\n\n return value.toString();\n }\n\n private static formatWithPattern(value: number, pattern: string): string {\n // Handle currency format\n if (pattern.includes('$')) {\n return this.formatCurrency(value, pattern);\n }\n\n // Handle percentage\n if (pattern.includes('%')) {\n return this.formatPercentage(value, pattern);\n }\n\n // Handle decimal places\n const decimalMatch = pattern.match(/\\.(0+)/);\n if (decimalMatch) {\n const decimals = decimalMatch[1].length;\n return value.toFixed(decimals);\n }\n\n return value.toString();\n }\n\n private static formatCurrency(value: number, pattern: string): string {\n const symbol = pattern.includes('$') ? '$' : '';\n const decimals = pattern.includes('.00') ? 2 : 0;\n \n const formatted = value.toFixed(decimals);\n const parts = formatted.split('.');\n \n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n return symbol + parts.join('.');\n }\n\n private static formatPercentage(value: number, pattern: string): string {\n const percentValue = value * 100;\n const decimals = pattern.includes('.00') ? 2 : 0;\n \n return percentValue.toFixed(decimals) + '%';\n }\n}","import { CellData, CellStyle } from '../types';\nimport { DateFormatter, NumberFormatter } from '../formatters';\n\nexport class Cell {\n private value: any = null;\n private style?: CellStyle;\n private formula?: string;\n private type: 'string' | 'number' | 'date' | 'boolean' | 'formula' = 'string';\n\n constructor(value?: any, style?: CellStyle) {\n if (value !== undefined) {\n this.setValue(value);\n }\n if (style) {\n this.setStyle(style);\n }\n }\n\n setValue(value: any): this {\n this.value = value;\n this.inferType();\n return this;\n }\n\n setStyle(style?: CellStyle): this {\n this.style = style;\n return this;\n }\n\n setFormula(formula: string): this {\n this.formula = formula;\n this.type = 'formula';\n return this;\n }\n\n setType(type: 'string' | 'number' | 'date' | 'boolean' | 'formula'): this {\n this.type = type;\n return this;\n }\n\n private inferType(): void {\n if (this.value instanceof Date) {\n this.type = 'date';\n } else if (typeof this.value === 'number') {\n this.type = 'number';\n } else if (typeof this.value === 'boolean') {\n this.type = 'boolean';\n } else {\n this.type = 'string';\n }\n }\n\n getFormattedValue(): string {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n\n switch (this.type) {\n case 'date': {\n const dateFormat = typeof this.style?.numberFormat === 'string'\n ? this.style.numberFormat\n : (this.style?.numberFormat as { format?: string } | undefined)?.format;\n return DateFormatter.format(this.value, dateFormat);\n }\n case 'number': {\n const numberFormat = typeof this.style?.numberFormat === 'string'\n ? this.style.numberFormat\n : (this.style?.numberFormat as { format?: string } | undefined)?.format;\n return NumberFormatter.format(this.value, numberFormat);\n }\n case 'boolean':\n return this.value ? 'TRUE' : 'FALSE';\n case 'formula':\n return this.formula || '';\n default:\n return String(this.value);\n }\n }\n\n toData(): CellData {\n return {\n value: this.value,\n style: this.style,\n formula: this.formula,\n type: this.type\n };\n }\n\n static fromData(data: CellData): Cell {\n const cell = new Cell();\n cell.value = data.value;\n cell.style = data.style;\n cell.formula = data.formula;\n const validTypes = ['string', 'number', 'boolean', 'date', 'formula'] as const;\n cell.type = validTypes.includes(data.type as any) ? data.type as typeof validTypes[number] : 'string';\n \n if (cell.value && !cell.type) {\n cell.inferType();\n }\n \n return cell;\n }\n}","import { RowData, CellData, CellStyle } from '../types';\nimport { Cell } from './cell';\n\nexport class Row {\n private cells: Cell[] = [];\n private height?: number;\n private hidden: boolean = false;\n private outlineLevel: number = 0;\n private collapsed: boolean = false;\n\n constructor(cells?: Cell[]) {\n if (cells) {\n this.cells = cells;\n }\n }\n\n addCell(cell: Cell): this {\n this.cells.push(cell);\n return this;\n }\n\n createCell(value?: any, style?: CellStyle): Cell {\n const cell = new Cell(value, style);\n this.cells.push(cell);\n return cell;\n }\n\n setCell(index: number, value: any, style?: CellStyle): this {\n while (this.cells.length <= index) {\n this.cells.push(new Cell());\n }\n this.cells[index].setValue(value).setStyle(style);\n return this;\n }\n\n getCell(index: number): CellData | undefined {\n return this.cells[index]?.toData();\n }\n\n getCells(): Cell[] {\n return this.cells;\n }\n\n setHeight(height: number): this {\n this.height = height;\n return this;\n }\n\n setHidden(hidden: boolean): this {\n this.hidden = hidden;\n return this;\n }\n\n setOutlineLevel(level: number, collapsed: boolean = false): this {\n this.outlineLevel = level;\n this.collapsed = collapsed;\n return this;\n }\n\n toData(): RowData {\n return {\n cells: this.cells.map(cell => cell.toData()),\n height: this.height,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed\n };\n }\n\n static fromData(data: RowData): Row {\n const row = new Row(data.cells.map(cellData => Cell.fromData(cellData)));\n row.height = data.height;\n row.hidden = data.hidden || false;\n row.outlineLevel = data.outlineLevel || 0;\n row.collapsed = data.collapsed || false;\n return row;\n }\n}","import { ColumnData } from '../types';\n\nexport class Column {\n private width?: number;\n private hidden: boolean = false;\n private outlineLevel: number = 0;\n private collapsed: boolean = false;\n\n constructor(width?: number) {\n this.width = width;\n }\n\n setWidth(width: number): this {\n this.width = width;\n return this;\n }\n\n setHidden(hidden: boolean): this {\n this.hidden = hidden;\n return this;\n }\n\n setOutlineLevel(level: number, collapsed: boolean = false): this {\n this.outlineLevel = level;\n this.collapsed = collapsed;\n return this;\n }\n\n toData(): ColumnData {\n return {\n width: this.width,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed\n };\n }\n\n static fromData(data: ColumnData): Column {\n const column = new Column(data.width);\n column.hidden = data.hidden || false;\n column.outlineLevel = data.outlineLevel || 0;\n column.collapsed = data.collapsed || false;\n return column;\n }\n}","import { \n WorksheetData, \n// RowData, \n// ColumnData, \n CellData, \n MergeCell,\n FreezePane,\n PrintOptions \n} from '../types';\nimport { Row } from './row';\nimport { Column } from './column';\n\nexport class Worksheet {\n private name: string;\n private rows: Row[] = [];\n private columns: Column[] = [];\n private mergedCells: MergeCell[] = [];\n private freezePane?: FreezePane;\n private printOptions?: PrintOptions;\n\n constructor(name: string) {\n this.name = name;\n }\n\n getName(): string {\n return this.name;\n }\n\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n addRow(row: Row): this {\n this.rows.push(row);\n return this;\n }\n\n createRow(index?: number): Row {\n const row = new Row();\n if (index !== undefined) {\n this.rows.splice(index, 0, row);\n } else {\n this.rows.push(row);\n }\n return row;\n }\n\n getRow(index: number): Row | undefined {\n return this.rows[index];\n }\n\n getRows(): Row[] {\n return this.rows;\n }\n\n removeRow(index: number): boolean {\n if (index >= 0 && index < this.rows.length) {\n this.rows.splice(index, 1);\n return true;\n }\n return false;\n }\n\n addColumn(column: Column): this {\n this.columns.push(column);\n return this;\n }\n\n createColumn(width?: number): Column {\n const column = new Column(width);\n this.columns.push(column);\n return column;\n }\n\n getColumn(index: number): Column | undefined {\n return this.columns[index];\n }\n\n getColumns(): Column[] {\n return this.columns;\n }\n\n setCell(row: number, col: number, value: any, style?: any): this {\n while (this.rows.length <= row) {\n this.rows.push(new Row());\n }\n this.rows[row].setCell(col, value, style);\n return this;\n }\n\n getCell(row: number, col: number): CellData | undefined {\n const rowObj = this.rows[row];\n return rowObj?.getCell(col);\n }\n\n mergeCells(startRow: number, startCol: number, endRow: number, endCol: number): this {\n this.mergedCells.push({ startRow, startCol, endRow, endCol });\n return this;\n }\n\n setFreezePane(row?: number, col?: number): this {\n this.freezePane = { rows: row, columns: col };\n return this;\n }\n\n setPrintOptions(options: PrintOptions): this {\n this.printOptions = options;\n return this;\n }\n\n setOutlineLevel(row: number, level: number, collapsed: boolean = false): this {\n if (this.rows[row]) {\n this.rows[row].setOutlineLevel(level, collapsed);\n }\n return this;\n }\n\n setColumnOutlineLevel(col: number, level: number, collapsed: boolean = false): this {\n while (this.columns.length <= col) {\n this.columns.push(new Column());\n }\n this.columns[col].setOutlineLevel(level, collapsed);\n return this;\n }\n\n toData(): WorksheetData {\n return {\n name: this.name,\n rows: this.rows.map(row => row.toData()),\n columns: this.columns.map(col => col.toData()),\n mergeCells: this.mergedCells,\n freezePane: this.freezePane,\n printOptions: this.printOptions\n };\n }\n\n static fromData(data: WorksheetData): Worksheet {\n const sheet = new Worksheet(data.name);\n sheet.rows = data.rows.map(rowData => Row.fromData(rowData));\n sheet.columns = (data.columns || []).map(colData => Column.fromData(colData));\n sheet.mergedCells = data.mergeCells || [];\n sheet.freezePane = data.freezePane;\n sheet.printOptions = data.printOptions;\n return sheet;\n }\n}","import { Workbook } from '../core/workbook';\nimport { Worksheet } from '../core/worksheet';\nimport { Row } from '../core/row';\nimport { ExportOptions } from '../types';\n\nexport class CSVWriter {\n static async write(workbook: Workbook, _options: ExportOptions): Promise<Blob> {\n const sheets = workbook['sheets'];\n const csvData = this.generateCSVData(sheets[0]); // Use first sheet for CSV\n \n return new Blob([csvData], { type: 'text/csv;charset=utf-8;' });\n }\n\n private static generateCSVData(sheet: Worksheet): string {\n const rows = sheet.getRows();\n const csvRows: string[] = [];\n\n rows.forEach((row: Row) => {\n const rowData: string[] = [];\n row.getCells().forEach(cell => {\n const cellData = cell.toData();\n let value = '';\n \n if (cellData.value !== null && cellData.value !== undefined) {\n if (cellData.type === 'date' && cellData.value instanceof Date) {\n value = cellData.value.toISOString().split('T')[0];\n } else {\n value = String(cellData.value);\n }\n }\n \n // Escape quotes and wrap in quotes if contains comma or quote\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n value = '\"' + value.replace(/\"/g, '\"\"') + '\"';\n }\n \n rowData.push(value);\n });\n \n csvRows.push(rowData.join(','));\n });\n\n return csvRows.join('\\n');\n }\n}","import { Workbook } from '../core/workbook';\nimport { Worksheet } from '../core/worksheet';\n// import { Row } from '../core/row';\nimport { ExportOptions } from '../types';\n\nexport class JSONWriter {\n static async write(workbook: Workbook, _options: ExportOptions): Promise<Blob> {\n const sheets = workbook['sheets'];\n const jsonData = this.generateJSONData(sheets[0]); // Use first sheet for JSON\n \n return new Blob([JSON.stringify(jsonData, null, 2)], { \n type: 'application/json;charset=utf-8;' \n });\n }\n\n private static generateJSONData(sheet: Worksheet): any[] {\n const rows = sheet.getRows();\n if (rows.length === 0) return [];\n\n // Assume first row contains headers\n const headers = rows[0].getCells().map((cell): string => {\n const value = cell.toData().value;\n return value ? String(value) : `Column${headers.length + 1}`;\n });\n\n const data: any[] = [];\n\n for (let i = 1; i < rows.length; i++) {\n const row = rows[i];\n const rowData: any = {};\n \n row.getCells().forEach((cell, index) => {\n if (index < headers.length) {\n const cellData = cell.toData();\n let value = cellData.value;\n \n if (cellData.type === 'date' && value instanceof Date) {\n value = value.toISOString();\n }\n \n rowData[headers[index]] = value;\n }\n });\n \n data.push(rowData);\n }\n\n return data;\n }\n}","import { Workbook } from '../core/workbook';\nimport { Worksheet } from '../core/worksheet';\nimport { Row } from '../core/row';\nimport { Cell } from '../core/cell';\nimport { ExportOptions } from '../types';\nimport { DateFormatter } from '../formatters/date-formatter';\nimport { CSVWriter, JSONWriter } from '../writers';\n\nexport class ExcelWriter {\n static async write(workbook: Workbook, _options: ExportOptions): Promise<Blob> {\n const data = this.generateExcelData(workbook);\n const buffer = this.createExcelFile(data);\n const uint8Buffer = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const arrayBuffer = uint8Buffer.slice().buffer;\n return new Blob([arrayBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n }\n\n private static generateExcelData(workbook: Workbook): any {\n const sheets = workbook['sheets'];\n\n return {\n Sheets: sheets.reduce((acc: any, sheet: Worksheet, index: number) => {\n const sheetName = sheet.getName() || `Sheet${index + 1}`;\n acc[sheetName] = this.generateSheetData(sheet);\n return acc;\n }, {}),\n SheetNames: sheets.map((sheet: Worksheet, index: number) => sheet.getName() || `Sheet${index + 1}`)\n };\n }\n\n private static generateSheetData(sheet: Worksheet): any {\n const rows = sheet.getRows();\n const data: any[][] = [];\n\n rows.forEach((row: Row) => {\n const rowData: any[] = [];\n row.getCells().forEach((cell: Cell) => {\n const cellData = cell.toData();\n\n if (cellData.formula) {\n rowData.push({ f: cellData.formula });\n } else if (\n cellData.type === 'date' &&\n (typeof cellData.value === 'string' ||\n typeof cellData.value === 'number' ||\n cellData.value instanceof Date)\n ) {\n rowData.push(DateFormatter.toExcelDate(cellData.value));\n } else {\n rowData.push(cellData.value);\n }\n });\n data.push(rowData);\n });\n\n return {\n '!ref': this.getSheetRange(data),\n '!rows': rows.map(row => ({\n hpt: row['height'],\n hidden: row['hidden'],\n outlineLevel: row['outlineLevel'],\n collapsed: row['collapsed']\n })),\n '!cols': sheet.getColumns().map(col => ({\n wch: col['width'],\n hidden: col['hidden'],\n outlineLevel: col['outlineLevel'],\n collapsed: col['collapsed']\n })),\n '!merges': sheet['mergeCells'],\n '!freeze': sheet['freezePane']\n };\n }\n\n private static getSheetRange(data: any[][]): string {\n if (data.length === 0) return 'A1:A1';\n\n const lastRow = data.length;\n const lastCol = Math.max(...data.map(row => row.length));\n\n return `A1:${this.columnToLetter(lastCol)}${lastRow}`;\n }\n\n private static columnToLetter(column: number): string {\n let letters = '';\n while (column > 0) {\n const temp = (column - 1) % 26;\n letters = String.fromCharCode(temp + 65) + letters;\n column = (column - temp - 1) / 26;\n }\n return letters || 'A';\n }\n\n private static createExcelFile(data: any): Uint8Array {\n // This is a simplified Excel file generator\n // In a real implementation, you'd generate proper XLSX binary format\n // For now, we'll return a simple XML-based structure\n\n const xmlHeader = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';\n const workbook = this.generateWorkbookXML(data);\n\n const encoder = new TextEncoder();\n return encoder.encode(xmlHeader + workbook);\n }\n\n private static generateWorkbookXML(data: any): string {\n let xml = '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">';\n xml += '<sheets>';\n\n data.SheetNames.forEach((name: string, index: number) => {\n xml += `<sheet name=\"${name}\" sheetId=\"${index + 1}\" r:id=\"rId${index + 1}\"/>`;\n });\n\n xml += '</sheets>';\n xml += '</workbook>';\n\n return xml;\n }\n}\n\nexport class ExportBuilder {\n constructor(private workbook: Workbook) {}\n\n download(options: ExportOptions = {}) {\n const filename = options.filename || 'export.xlsx';\n const format = options.format || (\n filename.endsWith('.csv') ? 'csv' :\n filename.endsWith('.json') ? 'json' :\n 'xlsx'\n );\n let writer;\n if (format === 'xlsx') writer = ExcelWriter;\n else if (format === 'csv') writer = CSVWriter;\n else if (format === 'json') writer = JSONWriter;\n else throw new Error('Unsupported format');\n\n writer.write(this.workbook, options).then((blob: Blob | MediaSource) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n });\n }\n}","import { WorkbookData, ExportOptions } from '../types';\nimport { Worksheet } from './worksheet';\nimport { ExcelWriter } from '../writers/excel-writer';\nimport { CSVWriter } from '../writers/csv-writer';\nimport { JSONWriter } from '../writers/json-writer';\n\nexport class Workbook {\n private sheets: Worksheet[] = [];\n private properties: Record<string, any> = {};\n\n constructor(data?: WorkbookData) {\n if (data) {\n this.fromData(data);\n }\n }\n\n addSheet(sheet: Worksheet): this {\n this.sheets.push(sheet);\n return this;\n }\n\n createSheet(name: string): Worksheet {\n const sheet = new Worksheet(name);\n this.sheets.push(sheet);\n return sheet;\n }\n\n getSheet(index: number): Worksheet | undefined {\n return this.sheets[index];\n }\n\n getSheetByName(name: string): Worksheet | undefined {\n return this.sheets.find(s => s.getName() === name);\n }\n\n removeSheet(index: number): boolean {\n if (index >= 0 && index < this.sheets.length) {\n this.sheets.splice(index, 1);\n return true;\n }\n return false;\n }\n\n setProperty(key: string, value: any): this {\n this.properties[key] = value;\n return this;\n }\n\n toData(): WorkbookData {\n return {\n sheets: this.sheets.map(sheet => sheet.toData()),\n properties: this.properties\n };\n }\n\n fromData(data: WorkbookData): void {\n this.sheets = data.sheets.map(sheetData => Worksheet.fromData(sheetData));\n this.properties = data.properties || {};\n }\n\n async export(options: ExportOptions = {}): Promise<Blob> {\n const { format = 'xlsx' } = options;\n\n switch (format) {\n case 'csv':\n return CSVWriter.write(this, options);\n case 'json':\n return JSONWriter.write(this, options);\n case 'xlsx':\n default:\n return ExcelWriter.write(this, options);\n }\n }\n\n download(options: ExportOptions = {}): void {\n const { filename = 'workbook.xlsx' } = options;\n \n this.export(options).then(blob => {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n window.URL.revokeObjectURL(url);\n });\n }\n\n static create(): Workbook {\n return new Workbook();\n }\n\n static fromData(data: WorkbookData): Workbook {\n return new Workbook(data);\n }\n}","import { CellStyle, Border, BorderStyle } from '../types';\n\nexport class StyleBuilder {\n private style: CellStyle = {};\n\n bold(bold: boolean = true): this {\n this.style.bold = bold;\n return this;\n }\n\n italic(italic: boolean = true): this {\n this.style.italic = italic;\n return this;\n }\n\n underline(underline: boolean = true): this {\n this.style.underline = underline;\n return this;\n }\n\n fontSize(size: number): this {\n this.style.fontSize = size;\n return this;\n }\n\n fontFamily(family: string): this {\n this.style.fontFamily = family;\n return this;\n }\n\n color(color: string): this {\n this.style.color = color;\n return this;\n }\n\n backgroundColor(color: string): this {\n this.style.backgroundColor = color;\n return this;\n }\n\n align(alignment: 'left' | 'center' | 'right'): this {\n this.style.alignment = alignment;\n return this;\n }\n\n verticalAlign(alignment: 'top' | 'middle' | 'bottom'): this {\n this.style.verticalAlignment = alignment;\n return this;\n }\n\n wrapText(wrap: boolean = true): this {\n this.style.wrapText = wrap;\n return this;\n }\n\n border(border: Border): this {\n this.style.border = border;\n return this;\n }\n\n borderTop(style: BorderStyle['style'] = 'thin', color?: string): this {\n if (!this.style.border) this.style.border = {};\n this.style.border.top = { style, color };\n return this;\n }\n\n borderRight(style: BorderStyle['style'] = 'thin', color?: string): this {\n if (!this.style.border) this.style.border = {};\n this.style.border.right = { style, color };\n return this;\n }\n\n borderBottom(style: BorderStyle['style'] = 'thin', color?: string): this {\n if (!this.style.border) this.style.border = {};\n this.style.border.bottom = { style, color };\n return this;\n }\n\n borderLeft(style: BorderStyle['style'] = 'thin', color?: string): this {\n if (!this.style.border) this.style.border = {};\n this.style.border.left = { style, color };\n return this;\n }\n\n borderAll(style: BorderStyle['style'] = 'thin', color?: string): this {\n const borderStyle: BorderStyle = { style, color };\n this.style.border = {\n top: borderStyle,\n bottom: borderStyle,\n left: borderStyle,\n right: borderStyle\n };\n return this;\n }\n\n numberFormat(format: string): this {\n this.style.numberFormat = format;\n return this;\n }\n\n build(): CellStyle {\n return { ...this.style };\n }\n\n static create(): StyleBuilder {\n return new StyleBuilder();\n }\n}","import { Workbook } from '../core/workbook';\nimport { Worksheet } from '../core/worksheet';\n// import { Row } from '../core/row';\n// import { Cell } from '../core/cell';\nimport { StyleBuilder } from '../core/styles';\nimport { SectionConfig, ExportOptions } from '../types';\nimport { ExcelWriter, CSVWriter, JSONWriter } from '../writers';\n\nexport class ExportBuilder {\n private workbook: Workbook;\n private currentSheet: Worksheet;\n\n constructor(sheetName: string = 'Sheet1') {\n this.workbook = new Workbook();\n this.currentSheet = new Worksheet(sheetName);\n this.workbook.addSheet(this.currentSheet);\n }\n\n addHeaderRow(headers: string[], style?: any): this {\n const row = this.currentSheet.createRow();\n headers.forEach(header => {\n row.createCell(header, style);\n });\n return this;\n }\n\n addDataRows(data: any[], fields?: string[]): this {\n data.forEach(item => {\n const row = this.currentSheet.createRow();\n \n if (fields && fields.length > 0) {\n fields.forEach(field => {\n const value = this.getNestedValue(item, field);\n row.createCell(value);\n });\n } else if (Array.isArray(item)) {\n item.forEach(value => row.createCell(value));\n } else if (typeof item === 'object') {\n Object.values(item).forEach(value => row.createCell(value));\n } else {\n row.createCell(item);\n }\n });\n \n return this;\n }\n\n addSection(config: SectionConfig): this {\n // Add section header\n const headerRow = this.currentSheet.createRow();\n headerRow.setOutlineLevel(config.level);\n \n const headerCell = headerRow.createCell(config.title);\n headerCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .backgroundColor('#E0E0E0')\n .build()\n );\n\n // Add section data\n if (config.data && config.data.length > 0) {\n if (config.groupBy && config.subSections) {\n // Handle grouped data\n const groupedData = this.groupData(config.data, config.groupBy);\n \n Object.entries(groupedData).forEach(([key, items]) => {\n const subHeaderRow = this.currentSheet.createRow();\n subHeaderRow.setOutlineLevel(config.level + 1);\n subHeaderRow.createCell(`${config.groupBy}: ${key}`);\n \n items.forEach((item: any) => {\n const dataRow = this.currentSheet.createRow();\n dataRow.setOutlineLevel(config.level + 2);\n \n if (config.fields) {\n config.fields.forEach((field: string) => {\n dataRow.createCell(this.getNestedValue(item, field));\n });\n }\n });\n });\n } else {\n // Add data rows with outline level\n config.data.forEach((item: any) => {\n const row = this.currentSheet.createRow();\n row.setOutlineLevel(config.level + 1);\n \n if (config.fields) {\n config.fields.forEach((field: string) => {\n row.createCell(this.getNestedValue(item, field));\n });\n }\n });\n }\n }\n\n return this;\n }\n\n addSections(sections: SectionConfig[]): this {\n sections.forEach(section => this.addSection(section));\n return this;\n }\n\n setColumnWidths(widths: number[]): this {\n widths.forEach((width) => {\n this.currentSheet.createColumn(width);\n });\n return this;\n }\n\n autoSizeColumns(): this {\n const rows = this.currentSheet.getRows();\n const maxLengths: number[] = [];\n\n rows.forEach(row => {\n row.getCells().forEach((cell, index) => {\n const value = cell.toData().value;\n const length = value ? String(value).length : 0;\n \n if (!maxLengths[index] || length > maxLengths[index]) {\n maxLengths[index] = Math.min(length, 50); // Cap at 50 characters\n }\n });\n });\n\n maxLengths.forEach((length) => {\n this.currentSheet.createColumn(Math.max(length, 10)); // Minimum width 10\n });\n\n return this;\n }\n\n addStyle(style: any): this {\n // Apply style to last row\n const rows = this.currentSheet.getRows();\n if (rows.length > 0) {\n const lastRow = rows[rows.length - 1];\n lastRow.getCells().forEach(cell => {\n cell.setStyle(style);\n });\n }\n return this;\n }\n\n private groupData(data: any[], field: string): Record<string, any[]> {\n return data.reduce((groups: Record<string, any[]>, item) => {\n const key = this.getNestedValue(item, field);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n return groups;\n }, {});\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n build(): Workbook {\n return this.workbook;\n }\n\n async export(options: ExportOptions): Promise<Blob> {\n return this.workbook.export(options);\n }\n\n download(options: ExportOptions = {}) {\n const filename = options.filename || 'export.xlsx';\n const format = options.format || (\n filename.endsWith('.csv') ? 'csv' :\n filename.endsWith('.json') ? 'json' :\n 'xlsx'\n );\n let writer;\n if (format === 'xlsx') writer = ExcelWriter;\n else if (format === 'csv') writer = CSVWriter;\n else if (format === 'json') writer = JSONWriter;\n else throw new Error('Unsupported format');\n\n writer.write(this.workbook, options).then((blob: Blob | MediaSource) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n });\n }\n\n static create(sheetName?: string): ExportBuilder {\n return new ExportBuilder(sheetName);\n }\n}","import { Worksheet } from '../core/worksheet';\nimport { Row } from '../core/row';\n// import { Cell } from '../core/cell';\nimport { Column } from '../core/column';\nimport { StyleBuilder } from '../core/styles';\nimport { \n CellStyle, \n CellData, \n// RowData, \n// ColumnData, \n// MergeCell,\n// FreezePane,\n PrintOptions,\n HeaderFooter,\n// \n TableConfig,\n DataValidation,\n ConditionalFormatRule,\n ChartConfig,\n Drawing\n} from '../types';\n\n/**\n * SheetBuilder provides a fluent API for building Excel worksheets\n */\nexport class SheetBuilder {\n private worksheet: Worksheet;\n private currentRow: number = 0;\n\n /**\n * Create a new SheetBuilder instance\n * @param name Worksheet name\n */\n constructor(name: string = 'Sheet1') {\n this.worksheet = new Worksheet(name);\n }\n\n /**\n * Get the underlying worksheet\n */\n getWorksheet(): Worksheet {\n return this.worksheet;\n }\n\n /**\n * Set the worksheet name\n */\n setName(name: string): this {\n this.worksheet.setName(name);\n return this;\n }\n\n /**\n * Add a header row with styling\n * @param headers Array of header text\n * @param style Optional style for all headers\n */\n addHeaderRow(headers: string[], style?: CellStyle): this {\n const row = this.createRow();\n \n headers.forEach((header) => {\n const cellStyle = style || StyleBuilder.create()\n .bold(true)\n .backgroundColor('#F0F0F0')\n .borderAll('thin')\n .align('center')\n .build();\n \n row.createCell(header, cellStyle);\n });\n\n return this;\n }\n\n /**\n * Add a title row\n * @param title Title text\n * @param colSpan Number of columns to span\n */\n addTitle(title: string, colSpan: number = 1): this {\n const row = this.createRow();\n const cell = row.createCell(title);\n \n cell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .fontSize(14)\n .align('center')\n .build()\n );\n\n if (colSpan > 1) {\n this.mergeCells(this.currentRow - 1, 0, this.currentRow - 1, colSpan - 1);\n }\n\n return this;\n }\n\n /**\n * Add a subtitle row\n * @param subtitle Subtitle text\n * @param colSpan Number of columns to span\n */\n addSubtitle(subtitle: string, colSpan: number = 1): this {\n const row = this.createRow();\n const cell = row.createCell(subtitle);\n \n cell.setStyle(\n StyleBuilder.create()\n .italic(true)\n .color('#666666')\n .align('center')\n .build()\n );\n\n if (colSpan > 1) {\n this.mergeCells(this.currentRow - 1, 0, this.currentRow - 1, colSpan - 1);\n }\n\n return this;\n }\n\n /**\n * Add a row of data\n * @param data Array of cell values\n * @param styles Optional array of styles per cell\n */\n addRow(data: any[], styles?: (CellStyle | undefined)[]): this {\n const row = this.createRow();\n \n data.forEach((value, index) => {\n const style = styles && styles[index] ? styles[index] : undefined;\n row.createCell(value, style);\n });\n\n return this;\n }\n\n /**\n * Add multiple rows of data\n * @param rows Array of row data\n * @param styles Optional array of styles per row or per cell\n */\n addRows(rows: any[][], styles?: (CellStyle | CellStyle[] | undefined)[]): this {\n rows.forEach((rowData, rowIndex) => {\n const rowStyles = styles && styles[rowIndex];\n \n if (Array.isArray(rowStyles)) {\n this.addRow(rowData, rowStyles);\n } else {\n this.addRow(rowData, rowStyles ? [rowStyles] : undefined);\n }\n });\n\n return this;\n }\n\n /**\n * Add data from objects\n * @param data Array of objects\n * @param fields Fields to extract (keys or dot notation paths)\n * @param headers Optional header labels\n */\n addObjects<T extends Record<string, any>>(\n data: T[],\n fields: (keyof T | string)[],\n headers?: string[]\n ): this {\n // Add headers if provided\n if (headers) {\n this.addHeaderRow(headers);\n }\n\n // Add data rows\n data.forEach(item => {\n const rowData = fields.map(field => this.getNestedValue(item, field as string));\n this.addRow(rowData);\n });\n\n return this;\n }\n\n /**\n * Add a section with header and data\n * @param title Section title\n * @param data Section data\n * @param fields Fields to display\n * @param level Outline level\n */\n addSection(\n title: string,\n data: any[],\n fields: string[],\n level: number = 0\n ): this {\n // Add section header\n const headerRow = this.createRow();\n headerRow.setOutlineLevel(level);\n \n const headerCell = headerRow.createCell(title);\n headerCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .fontSize(12)\n .backgroundColor('#E0E0E0')\n .borderAll('thin')\n .build()\n );\n\n // Merge header across all columns\n if (fields.length > 1) {\n this.mergeCells(this.currentRow - 1, 0, this.currentRow - 1, fields.length - 1);\n }\n\n // Add field headers\n const fieldRow = this.createRow();\n fieldRow.setOutlineLevel(level + 1);\n \n fields.forEach(field => {\n fieldRow.createCell(\n this.formatFieldName(field),\n StyleBuilder.create()\n .bold(true)\n .backgroundColor('#F5F5F5')\n .borderAll('thin')\n .build()\n );\n });\n\n // Add data rows\n data.forEach(item => {\n const row = this.createRow();\n row.setOutlineLevel(level + 2);\n \n fields.forEach(field => {\n const value = this.getNestedValue(item, field);\n row.createCell(value);\n });\n });\n\n return this;\n }\n\n /**\n * Add grouped data with sub-sections\n * @param data Data to group\n * @param groupBy Field to group by\n * @param fields Fields to display\n * @param level Outline level\n */\n addGroupedData(\n data: any[],\n groupBy: string,\n fields: string[],\n level: number = 0\n ): this {\n const groups = this.groupData(data, groupBy);\n \n Object.entries(groups).forEach(([key, items]) => {\n // Add group header\n const groupRow = this.createRow();\n groupRow.setOutlineLevel(level);\n \n const groupCell = groupRow.createCell(`${groupBy}: ${key}`);\n groupCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .backgroundColor('#E8E8E8')\n .build()\n );\n\n if (fields.length > 1) {\n this.mergeCells(this.currentRow - 1, 0, this.currentRow - 1, fields.length - 1);\n }\n\n // Add field headers\n const fieldRow = this.createRow();\n fieldRow.setOutlineLevel(level + 1);\n \n fields.forEach(field => {\n fieldRow.createCell(\n this.formatFieldName(field),\n StyleBuilder.create()\n .bold(true)\n .backgroundColor('#F5F5F5')\n .build()\n );\n });\n\n // Add items\n items.forEach((item: any) => {\n const row = this.createRow();\n row.setOutlineLevel(level + 2);\n \n fields.forEach(field => {\n const value = this.getNestedValue(item, field);\n row.createCell(value);\n });\n });\n\n // Add group summary\n this.addGroupSummary(items, fields, level + 1);\n });\n\n return this;\n }\n\n /**\n * Add summary row for a group\n */\n private addGroupSummary(items: any[], fields: string[], level: number): this {\n const summaryRow = this.createRow();\n summaryRow.setOutlineLevel(level + 1);\n \n // Create summary cells\n fields.forEach((_, index) => {\n if (index === 0) {\n summaryRow.createCell(\n 'Group Summary',\n StyleBuilder.create()\n .italic(true)\n .bold(true)\n .build()\n );\n } else {\n const numericValues = items\n .map(item => this.getNestedValue(item, fields[index]))\n .filter(val => typeof val === 'number');\n \n if (numericValues.length > 0) {\n const sum = numericValues.reduce((a, b) => a + b, 0);\n summaryRow.createCell(\n sum,\n StyleBuilder.create()\n .bold(true)\n .numberFormat('#,##0.00')\n .build()\n );\n } else {\n summaryRow.createCell('');\n }\n }\n });\n\n return this;\n }\n\n /**\n * Add a summary row with totals\n * @param fields Fields to summarize\n * @param functions Summary functions (sum, average, count, min, max)\n * @param label Summary label\n */\n addSummaryRow(\n fields: string[],\n functions: Array<'sum' | 'average' | 'count' | 'min' | 'max'>,\n label: string = 'Total'\n ): this {\n const row = this.createRow();\n \n fields.forEach((_, index) => {\n if (index === 0) {\n row.createCell(\n label,\n StyleBuilder.create()\n .bold(true)\n .borderTop('double')\n .build()\n );\n } else {\n const function_ = functions[index - 1] || 'sum';\n row.createCell(\n `=${function_.toUpperCase()}(${this.getColumnRange(index)})`,\n StyleBuilder.create()\n .bold(true)\n .borderTop('double')\n .numberFormat('#,##0.00')\n .build()\n );\n }\n });\n\n return this;\n }\n\n /**\n * Set column widths\n * @param widths Array of column widths\n */\n setColumnWidths(widths: number[]): this {\n widths.forEach((width, index) => {\n const column = this.getOrCreateColumn(index);\n column.setWidth(width);\n });\n\n return this;\n }\n\n /**\n * Auto-size columns based on content\n * @param maxWidth Maximum width in characters\n */\n autoSizeColumns(maxWidth: number = 50): this {\n const rows = this.worksheet.getRows();\n const columnWidths: Map<number, number> = new Map();\n\n rows.forEach(row => {\n row.getCells().forEach((cell, index) => {\n const cellData = cell.toData();\n const value = cellData.value;\n const length = value ? String(value).length : 0;\n \n const currentMax = columnWidths.get(index) || 0;\n columnWidths.set(index, Math.min(Math.max(length, currentMax), maxWidth));\n });\n });\n\n columnWidths.forEach((width, index) => {\n const column = this.getOrCreateColumn(index);\n column.setWidth(Math.max(width + 2, 8)); // Add padding, minimum 8\n });\n\n return this;\n }\n\n /**\n * Set column to auto-fit\n * @param colIndex Column index\n */\n setColumnAutoFit(colIndex: number): this {\n const column = this.getOrCreateColumn(colIndex);\n // Auto-fit will be applied during export\n column.setWidth(0); // 0 indicates auto-fit\n return this;\n }\n\n /**\n * Hide a column\n * @param colIndex Column index\n */\n hideColumn(colIndex: number): this {\n const column = this.getOrCreateColumn(colIndex);\n column.setHidden(true);\n return this;\n }\n\n /**\n * Hide a row\n * @param rowIndex Row index\n */\n hideRow(rowIndex: number): this {\n const row = this.worksheet.getRow(rowIndex);\n if (row) {\n row.setHidden(true);\n }\n return this;\n }\n\n /**\n * Set outline level for a row\n * @param rowIndex Row index\n * @param level Outline level (0-7)\n * @param collapsed Whether the outline is collapsed\n */\n setRowOutlineLevel(rowIndex: number, level: number, collapsed: boolean = false): this {\n const row = this.worksheet.getRow(rowIndex);\n if (row) {\n row.setOutlineLevel(level, collapsed);\n }\n return this;\n }\n\n /**\n * Set outline level for a column\n * @param colIndex Column index\n * @param level Outline level (0-7)\n * @param collapsed Whether the outline is collapsed\n */\n setColumnOutlineLevel(colIndex: number, level: number, collapsed: boolean = false): this {\n const column = this.getOrCreateColumn(colIndex);\n column.setOutlineLevel(level, collapsed);\n return this;\n }\n\n /**\n * Create an outline group for rows\n * @param startRow Start row index\n * @param endRow End row index\n * @param level Outline level\n * @param collapsed Whether the group is collapsed\n */\n groupRows(startRow: number, endRow: number, level: number = 1, collapsed: boolean = false): this {\n for (let i = startRow; i <= endRow; i++) {\n const row = this.worksheet.getRow(i);\n if (row) {\n row.setOutlineLevel(level, collapsed && i === startRow);\n }\n }\n return this;\n }\n\n /**\n * Create an outline group for columns\n * @param startCol Start column index\n * @param endCol End column index\n * @param level Outline level\n * @param collapsed Whether the group is collapsed\n */\n groupColumns(startCol: number, endCol: number, level: number = 1, collapsed: boolean = false): this {\n for (let i = startCol; i <= endCol; i++) {\n const column = this.getOrCreateColumn(i);\n column.setOutlineLevel(level, collapsed && i === startCol);\n }\n return this;\n }\n\n /**\n * Merge cells\n * @param startRow Start row\n * @param startCol Start column\n * @param endRow End row\n * @param endCol End column\n */\n mergeCells(startRow: number, startCol: number, endRow: number, endCol: number): this {\n this.worksheet.mergeCells(startRow, startCol, endRow, endCol);\n return this;\n }\n\n /**\n * Freeze panes\n * @param rows Number of rows to freeze\n * @param columns Number of columns to freeze\n */\n freezePanes(rows: number = 0, columns: number = 0): this {\n this.worksheet.setFreezePane(rows, columns);\n return this;\n }\n\n /**\n * Set print options\n * @param options Print options\n */\n setPrintOptions(options: PrintOptions): this {\n this.worksheet.setPrintOptions(options);\n return this;\n }\n\n /**\n * Set header and footer\n * @param headerFooter Header/footer configuration\n */\n setHeaderFooter(headerFooter: HeaderFooter): this {\n // Store in worksheet (would be implemented in worksheet class)\n (this.worksheet as any).headerFooter = headerFooter;\n return this;\n }\n\n /**\n * Add auto-filter\n * @param startRow Start row\n * @param startCol Start column\n * @param endRow End row\n * @param endCol End column\n */\n addAutoFilter(startRow: number, startCol: number, endRow: number, endCol: number): this {\n const range = `${this.columnToLetter(startCol)}${startRow + 1}:${this.columnToLetter(endCol)}${endRow + 1}`;\n (this.worksheet as any).autoFilter = { range };\n return this;\n }\n\n /**\n * Add a table\n * @param config Table configuration\n */\n addTable(config: TableConfig): this {\n if (!(this.worksheet as any).tables) {\n (this.worksheet as any).tables = [];\n }\n (this.worksheet as any).tables.push(config);\n return this;\n }\n\n /**\n * Add data validation to a cell or range\n * @param range Cell range (e.g., 'A1:B10')\n * @param validation Data validation rules\n */\n addDataValidation(range: string, validation: DataValidation): this {\n if (!(this.worksheet as any).dataValidations) {\n (this.worksheet as any).dataValidations = {};\n }\n (this.worksheet as any).dataValidations[range] = validation;\n return this;\n }\n\n /**\n * Add conditional formatting\n * @param range Cell range\n * @param rules Conditional formatting rules\n */\n addConditionalFormatting(range: string, rules: ConditionalFormatRule[]): this {\n if (!(this.worksheet as any).conditionalFormats) {\n (this.worksheet as any).conditionalFormats = {};\n }\n (this.worksheet as any).conditionalFormats[range] = rules;\n return this;\n }\n\n /**\n * Add a chart\n * @param config Chart configuration\n */\n addChart(config: ChartConfig): this {\n if (!(this.worksheet as any).charts) {\n (this.worksheet as any).charts = [];\n }\n (this.worksheet as any).charts.push(config);\n return this;\n }\n\n /**\n * Add an image or drawing\n * @param drawing Drawing configuration\n */\n addDrawing(drawing: Drawing): this {\n if (!(this.worksheet as any).drawings) {\n (this.worksheet as any).drawings = [];\n }\n (this.worksheet as any).drawings.push(drawing);\n return this;\n }\n\n /**\n * Set cell value with style\n * @param row Row index\n * @param col Column index\n * @param value Cell value\n * @param style Cell style\n */\n setCell(row: number, col: number, value: any, style?: CellStyle): this {\n this.worksheet.setCell(row, col, value, style);\n return this;\n }\n\n /**\n * Get cell value\n * @param row Row index\n * @param col Column index\n */\n getCell(row: number, col: number): CellData | undefined {\n return this.worksheet.getCell(row, col);\n }\n\n /**\n * Add a comment to a cell\n * @param row Row index\n * @param col Column index\n * @param comment Comment text\n * @param author Comment author\n */\n addComment(row: number, col: number, comment: string, author?: string): this {\n const cell = this.worksheet.getCell(row, col);\n if (cell) {\n // Would need to extend Cell class to support comments\n (cell as any).comment = { text: comment, author };\n }\n return this;\n }\n\n /**\n * Add a hyperlink to a cell\n * @param row Row index\n * @param col Column index\n * @param url Hyperlink URL\n * @param displayText Display text (optional)\n */\n addHyperlink(row: number, col: number, url: string, displayText?: string): this {\n this.worksheet.setCell(row, col, displayText || url);\n const cell = this.worksheet.getCell(row, col);\n if (cell) {\n (cell as any).hyperlink = url;\n }\n return this;\n }\n\n /**\n * Apply a style to a range\n * @param startRow Start row\n * @param startCol Start column\n * @param endRow End row\n * @param endCol End column\n * @param style Style to apply\n */\n applyStyleToRange(\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n style: CellStyle\n ): this {\n for (let r = startRow; r <= endRow; r++) {\n for (let c = startCol; c <= endCol; c++) {\n const cell = this.worksheet.getCell(r, c);\n if (cell) {\n // Would need to update cell style\n (cell as any).style = { ...(cell as any).style, ...style };\n }\n }\n }\n return this;\n }\n\n /**\n * Insert a blank row\n * @param count Number of blank rows to insert\n */\n insertBlankRows(count: number = 1): this {\n for (let i = 0; i < count; i++) {\n this.createRow();\n }\n return this;\n }\n\n /**\n * Create a new row\n */\n private createRow(): Row {\n const row = this.worksheet.createRow();\n this.currentRow++;\n return row;\n }\n\n /**\n * Get or create a column\n */\n private getOrCreateColumn(index: number): Column {\n let column = this.worksheet.getColumn(index);\n if (!column) {\n column = this.worksheet.createColumn();\n }\n return column;\n }\n\n /**\n * Get nested value from object using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n /**\n * Format field name for display\n */\n private formatFieldName(field: string): string {\n return field\n .split('.')\n .pop()!\n .split('_')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n\n /**\n * Group data by field\n */\n private groupData(data: any[], field: string): Record<string, any[]> {\n return data.reduce((groups: Record<string, any[]>, item) => {\n const key = this.getNestedValue(item, field);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n return groups;\n }, {});\n }\n\n /**\n * Convert column index to letter (A, B, C, ...)\n */\n private columnToLetter(column: number): string {\n let letters = '';\n while (column >= 0) {\n letters = String.fromCharCode((column % 26) + 65) + letters;\n column = Math.floor(column / 26) - 1;\n }\n return letters;\n }\n\n /**\n * Get column range for formula (e.g., A:A)\n */\n private getColumnRange(colIndex: number): string {\n const colLetter = this.columnToLetter(colIndex);\n return `${colLetter}:${colLetter}`;\n }\n\n /**\n * Build and return the worksheet\n */\n build(): Worksheet {\n return this.worksheet;\n }\n\n /**\n * Reset the builder\n */\n reset(): this {\n this.worksheet = new Worksheet(this.worksheet.getName());\n this.currentRow = 0;\n return this;\n }\n\n /**\n * Create a new SheetBuilder instance\n */\n static create(name?: string): SheetBuilder {\n return new SheetBuilder(name);\n }\n\n /**\n * Create from existing worksheet\n */\n static fromWorksheet(worksheet: Worksheet): SheetBuilder {\n const builder = new SheetBuilder(worksheet.getName());\n builder.worksheet = worksheet;\n return builder;\n }\n}\n\n// Add missing types to CellStyle (to be added in cell.types.ts)\ndeclare module '../types/cell.types' {\n interface CellStyle {\n borderTop?: BorderStyleType | BorderEdge;\n borderBottom?: BorderStyleType | BorderEdge;\n borderLeft?: BorderStyleType | BorderEdge;\n borderRight?: BorderStyleType | BorderEdge;\n }\n}\n\n// Helper function to add border methods to StyleBuilder\nexport function extendStyleBuilder() {\n StyleBuilder.prototype.borderTop = function(style: any, color?: string) {\n if (!this['style'].border) this['style'].border = {};\n this['style'].border.top = typeof style === 'string' \n ? { style, color } \n : style;\n return this;\n };\n\n StyleBuilder.prototype.borderBottom = function(style: any, color?: string) {\n if (!this['style'].border) this['style'].border = {};\n this['style'].border.bottom = typeof style === 'string' \n ? { style, color } \n : style;\n return this;\n };\n\n StyleBuilder.prototype.borderLeft = function(style: any, color?: string) {\n if (!this['style'].border) this['style'].border = {};\n this['style'].border.left = typeof style === 'string' \n ? { style, color } \n : style;\n return this;\n };\n\n StyleBuilder.prototype.borderRight = function(style: any, color?: string) {\n if (!this['style'].border) this['style'].border = {};\n this['style'].border.right = typeof style === 'string' \n ? { style, color } \n : style;\n return this;\n };\n}","import { Worksheet } from '../core/worksheet';\n// import { Row } from '../core/row';\nimport { Cell } from '../core/cell';\nimport { StyleBuilder } from '../core/styles';\nimport { \n SectionConfig, \n CellStyle, \n ExportFilters,\n ConditionalFormatRule \n} from '../types';\n\n/**\n * Builder class for creating collapsible sections in worksheets\n * Supports nested sections, grouping, summaries, and conditional styling\n */\nexport class SectionBuilder {\n private worksheet: Worksheet;\n private currentRow: number = 0;\n private sections: Map<string, Section> = new Map();\n private styles: Map<string, CellStyle> = new Map();\n private formatters: Map<string, (value: any) => any> = new Map();\n private conditionalFormats: ConditionalFormatRule[] = [];\n\n constructor(worksheet: Worksheet) {\n this.worksheet = worksheet;\n }\n\n /**\n * Add a section to the worksheet\n */\n addSection(config: SectionConfig): this {\n const section = new Section(this.worksheet, config, this.currentRow);\n if (config.title !== undefined) {\n this.sections.set(config.title, section);\n }\n \n // Build the section\n this.currentRow = section.build();\n \n return this;\n }\n\n /**\n * Add multiple sections at once\n */\n addSections(configs: SectionConfig[]): this {\n configs.forEach(config => this.addSection(config));\n return this;\n }\n\n /**\n * Add a nested section (child of current section)\n */\n addNestedSection(parentTitle: string, config: SectionConfig): this {\n const parent = this.sections.get(parentTitle);\n if (parent) {\n parent.addSubSection(config);\n }\n return this;\n }\n\n /**\n * Create a section from data with automatic grouping\n */\n createFromData<T>(\n data: T[],\n options: {\n title: string;\n groupBy?: keyof T | ((item: T) => string);\n fields?: Array<keyof T | string>;\n fieldLabels?: Record<string, string>;\n level?: number;\n collapsed?: boolean;\n summary?: {\n fields: Array<keyof T>;\n functions: Array<'sum' | 'average' | 'count' | 'min' | 'max'>;\n };\n }\n ): this {\n const {\n title,\n groupBy,\n fields = Object.keys(data[0] || {}) as Array<keyof T>,\n fieldLabels = {},\n level = 0,\n collapsed = false,\n summary\n } = options;\n\n // If no grouping, create a simple section\n if (!groupBy) {\n return this.addSection({\n title,\n level,\n collapsed,\n data,\n fields: fields as string[],\n fieldLabels,\n summary: summary ? {\n fields: summary.fields as string[],\n function: summary.functions[0] || 'count',\n label: 'Total'\n } : undefined\n });\n }\n\n // Group the data\n const groups = this.groupData(data, groupBy);\n \n // Create main section with groups as subsections\n const sectionConfig: SectionConfig = {\n title,\n level,\n collapsed,\n data: [],\n subSections: Object.entries(groups).map(([key, items]) => ({\n title: `${String(groupBy)}: ${key}`,\n level: level + 1,\n collapsed: true,\n data: items,\n fields: fields as string[],\n fieldLabels,\n summary: summary ? {\n fields: summary.fields as string[],\n function: summary.functions[0] || 'count',\n label: `Total for ${key}`\n } : undefined\n }))\n };\n\n return this.addSection(sectionConfig);\n }\n\n /**\n * Add a summary section (totals, averages, etc.)\n */\n addSummarySection(\n data: any[],\n fields: string[],\n functions: Array<'sum' | 'average' | 'count' | 'min' | 'max'>,\n options?: {\n level?: number;\n style?: CellStyle;\n showPercentage?: boolean;\n label?: string;\n }\n ): this {\n const { level = 0, style, showPercentage = false, label = 'Summary' } = options || {};\n\n // Calculate summary values\n const summary: Record<string, any> = {};\n \n fields.forEach((field, index) => {\n const func = functions[index] || functions[0];\n const values = data.map(item => this.getNestedValue(item, field)).filter(v => v != null);\n \n switch (func) {\n case 'sum':\n summary[field] = values.reduce((a, b) => a + b, 0);\n break;\n case 'average':\n summary[field] = values.reduce((a, b) => a + b, 0) / values.length;\n break;\n case 'count':\n summary[field] = values.length;\n break;\n case 'min':\n summary[field] = Math.min(...values);\n break;\n case 'max':\n summary[field] = Math.max(...values);\n break;\n }\n\n // Add percentage if requested\n if (showPercentage && func === 'count') {\n const total = data.length;\n summary[`${field}_percentage`] = ((summary[field] / total) * 100).toFixed(1) + '%';\n }\n });\n\n // Add the summary row\n const summaryRow = this.worksheet.createRow();\n summaryRow.setOutlineLevel(level + 1);\n\n // Add label cell\n const labelCell = summaryRow.createCell(`${label}:`);\n labelCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .italic(true)\n .backgroundColor('#f0f0f0')\n .build()\n );\n\n // Add summary values\n fields.forEach(field => {\n const value = summary[field];\n const cell = summaryRow.createCell(value);\n \n if (style) {\n cell.setStyle(style);\n } else {\n cell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .numberFormat(functions[0] === 'count' ? '#,##0' : '#,##0.00')\n .build()\n );\n }\n });\n\n return this;\n }\n\n /**\n * Add a hierarchical section (tree structure)\n */\n addHierarchicalSection<T>(\n items: T[],\n childrenAccessor: (item: T) => T[],\n options?: {\n title?: string;\n level?: number;\n fields?: Array<keyof T>;\n collapsed?: boolean;\n showCount?: boolean;\n }\n ): this {\n const { title = 'Hierarchy', level = 0, fields, collapsed = true, showCount = true } = options || {};\n\n const buildHierarchy = (items: T[], currentLevel: number): SectionConfig[] => {\n return items.map(item => {\n const children = childrenAccessor(item);\n const hasChildren = children && children.length > 0;\n \n // Get display value for title\n const titleField = fields?.[0] || 'name';\n const titleValue = this.getNestedValue(item, titleField as string);\n const count = hasChildren ? ` (${children.length})` : '';\n\n return {\n title: `${titleValue}${showCount && hasChildren ? count : ''}`,\n level: currentLevel,\n collapsed,\n data: [item],\n fields: fields as string[],\n subSections: hasChildren ? buildHierarchy(children, currentLevel + 1) : undefined\n };\n });\n };\n\n const hierarchySections = buildHierarchy(items, level + 1);\n\n return this.addSection({\n title: title,\n level,\n collapsed,\n data: [],\n subSections: hierarchySections\n });\n }\n\n /**\n * Add a pivot-like section with multiple dimensions\n */\n addPivotSection(\n data: any[],\n dimensions: {\n rows: string[];\n columns: string[];\n values: Array<{\n field: string;\n aggregate: 'sum' | 'average' | 'count' | 'min' | 'max';\n }>;\n },\n options?: {\n level?: number;\n showGrandTotals?: boolean;\n showSubTotals?: boolean;\n }\n ): this {\n const { level = 0, showGrandTotals = true, showSubTotals = true } = options || {};\n \n // Group by row dimensions\n const rowGroups = this.groupMultiLevel(data, dimensions.rows);\n \n // Create sections for each row group\n Object.entries(rowGroups).forEach(([rowKey, rowItems]) => {\n const rowSection: SectionConfig = {\n title: rowKey,\n level: level + 1,\n collapsed: true,\n data: [],\n subSections: []\n };\n\n // Group by column dimensions within each row\n if (dimensions.columns.length > 0) {\n const colGroups = this.groupMultiLevel(rowItems, dimensions.columns);\n \n Object.entries(colGroups).forEach(([colKey, colItems]) => {\n // Calculate values for this cell\n const values: Record<string, any> = {};\n dimensions.values.forEach(v => {\n const nums = colItems.map(item => item[v.field]).filter((n: any) => !isNaN(n));\n switch (v.aggregate) {\n case 'sum':\n values[v.field] = nums.reduce((a: number, b: number) => a + b, 0);\n break;\n case 'average':\n values[v.field] = nums.length ? nums.reduce((a: number, b: number) => a + b, 0) / nums.length : 0;\n break;\n case 'count':\n values[v.field] = colItems.length;\n break;\n case 'min':\n values[v.field] = Math.min(...nums);\n break;\n case 'max':\n values[v.field] = Math.max(...nums);\n break;\n }\n });\n\n rowSection.subSections!.push({\n title: colKey,\n level: level + 2,\n data: [values],\n fields: dimensions.values.map(v => v.field)\n });\n });\n\n // Add row subtotal\n if (showSubTotals) {\n const subtotalValues: Record<string, any> = {};\n dimensions.values.forEach(v => {\n const nums = rowItems.map(item => item[v.field]).filter((n: any) => !isNaN(n));\n switch (v.aggregate) {\n case 'sum':\n subtotalValues[v.field] = nums.reduce((a: number, b: number) => a + b, 0);\n break;\n case 'average':\n subtotalValues[v.field] = nums.length ? nums.reduce((a: number, b: number) => a + b, 0) / nums.length : 0;\n break;\n case 'count':\n subtotalValues[v.field] = rowItems.length;\n break;\n case 'min':\n subtotalValues[v.field] = Math.min(...nums);\n break;\n case 'max':\n subtotalValues[v.field] = Math.max(...nums);\n break;\n }\n });\n\n rowSection.subSections!.push({\n title: `${rowKey} Subtotal`,\n level: level + 2,\n data: [subtotalValues],\n fields: dimensions.values.map(v => v.field)\n });\n }\n }\n\n this.addSection(rowSection);\n });\n\n // Add grand total\n if (showGrandTotals) {\n const grandTotalValues: Record<string, any> = {};\n dimensions.values.forEach(v => {\n const nums = data.map(item => item[v.field]).filter((n: any) => !isNaN(n));\n switch (v.aggregate) {\n case 'sum':\n grandTotalValues[v.field] = nums.reduce((a: number, b: number) => a + b, 0);\n break;\n case 'average':\n grandTotalValues[v.field] = nums.length ? nums.reduce((a: number, b: number) => a + b, 0) / nums.length : 0;\n break;\n case 'count':\n grandTotalValues[v.field] = data.length;\n break;\n case 'min':\n grandTotalValues[v.field] = Math.min(...nums);\n break;\n case 'max':\n grandTotalValues[v.field] = Math.max(...nums);\n break;\n }\n });\n\n this.addSection({\n title: 'Grand Total',\n level,\n data: [grandTotalValues],\n fields: dimensions.values.map(v => v.field)\n });\n }\n\n return this;\n }\n\n /**\n * Add a timeline section (grouped by date periods)\n */\n addTimelineSection(\n data: any[],\n dateField: string,\n period: 'day' | 'week' | 'month' | 'quarter' | 'year',\n options?: {\n fields?: string[];\n level?: number;\n showTrends?: boolean;\n format?: string;\n }\n ): this {\n const { fields, level = 0, showTrends = true, format } = options || {};\n\n // Group by date period\n const grouped = this.groupByDate(data, dateField, period, format);\n\n // Create sections for each period\n Object.entries(grouped).forEach(([periodKey, periodData]) => {\n const section: SectionConfig = {\n title: periodKey,\n level: level + 1,\n collapsed: true,\n data: periodData,\n fields\n };\n\n // Add trend indicators if requested\n if (showTrends && periodData.length > 0) {\n const prevPeriod = this.getPreviousPeriod(periodKey, grouped);\n if (prevPeriod) {\n const trend = this.calculateTrend(periodData, prevPeriod, fields?.[0] || 'value');\n section.summary = {\n fields: [fields?.[0] || 'value'],\n function: 'sum',\n label: `Trend: ${trend > 0 ? '↑' : '↓'} ${Math.abs(trend).toFixed(1)}%`\n };\n }\n }\n\n this.addSection(section);\n });\n\n return this;\n }\n\n /**\n * Add a filtered section\n */\n addFilteredSection(\n config: SectionConfig,\n filters: ExportFilters\n ): this {\n const filteredData = this.applyFilters(config.data, filters);\n \n return this.addSection({\n ...config,\n data: filteredData,\n title: `${config.title} (Filtered)`\n });\n }\n\n /**\n * Add conditional formatting to the current section\n */\n addConditionalFormat(rule: ConditionalFormatRule): this {\n this.conditionalFormats.push(rule);\n return this;\n }\n\n /**\n * Add a custom formatter for a field\n */\n addFormatter(field: string, formatter: (value: any) => any): this {\n this.formatters.set(field, formatter);\n return this;\n }\n\n /**\n * Register a reusable style\n */\n registerStyle(name: string, style: CellStyle): this {\n this.styles.set(name, style);\n return this;\n }\n\n /**\n * Apply a registered style\n */\n applyStyle(styleName: string): this {\n const style = this.styles.get(styleName);\n if (style) {\n const lastRow = this.worksheet.getRows().slice(-1)[0];\n if (lastRow) {\n lastRow.getCells().forEach(cell => cell.setStyle(style));\n }\n }\n return this;\n }\n\n /**\n * Get the current row count\n */\n getCurrentRow(): number {\n return this.currentRow;\n }\n\n /**\n * Reset the builder\n */\n reset(): this {\n this.currentRow = 0;\n this.sections.clear();\n return this;\n }\n\n // Private helper methods\n\n private groupData<T>(data: T[], groupBy: keyof T | ((item: T) => string)): Record<string, T[]> {\n return data.reduce((groups: Record<string, T[]>, item) => {\n const key = typeof groupBy === 'function' \n ? groupBy(item)\n : String(item[groupBy]);\n \n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n return groups;\n }, {});\n }\n\n private groupMultiLevel(data: any[], dimensions: string[]): Record<string, any[]> {\n return data.reduce((groups: Record<string, any[]>, item) => {\n const key = dimensions.map(dim => this.getNestedValue(item, dim)).join(' › ');\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n return groups;\n }, {});\n }\n\n private groupByDate(\n data: any[],\n dateField: string,\n period: 'day' | 'week' | 'month' | 'quarter' | 'year',\n format?: string\n ): Record<string, any[]> {\n return data.reduce((groups: Record<string, any[]>, item) => {\n const date = new Date(this.getNestedValue(item, dateField));\n let key: string;\n\n switch (period) {\n case 'day':\n key = format || date.toISOString().split('T')[0];\n break;\n case 'week': {\n const week = this.getWeekNumber(date);\n key = format || `${date.getFullYear()}-W${week}`;\n break;\n }\n case 'month':\n key = format || `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;\n break;\n case 'quarter': {\n const quarter = Math.floor(date.getMonth() / 3) + 1;\n key = format || `${date.getFullYear()}-Q${quarter}`;\n break;\n }\n case 'year':\n key = format || String(date.getFullYear());\n break;\n }\n\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n return groups;\n }, {});\n }\n\n private getWeekNumber(date: Date): number {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n }\n\n private getPreviousPeriod(\n currentKey: string,\n groups: Record<string, any[]>\n ): any[] | null {\n const keys = Object.keys(groups).sort();\n const currentIndex = keys.indexOf(currentKey);\n if (currentIndex > 0) {\n return groups[keys[currentIndex - 1]];\n }\n return null;\n }\n\n private calculateTrend(current: any[], previous: any[], field: string): number {\n const currentSum = current.reduce((sum, item) => sum + (item[field] || 0), 0);\n const previousSum = previous.reduce((sum, item) => sum + (item[field] || 0), 0);\n \n if (previousSum === 0) return 0;\n return ((currentSum - previousSum) / previousSum) * 100;\n }\n\n private applyFilters(data: any[], filters: ExportFilters): any[] {\n return data.filter(item => {\n // Date range filter\n if (filters.dateRange) {\n const dateValue = new Date(this.getNestedValue(item, filters.dateRange.field || 'date'));\n const start = new Date(filters.dateRange.start);\n const end = new Date(filters.dateRange.end);\n \n if (dateValue < start || dateValue > end) {\n return false;\n }\n }\n\n // Field filters\n if (filters.filters) {\n for (const [field, values] of Object.entries(filters.filters)) {\n const itemValue = this.getNestedValue(item, field);\n const arrValues = values as any[];\n if (arrValues.length > 0 && !arrValues.includes(itemValue)) {\n return false;\n }\n }\n }\n\n // Search filter\n if (filters.search) {\n const searchTerm = filters.search.toLowerCase();\n const matches = Object.values(item).some(val => \n String(val).toLowerCase().includes(searchTerm)\n );\n if (!matches) return false;\n }\n\n // Custom filter\n if (filters.customFilter && !filters.customFilter(item)) {\n return false;\n }\n\n return true;\n }).slice(filters.offset || 0, (filters.offset || 0) + (filters.limit || Infinity));\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n}\n\n/**\n * Internal Section class for building collapsible sections\n */\nclass Section {\n private worksheet: Worksheet;\n private config: SectionConfig;\n private startRow: number;\n private subSections: Section[] = [];\n\n constructor(worksheet: Worksheet, config: SectionConfig, startRow: number) {\n this.worksheet = worksheet;\n this.config = config;\n this.startRow = startRow;\n }\n\n /**\n * Build the section in the worksheet\n */\n build(): number {\n let currentRow = this.startRow;\n\n // Add section header\n if (this.config.title) {\n const headerRow = this.worksheet.createRow();\n headerRow.setOutlineLevel(this.config.level);\n \n const headerCell = headerRow.createCell(this.config.title);\n \n // Apply header style\n const headerStyle = this.config.headerStyle || \n StyleBuilder.create()\n .bold(true)\n .fontSize(12)\n .backgroundColor(this.getHeaderColor(this.config.level))\n .borderAll('thin')\n .build();\n \n headerCell.setStyle(headerStyle);\n \n // Add collapse/expand indicator if section has data or subsections\n if (this.hasContent()) {\n const indicatorCell = headerRow.createCell(this.config.collapsed ? '▶' : '▼');\n indicatorCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .color('#666666')\n .build()\n );\n }\n \n currentRow++;\n }\n\n // Add section data if not collapsed\n if (!this.config.collapsed && this.config.data.length > 0) {\n // Add headers if fields are specified\n if (this.config.fields && this.config.fields.length > 0) {\n const headerRow = this.worksheet.createRow();\n headerRow.setOutlineLevel(this.config.level + 1);\n \n this.config.fields.forEach((field: string | number) => {\n const label = this.config.fieldLabels?.[field] || field;\n const cell = headerRow.createCell(label);\n cell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .backgroundColor('#e6e6e6')\n .borderAll('thin')\n .build()\n );\n });\n \n currentRow++;\n }\n\n // Add data rows\n this.config.data.forEach((item: Record<string, unknown>) => {\n const dataRow = this.worksheet.createRow();\n dataRow.setOutlineLevel(this.config.level + 1);\n \n const fields = this.config.fields || Object.keys(item);\n fields.forEach((field: string) => {\n const value = this.getNestedValue(item, field);\n const cell = dataRow.createCell(value);\n \n // Apply conditional formatting if any\n if (this.config.conditionalStyles) {\n this.applyConditionalStyles(cell, item, field);\n }\n \n // Apply field-specific style\n if (this.config.style) {\n cell.setStyle(this.config.style);\n }\n });\n \n currentRow++;\n });\n\n // Add summary row if configured\n if (this.config.summary) {\n this.addSummaryRow();\n currentRow++;\n }\n }\n\n // Build sub-sections\n if (this.config.subSections && !this.config.collapsed) {\n this.config.subSections.forEach((subConfig: SectionConfig) => {\n const subSection = new Section(this.worksheet, subConfig, currentRow);\n this.subSections.push(subSection);\n currentRow = subSection.build();\n });\n }\n\n return currentRow;\n }\n\n /**\n * Add a sub-section\n */\n addSubSection(config: SectionConfig): void {\n if (!this.config.subSections) {\n this.config.subSections = [];\n }\n this.config.subSections.push(config);\n }\n\n /**\n * Check if section has any content\n */\n private hasContent(): boolean {\n return this.config.data.length > 0 || \n (this.config.subSections && this.config.subSections.length > 0);\n }\n\n /**\n * Get header color based on outline level\n */\n private getHeaderColor(level: number): string {\n const colors = [\n '#e6f2ff', // Level 0 - Light blue\n '#f0f0f0', // Level 1 - Light gray\n '#f9f9f9', // Level 2 - Lighter gray\n '#ffffff', // Level 3+ - White\n ];\n return colors[Math.min(level, colors.length - 1)];\n }\n\n /**\n * Add summary row (totals, averages, etc.)\n */\n private addSummaryRow(): void {\n if (!this.config.summary) return;\n\n const summaryRow = this.worksheet.createRow();\n summaryRow.setOutlineLevel(this.config.level + 2);\n\n // Add label cell\n const labelCell = summaryRow.createCell(this.config.summary.label || 'Total');\n labelCell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .italic(true)\n .backgroundColor('#f5f5f5')\n .build()\n );\n\n // Calculate and add summary values\n const fields = this.config.fields || [];\n fields.forEach((field: string) => {\n if (this.config.summary!.fields.includes(field)) {\n const values = this.config.data\n .map((item: any) => this.getNestedValue(item, field))\n .filter((v: number | null) => v != null && !isNaN(v));\n \n let result: number;\n switch (this.config.summary!.function) {\n case 'sum':\n result = values.reduce((a: any, b: any) => a + b, 0);\n break;\n case 'average':\n result = values.length ? values.reduce((a: any, b: any) => a + b, 0) / values.length : 0;\n break;\n case 'count':\n result = values.length;\n break;\n case 'min':\n result = Math.min(...values);\n break;\n case 'max':\n result = Math.max(...values);\n break;\n default:\n result = 0;\n }\n\n const cell = summaryRow.createCell(result);\n cell.setStyle(\n StyleBuilder.create()\n .bold(true)\n .numberFormat(this.config.summary!.function === 'count' ? '#,##0' : '#,##0.00')\n .build()\n );\n } else {\n summaryRow.createCell('');\n }\n });\n }\n\n /**\n * Apply conditional formatting to a cell\n */\n private applyConditionalStyles(cell: Cell, item: any, field: string): void {\n if (!this.config.conditionalStyles) return;\n\n for (const rule of this.config.conditionalStyles) {\n if (rule.field === field && rule.condition(item)) {\n cell.setStyle(rule.style);\n break;\n }\n }\n }\n\n /**\n * Get nested value from object\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n}\n\n/**\n * Factory function to create a new SectionBuilder\n */\nexport function createSectionBuilder(worksheet: Worksheet): SectionBuilder {\n return new SectionBuilder(worksheet);\n}\n\n/**\n * Pre-built section templates\n */\nexport const SectionTemplates = {\n /**\n * Create a financial summary section\n */\n financialSummary(data: any[], options?: any): SectionConfig {\n return {\n title: options?.title || 'Financial Summary',\n level: 0,\n data,\n fields: ['date', 'description', 'debit', 'credit', 'balance'],\n fieldLabels: {\n date: 'Date',\n description: 'Description',\n debit: 'Debit ($)',\n credit: 'Credit ($)',\n balance: 'Balance ($)'\n },\n summary: {\n fields: ['debit', 'credit', 'balance'],\n function: 'sum',\n label: 'Totals'\n },\n conditionalStyles: [\n {\n field: 'balance',\n condition: (item: { balance: number; }) => item.balance < 0,\n style: StyleBuilder.create().color('#ff0000').bold(true).build()\n },\n {\n field: 'balance',\n condition: (item: { balance: number; }) => item.balance > 10000,\n style: StyleBuilder.create().color('#008000').bold(true).build()\n }\n ]\n };\n },\n\n /**\n * Create an inventory section\n */\n inventorySection(parts: any[], instances?: any[]): SectionConfig {\n return {\n title: 'Inventory Status',\n level: 0,\n data: parts,\n fields: ['part_number', 'part_name', 'category', 'current_stock', 'minimum_stock', 'status'],\n fieldLabels: {\n part_number: 'Part #',\n part_name: 'Part Name',\n category: 'Category',\n current_stock: 'Stock',\n minimum_stock: 'Min Stock',\n status: 'Status'\n },\n conditionalStyles: [\n {\n field: 'current_stock',\n condition: (item: { current_stock: number; }) => item.current_stock === 0,\n style: StyleBuilder.create().backgroundColor('#ffebee').color('#c62828').bold(true).build()\n },\n {\n field: 'current_stock',\n condition: (item: { current_stock: number; minimum_stock: number; }) => item.current_stock < item.minimum_stock && item.current_stock > 0,\n style: StyleBuilder.create().backgroundColor('#fff3e0').color('#ef6c00').build()\n }\n ],\n subSections: instances ? [\n {\n title: 'Part Instances',\n level: 1,\n data: instances,\n fields: ['instance_id', 'serial_number', 'status', 'location', 'installed_in_vehicle'],\n groupBy: 'part_number'\n }\n ] : undefined\n };\n },\n\n /**\n * Create a project timeline section\n */\n projectTimeline(tasks: any[]): SectionConfig {\n const now = new Date();\n \n return {\n title: 'Project Timeline',\n level: 0,\n data: tasks,\n fields: ['task', 'assignee', 'start_date', 'end_date', 'status', 'completion'],\n fieldLabels: {\n task: 'Task',\n assignee: 'Assigned To',\n start_date: 'Start Date',\n end_date: 'End Date',\n status: 'Status',\n completion: 'Completion %'\n },\n conditionalStyles: [\n {\n field: 'end_date',\n condition: (item: { end_date: string | number | Date; status: string; }) => new Date(item.end_date) < now && item.status !== 'Completed',\n style: StyleBuilder.create().backgroundColor('#ffebee').color('#c62828').bold(true).build()\n },\n {\n field: 'completion',\n condition: (item: { completion: number; }) => item.completion === 100,\n style: StyleBuilder.create().backgroundColor('#e8f5e8').color('#2e7d32').build()\n },\n {\n field: 'completion',\n condition: (item: { completion: number; }) => item.completion < 50,\n style: StyleBuilder.create().color('#ff6d00').build()\n }\n ]\n };\n }\n};","/**\n * Format currency values\n */\nexport const formatCurrency = (value: number): string => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n};\n\n/**\n * Format date values\n */\nexport const formatDate = (date: string | Date): string => {\n const d = typeof date === 'string' ? new Date(date) : date;\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(d);\n};\n\n/**\n * Format number with commas\n */\nexport const formatNumber = (num: number): string => {\n return new Intl.NumberFormat('en-US').format(num);\n};\n\n/**\n * Truncate text with ellipsis\n */\nexport const truncateText = (text: string, maxLength: number): string => {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength) + '...';\n};\n\n/**\n * Generate random ID\n */\nexport const generateId = (): string => {\n return Math.random().toString(36).substring(2, 15) + \n Math.random().toString(36).substring(2, 15);\n};\n\n/**\n * Debounce function\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): ((...args: Parameters<T>) => void) => {\n let timeout: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n};\n\n/**\n * Group array by key\n */\nexport const groupBy = <T>(array: T[], key: keyof T): Record<string, T[]> => {\n return array.reduce((result, item) => {\n const groupKey = String(item[key]);\n if (!result[groupKey]) {\n result[groupKey] = [];\n }\n result[groupKey].push(item);\n return result;\n }, {} as Record<string, T[]>);\n};\n\n/**\n * Calculate percentage\n */\nexport const calculatePercentage = (value: number, total: number): number => {\n if (total === 0) return 0;\n return (value / total) * 100;\n};\n\n/**\n * Download file\n */\nexport const downloadFile = (content: string, filename: string, type: string) => {\n const blob = new Blob([content], { type });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n window.URL.revokeObjectURL(url);\n};","// Core exports\nexport { Workbook } from './core/workbook';\nexport { Worksheet } from './core/worksheet';\nexport { Row } from './core/row';\nexport { Cell } from './core/cell';\nexport { Column } from './core/column';\nexport { StyleBuilder } from './core/styles';\n\n// Builder exports\nexport { ExportBuilder } from './builders/export-builder';\nexport { SheetBuilder } from './builders/sheet-builder';\nexport { SectionBuilder } from './builders/section-builder';\n\n// Writer exports\nexport { ExcelWriter } from './writers/excel-writer';\nexport { CSVWriter } from './writers/csv-writer';\nexport { JSONWriter } from './writers/json-writer';\n\n// Formatter exports\nexport { DateFormatter } from './formatters/date-formatter';\nexport { NumberFormatter } from './formatters/number-formatter';\n\n// Type exports\nexport * from './types';\n\n// Utility exports\nexport * from './utils/helpers';\n\n// Main export function for backward compatibility\nimport { ExportBuilder } from './builders/export-builder';\nimport { Workbook } from './core/workbook';\n\nexport function exportToExcel(data: any[], options?: any): Workbook {\n const builder = ExportBuilder.create(options?.sheetName || 'Sheet1');\n \n if (options?.headers) {\n builder.addHeaderRow(options.headers);\n }\n \n builder.addDataRows(data, options?.fields);\n \n if (options?.columnWidths) {\n builder.setColumnWidths(options.columnWidths);\n }\n \n return builder.build();\n}\n\nexport function exportToCSV(data: any[], options?: any): string {\n // Simplified CSV export\n const headers = options?.headers || Object.keys(data[0] || {});\n const rows = [headers];\n \n data.forEach(item => {\n const row = headers.map((header: string | number) => item[header] || '');\n rows.push(row);\n });\n \n return rows.map(row => \n row.map((cell: any) => \n String(cell).includes(',') ? `\"${cell}\"` : cell\n ).join(',')\n ).join('\\n');\n}\n\n// Version\nexport const VERSION = '1.0.0';"],"names":[],"mappings":"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"}
|