{"version":3,"file":"ngx-t-reports.mjs","sources":["../../../projects/ngx-t-reports/src/lib/components/e-charts/e-charts/e-charts.component.ts","../../../projects/ngx-t-reports/src/lib/components/e-charts/e-charts/e-charts.component.html","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/functions/createPieChart.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/components/grouping-chart/grouping-chart.component.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/components/grouping-chart/grouping-chart.component.html","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/constants/colorCodes.ts","../../../projects/ngx-t-reports/src/types/DocumentSectionConfigurationsInterface.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/isEqual.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/functions/groupedBy.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-selectors.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-actions.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/keysToCamelCase.ts","../../../projects/ngx-t-reports/src/lib/shared/functions/tableutills.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/NgxTMatrixTable-effects.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/store/ngx-tmatrix-table-store.service.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/ngx-t-matrix-table.component.ts","../../../projects/ngx-t-reports/src/lib/components/ngx-t-matrix-table/ngx-t-matrix-table.component.html","../../../projects/ngx-t-reports/src/lib/injection-tokens/index.ts","../../../projects/ngx-t-reports/src/lib/components/element-editor/element-editor.component.ts","../../../projects/ngx-t-reports/src/lib/components/element-editor/element-editor.component.html","../../../projects/ngx-t-reports/src/lib/config/ngx-t-matrix-table-config.ts","../../../projects/ngx-t-reports/src/lib/config/Report-inputs.ts","../../../projects/ngx-t-reports/src/lib/services/time-zone-adapter/time-zone-adapter.service.ts","../../../projects/ngx-t-reports/src/lib/components/report-sheet/report-sheet.component.ts","../../../projects/ngx-t-reports/src/lib/components/report-sheet/report-sheet.component.html","../../../projects/ngx-t-reports/src/public-api.ts","../../../projects/ngx-t-reports/src/ngx-t-reports.ts"],"sourcesContent":["\r\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { EChartsOption } from 'echarts';\r\nimport { NgxEchartsModule, provideEchartsCore } from 'ngx-echarts';\r\nimport * as echarts from 'echarts/core';\r\nimport { GridComponent } from 'echarts/components';\r\nimport { CanvasRenderer } from 'echarts/renderers';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n  BarChart, BoxplotChart, CandlestickChart, CustomChart, EffectScatterChart,\r\n  FunnelChart, GaugeChart, GraphChart, HeatmapChart, LineChart, LinesChart,\r\n  MapChart, ParallelChart, PictorialBarChart, PieChart, RadarChart, SankeyChart,\r\n  ScatterChart, SunburstChart, ThemeRiverChart, TreeChart, TreemapChart\r\n} from 'echarts/charts';\r\n\r\necharts.use([\r\n  BarChart, BoxplotChart, CandlestickChart, CustomChart, EffectScatterChart,\r\n  FunnelChart, GaugeChart, GraphChart, HeatmapChart, LineChart, LinesChart,\r\n  MapChart, ParallelChart, PictorialBarChart, PieChart, RadarChart, SankeyChart,\r\n  ScatterChart, SunburstChart, ThemeRiverChart, TreeChart, TreemapChart,\r\n  GridComponent, CanvasRenderer\r\n]);\r\n@Component({\r\n  selector: 'app-e-charts',\r\n  standalone: true,\r\n  imports: [\r\n    NgxEchartsModule,\r\n    CommonModule\r\n  ],\r\n  providers: [\r\n    provideEchartsCore({ echarts }),\r\n  ],\r\n  templateUrl: './e-charts.component.html',\r\n  styleUrl: './e-charts.component.scss'\r\n})\r\nexport class EChartsComponent implements OnChanges {\r\n  @Input() loading!: boolean\r\n  @Input() options!: EChartsOption\r\n  @Output() chartClick = new EventEmitter<any>();\r\n  chartOption: EChartsOption | undefined\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n\r\n    if (changes['options']) {\r\n\r\n\r\n\r\n      this.chartOption = this.options\r\n\r\n    }\r\n\r\n  }\r\n\r\n  onChartClick(event: any) {\r\n    this.chartClick.emit(event);\r\n  }\r\n}\r\n","@if (chartOption ) {\r\n<div echarts style=\"height:338px;\" (chartClick)=\"onChartClick($event)\" [options]=\"chartOption\" [loading]=\"loading\"\r\n    class=\"chart\"></div>\r\n}","import { EChartsOption } from \"echarts\"\r\n\r\nexport function createADonutChart(id: string, title: string, dataSeries: {\r\n    value: number,\r\n    name: string\r\n}[]) {\r\n    return {\r\n        title,\r\n        id: id,\r\n        chart: {\r\n\r\n            toolbox: {\r\n                show: true,\r\n                feature: {\r\n                    mark: { show: true },\r\n                    dataView: { show: true, readOnly: false },\r\n                    restore: { show: true },\r\n                    saveAsImage: { show: true }\r\n                }\r\n            },\r\n\r\n            grid: {\r\n                top: 100,\r\n            },\r\n            tooltip: {\r\n                trigger: 'item'\r\n            },\r\n            legend: {\r\n                top: '5%',\r\n                left: 'center'\r\n            },\r\n            series:\r\n                [{\r\n                    name: title,\r\n                    type: 'pie',\r\n                    radius: ['40%', '70%'],\r\n                    avoidLabelOverlap: false,\r\n                    itemStyle: {\r\n                        borderRadius: 10,\r\n                        borderColor: '#fff',\r\n                        borderWidth: 2\r\n                    },\r\n                    label: {\r\n                        show: true\r\n                    },\r\n                    emphasis: {\r\n                        label: {\r\n                            show: true,\r\n                            fontSize: '40',\r\n                            fontWeight: 'bold'\r\n                        }\r\n                    },\r\n                    labelLine: {\r\n                        lineStyle: {\r\n                            color: '#235894'\r\n                        }\r\n                    },\r\n                    data: dataSeries\r\n                }],\r\n\r\n\r\n\r\n\r\n\r\n        }\r\n    }\r\n}\r\n\r\nexport function createABarChart(id: string, title: string, dataSeries: {\r\n    value: number,\r\n    name: string\r\n}[]) {\r\n    return {\r\n        title,\r\n        id,\r\n        chart: {\r\n            toolbox: {\r\n                show: true,\r\n                feature: {\r\n                    mark: { show: true },\r\n                    dataView: { show: true, readOnly: false },\r\n                    restore: { show: true },\r\n                    saveAsImage: { show: true }\r\n                }\r\n            },\r\n            tooltip: {\r\n                trigger: 'axis',\r\n                axisPointer: {\r\n                    type: 'shadow'\r\n                }\r\n            },\r\n            grid: {\r\n                left: '3%',\r\n                right: '4%',\r\n                bottom: '3%',\r\n                containLabel: true\r\n            },\r\n            xAxis: [\r\n                {\r\n                    type: 'category',\r\n                    data: dataSeries.map(v => v.name),\r\n                    axisTick: {\r\n                        alignWithLabel: true\r\n                    }\r\n                }\r\n            ],\r\n            yAxis: [\r\n                {\r\n                    type: 'value'\r\n                }\r\n            ],\r\n            series: [\r\n\r\n                {\r\n                    name: '',\r\n                    type: 'bar',\r\n                    label: {\r\n                        show: true\r\n                    },\r\n                    emphasis: {\r\n                        label: {\r\n                            show: true,\r\n                            fontSize: '40',\r\n                            fontWeight: 'bold'\r\n                        }\r\n                    },\r\n                    labelLine: {\r\n                        lineStyle: {\r\n                            color: '#235894'\r\n                        }\r\n                    },\r\n                    data: dataSeries.map(\r\n                        (v, index) => ({\r\n                            ...v,\r\n                            itemStyle: {\r\n                                color: getColors(dataSeries.length)[index]\r\n                            }\r\n                        })\r\n                    )\r\n\r\n\r\n                }\r\n            ],\r\n\r\n        },\r\n\r\n    }\r\n}\r\nexport function createRoseTypeChart(id: string, title: string, dataSeries: {\r\n    value: number,\r\n    name: string\r\n}[]) {\r\n    return {\r\n        title,\r\n        id,\r\n        chart: {\r\n            legend: {\r\n                top: 'bottom'\r\n            },\r\n            toolbox: {\r\n                show: true,\r\n                feature: {\r\n                    mark: { show: true },\r\n                    dataView: { show: true, readOnly: false },\r\n                    restore: { show: true },\r\n                    saveAsImage: { show: true }\r\n                }\r\n            },\r\n            series: [\r\n                {\r\n                    name: title,\r\n                    type: 'pie',\r\n                    radius: [50, 250],\r\n                    center: ['50%', '50%'],\r\n                    roseType: 'area',\r\n                    itemStyle: {\r\n                        borderRadius: 8\r\n                    },\r\n                    data: dataSeries\r\n                }\r\n            ]\r\n        }\r\n    }\r\n}\r\nexport function createAPolarChart(id: string, title: string, dataSeries: {\r\n    value: number,\r\n    name: string\r\n}[]) {\r\n\r\n    return {\r\n        title,\r\n        id,\r\n        chart: {\r\n            title: [\r\n                {\r\n                    text: title\r\n                }\r\n            ],\r\n            toolbox: {\r\n                show: true,\r\n                feature: {\r\n                    mark: { show: true },\r\n                    dataView: { show: true, readOnly: false },\r\n                    restore: { show: true },\r\n                    saveAsImage: { show: true }\r\n                }\r\n            },\r\n            polar: {\r\n                radius: [30, '80%']\r\n            },\r\n            angleAxis: {\r\n\r\n                startAngle: 75\r\n            },\r\n            radiusAxis: {\r\n                type: 'category',\r\n                data: dataSeries.map(v => v.name)\r\n            },\r\n            tooltip: {},\r\n            series: {\r\n                type: 'bar',\r\n                data: dataSeries.map(v => v.value),\r\n                coordinateSystem: 'polar',\r\n                label: {\r\n                    show: true,\r\n                    position: 'middle',\r\n                    formatter: '{b}: {c}'\r\n                }\r\n            }\r\n        } as EChartsOption\r\n\r\n\r\n    }\r\n}\r\nexport const colors = [\r\n    '#4285F4',\r\n    '#FBBC05',\r\n    '#34A853',\r\n    '#EA4335',\r\n    '#55ACEE',\r\n    '#3B5998',\r\n    '#7CBB00',\r\n    '#00A1F1',\r\n    '#7B0099',\r\n    '#146EB4'\r\n];\r\n\r\nexport function getColors(n: number) {\r\n    const result = [];\r\n    for (let i = 0; i < n; i++) {\r\n        result.push(colors[i % colors.length]);\r\n    }\r\n    return result;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n\r\nimport { GroupConfig } from '../../functions/groupedBy';\r\n\r\nimport { createABarChart, createADonutChart, createAPolarChart, createRoseTypeChart } from '../../functions/createPieChart';\r\nimport { EChartsOption } from 'echarts';\r\nimport { DocumentLitsLabelConfigInterface } from '../../../../../types/DocumentSectionConfigurationsInterface';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport { EChartsComponent } from '../../../e-charts/e-charts/e-charts.component';\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\n@Component({\r\n  selector: 'app-grouping-chart',\r\n  standalone: true,\r\n  imports: [CommonModule, EChartsComponent,MatCardModule,MatButtonModule,MatIconModule,MatMenuModule],\r\n  templateUrl: './grouping-chart.component.html',\r\n  styleUrl: './grouping-chart.component.scss'\r\n})\r\nexport class GroupingChartComponent {\r\n  @Input() groups: GroupConfig[] = []\r\n  @Input() numberProperties: DocumentLitsLabelConfigInterface[] = []\r\n\r\n  constructor() {\r\n\r\n  }\r\n  private cache!: { chart: EChartsOption, title: string, id: string }[]\r\n  private lastHash: string | null = null;\r\n\r\n\r\n  get totalDistributionPerGroup(): { chart: EChartsOption, title: string, id: string }[] {\r\n    // Create a hash or identifier based on the content of the groups to detect changes\r\n    const currentHash = JSON.stringify(this.groups);\r\n    if (this.lastHash === currentHash && this.cache) {\r\n      // If the hash hasn't changed, return the cached result\r\n      return this.cache;\r\n    }\r\n\r\n    // Compute the distribution if data has changed\r\n    const result = this.numberProperties?.map((property, index) => ({\r\n      title: property.label,\r\n      id: index.toString(),\r\n      dataSeries: this.groups.map(g => ({\r\n        name: g.name,\r\n\r\n        value: Number(g.totals?.[property.formControlName] || 0)\r\n\r\n      }))\r\n    }))\r\n      .map(chart => {\r\n        const type = this.chartConfig[chart.id]?.chartType || ChartTypes.Donut\r\n        if (type === ChartTypes.Donut || !type) {\r\n          return createADonutChart(chart.id, chart.title, chart.dataSeries)\r\n        }\r\n\r\n        if (type === ChartTypes.Bar) {\r\n          return createABarChart(chart.id, chart.title, chart.dataSeries)\r\n        }\r\n\r\n        if (type === ChartTypes.Polar) {\r\n          return createAPolarChart(chart.id, chart.title, chart.dataSeries)\r\n        }\r\n        if (type === ChartTypes.RoseType) {\r\n          return createRoseTypeChart(chart.id, chart.title, chart.dataSeries)\r\n        }\r\n\r\n        return\r\n\r\n\r\n\r\n      })\r\n\r\n    // Update cache and hash\r\n    this.cache = result as any;\r\n    this.lastHash = currentHash;\r\n\r\n    return result as { chart: EChartsOption, title: string, id: string }[]\r\n  }\r\n  activeChart: string | undefined\r\n  chartConfig: {\r\n    [key: string]: {\r\n      full: boolean,\r\n      chartType: ChartTypes\r\n    }\r\n  } = {}\r\n  isExpanded() {\r\n    return this.chartConfig[this.activeChart || '']?.full\r\n  }\r\n  chatTypesEnum = ChartTypes\r\n  chartType() {\r\n    return this.chartConfig[this.activeChart || '']?.chartType\r\n  }\r\n  setChartType(type: ChartTypes) {\r\n    if (!this.chartConfig[this.activeChart || '']) {\r\n      this.chartConfig[this.activeChart || ''] = {\r\n        full: false,\r\n        chartType: this.chatTypesEnum.Donut\r\n      }\r\n    }\r\n    if (!this.chartConfig[this.activeChart || '']) return;\r\n    this.chartConfig[this.activeChart || '']!['chartType'] = type\r\n    this.lastHash = null\r\n  }\r\n  toggleExpansion() {\r\n    const st = !!this.chartConfig[this.activeChart || '']?.full\r\n    if (!this.chartConfig[this.activeChart || '']) {\r\n      this.chartConfig[this.activeChart || ''] = {\r\n        full: false,\r\n        chartType: this.chatTypesEnum.Donut\r\n      }\r\n    }\r\n    if (!this.chartConfig[this.activeChart || '']) return;\r\n    return this.chartConfig[this.activeChart || '']!.full = !st\r\n  }\r\n  getChartSize(id: string) {\r\n    return this.chartConfig[id]?.full ? '12' : '4'\r\n  }\r\n}\r\nexport enum ChartTypes {\r\n  Donut = \"donutChart\",\r\n  Bar = \"bar\",\r\n  Polar = \"polar\",\r\n  RoseType = \"roseType\"\r\n\r\n}","<section style=\"background: var(--mat-sys-surface-container);\">\r\n\r\n\r\n    <div class=\"row\">\r\n        @for (chart of totalDistributionPerGroup||[]; track chart.id) {\r\n        <div *ngIf=\"!!chart\" class=\"chart-container\" [class]=\"'col-md-'+getChartSize(chart.id)\">\r\n            <mat-card (mouseover)=\"activeChart = chart.id\">\r\n                <mat-card-header>\r\n                    <mat-card-title>\r\n                        <h4>\r\n                            {{chart.title}}\r\n                            <button [matMenuTriggerFor]=\"menu\" style=\"position: absolute;right: 24px;top:24px\"\r\n                                mat-icon-button>\r\n                                <mat-icon>\r\n                                    more_vert\r\n                                </mat-icon>\r\n                            </button>\r\n                        </h4>\r\n\r\n                    </mat-card-title>\r\n\r\n                </mat-card-header>\r\n                <mat-card-content>\r\n                    <app-e-charts [options]=\"chart.chart\">\r\n\r\n                    </app-e-charts>\r\n                </mat-card-content>\r\n\r\n            </mat-card>\r\n        </div>\r\n        }\r\n\r\n    </div>\r\n</section>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n    <h5> Chart settings </h5>\r\n    <button (click)=\"toggleExpansion()\" mat-menu-item>\r\n        <mat-icon>{{isExpanded()?'close_fullscreen':'open_in_full'}} </mat-icon>\r\n        <span> {{isExpanded()?'Close full view':'View in full size' }}</span>\r\n    </button>\r\n    <h5> Chart type </h5>\r\n    <button (click)=\"setChartType(chatTypesEnum.Donut)\" mat-menu-item>\r\n        <mat-icon [color]=\"chartType() ===chatTypesEnum.Donut|| !chartType()?'primary':''\">donut_large</mat-icon>\r\n        <span [style.font-weight]=\"chartType() ===chatTypesEnum.Donut|| !chartType()?'bold':''\">Donut chart</span>\r\n    </button>\r\n    <button (click)=\"setChartType(chatTypesEnum.Bar)\" mat-menu-item>\r\n        <mat-icon [color]=\"chartType() ===chatTypesEnum.Bar?'primary':''\">bar_chart</mat-icon>\r\n        <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">bar</span>\r\n    </button>\r\n    <button (click)=\"setChartType(chatTypesEnum.Polar)\" mat-menu-item>\r\n        <mat-icon [color]=\"chartType() ===chatTypesEnum.Polar?'primary':''\">radar</mat-icon>\r\n        <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">Polar </span>\r\n    </button>\r\n    <button (click)=\"setChartType(chatTypesEnum.RoseType)\" mat-menu-item>\r\n        <mat-icon [color]=\"chartType() ===chatTypesEnum.RoseType?'primary':''\">filter_vintage</mat-icon>\r\n        <span [style.font-weight]=\"chartType() ===chatTypesEnum.Bar?'bold':''\">Rose </span>\r\n    </button>\r\n\r\n</mat-menu>","export const COLOR_CODES = {\r\n  secondary: {\r\n    color1: '#FFF5EB', // Very light orange tint (5% of base)\r\n    color2: '#FFEBD6', // Light orange tint (10% of base)\r\n    color3: '#FFE1C2', // Light-medium orange tint (15% of base)\r\n    color4: '#FFD7AD', // Medium orange tint (20% of base)\r\n    color5: '#FFCD99', // Medium-deep orange tint (25% of base)\r\n    color6: '#FFC285', // Deeper orange tint (30% of base)\r\n    color7: '#FFB870', // Even deeper orange tint (35% of base)\r\n    color8: '#F68C1E'  // Base color\r\n  },\r\n  blue: {\r\n    color1: '#DAE5FC', // Very light tint (5% of base)\r\n    color2: '#C0D2F9', // Light tint (10% of base)\r\n    color3: '#A6C0F7', // Light-medium tint (15% of base)\r\n    color4: '#8DADF5', // Medium tint (20% of base)\r\n    color5: '#739BF2', // Medium-deep tint (25% of base)\r\n    color6: '#5988F0', // Deeper tint (30% of base)\r\n    color7: '#3F76ED', // Even deeper tint (35% of base)\r\n    color8: '#2563EB', // Base color\r\n  },\r\n  green: {\r\n    color1: '#ECF2DB', // Very light tint (5% of base)\r\n    color2: '#DFE9C2', // Light tint (10% of base)\r\n    color3: '#D2E0A9', // Light-medium tint (15% of base)\r\n    color4: '#C5D790', // Medium tint (20% of base)\r\n    color5: '#B8CE77', // Medium-deep tint (25% of base)\r\n    color6: '#ABC55E', // Deeper tint (30% of base)\r\n    color7: '#9EBC45', // Even deeper tint (35% of base)\r\n    color8: '#91B32C', // Base color\r\n  },\r\n\r\n  blueviolet: {\r\n    color1: '#EBDBFA', // Very light tint (5% of base)\r\n    color2: '#DDC2F7', // Light tint (10% of base)\r\n    color3: '#CFA9F3', // Light-medium tint (15% of base)\r\n    color4: '#C290F0', // Medium tint (20% of base)\r\n    color5: '#B477EC', // Medium-deep tint (25% of base)\r\n    color6: '#A65DE9', // Deeper tint (30% of base)\r\n    color7: '#9844E5', // Even deeper tint (35% of base)\r\n    color8: '#8A2BE2', // Base color\r\n  },\r\n  red: {\r\n    color1: '#FDE5E1', // Very light tint (5% of base)\r\n    color2: '#FBD3CB', // Light tint (10% of base)\r\n    color3: '#FAC1B6', // Light-medium tint (15% of base)\r\n    color4: '#F8AFA1', // Medium tint (20% of base)\r\n    color5: '#F79D8B', // Medium-deep tint (25% of base)\r\n    color6: '#F58A76', // Deeper tint (30% of base)\r\n    color7: '#F47860', // Even deeper tint (35% of base)\r\n    color8: '#F2664B', // Base color\r\n  },\r\n  purple: {\r\n    color1: '#E5DDEE', // Very light tint (5% of base)\r\n    color2: '#D3C4E2', // Light tint (10% of base)\r\n    color3: '#C1ACD6', // Light-medium tint (15% of base)\r\n    color4: '#AF94C9', // Medium tint (20% of base)\r\n    color5: '#9D7CBD', // Medium-deep tint (25% of base)\r\n    color6: '#8A63B1', // Deeper tint (30% of base)\r\n    color7: '#784BA5', // Even deeper tint (35% of base)\r\n    color8: '#663399', // Base color\r\n  },\r\n  // Spectrum Harmony - Best for business applications and financial data\r\n  spectrumHarmony: {\r\n    color1: '#E3F2FD', // Light blue - first level\r\n    color2: '#BBDEFB', // Slightly deeper blue\r\n    color3: '#DCEDC8', // Light green - second level\r\n    color4: '#C5E1A5', // Slightly deeper green\r\n    color5: '#FFF9C4', // Light yellow - third level\r\n    color6: '#FFECB3', // Light amber - fourth level\r\n    color7: '#FFE082', // Medium amber\r\n    color8: '#FFCCBC'  // Light red/orange - fifth level\r\n  },\r\n\r\n  // Vibrant Distinction - Best for complex hierarchical data requiring quick differentiation\r\n  vibrantDistinction: {\r\n    color1: '#E8F5E9', // Mint green - first level\r\n    color2: '#C8E6C9', // Medium mint\r\n    color3: '#E1F5FE', // Light blue - second level\r\n    color4: '#B3E5FC', // Medium light blue\r\n    color5: '#F3E5F5', // Lavender - third level\r\n    color6: '#FFF8E1', // Light amber - fourth level\r\n    color7: '#FFECB3', // Medium amber\r\n    color8: '#FFEBEE'  // Light pink - fifth level\r\n  },\r\n\r\n  // Natural Progression - Best for environmental data and science applications\r\n  naturalProgression: {\r\n    color1: '#E0F7FA', // Light cyan - first level\r\n    color2: '#B2EBF2', // Medium cyan\r\n    color3: '#C8E6C9', // Light green - second level\r\n    color4: '#A5D6A7', // Medium green\r\n    color5: '#F0F4C3', // Light lime - third level\r\n    color6: '#FFE0B2', // Light orange - fourth level\r\n    color7: '#FFCC80', // Medium orange\r\n    color8: '#FFCDD2'  // Light red - fifth level\r\n  },\r\n\r\n  // Colorblind-Friendly - Best for accessibility-focused and public-facing applications\r\n  colorblindFriendly: {\r\n    color1: '#F5F5F5', // Light gray - first level\r\n    color2: '#E0E0E0', // Medium light gray\r\n    color3: '#BBDEFB', // Light blue - second level\r\n    color4: '#90CAF9', // Medium light blue\r\n    color5: '#FFECB3', // Light amber - third level\r\n    color6: '#C8E6C9', // Light green - fourth level\r\n    color7: '#A5D6A7', // Medium green\r\n    color8: '#E1BEE7'  // Light purple - fifth level\r\n  },\r\n\r\n  // Corporate Structure - Best for formal reports and corporate environments\r\n  corporateStructure: {\r\n    color1: '#ECEFF1', // Very light blue-gray - first level\r\n    color2: '#CFD8DC', // Light blue-gray - second level\r\n    color3: '#B0BEC5', // Medium blue-gray - third level\r\n    color4: '#90A4AE', // Medium-dark blue-gray - fourth level\r\n    color5: '#78909C', // Dark blue-gray - fifth level\r\n    color6: '#607D8B', // Deeper blue-gray\r\n    color7: '#546E7A', // Very dark blue-gray\r\n    color8: '#455A64'  // Extremely dark blue-gray\r\n  }\r\n};\r\n\r\n// You can implement a function to get random color codes similar to the original example\r\nlet colorDeck: any[] = [];\r\n\r\nexport const randomColorCode = () => {\r\n  // If the deck is empty, refill and shuffle it\r\n  if (colorDeck.length === 0) {\r\n    colorDeck = [...Object.values(COLOR_CODES)];\r\n\r\n    // Fisher-Yates shuffle algorithm\r\n    for (let i = colorDeck.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [colorDeck[i], colorDeck[j]] = [colorDeck[j], colorDeck[i]];\r\n    }\r\n  }\r\n\r\n  // Take the top color from our shuffled deck\r\n  return colorDeck.pop();\r\n};","export enum SectionTypeGroups {\r\n  Transactions = 'transactions',\r\n  Processes = 'processes',\r\n  System = 'system',\r\n  FormPreview = \"formPreview\",\r\n  Home = \"home\",\r\n  Transaction = \"transaction\",\r\n  Report = \"Report\"\r\n}\r\n\r\nexport interface DocumentSectionConfigurationsInterface {\r\n  sectionTitle: string;\r\n  icon: string;\r\n  getSectionList:\r\n  {\r\n    submissionId: string;\r\n    httpEndPoint: string\r\n  }\r\n  documentDetailsConfig?: {\r\n    title: string;\r\n  };\r\n  sectionGroup: SectionTypeGroups\r\n  docuListConfig?: DocumentLitsConfigInterface\r\n\r\n\r\n}\r\nexport interface DocumentLitsConfigInterface {\r\n\r\n  segments: any[];\r\n  activeSegment: string;\r\n  labelConfiguration: DocumentLitsLabelConfigInterface[]\r\n\r\n}\r\nexport enum DocumentLitsLabelConfigInterfaceValueType {\r\n  currency = 'currency',\r\n  number = 'number',\r\n  string = 'string',\r\n  date = 'date',\r\n  daysAgo = 'daysAgo',\r\n  systemReference = 'systemReference'\r\n}\r\nexport interface DocumentLitsLabelConfigInterface {\r\n  label: string;\r\n  formControlName: string;\r\n  isHidden?: boolean;\r\n  stepName: string | null;\r\n  valueType: DocumentLitsLabelConfigInterfaceValueType\r\n}\r\n\r\nexport interface GridListLabelConfigInterface {\r\n  labelConfiguration: DocumentLitsLabelConfigInterface[]\r\n}","/**\r\n * Compares previous and current objects, returning only properties that changed.\r\n * - Properties in prev but not in current: set to undefined\r\n * - Properties in current but not in prev: included with current value\r\n * - Properties in both with different values: included with current value\r\n * \r\n * @example\r\n * // prev = {a: 8, b: 0}, current = {b: 5}\r\n * // result = {b: 5, a: undefined}\r\n */\r\nexport function getChangedProperties<T extends Record<string, any>>(\r\n    prevPassed: T | null | undefined, \r\n    currentPassed: T | null | undefined\r\n  ): Partial<T> {\r\n    // Handle edge cases\r\n    // remove undefined in prev \r\n    const prev = prevPassed ? Object.keys(prevPassed).reduce((acc, key) => {\r\n      if (prevPassed[key] !== undefined) {\r\n        (acc as any)[key] = prevPassed[key];\r\n      }\r\n      return acc;\r\n    }, {} as Partial<T>) : undefined;\r\n    // remove undefined in current\r\n    const current = currentPassed ? Object.keys(currentPassed).reduce((acc, key) => {\r\n      if (currentPassed[key] !== undefined) {\r\n        (acc as any)[key] = currentPassed[key];\r\n      }\r\n      return acc;\r\n    }, {} as Partial<T>) : undefined;\r\n    // if both are undefined return empty object\r\n\r\n    if (!prev && !current) return {};\r\n    if (!prev) return { ...current } as Partial<T>;\r\n    if (!current) {\r\n      return Object.keys(prev).reduce((acc, key) => {\r\n        (acc as any)[key] = undefined;\r\n        return acc;\r\n      }, {} as Partial<T>);\r\n    }\r\n  \r\n    const changedProperties: Partial<T> = {};\r\n    \r\n    // Check properties from prev\r\n    for (const key in prev) {\r\n      if (!(key in current)) {\r\n        // Property removed in current\r\n        changedProperties[key] = undefined;\r\n      } else if (!_isEqual(prev[key], current[key])) {\r\n        // Property value changed\r\n        changedProperties[key] = current[key];\r\n      }\r\n    }\r\n    \r\n    // Check for new properties in current\r\n    for (const key in current) {\r\n      if (!(key in prev)) {\r\n        // New property added\r\n        changedProperties[key] = current[key];\r\n      }\r\n    }\r\n    \r\n    return changedProperties;\r\n  }\r\n  \r\nexport function _isEqual(prev: any, next: any): boolean {\r\n    if (prev === next) return true;\r\n\r\n    const prevType = typeof prev;\r\n    const nextType = typeof next;\r\n\r\n    if (prevType !== nextType) return false;\r\n\r\n    if (prevType === 'number') {\r\n        return (prev === next) || (Number.isNaN(prev) && Number.isNaN(next));\r\n    }\r\n\r\n    if (prevType === 'string' || prevType === 'boolean') {\r\n        return prev === next;\r\n    }\r\n\r\n    if (Array.isArray(prev) && Array.isArray(next)) {\r\n        if (prev.length !== next.length) return false;\r\n        for (let i = 0; i < prev.length; i++) {\r\n            if (!_isEqual(prev[i], next[i])) return false;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    if (prevType === 'object' && prev !== null && next !== null) {\r\n        const prevConstructor = prev.constructor;\r\n        const nextConstructor = next.constructor;\r\n\r\n        if (prevConstructor !== nextConstructor) return false;\r\n\r\n        if (prevConstructor === Date) {\r\n            return prev.getTime() === next.getTime();\r\n        }\r\n\r\n        if (prevConstructor === RegExp) {\r\n            return prev.source === next.source && prev.flags === next.flags;\r\n        }\r\n\r\n        const prevKeys = Object.keys(prev);\r\n        const nextKeys = Object.keys(next);\r\n\r\n        if (prevKeys.length !== nextKeys.length) return false;\r\n\r\n        for (const key of prevKeys) {\r\n            if (!Object.prototype.hasOwnProperty.call(next, key)) return false;\r\n            if (!_isEqual(prev[key], next[key])) return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    return prev === null && next === null;\r\n}","import { DocumentLitsLabelConfigInterface } from \"../../../../types/DocumentSectionConfigurationsInterface\";\r\n\r\n\r\nexport interface GroupConfig {\r\n    name: string;\r\n    propertyLabel: string;\r\n    IS_GROUP_CONFIG: boolean;\r\n    LEVELS_BEFORE:number[]\r\n    IS_CLOSED: boolean;\r\n    level: number;\r\n    totals?: {\r\n        [key: string]: number\r\n\r\n    },\r\n    realTotal?: {\r\n        [key: string]: number\r\n\r\n    },\r\n}\r\nexport function groupData(items: any[], keys: string[], level: number = 0): Map<any, any> {\r\n    if (keys.length === 0) return new Map([[level, items]]); // No more keys, return items wrapped in a Map\r\n\r\n    const key = keys[0];\r\n    if(!key)  return new Map([[level, items]]);\r\n    const restKeys = keys.slice(1);\r\n    const grouped = new Map();\r\n    \r\n    for (const item of items) {\r\n        const keyValue = item[key];\r\n       \r\n        if (!grouped.has(keyValue)) {\r\n            grouped.set(keyValue, []);\r\n        }\r\n        \r\n        grouped.get(keyValue).push(item);\r\n    }\r\n\r\n    if (restKeys.length > 0) {\r\n        grouped.forEach((value, key) => { \r\n            grouped.set(key, groupData(value, restKeys, level + 1));\r\n        });\r\n    }\r\n\r\n    return grouped;\r\n}\r\n\r\nexport function matrixTableGroupedData(\r\n    array: any[],\r\n    propertyName: string[],\r\n    closedGroups: string[],\r\n    listConfig: DocumentLitsLabelConfigInterface[]\r\n): Array<GroupConfig | { [key: string]: any }> {\r\n    // Use a Map to handle grouping which can be more efficient for lookups and updates\r\n    const numberProperties = listConfig.filter((config) => config.valueType === 'number'\r\n        || config.valueType === 'currency').map((config) => config.formControlName)\r\n    const noneEmptyPropertyNames = propertyName.filter(n=> !!n&&(n.length>0));\r\n    const noneEmptyArray =  array.filter(a=>!!a && Object.keys(a).length>0)\r\n    const groupedData = groupData(noneEmptyArray, noneEmptyPropertyNames);\r\n    const result = flattenGroupedData(groupedData, propertyName);\r\n    return result\r\n\r\n\r\n    function getSums(data: any[]) {\r\n        if (!Array.isArray(data)) {\r\n            return {}\r\n        }\r\n        const sums: any = {\r\n            IS_SUM_ROW: true\r\n        }\r\n        numberProperties.forEach((property) => {\r\n            sums[property] = `${data.reduce((acc, item) => acc + Number(item[property] || 0), 0)}`\r\n        })\r\n        return sums\r\n    }\r\n    function flattenGroupedData(grouped: Map<any, any>, keys: string[], currentLevel = 0): any[] {\r\n        let result: any[] = [];\r\n        if (keys.length === currentLevel) {\r\n            return Array.from(grouped.values()).flat();\r\n        }\r\n\r\n        grouped.forEach((value, key) => {\r\n\r\n            const isClosed = closedGroups.includes(key);\r\n            let _data = []\r\n\r\n            _data = flattenGroupedData(value, keys, currentLevel + 1)\r\n\r\n            const objectProperty = propertyName[currentLevel]\r\n            const propertyConfig = listConfig.find(l => l.formControlName === objectProperty)\r\n            const groupConfig: GroupConfig = {\r\n                name: key,\r\n                propertyLabel: propertyConfig?.label || objectProperty || '',\r\n                IS_GROUP_CONFIG: true,\r\n                LEVELS_BEFORE:Array.from({ length: currentLevel }, (_, i) => i + 1),\r\n                level: currentLevel,\r\n                totals: getSums(_data),\r\n                IS_CLOSED: isClosed\r\n\r\n            };\r\n        \r\n            result.push(groupConfig);\r\n            result = result.concat(isClosed ? [] : _data)\r\n\r\n\r\n        });\r\n        return result;\r\n    }\r\n\r\n}\r\n\r\n\r\n","import { combineLatest, map, Observable } from \"rxjs\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { matrixTableGroupedData } from \"../functions/groupedBy\";\r\nimport { IDocumentListConfigLocal } from \"../../../../types/IMatrixTableState\";\r\n\r\nexport function NgxTMatrixTableStoreSelectors(store: NgxTMatrixTableStoreService) {\r\n    const state$ = store.select(state => state);\r\n    const reportName$ = store.select(state => state.reportName);\r\n    const list$ = store.select(state => state.list);\r\n    const listConfig$ = store.select(state => state.listConfig);\r\n    const aggregates$ = store.select(state => state.aggregates);\r\n    const groupOptions$ = store.select(state => state.groupOptions);\r\n    const closedGroups$ = store.select(state => state.closedGroups);\r\n    const isOpen$ = store.select(state => state.isOpen);\r\n    const groupChart$ = store.select(state => state.groupChart);\r\n    const draggedGroup$ = store.select(state => state.draggedGroup);\r\n    const scrollIndex$ = store.select(state => state.scrollIndex);\r\n\r\n    const tableColumns$:Observable<IDocumentListConfigLocal[] | null | undefined> = listConfig$\r\n    let itemsToDisplay = 0\r\n    combineLatest(\r\n        [\r\n            groupOptions$,\r\n            listConfig$\r\n        ]\r\n    )\r\n    .pipe(\r\n        map(([\r\n            groupOptions,\r\n            listConfig\r\n        \r\n        \r\n        ]) => (\r\n            [{formControlName: 'tree',label: ''}, ...listConfig || []] as any)\r\n            .filter((col: any) => !col.isHidden).map(\r\n                (col: any) =>({\r\n                    ...col,\r\n                    INCLUDED_IN_GROUP:Boolean(groupOptions?.columns?.includes(col.formControlName))\r\n                })\r\n            )\r\n        \r\n        )\r\n    )\r\n    const displayedColumns$ = tableColumns$.pipe(\r\n        map(tableColumns => tableColumns?.map((config: any) => config.formControlName) || [])\r\n    )\r\n    const groupLabelConfig$ = groupOptions$.pipe(\r\n        map(groupOptions => groupOptions?.columns?.map((col, index) => ({ level: index, formControlName: index.toString(), label: '' })) || [])\r\n    )\r\n    const getGroupedData$ = combineLatest(\r\n         [list$,\r\n         listConfig$,\r\n        groupOptions$,\r\n        closedGroups$,\r\n        scrollIndex$]\r\n    ).pipe(\r\n        map(\r\n            ([list,listConfig,groupOptions, closedGroups,scrollIndex]) => {\r\n                const groupBy = groupOptions?.columns || [];\r\n                const data = matrixTableGroupedData(list || [], groupBy, closedGroups, listConfig || []);\r\n                const filteredData = data.filter(d => !(d.name === undefined && d.IS_GROUP_CONFIG))\r\n                const numberOfFilteredItems = filteredData.length;\r\n                const pageSize = 100; // Define your desired multiple\r\n                \r\n              if (numberOfFilteredItems === 0) {\r\n                return  filteredData.slice(0, 0);\r\n              }\r\n              if(scrollIndex <= pageSize){\r\n                return  filteredData.slice(0, pageSize);\r\n              }\r\n                itemsToDisplay =   Math.ceil((scrollIndex + 1) / pageSize) * pageSize\r\n           \r\n              return filteredData.slice(0, itemsToDisplay )\r\n                \r\n            }\r\n        )\r\n    )\r\n    const groupedColumns$ = combineLatest(\r\n        [\r\n            groupOptions$,\r\n            listConfig$\r\n        ]\r\n    ).pipe(\r\n        map(([\r\n            groupOptions,\r\n            listConfig\r\n        ]) => \r\n          (groupOptions?.columns?.filter((col) => !groupOptions.hiddenColumns?.includes(col)) || []).map(\r\n            groupCol=>({\r\n                formControlName:groupCol,\r\n                label:listConfig?.find((config) => config.formControlName === groupCol)?.label || ''\r\n            })\r\n          )\r\n          \r\n\r\n           \r\n        \r\n        )\r\n    )\r\n    return {\r\n        state$,\r\n        reportName$,\r\n        list$,\r\n        listConfig$,\r\n        closedGroups$,\r\n        isOpen$,\r\n        aggregates$,\r\n        groupOptions$,\r\n        tableColumns$,\r\n        displayedColumns$,\r\n        groupLabelConfig$,\r\n        getGroupedData$ ,\r\n         groupedColumns$ ,\r\n         groupChart$ ,\r\n         draggedGroup$,\r\n         scrollIndex$ \r\n\r\n    }\r\n}","import { DocumentLitsLabelConfigInterface } from \"ngx-t-forms-types\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { GroupSettingsModel } from \"../interface/GroupSettingsModel\";\r\nimport { _isEqual } from \"../../../shared/functions/isEqual\";\r\nimport { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { GroupChartConfig } from \"../ngx-t-matrix-table.component\";\r\n\r\nexport function NgxTMatrixTableStoreActions(store:NgxTMatrixTableStoreService) {\r\n  \r\n    return {\r\n        setReportName: store.updater((state, reportName: string | null) => ({\r\n            ...state,\r\n            reportName\r\n        })),\r\n        \r\n        setList: store.updater((state, list: any[] | null) => ({\r\n            ...state,\r\n            list\r\n        })),\r\n\r\n        setListConfig: store.updater((state, listConfig: DocumentLitsLabelConfigInterface[] | null | undefined) => ({\r\n            ...state,\r\n            listConfig\r\n        })),\r\n\r\n        setAggregates: store.updater((state, aggregates: DocumentLitsLabelConfigInterface[] | null) => ({\r\n            ...state,\r\n            aggregates\r\n        })),\r\n\r\n        setGroupOptions: store.updater((state, groupOptions: GroupSettingsModel | null) => ({\r\n            ...state,\r\n            groupOptions\r\n        })),\r\n        toggleMenu: store.updater((state, row: any) => ({\r\n            ...state,\r\n            isOpen:_isEqual(state.isOpen, row) ? undefined : row\r\n        })),\r\n        setGroupChart: store.updater((state, groupChart: GroupChartConfig | null) => ({\r\n            ...state,\r\n            groupChart\r\n        })),\r\n        setDraggedGroup : store.updater((state, draggedGroup: string) => ({\r\n            ...state,\r\n            draggedGroup\r\n        })),\r\n        setScrollIndex: store.updater((state, scrollIndex: number) => ({\r\n            ...state,\r\n            scrollIndex\r\n        })),\r\n        toggleCloseGroup: store.updater((state, name: any) => {\r\n            const closedGroups = state.closedGroups || [];\r\n            const isClosed = closedGroups.includes(name);\r\n            return {\r\n                ...state,\r\n                closedGroups: isClosed ? closedGroups.filter(g => g !== name) : [...closedGroups, name]\r\n            };\r\n        }),\r\n        removeGroupColumn: store.updater((state, columnName: string) => {\r\n            return {\r\n                ...state,\r\n                groupOptions: state.groupOptions ? {\r\n                    ...state.groupOptions,\r\n                    columns: state.groupOptions.columns?.filter((col) => col !== columnName)\r\n                } : null\r\n            }\r\n        }),\r\n        dropGroupColumn: store.updater((state) => {\r\n            const newGroup = state.draggedGroup\r\n            const doesNotInclude = !state.groupOptions?.columns?.includes(newGroup || '');\r\n            if (doesNotInclude && newGroup !== undefined && newGroup !== '') {\r\n             return {\r\n                ...state,\r\n                groupOptions: {\r\n                    ...state.groupOptions,\r\n                    columns: [...(state.groupOptions?.columns || []), newGroup]\r\n                }\r\n             }\r\n            }\r\n            return state\r\n        }),\r\n        dropGroupingToSortGroups: store.updater((state, event:  CdkDragDrop<string[]>) => {\r\n            const newColumns = [...(state.groupOptions?.columns || [])];\r\n            moveItemInArray(newColumns, event.previousIndex, event.currentIndex);\r\n            return {\r\n                ...state,\r\n                groupOptions: {\r\n                    ...state.groupOptions,\r\n                    columns: newColumns\r\n                }\r\n            }\r\n        }),\r\n        addToGrouping: store.updater((state, formControlName: string) => {\r\n           let columns = state.groupOptions?.columns || [];\r\n            if (!columns.includes(formControlName)) {\r\n                columns = [...columns, formControlName];\r\n            } else{\r\n                                columns =columns.filter((col) => col !== formControlName)\r\n            }\r\n            return {\r\n                ...state,\r\n                groupOptions: {\r\n                    ...state.groupOptions,\r\n                    columns\r\n                 }\r\n\r\n            }\r\n        })\r\n\r\n    };\r\n}","export function toCamelCase(arrayOfObjects: any[]): any[] {\r\n  return arrayOfObjects.map((obj) => {\r\n    const newObj: any = {};\r\n    Object.keys(obj).forEach((key) => {\r\n      const newKey = ''.concat(key);\r\n      const camelCaseKey = camelize(newKey) as string;\r\n      newObj[camelCaseKey] = obj[key];\r\n    });\r\n\r\n    return newObj;\r\n  });\r\n}\r\n\r\nexport function camelize(str: string) {\r\n  if (!!str) {\r\n    return str\r\n      .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word: string, index: number) {\r\n        return index === 0 ? word.toLowerCase() : word.toUpperCase();\r\n      })\r\n      .replace(/\\s+/g, '');\r\n  } else {\r\n    return;\r\n  }\r\n}\r\n","import * as XLSX from 'xlsx';\r\nimport { toCamelCase } from './keysToCamelCase';\r\n\r\n\r\nconst getFileName = (name: string) => {\r\n  let timeSpan = new Date().toISOString();\r\n  let sheetName = name || 'ExportResult';\r\n  let fileName = `${sheetName}-${timeSpan}`;\r\n  return {\r\n    sheetName,\r\n    fileName,\r\n  };\r\n};\r\nexport class TableUtil {\r\n  static exportTableToExcel(tableId: string, name: string) {\r\n    let { sheetName, fileName } = getFileName(name);\r\n    let targetTableElm = document.getElementById(tableId);\r\n    let wb = XLSX.utils.table_to_book(targetTableElm, <XLSX.Table2SheetOpts>{\r\n      sheet: sheetName,\r\n    });\r\n    XLSX.writeFile(wb, `${fileName}.xlsx`);\r\n  }\r\n\r\n  static exportArrayToExcel(arr: any[], name: string) {\r\n    const { sheetName, fileName } = getFileName(name);\r\n    const wb = XLSX.utils.book_new();\r\n\r\n    // Process the main array\r\n    const mainArray = arr.map(item => this.processSimpleObject(item));\r\n    const mainSheet = XLSX.utils.json_to_sheet(mainArray);\r\n    XLSX.utils.book_append_sheet(wb, mainSheet, this.sanitizeSheetName(sheetName));\r\n\r\n    // Process nested arrays\r\n    arr.forEach((item, index) => {\r\n      const arrayProperties = this.findArrayProperties(item);\r\n\r\n      arrayProperties.forEach((arrayData, propertyName) => {\r\n        // Only process if the array contains data\r\n        if (arrayData.length > 0) {\r\n          // Create a sheet name combining property name and parent index\r\n          const nestedSheetName = this.sanitizeSheetName(`${propertyName}_${index + 1}`);\r\n\r\n          // Process the nested array items\r\n          const processedArray = arrayData.map(nestedItem => {\r\n            if (typeof nestedItem === 'object' && nestedItem !== null) {\r\n              return this.processSimpleObject(nestedItem);\r\n            }\r\n            // If it's a primitive value, wrap it in an object\r\n            return { value: nestedItem };\r\n          });\r\n\r\n          // Create and append the sheet if it has data\r\n          if (processedArray.length > 0) {\r\n            const nestedSheet = XLSX.utils.json_to_sheet(processedArray);\r\n            try {\r\n              XLSX.utils.book_append_sheet(wb, nestedSheet, nestedSheetName);\r\n            } catch (e) {\r\n              const msg = e instanceof Error ? e.message : 'Unknown error';\r\n              console.warn(`Could not create sheet for ${nestedSheetName}: ${msg}`);\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n\r\n    // Write the workbook to file\r\n    XLSX.writeFile(wb, `${fileName}.xlsx`);\r\n  }\r\n\r\n  static onFileChange(event: any): Promise<any[]> {\r\n    return new Promise<any[]>((resolve, reject) => {\r\n      try {\r\n        const target: DataTransfer = <DataTransfer>event.target;\r\n        if (target.files.length !== 1)\r\n          throw new Error('Cannot use multiple files');\r\n        const reader: FileReader = new FileReader();\r\n        reader.onload = (e: any) => {\r\n          const bstr: string = e.target.result;\r\n          const workbook: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\r\n          const firstSheetName = workbook.SheetNames[0];\r\n          if (!firstSheetName) throw new Error('No sheet found');\r\n          const worksheet = workbook.Sheets[firstSheetName];\r\n          if (!worksheet) throw new Error('No worksheet found');\r\n          const arrayData = XLSX.utils.sheet_to_json(worksheet, { raw: false });\r\n          // Iterate through each row and format date cells\r\n          arrayData.forEach((row: any) => {\r\n            for (const key in row) {\r\n              if (\r\n                row.hasOwnProperty(key) &&\r\n                typeof row[key] === 'number' &&\r\n                XLSX.SSF.isValidDate(row[key])\r\n              ) {\r\n                row[key] = XLSX.SSF.format_date(row[key], 'yyyy-mm-dd');\r\n              }\r\n            }\r\n          });\r\n          // Do something with arrayData\r\n          resolve(toCamelCase(arrayData));\r\n        };\r\n        reader.onerror = (e) => reject(e);\r\n        const file = target.files[0]\r\n        if (!file) throw new Error('No file found');\r\n        reader.readAsBinaryString(file);\r\n      } catch (error) {\r\n        reject(error);\r\n      }\r\n    });\r\n  }\r\n  private static processSimpleObject(obj: any): any {\r\n    const newObj: any = {};\r\n    for (const key in obj) {\r\n      if (typeof obj[key] === 'object' && obj[key] !== null) {\r\n        // If it's not an array, convert to string\r\n        if (!Array.isArray(obj[key])) {\r\n          newObj[key] = JSON.stringify(obj[key]);\r\n        }\r\n        // Arrays will be handled separately, so we skip them here\r\n      } else {\r\n        newObj[key] = obj[key];\r\n      }\r\n    }\r\n    return newObj;\r\n  }\r\n  private static findArrayProperties(obj: any): Map<string, any[]> {\r\n    const arrayProps = new Map<string, any[]>();\r\n    for (const key in obj) {\r\n      if (Array.isArray(obj[key])) {\r\n        arrayProps.set(key, obj[key]);\r\n      }\r\n    }\r\n    return arrayProps;\r\n  }\r\n  private static sanitizeSheetName(name: string): string {\r\n    // Excel sheet names can't exceed 31 characters and can't contain certain characters\r\n    return name.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '_').substring(0, 31);\r\n  }\r\n\r\n}\r\n","import { combineLatest, Observable,switchMap, tap } from \"rxjs\";\r\nimport { NgxTMatrixTableStoreService } from \"./ngx-tmatrix-table-store.service\";\r\nimport { TableUtil } from \"../../../shared/functions/tableutills\";\r\n\r\nexport function NgxTMatrixTableStoreEffects(store: NgxTMatrixTableStoreService) {\r\n    const exportData = store.effect(\r\n        (trigger$: Observable<void>) => trigger$.pipe(\r\n            switchMap(() => combineLatest([\r\n                store.selectors.getGroupedData$,\r\n                store.selectors.reportName$\r\n            ]).pipe(\r\n                tap(([\r\n                    data, reportName\r\n                ]) => {\r\n                    TableUtil.exportArrayToExcel(data || [], reportName || 'report')\r\n                })\r\n            ))\r\n        )\r\n    )\r\n    const mainShowChart = store.effect(\r\n        (trigger$: Observable<void>) => trigger$.pipe(\r\n            switchMap(() => combineLatest([\r\n                store.selectors.getGroupedData$,\r\n                store.selectors.listConfig$,\r\n                store.selectors.groupOptions$\r\n            ]).pipe(\r\n                tap(([\r\n                    data, listConfig, groupOptions\r\n                ]) => {\r\n                    const mainGroups = data.filter(row => !!row?.IS_GROUP_CONFIG && row?.level === 0)\r\n                    const numberProperties = listConfig?.filter((config) => config.valueType === 'number' || config.valueType === 'currency') || []\r\n                    const groupChart =  { groups: mainGroups, numberProperties, mainTitle: groupOptions?.columns?.[0] || '' }\r\n                    store.actions.setGroupChart(groupChart)\r\n                })\r\n            ))\r\n        )\r\n    )\r\n\r\n    const showReport = store.effect(\r\n        (row$: Observable<any>) => row$.pipe(\r\n            switchMap((row) => combineLatest([\r\n                store.selectors.getGroupedData$,\r\n                store.selectors.listConfig$\r\n            ]).pipe(\r\n                tap(([data, listConfig]) => {\r\n                    if (!!row?.IS_GROUP_CONFIG && row?.level !== undefined) {\r\n                        const i = data.map(d => d?.name).indexOf(row.name)\r\n                        const mainGroups = []\r\n                        for (let index = i + 1; index < data.length; index++) {\r\n                            const nextRow = data[index];\r\n                            if (mainGroups.length === 0 && !nextRow?.IS_GROUP_CONFIG\r\n                                || nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level\r\n                                || mainGroups.length === 0 && nextRow?.level === row.level) {\r\n                                break\r\n                            }\r\n                            if (nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level + 1) {\r\n                                mainGroups.push(nextRow)\r\n                            }\r\n                        }\r\n                        const numberProperties = listConfig?.filter((config) => config.valueType === 'number' || config.valueType === 'currency') || []\r\n                        const   groupChart = {\r\n                                groups: mainGroups,\r\n                                numberProperties,\r\n                                mainTitle: row.propertyLabel + ': ' + row.name\r\n                            }\r\n                       store.actions.setGroupChart(groupChart)\r\n                    }\r\n                })\r\n            ))\r\n        ))\r\n\r\n    const foldUnFoldGroup = store.effect(\r\n        (row$: Observable<any>) => row$.pipe(\r\n            switchMap((row) => combineLatest([\r\n                store.selectors.getGroupedData$\r\n            ]).pipe(\r\n                tap(([data]) => {\r\n                    const i = data.map(d => d?.name).indexOf(row.name)\r\n                    const mainGroups = []\r\n                    for (let index = i + 1; index < data.length; index++) {\r\n                        const nextRow = data[index];\r\n                        if (mainGroups.length === 0 && !nextRow?.IS_GROUP_CONFIG\r\n                            || nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level\r\n                            || mainGroups.length === 0 && nextRow?.level === row.level) {\r\n                            break\r\n                        }\r\n\r\n                        if (nextRow?.IS_GROUP_CONFIG && nextRow?.level === row.level + 1) {\r\n                            mainGroups.push(nextRow)\r\n                            store.actions.toggleCloseGroup(nextRow.name)\r\n                        }\r\n\r\n\r\n                    }\r\n\r\n                })\r\n            ))\r\n        ))\r\n\r\n    return {\r\n        exportData,\r\n        mainShowChart, foldUnFoldGroup, showReport\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { ComponentStore } from '@ngrx/component-store';\r\nimport { IMatrixTableState } from '../../../../types/IMatrixTableState';\r\nimport { NgxTMatrixTableStoreSelectors } from './NgxTMatrixTable-selectors';\r\nimport { NgxTMatrixTableStoreActions } from './NgxTMatrixTable-actions';\r\nimport { NgxTMatrixTableStoreEffects } from './NgxTMatrixTable-effects';\r\nexport const initialMscoaState: IMatrixTableState = {\r\n  reportName: null,\r\n  list: null,\r\n  listConfig: null,\r\n  aggregates: null,\r\n  groupOptions: null,\r\n  closedGroups: [],\r\n  isOpen: undefined,\r\n  groupChart: null,\r\n  draggedGroup: '',\r\n  scrollIndex: 0\r\n};\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxTMatrixTableStoreService extends   ComponentStore<IMatrixTableState> {\r\n\r\n  constructor() { \r\n     super(initialMscoaState);\r\n  }\r\n  readonly selectors = NgxTMatrixTableStoreSelectors(this);\r\n  readonly  actions  = NgxTMatrixTableStoreActions(this);\r\n  readonly effects = NgxTMatrixTableStoreEffects(this); // Assuming effects are also part of actions for simplicity\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnInit, ViewChild, } from '@angular/core';\r\n\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\n\r\nimport { GroupSettingsModel } from './interface/GroupSettingsModel';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CdkDragDrop, CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GroupingChartComponent } from './components/grouping-chart/grouping-chart.component';\r\n\r\nimport { COLOR_CODES, randomColorCode } from './constants/colorCodes';\r\n\r\nimport { DocumentLitsLabelConfigInterface, DocumentLitsLabelConfigInterfaceValueType } from '../../../types/DocumentSectionConfigurationsInterface';\r\n\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NgxTMatrixTableStoreService } from './store/ngx-tmatrix-table-store.service';\r\nimport { combineLatest, distinctUntilChanged, map, of } from 'rxjs';\r\nimport { FormatDataPipe } from '../../pipes/format-Data.pipe';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n@Component({\r\n  selector: 'app-ngx-t-matrix-table',\r\n  standalone: true,\r\n  imports: [CommonModule, GroupingChartComponent, DragDropModule, MatChipsModule,\r\n    CdkDropList, CdkDrag, MatMenuModule,\r\n    MatTooltipModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatTableModule,\r\n    MatToolbarModule,\r\n    FormatDataPipe,\r\n    MatProgressSpinnerModule,\r\n    ScrollingModule,\r\n    MatDividerModule],\r\n  providers: [NgxTMatrixTableStoreService,],\r\n \r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  templateUrl: './ngx-t-matrix-table.component.html',\r\n  styleUrl: './ngx-t-matrix-table.component.scss',\r\n\r\n})\r\nexport class NgxTMatrixTableComponent implements OnInit {\r\n    @ViewChild('viewPortScroll') scrollContainer!: ElementRef<HTMLElement>;\r\n    \r\n    get tableContainerHeight (){\r\n      return this.scrollContainer?.nativeElement.clientHeight;\r\n    }\r\n  store = inject(NgxTMatrixTableStoreService)\r\n\r\n  @Input() set list(value: any[] | null) {\r\n    this.store.actions.setList(value);\r\n  }\r\n  @Input() set reportName(value: string | null) {\r\n    this.store.actions.setReportName(value);\r\n  }\r\n\r\n  @Input() set listConfig(value: DocumentLitsLabelConfigInterface[] | null | undefined) {\r\n    this.store.actions.setListConfig(value);\r\n  }\r\n\r\n  @Input() set aggregates(value: DocumentLitsLabelConfigInterface[] | null) {\r\n    this.store.actions.setAggregates(value);\r\n  }\r\n\r\n  @Input() set groupOptions(value: GroupSettingsModel) {\r\n    this.store.actions.setGroupOptions(value);\r\n  }\r\n\r\n  tableColumns$ = this.store.selectors.tableColumns$;\r\n  displayedColumns$ = this.store.selectors.displayedColumns$;\r\n  groupLabelConfig$ = this.store.selectors.groupLabelConfig$;\r\n  groupOptions$ = this.store.selectors.groupOptions$;\r\n  getGroupedData$ = this.store.selectors.getGroupedData$;    \r\n  groupedColumns$ = this.store.selectors.groupedColumns$;\r\n  isOpen$ = this.store.selectors.isOpen$;\r\n  groupChart$ = this.store.selectors.groupChart$;\r\n  closedGroups$ = this.store.selectors.closedGroups$;\r\n  draggedGroup$ = this.store.selectors.draggedGroup$;\r\n  vm$ = combineLatest([\r\n    this.  groupOptions$,\r\n    this.tableColumns$,\r\n    this.displayedColumns$,\r\n    this.groupLabelConfig$,\r\n    this.getGroupedData$.pipe( distinctUntilChanged(\r\n      (prev, curr) =>\r\n        _isEqual(prev, curr)\r\n    )),\r\n    this.groupedColumns$,\r\n    this.isOpen$,\r\n    this.closedGroups$,\r\n    this.groupChart$,\r\n    this.draggedGroup$\r\n  ]).pipe(\r\n    map(\r\n      ([\r\n       groupOptions,\r\n        tableColumns, \r\n        displayedColumns, \r\n        groupLabelConfig, \r\n        getGroupedData, \r\n        groupedColumns,\r\n        isOpen,\r\n        closedGroups,\r\n        groupChart,\r\n        draggedGroup\r\n      ]) => ({\r\n        groupOptions,\r\n        tableColumns,\r\n        displayedColumns,\r\n        groupLabelConfig,\r\n        getGroupedData,\r\n        groupedColumns,\r\n        isOpen,\r\n        closedGroups,\r\n        groupChart,\r\n        draggedGroup\r\n      })\r\n    )\r\n   \r\n  )\r\n\r\n\r\n  ValueTypes = DocumentLitsLabelConfigInterfaceValueType\r\n\r\n  constructor(public dialog: MatDialog) {\r\n\r\n  }\r\n  ngOnInit(): void {\r\n    this.setLevelColors()\r\n  }\r\n\r\n\r\n  // @HostListener('document:click', ['$event'])\r\n  // onClickOutside(event: Event) {\r\n  //   if (!this.elementRef.nativeElement.contains(event.target)) {\r\n  //     this.isOpen = undefined\r\n  //   }\r\n  // }\r\n  toggleMenu(row: any) {\r\n    this.store.actions.toggleMenu(row);\r\n  }\r\n\r\n\r\n  remove(groupCol: String) {\r\n    this.store.actions.removeGroupColumn(groupCol as string);\r\n  }\r\n  drop(event: CdkDragDrop<TemplateStringsArray, any>) {\r\n    this.store.actions.dropGroupColumn();\r\n  }\r\n\r\n\r\n  export() {\r\n   this.store.effects.exportData(of())\r\n  }\r\n  dropChip(event: CdkDragDrop<string[]>) {\r\n    this.store.actions.dropGroupingToSortGroups(event);\r\n\r\n  }\r\n  addToGrouping(formControlName: string) {\r\n    this.store.actions.addToGrouping(formControlName);\r\n  }\r\n\r\n\r\n  toggleCloseGroup(name: string) {\r\n    this.store.actions.toggleCloseGroup(name);\r\n\r\n  }\r\n\r\n  mainShowChart() {\r\n    this.store.effects.mainShowChart(of())\r\n  }\r\n  foldUnFoldGroup(row: any) {\r\n    this.store.effects.foldUnFoldGroup(row);\r\n  }\r\nsetDraggedGroup(col:string){\r\n  this.store.actions.setDraggedGroup(col)\r\n}\r\n  showReport(row: any) {\r\n    this.store.effects.showReport(of(row))\r\n  }\r\n\r\n \r\n  // Coding \r\n  setLevelColors() {\r\n    // Set the CSS variables\r\n    Object.keys(this.levelColors).forEach((key, index) => {\r\n      document.body.style.setProperty(\r\n        `--custom-level-color-${index + 1}`,\r\n        this.levelColors[key]\r\n      );\r\n    });\r\n  }\r\n  levelColors: any = randomColorCode()\r\n  get colorPalletArray() {\r\n    const colors = COLOR_CODES\r\n    return Object.values(colors).map(v => Object.values(v))\r\n  }\r\n  selectColor(colors: string[]) {\r\n    const c = colors.reduce((acc, color, index) => {\r\n      acc[`color${index + 1}`] = color;\r\n      return acc;\r\n    }, {} as Record<string, string>);\r\n    this.updateColors(c)\r\n\r\n  }\r\n  // Method to update colors dynamically\r\n  updateColors(newColors: { [key: string]: string }) {\r\n    this.levelColors = { ...this.levelColors, ...newColors };\r\n    this.setLevelColors();\r\n  }\r\n\r\n\r\nscrollIndex(event:any){\r\n  this.store.actions.setScrollIndex(event)\r\n}\r\n\r\n}\r\n\r\nexport interface GroupChartConfig {\r\n  groups: any[];\r\n  numberProperties: DocumentLitsLabelConfigInterface[];\r\n  mainTitle: string;\r\n}","<ng-container *ngIf=\"( vm$ |async) as vm\">\r\n\r\n  @if (\r\n  !!vm.groupChart\r\n  ) {\r\n\r\n  <mat-toolbar class=\"chartToolbar\">\r\n    <h1 style=\"    font-weight: bold;\r\n        font-size: 1.4rem; \r\n        text-transform: capitalize;\">\r\n      {{vm.groupChart.mainTitle}}\r\n    </h1>\r\n    <span class=\"spacer\"></span>\r\n    <button (click)=\"vm.groupChart = null\" mat-stroked-button>\r\n      Close\r\n      <mat-icon>\r\n        close\r\n      </mat-icon>\r\n    </button>\r\n  </mat-toolbar>\r\n\r\n\r\n\r\n  <mat-divider></mat-divider>\r\n  <br>\r\n  <app-grouping-chart [groups]=\"vm.groupChart.groups\"\r\n    [numberProperties]=\"vm.groupChart.numberProperties\"></app-grouping-chart>\r\n  }@else {\r\n\r\n\r\n  <section class=\"tableContainer\" #tableContainer>\r\n  <mat-toolbar style=\"background: none;\" (cdkDropListDropped)=\"dropChip($event)\"\r\n    [cdkDropListData]=\"vm.groupOptions?.columns ||[]\" cdkDropList>\r\n\r\n\r\n    @for(groupCol of vm.groupedColumns; track groupCol){\r\n    <mat-chip-option color=\"tertiary\" class=\"dragBox\" [style.margin-left]=\"$index !==0? '5px':''\" cdkDrag selected\r\n      (removed)=\"remove(groupCol.formControlName)\">\r\n      <div class=\"placeholder\" *cdkDragPlaceholder></div>\r\n      {{ groupCol.label }}\r\n      <button matChipRemove [attr.aria-label]=\"'remove ' + groupCol.label\">\r\n        <mat-icon color=\"warn\">cancel</mat-icon>\r\n      </button>\r\n    </mat-chip-option>\r\n    }\r\n    @if (vm.groupedColumns.length === 0) {\r\n\r\n    <div\r\n      style=\"font-size: 14px; font-weight: 400; opacity: 0.7; padding: 8px; color: #666; display: flex; align-items: center;\">\r\n      Drag column headers here to group your data\r\n    </div>\r\n\r\n\r\n    }\r\n\r\n\r\n    <span class=\"spacer\"></span>\r\n\r\n    <button [matMenuTriggerFor]=\"colorPallet\" mat-icon-button matTooltip=\"Select table color coding\">\r\n      <mat-icon>\r\n        palette\r\n      </mat-icon>\r\n    </button>\r\n\r\n    <button (click)=\"mainShowChart()\" mat-icon-button matTooltip=\"Show main grouping chart analytics\">\r\n      <mat-icon>\r\n        analytics\r\n      </mat-icon>\r\n    </button>\r\n    <button (click)=\"export()\" mat-icon-button matTooltip=\"Export to excel\">\r\n      <mat-icon>\r\n        download\r\n      </mat-icon>\r\n    </button>\r\n\r\n  </mat-toolbar>\r\n\r\n\r\n    @defer (on viewport; prefetch on idle) {\r\n    <cdk-virtual-scroll-viewport (scrolledIndexChange)=\"scrollIndex($event)\" \r\n    #viewPortScroll [itemSize]=\"30\"\r\n      style=\"resize: vertical;height:400px;\" >\r\n      <table (cdkDropListDropped)=\"drop($event)\" \r\n      [multiTemplateDataRows]=\"true\"\r\n      cdkDropList mat-table [dataSource]=\"vm.getGroupedData||[]\"\r\n        style=\"border-collapse: collapse;\" class=\"example-table\" matSort matSortActive=\"created\" matSortDisableClear\r\n        matSortDirection=\"desc\">\r\n        @for (col of vm.tableColumns||[]; track col.formControlName) {\r\n        <ng-container [matColumnDef]=\"col.formControlName\">\r\n          <th cdkDrag (cdkDragStarted)=\"setDraggedGroup(col.formControlName)\"\r\n            [attr.data-column-size]=\"col.formControlName\"\r\n            style=\"width: fit-content !important; white-space: nowrap !important;\" mat-header-cell *matHeaderCellDef>\r\n            @if($index === 0 && vm.closedGroups.length > 0){\r\n            <button class=\"cancelGrouping\" (click)=\"vm.closedGroups= []\" color=\"warn\" mat-icon-button>\r\n              <mat-icon>highlight_off</mat-icon>\r\n            </button>\r\n            } @else {\r\n            <div class=\"colTitle\" style=\"display: inline-flex; align-items: center;\"\r\n              [style.color]=\"col.INCLUDED_IN_GROUP?'':''\" [matTooltip]=\"'Click to group by '+col.label\"\r\n              (click)=\"addToGrouping(col.formControlName)\" matRipple>\r\n              {{col.label}}\r\n            </div>\r\n            }\r\n          </th>\r\n          <td mat-cell style=\"\r\n        width: fit-content !important;\r\n        white-space: nowrap !important;\" [style.border-top]=\"!!row?.IS_SUM_ROW && $index !==0? '1px solid black':''\"\r\n            [style.border-bottom-color]=\"!!row?.IS_GROUP_CONFIG ?'#ffffff00':''\"\r\n            [style.background]=\"!!row?.IS_GROUP_CONFIG?'':'none'\"\r\n            [style.overflow]=\"!!row?.IS_GROUP_CONFIG ?'visible':''\" *matCellDef=\"let row\">\r\n\r\n            @if (!!row?.IS_GROUP_CONFIG ) {\r\n            @if( $index ===0){\r\n            <div disabled=\"true\" class=\"levelClass\" *ngFor=\"let item of row.LEVELS_BEFORE\" mat-button>\r\n              <span>- <div class=\"verticalCenterLine\"></div></span>\r\n            </div>\r\n            <button (click)=\"toggleCloseGroup(row['name']);\" mat-button>\r\n              <mat-icon>{{row['IS_CLOSED'] ?'keyboard_arrow_right':'keyboard_arrow_down'}}</mat-icon>\r\n              <span\r\n                style=\"color: var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));\">\r\n                {{row['name']}}\r\n              </span>\r\n            </button>\r\n\r\n            <span class=\"rowMenu\">\r\n              <button [color]=\"vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level?'warn':''\"\r\n                class=\"groupOptions\" mat-icon-button (click)=\"toggleMenu(row)\">\r\n\r\n                <mat-icon>\r\n                  {{vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level? 'close':'more_horiz'}}\r\n                </mat-icon>\r\n              </button>\r\n              @if(vm.isOpen?.name === row?.name && vm.isOpen?.level === row.level){\r\n              <button (click)=\"showReport(row)\" mat-icon-button>\r\n                <mat-icon>\r\n                  analytics\r\n                </mat-icon>\r\n              </button>\r\n              <button (click)=\"foldUnFoldGroup(row)\" mat-icon-button>\r\n                <mat-icon>\r\n                  compress\r\n                </mat-icon>\r\n              </button>\r\n              }\r\n\r\n\r\n            </span>\r\n\r\n\r\n            } @else if (row['totals'][col.formControlName]) {\r\n            <h5 [style.opacity]=\"row['IS_CLOSED']&& row['level'] !==0 ? '0.5':1\">\r\n              {{(row['totals'][col.formControlName]) |formatData: col.valueType}}\r\n\r\n            </h5>\r\n            }\r\n            }\r\n\r\n            @if (!row['IS_GROUP_CONFIG'] && $index ===0 ) {\r\n            @for (item of row['LEVELS_BEFORE']||[]; track item) {\r\n            <div disabled=\"true\" class=\"levelClass\" mat-button>\r\n              <span>\r\n                @if ($last) {\r\n                •\r\n                }@else {\r\n                -\r\n                }\r\n\r\n                <div class=\"verticalCenterLine\"></div>\r\n              </span>\r\n            </div>\r\n            }\r\n\r\n            }\r\n            @if (!row?.IS_GROUP_CONFIG && $index !==0 ){\r\n\r\n            <div \r\n            class=\"row-value-col\"\r\n            >\r\n              {{ row[col.formControlName]|formatData: col.valueType }}\r\n\r\n\r\n\r\n            </div>\r\n\r\n            }\r\n          </td>\r\n        </ng-container>\r\n        }\r\n        <tr mat-header-row *matHeaderRowDef=\"vm.displayedColumns\"></tr>\r\n        <tr mat-row *matRowDef=\"let row; columns: vm.displayedColumns;\" [class.is-group-row]=\"!!row?.IS_GROUP_CONFIG\"\r\n          [class]=\"'row-'+row.level\" [class.is-sum-row]=\"!!row['IS_SUM_ROW']\"\r\n          style=\"border-bottom: solid 1px rgba(0, 0, 0, .04)\"></tr>\r\n      </table>\r\n    </cdk-virtual-scroll-viewport>\r\n    } @placeholder {\r\n    <div style=\"display: flex; justify-content: center; align-items: center; padding: 40px; flex-direction: column;\">\r\n      <mat-spinner diameter=\"50\"></mat-spinner>\r\n      <p style=\"margin-top: 15px;\">Loading table data...</p>\r\n    </div>\r\n    } @loading {\r\n    <div style=\"padding: 20px; text-align: center;\">\r\n      <mat-spinner diameter=\"50\"></mat-spinner>\r\n      <p style=\"margin-top: 10px;\">Preparing table view...</p>\r\n    </div>\r\n    } @error {\r\n    <p style=\"color: red; text-align: center; padding: 20px;\">Table failed to load.</p>\r\n    }\r\n  </section>\r\n  }\r\n\r\n</ng-container>\r\n\r\n\r\n<mat-menu #colorPallet=\"matMenu\">\r\n  <p>Select Table color coding</p>\r\n\r\n  <button *ngFor=\"let item of colorPalletArray\" (click)=\"selectColor(item)\" mat-menu-item>\r\n\r\n    <div [style.background]=\"color\" *ngFor=\"let color of item\" style=\"width: 16px;height:24px;display:inline-block\">\r\n\r\n    </div>\r\n\r\n\r\n\r\n  </button>\r\n\r\n</mat-menu>","import { InjectionToken } from \"@angular/core\";\r\nimport { NgxTReportsConfig } from \"../../types/NgxTReportsConfig\";\r\nexport const NGX_T_REPORTS_CONFIG_TOKEN = new InjectionToken<NgxTReportsConfig>('NGX_T_REPORTS_CONFIG');","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCardModule, MatCardContent, MatCardHeader, MatCardTitle, MatCardSubtitle } from '@angular/material/card';\r\nimport { ElementEditorConfigSectionInterface, ElementEditorInnerSectionElementInterface, FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { assignDeepPropertyToObject, TDynamicDataEditComponent } from 'ngx-t-forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\n@Component({\r\n  selector: 'lib-element-editor',\r\n  standalone: true,\r\n  imports: [\r\n    MatCardModule,\r\n    MatCardContent,\r\n    MatCardHeader,\r\n    MatCardTitle,\r\n    MatCardSubtitle,\r\n    MatDividerModule,\r\n    CommonModule,\r\n    MatToolbarModule,\r\n    MatProgressSpinnerModule,\r\n    MatExpansionModule,\r\n    TDynamicDataEditComponent,\r\n    MatIconModule,\r\n    MatButtonModule\r\n\r\n  ],\r\n  templateUrl: './element-editor.component.html',\r\n  styleUrl: './element-editor.component.css'\r\n})\r\nexport class ElementEditorComponent {\r\n\r\n  @Input() inEdit : any =  {}\r\n\r\n  @Input() label: string = ''\r\n  @Input() subTitle: string = ''\r\n  @Input() editorSections: ElementEditorConfigSectionInterface[] = []\r\n  @Input() formInputs: FormColumnInputs[] = []\r\n  @Input() saveButtonLabel: string = \"Save \"\r\n  @Output() closeEditor = new EventEmitter<void>()\r\n  @Output() saveElement = new EventEmitter<any>()\r\n  newValue: any = null\r\n  elementConfigurationChanged = (value: any, ele: ElementEditorInnerSectionElementInterface) => {\r\n\r\n\r\n    this.newValue = {\r\n      ...this.inEdit\r\n    }\r\n\r\n    assignDeepPropertyToObject(\r\n      this.newValue,\r\n      ele.deepBind,\r\n      value\r\n    );\r\n   \r\n  }\r\n\r\n  get saveIsDisabled() {\r\n\r\n    if (!this.newValue) return true\r\n    if (this.editorSections.length === 0) return true\r\n\r\n    return Boolean(_isEqual(this.newValue, this.inEdit))\r\n  }\r\n  elementBlur = (event: any, element: ElementEditorInnerSectionElementInterface) => {\r\n\r\n  }\r\n  save() {\r\n    this.saveElement.emit(this.newValue)\r\n    this.newValue = null\r\n\r\n  }\r\n  close() {\r\n    this.closeEditor.emit()\r\n  }\r\n}\r\n","<mat-card \r\n\r\nstyle=\"\r\n\r\nbackground: var(--mat-sys-surface-container, var(--mat-app-surface));\r\nmargin:0px;\r\nborder:solid 1px var(--mat-divider-color, var(--mat-app-outline))\">\r\n \r\n    <mat-card-header >\r\n        <mat-card-title>\r\n           {{label}}\r\n        </mat-card-title>\r\n        <mat-card-subtitle>   {{subTitle }}</mat-card-subtitle>\r\n     \r\n      </mat-card-header>\r\n    \r\n\r\n\r\n    \r\n      <mat-toolbar class=\"section-header\">\r\n        <span class=\"header\">Element configuration</span>\r\n        <span class=\"spacer\"></span>\r\n    </mat-toolbar>\r\n    <mat-divider></mat-divider>\r\n\r\n        @defer (on viewport) {\r\n        \r\n            <mat-accordion togglePosition=\"before\">\r\n                @for(section of (editorSections||[]); track section.id) {\r\n                <mat-expansion-panel>\r\n                    <mat-expansion-panel-header>\r\n                        <mat-panel-title>\r\n                            {{section.label}}\r\n                            <span class=\"spacer\"></span>\r\n                          \r\n                            <span class=\"showItemValue\" *ngIf=\"section.showItemValue && !!(inEdit)\">\r\n                                {{inEdit[section.showItemValue]}}\r\n                            </span>\r\n                            <mat-divider style=\"position: absolute; left:0px; width:100%; bottom:0px;\"></mat-divider>\r\n                        </mat-panel-title>\r\n                    </mat-expansion-panel-header>\r\n            \r\n                    <div style=\"margin-top: 16px;\"></div>\r\n            \r\n                    <!-- Element type selector (only in first section) -->\r\n                 \r\n            \r\n                    <!-- Section elements -->\r\n                    @for(element of section.elements; track element.id) {\r\n                    <p style=\"margin-bottom: 16px; margin-top: 8px;\">\r\n                        @defer (on viewport) {\r\n                        <lib-t-dynamic-data-edit \r\n                            [editorConfig]=\"element\" [data]=\"inEdit\"\r\n                            [validationErrors]=\"element.computedErrors||[]\"\r\n                            (valueChange)=\"elementConfigurationChanged($event, element)\" \r\n                            [formInputs]=\"formInputs\"\r\n                            (blur)=\"elementBlur($event, element)\">\r\n                        </lib-t-dynamic-data-edit>\r\n                       \r\n                         \r\n                        } @placeholder {\r\n                    <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n                        <mat-spinner diameter=\"18\"></mat-spinner>\r\n                    </div>\r\n                    }\r\n                    </p>\r\n                    }\r\n                </mat-expansion-panel>\r\n                }\r\n            </mat-accordion>\r\n            } @placeholder {\r\n            <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n                <mat-spinner diameter=\"50\" />\r\n            </div>\r\n            } @error {\r\n      \r\n                <h1>Error loading element editor</h1>\r\n                <p>An error occurred while loading the element editor. Please try again later.</p>\r\n        \r\n            }\r\n    \r\n    \r\n    \r\n    \r\n\r\n\r\n\r\n     \r\n\r\n      <br>\r\n      <mat-divider></mat-divider>\r\n     \r\n      <mat-card-actions >\r\n            <button         (click)=\"close()\"  class=\"\" mat-button>close</button>\r\n            <span class=\"spacer\"></span>\r\n            <button mat-flat-button \r\n            \r\n        (click)=\"save()\"\r\n            color=\"primary\">{{\r\n                saveButtonLabel\r\n            }}</button>\r\n        \r\n    </mat-card-actions>\r\n</mat-card>","import { ElementEditorConfigSectionInterface, ElementEditorTypes, SpecialElementKeys } from \"ngx-t-forms-types\";\r\n\r\nexport enum  ConfigTypes  {\r\n    SheetConfig = 'SheetConfig',\r\n}\r\nexport const SheetConfig: ElementEditorConfig = {\r\n    label: \"Matrix Report Configuration\",\r\n    subTitle: \"Customize how your data appears and organizes in the report\",\r\n    saveButtonLabel: \"Apply Report Settings\",\r\n    editorSections: [\r\n     \r\n        {\r\n            label: \"Data Sources\",\r\n            id: \"dataSources\",\r\n            elements: [\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['dataSources'],\r\n                    editType: ElementEditorTypes.DataSourcePicker,\r\n                    hint: `Connect and manage data sources for your report. Select from REST APIs or create MongoDB aggregation pipelines.`,\r\n                    label: 'Connect Data',\r\n                    id: \"10c7237d-b0a8-4964-97e6-811b93569c68\"\r\n                },\r\n            ]\r\n        },\r\n        {\r\n            label: \"Column Layout\",\r\n            id: \"tableColumns\",\r\n            elements: [\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['listConfig'],\r\n                    editType: ElementEditorTypes.ListLabelConfigEditor,\r\n                    fetchOptions: ['ALL_POSSIBLE_FIELDS'],\r\n                    hint: `Customize your table display by selecting fields, arranging columns, and setting visibility options.`,\r\n                    label: 'Visible Columns',\r\n                    id: \"6ed1283c-63e9-435e-a435-16d3a0c6d3f3\"\r\n                }\r\n            ]\r\n        }   ,\r\n        \r\n        {\r\n            label: \"Data Hierarchy & Grouping\",\r\n            id: \"dataGrouping\",\r\n            elements: [\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['groupOptions','columns'],\r\n                    editType: ElementEditorTypes.ChipOptionsCreator,\r\n                    hint: `Define columns for grouping and hierarchy. Ensure the entered column matches column form control names.`,\r\n                    label: 'Group By',\r\n                    id: \"36877d92-4331-498a-b02f-4d0eaef17372\"\r\n                },\r\n                  {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['groupOptions','hiddenColumns'],\r\n                    editType: ElementEditorTypes.ChipOptionsCreator,\r\n                    hint: `Defined grouped columns that should be hidden. Ensure the entered column matches column form control names.`,\r\n                    label: 'Define hidden grouped columns',\r\n                    id: \"2452e44f-d0c9-4935-a743-7d89fbd9a095\"\r\n                }\r\n            ]\r\n        },\r\n           \r\n        {\r\n            label: \"Date Range configuration\",\r\n            id: \"dataGrouping\",\r\n            elements: [\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['dateRangeMin'],\r\n                    editType: ElementEditorTypes.OptionSelect,\r\n                    fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n                    hint: `Minimum date for the report. This is used to filter the data in the report.`,\r\n                    label: 'Min Date',\r\n                    id: \"5d31a27a-a4d1-43db-9845-d1a2ce666e17\"\r\n                },\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['dateRangeMax'],\r\n                    editType: ElementEditorTypes.OptionSelect,\r\n                    fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n                    hint: `Maximum date for the report. `,\r\n                    label: 'max Date',\r\n                    id: \"739ce399-3f25-42c1-b2fe-47d2bf14aa38\"\r\n                },\r\n                   {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['dateRangeComparisonStart'],\r\n                    editType: ElementEditorTypes.OptionSelect,\r\n                    fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n                    hint: `Highlighted date comparison start date for the picker. `,\r\n                    label: 'Comparison Start',\r\n                    id: \"e34f377b-f824-4331-924d-5c3e9ee5f08e\"\r\n                },\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['dateRangeComparisonEnd'],\r\n                    editType: ElementEditorTypes.OptionSelect,\r\n                    fetchOptions: ['EXTERNAL_DATA_INTEGRATION_OPTIONS'],\r\n                    hint: `Highlighted date comparison end date for the picker. `,\r\n                    label: 'Comparison End',\r\n                    id: \"1e65d445-b3ed-4ab6-8689-1f7fe2d85da6\"\r\n                },\r\n                  \r\n            ]\r\n        },\r\n    ]\r\n}\r\n\r\nexport interface ElementEditorConfig {\r\n    label: string;\r\n    subTitle: string;\r\n    saveButtonLabel: string;\r\n    editorSections: ElementEditorConfigSectionInterface[]\r\n}\r\n\r\nexport const REPORT_SHEET_SIDE_MENU_OPTIONS = [\r\n    {\r\n        title: \"Sheet Configuration\",\r\n        subTitle: \"Configure how your data appears and organizes in the report\",\r\n        config: ConfigTypes.SheetConfig,\r\n        icon: 'construction',\r\n        color: '#1976d2'\r\n    },\r\n   \r\n]","import { ElementTypes, FormColumnInputs, IDateRangePickerInput, InputDataTypes } from \"ngx-t-forms-types\";\r\nconst REPORT_DATE_RANGE_PICKER :IDateRangePickerInput={\r\n    \"id\": \"491523bc-4170-476c-95c9-0a4041e073e2\",\r\n    \"formControlName\": \"dateRange\",\r\n    \"sectionId\": \"9bb19b6a-829c-49fb-8cd9-9df753140d92\",\r\n    \"label\": \"Date range\",\r\n    \"element\":ElementTypes.DateRangePicker ,\r\n    \"dataType\":InputDataTypes.Date,\r\n    \"appearance\": \"outline\",\r\n    \"isCalculatedField\": false,\r\n    \"required\": true,\r\n    \"onlySetTempErrorOnTouch\": false,\r\n    \"colSize\": 12,\r\n    \"validators\": [],\r\n    \"startDateControl\": \"start\",\r\n    \"endDateControl\": \"end\"\r\n}\r\nexport const REPORT_SHEET_INPUTS:FormColumnInputs[] =[\r\n    REPORT_DATE_RANGE_PICKER as FormColumnInputs,\r\n]","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\r\nimport moment from 'moment-timezone';\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TimeZoneAdapterService  extends MomentDateAdapter {\r\n// This will store the user's browser/device timezone\r\n  private userTimezone: string;\r\n\r\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string) {\r\n    super(dateLocale);\r\n    \r\n    // Get user's device locale if not specified otherwise\r\n    if (!dateLocale) {\r\n      this.setLocale(navigator.language);\r\n    }\r\n    \r\n    // Get the user's timezone from their device\r\n    this.userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n  }\r\n\r\n  // Override parse method to handle user timezone\r\n  override parse(value: any, parseFormat: string): moment.Moment | null {\r\n    if (value && typeof value === 'string') {\r\n      return moment.tz(value, parseFormat, this.locale, true, this.userTimezone);\r\n    }\r\n    return value ? moment.tz(value, this.userTimezone).locale(this.locale) : null;\r\n  }\r\n\r\n  // Override format to display in user timezone\r\n  override format(date: moment.Moment, displayFormat: string): string {\r\n    if (!this.isValid(date)) {\r\n      return '';\r\n    }\r\n    \r\n    return date.tz(this.userTimezone).locale(this.locale).format(displayFormat);\r\n  }\r\n\r\n  // Override create date to use user timezone\r\n  override createDate(year: number, month: number, date: number): moment.Moment {\r\n    return moment.tz([year, month, date], this.userTimezone).locale(this.locale);\r\n  }\r\n\r\n  // Override to use timezone\r\n  override today(): moment.Moment {\r\n    return moment().tz(this.userTimezone).locale(this.locale);\r\n  }\r\n\r\n  // Make sure deserialize maintains timezone\r\n  override deserialize(value: any): moment.Moment | null {\r\n    let date;\r\n    if (value instanceof Date) {\r\n      date = moment(value).tz(this.userTimezone).locale(this.locale);\r\n    }\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      date = moment(value, moment.ISO_8601).tz(this.userTimezone).locale(this.locale);\r\n    }\r\n    if (date && this.isValid(date)) {\r\n      return date;\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n}\r\n","import { Component, inject, Input, Output, EventEmitter, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { BehaviorSubject, catchError, Observable, take, tap, Subscription, combineLatest, distinctUntilChanged, map } from 'rxjs';\r\nimport { APIDataFetchingConfigurationInterface, ElementEditorInnerSectionElementInterface, InClassFormUtilsInterface, IUserSignature, MongoDbPipeLineConfigInterface } from 'ngx-t-forms-types';\r\n\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { NgxTMatrixTableComponent } from '../ngx-t-matrix-table/ngx-t-matrix-table.component';\r\nimport { IReportSheet } from '../../../types/report';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { NGX_T_REPORTS_CONFIG_TOKEN } from '../../injection-tokens';\r\nimport { ElementEditorComponent } from '../element-editor/element-editor.component';\r\nimport { ConfigTypes, ElementEditorConfig, REPORT_SHEET_SIDE_MENU_OPTIONS, SheetConfig } from '../../config/ngx-t-matrix-table-config';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { getSectionElements, NGX_T_FORMS_CONFIG_TOKEN } from 'ngx-t-forms';\r\nimport { PointGroup } from 'signature_pad';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { REPORT_SHEET_INPUTS } from '../../config/Report-inputs';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatDateFormats } from '@angular/material/core';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { TimeZoneAdapterService } from '../../services';\r\nimport moment from 'moment';\r\nexport const CUSTOM_DATE_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    dateInput: 'L', // Keep this for parsing\r\n  },\r\n  display: {\r\n    // Be more explicit about the format you want\r\n    dateInput: 'DD MMM YYYY', // This will show dates like \"16 May 2024\"\r\n    // Or use 'DD/MM/YYYY' for a more compact format\r\n    monthYearLabel: 'MMM YYYY',\r\n    dateA11yLabel: 'LL',\r\n    monthYearA11yLabel: 'MMMM YYYY',\r\n  },\r\n};\r\n@Component({\r\n  selector: 'app-report-sheet',\r\n  standalone: true,\r\n  imports: [CommonModule, MatToolbar, MatIconModule, NgxTMatrixTableComponent,\r\n    MatTooltipModule,\r\n    MatDividerModule,\r\n    MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule,\r\n    MatProgressSpinnerModule, ElementEditorComponent, MatButtonModule],\r\n  templateUrl: './report-sheet.component.html',\r\n  providers: [\r\n    { provide: MAT_DATE_LOCALE, useFactory: () => navigator.language },\r\n    { provide: DateAdapter, useClass: TimeZoneAdapterService },\r\n    { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }\r\n\r\n  ],\r\n  styleUrl: './report-sheet.component.scss'\r\n})\r\nexport class ReportSheetComponent implements OnDestroy ,OnInit {\r\n \r\n\r\n  public _config: IReportSheet | null = null\r\n  NGX_T_REPORTS_CONFIG_TOKEN = inject(NGX_T_REPORTS_CONFIG_TOKEN)\r\n  public readonly NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n  EXTERNAL_DATA_INTEGRATION = this.NGX_T_REPORTS_CONFIG_TOKEN.dataIntegration\r\n  externalDataIntegration$ = this.EXTERNAL_DATA_INTEGRATION().pipe(\r\n    distinctUntilChanged(\r\n      (prev, curr) => _isEqual(prev, curr)\r\n    )\r\n  )\r\n  @Input() reportName: string | null = null\r\n  @Input() editMode: boolean = false\r\n  @Input() set config(config: IReportSheet | null) {\r\n\r\n    if (_isEqual(this._config, config)) return\r\n    this._config = config\r\n    this.loadData()\r\n  }\r\n  get config() {\r\n    return this._config\r\n  }\r\n  sideMenuOptions = REPORT_SHEET_SIDE_MENU_OPTIONS\r\n\r\n\r\n  @Output() configChange = new EventEmitter<IReportSheet | null>()\r\n  error$ = new BehaviorSubject<string | undefined>(undefined)\r\n  dataList$ = new BehaviorSubject<any[]>([])\r\n  loading$ = new BehaviorSubject<boolean>(false)\r\n\r\n// Add a class property to track the debounce timer\r\nprivate loadDataDebounceTimer: any = null;\r\n\r\n// Modified loadData method with debounce\r\nloadData() {\r\n  // Clear any existing timer to restart the countdown\r\n  if (this.loadDataDebounceTimer) {\r\n    clearTimeout(this.loadDataDebounceTimer);\r\n  }\r\n  \r\n  // Set a new timer that will execute after 300ms of inactivity\r\n  this.loadDataDebounceTimer = setTimeout(() => {\r\n    const dataSource = this.config?.dataSources.at(0);\r\n    console.error(\"Data Source\", this.config);\r\n    \r\n    if (!dataSource) {\r\n      this.error$.next(\"No data source found\");\r\n      return;\r\n    }\r\n    \r\n    dataSource.source === 'api'\r\n      ? this.loadApiData(dataSource.config as APIDataFetchingConfigurationInterface)\r\n      : this.loadMongoData(dataSource.config as MongoDbPipeLineConfigInterface);\r\n      \r\n    // Clear the timer reference after execution\r\n    this.loadDataDebounceTimer = null;\r\n  }, 300);\r\n}\r\n  loadMongoData(config: MongoDbPipeLineConfigInterface) {\r\n    if (!config.pipeline || config.pipeline.length === 0) {\r\n      this.error$.next(\"No pipeline found\")\r\n      return\r\n    }\r\n    if (!config.workflowId) {\r\n      this.error$.next(\"No workflowId found\")\r\n      return\r\n    }\r\n    this.loading$.next(true)\r\n    this.NGX_T_REPORTS_CONFIG_TOKEN.runPipeLine(\r\n      config.pipeline,\r\n      config.workflowId\r\n    ).pipe(\r\n      take(1),\r\n      tap(\r\n        (data) => {\r\n          this.dataList$.next(data.results)\r\n          this.loading$.next(false)\r\n          this.error$.next(undefined)\r\n\r\n        }\r\n      ),\r\n      catchError((error) => {\r\n        console.error(\"Error\", error)\r\n        const msg = error instanceof Error ? error.message : \"Unknown error\"\r\n        this.error$.next(msg)\r\n        this.loading$.next(false)\r\n\r\n\r\n        return error\r\n      })\r\n\r\n    ).subscribe()\r\n\r\n  }\r\n  loadApiData(config: APIDataFetchingConfigurationInterface) {\r\n    const missingInputs: string[] = []\r\n    const postData = config.backEndConfig.minimumInputRequired.reduce((acc, curr) => {\r\n      const rangeValue = this.range.value\r\n      if (curr.type === \"default\") {\r\n        acc[curr.name] = curr.defaultValue\r\n        return acc\r\n      }\r\n      if (curr.type === \"mapto\" && rangeValue[curr.name]) {\r\n        acc[curr.name] = rangeValue[curr.name]\r\n        return acc\r\n      }\r\n      missingInputs.push(curr.name)\r\n      return acc\r\n    }, {} as any)\r\n\r\n    if (missingInputs.length > 0) {\r\n      this.error$.next(`Missing inputs: ${missingInputs.join(\", \")}`)\r\n      return\r\n    }\r\n\r\n    this.loading$.next(true)\r\n\r\n    this.NGX_T_REPORTS_CONFIG_TOKEN.postToServer(config.httpEndPoint, postData).pipe(\r\n      take(1),\r\n      tap((response) => {\r\n      \r\n        this.dataList$.next(response as any[])\r\n        this.loading$.next(false)\r\n        this.error$.next(undefined)\r\n      }),\r\n      catchError((error) => {\r\n        const msg = !error.error.message && error instanceof Error ? error.message : error.error.message\r\n        console.error(\"Error\", error)\r\n        this.error$.next(msg)\r\n        this.loading$.next(false)\r\n\r\n\r\n        return error\r\n      })\r\n    ).subscribe()\r\n/*************  ✨ Windsurf Command ⭐  *************/\r\n/**\r\n * Loads data from an API based on the provided configuration.\r\n * \r\n * @param config - The configuration object specifying the API endpoint, method, and other parameters\r\n * required for fetching the data.\r\n */\r\n\r\n/*******  f6089262-9e73-4765-b244-aec461c2f1be  *******/    console.log(\"API Data Loading\", config)\r\n\r\n  }\r\n  get listConfig() {\r\n    return this.config?.listConfig || []\r\n  }\r\n  set listConfig(value: any) {\r\n    if (this._config) {\r\n      this._config = {\r\n        ...this._config,\r\n        listConfig: value\r\n      }\r\n      this.configChange.emit(this._config)\r\n\r\n    }\r\n  }\r\n  get groupingConfig() {\r\n    return this.config?.groupOptions || {}\r\n  }\r\n\r\n  set groupingConfig(value: any) {\r\n    if (this._config) {\r\n      this._config = {\r\n        ...this._config,\r\n        groupOptions: value\r\n      }\r\n      this.configChange.emit(this._config)\r\n    }\r\n  }\r\n\r\n  configInEdit: string | null = null\r\n  setConfigInEdit(type: ConfigTypes) {\r\n    this.configInEdit = type\r\n\r\n  }\r\n  showSidePanel: boolean = false\r\n\r\n  setShowSidePanel() {\r\n    this.showSidePanel = !this.showSidePanel\r\n    if (!this.showSidePanel) {\r\n      this.configInEdit = null\r\n    }\r\n  }\r\n  get configActiveConfig(): ElementEditorConfig | null {\r\n    if (this.configInEdit === null) return null\r\n    const config = {\r\n      ...SheetConfig\r\n    }\r\n\r\n    return {\r\n      ...config,\r\n      editorSections: config.editorSections.map((section) => {\r\n        const elements = getSectionElements(section.elements, {} as any, this.NGX_T_FORMS_CONFIG, this.formsUtils, []) as ElementEditorInnerSectionElementInterface[]\r\n\r\n        return {\r\n          ...section,\r\n          elements: [...elements],\r\n\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  saveElement(value: any) {\r\n    let newConfig = {\r\n      ...this.config,\r\n      ...value\r\n    }\r\n\r\n    this.configChange.emit(\r\n      newConfig as IReportSheet\r\n    )\r\n    this.configInEdit = null\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  set configActiveConfig(config: ElementEditorConfig | null) {\r\n    this.configInEdit = null\r\n\r\n  }\r\n  formsUtils: InClassFormUtilsInterface = {\r\n    httpGetDataFunction: (url: string, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpGetDataFunction(url, options),\r\n    httpPostDataFunction: (url: string, data: any, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpPostDataFunction(url, data, options),\r\n    submitForm: () => new Observable<void>(subscriber => { subscriber.complete(); }),\r\n    setSubmissionStatusValue: (status: any) => { },\r\n    saveFormData: function (): Observable<void> {\r\n      throw new Error('Function not implemented.');\r\n    },\r\n    runPipeLine: function (pipeline: any, workflowId: string): Observable<{ results: any; message: string; }> {\r\n      throw new Error('Function not implemented.');\r\n    },\r\n    fileUpload: function (file: string, fileName: string, fileType: string): Observable<{ url: string; }> {\r\n      throw new Error('Function not implemented.');\r\n    },\r\n    getUserSignature: function (): Observable<IUserSignature> {\r\n      throw new Error('Function not implemented.');\r\n    },\r\n    saveUserSignature: function (signature: PointGroup[]): Observable<void> {\r\n      throw new Error('Function not implemented.');\r\n    }\r\n  }\r\n  range: FormGroup = new FormGroup({\r\n    startDate: new FormControl(moment().subtract(1, 'year')),\r\n    endDate:   new FormControl(moment()), //\r\n  });\r\n  report_inputs = REPORT_SHEET_INPUTS\r\n ngOnInit(): void {\r\n    this.subscription.add(\r\n      this.minMaxDateAndComp$.pipe(\r\n        distinctUntilChanged(\r\n          (prev, curr) => _isEqual(prev, curr)\r\n        ),\r\n        tap((data) => {\r\n          if (data.minDate) {\r\n            this.range.patchValue({\r\n              startDate: data.minDate\r\n            })\r\n          }\r\n          if (data.maxDate) {\r\n            this.range.patchValue({\r\n              endDate: data.maxDate\r\n            })\r\n          }\r\n        }),\r\n      ).subscribe()\r\n    )\r\n  }\r\n  subscription = new Subscription()\r\n  ngOnDestroy(): void {\r\n    this.subscription.unsubscribe()\r\n\r\n\r\n  }\r\nconfig$ = combineLatest([\r\n  this.dataList$.asObservable(),\r\n  this.externalDataIntegration$\r\n]).pipe(\r\n  map(([dataList, dataIntegration]) => {\r\n    // Create a completely new object\r\n    const configCopy = this._config ? JSON.parse(JSON.stringify(this._config)) : {};\r\n    \r\n    return Object.freeze({\r\n      ...configCopy,\r\n      ALL_POSSIBLE_FIELDS: [...new Set(dataList.map((i) => Object.keys(i)).flat())],\r\n      EXTERNAL_DATA_INTEGRATION_OPTIONS: Object.keys(dataIntegration).map(\r\n        (key) => ({\r\n          value: key,\r\n          label: key.replace(/([A-Z])/g, ' $1').trim()\r\n        })\r\n      )\r\n    });\r\n  })\r\n);\r\n  get minMaxDateAndComp$() {\r\n    return combineLatest(\r\n      [this.config$, this.externalDataIntegration$]\r\n    ).pipe(\r\n      map(\r\n        ([config, dataIntegration]) => {\r\n          const integrationMinKey = config?.dateRangeMin || '';\r\n          const integrationMaxKey = config?.dateRangeMax || '';\r\n          const integrationCompStartKey = config?.dateRangeComparisonStart || '';\r\n          const integrationCompEndKey = config?.dateRangeComparisonEnd || '';\r\n\r\n\r\n\r\n          // Convert to moment objects if values exist, otherwise null\r\n          const minDate = dataIntegration[integrationMinKey]\r\n            ? moment(dataIntegration[integrationMinKey])\r\n            : null;\r\n          const maxDate = dataIntegration[integrationMaxKey]\r\n            ? moment(dataIntegration[integrationMaxKey])\r\n            : null;\r\n          const compStartDate = dataIntegration[integrationCompStartKey]\r\n            ? moment(dataIntegration[integrationCompStartKey])\r\n            : null;\r\n          const compEndDate = dataIntegration[integrationCompEndKey]\r\n\r\n            ? moment(dataIntegration[integrationCompEndKey])\r\n            : null;\r\n\r\n          return {\r\n            minDate,\r\n            maxDate,\r\n            compStartDate,\r\n            compEndDate\r\n          };\r\n        }\r\n      )\r\n    );\r\n  }\r\n\r\n  dateChanged:null |Record<string, any> = null\r\n  dateRangeChanged(event: any, control: string) {\r\n    const value = event.value\r\n\r\n    if (this.range) {\r\n      this.range.patchValue({\r\n        [control]: value\r\n      })\r\n      this.dateChanged = {\r\n        ...this.dateChanged,\r\n        [control]: value\r\n      }\r\n    }\r\n    this.loadData()\r\n  }\r\n\r\n}\r\n","@if(error$|async){\r\n<mat-toolbar class=\"error-toolbar\">\r\n    <mat-icon  color=\"warn\"  aria-hidden=\"false\" aria-label=\"Error loading transactions\">error_outline</mat-icon>\r\n    <span class=\"error-message\">\r\n        <div class=\"error-title\">\r\n            Failed To load report sheet\r\n        </div>\r\n        <div class=\"error-details\">\r\n            {{error$|async}}\r\n        </div>\r\n    </span>\r\n    <span class=\"spacer\"></span>\r\n    <button (click)=\"loadData()\" mat-flat-button color=\"primary\" aria-label=\"Retry loading transactions\">\r\n        <mat-icon>refresh</mat-icon>\r\n        Retry\r\n    </button>\r\n</mat-toolbar>\r\n}\r\n\r\n\r\n\r\n<div class=\"report-sheet-container\">\r\n    <div class=\"report-sheet-content\">\r\n        @if(loading$|async){\r\n        <div\r\n            style=\"max-width:400px; margin:auto; padding: 20px; height: 80%; display: flex; align-items: center; justify-content: center;\">\r\n            <div style=\"display: flex; flex-direction: column; align-items: center;\">\r\n                <mat-spinner diameter=\"40\" mode=\"indeterminate\"></mat-spinner>\r\n                <div style=\"text-align: center; margin-top: 10px;\">Loading Report...</div>\r\n            </div>\r\n\r\n        </div>\r\n\r\n\r\n        }@else {\r\n\r\n\r\n\r\n        <mat-toolbar class=\"report-inputs-toolbar\">\r\n            <mat-form-field [subscriptSizing]=\"'dynamic'\" appearance=\"fill\" class=\"date-range-input\">\r\n                <mat-label>Enter a date range</mat-label>\r\n                <mat-date-range-input [min]=\"(minMaxDateAndComp$|async)?.minDate\" [max]=\"(minMaxDateAndComp$|async)?.maxDate\" [formGroup]=\"range\"\r\n                 \r\n                [rangePicker]=\"picker\"\r\n                [comparisonStart]=\"(minMaxDateAndComp$|async)?.compStartDate\"\r\n                [comparisonEnd]=\"(minMaxDateAndComp$|async)?.compEndDate\"\r\n                >\r\n                    <input    matStartDate (dateChange)=\"dateRangeChanged($event, 'startDate')\" formControlName=\"startDate\"\r\n                        placeholder=\"Start date\">\r\n                    <input  (dateChange)=\"dateRangeChanged($event, 'endDate')\" matEndDate formControlName=\"endDate\"\r\n                        placeholder=\"End date\">\r\n                </mat-date-range-input>\r\n\r\n                <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-date-range-picker touchUi #picker>\r\n                    <mat-date-range-picker-actions>\r\n                        <button mat-button matDateRangePickerCancel>Cancel</button>\r\n                        <button mat-raised-button color=\"primary\" style=\"min-width:120px;border-radius:16px\" matDateRangePickerApply>Apply</button>\r\n                    </mat-date-range-picker-actions>\r\n                </mat-date-range-picker>\r\n\r\n                @if (range?.controls?.['startDate']?.hasError('matStartDateInvalid')) {\r\n                <mat-error>Invalid start date</mat-error>\r\n                }\r\n                @if (range?.controls?.['endDate']?.hasError('matEndDateInvalid')) {\r\n                <mat-error>Invalid end date</mat-error>\r\n                }\r\n                <button matSuffix mat-icon-button style=\"    margin-right: px;\r\n    margin-left: px;\" color=\"primary\" (click)=\"loadData()\" matTooltip=\"Refresh data\" [matTooltipPosition]=\"'before'\">\r\n                    <mat-icon>\r\n                        refresh\r\n                    </mat-icon>\r\n                </button>\r\n            </mat-form-field>\r\n\r\n\r\n\r\n\r\n        </mat-toolbar>\r\n        <mat-divider></mat-divider>\r\n\r\n\r\n\r\n\r\n\r\n        <app-ngx-t-matrix-table\r\n            \r\n        [list]=\"dataList$|async\" [listConfig]=\"listConfig\" [groupOptions]=\"groupingConfig\"\r\n            [reportName]=\"reportName\">\r\n            <ng-content ></ng-content>\r\n            \r\n        </app-ngx-t-matrix-table>}\r\n    </div>\r\n    <div class=\"report-sheet-sidebar-right\">\r\n\r\n\r\n        @if(showSidePanel && configActiveConfig === null){\r\n        <div class=\"side-buttons-container\">\r\n            @for(item of sideMenuOptions; track item.config){\r\n            <button (click)=\"setConfigInEdit(item.config)\" mat-icon-button [matTooltip]=\"item.title\"\r\n                [matTooltipPosition]=\"'before'\">\r\n                <mat-icon [style.color]=\"item.color\">{{item.icon}}</mat-icon>\r\n\r\n            </button>\r\n\r\n            }\r\n        </div>\r\n        }\r\n\r\n\r\n        @if(configActiveConfig && configInEdit !== null){\r\n        <lib-element-editor [inEdit]=\"config$|async\" [label]=\"configActiveConfig.label\"\r\n            [subTitle]=\"configActiveConfig.subTitle\" [editorSections]=\"configActiveConfig.editorSections\"\r\n            [formInputs]=\"  report_inputs \" [saveButtonLabel]=\"configActiveConfig.saveButtonLabel\"\r\n            (closeEditor)=\"configActiveConfig = null\" (saveElement)=\"saveElement($event)\">\r\n        </lib-element-editor>\r\n        }\r\n\r\n        @if(editMode && configInEdit === null){\r\n        <button (click)=\"setShowSidePanel()\" mat-flat-button class=\"config-options\" color=\"accent\">\r\n            <mat-icon>\r\n                {{\r\n                showSidePanel ? 'navigate_next' : 'navigate_before'\r\n                }}\r\n\r\n            </mat-icon>\r\n            <span class=\"label\">\r\n                {{\r\n                showSidePanel ? 'Hide side panel' : 'Show side panel'\r\n                }}\r\n\r\n            </span>\r\n\r\n        </button>\r\n        }\r\n\r\n\r\n\r\n    </div>\r\n\r\n</div>\r\n\r\n\r\n\r\n<!-- @for(item of tMatrixTableConfigMenu; track item.config){\r\n    <button (click)=\"setActiveConfig(item.config)\" mat-menu-item>\r\n      <mat-icon>{{item.icon}}</mat-icon>\r\n      <span>\r\n        <div>{{item.title}}</div>\r\n        <small>\r\n          {{item.subTitle}}\r\n        </small>\r\n      </span>\r\n      \r\n    </button>\r\n    \r\n    <mat-divider></mat-divider>\r\n  \r\n  } -->","/*\r\n * Public API Surface of ngx-t-reports\r\n */\r\n\r\n\r\nexport * from './lib/components/index'\r\nexport * from './lib/services/index'\r\nexport * from './lib/injection-tokens/index'\r\nexport * from './types/index'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i10","i11","moment","i5","i6","i7","i8","i9"],"mappings":"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"}