{"version":3,"sources":["/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-5CGQ5NA6.cjs","../../src/services/workflow-table/renderer.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-5CGQ5NA6.cjs","sourcesContent":[null,"import {\n\tformatNumber,\n\ttype MatrixDefinition,\n\ttype MatrixTable,\n\ttype NumericCellValue,\n\ttype RecordCellValue,\n\ttype RecordDefinition,\n\ttype RecordTableRow,\n\ttype ResolvedColumnFormat,\n\ttype WorkflowTableRenderResult,\n} from \"@/services/workflow-table/shared.js\";\nimport type {\n\tWorkflowRenderedTableData,\n\tWorkflowTableBlock,\n\tWorkflowTableColumnFormat,\n\tWorkflowTableColumnFormatKind,\n} from \"@/types/memory.js\";\n\nexport class WorkflowTableRenderer {\n\trenderMatrix(\n\t\tblock: WorkflowTableBlock,\n\t\tdefinition: MatrixDefinition,\n\t\tmatrix: MatrixTable,\n\t\twarnings: string[],\n\t): WorkflowTableRenderResult {\n\t\treturn {\n\t\t\tcontent: this.renderMarkdownMatrix(definition, matrix),\n\t\t\tdata: this.buildMatrixRenderedData(block, definition, matrix, warnings),\n\t\t};\n\t}\n\n\trenderRecords(\n\t\tblock: WorkflowTableBlock,\n\t\tdefinition: RecordDefinition,\n\t\trows: RecordTableRow[],\n\t\ttotalRow: RecordTableRow | undefined,\n\t\twarnings: string[],\n\t): WorkflowTableRenderResult {\n\t\treturn {\n\t\t\tcontent: this.renderMarkdownRecords(definition, rows, totalRow),\n\t\t\tdata: this.buildRecordRenderedData(\n\t\t\t\tblock,\n\t\t\t\tdefinition,\n\t\t\t\trows,\n\t\t\t\ttotalRow,\n\t\t\t\twarnings,\n\t\t\t),\n\t\t};\n\t}\n\n\tprivate buildMatrixRenderedData(\n\t\tblock: WorkflowTableBlock,\n\t\tdefinition: MatrixDefinition,\n\t\tmatrix: MatrixTable,\n\t\twarnings: string[],\n\t): WorkflowRenderedTableData {\n\t\treturn {\n\t\t\tspec: {\n\t\t\t\tlayout: \"matrix\",\n\t\t\t\trowHeader: definition.rowHeader,\n\t\t\t\trows: definition.visibleRows,\n\t\t\t\tcolumns: definition.visibleColumns,\n\t\t\t\t...(block.hiddenRows?.length ? { hiddenRows: block.hiddenRows } : {}),\n\t\t\t\t...(block.hiddenColumns?.length\n\t\t\t\t\t? { hiddenColumns: block.hiddenColumns }\n\t\t\t\t\t: {}),\n\t\t\t\tformulas: block.formulas,\n\t\t\t\tcolumnFormats: definition.columnFormats,\n\t\t\t\trowFormats: definition.rowFormats,\n\t\t\t},\n\t\t\t...(block.unit ? { metadata: { unit: block.unit } } : {}),\n\t\t\ttable: {\n\t\t\t\theaders: [definition.rowHeader, ...definition.visibleColumns],\n\t\t\t\trows: definition.visibleRows.map((row) => ({\n\t\t\t\t\tkey: row,\n\t\t\t\t\tkind: \"data\",\n\t\t\t\t\tcells: [\n\t\t\t\t\t\trow,\n\t\t\t\t\t\t...definition.visibleColumns.map(\n\t\t\t\t\t\t\t(column) => matrix[row]?.[column] ?? null,\n\t\t\t\t\t\t),\n\t\t\t\t\t],\n\t\t\t\t})),\n\t\t\t},\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tprivate buildRecordRenderedData(\n\t\tblock: WorkflowTableBlock,\n\t\tdefinition: RecordDefinition,\n\t\trows: RecordTableRow[],\n\t\ttotalRow: RecordTableRow | undefined,\n\t\twarnings: string[],\n\t): WorkflowRenderedTableData {\n\t\treturn {\n\t\t\tspec: {\n\t\t\t\tlayout: \"records\",\n\t\t\t\tcolumns: definition.visibleColumns,\n\t\t\t\t...(block.hiddenColumns?.length\n\t\t\t\t\t? { hiddenColumns: block.hiddenColumns }\n\t\t\t\t\t: {}),\n\t\t\t\tformulas: block.formulas,\n\t\t\t\tcolumnFormats: definition.columnFormats,\n\t\t\t},\n\t\t\t...(block.unit ? { metadata: { unit: block.unit } } : {}),\n\t\t\ttable: {\n\t\t\t\theaders: definition.visibleColumns,\n\t\t\t\trows: [\n\t\t\t\t\t...rows.map((row) => ({\n\t\t\t\t\t\tkind: \"data\" as const,\n\t\t\t\t\t\tcells: definition.visibleColumns.map(\n\t\t\t\t\t\t\t(column) => row[column] ?? null,\n\t\t\t\t\t\t),\n\t\t\t\t\t})),\n\t\t\t\t\t...(totalRow\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkind: \"total\" as const,\n\t\t\t\t\t\t\t\t\tcells: definition.visibleColumns.map(\n\t\t\t\t\t\t\t\t\t\t(column) => totalRow[column] ?? null,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t],\n\t\t\t},\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tprivate renderMarkdownMatrix(\n\t\tdefinition: MatrixDefinition,\n\t\tmatrix: MatrixTable,\n\t): string {\n\t\tconst lines = [\n\t\t\t`| ${[definition.rowHeader, ...definition.visibleColumns].join(\" | \")} |`,\n\t\t\t`| ${[\"---\", ...definition.visibleColumns.map(() => \"---:\")].join(\" | \")} |`,\n\t\t];\n\n\t\tfor (const row of definition.visibleRows) {\n\t\t\tconst values = definition.visibleColumns.map((column) =>\n\t\t\t\tthis.formatNumericCell(\n\t\t\t\t\tmatrix[row]?.[column] ?? null,\n\t\t\t\t\tdefinition.rowFormats[row],\n\t\t\t\t\tdefinition.columnFormats[column],\n\t\t\t\t\tdefinition.percentRows.has(row) ||\n\t\t\t\t\t\tdefinition.percentColumns.has(column),\n\t\t\t\t),\n\t\t\t);\n\t\t\tlines.push(`| ${[row, ...values].join(\" | \")} |`);\n\t\t}\n\n\t\treturn `${lines.join(\"\\n\")}\\n\\n`;\n\t}\n\n\tprivate renderMarkdownRecords(\n\t\tdefinition: RecordDefinition,\n\t\trows: RecordTableRow[],\n\t\ttotalRow?: RecordTableRow,\n\t): string {\n\t\tconst numericColumns = new Set(\n\t\t\tdefinition.visibleColumns.filter((column) => {\n\t\t\t\tif (definition.columnFormats[column]?.kind === \"text\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn this.isNumericRecordColumn(column, rows, totalRow);\n\t\t\t}),\n\t\t);\n\t\tconst lines = [\n\t\t\t`| ${definition.visibleColumns.join(\" | \")} |`,\n\t\t\t`| ${definition.visibleColumns\n\t\t\t\t.map((column, index) =>\n\t\t\t\t\tindex === 0 && !numericColumns.has(column) ? \"---\" : \"---:\",\n\t\t\t\t)\n\t\t\t\t.join(\" | \")} |`,\n\t\t];\n\n\t\tfor (const row of rows) {\n\t\t\tlines.push(\n\t\t\t\t`| ${definition.visibleColumns\n\t\t\t\t\t.map((column) =>\n\t\t\t\t\t\tthis.formatRecordCell(\n\t\t\t\t\t\t\trow[column] ?? null,\n\t\t\t\t\t\t\tdefinition.columnFormats[column],\n\t\t\t\t\t\t\tdefinition.percentColumns.has(column),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.join(\" | \")} |`,\n\t\t\t);\n\t\t}\n\n\t\tif (totalRow) {\n\t\t\tlines.push(\n\t\t\t\t`| ${definition.visibleColumns\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(column) =>\n\t\t\t\t\t\t\t`**${this.formatRecordCell(\n\t\t\t\t\t\t\t\ttotalRow[column] ?? null,\n\t\t\t\t\t\t\t\tdefinition.columnFormats[column],\n\t\t\t\t\t\t\t\tdefinition.percentColumns.has(column),\n\t\t\t\t\t\t\t)}**`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\" | \")} |`,\n\t\t\t);\n\t\t}\n\n\t\treturn `${lines.join(\"\\n\")}\\n\\n`;\n\t}\n\n\tprivate formatNumericCell(\n\t\tvalue: NumericCellValue,\n\t\trowFormat: WorkflowTableColumnFormat | undefined,\n\t\tcolumnFormat: WorkflowTableColumnFormat | undefined,\n\t\tisPercent: boolean,\n\t): string {\n\t\treturn this.formatNumericValue(value, rowFormat, columnFormat, isPercent);\n\t}\n\n\tprivate formatRecordCell(\n\t\tvalue: RecordCellValue,\n\t\tcolumnFormat: WorkflowTableColumnFormat | undefined,\n\t\tisPercent: boolean,\n\t): string {\n\t\tif (value === null) {\n\t\t\treturn this.resolveCellFormat(undefined, columnFormat, isPercent)\n\t\t\t\t.nullDisplay;\n\t\t}\n\t\tconst resolvedFormat = this.resolveCellFormat(\n\t\t\tundefined,\n\t\t\tcolumnFormat,\n\t\t\tisPercent,\n\t\t);\n\t\tif (resolvedFormat.kind === \"text\") {\n\t\t\treturn String(value);\n\t\t}\n\t\tif (typeof value === \"number\") {\n\t\t\treturn this.formatNumericValue(value, undefined, columnFormat, isPercent);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprivate formatNumericValue(\n\t\tvalue: NumericCellValue,\n\t\trowFormat: WorkflowTableColumnFormat | undefined,\n\t\tcolumnFormat: WorkflowTableColumnFormat | undefined,\n\t\tisPercent: boolean,\n\t): string {\n\t\tconst resolvedFormat = this.resolveCellFormat(\n\t\t\trowFormat,\n\t\t\tcolumnFormat,\n\t\t\tisPercent,\n\t\t);\n\t\tif (value === null) {\n\t\t\treturn resolvedFormat.nullDisplay;\n\t\t}\n\n\t\tconst formatted = formatNumber(value, {\n\t\t\tgrouping: resolvedFormat.grouping,\n\t\t\tdecimals: resolvedFormat.decimals,\n\t\t});\n\t\treturn `${resolvedFormat.prefix}${formatted}${resolvedFormat.suffix}`;\n\t}\n\n\tprivate resolveCellFormat(\n\t\trowFormat: WorkflowTableColumnFormat | undefined,\n\t\tcolumnFormat: WorkflowTableColumnFormat | undefined,\n\t\tisPercent: boolean,\n\t): ResolvedColumnFormat {\n\t\tconst explicitKind =\n\t\t\trowFormat?.kind && rowFormat.kind !== \"auto\"\n\t\t\t\t? rowFormat.kind\n\t\t\t\t: columnFormat?.kind && columnFormat.kind !== \"auto\"\n\t\t\t\t\t? columnFormat.kind\n\t\t\t\t\t: undefined;\n\t\tconst kind = explicitKind ?? (isPercent ? \"percent\" : \"number\");\n\n\t\tconst defaults: Record<\n\t\t\tExclude<WorkflowTableColumnFormatKind, \"auto\">,\n\t\t\tOmit<ResolvedColumnFormat, \"kind\">\n\t\t> = {\n\t\t\ttext: {\n\t\t\t\tgrouping: false,\n\t\t\t\tdecimals: 0,\n\t\t\t\tprefix: \"\",\n\t\t\t\tsuffix: \"\",\n\t\t\t\tnullDisplay: \"-\",\n\t\t\t},\n\t\t\tnumber: {\n\t\t\t\tgrouping: true,\n\t\t\t\t// undefined = keep the value's own decimal precision; an explicit\n\t\t\t\t// columnFormats.decimals still wins below.\n\t\t\t\tdecimals: undefined,\n\t\t\t\tprefix: \"\",\n\t\t\t\tsuffix: \"\",\n\t\t\t\tnullDisplay: \"-\",\n\t\t\t},\n\t\t\tcurrency: {\n\t\t\t\tgrouping: true,\n\t\t\t\tdecimals: 0,\n\t\t\t\tprefix: \"\",\n\t\t\t\tsuffix: \"\",\n\t\t\t\tnullDisplay: \"-\",\n\t\t\t},\n\t\t\tpercent: {\n\t\t\t\tgrouping: false,\n\t\t\t\tdecimals: 1,\n\t\t\t\tprefix: \"\",\n\t\t\t\tsuffix: \"%\",\n\t\t\t\tnullDisplay: \"-\",\n\t\t\t},\n\t\t};\n\n\t\tconst fallback = defaults[kind];\n\t\treturn {\n\t\t\tkind,\n\t\t\tgrouping:\n\t\t\t\trowFormat?.grouping ?? columnFormat?.grouping ?? fallback.grouping,\n\t\t\tdecimals:\n\t\t\t\trowFormat?.decimals ?? columnFormat?.decimals ?? fallback.decimals,\n\t\t\tprefix: rowFormat?.prefix ?? columnFormat?.prefix ?? fallback.prefix,\n\t\t\tsuffix: rowFormat?.suffix ?? columnFormat?.suffix ?? fallback.suffix,\n\t\t\tnullDisplay:\n\t\t\t\trowFormat?.nullDisplay ??\n\t\t\t\tcolumnFormat?.nullDisplay ??\n\t\t\t\tfallback.nullDisplay,\n\t\t};\n\t}\n\n\tprivate isNumericRecordColumn(\n\t\tcolumn: string,\n\t\trows: RecordTableRow[],\n\t\ttotalRow?: RecordTableRow,\n\t): boolean {\n\t\tconst values = [\n\t\t\t...rows.map((row) => row[column]),\n\t\t\ttotalRow ? totalRow[column] : undefined,\n\t\t].filter((value) => value !== undefined && value !== null);\n\n\t\tif (values.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn values.every((value) => typeof value === \"number\");\n\t}\n}\n"]}