{
  "version": 3,
  "sources": ["../../../../src/core/utils/spreadsheet-visualizer.ts"],
  "sourcesContent": [
    "import { FormulaEngine } from \"../engine.mjs\";\n\nexport interface SpreadsheetVisualizerOptions {\n  workbookName: string;\n  /** Number of rows to display (1-based) */\n  numRows: number;\n  /** Number of columns to display (0-based, so 11 = A-K) */\n  numCols: number;\n  /** Starting row (1-based, default: 1) */\n  startRow?: number;\n  /** Starting column (0-based, default: 0 = A) */\n  startCol?: number;\n  /** Sheet name to visualize (default: uses engine's current sheet) */\n  sheetName?: string;\n  /** Character to use for empty cells (default: \".\") */\n  emptyCellChar?: string;\n  /** Minimum column width (default: 3) */\n  minColWidth?: number;\n  /** Maximum column width (default: 20) */\n  maxColWidth?: number;\n  /** Whether to show column headers (A, B, C...) */\n  showColumnHeaders?: boolean;\n  /** Whether to show row numbers */\n  showRowNumbers?: boolean;\n  /** If output is used for snapshotting */\n  snapshot?: boolean;\n}\n\n/**\n * Generates a visual ASCII representation of a spreadsheet region\n */\nexport function visualizeSpreadsheet(\n  engine: FormulaEngine,\n  options: SpreadsheetVisualizerOptions\n): string {\n  const {\n    workbookName,\n    numRows,\n    numCols,\n    startRow = 1,\n    startCol = 0,\n    sheetName,\n    emptyCellChar = \".\",\n    minColWidth = 3,\n    maxColWidth = 20,\n    showColumnHeaders = true,\n    showRowNumbers = true,\n    snapshot = false,\n  } = options;\n\n  // Determine the sheet name to use upfront\n  const targetSheetName =\n    sheetName ||\n    (() => {\n      const sheets = engine.getSheets(workbookName);\n      const sheetNames = Array.from(sheets.keys());\n      return sheetNames.length > 0 ? sheetNames[0]! : null;\n    })();\n\n  // First pass: collect all cell values and calculate column widths\n  const cellValues: string[][] = [];\n  const columnWidths: number[] = new Array(numCols).fill(minColWidth);\n\n  // Collect column headers if needed\n  if (showColumnHeaders) {\n    const headerRow: string[] = [];\n    for (let col = 0; col < numCols; col++) {\n      const colLetter = String.fromCharCode(65 + startCol + col);\n      headerRow.push(colLetter);\n      columnWidths[col] = Math.max(columnWidths[col]!, colLetter.length);\n    }\n    cellValues.push(headerRow);\n  }\n\n  // Collect all cell data\n  for (let row = startRow; row < startRow + numRows; row++) {\n    const rowValues: string[] = [];\n    for (let col = 0; col < numCols; col++) {\n      let value: string;\n      if (targetSheetName) {\n        const cellValue = engine.getCellValue({\n          sheetName: targetSheetName,\n          workbookName,\n          rowIndex: row - 1,\n          colIndex: startCol + col,\n        });\n        value =\n          cellValue === \"\" || cellValue == null\n            ? emptyCellChar\n            : String(cellValue);\n      } else {\n        // No sheets available\n        value = emptyCellChar;\n      }\n\n      rowValues.push(value);\n      // Update column width, respecting max width\n      columnWidths[col] = Math.max(\n        columnWidths[col]!,\n        Math.min(value.length, maxColWidth)\n      );\n    }\n    cellValues.push(rowValues);\n  }\n\n  // Calculate total row width for consistent formatting\n  let totalRowWidth = 0;\n  if (showRowNumbers) {\n    totalRowWidth += 3; // Row number width\n  }\n  for (let col = 0; col < numCols; col++) {\n    totalRowWidth += columnWidths[col]!;\n  }\n  // Add separator characters: \" | \" between columns (3 chars each, but last column doesn't have trailing separator)\n  if (numCols > 0) {\n    totalRowWidth += (numCols - 1) * 3; // \" | \" between columns\n    if (showRowNumbers) {\n      totalRowWidth += 3; // \" | \" after row number\n    }\n  }\n\n  // Second pass: format the output with proper column widths\n  let result = \"\";\n\n  for (let i = 0; i < cellValues.length; i++) {\n    const rowValues = cellValues[i]!;\n    const formattedCells: string[] = [];\n\n    // Add row number if requested\n    if (showRowNumbers) {\n      if (i === 0 && showColumnHeaders) {\n        formattedCells.push(\"   \"); // Empty space for header row\n      } else {\n        const rowNum = showColumnHeaders ? startRow + i - 1 : startRow + i;\n        formattedCells.push(rowNum.toString().padStart(3));\n      }\n    }\n\n    // Format each cell with proper width\n    for (let col = 0; col < rowValues.length; col++) {\n      let cellValue = rowValues[col]!;\n\n      // Truncate if too long\n      if (cellValue.length > maxColWidth) {\n        cellValue = cellValue.substring(0, maxColWidth - 3) + \"...\";\n      }\n\n      // Pad to column width\n      formattedCells.push(cellValue.padEnd(columnWidths[col]!));\n    }\n\n    // Join with consistent separators and ensure exact row width\n    let rowContent = formattedCells.join(\" | \");\n    // Pad the entire row to ensure consistent width\n    rowContent = rowContent.padEnd(totalRowWidth);\n    if (snapshot && i > 0) {\n      rowContent = \" \" + rowContent;\n    }\n    result += rowContent + \"\\n\";\n\n    // Add separator line after header\n    if (i === 0 && showColumnHeaders) {\n      const separatorParts: string[] = [];\n\n      if (showRowNumbers) {\n        separatorParts.push(snapshot ? \"----\" : \"---\");\n      }\n\n      for (let col = 0; col < numCols; col++) {\n        separatorParts.push(\"-\".repeat(columnWidths[col]!));\n      }\n\n      // Create separator line with same width as data rows\n      let separatorLine = separatorParts.join(\"-+-\");\n      separatorLine = separatorLine.padEnd(totalRowWidth);\n      result += separatorLine + \"\\n\";\n    }\n  }\n\n  return result;\n}\n"
  ],
  "mappings": "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",
  "debugId": "13EB020C0050D77364756E2164756E21",
  "names": []
}