snap-report-viewer 0.1.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.
Files changed (76) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/chart-renderer/chart-renderer.component.mjs +75 -0
  3. package/esm2022/lib/components/complex-table-renderer/complex-table-renderer.component.mjs +155 -0
  4. package/esm2022/lib/components/component-renderer/component-renderer.component.mjs +158 -0
  5. package/esm2022/lib/components/container-renderer/container-renderer.component.mjs +53 -0
  6. package/esm2022/lib/components/image-renderer/image-renderer.component.mjs +67 -0
  7. package/esm2022/lib/components/line-renderer/line-renderer.component.mjs +94 -0
  8. package/esm2022/lib/components/list-renderer/list-renderer.component.mjs +96 -0
  9. package/esm2022/lib/components/qrcode-renderer/qrcode-renderer.component.mjs +67 -0
  10. package/esm2022/lib/components/shape-renderer/shape-renderer.component.mjs +133 -0
  11. package/esm2022/lib/components/table-renderer/table-renderer.component.mjs +148 -0
  12. package/esm2022/lib/components/text-renderer/text-renderer.component.mjs +33 -0
  13. package/esm2022/lib/constants/page-sizes.mjs +3 -0
  14. package/esm2022/lib/constants/report-tokens.mjs +21 -0
  15. package/esm2022/lib/layout/report-band.component.mjs +33 -0
  16. package/esm2022/lib/layout/report-page.component.mjs +159 -0
  17. package/esm2022/lib/models/component.model.mjs +3 -0
  18. package/esm2022/lib/models/report-template.model.mjs +19 -0
  19. package/esm2022/lib/page-container/page-container.component.mjs +248 -0
  20. package/esm2022/lib/report-viewer.component.mjs +393 -0
  21. package/esm2022/lib/services/chart-options-builder.service.mjs +749 -0
  22. package/esm2022/lib/services/data-resolver.service.mjs +385 -0
  23. package/esm2022/lib/services/export.service.mjs +82 -0
  24. package/esm2022/lib/services/formatting.service.mjs +59 -0
  25. package/esm2022/lib/services/print.service.mjs +133 -0
  26. package/esm2022/lib/services/search.service.mjs +117 -0
  27. package/esm2022/lib/services/style-mapper.service.mjs +247 -0
  28. package/esm2022/lib/services/template-normalizer.service.mjs +213 -0
  29. package/esm2022/lib/services/template-validator.service.mjs +293 -0
  30. package/esm2022/lib/services/token-resolver.service.mjs +14 -0
  31. package/esm2022/lib/services/viewer-state.service.mjs +155 -0
  32. package/esm2022/lib/sidebar/sidebar-container.component.mjs +86 -0
  33. package/esm2022/lib/sidebar/thumbnail-sidebar.component.mjs +110 -0
  34. package/esm2022/lib/sidebar/toc-sidebar.component.mjs +155 -0
  35. package/esm2022/lib/toolbar/viewer-toolbar.component.mjs +486 -0
  36. package/esm2022/public-api.mjs +43 -0
  37. package/esm2022/snap-report-viewer.mjs +5 -0
  38. package/fesm2022/snap-report-viewer.mjs +5110 -0
  39. package/fesm2022/snap-report-viewer.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/components/chart-renderer/chart-renderer.component.d.ts +14 -0
  42. package/lib/components/complex-table-renderer/complex-table-renderer.component.d.ts +17 -0
  43. package/lib/components/component-renderer/component-renderer.component.d.ts +14 -0
  44. package/lib/components/container-renderer/container-renderer.component.d.ts +11 -0
  45. package/lib/components/image-renderer/image-renderer.component.d.ts +14 -0
  46. package/lib/components/line-renderer/line-renderer.component.d.ts +10 -0
  47. package/lib/components/list-renderer/list-renderer.component.d.ts +16 -0
  48. package/lib/components/qrcode-renderer/qrcode-renderer.component.d.ts +16 -0
  49. package/lib/components/shape-renderer/shape-renderer.component.d.ts +11 -0
  50. package/lib/components/table-renderer/table-renderer.component.d.ts +20 -0
  51. package/lib/components/text-renderer/text-renderer.component.d.ts +13 -0
  52. package/lib/constants/page-sizes.d.ts +2 -0
  53. package/lib/constants/report-tokens.d.ts +8 -0
  54. package/lib/layout/report-band.component.d.ts +10 -0
  55. package/lib/layout/report-page.component.d.ts +21 -0
  56. package/lib/models/component.model.d.ts +315 -0
  57. package/lib/models/report-template.model.d.ts +122 -0
  58. package/lib/page-container/page-container.component.d.ts +29 -0
  59. package/lib/report-viewer.component.d.ts +51 -0
  60. package/lib/services/chart-options-builder.service.d.ts +31 -0
  61. package/lib/services/data-resolver.service.d.ts +27 -0
  62. package/lib/services/export.service.d.ts +11 -0
  63. package/lib/services/formatting.service.d.ts +10 -0
  64. package/lib/services/print.service.d.ts +12 -0
  65. package/lib/services/search.service.d.ts +13 -0
  66. package/lib/services/style-mapper.service.d.ts +14 -0
  67. package/lib/services/template-normalizer.service.d.ts +24 -0
  68. package/lib/services/template-validator.service.d.ts +19 -0
  69. package/lib/services/token-resolver.service.d.ts +6 -0
  70. package/lib/services/viewer-state.service.d.ts +49 -0
  71. package/lib/sidebar/sidebar-container.component.d.ts +8 -0
  72. package/lib/sidebar/thumbnail-sidebar.component.d.ts +15 -0
  73. package/lib/sidebar/toc-sidebar.component.d.ts +17 -0
  74. package/lib/toolbar/viewer-toolbar.component.d.ts +17 -0
  75. package/package.json +43 -0
  76. package/public-api.d.ts +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snap-report-viewer.mjs","sources":["../../../projects/report-viewer/src/lib/models/report-template.model.ts","../../../projects/report-viewer/src/lib/services/formatting.service.ts","../../../projects/report-viewer/src/lib/constants/report-tokens.ts","../../../projects/report-viewer/src/lib/services/token-resolver.service.ts","../../../projects/report-viewer/src/lib/services/data-resolver.service.ts","../../../projects/report-viewer/src/lib/services/chart-options-builder.service.ts","../../../projects/report-viewer/src/lib/services/style-mapper.service.ts","../../../projects/report-viewer/src/lib/services/template-normalizer.service.ts","../../../projects/report-viewer/src/lib/services/template-validator.service.ts","../../../projects/report-viewer/src/lib/services/viewer-state.service.ts","../../../projects/report-viewer/src/lib/services/search.service.ts","../../../projects/report-viewer/src/lib/services/print.service.ts","../../../projects/report-viewer/src/lib/services/export.service.ts","../../../projects/report-viewer/src/lib/toolbar/viewer-toolbar.component.ts","../../../projects/report-viewer/src/lib/components/text-renderer/text-renderer.component.ts","../../../projects/report-viewer/src/lib/components/table-renderer/table-renderer.component.ts","../../../projects/report-viewer/src/lib/components/chart-renderer/chart-renderer.component.ts","../../../projects/report-viewer/src/lib/components/image-renderer/image-renderer.component.ts","../../../projects/report-viewer/src/lib/components/qrcode-renderer/qrcode-renderer.component.ts","../../../projects/report-viewer/src/lib/components/list-renderer/list-renderer.component.ts","../../../projects/report-viewer/src/lib/components/line-renderer/line-renderer.component.ts","../../../projects/report-viewer/src/lib/components/shape-renderer/shape-renderer.component.ts","../../../projects/report-viewer/src/lib/components/container-renderer/container-renderer.component.ts","../../../projects/report-viewer/src/lib/components/complex-table-renderer/complex-table-renderer.component.ts","../../../projects/report-viewer/src/lib/components/component-renderer/component-renderer.component.ts","../../../projects/report-viewer/src/lib/layout/report-page.component.ts","../../../projects/report-viewer/src/lib/page-container/page-container.component.ts","../../../projects/report-viewer/src/lib/sidebar/sidebar-container.component.ts","../../../projects/report-viewer/src/lib/sidebar/thumbnail-sidebar.component.ts","../../../projects/report-viewer/src/lib/sidebar/toc-sidebar.component.ts","../../../projects/report-viewer/src/lib/report-viewer.component.ts","../../../projects/report-viewer/src/lib/models/component.model.ts","../../../projects/report-viewer/src/lib/constants/page-sizes.ts","../../../projects/report-viewer/src/lib/layout/report-band.component.ts","../../../projects/report-viewer/src/public-api.ts","../../../projects/report-viewer/src/snap-report-viewer.ts"],"sourcesContent":["// Report Template Model - JSON schema types for report viewer\n\nimport { ComponentModel, StyleProperties } from './component.model';\n\nexport interface ReportTemplate {\n version: string;\n metadata: SchemaMetadata;\n pageSetup: PageSetup;\n dataSources: DataSource[];\n components: ComponentModel[];\n globalStyles: GlobalStyles;\n header?: ReportSection;\n footer?: ReportSection;\n}\n\n// Keep InvoiceSchema as alias for backward compatibility\nexport type InvoiceSchema = ReportTemplate;\n\nexport interface ReportSection {\n enabled: boolean;\n height: number;\n style?: StyleProperties;\n components: ComponentModel[];\n printOnFirstPage: boolean;\n printOnLastPage: boolean;\n differentFirstPage: boolean;\n firstPageComponents?: ComponentModel[];\n firstPageHeight?: number;\n firstPageStyle?: StyleProperties;\n content?: string;\n}\n\nexport interface SchemaMetadata {\n name: string;\n description: string;\n createdDate: Date | string;\n modifiedDate: Date | string;\n author: string;\n tags?: string[];\n}\n\nexport interface PageSetup {\n size: PageSize;\n orientation: PageOrientation;\n width: number;\n height: number;\n unit: 'mm' | 'px' | 'in';\n margins: Margins;\n}\n\nexport type PageSize = 'A2' | 'A3' | 'A4' | 'A5' | 'Letter' | 'Legal' | 'Custom';\nexport type PageOrientation = 'Portrait' | 'Landscape';\nexport type MarginPreset = 'Normal' | 'Narrow' | 'Wide' | 'Custom';\n\nexport interface Margins {\n top: number;\n right: number;\n bottom: number;\n left: number;\n preset?: MarginPreset;\n}\n\nexport interface DataSource {\n name: string;\n type?: 'object' | 'array';\n fields: DataField[];\n}\n\nexport interface DataField {\n name: string;\n type: 'text' | 'number' | 'currency' | 'date' | 'boolean' | 'array' | 'object';\n fields?: DataField[];\n description?: string;\n}\n\nexport interface GlobalStyles {\n fontFamily: string;\n fontSize: string;\n color: string;\n backgroundColor: string;\n lineHeight?: string;\n}\n\n// Page size constants in millimeters\nexport const PAGE_SIZES: Record<PageSize, { width: number; height: number }> = {\n A2: { width: 420, height: 594 },\n A3: { width: 297, height: 420 },\n A4: { width: 210, height: 297 },\n A5: { width: 148, height: 210 },\n Letter: { width: 215.9, height: 279.4 },\n Legal: { width: 215.9, height: 355.6 },\n Custom: { width: 210, height: 297 },\n};\n\n// Margin presets in millimeters\nexport const MARGIN_PRESETS: Record<MarginPreset, Margins> = {\n Normal: { top: 25.4, right: 25.4, bottom: 25.4, left: 25.4, preset: 'Normal' },\n Narrow: { top: 12.7, right: 12.7, bottom: 12.7, left: 12.7, preset: 'Narrow' },\n Wide: { top: 25.4, right: 50.8, bottom: 25.4, left: 50.8, preset: 'Wide' },\n Custom: { top: 20, right: 20, bottom: 20, left: 20, preset: 'Custom' },\n};\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n}\n\nexport interface ValidationError {\n code: string;\n message: string;\n path?: string;\n componentId?: string;\n}\n\nexport interface ValidationWarning {\n code: string;\n message: string;\n path?: string;\n componentId?: string;\n}\n\n// Viewer ribbon event interfaces\nexport interface ExportEvent {\n format: 'pdf' | 'xlsx' | 'docx' | 'csv' | 'png';\n pageRange?: { start: number; end: number };\n}\n\nexport interface SearchEvent {\n query: string;\n matchCount: number;\n currentMatch: number;\n}\n\nexport interface PageData {\n index: number;\n header: ReportSection | undefined;\n footer: ReportSection | undefined;\n components: ComponentModel[];\n}\n\nexport interface SearchMatch {\n textNode: Text;\n startOffset: number;\n endOffset: number;\n pageIndex: number;\n}\n\nexport interface TocItem {\n id: string;\n label: string;\n pageIndex: number;\n level: number;\n icon: string;\n}\n","import { Injectable } from '@angular/core';\nimport { DataBinding } from '../models/component.model';\n\n@Injectable()\nexport class FormattingService {\n\n formatValue(value: any, binding: DataBinding): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n const formatting = binding.formatting;\n\n switch (binding.dataType) {\n case 'currency': {\n const num = typeof value === 'number' ? value : parseFloat(value);\n if (isNaN(num)) return String(value);\n const symbol = formatting?.symbol || '$';\n const decimals = formatting?.decimalPlaces ?? 2;\n return `${symbol}${num.toFixed(decimals)}`;\n }\n case 'date': {\n const date = new Date(value);\n if (isNaN(date.getTime())) return String(value);\n const format = formatting?.dateFormat || 'MM/DD/YYYY';\n return this.formatDate(date, format);\n }\n case 'number': {\n const n = typeof value === 'number' ? value : parseFloat(value);\n if (isNaN(n)) return String(value);\n const numDecimals = formatting?.decimalPlaces ?? 0;\n return n.toFixed(numDecimals);\n }\n default:\n return String(value);\n }\n }\n\n formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n const shortYear = year.toString().slice(-2);\n\n return format\n .replace('YYYY', year.toString())\n .replace('YY', shortYear)\n .replace('MM', month)\n .replace('DD', day);\n }\n\n formatCurrency(value: number, symbol: string = '$', decimals: number = 2): string {\n return `${symbol}${value.toFixed(decimals)}`;\n }\n\n formatNumber(value: number, decimals: number = 0): string {\n return value.toFixed(decimals);\n }\n}\n","export interface ReportToken {\n token: string;\n label: string;\n description: string;\n category: 'pagination' | 'datetime' | 'metadata';\n}\n\nexport const REPORT_TOKENS: ReportToken[] = [\n { token: '{{PageNumber}}', label: 'Page Number', description: 'Current page number', category: 'pagination' },\n { token: '{{TotalPages}}', label: 'Total Pages', description: 'Total number of pages', category: 'pagination' },\n { token: '{{PageNofM}}', label: 'Page N of M', description: '\"Page 1 of 5\" format', category: 'pagination' },\n { token: '{{PrintDate}}', label: 'Print Date', description: 'Date when report is printed', category: 'datetime' },\n { token: '{{PrintTime}}', label: 'Print Time', description: 'Time when report is printed', category: 'datetime' },\n { token: '{{PrintDateTime}}', label: 'Date & Time', description: 'Full date and time', category: 'datetime' },\n { token: '{{ReportTitle}}', label: 'Report Title', description: 'Report/template name', category: 'metadata' },\n];\n\nexport function resolveTokens(content: string, pageNum: number, totalPages: number, reportTitle: string): string {\n const now = new Date();\n return content\n .replace(/\\{\\{PageNumber\\}\\}/g, String(pageNum))\n .replace(/\\{\\{TotalPages\\}\\}/g, String(totalPages))\n .replace(/\\{\\{PageNofM\\}\\}/g, `Page ${pageNum} of ${totalPages}`)\n .replace(/\\{\\{PrintDate\\}\\}/g, now.toLocaleDateString())\n .replace(/\\{\\{PrintTime\\}\\}/g, now.toLocaleTimeString())\n .replace(/\\{\\{PrintDateTime\\}\\}/g, now.toLocaleString())\n .replace(/\\{\\{ReportTitle\\}\\}/g, reportTitle);\n}\n","import { Injectable } from '@angular/core';\nimport { resolveTokens } from '../constants/report-tokens';\n\n@Injectable()\nexport class TokenResolverService {\n\n resolve(content: string, pageNum: number, totalPages: number, reportTitle: string): string {\n return resolveTokens(content, pageNum, totalPages, reportTitle);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentModel, TableColumn, DataBinding } from '../models/component.model';\nimport { FormattingService } from './formatting.service';\nimport { TokenResolverService } from './token-resolver.service';\n\n@Injectable()\nexport class DataResolverService {\n\n constructor(\n private formatting: FormattingService,\n private tokenResolver: TokenResolverService\n ) {}\n\n resolveContent(\n component: ComponentModel,\n data: any,\n pageNum: number,\n totalPages: number,\n reportTitle: string\n ): string {\n let content = '';\n\n // If there's a data binding, resolve it\n if (component.dataBinding?.sourceField && data) {\n const value = this.resolveFieldValue(data, component.dataBinding.sourceField);\n if (value !== undefined && value !== null) {\n content = this.formatting.formatValue(value, component.dataBinding);\n }\n }\n\n // If content has binding placeholders like {{Field.Name}}, try to resolve\n if (!content && component.content && data) {\n content = this.resolvePlaceholders(component.content, data);\n }\n\n // Fallback to static content\n if (!content) {\n content = component.content || '';\n }\n\n // Resolve report tokens as final pass\n content = this.tokenResolver.resolve(content, pageNum, totalPages, reportTitle);\n\n return content;\n }\n\n resolveFieldValue(data: any, path: string): any {\n // Strategy 1: Direct path access\n let value = this.getFieldValue(data, path);\n if (value !== undefined) return value;\n\n // Strategy 2: Try the last part of the path directly\n const parts = path.split('.');\n if (parts.length >= 2) {\n const fieldName = parts[parts.length - 1];\n value = data[fieldName];\n if (value !== undefined) return value;\n\n // Try case-insensitive match\n const lowerField = fieldName.toLowerCase();\n for (const key of Object.keys(data)) {\n if (key.toLowerCase() === lowerField) {\n return data[key];\n }\n }\n }\n\n // Strategy 3: Try removing common prefixes\n const commonPrefixes = ['Invoice', 'Company', 'Customer', 'Order', 'Item', 'Data', 'Client'];\n for (const prefix of commonPrefixes) {\n if (path.startsWith(prefix + '.')) {\n const remainingPath = path.substring(prefix.length + 1);\n value = this.getFieldValue(data, remainingPath);\n if (value !== undefined) return value;\n\n const nestedObj = data[prefix] || data[prefix.toLowerCase()];\n if (nestedObj) {\n value = this.getFieldValue(nestedObj, remainingPath);\n if (value !== undefined) return value;\n }\n }\n }\n\n // Strategy 4: Search all top-level fields\n const targetField = parts[parts.length - 1].toLowerCase();\n for (const key of Object.keys(data)) {\n if (key.toLowerCase() === targetField) {\n return data[key];\n }\n if (data[key] && typeof data[key] === 'object' && !Array.isArray(data[key])) {\n for (const nestedKey of Object.keys(data[key])) {\n if (nestedKey.toLowerCase() === targetField) {\n return data[key][nestedKey];\n }\n }\n }\n }\n\n return undefined;\n }\n\n resolvePlaceholders(content: string, data: any): string {\n return content.replace(/\\{\\{([^}]+)\\}\\}/g, (match, path) => {\n const value = this.resolveFieldValue(data, path.trim());\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n return match;\n });\n }\n\n getFieldValue(data: any, path: string): any {\n const parts = path.split('.');\n let current = data;\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined;\n }\n current = current[part];\n }\n return current;\n }\n\n resolveTableData(component: ComponentModel, data: any): any[] {\n if (!data) return [];\n\n // Check for iteration source in data binding\n const iterationSource = component.dataBinding?.iteration?.source;\n if (iterationSource) {\n const arrayData = this.getFieldValue(data, iterationSource);\n if (Array.isArray(arrayData)) {\n return arrayData;\n }\n }\n\n // Fallback: try to find array from column bindings\n if (component.columns && component.columns.length > 0) {\n const firstCol = component.columns.find(c => c.dataBinding?.sourceField);\n if (firstCol?.dataBinding?.sourceField) {\n const sourceField = firstCol.dataBinding.sourceField;\n const parts = sourceField.split('.');\n if (parts.length >= 2) {\n const arrayName = parts[0];\n if (arrayName === 'Item') {\n return this.findFirstObjectArray(data);\n }\n const arr = data[arrayName];\n if (Array.isArray(arr)) {\n return arr;\n }\n }\n }\n }\n\n return this.findFirstObjectArray(data);\n }\n\n resolveListData(component: ComponentModel, data: any): any[] {\n if (!data) return [];\n\n const iterationSource = component.dataBinding?.iteration?.source;\n if (iterationSource) {\n const arrayData = this.getFieldValue(data, iterationSource);\n if (Array.isArray(arrayData)) {\n return arrayData;\n }\n }\n\n const content = component.content || '';\n const match = content.match(/\\{\\{(\\w+)\\.(\\w+)\\}\\}/);\n if (match) {\n const arrayHint = match[1];\n if (arrayHint === 'Item') {\n return this.findFirstObjectArray(data);\n }\n const arr = data[arrayHint];\n if (Array.isArray(arr)) {\n return arr;\n }\n }\n\n return this.findFirstObjectArray(data);\n }\n\n findFirstObjectArray(data: any, path: string = ''): any[] {\n if (!data || typeof data !== 'object') return [];\n\n const objectArrays: { path: string; array: any[] }[] = [];\n const primitiveArrays: { path: string; array: any[] }[] = [];\n\n for (const key of Object.keys(data)) {\n const value = data[key];\n if (Array.isArray(value) && value.length > 0) {\n const currentPath = path ? `${path}.${key}` : key;\n if (typeof value[0] === 'object' && value[0] !== null) {\n objectArrays.push({ path: currentPath, array: value });\n } else {\n primitiveArrays.push({ path: currentPath, array: value });\n }\n }\n }\n\n if (objectArrays.length > 0) {\n return objectArrays[0].array;\n }\n\n for (const key of Object.keys(data)) {\n const value = data[key];\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const nestedArray = this.findFirstObjectArray(value, path ? `${path}.${key}` : key);\n if (nestedArray.length > 0) {\n return nestedArray;\n }\n }\n }\n\n if (primitiveArrays.length > 0) {\n return primitiveArrays[0].array;\n }\n\n return [];\n }\n\n shouldShowDynamicTable(component: ComponentModel, data: any): boolean {\n const tableData = this.resolveTableData(component, data);\n if (tableData.length === 0) return false;\n\n const firstRow = tableData[0];\n if (typeof firstRow !== 'object' || firstRow === null) return false;\n\n if (component.columns) {\n for (const col of component.columns) {\n if (col.dataBinding?.sourceField) {\n const parts = col.dataBinding.sourceField.split('.');\n const fieldName = parts[parts.length - 1];\n if (firstRow[fieldName] !== undefined) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n getDynamicTableHeaders(component: ComponentModel, data: any): string[] {\n const tableData = this.resolveTableData(component, data);\n if (tableData.length === 0) return [];\n\n const firstRow = tableData[0];\n if (typeof firstRow !== 'object' || firstRow === null) {\n return ['Value'];\n }\n\n return Object.keys(firstRow);\n }\n\n getDynamicCellValue(row: any, field: string): string {\n if (typeof row !== 'object' || row === null) {\n return String(row);\n }\n\n const value = row[field];\n\n if (value === undefined || value === null) {\n return '';\n }\n\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n\n if (typeof value === 'object') {\n const keys = Object.keys(value);\n if (keys.length <= 2) {\n return Object.values(value).join(', ');\n }\n return `{${keys.length} fields}`;\n }\n\n return String(value);\n }\n\n formatCellValue(row: any, col: TableColumn): string {\n if (typeof row !== 'object' || row === null) {\n return String(row);\n }\n\n if (!col.dataBinding?.sourceField) {\n const keys = Object.keys(row);\n if (keys.length > 0) {\n const colIndex = col.id ? parseInt(col.id.replace(/\\D/g, '')) || 0 : 0;\n const key = keys[colIndex % keys.length];\n return row[key] !== undefined ? String(row[key]) : '';\n }\n return '';\n }\n\n let fieldName = col.dataBinding.sourceField;\n const parts = fieldName.split('.');\n\n let value = this.getNestedValue(row, parts.slice(1).join('.') || fieldName);\n\n if (value === undefined) {\n fieldName = parts[parts.length - 1];\n value = row[fieldName];\n }\n\n if (value === undefined || value === null) {\n const lowerField = fieldName.toLowerCase();\n for (const key of Object.keys(row)) {\n if (key.toLowerCase() === lowerField) {\n value = row[key];\n break;\n }\n }\n }\n\n if (value === undefined || value === null) {\n return '';\n }\n\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return this.formatting.formatValue(value, col.dataBinding);\n }\n\n formatListItem(item: any, component: ComponentModel): string {\n const content = component.content || '';\n\n if (typeof item !== 'object' || item === null) {\n return String(item);\n }\n\n if (content.includes('{{')) {\n return content.replace(/\\{\\{([^}]+)\\}\\}/g, (match, path) => {\n const parts = path.trim().split('.');\n const fieldPath = parts.length >= 2 ? parts.slice(1).join('.') : parts[0];\n const value = this.getNestedItemValue(item, fieldPath);\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n return match;\n });\n }\n\n const keys = Object.keys(item);\n for (const key of keys) {\n const value = item[key];\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n }\n return JSON.stringify(item);\n }\n\n resolveListHeader(component: ComponentModel, data: any): string {\n const listConfig = component.listConfig;\n if (!listConfig) return 'List';\n\n if (listConfig.headerBinding) {\n if (data) {\n return this.resolvePlaceholders(listConfig.headerBinding, data);\n }\n return listConfig.headerBinding;\n }\n\n return listConfig.headerText || 'List';\n }\n\n getBulletChar(bulletStyle: string | undefined, index: number): string {\n switch (bulletStyle) {\n case 'disc': return '\\u2022';\n case 'circle': return '\\u25CB';\n case 'square': return '\\u25AA';\n case 'decimal': return `${index + 1}.`;\n case 'none': return '';\n default: return '\\u2022';\n }\n }\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return undefined;\n const parts = path.split('.');\n let current = obj;\n for (const part of parts) {\n if (current === null || current === undefined) return undefined;\n current = current[part];\n }\n return current;\n }\n\n getNestedItemValue(item: any, path: string): any {\n if (!item || !path) return undefined;\n\n const parts = path.split('.');\n let current = item;\n\n for (const part of parts) {\n if (current === null || current === undefined) return undefined;\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const arrayName = arrayMatch[1];\n const index = parseInt(arrayMatch[2], 10);\n current = current[arrayName];\n if (Array.isArray(current) && current[index] !== undefined) {\n current = current[index];\n } else {\n return undefined;\n }\n } else {\n current = current[part];\n }\n }\n\n return current;\n }\n}\n","import { Injectable } from '@angular/core';\nimport type { EChartsOption } from 'echarts';\nimport { ChartConfig, ChartSeries, ChartAxisConfig, ChartTrendline, AggregationFunction } from '../models/component.model';\n\n@Injectable()\nexport class ChartOptionsBuilderService {\n\n buildOptions(config: ChartConfig, data?: any[]): EChartsOption {\n const chartData = data && data.length > 0 ? data : this.generateSampleData(config);\n const options: EChartsOption = {};\n\n // Title\n if (config.title || config.subtitle) {\n options.title = {\n text: config.title || '',\n subtext: config.subtitle || '',\n left: config.titleAlign || 'center',\n textStyle: {\n color: config.titleColor || '#333',\n fontSize: config.titleFontSize || 14,\n fontWeight: (config.titleFontWeight as any) || 'bold',\n },\n subtextStyle: {\n color: config.subtitleColor || '#999',\n fontSize: config.subtitleFontSize || 12,\n },\n };\n }\n\n // Tooltip\n if (config.showTooltip !== false) {\n const isPieType = config.chartType === 'pie' || config.chartType === 'doughnut';\n options.tooltip = {\n trigger: config.tooltipTrigger || (isPieType ? 'item' : 'axis'),\n ...(isPieType ? {} : { axisPointer: { type: 'shadow' as const } }),\n };\n }\n\n // Legend\n if (config.legendPosition && config.legendPosition !== 'none' && config.series.length > 0) {\n const isVertical = config.legendPosition === 'left' || config.legendPosition === 'right';\n options.legend = {\n show: true,\n orient: isVertical ? 'vertical' : 'horizontal',\n [config.legendPosition]: isVertical ? 10 : 'auto',\n ...(config.legendPosition === 'top' ? { top: config.title ? 30 : 10 } : {}),\n ...(config.legendPosition === 'bottom' ? { bottom: 10 } : {}),\n textStyle: {\n color: config.legendFontColor || '#666',\n fontSize: config.legendFontSize || 12,\n },\n };\n }\n\n // Color palette\n if (config.colorPalette?.colors) {\n options.color = config.colorPalette.colors;\n }\n\n // Animation\n options.animation = config.enableAnimation !== false;\n if (config.animationDuration) {\n options.animationDuration = config.animationDuration;\n }\n\n // Background\n if (config.backgroundColor) {\n options.backgroundColor = config.backgroundColor;\n }\n\n // Build chart-type-specific options\n switch (config.chartType) {\n case 'bar':\n case 'line':\n case 'area':\n this.buildCartesianChart(options, config, chartData);\n break;\n case 'pie':\n case 'doughnut':\n this.buildPieChart(options, config, chartData);\n break;\n case 'scatter':\n this.buildScatterChart(options, config, chartData);\n break;\n case 'radar':\n this.buildRadarChart(options, config, chartData);\n break;\n case 'funnel':\n this.buildFunnelChart(options, config, chartData);\n break;\n case 'gauge':\n this.buildGaugeChart(options, config, chartData);\n break;\n case 'waterfall':\n this.buildWaterfallChart(options, config, chartData);\n break;\n }\n\n // Add trendlines for cartesian charts\n if (config.trendlines?.length && ['bar', 'line', 'area'].includes(config.chartType)) {\n this.addTrendlines(options, config, chartData);\n }\n\n return options;\n }\n\n generateSampleData(config: ChartConfig): any[] {\n const categories = ['Category A', 'Category B', 'Category C', 'Category D', 'Category E'];\n return categories.map((cat, i) => {\n const item: any = { _category: cat };\n if (config.series.length > 0) {\n config.series.forEach((s, si) => {\n item[s.valueField || `value${si}`] = Math.round(Math.random() * 80 + 20 + si * 15);\n });\n } else {\n item['value'] = Math.round(Math.random() * 80 + 20);\n }\n return item;\n });\n }\n\n resolveChartData(rawData: any, config: ChartConfig): any[] {\n if (!rawData || !config.dataSourceField) return [];\n\n let data = this.getNestedValue(rawData, config.dataSourceField);\n if (Array.isArray(data)) return data;\n\n const field = config.dataSourceField;\n const directValue = rawData[field];\n if (Array.isArray(directValue)) return directValue;\n\n for (const key of Object.keys(rawData)) {\n if (key.toLowerCase() === field.toLowerCase() && Array.isArray(rawData[key])) {\n return rawData[key];\n }\n }\n\n const prefixes = ['Items', 'Data', 'Records', 'Rows'];\n for (const prefix of prefixes) {\n if (field.startsWith(prefix + '.')) {\n const remaining = field.substring(prefix.length + 1);\n const nested = rawData[prefix] || rawData[prefix.toLowerCase()];\n if (nested) {\n const val = this.getNestedValue(nested, remaining);\n if (Array.isArray(val)) return val;\n }\n }\n }\n\n return this.findFirstObjectArray(rawData);\n }\n\n private buildCartesianChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const categories = this.extractCategories(data, config.categoryField);\n const hasSecondaryAxis = config.series.some(s => s.yAxisIndex === 1);\n\n options.grid = {\n top: config.title ? 60 : 30,\n right: hasSecondaryAxis ? 60 : 30,\n bottom: config.legendPosition === 'bottom' ? 60 : 30,\n left: 50,\n containLabel: true,\n };\n\n options.xAxis = {\n type: 'category',\n data: categories,\n show: config.xAxis?.show !== false,\n name: config.xAxis?.title || '',\n nameTextStyle: {\n color: config.xAxis?.titleColor || '#666',\n fontSize: config.xAxis?.titleFontSize || 12,\n },\n axisLabel: {\n rotate: config.xAxis?.labelRotation || 0,\n color: config.xAxis?.labelColor || '#666',\n fontSize: config.xAxis?.labelFontSize || 11,\n },\n axisLine: { lineStyle: { color: config.xAxis?.axisLineColor || '#ccc' } },\n splitLine: {\n show: config.xAxis?.showGridLines || false,\n lineStyle: {\n color: config.xAxis?.gridLineColor || '#eee',\n type: config.xAxis?.gridLineStyle || 'solid',\n },\n },\n } as any;\n\n const yAxes: any[] = [{\n type: 'value',\n show: config.yAxis?.show !== false,\n name: config.yAxis?.title || '',\n nameTextStyle: {\n color: config.yAxis?.titleColor || '#666',\n fontSize: config.yAxis?.titleFontSize || 12,\n },\n min: config.yAxis?.min === 'auto' ? undefined : config.yAxis?.min,\n max: config.yAxis?.max === 'auto' ? undefined : config.yAxis?.max,\n inverse: config.yAxis?.inverse || false,\n axisLabel: {\n color: config.yAxis?.labelColor || '#666',\n fontSize: config.yAxis?.labelFontSize || 11,\n },\n axisLine: { lineStyle: { color: config.yAxis?.axisLineColor || '#ccc' } },\n splitLine: {\n show: config.yAxis?.showGridLines !== false,\n lineStyle: {\n color: config.yAxis?.gridLineColor || '#eee',\n type: config.yAxis?.gridLineStyle || 'dashed',\n },\n },\n }];\n\n if (hasSecondaryAxis) {\n yAxes.push({\n type: 'value',\n show: config.secondaryYAxis?.show !== false,\n name: config.secondaryYAxis?.title || '',\n nameTextStyle: {\n color: config.secondaryYAxis?.titleColor || '#666',\n fontSize: config.secondaryYAxis?.titleFontSize || 12,\n },\n min: config.secondaryYAxis?.min === 'auto' ? undefined : config.secondaryYAxis?.min,\n max: config.secondaryYAxis?.max === 'auto' ? undefined : config.secondaryYAxis?.max,\n axisLabel: {\n color: config.secondaryYAxis?.labelColor || '#666',\n fontSize: config.secondaryYAxis?.labelFontSize || 11,\n },\n axisLine: { lineStyle: { color: config.secondaryYAxis?.axisLineColor || '#ccc' } },\n splitLine: { show: false },\n });\n }\n\n options.yAxis = yAxes as any;\n\n const isStacked = config.chartSubType === 'stacked' || config.chartSubType === 'percent-stacked';\n const isPercentStacked = config.chartSubType === 'percent-stacked';\n\n let seriesData: any[];\n\n if (isPercentStacked) {\n seriesData = this.buildPercentStackedSeries(config, data, categories);\n } else {\n seriesData = config.series.map(s => {\n const seriesType = s.type || config.chartType;\n const echartsType = seriesType === 'area' ? 'line' : seriesType;\n const values = this.extractSeriesValues(data, s, config.categoryField);\n\n const seriesItem: any = {\n name: s.name || s.valueField,\n type: echartsType,\n data: values,\n yAxisIndex: s.yAxisIndex || 0,\n ...(isStacked ? { stack: 'total' } : {}),\n ...(seriesType === 'area' ? { areaStyle: { opacity: s.areaOpacity ?? 0.3 } } : {}),\n ...(config.borderRadius && seriesType === 'bar' ? { itemStyle: { borderRadius: config.borderRadius } } : {}),\n };\n\n if (echartsType === 'line') {\n seriesItem.lineStyle = {\n type: s.lineStyle || 'solid',\n width: s.lineWidth || 2,\n };\n seriesItem.smooth = seriesType === 'area' || false;\n }\n\n if (s.showDataLabels || config.showDataLabels) {\n seriesItem.label = {\n show: true,\n position: config.dataLabelPosition || 'top',\n fontSize: config.dataLabelFontSize || 11,\n color: config.dataLabelColor || '#333',\n };\n }\n\n if (s.color) {\n seriesItem.itemStyle = { ...seriesItem.itemStyle, color: s.color };\n }\n\n return seriesItem;\n });\n }\n\n options.series = seriesData;\n }\n\n private buildPieChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const series = config.series[0];\n if (!series) return;\n\n const pieData = this.extractPieData(data, config.categoryField, series);\n const isDoughnut = config.chartType === 'doughnut';\n\n options.series = [{\n type: 'pie',\n radius: isDoughnut ? [`${config.innerRadius || 40}%`, '70%'] : ['0%', '70%'],\n center: ['50%', '55%'],\n data: pieData,\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0,0,0,0.5)',\n },\n },\n label: {\n show: config.showDataLabels !== false,\n position: config.dataLabelPosition || 'outside',\n fontSize: config.dataLabelFontSize || 11,\n color: config.dataLabelColor || '#333',\n },\n labelLine: { show: config.showDataLabels !== false },\n }] as any;\n }\n\n private buildScatterChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n options.grid = { top: 40, right: 30, bottom: 30, left: 50, containLabel: true };\n\n options.xAxis = {\n type: 'value',\n show: config.xAxis?.show !== false,\n name: config.xAxis?.title || '',\n axisLabel: { color: '#666' },\n splitLine: { show: config.xAxis?.showGridLines || false, lineStyle: { type: 'dashed' } },\n } as any;\n\n options.yAxis = {\n type: 'value',\n show: config.yAxis?.show !== false,\n name: config.yAxis?.title || '',\n axisLabel: { color: '#666' },\n splitLine: { show: config.yAxis?.showGridLines !== false, lineStyle: { type: 'dashed' } },\n } as any;\n\n options.series = config.series.map(s => {\n const scatterData = data.map(row => {\n const xVal = this.getFieldValue(row, config.categoryField);\n const yVal = this.getFieldValue(row, s.valueField);\n return [typeof xVal === 'number' ? xVal : 0, typeof yVal === 'number' ? yVal : 0];\n });\n\n return {\n name: s.name || s.valueField,\n type: 'scatter',\n data: scatterData,\n ...(s.color ? { itemStyle: { color: s.color } } : {}),\n label: {\n show: s.showDataLabels || config.showDataLabels || false,\n position: 'top',\n fontSize: 11,\n },\n };\n }) as any;\n }\n\n private buildRadarChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const categories = this.extractCategories(data, config.categoryField);\n\n const maxValues = categories.map((_, ci) => {\n let max = 0;\n config.series.forEach(s => {\n const val = this.getFieldValue(data[ci], s.valueField);\n if (typeof val === 'number' && val > max) max = val;\n });\n return max * 1.2 || 100;\n });\n\n (options as any).radar = {\n indicator: categories.map((cat, i) => ({ name: cat, max: maxValues[i] })),\n shape: 'polygon',\n };\n\n options.series = [{\n type: 'radar',\n data: config.series.map(s => ({\n name: s.name || s.valueField,\n value: data.map(row => {\n const val = this.getFieldValue(row, s.valueField);\n return typeof val === 'number' ? val : 0;\n }),\n ...(s.color ? { itemStyle: { color: s.color }, lineStyle: { color: s.color } } : {}),\n areaStyle: { opacity: 0.1 },\n })),\n }] as any;\n }\n\n private buildFunnelChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const series = config.series[0];\n if (!series) return;\n\n const funnelData = this.extractPieData(data, config.categoryField, series)\n .sort((a: any, b: any) => b.value - a.value);\n\n options.series = [{\n type: 'funnel',\n left: '10%',\n top: 40,\n bottom: 20,\n width: '80%',\n sort: 'descending',\n gap: 2,\n data: funnelData,\n label: {\n show: config.showDataLabels !== false,\n position: 'inside',\n fontSize: config.dataLabelFontSize || 11,\n },\n }] as any;\n }\n\n private buildGaugeChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const series = config.series[0];\n if (!series) return;\n\n const firstRow = data[0];\n const value = firstRow ? this.getFieldValue(firstRow, series.valueField) : 50;\n\n options.series = [{\n type: 'gauge',\n min: config.gaugeMin ?? 0,\n max: config.gaugeMax ?? 100,\n progress: { show: true, width: 18 },\n axisLine: { lineStyle: { width: 18 } },\n axisTick: { show: false },\n splitLine: { length: 15, lineStyle: { width: 2, color: '#999' } },\n axisLabel: { distance: 25, color: '#999', fontSize: 12 },\n pointer: { itemStyle: { color: 'auto' } },\n title: { show: true, offsetCenter: [0, '70%'], fontSize: 14 },\n detail: {\n valueAnimation: config.enableAnimation !== false,\n fontSize: 24,\n offsetCenter: [0, '90%'],\n formatter: '{value}',\n color: 'inherit',\n },\n data: [{ value: typeof value === 'number' ? value : 0, name: series.name || series.valueField }],\n }] as any;\n }\n\n private buildWaterfallChart(options: EChartsOption, config: ChartConfig, data: any[]): void {\n const series = config.series[0];\n if (!series) return;\n\n const categories = this.extractCategories(data, config.categoryField);\n const values = data.map(row => {\n const val = this.getFieldValue(row, series.valueField);\n return typeof val === 'number' ? val : 0;\n });\n\n const baseValues: (number | string)[] = [];\n const positiveValues: (number | string)[] = [];\n const negativeValues: (number | string)[] = [];\n let cumulative = 0;\n\n values.forEach((val, i) => {\n if (i === values.length - 1) {\n baseValues.push(0);\n positiveValues.push(cumulative + val);\n negativeValues.push('-');\n } else if (val >= 0) {\n baseValues.push(cumulative);\n positiveValues.push(val);\n negativeValues.push('-');\n cumulative += val;\n } else {\n cumulative += val;\n baseValues.push(cumulative);\n positiveValues.push('-');\n negativeValues.push(Math.abs(val));\n }\n });\n\n options.grid = { top: 40, right: 30, bottom: 30, left: 50, containLabel: true };\n\n options.xAxis = {\n type: 'category',\n data: categories,\n axisLabel: { color: '#666', rotate: config.xAxis?.labelRotation || 0 },\n } as any;\n\n options.yAxis = {\n type: 'value',\n axisLabel: { color: '#666' },\n splitLine: { lineStyle: { type: 'dashed' } },\n } as any;\n\n options.series = [\n {\n name: 'Base',\n type: 'bar',\n stack: 'waterfall',\n itemStyle: { borderColor: 'transparent', color: 'transparent' },\n emphasis: { itemStyle: { borderColor: 'transparent', color: 'transparent' } },\n data: baseValues,\n },\n {\n name: 'Increase',\n type: 'bar',\n stack: 'waterfall',\n itemStyle: { color: config.waterfallPositiveColor || '#91cc75' },\n data: positiveValues,\n label: { show: config.showDataLabels || false, position: 'top' },\n },\n {\n name: 'Decrease',\n type: 'bar',\n stack: 'waterfall',\n itemStyle: { color: config.waterfallNegativeColor || '#ee6666' },\n data: negativeValues,\n label: { show: config.showDataLabels || false, position: 'bottom' },\n },\n ] as any;\n }\n\n private addTrendlines(options: EChartsOption, config: ChartConfig, data: any[]): void {\n if (!config.trendlines?.length || !Array.isArray(options.series)) return;\n\n for (const trendline of config.trendlines) {\n const targetSeries = config.series[trendline.seriesIndex];\n if (!targetSeries) continue;\n\n const values = data.map(row => {\n const val = this.getFieldValue(row, targetSeries.valueField);\n return typeof val === 'number' ? val : 0;\n });\n\n let trendData: number[];\n\n switch (trendline.type) {\n case 'linear':\n trendData = this.linearRegression(values);\n break;\n case 'exponential':\n trendData = this.exponentialRegression(values);\n break;\n case 'polynomial':\n trendData = this.polynomialRegression(values, trendline.polynomialOrder || 2);\n break;\n case 'moving-average':\n trendData = this.movingAverage(values, trendline.movingAveragePeriod || 3);\n break;\n default:\n trendData = this.linearRegression(values);\n }\n\n (options.series as any[]).push({\n name: `${targetSeries.name} Trend`,\n type: 'line',\n data: trendData,\n smooth: true,\n showSymbol: false,\n lineStyle: {\n type: trendline.lineStyle || 'dashed',\n width: trendline.lineWidth || 2,\n color: trendline.color || '#999',\n },\n itemStyle: { color: trendline.color || '#999' },\n tooltip: { show: false },\n });\n }\n }\n\n private extractCategories(data: any[], categoryField: string): string[] {\n if (!categoryField) {\n return data.map((_, i) => `Item ${i + 1}`);\n }\n return data.map(row => {\n const val = this.getFieldValue(row, categoryField);\n return val !== undefined && val !== null ? String(val) : '';\n });\n }\n\n private extractSeriesValues(data: any[], series: ChartSeries, categoryField: string): number[] {\n const raw = data.map(row => {\n const val = this.getFieldValue(row, series.valueField);\n return typeof val === 'number' ? val : (parseFloat(val) || 0);\n });\n\n if (!series.aggregation || series.aggregation === 'none') {\n return raw;\n }\n\n const groups = new Map<string, number[]>();\n data.forEach((row, i) => {\n const cat = categoryField ? String(this.getFieldValue(row, categoryField) || '') : String(i);\n if (!groups.has(cat)) groups.set(cat, []);\n groups.get(cat)!.push(raw[i]);\n });\n\n return Array.from(groups.values()).map(vals => this.aggregate(vals, series.aggregation!));\n }\n\n private extractPieData(data: any[], categoryField: string, series: ChartSeries): { name: string; value: number }[] {\n return data.map(row => {\n const name = categoryField ? String(this.getFieldValue(row, categoryField) || '') : '';\n const val = this.getFieldValue(row, series.valueField);\n return { name, value: typeof val === 'number' ? val : (parseFloat(val) || 0) };\n });\n }\n\n private buildPercentStackedSeries(config: ChartConfig, data: any[], categories: string[]): any[] {\n const totals = categories.map((_, ci) => {\n return config.series.reduce((sum, s) => {\n const val = this.getFieldValue(data[ci], s.valueField);\n return sum + (typeof val === 'number' ? val : (parseFloat(val) || 0));\n }, 0);\n });\n\n return config.series.map(s => {\n const values = data.map((row, i) => {\n const val = this.getFieldValue(row, s.valueField);\n const num = typeof val === 'number' ? val : (parseFloat(val) || 0);\n return totals[i] > 0 ? Math.round((num / totals[i]) * 100 * 10) / 10 : 0;\n });\n\n const seriesType = s.type || config.chartType;\n const echartsType = seriesType === 'area' ? 'line' : seriesType;\n\n return {\n name: s.name || s.valueField,\n type: echartsType,\n stack: 'total',\n data: values,\n ...(seriesType === 'area' ? { areaStyle: { opacity: s.areaOpacity ?? 0.3 } } : {}),\n ...(s.color ? { itemStyle: { color: s.color } } : {}),\n label: {\n show: s.showDataLabels || config.showDataLabels || false,\n position: 'inside',\n formatter: '{c}%',\n },\n };\n });\n }\n\n private getFieldValue(obj: any, path: string): any {\n if (!obj || !path) return undefined;\n if (obj[path] !== undefined) return obj[path];\n\n const parts = path.split('.');\n const fieldName = parts.length >= 2 ? parts[parts.length - 1] : parts[0];\n\n if (obj[fieldName] !== undefined) return obj[fieldName];\n\n for (const key of Object.keys(obj)) {\n if (key.toLowerCase() === fieldName.toLowerCase()) return obj[key];\n }\n\n let current = obj;\n for (const part of parts) {\n if (current == null) return undefined;\n current = current[part];\n }\n return current;\n }\n\n private getNestedValue(obj: any, path: string): any {\n if (!path) return undefined;\n const parts = path.split('.');\n let current = obj;\n for (const part of parts) {\n if (current == null) return undefined;\n current = current[part];\n }\n return current;\n }\n\n private findFirstObjectArray(data: any): any[] {\n if (!data || typeof data !== 'object') return [];\n for (const key of Object.keys(data)) {\n const val = data[key];\n if (Array.isArray(val) && val.length > 0 && typeof val[0] === 'object') {\n return val;\n }\n }\n for (const key of Object.keys(data)) {\n if (data[key] && typeof data[key] === 'object' && !Array.isArray(data[key])) {\n const result = this.findFirstObjectArray(data[key]);\n if (result.length > 0) return result;\n }\n }\n return [];\n }\n\n private aggregate(values: number[], fn: AggregationFunction): number {\n if (values.length === 0) return 0;\n switch (fn) {\n case 'sum': return values.reduce((a, b) => a + b, 0);\n case 'average': return values.reduce((a, b) => a + b, 0) / values.length;\n case 'count': return values.length;\n case 'min': return Math.min(...values);\n case 'max': return Math.max(...values);\n default: return values[0];\n }\n }\n\n private linearRegression(values: number[]): number[] {\n const n = values.length;\n if (n < 2) return [...values];\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;\n for (let i = 0; i < n; i++) {\n sumX += i;\n sumY += values[i];\n sumXY += i * values[i];\n sumX2 += i * i;\n }\n const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n return values.map((_, i) => Math.round((slope * i + intercept) * 100) / 100);\n }\n\n private exponentialRegression(values: number[]): number[] {\n const n = values.length;\n if (n < 2) return [...values];\n const logValues = values.map(v => v > 0 ? Math.log(v) : 0);\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;\n for (let i = 0; i < n; i++) {\n sumX += i;\n sumY += logValues[i];\n sumXY += i * logValues[i];\n sumX2 += i * i;\n }\n const b = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const a = Math.exp((sumY - b * sumX) / n);\n return values.map((_, i) => Math.round(a * Math.exp(b * i) * 100) / 100);\n }\n\n private polynomialRegression(values: number[], order: number): number[] {\n const n = values.length;\n if (n < 2) return [...values];\n const effectiveOrder = Math.min(order, Math.min(n - 1, 4));\n\n if (effectiveOrder <= 1) return this.linearRegression(values);\n\n const xs = values.map((_, i) => i);\n const coeffs = this.polyFit(xs, values, effectiveOrder);\n return xs.map(x => {\n let y = 0;\n for (let j = 0; j <= effectiveOrder; j++) {\n y += coeffs[j] * Math.pow(x, j);\n }\n return Math.round(y * 100) / 100;\n });\n }\n\n private polyFit(xs: number[], ys: number[], degree: number): number[] {\n const n = xs.length;\n const m = degree + 1;\n const XT_X: number[][] = Array.from({ length: m }, () => Array(m).fill(0));\n const XT_y: number[] = Array(m).fill(0);\n\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n const xj = Math.pow(xs[i], j);\n XT_y[j] += xj * ys[i];\n for (let k = 0; k < m; k++) {\n XT_X[j][k] += xj * Math.pow(xs[i], k);\n }\n }\n }\n\n for (let col = 0; col < m; col++) {\n let maxRow = col;\n for (let row = col + 1; row < m; row++) {\n if (Math.abs(XT_X[row][col]) > Math.abs(XT_X[maxRow][col])) maxRow = row;\n }\n [XT_X[col], XT_X[maxRow]] = [XT_X[maxRow], XT_X[col]];\n [XT_y[col], XT_y[maxRow]] = [XT_y[maxRow], XT_y[col]];\n\n if (Math.abs(XT_X[col][col]) < 1e-10) continue;\n\n for (let row = col + 1; row < m; row++) {\n const factor = XT_X[row][col] / XT_X[col][col];\n for (let k = col; k < m; k++) {\n XT_X[row][k] -= factor * XT_X[col][k];\n }\n XT_y[row] -= factor * XT_y[col];\n }\n }\n\n const coeffs = Array(m).fill(0);\n for (let row = m - 1; row >= 0; row--) {\n if (Math.abs(XT_X[row][row]) < 1e-10) continue;\n let sum = XT_y[row];\n for (let col = row + 1; col < m; col++) {\n sum -= XT_X[row][col] * coeffs[col];\n }\n coeffs[row] = sum / XT_X[row][row];\n }\n\n return coeffs;\n }\n\n private movingAverage(values: number[], period: number): number[] {\n const result: number[] = [];\n const p = Math.min(period, values.length);\n for (let i = 0; i < values.length; i++) {\n if (i < p - 1) {\n const slice = values.slice(0, i + 1);\n result.push(Math.round(slice.reduce((a, b) => a + b, 0) / slice.length * 100) / 100);\n } else {\n const slice = values.slice(i - p + 1, i + 1);\n result.push(Math.round(slice.reduce((a, b) => a + b, 0) / p * 100) / 100);\n }\n }\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentModel, StyleProperties, TableColumn, ComplexTableCell, ComplexTableConfig } from '../models/component.model';\nimport { ReportSection } from '../models/report-template.model';\n\n@Injectable()\nexport class StyleMapperService {\n\n mapComponentStyles(style: StyleProperties): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Typography\n if (style.fontFamily) result['font-family'] = style.fontFamily;\n if (style.fontSize) result['font-size'] = style.fontSize;\n if (style.fontWeight) result['font-weight'] = style.fontWeight;\n if (style.fontStyle) result['font-style'] = style.fontStyle;\n if (style.textDecoration) result['text-decoration'] = style.textDecoration;\n if (style.lineHeight) result['line-height'] = style.lineHeight;\n if (style.letterSpacing) result['letter-spacing'] = style.letterSpacing;\n\n // Colors\n if (style.color) result['color'] = style.color;\n if (style.backgroundColor) result['background-color'] = style.backgroundColor;\n\n // Alignment\n if (style.textAlign) result['text-align'] = style.textAlign;\n\n // Spacing\n if (style.padding) result['padding'] = style.padding;\n if (style.paddingTop) result['padding-top'] = style.paddingTop;\n if (style.paddingRight) result['padding-right'] = style.paddingRight;\n if (style.paddingBottom) result['padding-bottom'] = style.paddingBottom;\n if (style.paddingLeft) result['padding-left'] = style.paddingLeft;\n\n // Borders\n if (style.border) result['border'] = style.border;\n if (style.borderWidth) result['border-width'] = style.borderWidth;\n if (style.borderStyle) result['border-style'] = style.borderStyle;\n if (style.borderColor) result['border-color'] = style.borderColor;\n if (style.borderRadius) result['border-radius'] = style.borderRadius;\n\n return result;\n }\n\n mapTableStyle(component: ComponentModel): Record<string, string> {\n const result: Record<string, string> = {};\n const config = component.tableConfig;\n\n if (config?.showOuterBorder !== false) {\n const width = config?.outerBorderWidth || '1px';\n const color = config?.outerBorderColor || '#cccccc';\n const style = config?.outerBorderStyle || 'solid';\n result['border'] = `${width} ${style} ${color}`;\n } else {\n result['border'] = 'none';\n }\n\n if (config?.tableLayout) {\n result['table-layout'] = config.tableLayout;\n }\n\n return result;\n }\n\n mapHeaderStyle(component: ComponentModel, colIndex: number, col?: TableColumn): Record<string, string> {\n const result: Record<string, string> = {};\n const config = component.tableConfig;\n\n if (config?.headerBackground) {\n result['background-color'] = config.headerBackground;\n } else {\n result['background-color'] = '#f5f5f5';\n }\n\n if (config?.headerTextColor) {\n result['color'] = config.headerTextColor;\n }\n\n if (config?.headerFontWeight) {\n result['font-weight'] = config.headerFontWeight;\n } else {\n result['font-weight'] = 'bold';\n }\n\n if (config?.headerFontSize) {\n result['font-size'] = config.headerFontSize;\n }\n\n if (config?.headerTextAlign) {\n result['text-align'] = config.headerTextAlign;\n } else if (col?.style?.textAlign) {\n result['text-align'] = col.style.textAlign;\n }\n\n if (config?.headerPadding) {\n result['padding'] = config.headerPadding;\n } else {\n result['padding'] = '8px';\n }\n\n if (config?.headerBorderBottom) {\n result['border-bottom'] = config.headerBorderBottom;\n }\n\n if (col?.width) {\n result['width'] = col.width;\n }\n\n const totalCols = component.columns?.length || 0;\n if (config?.showColumnSeparators !== false && colIndex < totalCols - 1) {\n const sepWidth = config?.columnSeparatorWidth || '1px';\n const sepColor = config?.columnSeparatorColor || '#e0e0e0';\n const sepStyle = config?.columnSeparatorStyle || 'solid';\n result['border-right'] = `${sepWidth} ${sepStyle} ${sepColor}`;\n }\n\n return result;\n }\n\n mapRowStyle(component: ComponentModel, rowIndex: number, totalRows: number): Record<string, string> {\n const result: Record<string, string> = {};\n const config = component.tableConfig;\n\n if (config?.highlightFirstRow && rowIndex === 0) {\n result['background-color'] = config.firstRowBackground || '#e8f5e9';\n } else if (config?.highlightLastRow && rowIndex === totalRows - 1) {\n result['background-color'] = config.lastRowBackground || '#fff3e0';\n } else if (config?.enableAlternateRows) {\n if (rowIndex % 2 === 0) {\n result['background-color'] = config.evenRowBackground || '#ffffff';\n } else {\n result['background-color'] = config.oddRowBackground || '#f9f9f9';\n }\n }\n\n if (config?.showRowSeparators !== false && rowIndex < totalRows - 1) {\n const sepWidth = config?.rowSeparatorWidth || '1px';\n const sepColor = config?.rowSeparatorColor || '#e0e0e0';\n const sepStyle = config?.rowSeparatorStyle || 'solid';\n result['border-bottom'] = `${sepWidth} ${sepStyle} ${sepColor}`;\n }\n\n return result;\n }\n\n mapCellStyle(component: ComponentModel, colIndex: number, col?: TableColumn): Record<string, string> {\n const result: Record<string, string> = {};\n const config = component.tableConfig;\n\n if (config?.cellPadding) {\n result['padding'] = config.cellPadding;\n } else if (col?.style?.padding) {\n result['padding'] = col.style.padding;\n } else {\n result['padding'] = '8px';\n }\n\n if (config?.cellVerticalAlign) {\n result['vertical-align'] = config.cellVerticalAlign;\n }\n\n if (col?.width) {\n result['width'] = col.width;\n }\n\n if (col?.style?.textAlign) {\n result['text-align'] = col.style.textAlign;\n }\n if (col?.style?.fontWeight) {\n result['font-weight'] = col.style.fontWeight;\n }\n if (col?.style?.color) {\n result['color'] = col.style.color;\n }\n\n const totalCols = component.columns?.length || 0;\n if (config?.showColumnSeparators !== false && colIndex < totalCols - 1) {\n const sepWidth = config?.columnSeparatorWidth || '1px';\n const sepColor = config?.columnSeparatorColor || '#e0e0e0';\n const sepStyle = config?.columnSeparatorStyle || 'solid';\n result['border-right'] = `${sepWidth} ${sepStyle} ${sepColor}`;\n }\n\n return result;\n }\n\n mapBandStyle(section: ReportSection): Record<string, string> {\n const result: Record<string, string> = {};\n if (section.style?.backgroundColor) {\n result['background-color'] = section.style.backgroundColor;\n }\n if (section.style?.borderBottom) {\n result['border-bottom'] = section.style.borderBottom;\n }\n if (section.style?.borderTop) {\n result['border-top'] = section.style.borderTop;\n }\n return result;\n }\n\n mapComplexCellStyle(cell: ComplexTableCell, config: ComplexTableConfig, isHeader: boolean): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Grid lines\n if (config.showGridLines !== false) {\n const w = config.gridLineWidth || '1px';\n const c = config.gridLineColor || '#e0e0e0';\n const s = config.gridLineStyle || 'solid';\n result['border'] = `${w} ${s} ${c}`;\n }\n\n // Header/body defaults\n if (isHeader) {\n if (config.headerBackground) result['background-color'] = config.headerBackground;\n if (config.headerTextColor) result['color'] = config.headerTextColor;\n if (config.headerFontWeight) result['font-weight'] = config.headerFontWeight;\n if (config.headerFontSize) result['font-size'] = config.headerFontSize;\n if (config.headerTextAlign) result['text-align'] = config.headerTextAlign;\n if (config.headerPadding) result['padding'] = config.headerPadding;\n } else {\n if (config.cellPadding) result['padding'] = config.cellPadding;\n if (config.cellTextAlign) result['text-align'] = config.cellTextAlign;\n }\n\n if (config.cellVerticalAlign) result['vertical-align'] = config.cellVerticalAlign;\n\n // Per-cell style overrides\n if (cell.style) {\n if (cell.style.backgroundColor) result['background-color'] = cell.style.backgroundColor;\n if (cell.style.color) result['color'] = cell.style.color;\n if (cell.style.fontWeight) result['font-weight'] = cell.style.fontWeight;\n if (cell.style.fontSize) result['font-size'] = cell.style.fontSize;\n if (cell.style.textAlign) result['text-align'] = cell.style.textAlign;\n if (cell.style.padding) result['padding'] = cell.style.padding;\n }\n\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ReportTemplate, GlobalStyles, PageSetup, ReportSection, SchemaMetadata } from '../models/report-template.model';\nimport { ComponentModel, ComponentMetadata } from '../models/component.model';\n\nconst DEFAULT_METADATA: SchemaMetadata = {\n name: 'Untitled Report',\n description: '',\n createdDate: '',\n modifiedDate: '',\n author: '',\n};\n\nconst DEFAULT_PAGE_SETUP: PageSetup = {\n size: 'A4',\n orientation: 'Portrait',\n width: 210,\n height: 297,\n unit: 'mm',\n margins: { top: 20, right: 20, bottom: 20, left: 20 },\n};\n\nconst DEFAULT_GLOBAL_STYLES: GlobalStyles = {\n fontFamily: 'Arial, sans-serif',\n fontSize: '11px',\n color: '#000000',\n backgroundColor: '#ffffff',\n};\n\nconst DEFAULT_COMPONENT_METADATA: ComponentMetadata = {\n createdDate: '',\n modifiedDate: '',\n locked: false,\n visible: true,\n};\n\n@Injectable()\nexport class TemplateNormalizerService {\n\n /**\n * Normalizes a template JSON by filling in missing optional fields with defaults.\n * This ensures the template works correctly in both the Report Viewer and Report Designer.\n * The input object is not mutated; a new object is returned.\n */\n normalize(template: any): ReportTemplate {\n if (!template || typeof template !== 'object') {\n return this.createEmptyTemplate();\n }\n\n const normalized: ReportTemplate = {\n version: template.version || '1.0.0',\n metadata: this.normalizeMetadata(template.metadata),\n pageSetup: this.normalizePageSetup(template.pageSetup),\n dataSources: Array.isArray(template.dataSources) ? template.dataSources : [],\n components: this.normalizeComponents(template.components),\n globalStyles: this.normalizeGlobalStyles(template.globalStyles),\n };\n\n if (template.header) {\n normalized.header = this.normalizeSection(template.header);\n }\n\n if (template.footer) {\n normalized.footer = this.normalizeSection(template.footer);\n }\n\n return normalized;\n }\n\n private normalizeMetadata(metadata: any): SchemaMetadata {\n if (!metadata) return { ...DEFAULT_METADATA };\n return {\n name: metadata.name || DEFAULT_METADATA.name,\n description: metadata.description || '',\n createdDate: metadata.createdDate || '',\n modifiedDate: metadata.modifiedDate || '',\n author: metadata.author || '',\n ...(metadata.tags ? { tags: metadata.tags } : {}),\n };\n }\n\n private normalizePageSetup(setup: any): PageSetup {\n if (!setup) return { ...DEFAULT_PAGE_SETUP };\n return {\n size: setup.size || DEFAULT_PAGE_SETUP.size,\n orientation: setup.orientation || DEFAULT_PAGE_SETUP.orientation,\n width: typeof setup.width === 'number' ? setup.width : DEFAULT_PAGE_SETUP.width,\n height: typeof setup.height === 'number' ? setup.height : DEFAULT_PAGE_SETUP.height,\n unit: setup.unit || 'mm',\n margins: setup.margins\n ? {\n top: setup.margins.top ?? 20,\n right: setup.margins.right ?? 20,\n bottom: setup.margins.bottom ?? 20,\n left: setup.margins.left ?? 20,\n ...(setup.margins.preset ? { preset: setup.margins.preset } : {}),\n }\n : { ...DEFAULT_PAGE_SETUP.margins },\n };\n }\n\n private normalizeGlobalStyles(styles: any): GlobalStyles {\n if (!styles) return { ...DEFAULT_GLOBAL_STYLES };\n return {\n fontFamily: styles.fontFamily || DEFAULT_GLOBAL_STYLES.fontFamily,\n fontSize: styles.fontSize || DEFAULT_GLOBAL_STYLES.fontSize,\n color: styles.color || DEFAULT_GLOBAL_STYLES.color,\n backgroundColor: styles.backgroundColor || DEFAULT_GLOBAL_STYLES.backgroundColor,\n ...(styles.lineHeight ? { lineHeight: styles.lineHeight } : {}),\n };\n }\n\n private normalizeSection(section: any): ReportSection {\n return {\n enabled: section.enabled !== false, // default true if missing\n height: typeof section.height === 'number' ? section.height : 20,\n style: section.style || undefined,\n components: this.normalizeComponents(section.components),\n printOnFirstPage: section.printOnFirstPage !== false,\n printOnLastPage: section.printOnLastPage !== false,\n differentFirstPage: section.differentFirstPage === true,\n ...(section.firstPageComponents ? { firstPageComponents: this.normalizeComponents(section.firstPageComponents) } : {}),\n ...(section.firstPageHeight != null ? { firstPageHeight: section.firstPageHeight } : {}),\n ...(section.firstPageStyle ? { firstPageStyle: section.firstPageStyle } : {}),\n ...(section.content ? { content: section.content } : {}),\n };\n }\n\n private normalizeComponents(components: any): ComponentModel[] {\n if (!components || !Array.isArray(components)) return [];\n return components.map((comp: any) => this.normalizeComponent(comp));\n }\n\n private normalizeComponent(comp: any): ComponentModel {\n const normalized: ComponentModel = {\n id: comp.id || this.generateId(),\n type: comp.type || 'text',\n position: this.normalizePosition(comp.position),\n size: this.normalizeSize(comp.size),\n style: comp.style || {},\n metadata: this.normalizeComponentMetadata(comp.metadata),\n zIndex: typeof comp.zIndex === 'number' ? comp.zIndex : 0,\n };\n\n // Optional fields - only include if present\n if (comp.content != null) normalized.content = comp.content;\n if (comp.dataBinding) normalized.dataBinding = this.normalizeDataBinding(comp.dataBinding);\n if (comp.conditionalLogic) normalized.conditionalLogic = comp.conditionalLogic;\n if (comp.children) normalized.children = this.normalizeComponents(comp.children);\n if (comp.columns) normalized.columns = comp.columns;\n if (comp.listConfig) normalized.listConfig = comp.listConfig;\n if (comp.tableConfig) normalized.tableConfig = comp.tableConfig;\n if (comp.shapeConfig) normalized.shapeConfig = comp.shapeConfig;\n if (comp.lineConfig) normalized.lineConfig = comp.lineConfig;\n if (comp.imageConfig) normalized.imageConfig = comp.imageConfig;\n if (comp.chartConfig) normalized.chartConfig = comp.chartConfig;\n if (comp.complexTableConfig) normalized.complexTableConfig = comp.complexTableConfig;\n\n return normalized;\n }\n\n private normalizePosition(pos: any): { x: number; y: number; unit: 'mm' | 'px' } {\n if (!pos) return { x: 0, y: 0, unit: 'mm' };\n return {\n x: typeof pos.x === 'number' ? pos.x : 0,\n y: typeof pos.y === 'number' ? pos.y : 0,\n unit: pos.unit || 'mm',\n };\n }\n\n private normalizeSize(size: any): { width: number; height: number; unit: 'mm' | 'px' } {\n if (!size) return { width: 50, height: 10, unit: 'mm' };\n return {\n width: typeof size.width === 'number' ? size.width : 50,\n height: typeof size.height === 'number' ? size.height : 10,\n unit: size.unit || 'mm',\n };\n }\n\n private normalizeComponentMetadata(meta: any): ComponentMetadata {\n if (!meta) return { ...DEFAULT_COMPONENT_METADATA };\n return {\n createdDate: meta.createdDate || '',\n modifiedDate: meta.modifiedDate || '',\n locked: meta.locked === true,\n visible: meta.visible !== false,\n ...(meta.name ? { name: meta.name } : {}),\n };\n }\n\n private normalizeDataBinding(binding: any): any {\n if (!binding) return undefined;\n const normalized: any = { ...binding };\n if (binding.iteration && !binding.iteration.itemName) {\n normalized.iteration = { ...binding.iteration, itemName: 'item' };\n }\n return normalized;\n }\n\n private createEmptyTemplate(): ReportTemplate {\n return {\n version: '1.0.0',\n metadata: { ...DEFAULT_METADATA },\n pageSetup: { ...DEFAULT_PAGE_SETUP },\n dataSources: [],\n components: [],\n globalStyles: { ...DEFAULT_GLOBAL_STYLES },\n };\n }\n\n private generateId(): string {\n return `comp-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ReportTemplate, ValidationResult, ValidationError, ValidationWarning } from '../models/report-template.model';\nimport { ComponentModel, ComponentType } from '../models/component.model';\n\nconst VALID_COMPONENT_TYPES: ComponentType[] = [\n 'text', 'field', 'table', 'list', 'image', 'container', 'qrcode', 'chart', 'line', 'shape', 'complex-table'\n];\n\nconst VALID_PAGE_SIZES = ['A2', 'A3', 'A4', 'A5', 'Letter', 'Legal', 'Custom'];\nconst VALID_ORIENTATIONS = ['Portrait', 'Landscape'];\n\n@Injectable()\nexport class TemplateValidatorService {\n\n /**\n * Validates a template JSON object and returns detailed errors/warnings.\n * Use this to check compatibility before passing to ReportViewerComponent.\n */\n validate(template: any): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n\n if (!template || typeof template !== 'object') {\n errors.push({ code: 'INVALID_ROOT', message: 'Template must be a non-null object' });\n return { valid: false, errors, warnings };\n }\n\n // Version\n if (!template.version) {\n warnings.push({ code: 'MISSING_VERSION', message: 'Template version is missing; defaulting to \"1.0.0\"' });\n }\n\n // Metadata\n if (!template.metadata) {\n warnings.push({ code: 'MISSING_METADATA', message: 'Template metadata is missing; defaults will be used' });\n } else {\n if (!template.metadata.name) {\n warnings.push({ code: 'MISSING_METADATA_NAME', message: 'Template metadata.name is missing', path: 'metadata.name' });\n }\n }\n\n // Page Setup\n if (!template.pageSetup) {\n errors.push({ code: 'MISSING_PAGE_SETUP', message: 'pageSetup is required' });\n } else {\n this.validatePageSetup(template.pageSetup, errors, warnings);\n }\n\n // Global Styles\n if (!template.globalStyles) {\n warnings.push({ code: 'MISSING_GLOBAL_STYLES', message: 'globalStyles is missing; defaults will be used' });\n }\n\n // Components\n if (!template.components) {\n warnings.push({ code: 'MISSING_COMPONENTS', message: 'No components array found; report will be empty' });\n } else if (!Array.isArray(template.components)) {\n errors.push({ code: 'INVALID_COMPONENTS', message: 'components must be an array' });\n } else {\n template.components.forEach((comp: any, index: number) => {\n this.validateComponent(comp, `components[${index}]`, errors, warnings);\n });\n }\n\n // Header section\n if (template.header) {\n this.validateSection(template.header, 'header', errors, warnings);\n }\n\n // Footer section\n if (template.footer) {\n this.validateSection(template.footer, 'footer', errors, warnings);\n }\n\n return { valid: errors.length === 0, errors, warnings };\n }\n\n /**\n * Validates a raw JSON string. Returns parse errors if invalid JSON.\n */\n validateJSON(json: string): ValidationResult {\n try {\n const parsed = JSON.parse(json);\n return this.validate(parsed);\n } catch (e: any) {\n return {\n valid: false,\n errors: [{ code: 'JSON_PARSE_ERROR', message: `Invalid JSON: ${e.message}` }],\n warnings: [],\n };\n }\n }\n\n private validatePageSetup(setup: any, errors: ValidationError[], warnings: ValidationWarning[]): void {\n if (setup.size && !VALID_PAGE_SIZES.includes(setup.size)) {\n warnings.push({\n code: 'INVALID_PAGE_SIZE',\n message: `Unknown page size \"${setup.size}\"; valid values: ${VALID_PAGE_SIZES.join(', ')}`,\n path: 'pageSetup.size',\n });\n }\n\n if (setup.orientation && !VALID_ORIENTATIONS.includes(setup.orientation)) {\n errors.push({\n code: 'INVALID_ORIENTATION',\n message: `Invalid orientation \"${setup.orientation}\"; must be \"Portrait\" or \"Landscape\"`,\n path: 'pageSetup.orientation',\n });\n }\n\n if (setup.width != null && (typeof setup.width !== 'number' || setup.width <= 0)) {\n errors.push({ code: 'INVALID_PAGE_WIDTH', message: 'pageSetup.width must be a positive number', path: 'pageSetup.width' });\n }\n\n if (setup.height != null && (typeof setup.height !== 'number' || setup.height <= 0)) {\n errors.push({ code: 'INVALID_PAGE_HEIGHT', message: 'pageSetup.height must be a positive number', path: 'pageSetup.height' });\n }\n\n if (!setup.margins) {\n warnings.push({ code: 'MISSING_MARGINS', message: 'pageSetup.margins is missing; defaults will be used', path: 'pageSetup.margins' });\n }\n }\n\n private validateComponent(comp: any, path: string, errors: ValidationError[], warnings: ValidationWarning[]): void {\n if (!comp || typeof comp !== 'object') {\n errors.push({ code: 'INVALID_COMPONENT', message: `Component at ${path} must be an object`, path });\n return;\n }\n\n // ID\n if (!comp.id) {\n errors.push({ code: 'MISSING_COMPONENT_ID', message: `Component at ${path} is missing required \"id\"`, path, componentId: comp.id });\n }\n\n // Type\n if (!comp.type) {\n errors.push({ code: 'MISSING_COMPONENT_TYPE', message: `Component at ${path} is missing required \"type\"`, path, componentId: comp.id });\n } else if (!VALID_COMPONENT_TYPES.includes(comp.type)) {\n errors.push({\n code: 'INVALID_COMPONENT_TYPE',\n message: `Component \"${comp.id}\" has invalid type \"${comp.type}\"; valid types: ${VALID_COMPONENT_TYPES.join(', ')}`,\n path: `${path}.type`,\n componentId: comp.id,\n });\n }\n\n // Position\n if (!comp.position) {\n errors.push({ code: 'MISSING_POSITION', message: `Component \"${comp.id}\" is missing \"position\"`, path: `${path}.position`, componentId: comp.id });\n } else {\n if (typeof comp.position.x !== 'number') {\n errors.push({ code: 'INVALID_POSITION_X', message: `Component \"${comp.id}\" position.x must be a number`, path: `${path}.position.x`, componentId: comp.id });\n }\n if (typeof comp.position.y !== 'number') {\n errors.push({ code: 'INVALID_POSITION_Y', message: `Component \"${comp.id}\" position.y must be a number`, path: `${path}.position.y`, componentId: comp.id });\n }\n if (!comp.position.unit) {\n warnings.push({ code: 'MISSING_POSITION_UNIT', message: `Component \"${comp.id}\" position.unit is missing; defaulting to \"mm\"`, path: `${path}.position.unit`, componentId: comp.id });\n }\n }\n\n // Size\n if (!comp.size) {\n errors.push({ code: 'MISSING_SIZE', message: `Component \"${comp.id}\" is missing \"size\"`, path: `${path}.size`, componentId: comp.id });\n } else {\n if (typeof comp.size.width !== 'number' || comp.size.width <= 0) {\n errors.push({ code: 'INVALID_SIZE_WIDTH', message: `Component \"${comp.id}\" size.width must be a positive number`, path: `${path}.size.width`, componentId: comp.id });\n }\n if (typeof comp.size.height !== 'number' || comp.size.height <= 0) {\n errors.push({ code: 'INVALID_SIZE_HEIGHT', message: `Component \"${comp.id}\" size.height must be a positive number`, path: `${path}.size.height`, componentId: comp.id });\n }\n if (!comp.size.unit) {\n warnings.push({ code: 'MISSING_SIZE_UNIT', message: `Component \"${comp.id}\" size.unit is missing; defaulting to \"mm\"`, path: `${path}.size.unit`, componentId: comp.id });\n }\n }\n\n // Style\n if (!comp.style) {\n warnings.push({ code: 'MISSING_STYLE', message: `Component \"${comp.id}\" has no style; defaults will be used`, path: `${path}.style`, componentId: comp.id });\n }\n\n // Metadata\n if (!comp.metadata) {\n warnings.push({ code: 'MISSING_COMPONENT_METADATA', message: `Component \"${comp.id}\" is missing metadata; defaults will be applied`, path: `${path}.metadata`, componentId: comp.id });\n }\n\n // zIndex\n if (comp.zIndex == null) {\n warnings.push({ code: 'MISSING_ZINDEX', message: `Component \"${comp.id}\" is missing zIndex; defaulting to 0`, path: `${path}.zIndex`, componentId: comp.id });\n }\n\n // Type-specific validation\n this.validateTypeSpecific(comp, path, errors, warnings);\n\n // Recursive children for containers\n if (comp.type === 'container' && comp.children && Array.isArray(comp.children)) {\n comp.children.forEach((child: any, i: number) => {\n this.validateComponent(child, `${path}.children[${i}]`, errors, warnings);\n });\n }\n }\n\n private validateTypeSpecific(comp: any, path: string, errors: ValidationError[], warnings: ValidationWarning[]): void {\n switch (comp.type) {\n case 'table':\n if (!comp.columns || !Array.isArray(comp.columns) || comp.columns.length === 0) {\n warnings.push({\n code: 'MISSING_TABLE_COLUMNS',\n message: `Table \"${comp.id}\" has no columns defined`,\n path: `${path}.columns`,\n componentId: comp.id,\n });\n }\n break;\n\n case 'chart':\n if (!comp.chartConfig) {\n errors.push({\n code: 'MISSING_CHART_CONFIG',\n message: `Chart \"${comp.id}\" is missing required \"chartConfig\"`,\n path: `${path}.chartConfig`,\n componentId: comp.id,\n });\n } else {\n if (!comp.chartConfig.chartType) {\n errors.push({\n code: 'MISSING_CHART_TYPE',\n message: `Chart \"${comp.id}\" chartConfig is missing \"chartType\"`,\n path: `${path}.chartConfig.chartType`,\n componentId: comp.id,\n });\n }\n if (!comp.chartConfig.dataSourceField) {\n warnings.push({\n code: 'MISSING_CHART_DATA_SOURCE',\n message: `Chart \"${comp.id}\" chartConfig is missing \"dataSourceField\"`,\n path: `${path}.chartConfig.dataSourceField`,\n componentId: comp.id,\n });\n }\n }\n break;\n\n case 'line':\n if (!comp.lineConfig) {\n warnings.push({\n code: 'MISSING_LINE_CONFIG',\n message: `Line \"${comp.id}\" is missing \"lineConfig\"; defaults will be used`,\n path: `${path}.lineConfig`,\n componentId: comp.id,\n });\n }\n break;\n\n case 'shape':\n if (!comp.shapeConfig) {\n warnings.push({\n code: 'MISSING_SHAPE_CONFIG',\n message: `Shape \"${comp.id}\" is missing \"shapeConfig\"; defaults will be used`,\n path: `${path}.shapeConfig`,\n componentId: comp.id,\n });\n }\n break;\n\n case 'image':\n if (!comp.imageConfig && !comp.content && !comp.dataBinding) {\n warnings.push({\n code: 'NO_IMAGE_SOURCE',\n message: `Image \"${comp.id}\" has no imageConfig, content, or dataBinding`,\n path: `${path}`,\n componentId: comp.id,\n });\n }\n break;\n\n case 'list':\n if (!comp.listConfig) {\n warnings.push({\n code: 'MISSING_LIST_CONFIG',\n message: `List \"${comp.id}\" is missing \"listConfig\"; defaults will be used`,\n path: `${path}.listConfig`,\n componentId: comp.id,\n });\n }\n if (!comp.dataBinding?.iteration?.source) {\n warnings.push({\n code: 'MISSING_LIST_DATA_SOURCE',\n message: `List \"${comp.id}\" has no dataBinding.iteration.source`,\n path: `${path}.dataBinding.iteration.source`,\n componentId: comp.id,\n });\n }\n break;\n }\n }\n\n private validateSection(section: any, name: string, errors: ValidationError[], warnings: ValidationWarning[]): void {\n if (typeof section !== 'object') {\n errors.push({ code: 'INVALID_SECTION', message: `${name} must be an object`, path: name });\n return;\n }\n\n if (typeof section.height !== 'number' || section.height <= 0) {\n warnings.push({\n code: 'INVALID_SECTION_HEIGHT',\n message: `${name}.height should be a positive number`,\n path: `${name}.height`,\n });\n }\n\n if (section.components && Array.isArray(section.components)) {\n section.components.forEach((comp: any, i: number) => {\n this.validateComponent(comp, `${name}.components[${i}]`, errors, warnings);\n });\n }\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\r\nimport { SearchMatch } from '../models/report-template.model';\r\n\r\n@Injectable()\r\nexport class ViewerStateService {\r\n // Pagination\r\n readonly currentPage = signal(1);\r\n readonly totalPages = signal(1);\r\n\r\n // Zoom\r\n readonly zoom = signal(100);\r\n readonly fitMode = signal<'none' | 'width' | 'page'>('none');\r\n\r\n // View modes\r\n readonly viewMode = signal<'single' | 'continuous'>('single');\r\n readonly isFullScreen = signal(false);\r\n\r\n // Sidebars\r\n readonly tocSidebarOpen = signal(false);\r\n readonly thumbnailSidebarOpen = signal(false);\r\n\r\n // Search\r\n readonly searchQuery = signal('');\r\n readonly searchMatches = signal<SearchMatch[]>([]);\r\n readonly currentMatchIndex = signal(-1);\r\n readonly searchOpen = signal(false);\r\n\r\n // Theme\r\n readonly ribbonTheme = signal<'light' | 'dark'>('light');\r\n\r\n // Computed\r\n readonly pageDisplay = computed(() => `${this.currentPage()} of ${this.totalPages()}`);\r\n readonly zoomDisplay = computed(() => `${this.zoom()}%`);\r\n readonly matchDisplay = computed(() => {\r\n const matches = this.searchMatches();\r\n const idx = this.currentMatchIndex();\r\n if (matches.length === 0) return 'No matches';\r\n return `${idx + 1} of ${matches.length}`;\r\n });\r\n readonly isFirstPage = computed(() => this.currentPage() <= 1);\r\n readonly isLastPage = computed(() => this.currentPage() >= this.totalPages());\r\n readonly hasSidebarOpen = computed(() => this.tocSidebarOpen() || this.thumbnailSidebarOpen());\r\n readonly isDarkTheme = computed(() => this.ribbonTheme() === 'dark');\r\n\r\n // Navigation\r\n goToPage(page: number): void {\r\n const clamped = Math.max(1, Math.min(page, this.totalPages()));\r\n this.currentPage.set(clamped);\r\n }\r\n\r\n nextPage(): void {\r\n if (!this.isLastPage()) {\r\n this.currentPage.update(p => p + 1);\r\n }\r\n }\r\n\r\n previousPage(): void {\r\n if (!this.isFirstPage()) {\r\n this.currentPage.update(p => p - 1);\r\n }\r\n }\r\n\r\n firstPage(): void {\r\n this.currentPage.set(1);\r\n }\r\n\r\n lastPage(): void {\r\n this.currentPage.set(this.totalPages());\r\n }\r\n\r\n // Zoom\r\n setZoom(level: number): void {\r\n this.zoom.set(Math.max(10, Math.min(400, level)));\r\n this.fitMode.set('none');\r\n }\r\n\r\n zoomIn(): void {\r\n const levels = [25, 50, 75, 100, 125, 150, 200, 300, 400];\r\n const current = this.zoom();\r\n const next = levels.find(l => l > current) || 400;\r\n this.setZoom(next);\r\n }\r\n\r\n zoomOut(): void {\r\n const levels = [25, 50, 75, 100, 125, 150, 200, 300, 400];\r\n const current = this.zoom();\r\n const prev = [...levels].reverse().find(l => l < current) || 25;\r\n this.setZoom(prev);\r\n }\r\n\r\n fitToWidth(): void {\r\n this.fitMode.set('width');\r\n }\r\n\r\n fitToPage(): void {\r\n this.fitMode.set('page');\r\n }\r\n\r\n // View modes\r\n toggleViewMode(): void {\r\n this.viewMode.update(m => m === 'single' ? 'continuous' : 'single');\r\n }\r\n\r\n setViewMode(mode: 'single' | 'continuous'): void {\r\n this.viewMode.set(mode);\r\n }\r\n\r\n toggleFullScreen(): void {\r\n this.isFullScreen.update(v => !v);\r\n }\r\n\r\n // Sidebars\r\n toggleTocSidebar(): void {\r\n const opening = !this.tocSidebarOpen();\r\n this.tocSidebarOpen.set(opening);\r\n if (opening) {\r\n this.thumbnailSidebarOpen.set(false);\r\n }\r\n }\r\n\r\n toggleThumbnailSidebar(): void {\r\n const opening = !this.thumbnailSidebarOpen();\r\n this.thumbnailSidebarOpen.set(opening);\r\n if (opening) {\r\n this.tocSidebarOpen.set(false);\r\n }\r\n }\r\n\r\n closeSidebars(): void {\r\n this.tocSidebarOpen.set(false);\r\n this.thumbnailSidebarOpen.set(false);\r\n }\r\n\r\n // Search\r\n setSearchQuery(query: string): void {\r\n this.searchQuery.set(query);\r\n this.currentMatchIndex.set(query ? 0 : -1);\r\n }\r\n\r\n nextMatch(): void {\r\n const total = this.searchMatches().length;\r\n if (total > 0) {\r\n this.currentMatchIndex.update(i => (i + 1) % total);\r\n }\r\n }\r\n\r\n previousMatch(): void {\r\n const total = this.searchMatches().length;\r\n if (total > 0) {\r\n this.currentMatchIndex.update(i => (i - 1 + total) % total);\r\n }\r\n }\r\n\r\n clearSearch(): void {\r\n this.searchQuery.set('');\r\n this.searchMatches.set([]);\r\n this.currentMatchIndex.set(-1);\r\n this.searchOpen.set(false);\r\n }\r\n\r\n toggleSearch(): void {\r\n const opening = !this.searchOpen();\r\n this.searchOpen.set(opening);\r\n if (!opening) {\r\n this.clearSearch();\r\n }\r\n }\r\n\r\n // Theme\r\n toggleTheme(): void {\r\n this.ribbonTheme.update(t => t === 'light' ? 'dark' : 'light');\r\n }\r\n\r\n setTheme(theme: 'light' | 'dark'): void {\r\n this.ribbonTheme.set(theme);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SearchMatch } from '../models/report-template.model';\r\n\r\n@Injectable()\r\nexport class SearchService {\r\n private highlights: HTMLElement[] = [];\r\n\r\n search(query: string, container: HTMLElement): SearchMatch[] {\r\n this.clearHighlights();\r\n if (!query || !query.trim()) return [];\r\n\r\n const matches: SearchMatch[] = [];\r\n const escapedQuery = this.escapeRegex(query);\r\n const regex = new RegExp(escapedQuery, 'gi');\r\n\r\n const walker = document.createTreeWalker(\r\n container,\r\n NodeFilter.SHOW_TEXT,\r\n {\r\n acceptNode: (node: Text) => {\r\n // Skip nodes inside marks (our own highlights) or script/style tags\r\n const parent = node.parentElement;\r\n if (!parent) return NodeFilter.FILTER_REJECT;\r\n const tag = parent.tagName?.toLowerCase();\r\n if (tag === 'script' || tag === 'style' || tag === 'mark') {\r\n return NodeFilter.FILTER_REJECT;\r\n }\r\n return (node.textContent && node.textContent.trim().length > 0)\r\n ? NodeFilter.FILTER_ACCEPT\r\n : NodeFilter.FILTER_REJECT;\r\n }\r\n }\r\n );\r\n\r\n let textNode: Text | null;\r\n while ((textNode = walker.nextNode() as Text | null)) {\r\n const text = textNode.textContent || '';\r\n let match: RegExpExecArray | null;\r\n regex.lastIndex = 0;\r\n\r\n while ((match = regex.exec(text)) !== null) {\r\n const pageIndex = this.getPageIndex(textNode);\r\n matches.push({\r\n textNode,\r\n startOffset: match.index,\r\n endOffset: match.index + match[0].length,\r\n pageIndex,\r\n });\r\n }\r\n }\r\n\r\n this.applyHighlights(matches);\r\n return matches;\r\n }\r\n\r\n highlightCurrentMatch(index: number): void {\r\n // Reverse the stored order since we apply in reverse\r\n const reversed = [...this.highlights].reverse();\r\n reversed.forEach((mark, i) => {\r\n if (i === index) {\r\n mark.classList.add('rv-search-active');\r\n mark.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n } else {\r\n mark.classList.remove('rv-search-active');\r\n }\r\n });\r\n }\r\n\r\n clearHighlights(): void {\r\n this.highlights.forEach(mark => {\r\n const parent = mark.parentNode;\r\n if (parent) {\r\n const textNode = document.createTextNode(mark.textContent || '');\r\n parent.replaceChild(textNode, mark);\r\n parent.normalize();\r\n }\r\n });\r\n this.highlights = [];\r\n }\r\n\r\n private applyHighlights(matches: SearchMatch[]): void {\r\n // Group matches by text node\r\n const nodeMap = new Map<Text, SearchMatch[]>();\r\n for (const match of matches) {\r\n const existing = nodeMap.get(match.textNode) || [];\r\n existing.push(match);\r\n nodeMap.set(match.textNode, existing);\r\n }\r\n\r\n // Process each node. Process offsets in reverse to preserve earlier offsets.\r\n for (const [textNode, nodeMatches] of nodeMap) {\r\n const sorted = [...nodeMatches].sort((a, b) => b.startOffset - a.startOffset);\r\n for (const m of sorted) {\r\n try {\r\n const range = document.createRange();\r\n range.setStart(textNode.parentNode ? textNode : textNode, m.startOffset);\r\n range.setEnd(textNode.parentNode ? textNode : textNode, m.endOffset);\r\n\r\n const mark = document.createElement('mark');\r\n mark.className = 'rv-search-highlight';\r\n range.surroundContents(mark);\r\n this.highlights.push(mark);\r\n } catch {\r\n // Range might be invalid if DOM changed; skip silently\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getPageIndex(node: Node): number {\r\n let current: Node | null = node;\r\n while (current) {\r\n if (current instanceof HTMLElement && current.hasAttribute('data-page-index')) {\r\n return parseInt(current.getAttribute('data-page-index')!, 10);\r\n }\r\n current = current.parentNode;\r\n }\r\n return 0;\r\n }\r\n\r\n private escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PageSetup, PAGE_SIZES } from '../models/report-template.model';\r\n\r\n@Injectable()\r\nexport class PrintService {\r\n private printStyleId = 'rv-print-styles';\r\n\r\n print(viewerElement: HTMLElement, pageSetup?: PageSetup): void {\r\n this.injectPrintStyles(viewerElement, pageSetup);\r\n window.print();\r\n }\r\n\r\n private injectPrintStyles(viewerElement: HTMLElement, pageSetup?: PageSetup): void {\r\n // Remove existing print styles if any\r\n this.cleanupPrintStyles();\r\n\r\n // Add a data attribute to identify the viewer for print\r\n viewerElement.setAttribute('data-rv-printing', 'true');\r\n\r\n const pageRule = this.buildPageRule(pageSetup);\r\n\r\n const style = document.createElement('style');\r\n style.id = this.printStyleId;\r\n style.textContent = `\r\n @media print {\r\n ${pageRule}\r\n\r\n /* Hide everything except the viewer */\r\n body > *:not(:has([data-rv-printing])) {\r\n display: none !important;\r\n }\r\n\r\n /* Hide toolbar and sidebars */\r\n rv-viewer-toolbar,\r\n .rv-sidebar-wrapper,\r\n rv-toc-sidebar,\r\n rv-thumbnail-sidebar,\r\n .rv-search-highlight {\r\n display: none !important;\r\n }\r\n\r\n /* Reset viewer layout for print */\r\n [data-rv-printing] {\r\n position: static !important;\r\n width: 100% !important;\r\n height: auto !important;\r\n overflow: visible !important;\r\n }\r\n\r\n .rv-viewer-root {\r\n height: auto !important;\r\n }\r\n\r\n .rv-viewer-body {\r\n height: auto !important;\r\n overflow: visible !important;\r\n }\r\n\r\n .rv-page-container {\r\n overflow: visible !important;\r\n padding: 0 !important;\r\n background: white !important;\r\n }\r\n\r\n .rv-page-wrapper {\r\n transform: none !important;\r\n page-break-after: always;\r\n box-shadow: none !important;\r\n margin: 0 !important;\r\n }\r\n\r\n .rv-page-wrapper:last-child {\r\n page-break-after: avoid;\r\n }\r\n\r\n .rv-page {\r\n box-shadow: none !important;\r\n }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n\r\n // Cleanup after print\r\n const cleanup = () => {\r\n this.cleanupPrintStyles();\r\n viewerElement.removeAttribute('data-rv-printing');\r\n window.removeEventListener('afterprint', cleanup);\r\n };\r\n window.addEventListener('afterprint', cleanup);\r\n }\r\n\r\n private buildPageRule(pageSetup?: PageSetup): string {\r\n if (!pageSetup) {\r\n return '@page { size: A4 portrait; margin: 25.4mm; }';\r\n }\r\n\r\n // Build the size value\r\n const sizeValue = this.getPageSizeCSS(pageSetup);\r\n\r\n // Build the margin value\r\n const margins = pageSetup.margins;\r\n const marginValue = `${margins.top}mm ${margins.right}mm ${margins.bottom}mm ${margins.left}mm`;\r\n\r\n return `@page { size: ${sizeValue}; margin: ${marginValue}; }`;\r\n }\r\n\r\n private getPageSizeCSS(pageSetup: PageSetup): string {\r\n const orientation = pageSetup.orientation === 'Landscape' ? 'landscape' : 'portrait';\r\n\r\n if (pageSetup.size === 'Custom') {\r\n // For custom sizes, use explicit width and height in mm\r\n const width = pageSetup.width || 210;\r\n const height = pageSetup.height || 297;\r\n // CSS @page size with explicit dimensions doesn't use orientation keyword;\r\n // instead we swap width/height for landscape\r\n if (orientation === 'landscape') {\r\n return `${Math.max(width, height)}mm ${Math.min(width, height)}mm`;\r\n }\r\n return `${Math.min(width, height)}mm ${Math.max(width, height)}mm`;\r\n }\r\n\r\n // Named page sizes: A3, A4, A5, letter, legal + orientation\r\n const sizeMap: Record<string, string> = {\r\n 'A2': 'A3', // CSS @page doesn't support A2, fall back to closest\r\n 'A3': 'A3',\r\n 'A4': 'A4',\r\n 'A5': 'A5',\r\n 'Letter': 'letter',\r\n 'Legal': 'legal',\r\n };\r\n\r\n const cssSize = sizeMap[pageSetup.size] || 'A4';\r\n return `${cssSize} ${orientation}`;\r\n }\r\n\r\n private cleanupPrintStyles(): void {\r\n const existing = document.getElementById(this.printStyleId);\r\n if (existing) {\r\n existing.remove();\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PrintService } from './print.service';\r\n\r\n@Injectable()\r\nexport class ExportService {\r\n constructor(private printService: PrintService) {}\r\n\r\n exportToPDF(viewerElement: HTMLElement): void {\r\n this.printService.print(viewerElement);\r\n }\r\n\r\n async exportToPNG(pageElement: HTMLElement, fileName: string = 'report-page'): Promise<void> {\r\n try {\r\n // Use Function constructor to create a dynamic import that TypeScript won't statically analyze\r\n const importFn = new Function('specifier', 'return import(specifier)');\r\n const html2canvasModule = await importFn('html2canvas');\r\n const html2canvas = html2canvasModule.default || html2canvasModule;\r\n\r\n const canvas = await html2canvas(pageElement, {\r\n scale: 2,\r\n useCORS: true,\r\n logging: false,\r\n backgroundColor: '#ffffff',\r\n });\r\n\r\n const link = document.createElement('a');\r\n link.download = `${fileName}.png`;\r\n link.href = canvas.toDataURL('image/png');\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } catch {\r\n // html2canvas not available - use Canvas API fallback\r\n this.exportToPNGFallback(pageElement, fileName);\r\n }\r\n }\r\n\r\n private exportToPNGFallback(element: HTMLElement, fileName: string): void {\r\n // Use the browser's native capabilities via SVG foreignObject\r\n const width = element.scrollWidth;\r\n const height = element.scrollHeight;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width * 2;\r\n canvas.height = height * 2;\r\n const ctx = canvas.getContext('2d');\r\n\r\n if (!ctx) {\r\n console.warn('PNG export not supported in this browser');\r\n return;\r\n }\r\n\r\n ctx.scale(2, 2);\r\n ctx.fillStyle = '#ffffff';\r\n ctx.fillRect(0, 0, width, height);\r\n\r\n // Serialize the element to SVG foreignObject\r\n const data = new XMLSerializer().serializeToString(element);\r\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">\r\n <foreignObject width=\"100%\" height=\"100%\">\r\n <div xmlns=\"http://www.w3.org/1999/xhtml\">${data}</div>\r\n </foreignObject>\r\n </svg>`;\r\n\r\n const img = new Image();\r\n const blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8' });\r\n const url = URL.createObjectURL(blob);\r\n\r\n img.onload = () => {\r\n ctx.drawImage(img, 0, 0);\r\n URL.revokeObjectURL(url);\r\n\r\n const link = document.createElement('a');\r\n link.download = `${fileName}.png`;\r\n link.href = canvas.toDataURL('image/png');\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n };\r\n\r\n img.onerror = () => {\r\n URL.revokeObjectURL(url);\r\n console.warn('PNG export failed. Install html2canvas for better support: npm install html2canvas');\r\n };\r\n\r\n img.src = url;\r\n }\r\n}\r\n","import {\r\n Component, ChangeDetectionStrategy, inject, output, signal,\r\n ViewChild, ElementRef, AfterViewInit\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { ViewerStateService } from '../services/viewer-state.service';\r\n\r\n@Component({\r\n selector: 'rv-viewer-toolbar',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatToolbarModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <mat-toolbar class=\"rv-toolbar\">\r\n\r\n <!-- Brand -->\r\n <div class=\"rv-toolbar-section rv-brand\">\r\n <mat-icon class=\"rv-brand-icon\">article</mat-icon>\r\n <span class=\"rv-brand-text\">Report Viewer</span>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Page Navigation -->\r\n <div class=\"rv-toolbar-section rv-nav\">\r\n <button mat-icon-button matTooltip=\"First Page\"\r\n (click)=\"state.firstPage()\"\r\n [disabled]=\"state.isFirstPage()\">\r\n <mat-icon>first_page</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Previous Page\"\r\n (click)=\"state.previousPage()\"\r\n [disabled]=\"state.isFirstPage()\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n\r\n <div class=\"rv-page-indicator\">\r\n <input type=\"number\" class=\"rv-page-input\"\r\n [ngModel]=\"state.currentPage()\"\r\n (ngModelChange)=\"state.goToPage($event)\"\r\n [min]=\"1\" [max]=\"state.totalPages()\" />\r\n <span class=\"rv-page-sep\">of</span>\r\n <span class=\"rv-page-total\">{{ state.totalPages() }}</span>\r\n </div>\r\n\r\n <button mat-icon-button matTooltip=\"Next Page\"\r\n (click)=\"state.nextPage()\"\r\n [disabled]=\"state.isLastPage()\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Last Page\"\r\n (click)=\"state.lastPage()\"\r\n [disabled]=\"state.isLastPage()\">\r\n <mat-icon>last_page</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Zoom -->\r\n <div class=\"rv-toolbar-section rv-zoom\">\r\n <button mat-icon-button matTooltip=\"Zoom Out\" (click)=\"state.zoomOut()\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n\r\n <button mat-button [matMenuTriggerFor]=\"zoomMenu\" class=\"rv-zoom-btn\">\r\n {{ state.zoom() }}%\r\n <mat-icon class=\"rv-dropdown-arrow\">arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #zoomMenu=\"matMenu\" class=\"rv-zoom-menu\">\r\n @for (level of zoomLevels; track level) {\r\n <button mat-menu-item (click)=\"state.setZoom(level)\"\r\n [class.rv-active-item]=\"state.zoom() === level\">\r\n {{ level }}%\r\n </button>\r\n }\r\n </mat-menu>\r\n\r\n <button mat-icon-button matTooltip=\"Zoom In\" (click)=\"state.zoomIn()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n\r\n <button mat-icon-button matTooltip=\"Fit to Width\" (click)=\"state.fitToWidth()\">\r\n <mat-icon>width_normal</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Fit to Page\" (click)=\"state.fitToPage()\">\r\n <mat-icon>fit_screen</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Print -->\r\n <div class=\"rv-toolbar-section\">\r\n <button mat-icon-button matTooltip=\"Print\" (click)=\"printClicked.emit()\">\r\n <mat-icon>print</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Export -->\r\n <div class=\"rv-toolbar-section\">\r\n <button mat-button [matMenuTriggerFor]=\"exportMenu\" class=\"rv-export-btn\" matTooltip=\"Export\">\r\n <mat-icon>download</mat-icon>\r\n <span class=\"rv-btn-label\">Export</span>\r\n <mat-icon class=\"rv-dropdown-arrow\">arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #exportMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"exportClicked.emit('pdf')\">\r\n <mat-icon>picture_as_pdf</mat-icon>\r\n <span>PDF Document</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportClicked.emit('xlsx')\">\r\n <mat-icon>table_chart</mat-icon>\r\n <span>Excel (.xlsx)</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportClicked.emit('docx')\">\r\n <mat-icon>description</mat-icon>\r\n <span>Word (.docx)</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportClicked.emit('csv')\">\r\n <mat-icon>grid_on</mat-icon>\r\n <span>CSV</span>\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"exportClicked.emit('png')\">\r\n <mat-icon>image</mat-icon>\r\n <span>PNG Image</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Search -->\r\n <div class=\"rv-toolbar-section rv-search\">\r\n @if (!state.searchOpen()) {\r\n <button mat-icon-button matTooltip=\"Search (Ctrl+F)\" (click)=\"openSearch()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n } @else {\r\n <div class=\"rv-search-box\">\r\n <mat-icon class=\"rv-search-icon\">search</mat-icon>\r\n <input type=\"text\" class=\"rv-search-input\"\r\n placeholder=\"Find in report...\"\r\n [ngModel]=\"state.searchQuery()\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n (keydown.enter)=\"state.nextMatch()\"\r\n (keydown.escape)=\"closeSearch()\"\r\n #searchInput />\r\n @if (state.searchMatches().length > 0) {\r\n <span class=\"rv-match-count\">{{ state.matchDisplay() }}</span>\r\n }\r\n <button mat-icon-button matTooltip=\"Previous Match\"\r\n (click)=\"state.previousMatch()\"\r\n [disabled]=\"state.searchMatches().length === 0\"\r\n class=\"rv-search-nav-btn\">\r\n <mat-icon>keyboard_arrow_up</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Next Match\"\r\n (click)=\"state.nextMatch()\"\r\n [disabled]=\"state.searchMatches().length === 0\"\r\n class=\"rv-search-nav-btn\">\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Close Search\"\r\n (click)=\"closeSearch()\"\r\n class=\"rv-search-nav-btn\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Spacer -->\r\n <span class=\"rv-spacer\"></span>\r\n\r\n <!-- View Mode -->\r\n <div class=\"rv-toolbar-section rv-view\">\r\n <mat-button-toggle-group [value]=\"state.viewMode()\"\r\n (change)=\"state.setViewMode($event.value)\"\r\n class=\"rv-view-toggle\">\r\n <mat-button-toggle value=\"single\" matTooltip=\"Single Page\">\r\n <mat-icon>crop_portrait</mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"continuous\" matTooltip=\"Continuous Scroll\">\r\n <mat-icon>view_day</mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n\r\n <button mat-icon-button matTooltip=\"Full Screen\"\r\n (click)=\"state.toggleFullScreen()\">\r\n <mat-icon>{{ state.isFullScreen() ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Sidebars -->\r\n <div class=\"rv-toolbar-section rv-sidebars\">\r\n <button mat-icon-button matTooltip=\"Document Map\"\r\n (click)=\"state.toggleTocSidebar()\"\r\n [class.rv-toggle-active]=\"state.tocSidebarOpen()\">\r\n <mat-icon>toc</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Page Thumbnails\"\r\n (click)=\"state.toggleThumbnailSidebar()\"\r\n [class.rv-toggle-active]=\"state.thumbnailSidebarOpen()\">\r\n <mat-icon>view_module</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <mat-divider vertical class=\"rv-divider\"></mat-divider>\r\n\r\n <!-- Theme Toggle -->\r\n <div class=\"rv-toolbar-section\">\r\n <button mat-icon-button matTooltip=\"Toggle Theme\" (click)=\"state.toggleTheme()\">\r\n <mat-icon>{{ state.isDarkTheme() ? 'light_mode' : 'dark_mode' }}</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </mat-toolbar>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n --rv-tb-bg: #ffffff;\r\n --rv-tb-bg-elevated: #f5f5f5;\r\n --rv-tb-text: #333333;\r\n --rv-tb-text-secondary: #666666;\r\n --rv-tb-icon: #555555;\r\n --rv-tb-icon-active: #1976d2;\r\n --rv-tb-border: #e0e0e0;\r\n --rv-tb-hover: rgba(0, 0, 0, 0.04);\r\n --rv-tb-active: rgba(25, 118, 210, 0.1);\r\n --rv-tb-input-bg: #f0f0f0;\r\n --rv-tb-input-border: #d0d0d0;\r\n --rv-tb-search-bg: #f5f5f5;\r\n }\r\n\r\n :host-context(.rv-theme-dark) {\r\n --rv-tb-bg: #1e1e2d;\r\n --rv-tb-bg-elevated: #2a2a3d;\r\n --rv-tb-text: #e0e0e0;\r\n --rv-tb-text-secondary: #a0a0b0;\r\n --rv-tb-icon: #b0b0c0;\r\n --rv-tb-icon-active: #64b5f6;\r\n --rv-tb-border: #3a3a4a;\r\n --rv-tb-hover: rgba(255, 255, 255, 0.06);\r\n --rv-tb-active: rgba(100, 181, 246, 0.15);\r\n --rv-tb-input-bg: #2a2a3d;\r\n --rv-tb-input-border: #4a4a5a;\r\n --rv-tb-search-bg: #2a2a3d;\r\n }\r\n\r\n .rv-toolbar {\r\n background: var(--rv-tb-bg) !important;\r\n color: var(--rv-tb-text) !important;\r\n border-bottom: 1px solid var(--rv-tb-border);\r\n height: 48px;\r\n min-height: 48px !important;\r\n max-height: 48px !important;\r\n padding: 0 8px !important;\r\n display: flex;\r\n align-items: center;\r\n gap: 2px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\r\n z-index: 100;\r\n }\r\n\r\n .rv-toolbar-section {\r\n display: flex;\r\n align-items: center;\r\n gap: 1px;\r\n }\r\n\r\n .rv-divider {\r\n height: 28px !important;\r\n margin: 0 4px !important;\r\n border-color: var(--rv-tb-border) !important;\r\n }\r\n\r\n .rv-spacer {\r\n flex: 1;\r\n }\r\n\r\n /* Brand */\r\n .rv-brand {\r\n gap: 6px;\r\n padding: 0 4px;\r\n }\r\n\r\n .rv-brand-icon {\r\n color: #1976d2 !important;\r\n font-size: 22px;\r\n width: 22px;\r\n height: 22px;\r\n }\r\n\r\n .rv-brand-text {\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: var(--rv-tb-text);\r\n white-space: nowrap;\r\n letter-spacing: 0.2px;\r\n }\r\n\r\n /* Icon buttons */\r\n .rv-toolbar :host ::ng-deep .mat-mdc-icon-button {\r\n width: 34px;\r\n height: 34px;\r\n padding: 0;\r\n line-height: 34px;\r\n }\r\n\r\n .rv-toolbar .mat-mdc-icon-button {\r\n width: 34px;\r\n height: 34px;\r\n padding: 0;\r\n color: var(--rv-tb-icon);\r\n }\r\n\r\n .rv-toolbar .mat-mdc-icon-button:hover:not([disabled]) {\r\n background: var(--rv-tb-hover);\r\n border-radius: 6px;\r\n }\r\n\r\n .rv-toolbar .mat-mdc-icon-button[disabled] {\r\n opacity: 0.35;\r\n }\r\n\r\n .rv-toolbar .mat-icon {\r\n color: var(--rv-tb-icon);\r\n font-size: 20px;\r\n width: 20px;\r\n height: 20px;\r\n }\r\n\r\n /* Page indicator */\r\n .rv-page-indicator {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 0 4px;\r\n }\r\n\r\n .rv-page-input {\r\n width: 42px;\r\n height: 28px;\r\n text-align: center;\r\n border: 1px solid var(--rv-tb-input-border);\r\n border-radius: 4px;\r\n background: var(--rv-tb-input-bg);\r\n color: var(--rv-tb-text);\r\n font-size: 12px;\r\n font-family: inherit;\r\n outline: none;\r\n -moz-appearance: textfield;\r\n }\r\n\r\n .rv-page-input::-webkit-outer-spin-button,\r\n .rv-page-input::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n\r\n .rv-page-input:focus {\r\n border-color: var(--rv-tb-icon-active);\r\n box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.15);\r\n }\r\n\r\n .rv-page-sep {\r\n font-size: 12px;\r\n color: var(--rv-tb-text-secondary);\r\n }\r\n\r\n .rv-page-total {\r\n font-size: 12px;\r\n font-weight: 500;\r\n color: var(--rv-tb-text);\r\n min-width: 16px;\r\n }\r\n\r\n /* Zoom button */\r\n .rv-zoom-btn {\r\n min-width: 70px !important;\r\n height: 30px;\r\n font-size: 12px;\r\n font-weight: 500;\r\n color: var(--rv-tb-text) !important;\r\n padding: 0 4px 0 8px !important;\r\n line-height: 30px;\r\n border-radius: 4px;\r\n }\r\n\r\n .rv-zoom-btn:hover {\r\n background: var(--rv-tb-hover) !important;\r\n }\r\n\r\n .rv-dropdown-arrow {\r\n font-size: 18px !important;\r\n width: 18px !important;\r\n height: 18px !important;\r\n margin-left: -2px;\r\n }\r\n\r\n /* Export button */\r\n .rv-export-btn {\r\n height: 32px;\r\n font-size: 12px;\r\n color: var(--rv-tb-text) !important;\r\n padding: 0 8px !important;\r\n line-height: 32px;\r\n border-radius: 4px;\r\n }\r\n\r\n .rv-export-btn:hover {\r\n background: var(--rv-tb-hover) !important;\r\n }\r\n\r\n .rv-btn-label {\r\n font-size: 12px;\r\n margin: 0 2px;\r\n }\r\n\r\n /* Search */\r\n .rv-search-box {\r\n display: flex;\r\n align-items: center;\r\n height: 32px;\r\n background: var(--rv-tb-search-bg);\r\n border: 1px solid var(--rv-tb-input-border);\r\n border-radius: 6px;\r\n padding: 0 4px 0 8px;\r\n gap: 2px;\r\n transition: border-color 0.2s;\r\n }\r\n\r\n .rv-search-box:focus-within {\r\n border-color: var(--rv-tb-icon-active);\r\n box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.12);\r\n }\r\n\r\n .rv-search-icon {\r\n font-size: 18px !important;\r\n width: 18px !important;\r\n height: 18px !important;\r\n color: var(--rv-tb-text-secondary) !important;\r\n }\r\n\r\n .rv-search-input {\r\n width: 150px;\r\n height: 28px;\r\n border: none;\r\n background: transparent;\r\n color: var(--rv-tb-text);\r\n font-size: 12px;\r\n font-family: inherit;\r\n outline: none;\r\n padding: 0 4px;\r\n }\r\n\r\n .rv-search-input::placeholder {\r\n color: var(--rv-tb-text-secondary);\r\n }\r\n\r\n .rv-match-count {\r\n font-size: 11px;\r\n color: var(--rv-tb-text-secondary);\r\n white-space: nowrap;\r\n padding: 0 4px;\r\n min-width: fit-content;\r\n }\r\n\r\n .rv-search-nav-btn {\r\n width: 26px !important;\r\n height: 26px !important;\r\n }\r\n\r\n .rv-search-nav-btn .mat-icon {\r\n font-size: 18px !important;\r\n width: 18px !important;\r\n height: 18px !important;\r\n }\r\n\r\n /* View toggle */\r\n .rv-view-toggle {\r\n height: 30px;\r\n border-radius: 6px;\r\n overflow: hidden;\r\n }\r\n\r\n .rv-view-toggle .mat-button-toggle {\r\n height: 30px;\r\n }\r\n\r\n .rv-view-toggle .mat-button-toggle-appearance-standard .mat-button-toggle-label-content {\r\n line-height: 30px;\r\n padding: 0 8px;\r\n }\r\n\r\n .rv-view-toggle .mat-icon {\r\n font-size: 18px;\r\n width: 18px;\r\n height: 18px;\r\n }\r\n\r\n /* Active toggle */\r\n .rv-toggle-active {\r\n background: var(--rv-tb-active) !important;\r\n border-radius: 6px;\r\n }\r\n\r\n .rv-toggle-active .mat-icon {\r\n color: var(--rv-tb-icon-active) !important;\r\n }\r\n\r\n /* Active menu item */\r\n .rv-active-item {\r\n background: var(--rv-tb-active) !important;\r\n font-weight: 600;\r\n }\r\n `],\r\n})\r\nexport class ViewerToolbarComponent implements AfterViewInit {\r\n state = inject(ViewerStateService);\r\n\r\n printClicked = output<void>();\r\n exportClicked = output<string>();\r\n searchQueryChanged = output<string>();\r\n\r\n @ViewChild('searchInput') searchInputRef?: ElementRef<HTMLInputElement>;\r\n\r\n zoomLevels = [25, 50, 75, 100, 125, 150, 200, 300, 400];\r\n\r\n ngAfterViewInit(): void {\r\n // Focus search input when search opens\r\n }\r\n\r\n openSearch(): void {\r\n this.state.searchOpen.set(true);\r\n setTimeout(() => this.searchInputRef?.nativeElement?.focus(), 50);\r\n }\r\n\r\n closeSearch(): void {\r\n this.state.clearSearch();\r\n this.searchQueryChanged.emit('');\r\n }\r\n\r\n onSearchChange(query: string): void {\r\n this.state.setSearchQuery(query);\r\n this.searchQueryChanged.emit(query);\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\n\n@Component({\n selector: 'rv-text-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<div class=\"rv-text-content\" [innerHTML]=\"resolvedContent\"></div>`,\n styles: [`\n .rv-text-content {\n width: 100%;\n height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n }\n `]\n})\nexport class TextRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n\n private dataResolver = inject(DataResolverService);\n\n get resolvedContent(): string {\n return this.dataResolver.resolveContent(\n this.component, this.data, this.pageNumber, this.totalPages, this.reportTitle\n );\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\nimport { StyleMapperService } from '../../services/style-mapper.service';\n\n@Component({\n selector: 'rv-table-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (component.columns) {\n @if (isDynamic) {\n <table class=\"rv-table rv-dynamic-table\" [ngStyle]=\"tableStyle\">\n <thead>\n <tr>\n @for (field of dynamicHeaders; track field; let colIdx = $index) {\n <th [ngStyle]=\"getHeaderStyle(colIdx)\">{{ field }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData; track rowIdx; let rowIdx = $index) {\n <tr [ngStyle]=\"getRowStyle(rowIdx)\">\n @for (field of dynamicHeaders; track field; let colIdx = $index) {\n <td [ngStyle]=\"getDynamicCellStyle(colIdx)\">{{ getCellValue(row, field) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <table class=\"rv-table\" [ngStyle]=\"tableStyle\">\n <thead>\n <tr>\n @for (col of component.columns; track col.id; let colIdx = $index) {\n <th [ngStyle]=\"getHeaderStyle(colIdx, col)\">{{ col.header }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData; track rowIdx; let rowIdx = $index) {\n <tr [ngStyle]=\"getRowStyle(rowIdx)\">\n @for (col of component.columns; track col.id; let colIdx = $index) {\n <td [ngStyle]=\"getBoundCellStyle(colIdx, col)\">{{ formatCell(row, col) }}</td>\n }\n </tr>\n }\n @if (tableData.length === 0) {\n <tr>\n <td [attr.colspan]=\"component.columns!.length\" class=\"rv-no-data\">No data available</td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n `,\n styles: [`\n .rv-table {\n width: 100%;\n border-collapse: collapse;\n font-size: inherit;\n }\n .rv-table th, .rv-table td {\n border: 1px solid #ddd;\n padding: 6px 8px;\n text-align: left;\n }\n .rv-table th {\n background: #f5f5f5;\n font-weight: 600;\n }\n .rv-no-data {\n text-align: center;\n color: #999;\n font-style: italic;\n padding: 20px;\n }\n `]\n})\nexport class TableRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n\n private dataResolver = inject(DataResolverService);\n private styleMapper = inject(StyleMapperService);\n\n get tableData(): any[] {\n return this.dataResolver.resolveTableData(this.component, this.data);\n }\n\n get isDynamic(): boolean {\n return this.dataResolver.shouldShowDynamicTable(this.component, this.data);\n }\n\n get dynamicHeaders(): string[] {\n return this.dataResolver.getDynamicTableHeaders(this.component, this.data);\n }\n\n get tableStyle(): Record<string, string> {\n return this.styleMapper.mapTableStyle(this.component);\n }\n\n getHeaderStyle(colIndex: number, col?: any): Record<string, string> {\n return this.styleMapper.mapHeaderStyle(this.component, colIndex, col);\n }\n\n getRowStyle(rowIndex: number): Record<string, string> {\n return this.styleMapper.mapRowStyle(this.component, rowIndex, this.tableData.length);\n }\n\n getBoundCellStyle(colIndex: number, col?: any): Record<string, string> {\n return this.styleMapper.mapCellStyle(this.component, colIndex, col);\n }\n\n getDynamicCellStyle(colIndex: number): Record<string, string> {\n return this.styleMapper.mapCellStyle(this.component, colIndex);\n }\n\n formatCell(row: any, col: any): string {\n return this.dataResolver.formatCellValue(row, col);\n }\n\n getCellValue(row: any, field: string): string {\n return this.dataResolver.getDynamicCellValue(row, field);\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject, OnChanges, SimpleChanges, signal, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport type { EChartsOption } from 'echarts';\nimport * as echarts from 'echarts/core';\nimport { BarChart, LineChart, PieChart, ScatterChart, RadarChart, FunnelChart, GaugeChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent, TitleComponent, DataZoomComponent, MarkLineComponent, ToolboxComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { ComponentModel } from '../../models/component.model';\nimport { ChartOptionsBuilderService } from '../../services/chart-options-builder.service';\nimport { MM_TO_PX } from '../../constants/page-sizes';\n\necharts.use([\n BarChart, LineChart, PieChart, ScatterChart, RadarChart, FunnelChart, GaugeChart,\n GridComponent, TooltipComponent, LegendComponent, TitleComponent, DataZoomComponent, MarkLineComponent, ToolboxComponent,\n CanvasRenderer\n]);\n\n@Component({\n selector: 'rv-chart-renderer',\n standalone: true,\n imports: [CommonModule, NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (chartOptions) {\n <div class=\"rv-chart-container\"\n echarts\n [options]=\"chartOptions\">\n </div>\n } @else {\n <div class=\"rv-chart-placeholder\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"#999\">\n <path d=\"M5 9.2h3V19H5zM10.6 5h2.8v14h-2.8zm5.6 8H19v6h-2.8z\"/>\n </svg>\n <span>Chart</span>\n </div>\n }\n `,\n styles: [`\n :host { display: block; width: 100%; height: 100%; }\n .rv-chart-container { width: 100%; height: 100%; }\n .rv-chart-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n background: #f5f5f5;\n border: 1px solid #ddd;\n }\n .rv-chart-placeholder span { font-size: 10px; color: #666; margin-top: 4px; }\n `]\n})\nexport class ChartRendererComponent implements OnChanges {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n\n chartOptions: EChartsOption | null = null;\n\n private chartBuilder = inject(ChartOptionsBuilderService);\n\n ngOnChanges(changes: SimpleChanges): void {\n this.buildChart();\n }\n\n private buildChart(): void {\n if (!this.component.chartConfig) {\n this.chartOptions = null;\n return;\n }\n\n const config = this.component.chartConfig;\n let chartData: any[] | undefined;\n\n if (this.data && config.dataSourceField) {\n chartData = this.chartBuilder.resolveChartData(this.data, config);\n }\n\n this.chartOptions = this.chartBuilder.buildOptions(\n config,\n chartData && chartData.length > 0 ? chartData : undefined\n );\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\n\n@Component({\n selector: 'rv-image-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-image\">\n @if (imageUrl && !imageError()) {\n <img [src]=\"imageUrl\"\n [style.object-fit]=\"component.imageConfig?.objectFit || 'contain'\"\n alt=\"Image\"\n (error)=\"imageError.set(true)\">\n } @else {\n <div class=\"rv-image-placeholder\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"#999\">\n <path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"/>\n </svg>\n </div>\n }\n </div>\n `,\n styles: [`\n .rv-image {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .rv-image img {\n max-width: 100%;\n max-height: 100%;\n }\n .rv-image-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n background: #f0f0f0;\n border: 1px dashed #ccc;\n }\n `]\n})\nexport class ImageRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n\n imageError = signal(false);\n\n private dataResolver = inject(DataResolverService);\n\n get imageUrl(): string {\n if (this.component.imageConfig?.imageUrl) {\n return this.component.imageConfig.imageUrl;\n }\n return this.dataResolver.resolveContent(\n this.component, this.data, this.pageNumber, this.totalPages, this.reportTitle\n );\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, OnChanges, SimpleChanges, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\nimport QRCode from 'qrcode';\n\n@Component({\n selector: 'rv-qrcode-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (qrDataUrl()) {\n <img [src]=\"qrDataUrl()\" alt=\"QR Code\" class=\"rv-qr-image\">\n } @else {\n <div class=\"rv-qr-placeholder\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"#333\">\n <path d=\"M3 11h8V3H3v8zm2-6h4v4H5V5zM3 21h8v-8H3v8zm2-6h4v4H5v-4zM13 3v8h8V3h-8zm6 6h-4V5h4v4zM13 13h2v2h-2zM15 15h2v2h-2zM13 17h2v2h-2zM17 13h2v2h-2zM19 15h2v2h-2zM17 17h2v2h-2zM15 19h2v2h-2zM19 19h2v2h-2z\"/>\n </svg>\n </div>\n }\n `,\n styles: [`\n :host { display: block; width: 100%; height: 100%; }\n .rv-qr-image { width: 100%; height: 100%; object-fit: contain; display: block; }\n .rv-qr-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n background: #f5f5f5;\n border: 1px solid #ddd;\n }\n `]\n})\nexport class QrcodeRendererComponent implements OnChanges {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n\n qrDataUrl = signal<string>('');\n\n private dataResolver = inject(DataResolverService);\n\n ngOnChanges(changes: SimpleChanges): void {\n this.generateQrCode();\n }\n\n private generateQrCode(): void {\n const content = this.dataResolver.resolveContent(\n this.component, this.data, this.pageNumber, this.totalPages, this.reportTitle\n ) || 'QR Code';\n\n QRCode.toDataURL(content, {\n width: 256,\n margin: 1,\n color: { dark: '#000000', light: '#ffffff' },\n }).then(url => {\n this.qrDataUrl.set(url);\n }).catch(() => {\n // Keep placeholder on error\n });\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\nimport { StyleMapperService } from '../../services/style-mapper.service';\n\n@Component({\n selector: 'rv-list-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-list-container\">\n @if (component.listConfig?.showHeader !== false) {\n <div class=\"rv-list-header\" [ngStyle]=\"headerStyles\">\n {{ listHeader }}\n </div>\n }\n <div class=\"rv-list-items\">\n @for (item of listData; track $index) {\n <div class=\"rv-list-item\"\n [ngStyle]=\"itemStyles\"\n [class.with-bullet]=\"component.listConfig?.showBullets\">\n @if (component.listConfig?.showBullets) {\n <span class=\"rv-bullet\">{{ getBullet($index) }}</span>\n }\n <span class=\"rv-item-content\">{{ formatItem(item) }}</span>\n </div>\n }\n @if (listData.length === 0) {\n <div class=\"rv-list-empty\">No data available</div>\n }\n </div>\n </div>\n `,\n styles: [`\n .rv-list-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #fff;\n overflow: hidden;\n }\n .rv-list-header {\n padding: 6px 8px;\n font-weight: 600;\n border-bottom: 1px solid #e0e0e0;\n background: #f5f5f5;\n }\n .rv-list-items { flex: 1; overflow: auto; }\n .rv-list-item {\n padding: 4px 8px;\n border-bottom: 1px solid #f0f0f0;\n font-size: inherit;\n }\n .rv-list-item.with-bullet {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n .rv-bullet { min-width: 16px; color: #666; }\n .rv-item-content { flex: 1; }\n .rv-list-item:last-child { border-bottom: none; }\n .rv-list-empty {\n padding: 8px;\n color: #999;\n font-style: italic;\n font-size: 11px;\n }\n `]\n})\nexport class ListRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n\n private dataResolver = inject(DataResolverService);\n private styleMapper = inject(StyleMapperService);\n\n get listData(): any[] {\n return this.dataResolver.resolveListData(this.component, this.data);\n }\n\n get listHeader(): string {\n return this.dataResolver.resolveListHeader(this.component, this.data);\n }\n\n get headerStyles(): Record<string, string> {\n const styles = this.component.style;\n const result: Record<string, string> = {};\n if (styles.fontFamily) result['font-family'] = styles.fontFamily;\n if (styles.fontSize) result['font-size'] = styles.fontSize;\n if (styles.color) result['color'] = styles.color;\n return result;\n }\n\n get itemStyles(): Record<string, string> {\n return this.styleMapper.mapComponentStyles(this.component.style);\n }\n\n getBullet(index: number): string {\n return this.dataResolver.getBulletChar(this.component.listConfig?.bulletStyle, index);\n }\n\n formatItem(item: any): string {\n return this.dataResolver.formatListItem(item, this.component);\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\n\n@Component({\n selector: 'rv-line-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg class=\"rv-line\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\n <defs>\n @if (component.lineConfig?.endArrow) {\n <marker [attr.id]=\"'rv-arrow-end-' + component.id\"\n [attr.markerWidth]=\"arrowSize\"\n [attr.markerHeight]=\"arrowSize * 0.7\"\n [attr.refX]=\"arrowSize - 1\"\n [attr.refY]=\"arrowSize * 0.35\"\n orient=\"auto\">\n <polygon [attr.points]=\"'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)\"\n [attr.fill]=\"strokeColor\" />\n </marker>\n }\n @if (component.lineConfig?.startArrow) {\n <marker [attr.id]=\"'rv-arrow-start-' + component.id\"\n [attr.markerWidth]=\"arrowSize\"\n [attr.markerHeight]=\"arrowSize * 0.7\"\n refX=\"1\"\n [attr.refY]=\"arrowSize * 0.35\"\n orient=\"auto-start-reverse\">\n <polygon [attr.points]=\"'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)\"\n [attr.fill]=\"strokeColor\" />\n </marker>\n }\n </defs>\n <line x1=\"0\" y1=\"50%\" x2=\"100%\" y2=\"50%\"\n [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"component.lineConfig?.strokeWidth || 1\"\n [attr.stroke-dasharray]=\"dashArray\"\n [attr.marker-end]=\"component.lineConfig?.endArrow ? 'url(#rv-arrow-end-' + component.id + ')' : null\"\n [attr.marker-start]=\"component.lineConfig?.startArrow ? 'url(#rv-arrow-start-' + component.id + ')' : null\" />\n </svg>\n `,\n styles: [`\n :host { display: block; width: 100%; height: 100%; }\n .rv-line { display: block; }\n `]\n})\nexport class LineRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n\n get strokeColor(): string {\n return this.component.lineConfig?.strokeColor || '#000000';\n }\n\n get arrowSize(): number {\n return this.component.lineConfig?.arrowSize || 10;\n }\n\n get dashArray(): string {\n switch (this.component.lineConfig?.lineType) {\n case 'dashed': return '8,4';\n case 'dotted': return '2,4';\n default: return 'none';\n }\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\n\n@Component({\n selector: 'rv-shape-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg class=\"rv-shape\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n @switch (component.shapeConfig?.shapeType) {\n @case ('rectangle') {\n <rect x=\"2\" y=\"2\" width=\"96\" height=\"96\"\n [attr.rx]=\"component.shapeConfig?.cornerRadius || 0\"\n [attr.ry]=\"component.shapeConfig?.cornerRadius || 0\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('circle') {\n <circle cx=\"50\" cy=\"50\" r=\"48\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('ellipse') {\n <ellipse cx=\"50\" cy=\"50\" rx=\"48\" ry=\"48\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('triangle') {\n <polygon points=\"50,2 98,98 2,98\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('diamond') {\n <polygon points=\"50,2 98,50 50,98 2,50\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('pentagon') {\n <polygon points=\"50,2 97,38 79,97 21,97 3,38\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('hexagon') {\n <polygon points=\"50,2 93,25 93,75 50,98 7,75 7,25\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('star') {\n <polygon points=\"50,2 61,39 98,39 68,61 79,98 50,75 21,98 32,61 2,39 39,39\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @case ('arrow') {\n <polygon points=\"2,35 60,35 60,15 98,50 60,85 60,65 2,65\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n @default {\n <rect x=\"2\" y=\"2\" width=\"96\" height=\"96\"\n [attr.fill]=\"fillColor\" [attr.stroke]=\"strokeColor\"\n [attr.stroke-width]=\"strokeWidth\" [attr.opacity]=\"opacity\" />\n }\n }\n </svg>\n `,\n styles: [`\n :host { display: block; width: 100%; height: 100%; }\n .rv-shape { display: block; }\n `]\n})\nexport class ShapeRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n\n get fillColor(): string { return this.component.shapeConfig?.fillColor || '#e3f2fd'; }\n get strokeColor(): string { return this.component.shapeConfig?.strokeColor || '#1976d2'; }\n get strokeWidth(): number { return this.component.shapeConfig?.strokeWidth || 2; }\n get opacity(): number { return this.component.shapeConfig?.opacity || 1; }\n}\n","import { Component, Input, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { ComponentRendererComponent } from '../component-renderer/component-renderer.component';\n\n@Component({\n selector: 'rv-container-renderer',\n standalone: true,\n imports: [CommonModule, forwardRef(() => ComponentRendererComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-container\">\n @for (child of component.children || []; track child.id) {\n <rv-component-renderer\n [component]=\"child\"\n [data]=\"data\"\n [pageNumber]=\"pageNumber\"\n [totalPages]=\"totalPages\"\n [reportTitle]=\"reportTitle\">\n </rv-component-renderer>\n }\n </div>\n `,\n styles: [`\n .rv-container {\n position: relative;\n width: 100%;\n height: 100%;\n }\n `]\n})\nexport class ContainerRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n}\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel, ComplexTableCell, ComplexTableConfig } from '../../models/component.model';\nimport { DataResolverService } from '../../services/data-resolver.service';\nimport { StyleMapperService } from '../../services/style-mapper.service';\n\n@Component({\n selector: 'rv-complex-table-renderer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (component.complexTableConfig) {\n <table class=\"rv-complex-table\" [ngStyle]=\"tableStyle\">\n <colgroup>\n @for (width of component.complexTableConfig.columnWidths; track $index) {\n <col [style.width]=\"width\">\n }\n </colgroup>\n <thead>\n @for (rowIndex of headerRows; track rowIndex) {\n <tr>\n @for (cell of getVisibleCells(rowIndex); track cell.id) {\n <th [attr.colspan]=\"cell.colspan > 1 ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan > 1 ? cell.rowspan : null\"\n [ngStyle]=\"getCellStyle(cell, true)\">\n {{ resolveCellContent(cell) }}\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (rowIndex of bodyRows; track rowIndex) {\n <tr>\n @for (cell of getVisibleCells(rowIndex); track cell.id) {\n <td [attr.colspan]=\"cell.colspan > 1 ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan > 1 ? cell.rowspan : null\"\n [ngStyle]=\"getCellStyle(cell, false)\">\n {{ resolveCellContent(cell) }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n `,\n styles: [`\n .rv-complex-table {\n width: 100%;\n border-collapse: collapse;\n font-size: inherit;\n }\n .rv-complex-table th,\n .rv-complex-table td {\n border: 1px solid #e0e0e0;\n padding: 6px 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .rv-complex-table th {\n background: #f5f5f5;\n font-weight: bold;\n text-align: center;\n }\n .rv-complex-table td {\n text-align: left;\n }\n `]\n})\nexport class ComplexTableRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n\n private dataResolver = inject(DataResolverService);\n private styleMapper = inject(StyleMapperService);\n\n get config(): ComplexTableConfig | undefined {\n return this.component.complexTableConfig;\n }\n\n get headerRows(): number[] {\n if (!this.config) return [];\n const rows: number[] = [];\n for (let i = 0; i < this.config.headerRowCount; i++) rows.push(i);\n return rows;\n }\n\n get bodyRows(): number[] {\n if (!this.config) return [];\n const rows: number[] = [];\n for (let i = this.config.headerRowCount; i < this.config.rowCount; i++) rows.push(i);\n return rows;\n }\n\n get tableStyle(): Record<string, string> {\n const styles: Record<string, string> = {\n 'width': '100%',\n 'border-collapse': 'collapse',\n };\n if (!this.config) return styles;\n\n if (this.config.tableLayout) {\n styles['table-layout'] = this.config.tableLayout;\n }\n\n if (this.config.showOuterBorder !== false) {\n const w = this.config.outerBorderWidth || '1px';\n const c = this.config.outerBorderColor || '#cccccc';\n const s = this.config.outerBorderStyle || 'solid';\n styles['border'] = `${w} ${s} ${c}`;\n } else {\n styles['border'] = 'none';\n }\n\n return styles;\n }\n\n getVisibleCells(rowIndex: number): ComplexTableCell[] {\n if (!this.config) return [];\n return this.config.cells\n .filter(c => c.row === rowIndex && !c.covered)\n .sort((a, b) => a.col - b.col);\n }\n\n getCellStyle(cell: ComplexTableCell, isHeader: boolean): Record<string, string> {\n return this.styleMapper.mapComplexCellStyle(cell, this.config!, isHeader);\n }\n\n resolveCellContent(cell: ComplexTableCell): string {\n if (cell.dataBinding?.sourceField && this.data) {\n return this.dataResolver.resolvePlaceholders(\n `{{${cell.dataBinding.sourceField}}}`,\n this.data\n );\n }\n if (cell.content) {\n return this.dataResolver.resolvePlaceholders(cell.content, this.data);\n }\n return '';\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../../models/component.model';\nimport { StyleMapperService } from '../../services/style-mapper.service';\nimport { TextRendererComponent } from '../text-renderer/text-renderer.component';\nimport { TableRendererComponent } from '../table-renderer/table-renderer.component';\nimport { ChartRendererComponent } from '../chart-renderer/chart-renderer.component';\nimport { ImageRendererComponent } from '../image-renderer/image-renderer.component';\nimport { QrcodeRendererComponent } from '../qrcode-renderer/qrcode-renderer.component';\nimport { ListRendererComponent } from '../list-renderer/list-renderer.component';\nimport { LineRendererComponent } from '../line-renderer/line-renderer.component';\nimport { ShapeRendererComponent } from '../shape-renderer/shape-renderer.component';\nimport { ContainerRendererComponent } from '../container-renderer/container-renderer.component';\nimport { ComplexTableRendererComponent } from '../complex-table-renderer/complex-table-renderer.component';\n\n@Component({\n selector: 'rv-component-renderer',\n standalone: true,\n imports: [\n CommonModule,\n TextRendererComponent,\n TableRendererComponent,\n ChartRendererComponent,\n ImageRendererComponent,\n QrcodeRendererComponent,\n ListRendererComponent,\n LineRendererComponent,\n ShapeRendererComponent,\n ContainerRendererComponent,\n ComplexTableRendererComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-component\" [ngStyle]=\"positionStyles\">\n <div class=\"rv-component-content\" [ngStyle]=\"componentStyles\">\n @switch (component.type) {\n @case ('text') {\n <rv-text-renderer [component]=\"component\" [data]=\"data\"\n [pageNumber]=\"pageNumber\" [totalPages]=\"totalPages\" [reportTitle]=\"reportTitle\" />\n }\n @case ('field') {\n <rv-text-renderer [component]=\"component\" [data]=\"data\"\n [pageNumber]=\"pageNumber\" [totalPages]=\"totalPages\" [reportTitle]=\"reportTitle\" />\n }\n @case ('table') {\n <rv-table-renderer [component]=\"component\" [data]=\"data\" />\n }\n @case ('chart') {\n <rv-chart-renderer [component]=\"component\" [data]=\"data\" />\n }\n @case ('image') {\n <rv-image-renderer [component]=\"component\" [data]=\"data\"\n [pageNumber]=\"pageNumber\" [totalPages]=\"totalPages\" [reportTitle]=\"reportTitle\" />\n }\n @case ('qrcode') {\n <rv-qrcode-renderer [component]=\"component\" [data]=\"data\"\n [pageNumber]=\"pageNumber\" [totalPages]=\"totalPages\" [reportTitle]=\"reportTitle\" />\n }\n @case ('list') {\n <rv-list-renderer [component]=\"component\" [data]=\"data\" />\n }\n @case ('line') {\n <rv-line-renderer [component]=\"component\" />\n }\n @case ('shape') {\n <rv-shape-renderer [component]=\"component\" />\n }\n @case ('container') {\n <rv-container-renderer [component]=\"component\" [data]=\"data\"\n [pageNumber]=\"pageNumber\" [totalPages]=\"totalPages\" [reportTitle]=\"reportTitle\" />\n }\n @case ('complex-table') {\n <rv-complex-table-renderer [component]=\"component\" [data]=\"data\" />\n }\n }\n </div>\n </div>\n `,\n styles: [`\n .rv-component {\n position: absolute;\n box-sizing: border-box;\n overflow: hidden;\n }\n .rv-component-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n `]\n})\nexport class ComponentRendererComponent {\n @Input({ required: true }) component!: ComponentModel;\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n\n private styleMapper = inject(StyleMapperService);\n\n get positionStyles(): Record<string, string> {\n return {\n 'position': 'absolute',\n 'left': this.component.position.x + 'mm',\n 'top': this.component.position.y + 'mm',\n 'width': this.component.size.width + 'mm',\n 'height': this.component.size.height + 'mm',\n 'z-index': String(this.component.zIndex || 0),\n 'box-sizing': 'border-box',\n 'overflow': 'hidden',\n };\n }\n\n get componentStyles(): Record<string, string> {\n return this.styleMapper.mapComponentStyles(this.component.style);\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../models/component.model';\nimport { ReportSection, GlobalStyles } from '../models/report-template.model';\nimport { StyleMapperService } from '../services/style-mapper.service';\nimport { ComponentRendererComponent } from '../components/component-renderer/component-renderer.component';\n\n@Component({\n selector: 'rv-report-page',\n standalone: true,\n imports: [CommonModule, ComponentRendererComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-page\"\n [style.width.mm]=\"pageWidth\"\n [style.height.mm]=\"pageHeight\"\n [style.font-family]=\"globalStyles.fontFamily\"\n [style.font-size]=\"globalStyles.fontSize\"\n [style.color]=\"globalStyles.color\"\n [style.background-color]=\"globalStyles.backgroundColor\">\n\n <!-- Header band background -->\n @if (headerSection?.enabled) {\n <div class=\"rv-band rv-header-band\"\n [style.height.mm]=\"headerSection!.height\"\n [ngStyle]=\"headerBandStyle\">\n </div>\n }\n\n <!-- Footer band background -->\n @if (footerSection?.enabled) {\n <div class=\"rv-band rv-footer-band\"\n [style.height.mm]=\"footerSection!.height\"\n [ngStyle]=\"footerBandStyle\">\n </div>\n }\n\n <!-- All components merged and positioned -->\n @for (comp of allComponents; track comp.id) {\n <rv-component-renderer\n [component]=\"comp\"\n [data]=\"data\"\n [pageNumber]=\"pageNumber\"\n [totalPages]=\"totalPages\"\n [reportTitle]=\"reportTitle\">\n </rv-component-renderer>\n }\n\n <!-- Empty state -->\n @if (allComponents.length === 0) {\n <div class=\"rv-empty\">\n <p>No components in the report</p>\n </div>\n }\n </div>\n `,\n styles: [`\n .rv-page {\n position: relative;\n background: white;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n }\n .rv-band {\n position: absolute;\n left: 0;\n right: 0;\n box-sizing: border-box;\n }\n .rv-header-band { top: 0; }\n .rv-footer-band { bottom: 0; }\n .rv-empty {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n color: #999;\n }\n .rv-empty p { margin: 0; font-size: 14px; }\n `]\n})\nexport class ReportPageComponent {\n @Input() pageWidth = 210;\n @Input() pageHeight = 297;\n @Input() headerSection?: ReportSection;\n @Input() footerSection?: ReportSection;\n @Input() bodyComponents: ComponentModel[] = [];\n @Input() globalStyles: GlobalStyles = { fontFamily: 'Arial', fontSize: '11px', color: '#000', backgroundColor: '#fff' };\n @Input() data: any;\n @Input() pageNumber = 1;\n @Input() totalPages = 1;\n @Input() reportTitle = '';\n\n private styleMapper = inject(StyleMapperService);\n\n get headerBandStyle(): Record<string, string> {\n return this.headerSection ? this.styleMapper.mapBandStyle(this.headerSection) : {};\n }\n\n get footerBandStyle(): Record<string, string> {\n return this.footerSection ? this.styleMapper.mapBandStyle(this.footerSection) : {};\n }\n\n get allComponents(): ComponentModel[] {\n const result: ComponentModel[] = [];\n const bodyOffset = this.headerSection?.enabled ? this.headerSection.height : 0;\n\n // Header components\n if (this.headerSection?.enabled) {\n result.push(...this.headerSection.components.map(c => ({ ...c })));\n }\n\n // Body components (offset by header height)\n result.push(...this.bodyComponents.map(c => ({\n ...c,\n position: { ...c.position, y: c.position.y + bodyOffset },\n })));\n\n // Footer components (positioned at bottom of page)\n if (this.footerSection?.enabled) {\n const footerY = this.pageHeight - this.footerSection.height;\n result.push(...this.footerSection.components.map(c => ({\n ...c,\n position: { ...c.position, y: c.position.y + footerY },\n })));\n }\n\n return result.sort((a, b) => a.zIndex - b.zIndex);\n }\n}\n","import {\n Component, ChangeDetectionStrategy, Input, inject, signal, computed,\n ViewChild, ViewChildren, QueryList, ElementRef, AfterViewInit, OnDestroy, OnChanges, SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ComponentModel } from '../models/component.model';\nimport { ReportSection, GlobalStyles, PageData } from '../models/report-template.model';\nimport { ViewerStateService } from '../services/viewer-state.service';\nimport { ReportPageComponent } from '../layout/report-page.component';\n\n@Component({\n selector: 'rv-page-container',\n standalone: true,\n imports: [CommonModule, ReportPageComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-page-container\"\n [class.rv-single-page]=\"state.viewMode() === 'single'\"\n [class.rv-continuous]=\"state.viewMode() === 'continuous'\"\n (scroll)=\"onScroll($event)\"\n #pageContainer>\n\n @if (state.viewMode() === 'single') {\n <!-- Single page mode -->\n <div class=\"rv-page-wrapper\"\n [style.transform]=\"zoomTransform()\"\n [style.transform-origin]=\"'top center'\"\n [attr.data-page-index]=\"state.currentPage() - 1\"\n #pageWrapper>\n <rv-report-page\n [pageWidth]=\"pageWidth\"\n [pageHeight]=\"pageHeight\"\n [headerSection]=\"currentPageData?.header\"\n [footerSection]=\"currentPageData?.footer\"\n [bodyComponents]=\"currentPageData?.components || []\"\n [globalStyles]=\"globalStyles\"\n [data]=\"data\"\n [pageNumber]=\"state.currentPage()\"\n [totalPages]=\"state.totalPages()\"\n [reportTitle]=\"reportTitle\">\n </rv-report-page>\n </div>\n } @else {\n <!-- Continuous scroll mode -->\n @for (page of pagesData; track page.index) {\n <div class=\"rv-page-wrapper\"\n [style.transform]=\"zoomTransform()\"\n [style.transform-origin]=\"'top center'\"\n [attr.data-page-index]=\"page.index\"\n #pageWrappers>\n <rv-report-page\n [pageWidth]=\"pageWidth\"\n [pageHeight]=\"pageHeight\"\n [headerSection]=\"page.header\"\n [footerSection]=\"page.footer\"\n [bodyComponents]=\"page.components\"\n [globalStyles]=\"globalStyles\"\n [data]=\"data\"\n [pageNumber]=\"page.index + 1\"\n [totalPages]=\"state.totalPages()\"\n [reportTitle]=\"reportTitle\">\n </rv-report-page>\n </div>\n }\n }\n\n @if (!pagesData || pagesData.length === 0) {\n <div class=\"rv-no-content\">\n <div class=\"rv-no-content-icon\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14 2 14 8 20 8\"></polyline>\n </svg>\n </div>\n <p>No report template loaded</p>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex: 1;\n overflow: hidden;\n }\n\n .rv-page-container {\n flex: 1;\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n gap: 24px;\n background: var(--rv-content-bg, #e8e8e8);\n }\n\n :host-context(.rv-theme-dark) .rv-page-container {\n background: var(--rv-content-bg, #1a1a2e);\n }\n\n .rv-page-wrapper {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .rv-no-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 300px;\n color: #999;\n font-family: Arial, sans-serif;\n gap: 12px;\n }\n\n .rv-no-content-icon {\n opacity: 0.4;\n }\n\n .rv-no-content p {\n margin: 0;\n font-size: 14px;\n }\n `]\n})\nexport class PageContainerComponent implements AfterViewInit, OnDestroy, OnChanges {\n @Input() pagesData: PageData[] = [];\n @Input() pageWidth = 210;\n @Input() pageHeight = 297;\n @Input() globalStyles: GlobalStyles = { fontFamily: 'Arial', fontSize: '11px', color: '#000', backgroundColor: '#fff' };\n @Input() data: any = null;\n @Input() reportTitle = '';\n\n @ViewChild('pageContainer') pageContainerRef?: ElementRef<HTMLElement>;\n @ViewChildren('pageWrappers') pageWrapperRefs?: QueryList<ElementRef<HTMLElement>>;\n\n state = inject(ViewerStateService);\n\n private intersectionObserver?: IntersectionObserver;\n\n zoomTransform = computed(() => `scale(${this.state.zoom() / 100})`);\n\n get currentPageData(): PageData | null {\n const idx = this.state.currentPage() - 1;\n return this.pagesData?.[idx] || null;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pagesData'] && this.pagesData) {\n this.state.totalPages.set(Math.max(1, this.pagesData.length));\n }\n }\n\n ngAfterViewInit(): void {\n this.setupIntersectionObserver();\n this.calculateFitZoom();\n }\n\n ngOnDestroy(): void {\n this.intersectionObserver?.disconnect();\n }\n\n onScroll(_event: Event): void {\n // For continuous mode, intersection observer handles page detection\n }\n\n scrollToPage(pageIndex: number): void {\n if (this.state.viewMode() === 'continuous' && this.pageWrapperRefs) {\n const wrappers = this.pageWrapperRefs.toArray();\n if (wrappers[pageIndex]) {\n wrappers[pageIndex].nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n }\n\n calculateFitZoom(): void {\n const fitMode = this.state.fitMode();\n if (fitMode === 'none' || !this.pageContainerRef) return;\n\n const container = this.pageContainerRef.nativeElement;\n const containerWidth = container.clientWidth - 48; // padding\n const containerHeight = container.clientHeight - 48;\n\n const pageWidthPx = this.pageWidth * 3.7795; // mm to px approx\n const pageHeightPx = this.pageHeight * 3.7795;\n\n if (fitMode === 'width') {\n const zoom = Math.floor((containerWidth / pageWidthPx) * 100);\n this.state.zoom.set(Math.max(10, Math.min(400, zoom)));\n } else if (fitMode === 'page') {\n const zoomW = containerWidth / pageWidthPx;\n const zoomH = containerHeight / pageHeightPx;\n const zoom = Math.floor(Math.min(zoomW, zoomH) * 100);\n this.state.zoom.set(Math.max(10, Math.min(400, zoom)));\n }\n }\n\n getPageElement(pageIndex: number): HTMLElement | null {\n if (this.state.viewMode() === 'single') {\n return this.pageContainerRef?.nativeElement.querySelector('.rv-page-wrapper') || null;\n }\n const wrappers = this.pageWrapperRefs?.toArray();\n return wrappers?.[pageIndex]?.nativeElement || null;\n }\n\n private setupIntersectionObserver(): void {\n if (!this.pageContainerRef) return;\n\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (this.state.viewMode() !== 'continuous') return;\n\n for (const entry of entries) {\n if (entry.isIntersecting && entry.intersectionRatio > 0.3) {\n const pageIndex = parseInt(\n (entry.target as HTMLElement).getAttribute('data-page-index') || '0',\n 10\n );\n this.state.currentPage.set(pageIndex + 1);\n break;\n }\n }\n },\n {\n root: this.pageContainerRef.nativeElement,\n threshold: [0.3, 0.5, 0.7],\n }\n );\n }\n\n observePages(): void {\n if (!this.intersectionObserver || !this.pageWrapperRefs) return;\n this.intersectionObserver.disconnect();\n this.pageWrapperRefs.forEach(ref => {\n this.intersectionObserver!.observe(ref.nativeElement);\n });\n }\n}\n","import {\n Component, ChangeDetectionStrategy, Input, output, signal\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'rv-sidebar-container',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('sidebarSlide', [\n state('open', style({\n transform: 'translateX(0)',\n opacity: 1,\n })),\n state('closed', style({\n transform: 'translateX(-100%)',\n opacity: 0,\n })),\n transition('open <=> closed', [\n animate('200ms ease-in-out')\n ]),\n ]),\n ],\n template: `\n <div class=\"rv-sidebar-wrapper\"\n [class.rv-sidebar-hidden]=\"!isOpen\"\n [@sidebarSlide]=\"isOpen ? 'open' : 'closed'\">\n <div class=\"rv-sidebar-panel\">\n <div class=\"rv-sidebar-header\">\n <span class=\"rv-sidebar-title\">{{ title }}</span>\n <button mat-icon-button class=\"rv-sidebar-close\" (click)=\"closed.emit()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <div class=\"rv-sidebar-body\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n z-index: 50;\n pointer-events: none;\n }\n\n .rv-sidebar-wrapper {\n width: 240px;\n height: 100%;\n pointer-events: auto;\n }\n\n .rv-sidebar-hidden {\n pointer-events: none;\n }\n\n .rv-sidebar-panel {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--rv-sidebar-bg, #ffffff);\n border-right: 1px solid var(--rv-sidebar-border, #e0e0e0);\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-panel {\n --rv-sidebar-bg: #1e1e2d;\n --rv-sidebar-border: #3a3a4a;\n box-shadow: 2px 0 12px rgba(0, 0, 0, 0.3);\n }\n\n .rv-sidebar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 40px;\n min-height: 40px;\n padding: 0 8px 0 16px;\n border-bottom: 1px solid var(--rv-sidebar-border, #e0e0e0);\n background: var(--rv-sidebar-bg, #ffffff);\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-header {\n background: #252538;\n }\n\n .rv-sidebar-title {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--rv-sidebar-text, #555555);\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-title {\n color: #b0b0c0;\n }\n\n .rv-sidebar-close {\n width: 28px !important;\n height: 28px !important;\n }\n\n .rv-sidebar-close .mat-icon {\n font-size: 18px;\n width: 18px;\n height: 18px;\n color: var(--rv-sidebar-text, #555555);\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-close .mat-icon {\n color: #b0b0c0;\n }\n\n .rv-sidebar-body {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n /* Scrollbar styling */\n .rv-sidebar-body::-webkit-scrollbar {\n width: 6px;\n }\n\n .rv-sidebar-body::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .rv-sidebar-body::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 3px;\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-body::-webkit-scrollbar-thumb {\n background: #444;\n }\n\n .rv-sidebar-body::-webkit-scrollbar-thumb:hover {\n background: #aaa;\n }\n\n :host-context(.rv-theme-dark) .rv-sidebar-body::-webkit-scrollbar-thumb:hover {\n background: #555;\n }\n `]\n})\nexport class SidebarContainerComponent {\n @Input() isOpen = false;\n @Input() title = '';\n\n closed = output<void>();\n}\n","import {\n Component, ChangeDetectionStrategy, Input, inject, output\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PageData, GlobalStyles } from '../models/report-template.model';\nimport { ViewerStateService } from '../services/viewer-state.service';\nimport { SidebarContainerComponent } from './sidebar-container.component';\nimport { ReportPageComponent } from '../layout/report-page.component';\n\n@Component({\n selector: 'rv-thumbnail-sidebar',\n standalone: true,\n imports: [CommonModule, SidebarContainerComponent, ReportPageComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <rv-sidebar-container\n [isOpen]=\"state.thumbnailSidebarOpen()\"\n title=\"Pages\"\n (closed)=\"state.toggleThumbnailSidebar()\">\n\n <div class=\"rv-thumbnail-list\">\n @for (page of pages; track page.index) {\n <div class=\"rv-thumbnail-item\"\n [class.rv-thumb-active]=\"page.index === state.currentPage() - 1\"\n (click)=\"onPageClick(page.index + 1)\">\n <div class=\"rv-thumbnail-preview\">\n <div class=\"rv-thumbnail-scale\">\n <rv-report-page\n [pageWidth]=\"pageWidth\"\n [pageHeight]=\"pageHeight\"\n [headerSection]=\"page.header\"\n [footerSection]=\"page.footer\"\n [bodyComponents]=\"page.components\"\n [globalStyles]=\"globalStyles\"\n [data]=\"data\"\n [pageNumber]=\"page.index + 1\"\n [totalPages]=\"pages.length\">\n </rv-report-page>\n </div>\n </div>\n <span class=\"rv-thumb-label\">{{ page.index + 1 }}</span>\n </div>\n }\n\n @if (!pages || pages.length === 0) {\n <div class=\"rv-thumb-empty\">No pages</div>\n }\n </div>\n\n </rv-sidebar-container>\n `,\n styles: [`\n .rv-thumbnail-list {\n padding: 12px 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n }\n\n .rv-thumbnail-item {\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 6px;\n border-radius: 6px;\n border: 2px solid transparent;\n transition: all 0.15s ease;\n }\n\n .rv-thumbnail-item:hover:not(.rv-thumb-active) {\n background: rgba(0, 0, 0, 0.03);\n border-color: rgba(0, 0, 0, 0.08);\n }\n\n :host-context(.rv-theme-dark) .rv-thumbnail-item:hover:not(.rv-thumb-active) {\n background: rgba(255, 255, 255, 0.04);\n border-color: rgba(255, 255, 255, 0.08);\n }\n\n .rv-thumb-active {\n border-color: #1976d2;\n background: rgba(25, 118, 210, 0.06);\n }\n\n :host-context(.rv-theme-dark) .rv-thumb-active {\n border-color: #64b5f6;\n background: rgba(100, 181, 246, 0.1);\n }\n\n .rv-thumbnail-preview {\n width: 140px;\n height: 198px; /* A4 ratio (210/297 * 140) */\n overflow: hidden;\n border-radius: 3px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n background: white;\n }\n\n .rv-thumbnail-scale {\n transform: scale(0.167); /* 140px / 210mm * ~0.25 rough scale */\n transform-origin: top left;\n width: 600%;\n height: 600%;\n pointer-events: none;\n }\n\n .rv-thumb-label {\n font-size: 11px;\n font-weight: 500;\n color: #666;\n }\n\n :host-context(.rv-theme-dark) .rv-thumb-label {\n color: #a0a0b0;\n }\n\n .rv-thumb-active .rv-thumb-label {\n color: #1976d2;\n font-weight: 600;\n }\n\n :host-context(.rv-theme-dark) .rv-thumb-active .rv-thumb-label {\n color: #64b5f6;\n }\n\n .rv-thumb-empty {\n padding: 24px;\n color: #999;\n font-size: 12px;\n text-align: center;\n }\n `]\n})\nexport class ThumbnailSidebarComponent {\n @Input() pages: PageData[] = [];\n @Input() pageWidth = 210;\n @Input() pageHeight = 297;\n @Input() globalStyles: GlobalStyles = { fontFamily: 'Arial', fontSize: '11px', color: '#000', backgroundColor: '#fff' };\n @Input() data: any = null;\n\n pageSelected = output<number>();\n\n state = inject(ViewerStateService);\n\n onPageClick(page: number): void {\n this.state.goToPage(page);\n this.pageSelected.emit(page);\n }\n}\n","import {\n Component, ChangeDetectionStrategy, Input, inject, output, OnChanges, SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ComponentModel } from '../models/component.model';\nimport { PageData, TocItem } from '../models/report-template.model';\nimport { ViewerStateService } from '../services/viewer-state.service';\nimport { SidebarContainerComponent } from './sidebar-container.component';\n\n@Component({\n selector: 'rv-toc-sidebar',\n standalone: true,\n imports: [CommonModule, MatIconModule, SidebarContainerComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <rv-sidebar-container\n [isOpen]=\"state.tocSidebarOpen()\"\n title=\"Document Map\"\n (closed)=\"state.toggleTocSidebar()\">\n\n <div class=\"rv-toc-tree\">\n @for (item of tocItems; track item.id) {\n <div class=\"rv-toc-item\"\n [class.rv-toc-active]=\"item.pageIndex === state.currentPage() - 1\"\n [style.padding-left.px]=\"12 + item.level * 16\"\n (click)=\"onItemClick(item)\">\n <mat-icon class=\"rv-toc-icon\">{{ item.icon }}</mat-icon>\n <span class=\"rv-toc-label\">{{ item.label }}</span>\n <span class=\"rv-toc-page\">{{ item.pageIndex + 1 }}</span>\n </div>\n }\n\n @if (tocItems.length === 0) {\n <div class=\"rv-toc-empty\">\n <mat-icon>toc</mat-icon>\n <p>No document structure found</p>\n </div>\n }\n </div>\n\n </rv-sidebar-container>\n `,\n styles: [`\n .rv-toc-tree {\n padding: 8px 0;\n }\n\n .rv-toc-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 12px;\n transition: background 0.12s ease;\n border-left: 3px solid transparent;\n }\n\n .rv-toc-item:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n\n :host-context(.rv-theme-dark) .rv-toc-item:hover {\n background: rgba(255, 255, 255, 0.04);\n }\n\n .rv-toc-active {\n background: rgba(25, 118, 210, 0.06) !important;\n border-left-color: #1976d2;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-active {\n background: rgba(100, 181, 246, 0.1) !important;\n border-left-color: #64b5f6;\n }\n\n .rv-toc-icon {\n font-size: 16px !important;\n width: 16px !important;\n height: 16px !important;\n color: #888;\n flex-shrink: 0;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-icon {\n color: #888899;\n }\n\n .rv-toc-active .rv-toc-icon {\n color: #1976d2;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-active .rv-toc-icon {\n color: #64b5f6;\n }\n\n .rv-toc-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #333;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-label {\n color: #d0d0d8;\n }\n\n .rv-toc-active .rv-toc-label {\n color: #1976d2;\n font-weight: 600;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-active .rv-toc-label {\n color: #64b5f6;\n }\n\n .rv-toc-page {\n font-size: 10px;\n color: #999;\n flex-shrink: 0;\n min-width: 18px;\n text-align: right;\n }\n\n :host-context(.rv-theme-dark) .rv-toc-page {\n color: #777;\n }\n\n .rv-toc-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px 16px;\n color: #999;\n gap: 8px;\n }\n\n .rv-toc-empty .mat-icon {\n font-size: 32px;\n width: 32px;\n height: 32px;\n opacity: 0.4;\n }\n\n .rv-toc-empty p {\n margin: 0;\n font-size: 12px;\n }\n `]\n})\nexport class TocSidebarComponent implements OnChanges {\n @Input() pages: PageData[] = [];\n\n pageSelected = output<number>();\n\n state = inject(ViewerStateService);\n\n tocItems: TocItem[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pages']) {\n this.buildToc();\n }\n }\n\n onItemClick(item: TocItem): void {\n this.state.goToPage(item.pageIndex + 1);\n this.pageSelected.emit(item.pageIndex + 1);\n }\n\n private buildToc(): void {\n this.tocItems = [];\n\n if (!this.pages || this.pages.length === 0) return;\n\n for (const page of this.pages) {\n const components = [\n ...(page.header?.components || []),\n ...page.components,\n ...(page.footer?.components || []),\n ];\n\n for (const comp of components) {\n const tocItem = this.componentToTocItem(comp, page.index);\n if (tocItem) {\n this.tocItems.push(tocItem);\n }\n }\n }\n }\n\n private componentToTocItem(comp: ComponentModel, pageIndex: number): TocItem | null {\n // Only create TOC items for text/field components with certain characteristics\n if (comp.type !== 'text' && comp.type !== 'field') return null;\n\n const content = comp.content || '';\n if (!content.trim()) return null;\n\n // Detect headings by font size or bold style\n const fontSize = this.parseFontSize(comp.style?.fontSize);\n const isBold = comp.style?.fontWeight === 'bold' || comp.style?.fontWeight === '700';\n const isLarge = fontSize >= 16;\n const isMedium = fontSize >= 13;\n\n // Only include text that looks like a heading\n if (!isLarge && !isBold) return null;\n\n let level = 2;\n let icon = 'text_fields';\n\n if (isLarge && isBold) {\n level = 0;\n icon = 'title';\n } else if (isLarge) {\n level = 1;\n icon = 'text_fields';\n } else if (isBold) {\n level = 2;\n icon = 'short_text';\n }\n\n // Clean content - remove HTML tags and template tokens\n const label = content\n .replace(/<[^>]*>/g, '')\n .replace(/\\{\\{[^}]*\\}\\}/g, '')\n .trim();\n\n if (!label || label.length < 2) return null;\n\n return {\n id: comp.id,\n label: label.substring(0, 60) + (label.length > 60 ? '...' : ''),\n pageIndex,\n level,\n icon,\n };\n }\n\n private parseFontSize(fontSize: string | undefined): number {\n if (!fontSize) return 11;\n const match = fontSize.match(/(\\d+(?:\\.\\d+)?)/);\n return match ? parseFloat(match[1]) : 11;\n }\n}\n","import {\n Component, Input, Output, EventEmitter, ChangeDetectionStrategy,\n OnChanges, SimpleChanges, signal, computed, inject, ViewChild, ElementRef,\n effect, HostBinding\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReportTemplate, InvoiceSchema, ReportSection, GlobalStyles, PAGE_SIZES, PageSetup, PageData, ExportEvent } from './models/report-template.model';\nimport { ComponentModel } from './models/component.model';\nimport { DataResolverService } from './services/data-resolver.service';\nimport { FormattingService } from './services/formatting.service';\nimport { ChartOptionsBuilderService } from './services/chart-options-builder.service';\nimport { TokenResolverService } from './services/token-resolver.service';\nimport { StyleMapperService } from './services/style-mapper.service';\nimport { TemplateNormalizerService } from './services/template-normalizer.service';\nimport { TemplateValidatorService } from './services/template-validator.service';\nimport { ViewerStateService } from './services/viewer-state.service';\nimport { SearchService } from './services/search.service';\nimport { ExportService } from './services/export.service';\nimport { PrintService } from './services/print.service';\nimport { ViewerToolbarComponent } from './toolbar/viewer-toolbar.component';\nimport { PageContainerComponent } from './page-container/page-container.component';\nimport { ThumbnailSidebarComponent } from './sidebar/thumbnail-sidebar.component';\nimport { TocSidebarComponent } from './sidebar/toc-sidebar.component';\n\n@Component({\n selector: 'rv-report-viewer',\n standalone: true,\n imports: [\n CommonModule,\n ViewerToolbarComponent,\n PageContainerComponent,\n ThumbnailSidebarComponent,\n TocSidebarComponent,\n ],\n providers: [\n DataResolverService,\n FormattingService,\n ChartOptionsBuilderService,\n TokenResolverService,\n StyleMapperService,\n TemplateNormalizerService,\n TemplateValidatorService,\n ViewerStateService,\n SearchService,\n ExportService,\n PrintService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-viewer-root\"\n [class.rv-theme-dark]=\"state.isDarkTheme()\"\n [class.rv-theme-light]=\"!state.isDarkTheme()\"\n [class.rv-fullscreen]=\"state.isFullScreen()\"\n #viewerRoot>\n\n <!-- Toolbar -->\n @if (showToolbar) {\n <rv-viewer-toolbar\n (printClicked)=\"onPrint()\"\n (exportClicked)=\"onExport($event)\"\n (searchQueryChanged)=\"onSearchQueryChanged($event)\">\n </rv-viewer-toolbar>\n }\n\n <!-- Body: Sidebars + Page Content -->\n <div class=\"rv-viewer-body\">\n <!-- TOC Sidebar -->\n <rv-toc-sidebar\n [pages]=\"pagesData()\"\n (pageSelected)=\"onPageSelected($event)\">\n </rv-toc-sidebar>\n\n <!-- Thumbnail Sidebar -->\n <rv-thumbnail-sidebar\n [pages]=\"pagesData()\"\n [pageWidth]=\"pageWidth()\"\n [pageHeight]=\"pageHeight()\"\n [globalStyles]=\"currentGlobalStyles()\"\n [data]=\"data\"\n (pageSelected)=\"onPageSelected($event)\">\n </rv-thumbnail-sidebar>\n\n <!-- Main Content Area -->\n <rv-page-container\n [pagesData]=\"pagesData()\"\n [pageWidth]=\"pageWidth()\"\n [pageHeight]=\"pageHeight()\"\n [globalStyles]=\"currentGlobalStyles()\"\n [data]=\"data\"\n [reportTitle]=\"reportTitle()\"\n #pageContainer>\n </rv-page-container>\n </div>\n </div>\n\n <!-- Search highlight styles (global for mark elements inside rendered pages) -->\n <style>\n .rv-search-highlight {\n background-color: #ffeb3b;\n color: inherit;\n padding: 0 1px;\n border-radius: 2px;\n }\n .rv-search-highlight.rv-search-active {\n background-color: #ff9800;\n box-shadow: 0 0 0 2px #ff9800;\n color: #fff;\n }\n </style>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .rv-viewer-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n -webkit-font-smoothing: antialiased;\n }\n\n .rv-viewer-root.rv-fullscreen {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n }\n\n .rv-viewer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n /* Transition for content area when sidebar opens */\n rv-page-container {\n flex: 1;\n transition: margin-left 0.2s ease;\n }\n `]\n})\nexport class ReportViewerComponent implements OnChanges {\n // Existing inputs\n @Input() template: ReportTemplate | InvoiceSchema | any | null = null;\n @Input() data: any = null;\n @Input() zoom: number = 100;\n @Input() pageNumber: number = 1;\n @Input() totalPages: number = 1;\n\n // New inputs\n @Input() showToolbar: boolean = true;\n @Input() toolbarTheme: 'light' | 'dark' = 'light';\n @Input() initialViewMode: 'single' | 'continuous' = 'single';\n @Input() enableSearch: boolean = true;\n @Input() enableExport: boolean = true;\n @Input() enablePrint: boolean = true;\n\n // Outputs\n @Output() pageChange = new EventEmitter<number>();\n @Output() zoomChange = new EventEmitter<number>();\n @Output() printRequest = new EventEmitter<void>();\n @Output() exportRequest = new EventEmitter<ExportEvent>();\n @Output() fullScreenChange = new EventEmitter<boolean>();\n @Output() viewModeChange = new EventEmitter<string>();\n @Output() themeChange = new EventEmitter<string>();\n\n @ViewChild('viewerRoot') viewerRootRef?: ElementRef<HTMLElement>;\n @ViewChild('pageContainer') pageContainerRef?: PageContainerComponent;\n\n state = inject(ViewerStateService);\n private searchService = inject(SearchService);\n private exportService = inject(ExportService);\n private printService = inject(PrintService);\n private normalizer = new TemplateNormalizerService();\n\n // Parsed template state\n pageWidth = signal(210);\n pageHeight = signal(297);\n headerSection = signal<ReportSection | undefined>(undefined);\n footerSection = signal<ReportSection | undefined>(undefined);\n bodyComponents = signal<ComponentModel[]>([]);\n currentGlobalStyles = signal<GlobalStyles>({\n fontFamily: 'Arial, sans-serif',\n fontSize: '11px',\n color: '#000000',\n backgroundColor: '#ffffff',\n });\n reportTitle = signal('Report');\n currentPageSetup = signal<PageSetup>({\n size: 'A4',\n orientation: 'Portrait',\n width: 210,\n height: 297,\n unit: 'mm',\n margins: { top: 25.4, right: 25.4, bottom: 25.4, left: 25.4, preset: 'Normal' },\n });\n\n // Computed pages data (currently single page - can be extended for multi-page)\n pagesData = computed<PageData[]>(() => {\n const components = this.bodyComponents();\n const header = this.headerSection();\n const footer = this.footerSection();\n\n if (!components || components.length === 0) {\n if (!header && !footer) return [];\n }\n\n return [{\n index: 0,\n header,\n footer,\n components,\n }];\n });\n\n constructor() {\n // Sync zoom state changes back to output\n effect(() => {\n const zoom = this.state.zoom();\n this.zoomChange.emit(zoom);\n });\n\n // Sync page changes back to output\n effect(() => {\n const page = this.state.currentPage();\n this.pageChange.emit(page);\n });\n\n // Sync fullscreen changes\n effect(() => {\n const fs = this.state.isFullScreen();\n this.fullScreenChange.emit(fs);\n if (fs) {\n document.documentElement.requestFullscreen?.().catch(() => {});\n } else if (document.fullscreenElement) {\n document.exitFullscreen?.().catch(() => {});\n }\n });\n\n // Sync view mode changes\n effect(() => {\n this.viewModeChange.emit(this.state.viewMode());\n });\n\n // Sync theme changes\n effect(() => {\n this.themeChange.emit(this.state.ribbonTheme());\n });\n\n // React to search: when search query or matches index changes, highlight\n effect(() => {\n const idx = this.state.currentMatchIndex();\n if (idx >= 0) {\n this.searchService.highlightCurrentMatch(idx);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['template'] && this.template) {\n this.parseTemplate(this.template);\n }\n if (changes['zoom']) {\n this.state.setZoom(this.zoom);\n }\n if (changes['toolbarTheme']) {\n this.state.setTheme(this.toolbarTheme);\n }\n if (changes['initialViewMode']) {\n this.state.setViewMode(this.initialViewMode);\n }\n if (changes['pageNumber']) {\n this.state.goToPage(this.pageNumber);\n }\n if (changes['totalPages'] && this.totalPages > 0) {\n this.state.totalPages.set(this.totalPages);\n }\n }\n\n onPrint(): void {\n if (this.viewerRootRef) {\n this.printService.print(this.viewerRootRef.nativeElement, this.currentPageSetup());\n }\n this.printRequest.emit();\n }\n\n onExport(format: string): void {\n const event: ExportEvent = { format: format as ExportEvent['format'] };\n\n if (format === 'pdf') {\n this.onPrint();\n } else if (format === 'png') {\n const pageEl = this.pageContainerRef?.getPageElement(this.state.currentPage() - 1);\n if (pageEl) {\n this.exportService.exportToPNG(pageEl, `${this.reportTitle()}-page-${this.state.currentPage()}`);\n }\n }\n\n this.exportRequest.emit(event);\n }\n\n onSearchQueryChanged(query: string): void {\n if (!query || !query.trim()) {\n this.searchService.clearHighlights();\n this.state.searchMatches.set([]);\n this.state.currentMatchIndex.set(-1);\n return;\n }\n\n const container = this.viewerRootRef?.nativeElement.querySelector('.rv-page-container');\n if (container) {\n const matches = this.searchService.search(query, container as HTMLElement);\n this.state.searchMatches.set(matches);\n this.state.currentMatchIndex.set(matches.length > 0 ? 0 : -1);\n }\n }\n\n onPageSelected(page: number): void {\n this.state.goToPage(page);\n this.pageContainerRef?.scrollToPage(page - 1);\n }\n\n private parseTemplate(rawSchema: any): void {\n const schema = this.normalizer.normalize(rawSchema);\n\n const setup = schema.pageSetup;\n const size = PAGE_SIZES[setup.size] || PAGE_SIZES.A4;\n this.pageWidth.set(setup.orientation === 'Portrait' ? size.width : size.height);\n this.pageHeight.set(setup.orientation === 'Portrait' ? size.height : size.width);\n this.currentPageSetup.set(setup);\n\n this.headerSection.set(schema.header);\n this.footerSection.set(schema.footer);\n this.bodyComponents.set(schema.components || []);\n this.currentGlobalStyles.set(schema.globalStyles);\n this.reportTitle.set(schema.metadata?.name || 'Report');\n }\n}\n","// Core Component Model Interface - Base interface for all design components\n\nexport type ComponentType = 'text' | 'field' | 'table' | 'list' | 'image' | 'container' | 'qrcode' | 'chart' | 'line' | 'shape' | 'complex-table';\n\nexport type BandType = 'header' | 'footer' | 'body';\n\nexport type ShapeType = 'rectangle' | 'circle' | 'ellipse' | 'triangle' | 'diamond' | 'pentagon' | 'hexagon' | 'star' | 'arrow';\nexport type LineType = 'solid' | 'dashed' | 'dotted' | 'arrow';\n\n// Chart types\nexport type ChartType = 'bar' | 'line' | 'area' | 'pie' | 'doughnut' | 'scatter' | 'radar' | 'funnel' | 'gauge' | 'waterfall';\nexport type ChartSubType = 'clustered' | 'stacked' | 'percent-stacked' | 'standard';\nexport type TrendlineType = 'linear' | 'exponential' | 'polynomial' | 'moving-average';\nexport type AggregationFunction = 'none' | 'sum' | 'average' | 'count' | 'min' | 'max';\nexport type LegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'none';\nexport type AxisLabelRotation = 0 | 45 | 90 | -45 | -90;\n\nexport interface Position {\n x: number;\n y: number;\n unit: 'mm' | 'px';\n}\n\nexport interface Size {\n width: number;\n height: number;\n unit: 'mm' | 'px';\n}\n\nexport interface ComponentMetadata {\n createdDate: Date | string;\n modifiedDate: Date | string;\n locked: boolean;\n visible: boolean;\n name?: string;\n}\n\nexport interface ComponentModel {\n id: string;\n type: ComponentType;\n position: Position;\n size: Size;\n style: StyleProperties;\n dataBinding?: DataBinding;\n conditionalLogic?: ConditionalRule[];\n children?: ComponentModel[];\n metadata: ComponentMetadata;\n content?: string;\n columns?: TableColumn[];\n listConfig?: ListConfig;\n tableConfig?: TableConfig;\n shapeConfig?: ShapeConfig;\n lineConfig?: LineConfig;\n imageConfig?: ImageConfig;\n chartConfig?: ChartConfig;\n complexTableConfig?: ComplexTableConfig;\n zIndex: number;\n}\n\nexport interface ShapeConfig {\n shapeType: ShapeType;\n fillColor: string;\n strokeColor: string;\n strokeWidth: number;\n cornerRadius?: number;\n opacity?: number;\n}\n\nexport interface LineConfig {\n lineType: LineType;\n strokeColor: string;\n strokeWidth: number;\n startArrow?: boolean;\n endArrow?: boolean;\n arrowSize?: number;\n}\n\nexport interface ImageConfig {\n imageUrl?: string;\n objectFit?: 'fill' | 'contain' | 'cover';\n naturalWidth?: number;\n naturalHeight?: number;\n}\n\nexport interface TableConfig {\n // Header styling\n headerBackground?: string;\n headerTextColor?: string;\n headerFontWeight?: string;\n headerFontSize?: string;\n headerTextAlign?: 'left' | 'center' | 'right';\n headerBorderBottom?: string;\n headerPadding?: string;\n\n // Border configuration\n showOuterBorder?: boolean;\n outerBorderWidth?: string;\n outerBorderColor?: string;\n outerBorderStyle?: 'solid' | 'dashed' | 'dotted' | 'double' | 'none';\n\n showRowSeparators?: boolean;\n rowSeparatorWidth?: string;\n rowSeparatorColor?: string;\n rowSeparatorStyle?: 'solid' | 'dashed' | 'dotted' | 'none';\n\n showColumnSeparators?: boolean;\n columnSeparatorWidth?: string;\n columnSeparatorColor?: string;\n columnSeparatorStyle?: 'solid' | 'dashed' | 'dotted' | 'none';\n\n // Row styling\n cellPadding?: string;\n cellVerticalAlign?: 'top' | 'middle' | 'bottom';\n\n // Alternating row colors (zebra striping)\n enableAlternateRows?: boolean;\n evenRowBackground?: string;\n oddRowBackground?: string;\n\n // Row hover effect\n enableRowHover?: boolean;\n hoverRowBackground?: string;\n\n // First/Last row special styling\n highlightFirstRow?: boolean;\n firstRowBackground?: string;\n highlightLastRow?: boolean;\n lastRowBackground?: string;\n\n // Table layout\n tableLayout?: 'auto' | 'fixed';\n\n // Compact mode\n compactMode?: boolean;\n}\n\nexport interface ListConfig {\n showHeader: boolean;\n headerText?: string;\n headerBinding?: string;\n showBullets?: boolean;\n bulletStyle?: 'disc' | 'circle' | 'square' | 'decimal' | 'none';\n itemSpacing?: number;\n nestedExpressions?: Record<string, string>;\n}\n\n// Chart configuration interfaces\n\nexport interface ChartSeries {\n id: string;\n name: string;\n type?: ChartType;\n valueField: string;\n color?: string;\n yAxisIndex?: 0 | 1;\n aggregation?: AggregationFunction;\n showDataLabels?: boolean;\n lineStyle?: 'solid' | 'dashed' | 'dotted';\n lineWidth?: number;\n areaOpacity?: number;\n}\n\nexport interface ChartAxisConfig {\n show?: boolean;\n title?: string;\n titleColor?: string;\n titleFontSize?: number;\n labelRotation?: AxisLabelRotation;\n labelColor?: string;\n labelFontSize?: number;\n min?: number | 'auto';\n max?: number | 'auto';\n showGridLines?: boolean;\n gridLineColor?: string;\n gridLineStyle?: 'solid' | 'dashed' | 'dotted';\n inverse?: boolean;\n axisLineColor?: string;\n}\n\nexport interface ChartTrendline {\n seriesIndex: number;\n type: TrendlineType;\n color?: string;\n lineWidth?: number;\n lineStyle?: 'solid' | 'dashed' | 'dotted';\n polynomialOrder?: number;\n movingAveragePeriod?: number;\n}\n\nexport interface ChartColorPalette {\n name: string;\n colors: string[];\n}\n\nexport interface ChartConfig {\n // Chart type\n chartType: ChartType;\n chartSubType: ChartSubType;\n\n // Data binding\n dataSourceField: string;\n categoryField: string;\n\n // Series\n series: ChartSeries[];\n\n // Title\n title?: string;\n titleColor?: string;\n titleFontSize?: number;\n titleFontWeight?: string;\n titleAlign?: 'left' | 'center' | 'right';\n subtitle?: string;\n subtitleColor?: string;\n subtitleFontSize?: number;\n\n // Axes\n xAxis?: ChartAxisConfig;\n yAxis?: ChartAxisConfig;\n secondaryYAxis?: ChartAxisConfig;\n\n // Legend\n legendPosition?: LegendPosition;\n legendFontSize?: number;\n legendFontColor?: string;\n\n // Color palette\n colorPalette?: ChartColorPalette;\n\n // Trendlines\n trendlines?: ChartTrendline[];\n\n // Data labels\n showDataLabels?: boolean;\n dataLabelPosition?: 'inside' | 'outside' | 'top' | 'center';\n dataLabelFontSize?: number;\n dataLabelColor?: string;\n\n // Tooltip\n showTooltip?: boolean;\n tooltipTrigger?: 'item' | 'axis';\n\n // Animation\n enableAnimation?: boolean;\n animationDuration?: number;\n\n // Appearance\n backgroundColor?: string;\n borderRadius?: number;\n innerRadius?: number;\n\n // Gauge-specific\n gaugeMin?: number;\n gaugeMax?: number;\n\n // Waterfall-specific\n waterfallPositiveColor?: string;\n waterfallNegativeColor?: string;\n waterfallTotalColor?: string;\n}\n\nexport interface StyleProperties {\n // Typography\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n fontStyle?: string;\n textDecoration?: string;\n lineHeight?: string;\n letterSpacing?: string;\n\n // Colors\n color?: string;\n backgroundColor?: string;\n\n // Text Alignment\n textAlign?: 'left' | 'center' | 'right' | 'justify';\n verticalAlign?: 'top' | 'middle' | 'bottom';\n\n // Spacing\n padding?: string;\n paddingTop?: string;\n paddingRight?: string;\n paddingBottom?: string;\n paddingLeft?: string;\n margin?: string;\n marginTop?: string;\n marginRight?: string;\n marginBottom?: string;\n marginLeft?: string;\n\n // Borders\n border?: string;\n borderWidth?: string;\n borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double';\n borderColor?: string;\n borderRadius?: string;\n borderTop?: string;\n borderRight?: string;\n borderBottom?: string;\n borderLeft?: string;\n\n // Shadow\n boxShadow?: string;\n textShadow?: string;\n\n // Layout\n display?: string;\n flexDirection?: string;\n justifyContent?: string;\n alignItems?: string;\n gap?: string;\n\n // Transform\n transform?: string;\n rotation?: number;\n\n // Other\n opacity?: number;\n overflow?: string;\n whiteSpace?: string;\n wordBreak?: string;\n}\n\nexport interface DataBinding {\n sourceField: string;\n dataType: 'currency' | 'text' | 'number' | 'date' | 'boolean' | 'array';\n formatting?: DataFormatting;\n iteration?: IterationConfig;\n}\n\nexport interface DataFormatting {\n locale?: string;\n symbol?: string;\n decimalPlaces?: number;\n dateFormat?: string;\n customFormat?: string;\n thousandsSeparator?: boolean;\n prefix?: string;\n suffix?: string;\n}\n\nexport interface IterationConfig {\n source: string;\n itemName: string;\n}\n\nexport interface ConditionalRule {\n id: string;\n type: 'hideIfEmpty' | 'hideIfZero' | 'custom';\n enabled: boolean;\n field?: string;\n operator?: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'contains' | 'isEmpty' | 'isNotEmpty';\n value?: string | number | boolean;\n action?: 'show' | 'hide' | 'styleOverride';\n styleOverride?: Partial<StyleProperties>;\n}\n\n// Complex Table interfaces\n\nexport interface ComplexTableCell {\n id: string;\n row: number;\n col: number;\n colspan: number;\n rowspan: number;\n content: string;\n covered: boolean;\n coveredBy?: string;\n isHeader: boolean;\n dataBinding?: DataBinding;\n style?: Partial<StyleProperties>;\n}\n\nexport interface ComplexTableConfig {\n rowCount: number;\n colCount: number;\n headerRowCount: number;\n cells: ComplexTableCell[];\n columnWidths: string[];\n rowHeights?: string[];\n\n // Table-level styling\n showOuterBorder?: boolean;\n outerBorderWidth?: string;\n outerBorderColor?: string;\n outerBorderStyle?: 'solid' | 'dashed' | 'dotted' | 'double' | 'none';\n showGridLines?: boolean;\n gridLineWidth?: string;\n gridLineColor?: string;\n gridLineStyle?: 'solid' | 'dashed' | 'dotted' | 'none';\n headerBackground?: string;\n headerTextColor?: string;\n headerFontWeight?: string;\n headerFontSize?: string;\n headerTextAlign?: 'left' | 'center' | 'right';\n headerPadding?: string;\n cellPadding?: string;\n cellVerticalAlign?: 'top' | 'middle' | 'bottom';\n cellTextAlign?: 'left' | 'center' | 'right';\n tableLayout?: 'auto' | 'fixed';\n}\n\nexport interface TableColumn {\n id: string;\n header: string;\n dataBinding?: DataBinding;\n style?: StyleProperties;\n width?: string;\n}\n","export const MM_TO_PX = 3.7795275591;\nexport const PX_TO_MM = 1 / MM_TO_PX;\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReportSection } from '../models/report-template.model';\nimport { StyleMapperService } from '../services/style-mapper.service';\nimport { inject } from '@angular/core';\n\n@Component({\n selector: 'rv-report-band',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"rv-band\" [ngStyle]=\"bandStyles\" [style.height.mm]=\"section.height\">\n </div>\n `,\n styles: [`\n .rv-band {\n position: absolute;\n left: 0;\n right: 0;\n box-sizing: border-box;\n }\n :host(.header) .rv-band { top: 0; }\n :host(.footer) .rv-band { bottom: 0; }\n `]\n})\nexport class ReportBandComponent {\n @Input({ required: true }) section!: ReportSection;\n @Input() position: 'header' | 'footer' = 'header';\n\n private styleMapper = inject(StyleMapperService);\n\n get bandStyles(): Record<string, string> {\n return this.styleMapper.mapBandStyle(this.section);\n }\n}\n","// Report Viewer - Public API\r\n\r\n// Main component\r\nexport { ReportViewerComponent } from './lib/report-viewer.component';\r\n\r\n// Models\r\nexport * from './lib/models/component.model';\r\nexport * from './lib/models/report-template.model';\r\n\r\n// Services (for advanced standalone use)\r\nexport { DataResolverService } from './lib/services/data-resolver.service';\r\nexport { FormattingService } from './lib/services/formatting.service';\r\nexport { ChartOptionsBuilderService } from './lib/services/chart-options-builder.service';\r\nexport { TokenResolverService } from './lib/services/token-resolver.service';\r\nexport { StyleMapperService } from './lib/services/style-mapper.service';\r\nexport { TemplateValidatorService } from './lib/services/template-validator.service';\r\nexport { TemplateNormalizerService } from './lib/services/template-normalizer.service';\r\nexport { ViewerStateService } from './lib/services/viewer-state.service';\r\nexport { SearchService } from './lib/services/search.service';\r\nexport { ExportService } from './lib/services/export.service';\r\nexport { PrintService } from './lib/services/print.service';\r\n\r\n// Constants\r\nexport { REPORT_TOKENS, resolveTokens } from './lib/constants/report-tokens';\r\nexport type { ReportToken } from './lib/constants/report-tokens';\r\nexport { MM_TO_PX, PX_TO_MM } from './lib/constants/page-sizes';\r\n\r\n// Layout components (for advanced customization)\r\nexport { ReportPageComponent } from './lib/layout/report-page.component';\r\nexport { ReportBandComponent } from './lib/layout/report-band.component';\r\n\r\n// Toolbar and viewer components\r\nexport { ViewerToolbarComponent } from './lib/toolbar/viewer-toolbar.component';\r\nexport { PageContainerComponent } from './lib/page-container/page-container.component';\r\nexport { SidebarContainerComponent } from './lib/sidebar/sidebar-container.component';\r\nexport { ThumbnailSidebarComponent } from './lib/sidebar/thumbnail-sidebar.component';\r\nexport { TocSidebarComponent } from './lib/sidebar/toc-sidebar.component';\r\n\r\n// Renderer components (for advanced customization)\r\nexport { ComponentRendererComponent } from './lib/components/component-renderer/component-renderer.component';\r\nexport { TextRendererComponent } from './lib/components/text-renderer/text-renderer.component';\r\nexport { TableRendererComponent } from './lib/components/table-renderer/table-renderer.component';\r\nexport { ChartRendererComponent } from './lib/components/chart-renderer/chart-renderer.component';\r\nexport { ImageRendererComponent } from './lib/components/image-renderer/image-renderer.component';\r\nexport { QrcodeRendererComponent } from './lib/components/qrcode-renderer/qrcode-renderer.component';\r\nexport { ListRendererComponent } from './lib/components/list-renderer/list-renderer.component';\r\nexport { LineRendererComponent } from './lib/components/line-renderer/line-renderer.component';\r\nexport { ShapeRendererComponent } from './lib/components/shape-renderer/shape-renderer.component';\r\nexport { ContainerRendererComponent } from './lib/components/container-renderer/container-renderer.component';\r\nexport { ComplexTableRendererComponent } from './lib/components/complex-table-renderer/complex-table-renderer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormattingService","i2.TokenResolverService","i1.PrintService","i4","i1","i2"],"mappings":"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"}