{"version":3,"file":"ngx-t-reports.mjs","sources":["../../../projects/ngx-t-reports/src/lib/shared/functions/isEqual.ts","../../../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/pipes/column-label.pipe.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/types/DocumentSectionConfigurationsInterface.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/config/axisConfig.ts","../../../projects/ngx-t-reports/src/lib/services/eChartsConfigController/enums.ts","../../../projects/ngx-t-reports/src/lib/config/SeriesConfig.ts","../../../projects/ngx-t-reports/src/lib/config/ngx-t-dashboard-config.ts","../../../projects/ngx-t-reports/src/lib/config/Report-inputs.ts","../../../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/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/lib/components/chart-grid/functions/checkChartsForErrors.ts","../../../projects/ngx-t-reports/src/lib/components/chart-grid/chart-grid.component.ts","../../../projects/ngx-t-reports/src/lib/components/chart-grid/chart-grid.component.html","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/report-dashboard-selectors.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/report-dashboard-actions.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/functions/loadDataSource.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/functions/dataSourcesHasChanged.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/report-dashboard-effects.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/store/report-dashboard-store.service.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/report-dashboard.component.ts","../../../projects/ngx-t-reports/src/lib/components/report-dashboard/report-dashboard.component.html","../../../projects/ngx-t-reports/src/public-api.ts","../../../projects/ngx-t-reports/src/ngx-t-reports.ts"],"sourcesContent":["/**\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}","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { EChartsOption } from 'echarts';\r\nimport { NgxEchartsModule, provideEchartsCore } from 'ngx-echarts';\r\nimport * as echarts from 'echarts/core';\r\nimport { AriaComponent, AxisPointerComponent, BrushComponent, CalendarComponent, DatasetComponent, DataZoomComponent, GraphicComponent, GridComponent, GridSimpleComponent, LegendComponent, MarkAreaComponent, MarkLineComponent, MarkPointComponent, ParallelComponent, PolarComponent, RadarComponent, SingleAxisComponent, TimelineComponent, TitleComponent, ToolboxComponent, TooltipComponent, TransformComponent, VisualMapComponent } 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\nimport { _isEqual } from '../../../shared/functions/isEqual';\r\n\r\necharts.use([\r\n  BarChart, BoxplotChart, CandlestickChart, CustomChart, EffectScatterChart,\r\n  TitleComponent, TooltipComponent, \r\n  LegendComponent,\r\n \r\n  GridSimpleComponent,\r\n  DataZoomComponent,\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   AriaComponent,\r\n   AxisPointerComponent,\r\n   BrushComponent,\r\n   CalendarComponent,\r\n  DatasetComponent,\r\n  GraphicComponent,\r\n  MarkAreaComponent,\r\n  MarkLineComponent,\r\n  MarkPointComponent,\r\n  ParallelComponent,\r\n  PolarComponent,\r\n  RadarComponent,\r\n  SingleAxisComponent,\r\n  TimelineComponent,\r\n  ToolboxComponent,\r\n  TransformComponent,\r\n  VisualMapComponent,\r\n  \r\n\r\n\r\n\r\n]);\r\n\r\n/** A chart shorter than this cannot fit a legend plus a readable plot area. */\r\nconst DEFAULT_CHART_HEIGHT = 280;\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 {\r\n  @Input() loading!: boolean\r\n  _options: EChartsOption | undefined\r\n  get options() {\r\n\r\n    return this._options\r\n  }\r\n  /**\r\n   * Held by reference: `options` is a signal input on the ngx-echarts directive,\r\n   * so an equal-but-new object would still force a full chart re-render.\r\n   */\r\n  @Input() set options(value: EChartsOption | undefined) {\r\n\r\n    if(_isEqual(this._options, value)) return;\r\n    this._options = value\r\n  }\r\n  /** Accepts a bare number (px) or any CSS length — `320`, `'320px'`, `'50vh'`. */\r\n  @Input() height: string | number | undefined\r\n\r\n  get resolvedHeight(): string {\r\n    if (this.height === undefined || this.height === null || this.height === '') {\r\n      return `${DEFAULT_CHART_HEIGHT}px`\r\n    }\r\n    return typeof this.height === 'number' || /^\\d+(\\.\\d+)?$/.test(String(this.height))\r\n      ? `${this.height}px`\r\n      : String(this.height)\r\n  }\r\n\r\n  @Output() chartClick = new EventEmitter<any>();\r\n\r\n  onChartClick(event: any) {\r\n    this.chartClick.emit(event);\r\n  }\r\n}\r\n","@if (options) {\n<div echarts class=\"chart\" [style.height]=\"resolvedHeight\" [options]=\"options\" [autoResize]=\"true\" [loading]=\"loading\"\n    (chartClick)=\"onChartClick($event)\"></div>\n}\n","import { EChartsOption } from \"echarts\"\n\nexport interface ChartDataPoint {\n    value: number\n    name: string\n}\n\nexport interface BuiltChart {\n    title: string\n    id: string\n    chart: EChartsOption\n}\n\nexport const colors = [\n    '#4285F4',\n    '#FBBC05',\n    '#34A853',\n    '#EA4335',\n    '#55ACEE',\n    '#3B5998',\n    '#7CBB00',\n    '#00A1F1',\n    '#7B0099',\n    '#146EB4'\n];\n\nexport function getColors(n: number): string[] {\n    const result: string[] = [];\n    for (let i = 0; i < n; i++) {\n        result.push(colors[i % colors.length] as string);\n    }\n    return result;\n}\n\n/**\n * Group totals are frequently currency amounts in the millions. Rendering them\n * in full turns every axis tick and slice label into a wall of digits, so labels\n * use a compact form and the tooltip carries the exact value.\n */\nconst compactFormatter = new Intl.NumberFormat('en-US', {\n    notation: 'compact',\n    maximumFractionDigits: 1,\n});\n\nconst exactFormatter = new Intl.NumberFormat('en-US', {\n    maximumFractionDigits: 2,\n});\n\nexport function formatCompact(value: number): string {\n    return Number.isFinite(value) ? compactFormatter.format(value) : '—'\n}\n\nexport function formatExact(value: number): string {\n    return Number.isFinite(value) ? exactFormatter.format(value) : '—'\n}\n\n/**\n * Every chart in the sheet shares these: the same toolbox affordances, the same\n * type ramp, and no chart-level title (the card header already names the chart,\n * and an in-canvas title steals vertical space from the plot).\n */\nfunction chartBase(dataSeries: ChartDataPoint[]): EChartsOption {\n    return {\n        color: getColors(dataSeries.length),\n        textStyle: {\n            fontFamily: 'Roboto, \"Helvetica Neue\", sans-serif',\n            fontSize: 12,\n        },\n        toolbox: {\n            show: true,\n            right: 8,\n            top: 0,\n            itemSize: 14,\n            feature: {\n                dataView: { show: true, readOnly: true, title: 'View data' },\n                restore: { show: true, title: 'Reset' },\n                saveAsImage: { show: true, title: 'Save image' },\n            },\n        },\n    }\n}\n\n/**\n * Legends grow with the number of groups; a scrollable bottom legend keeps the\n * plot area a constant size no matter how many series land in it.\n */\nfunction scrollingLegend(): EChartsOption['legend'] {\n    return {\n        type: 'scroll',\n        bottom: 0,\n        left: 'center',\n        itemWidth: 10,\n        itemHeight: 10,\n        itemGap: 12,\n        textStyle: { fontSize: 11 },\n    }\n}\n\nexport function createADonutChart(id: string, title: string, dataSeries: ChartDataPoint[]): BuiltChart {\n    return {\n        title,\n        id,\n        chart: {\n            ...chartBase(dataSeries),\n            tooltip: {\n                trigger: 'item',\n                valueFormatter: (value) => formatExact(Number(value)),\n            },\n            legend: scrollingLegend(),\n            series: [{\n                name: title,\n                type: 'pie',\n                // Percentages, not pixels — the ring has to survive a narrow card.\n                radius: ['45%', '70%'],\n                center: ['50%', '45%'],\n                avoidLabelOverlap: true,\n                minAngle: 2,\n                itemStyle: {\n                    borderRadius: 6,\n                    borderColor: '#fff',\n                    borderWidth: 2,\n                },\n                label: {\n                    show: true,\n                    formatter: (params: any) => `${formatCompact(Number(params.value))}`,\n                    fontSize: 11,\n                },\n                labelLine: {\n                    length: 8,\n                    length2: 8,\n                    lineStyle: { color: '#9aa0a6' },\n                },\n                emphasis: {\n                    label: {\n                        show: true,\n                        fontSize: 14,\n                        fontWeight: 'bold',\n                    },\n                },\n                data: dataSeries,\n            }],\n        },\n    }\n}\n\nexport function createABarChart(id: string, title: string, dataSeries: ChartDataPoint[]): BuiltChart {\n    // Past a handful of categories, horizontal labels collide; tilt them instead\n    // of letting ECharts silently drop every other one.\n    const labelRotation = dataSeries.length > 6 ? 35 : 0\n\n    return {\n        title,\n        id,\n        chart: {\n            ...chartBase(dataSeries),\n            tooltip: {\n                trigger: 'axis',\n                axisPointer: { type: 'shadow' },\n                valueFormatter: (value) => formatExact(Number(value)),\n            },\n            grid: {\n                top: 24,\n                left: 8,\n                right: 8,\n                bottom: 4,\n                containLabel: true,\n            },\n            xAxis: [{\n                type: 'category',\n                data: dataSeries.map(v => v.name),\n                axisTick: { alignWithLabel: true },\n                axisLabel: {\n                    fontSize: 11,\n                    rotate: labelRotation,\n                    hideOverlap: true,\n                    width: 96,\n                    overflow: 'truncate',\n                },\n            }],\n            yAxis: [{\n                type: 'value',\n                axisLabel: {\n                    fontSize: 11,\n                    formatter: (value: number) => formatCompact(value),\n                },\n                splitLine: { lineStyle: { type: 'dashed', opacity: 0.5 } },\n            }],\n            series: [{\n                name: title,\n                type: 'bar',\n                barMaxWidth: 48,\n                itemStyle: { borderRadius: [4, 4, 0, 0] },\n                label: {\n                    show: true,\n                    position: 'top',\n                    fontSize: 11,\n                    formatter: (params: any) => formatCompact(Number(params.value)),\n                },\n                emphasis: {\n                    focus: 'series',\n                    label: { show: true, fontSize: 12, fontWeight: 'bold' },\n                },\n                data: dataSeries.map((v, index) => ({\n                    ...v,\n                    itemStyle: { color: getColors(dataSeries.length)[index] },\n                })),\n            }],\n        },\n    }\n}\n\nexport function createRoseTypeChart(id: string, title: string, dataSeries: ChartDataPoint[]): BuiltChart {\n    return {\n        title,\n        id,\n        chart: {\n            ...chartBase(dataSeries),\n            tooltip: {\n                trigger: 'item',\n                valueFormatter: (value) => formatExact(Number(value)),\n            },\n            legend: scrollingLegend(),\n            series: [{\n                name: title,\n                type: 'pie',\n                // Was `[50, 250]` — fixed pixels overflowed any card under ~500px.\n                radius: ['15%', '72%'],\n                center: ['50%', '45%'],\n                roseType: 'area',\n                itemStyle: { borderRadius: 6 },\n                label: {\n                    show: true,\n                    fontSize: 11,\n                    formatter: (params: any) => formatCompact(Number(params.value)),\n                },\n                labelLine: { length: 6, length2: 6 },\n                data: dataSeries,\n            }],\n        },\n    }\n}\n\nexport function createAPolarChart(id: string, title: string, dataSeries: ChartDataPoint[]): BuiltChart {\n    return {\n        title,\n        id,\n        chart: {\n            ...chartBase(dataSeries),\n            tooltip: {\n                trigger: 'item',\n                valueFormatter: (value) => formatExact(Number(value)),\n            },\n            polar: {\n                radius: ['15%', '72%'],\n                center: ['50%', '50%'],\n            },\n            angleAxis: {\n                startAngle: 75,\n                axisLabel: {\n                    fontSize: 11,\n                    formatter: (value: number) => formatCompact(value),\n                },\n            },\n            radiusAxis: {\n                type: 'category',\n                data: dataSeries.map(v => v.name),\n                axisLabel: { fontSize: 11, width: 96, overflow: 'truncate' },\n            },\n            series: [{\n                type: 'bar',\n                coordinateSystem: 'polar',\n                data: dataSeries.map((v, index) => ({\n                    value: v.value,\n                    name: v.name,\n                    itemStyle: { color: getColors(dataSeries.length)[index] },\n                })),\n                label: {\n                    show: true,\n                    position: 'middle',\n                    fontSize: 11,\n                    formatter: (params: any) => `${params.name}: ${formatCompact(Number(params.value))}`,\n                },\n            }],\n        },\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Column labels arrive from the document configuration in whatever shape the\n * form builder produced them — `projectNumber`, `project Number`, `requisition_date`.\n * This normalises all of those to clean title case for display only; the\n * underlying config (and therefore the Excel export) is left untouched.\n */\nconst MINOR_WORDS = new Set([\n    'a', 'an', 'and', 'as', 'at', 'but', 'by', 'for', 'from', 'in', 'nor',\n    'of', 'on', 'or', 'per', 'the', 'to', 'via', 'vs', 'with',\n]);\n\n@Pipe({\n    name: 'columnLabel',\n    standalone: true,\n})\nexport class ColumnLabelPipe implements PipeTransform {\n\n    transform(value: string | null | undefined): string {\n        if (!value) return '';\n\n        const words = String(value)\n            // split camelCase / PascalCase runs: \"projectNumber\" -> \"project Number\"\n            .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n            // keep acronym boundaries readable: \"GLAccount\" -> \"GL Account\"\n            .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n            .replace(/[_\\-.]+/g, ' ')\n            .trim()\n            .split(/\\s+/)\n            .filter(Boolean);\n\n        return words\n            .map((word, index) => this.formatWord(word, index === 0 || index === words.length - 1))\n            .join(' ');\n    }\n\n    private formatWord(word: string, isEdgeWord: boolean): string {\n        // Acronyms already carry their own casing — \"GL\", \"VAT\", \"ID\".\n        if (/^[A-Z0-9]{1,4}$/.test(word)) return word;\n\n        const lower = word.toLowerCase();\n        if (!isEdgeWord && MINOR_WORDS.has(lower)) return lower;\n\n        // Long all-caps words are shouting, not acronyms — \"REQUISITION\" -> \"Requisition\".\n        const rest = /^[A-Z]+$/.test(word) ? lower.slice(1) : word.slice(1);\n        return lower.charAt(0).toUpperCase() + rest;\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n\nimport { GroupConfig } from '../../functions/groupedBy';\n\nimport { BuiltChart, createABarChart, createADonutChart, createAPolarChart, createRoseTypeChart } from '../../functions/createPieChart';\nimport { DocumentLitsLabelConfigInterface } from '../../../../../types/DocumentSectionConfigurationsInterface';\nimport { MatButtonModule } from '@angular/material/button';\nimport { EChartsComponent } from '../../../e-charts/e-charts/e-charts.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ColumnLabelPipe } from '../../../../pipes/column-label.pipe';\n\nexport enum ChartTypes {\n  Donut = \"donutChart\",\n  Bar = \"bar\",\n  Polar = \"polar\",\n  RoseType = \"roseType\"\n}\n\ninterface ChartCardConfig {\n  full: boolean\n  chartType: ChartTypes\n}\n\n/** Compact cards read best around this height; expanded gets room for detail. */\nconst CARD_CHART_HEIGHT = 260;\nconst EXPANDED_CHART_HEIGHT = 440;\n\n@Component({\n  selector: 'app-grouping-chart',\n  standalone: true,\n  imports: [CommonModule, EChartsComponent, MatCardModule, MatButtonModule, MatIconModule, MatMenuModule,\n    MatTooltipModule, ColumnLabelPipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './grouping-chart.component.html',\n  styleUrl: './grouping-chart.component.scss'\n})\nexport class GroupingChartComponent implements OnChanges {\n  @Input() groups: GroupConfig[] = []\n  @Input() numberProperties: DocumentLitsLabelConfigInterface[] = []\n\n  /**\n   * Built once per input change rather than read from a template getter — the\n   * previous getter hashed the whole group tree with `JSON.stringify` on every\n   * change-detection pass just to decide it could reuse its cache.\n   */\n  charts: BuiltChart[] = []\n\n  chartConfig: Record<string, ChartCardConfig> = {}\n  chatTypesEnum = ChartTypes\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['groups'] || changes['numberProperties']) {\n      this.buildCharts()\n    }\n  }\n\n  private buildCharts() {\n    this.charts = (this.numberProperties || []).map((property, index) => {\n      const id = index.toString()\n      const dataSeries = (this.groups || []).map(g => ({\n        name: g.name,\n        value: Number(g.totals?.[property.formControlName] || 0),\n      }))\n\n      switch (this.chartConfig[id]?.chartType) {\n        case ChartTypes.Bar: return createABarChart(id, property.label, dataSeries)\n        case ChartTypes.Polar: return createAPolarChart(id, property.label, dataSeries)\n        case ChartTypes.RoseType: return createRoseTypeChart(id, property.label, dataSeries)\n        default: return createADonutChart(id, property.label, dataSeries)\n      }\n    })\n  }\n\n  private configFor(id: string): ChartCardConfig {\n    if (!this.chartConfig[id]) {\n      this.chartConfig[id] = { full: false, chartType: ChartTypes.Donut }\n    }\n    return this.chartConfig[id]\n  }\n\n  isExpanded(id: string) {\n    return !!this.chartConfig[id]?.full\n  }\n\n  chartTypeOf(id: string) {\n    return this.chartConfig[id]?.chartType ?? ChartTypes.Donut\n  }\n\n  setChartType(id: string, type: ChartTypes) {\n    this.configFor(id).chartType = type\n    this.buildCharts()\n  }\n\n  toggleExpansion(id: string) {\n    const config = this.configFor(id)\n    config.full = !config.full\n  }\n\n  chartHeight(id: string) {\n    return this.isExpanded(id) ? EXPANDED_CHART_HEIGHT : CARD_CHART_HEIGHT\n  }\n}\n","<section class=\"chart-grid\">\n    @for (chart of charts; track chart.id) {\n    <mat-card class=\"chart-card\" [class.chart-card--full]=\"isExpanded(chart.id)\">\n        <div class=\"chart-card-header\">\n            <h4 class=\"chart-card-title\">{{ chart.title | columnLabel }}</h4>\n            <div class=\"chart-card-actions\">\n                <button mat-icon-button class=\"chart-card-action\"\n                    [matTooltip]=\"isExpanded(chart.id) ? 'Collapse' : 'Expand'\"\n                    [attr.aria-label]=\"isExpanded(chart.id) ? 'Collapse chart' : 'Expand chart'\"\n                    (click)=\"toggleExpansion(chart.id)\">\n                    <mat-icon>{{ isExpanded(chart.id) ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\n                </button>\n                <button mat-icon-button class=\"chart-card-action\" [matMenuTriggerFor]=\"menu\"\n                    [matMenuTriggerData]=\"{ id: chart.id }\" matTooltip=\"Chart type\" aria-label=\"Chart settings\">\n                    <mat-icon>more_vert</mat-icon>\n                </button>\n            </div>\n        </div>\n        <app-e-charts [options]=\"chart.chart\" [height]=\"chartHeight(chart.id)\"></app-e-charts>\n    </mat-card>\n    }\n</section>\n\n<mat-menu #menu=\"matMenu\">\n    <ng-template matMenuContent let-id=\"id\">\n        <button (click)=\"setChartType(id, chatTypesEnum.Donut)\" mat-menu-item>\n            <mat-icon [color]=\"chartTypeOf(id) === chatTypesEnum.Donut ? 'primary' : ''\">donut_large</mat-icon>\n            <span [style.font-weight]=\"chartTypeOf(id) === chatTypesEnum.Donut ? 600 : ''\">Donut</span>\n        </button>\n        <button (click)=\"setChartType(id, chatTypesEnum.Bar)\" mat-menu-item>\n            <mat-icon [color]=\"chartTypeOf(id) === chatTypesEnum.Bar ? 'primary' : ''\">bar_chart</mat-icon>\n            <span [style.font-weight]=\"chartTypeOf(id) === chatTypesEnum.Bar ? 600 : ''\">Bar</span>\n        </button>\n        <button (click)=\"setChartType(id, chatTypesEnum.Polar)\" mat-menu-item>\n            <mat-icon [color]=\"chartTypeOf(id) === chatTypesEnum.Polar ? 'primary' : ''\">radar</mat-icon>\n            <span [style.font-weight]=\"chartTypeOf(id) === chatTypesEnum.Polar ? 600 : ''\">Polar</span>\n        </button>\n        <button (click)=\"setChartType(id, chatTypesEnum.RoseType)\" mat-menu-item>\n            <mat-icon [color]=\"chartTypeOf(id) === chatTypesEnum.RoseType ? 'primary' : ''\">filter_vintage</mat-icon>\n            <span [style.font-weight]=\"chartTypeOf(id) === chatTypesEnum.RoseType ? 600 : ''\">Rose</span>\n        </button>\n    </ng-template>\n</mat-menu>\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  boolean = 'boolean'\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}","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, distinctUntilChanged, map, Observable, shareReplay } 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    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 getFullGroupedData$ = combineLatest(\r\n        [\r\n            list$,\r\n            listConfig$,\r\n            groupOptions$,\r\n            closedGroups$\r\n        ]\r\n    ).pipe(\r\n        map(([list, listConfig, groupOptions, closedGroups]) => {\r\n            const groupBy = groupOptions?.columns || [];\r\n            const data = matrixTableGroupedData(list || [], groupBy, closedGroups, listConfig || []);\r\n            // This returns the FULL dataset, ungrouped.\r\n            return data.filter(d => !(d.name === undefined && d.IS_GROUP_CONFIG));\r\n        }),\r\n        // Important: Add a shareReplay to prevent recalculation for every new subscriber.\r\n        shareReplay(1)\r\n    );\r\n\r\n    const PAGE_SIZE = 100;\r\n    // Derive how many rows should be materialised for the current scroll\r\n    // position, then `distinctUntilChanged` on that count. This is the key to\r\n    // stopping the scroll bounce: scrolling within a page produces the SAME\r\n    // count, so `getGroupedData$` does NOT emit a new array on every scroll\r\n    // frame. The table dataSource only changes when the window actually grows\r\n    // by a page, which removes the per-frame re-render that fed the loop.\r\n    const displayCount$ = combineLatest(\r\n        [\r\n            getFullGroupedData$,\r\n            scrollIndex$\r\n        ]\r\n    ).pipe(\r\n        map(([fullData, scrollIndex]) => {\r\n            if (fullData.length === 0) {\r\n                return 0;\r\n            }\r\n            const pages = scrollIndex <= PAGE_SIZE\r\n                ? 1\r\n                : Math.ceil((scrollIndex + 1) / PAGE_SIZE);\r\n            // Clamp to the dataset length so the count stabilises (and stops\r\n            // emitting) once everything is rendered.\r\n            return Math.min(pages * PAGE_SIZE, fullData.length);\r\n        }),\r\n        distinctUntilChanged()\r\n    );\r\n\r\n    const getGroupedData$ = combineLatest(\r\n        [\r\n            getFullGroupedData$, // Use the result of the new selector\r\n            displayCount$\r\n        ]\r\n    ).pipe(\r\n        // Now this selector only does a simple, fast slice operation.\r\n        map(([fullData, count]) => fullData.slice(0, count))\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    }\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   \r\n        \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           \r\n            return ({\r\n            ...state,\r\n            scrollIndex\r\n        })\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 ExcelJS from 'exceljs';\r\nimport { toCamelCase } from './keysToCamelCase';\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\n\r\nfunction triggerDownload(buffer: ArrayBuffer, fileName: string): void {\r\n  const blob = new Blob([buffer], {\r\n    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n  });\r\n  const url = URL.createObjectURL(blob);\r\n  const link = document.createElement('a');\r\n  link.href = url;\r\n  link.download = fileName;\r\n  document.body.appendChild(link);\r\n  link.click();\r\n  document.body.removeChild(link);\r\n  URL.revokeObjectURL(url);\r\n}\r\n\r\nfunction appendJsonSheet(\r\n  wb: ExcelJS.Workbook,\r\n  rows: Record<string, unknown>[],\r\n  sheetName: string,\r\n): void {\r\n  const sheet = wb.addWorksheet(sheetName);\r\n  if (rows.length === 0) return;\r\n  const headers = Object.keys(rows[0] ?? {});\r\n  sheet.columns = headers.map(h => ({ header: h, key: h }));\r\n  for (const row of rows) {\r\n    sheet.addRow(row);\r\n  }\r\n}\r\n\r\nfunction worksheetToJson(sheet: ExcelJS.Worksheet): Record<string, unknown>[] {\r\n  const headers: string[] = [];\r\n  const headerRow = sheet.getRow(1);\r\n  headerRow.eachCell({ includeEmpty: false }, (cell, colNumber) => {\r\n    headers[colNumber - 1] = String(cell.value ?? '');\r\n  });\r\n\r\n  const rows: Record<string, unknown>[] = [];\r\n  for (let r = 2; r <= sheet.rowCount; r++) {\r\n    const row = sheet.getRow(r);\r\n    const obj: Record<string, unknown> = {};\r\n    let hasValue = false;\r\n    for (let c = 1; c <= headers.length; c++) {\r\n      const header = headers[c - 1];\r\n      if (!header) continue;\r\n      const raw = row.getCell(c).value;\r\n      const normalized = normalizeCellValue(raw);\r\n      if (normalized !== null && normalized !== undefined && normalized !== '') hasValue = true;\r\n      obj[header] = normalized;\r\n    }\r\n    if (hasValue) rows.push(obj);\r\n  }\r\n  return rows;\r\n}\r\n\r\n/**\r\n * Mirrors `XLSX.utils.sheet_to_json(ws, { raw: false })`: dates render as\r\n * `yyyy-mm-dd` strings, formulas resolve to their cached result, rich text\r\n * concatenates, and hyperlinks return their text. Other primitives pass\r\n * through unchanged.\r\n */\r\nfunction normalizeCellValue(value: ExcelJS.CellValue | undefined): unknown {\r\n  if (value === null || value === undefined) return '';\r\n  if (value instanceof Date) {\r\n    const y = value.getFullYear();\r\n    const m = String(value.getMonth() + 1).padStart(2, '0');\r\n    const d = String(value.getDate()).padStart(2, '0');\r\n    return `${y}-${m}-${d}`;\r\n  }\r\n  if (typeof value === 'object') {\r\n    if ('text' in value && typeof value.text === 'string') return value.text;\r\n    if ('result' in value && value.result !== undefined) return normalizeCellValue(value.result);\r\n    if ('richText' in value && Array.isArray(value.richText)) {\r\n      return value.richText.map(p => p.text).join('');\r\n    }\r\n    if ('hyperlink' in value && 'text' in value) return value.text;\r\n    if ('formula' in value && 'result' in value) return normalizeCellValue(value.result);\r\n    if ('error' in value) return '';\r\n  }\r\n  return value;\r\n}\r\n\r\nfunction 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\nexport class TableUtil {\r\n  static async exportTableToExcel(tableId: string, name: string): Promise<void> {\r\n    const { sheetName, fileName } = getFileName(name);\r\n    const target = document.getElementById(tableId) as HTMLTableElement | null;\r\n    if (!target) return;\r\n\r\n    const wb = new ExcelJS.Workbook();\r\n    const sheet = wb.addWorksheet(sanitizeSheetName(sheetName));\r\n\r\n    const rows = target.querySelectorAll('tr');\r\n    rows.forEach(rowEl => {\r\n      const cells = rowEl.querySelectorAll('th, td');\r\n      const values: (string | null)[] = [];\r\n      cells.forEach(cell => values.push(cell.textContent));\r\n      sheet.addRow(values);\r\n    });\r\n\r\n    const buffer = await wb.xlsx.writeBuffer();\r\n    triggerDownload(buffer as ArrayBuffer, `${fileName}.xlsx`);\r\n  }\r\n\r\n  static async exportArrayToExcel(arr: any[], name: string): Promise<void> {\r\n    const { sheetName, fileName } = getFileName(name);\r\n    const wb = new ExcelJS.Workbook();\r\n\r\n    // Process the main array\r\n    const mainArray = arr.map(item => this.processSimpleObject(item));\r\n    appendJsonSheet(wb, mainArray, 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 = 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            try {\r\n              appendJsonSheet(wb, processedArray, 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    const buffer = await wb.xlsx.writeBuffer();\r\n    triggerDownload(buffer as ArrayBuffer, `${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 = async (e: any) => {\r\n          try {\r\n            const buffer = e.target.result as ArrayBuffer;\r\n            const wb = new ExcelJS.Workbook();\r\n            await wb.xlsx.load(buffer);\r\n            const firstSheet = wb.worksheets[0];\r\n            if (!firstSheet) throw new Error('No sheet found');\r\n            const arrayData = worksheetToJson(firstSheet);\r\n            resolve(toCamelCase(arrayData));\r\n          } catch (innerErr) {\r\n            reject(innerErr);\r\n          }\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.readAsArrayBuffer(file);\r\n      } catch (error) {\r\n        reject(error);\r\n      }\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}\r\n","import { combineLatest, Observable,switchMap, take, 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                take(1),\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                  take(1),\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                    console.error('mainShowChart', groupChart)\r\n                    store.actions.setGroupChart(groupChart)\r\n                   \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                  take(1),\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\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                  take(1),\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\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, 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\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 { 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, map } from 'rxjs';\r\nimport { FormatDataPipe } from '../../pipes/format-Data.pipe';\r\nimport { ColumnLabelPipe } from '../../pipes/column-label.pipe';\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    ColumnLabelPipe,\r\n    MatProgressSpinnerModule],\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 {\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\r\n  vm$ = combineLatest([\r\n    this.  groupOptions$,\r\n    this.tableColumns$,\r\n    this.displayedColumns$,\r\n    this.groupLabelConfig$,\r\n      this.getGroupedData$,\r\n    this.groupedColumns$,\r\n    this.isOpen$,\r\n    this.closedGroups$,\r\n    this.groupChart$,\r\n    this.draggedGroup$,\r\n  \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      ]) => ({\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\r\n  ValueTypes = DocumentLitsLabelConfigInterfaceValueType\r\n\r\n  /**\r\n   * Relative strings (\"1 month ago\") read inconsistently next to the sheet's own\r\n   * date range, so `daysAgo` columns render as calendar dates and keep the\r\n   * relative wording in the cell tooltip instead.\r\n   */\r\n  displayValueType(valueType: DocumentLitsLabelConfigInterfaceValueType) {\r\n    return valueType === DocumentLitsLabelConfigInterfaceValueType.daysAgo\r\n      ? DocumentLitsLabelConfigInterfaceValueType.date\r\n      : valueType;\r\n  }\r\n\r\n  constructor(public dialog: MatDialog) {\r\n\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()\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()\r\n  }\r\n  closeGroupChart(){\r\n    this.store.actions.setGroupChart(null)\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(row)\r\n  }\r\n\r\n\r\n// Nominal row height used to translate a pixel scroll offset into a row index.\r\n// This mirrors the previous cdk-virtual-scroll `itemSize` so the progressive\r\n// windowing (page size 100) behaves identically — it only drives how eagerly\r\n// the slice window grows, not layout.\r\nprivate readonly rowItemSize = 30;\r\n\r\nonScroll(event: Event) {\r\n  const el = event.target as HTMLElement;\r\n  const index = Math.floor(el.scrollTop / this.rowItemSize);\r\n  this.store.actions.setScrollIndex(index);\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  <section class=\"chartPanel\">\r\n    <div class=\"chartToolbar\">\r\n      <h2 class=\"chartToolbarTitle\">{{ vm.groupChart.mainTitle | columnLabel }}</h2>\r\n      <button (click)=\"closeGroupChart()\" mat-stroked-button class=\"chartToolbarClose\">\r\n        <mat-icon>close</mat-icon>\r\n        Close\r\n      </button>\r\n    </div>\r\n\r\n    <app-grouping-chart [groups]=\"vm.groupChart.groups\"\r\n      [numberProperties]=\"vm.groupChart.numberProperties\"></app-grouping-chart>\r\n  </section>\r\n  }@else {\r\n\r\n  <section class=\"tableContainer\" #tableContainer>\r\n  <mat-toolbar class=\"groupingToolbar\" (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 | columnLabel }}\r\n      <button matChipRemove [attr.aria-label]=\"'remove ' + (groupCol.label | columnLabel)\">\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 class=\"groupingHint\">\r\n      <mat-icon class=\"groupingHintIcon\">drag_indicator</mat-icon>\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 (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    <div class=\"table-scroll-viewport\" #viewPortScroll (scroll)=\"onScroll($event)\">\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            [class.cell-numeric]=\"col.valueType === ValueTypes.currency || col.valueType === ValueTypes.number\"\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\" [matTooltip]=\"'Click to group by '+ (col.label | columnLabel)\"\r\n              (click)=\"addToGrouping(col.formControlName)\" matRipple>\r\n              {{col.label | columnLabel}}\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;\"\r\n            [class.cell-numeric]=\"col.valueType === ValueTypes.currency || col.valueType === ValueTypes.number\"\r\n            [class.cell-secondary]=\"col.valueType === ValueTypes.date || col.valueType === ValueTypes.daysAgo || col.valueType === ValueTypes.systemReference\"\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 class=\"groupToggle\">\r\n              <mat-icon>{{row['IS_CLOSED'] ?'keyboard_arrow_right':'keyboard_arrow_down'}}</mat-icon>\r\n              <span class=\"groupToggleLabel\">{{row['name']}}</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 class=\"row-value-col\"\r\n              [attr.title]=\"col.valueType === ValueTypes.daysAgo ? (row[col.formControlName]|formatData: ValueTypes.daysAgo) : null\">\r\n              {{ row[col.formControlName]|formatData: displayValueType(col.valueType) }}\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']\"></tr>\r\n      </table>\r\n    </div>\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","import { ElementEditorConfigSectionInterface, ElementEditorInnerSectionElementInterface, ElementEditorTypes, SpecialElementKeys } from \"ngx-t-forms-types\"\r\nimport { format } from 'date-fns';\r\nexport var AXIS_CONFIG: ElementEditorConfigSectionInterface[] = [\r\n    {\r\n        label: 'Basic Axis Config',\r\n        id: \"caa6faba-5958-418a-a0e0-a22ca6341126\",\r\n        elements: [\r\n            {\r\n                id: \"7ebf1a29-4009-4e73-8fd5-d68c5648b833\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Name',\r\n                required: true,\r\n                placeholder: 'Enter the name for the X axis',\r\n                deepBind: ['name']\r\n            },\r\n            {\r\n                id: \"7410e406-1a66-47e4-993b-eaaf09c16a19\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Axis Position',\r\n                deepBind: ['position'],\r\n                required: true,\r\n                defaultValue: 'bottom',\r\n                options: [\r\n                    { label: 'Top', value: 'top' },\r\n                    { label: 'Bottom', value: 'bottom' }\r\n                ]\r\n            },\r\n            {\r\n                id: \"d7a80b84-ad5b-46ad-a169-830191e00169\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Axis Type',\r\n                deepBind: ['type'],\r\n                required: true,\r\n                defaultValue: 'category',\r\n                options: [\r\n                    { label: 'Value', value: 'value' },\r\n                    { label: 'Category', value: 'category' },\r\n                    { label: 'Time', value: 'time' },\r\n                    { label: 'Log', value: 'log' }\r\n                ]\r\n            },\r\n            {\r\n                id: \"c5fb0d22-572b-4c8e-bfee-cd148c500ca2\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Axis Name Position',\r\n                deepBind: ['nameLocation'],\r\n                defaultValue: 'middle',\r\n                options: [\r\n                    { label: 'Start', value: 'start' },\r\n                    { label: 'Middle', value: 'middle' },\r\n                    { label: 'End', value: 'end' }\r\n                ]\r\n            },\r\n            {\r\n                id: \"314a0dc7-7767-4ab6-b9fb-8c224cd4ba3f\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Advanced Axis Settings',\r\n                deepBind: ['showAdvanced']\r\n            }\r\n        ]\r\n    },\r\n    {\r\n        label: 'Advanced Axis Config',\r\n        id: \"37d82601-5572-4f44-b3f0-a1a27ef638a4\",\r\n\r\n        elements: [\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                id: \"7c1bd721-3597-4bbb-9c73-53062c72138b\",\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Axis Offset',\r\n                min: -100,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the offset for the X axis',\r\n                deepBind: ['offset']\r\n            },\r\n            {\r\n                id: \"0ad8b9b4-4927-4bff-85ac-da367f13695a\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Axis Grid Index',\r\n                min: 0,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the grid index for the X axis',\r\n                deepBind: ['gridIndex']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Align Axis Ticks',\r\n                id: \"05cd23c0-0a21-4a9c-b3c2-e708b90b3fb5\",\r\n                deepBind: ['alignTicks']\r\n            },\r\n            {\r\n                id: \"a22f8569-2aec-4c1b-8c75-e99f0fd7917e\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Gap Between Axis Name and Axis Line',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the gap amount',\r\n                deepBind: ['nameGap']\r\n            },\r\n            {\r\n                id: \"61471904-abfc-459f-b91b-871904f128cd\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Rotate Axis Name',\r\n                min: -90,\r\n                max: 90,\r\n                step: 1,\r\n                placeholder: 'Enter the rotation for the X axis name',\r\n                deepBind: ['nameRotate']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Inverse Axis',\r\n                id: \"b0473384-14a5-4c62-8de0-424a5ed1abdc\",\r\n                deepBind: ['inverse']\r\n            },\r\n            {\r\n                id: \"04e4bce5-3181-4847-8baa-a78cc3c2e3cf\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Boundary Gap',\r\n                placeholder: 'Enter the boundary gap for the X axis',\r\n\r\n                deepBind: ['boundaryGap']\r\n            },\r\n            {\r\n                id: \"6ce971fb-2b75-4c9c-9618-331cd083ea62\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Minimum Value',\r\n                placeholder: 'Enter the minimum value for the X axis',\r\n\r\n                deepBind: ['min']\r\n            },\r\n            {\r\n                id: \"c8f8b87f-6ad4-4f9e-a217-436491106b47\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Maximum Value',\r\n                placeholder: 'Enter the maximum value for the X axis',\r\n\r\n                deepBind: ['max']\r\n            },\r\n            {\r\n                id: \"f96c803a-7752-4ccf-a2f6-43129b48a2f7\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Scale Axis',\r\n                deepBind: ['scale']\r\n            },\r\n            {\r\n                id: \"230eefb0-54da-4296-a618-ddbdbe8d294e\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Split Number',\r\n                min: 1,\r\n                max: 20,\r\n                step: 1,\r\n                placeholder: 'Enter the number of splits for the X axis',\r\n                deepBind: ['splitNumber']\r\n            },\r\n            {\r\n                id: \"5e2595c3-305e-4528-a0e6-c64d2dc4806c\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Min Interval',\r\n                min: 0,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the minimum interval for the X axis',\r\n                deepBind: ['minInterval']\r\n            },\r\n            {\r\n                id: \"11dcafa8-5981-496f-920d-075170bcf37c\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Max Interval',\r\n                min: 0,\r\n                max: 1000,\r\n                step: 10,\r\n                placeholder: 'Enter the maximum interval for the X axis',\r\n                deepBind: ['maxInterval']\r\n            },\r\n            {\r\n                id: \"11e3f993-48e3-4b49-8848-618b9528d29b\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Interval',\r\n                min: 0,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the interval for the X axis',\r\n                deepBind: ['interval']\r\n            },\r\n            {\r\n                id: \"049ffd46-119d-45a1-9f71-9871bde15592\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Log Base',\r\n                min: 2,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the log base for the X axis',\r\n                deepBind: ['logBase']\r\n            },\r\n            {\r\n                id: \"ef4666a9-64d0-4e15-9d1c-fc7f2bc82270\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Start Value',\r\n                placeholder: 'Enter the start value for the X axis',\r\n\r\n                deepBind: ['startValue']\r\n            },\r\n            {\r\n                id: \"0bbce464-e310-4de8-b218-b5bd27fc6a1d\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Silent Axis',\r\n\r\n                deepBind: ['silent']\r\n            },\r\n            {\r\n                id: \"dd36e2f3-f036-4303-a37c-371eeea7fcd4\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Trigger Axis Event',\r\n                deepBind: ['triggerEvent']\r\n            }\r\n        ]\r\n    },\r\n    {\r\n        label: 'Axis Line Config',\r\n        id: \"9c80bd17-dea2-4df0-876b-101dbf24f8bb\",\r\n        elements: [\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Axis Line',\r\n                id: \"ac7eef97-b364-41f8-8b6b-ba45aba48f30\",\r\n                deepBind: ['axisLine', 'show']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Axis Line On Zero',\r\n                id: \"9f7c48dc-415e-4cc3-9371-d67ad405954c\",\r\n                deepBind: ['axisLine', 'onZero']\r\n            },\r\n            {\r\n                id: \"146b2866-ece4-4d3e-8fd7-da353b330dcd\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Line On Zero Axis Index',\r\n                placeholder: 'Enter the on zero axis index for the X axis line',\r\n\r\n                deepBind: ['axisLine', 'onZeroAxisIndex']\r\n            },\r\n            {\r\n                id: \"47bc3115-d8d7-43c8-a941-d5f7ec3cf9d0\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Line Symbol',\r\n                placeholder: 'Enter the symbol for the X axis line',\r\n\r\n                deepBind: ['axisLine', 'symbol']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                id: \"8451585f-ea55-4b55-9cbe-0bbff2ca94a2\",\r\n                label: 'Symbol Size',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the symbol size for the X axis line',\r\n                deepBind: ['axisLine', 'symbolSize']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                id: \"1b1a0ecf-bf8e-4868-93f0-056f07701528\",\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Symbol Offset',\r\n                min: -100,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the symbol offset for the X axis line',\r\n                deepBind: ['axisLine', 'symbolOffset']\r\n            },\r\n            {\r\n                id: \"d819f848-bed5-4e62-b8a1-0ce280ad4423\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Line Color',\r\n                placeholder: 'Enter the color for the X axis line',\r\n\r\n                deepBind: ['axisLine', 'lineStyle', 'color']\r\n            },\r\n            {\r\n                id: \"8c17ea3c-851f-43ed-a3ef-897651679af2\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Line Width',\r\n                min: 0,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the width for the X axis line',\r\n                deepBind: ['axisLine', 'lineStyle', 'width']\r\n            },\r\n            {\r\n                id: \"0c27c9a0-5f7e-44c5-ab09-fd96407e31bb\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Line Width',\r\n                placeholder: 'Enter the width for the X axis line',\r\n                deepBind: ['axisLine', 'lineStyle', 'width']\r\n            },\r\n            {\r\n                id: \"1454d81c-fc4b-4d0f-9c02-2b89e02137b3\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Line Type',\r\n                placeholder: 'Enter the type for the X axis line',\r\n                deepBind: ['axisLine', 'lineStyle', 'type']\r\n            }\r\n        ]\r\n    },\r\n    {\r\n        label: 'Axis Tick Config',\r\n        id: \"1c605cfd-98f9-45b2-b99d-0154c0dc3b63\",\r\n        elements: [\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Axis Tick',\r\n                id: \"dab63787-2a7a-4e4a-956a-6196a4a6f1a3\",\r\n                deepBind: ['axisTick', 'show']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Align Axis Tick With Label',\r\n                id: \"867e1fee-2e4c-4d41-904c-f077ce25a9f3\",\r\n                deepBind: ['axisTick', 'alignWithLabel']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Tick Interval',\r\n                placeholder: 'Enter the interval for the X axis tick',\r\n                deepBind: ['axisTick', 'interval'],\r\n                id: \"17796d8d-c158-4952-b7f2-a85c429e89ec\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Axis Tick Inside',\r\n                deepBind: ['axisTick', 'inside'],\r\n                id: \"970267ea-bf69-49e5-8afd-17a54b5c46b7\"\r\n            },\r\n            {\r\n                id: \"bc3163e3-9a77-4c42-8cc1-f9c4c8dffdfe\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Tick Length',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the length for the X axis tick',\r\n                deepBind: ['axisTick', 'length']\r\n            },\r\n            {\r\n                id: \"c53921b3-8c4b-4905-9f6c-e2aca24ee2e7\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Tick Color',\r\n                placeholder: 'Enter the color for the X axis tick',\r\n\r\n                deepBind: ['axisTick', 'lineStyle', 'color']\r\n            },\r\n            {\r\n                id: \"6e078a79-2e79-47cb-a5f3-dca789bfce9b\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Axis Minor Tick',\r\n                deepBind: ['minorTick', 'show']\r\n            },\r\n            {\r\n                id: \"68243293-6c48-4267-bf75-e96fcee231a9\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Minor Tick Split Number',\r\n                min: 2,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the split number for the X axis minor tick',\r\n                deepBind: ['minorTick', 'splitNumber']\r\n            },\r\n            {\r\n                id: \"5527c17c-3192-4d02-a183-5c1f705afdd8\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Minor Tick Length',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the length for the X axis minor tick',\r\n                deepBind: ['minorTick', 'length']\r\n            },\r\n            {\r\n                id: \"79eb4b6f-f536-455e-9104-6c3169a35c8b\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Minor Tick Color',\r\n                placeholder: 'Enter the color for the X axis minor tick',\r\n\r\n                deepBind: ['minorTick', 'lineStyle', 'color']\r\n            }\r\n        ]\r\n    },\r\n    {\r\n        label: 'Axis Label Config',\r\n        id: \"b9dfd9db-b38b-498a-a7e6-b97145fbb1a5\",\r\n        elements: [\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Axis Label',\r\n                deepBind: ['axisLabel', 'show'],\r\n                id: \"0bbaf029-a7f5-4045-8566-e164f91f9f22\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Interval',\r\n                placeholder: 'Enter the interval for the X axis label',\r\n                id: \"0c59558d-8ee6-4f00-8f95-ac9cff00d29e\",\r\n                deepBind: ['axisLabel', 'interval']\r\n            },\r\n            {\r\n                id: \"cd9457f3-3120-4675-bb98-39e4773ba7ba\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Axis Label Inside',\r\n\r\n                deepBind: ['axisLabel', 'inside']\r\n            },\r\n            {\r\n                id: \"ec82c7cb-2650-4929-b80b-51fc8c58eb15\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Label Rotate',\r\n                min: -90,\r\n                max: 90,\r\n                step: 1,\r\n                placeholder: 'Enter the rotation for the axis label',\r\n                deepBind: ['axisLabel', 'rotate']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                id: \"7abe11f0-23c1-4f63-8466-e8bbf359a18d\",\r\n                label: 'Label Margin',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the margin for the axis label',\r\n                deepBind: ['axisLabel', 'margin']\r\n            },\r\n            {\r\n                id: \"66f469a8-0972-4a5c-bcea-0d9bf64c6f4f\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Axis Label time Formater',\r\n                deepBind: ['axisLabel', 'formatterFn'],\r\n                additionalTest: [\r\n                    {\r\n                        testType: 'equalTo',\r\n                        valueMatch: 'time',\r\n                        deepBind: ['type'],\r\n                    }\r\n                ],\r\n                options: [\r\n                    { label: 'Date (YYYY-MM-DD)', value: (value: any) => format(new Date(value), 'yyyy-MM-dd') },\r\n                    { label: 'Time (HH:mm)', value: (value: any) => format(new Date(value), 'HH:mm') },\r\n                    { label: 'DateTime', value: (value: any) => format(new Date(value), 'yyyy-MM-dd HH:mm') },\r\n                    { label: 'Full DateTime', value: (value: any) => format(new Date(value), 'yyyy-MM-dd HH:mm:ss') },\r\n                    { label: 'Full DateTime with MS', value: (value: any) => format(new Date(value), 'yyyy-MM-dd HH:mm:ss.SSS') },\r\n                    { label: 'Month/Day', value: (value: any) => format(new Date(value), 'MM/dd') },\r\n                    { label: 'Month Name', value: (value: any) => format(new Date(value), 'MMMM') },\r\n                    { label: 'Month Short Name', value: (value: any) => format(new Date(value), 'MMM') },\r\n                    { label: 'Quarter', value: (value: any) => `Q${Math.ceil((new Date(value).getMonth() + 1) / 3)}` },\r\n                    { label: 'Year', value: (value: any) => format(new Date(value), 'yyyy') },\r\n                    { label: 'Short Year', value: (value: any) => format(new Date(value), 'yy') },\r\n                    { label: 'Weekday Full', value: (value: any) => format(new Date(value), 'eeee') },\r\n                    { label: 'Weekday Short', value: (value: any) => format(new Date(value), 'ee') },\r\n                    { label: '12-hour Time', value: (value: any) => format(new Date(value), 'hh:mm a') },\r\n                    { label: 'Month Day, Year', value: (value: any) => format(new Date(value), 'MMMM d, yyyy') },\r\n                    {\r\n                        label: 'Short Month Day', value: (value: any) => {\r\n                            const v = format(new Date(value), 'MMM d')\r\n                            return v\r\n                        }\r\n                    }\r\n                ],\r\n            },\r\n            {\r\n                id: \"7690fdb2-5345-452c-b52b-38be871aed71\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Axis Label Format',\r\n                deepBind: ['axisLabel', 'formatterFn'],\r\n                additionalTest: [\r\n                    {\r\n                        testType: 'equalTo',\r\n                        valueMatch: 'value',\r\n                        deepBind: ['type'],\r\n                    }\r\n                ],\r\n                options: [\r\n                    { label: 'Default', value: '{value}' },\r\n                    { label: 'Number with Unit', value: (value: any, unit: string = 'kg') => `${value} ${unit}` },\r\n                    { label: 'Currency', value: (value: any, unit: string = '$') => `${unit}${value.toFixed(2)}` },\r\n                    { label: 'Percentage', value: (value: any) => `${(value * 100).toFixed(2)}%` },\r\n                    { label: 'Scientific Notation', value: (value: any) => value.toExponential(2) },\r\n                    { label: 'Custom Format', value: (value: any, formatFn: (val: any) => string) => formatFn(value) }\r\n                ]\r\n            },\r\n            {\r\n                id: \"ac306034-0943-47ec-bfaf-d71faf5a0d8b\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'add a formatter unit',\r\n                deepBind: ['axisLabel', 'formatterUnit'],\r\n                additionalTest: [\r\n                    {\r\n                        testType: 'equalTo',\r\n                        valueMatch: 'value',\r\n                        deepBind: ['type'],\r\n                    }\r\n                ],\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Min Label',\r\n                id: \"756979b9-8bec-4115-8a97-603d72e6aff1\",\r\n                deepBind: ['axisLabel', 'showMinLabel']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Show Max Label',\r\n                id: \"84ccd1c8-7309-48b8-b70f-631699f7a15d\",\r\n                deepBind: ['axisLabel', 'showMaxLabel']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Vertical Align Min Label',\r\n                placeholder: 'Enter the vertical alignment for the min label',\r\n                id: \"5eddebaf-040d-4dec-b785-ea8f35f7bae5\",\r\n                deepBind: ['axisLabel', 'verticalAlignMinLabel']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Vertical Align Max Label',\r\n                placeholder: 'Enter the vertical alignment for the max label',\r\n                id: \"2adec87a-91a4-4f4f-8ece-1617c7ab89e4\",\r\n                deepBind: ['axisLabel', 'verticalAlignMaxLabel']\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Toggle,\r\n                label: 'Hide Overlap',\r\n\r\n                deepBind: ['axisLabel', 'hideOverlap'],\r\n                id: \"1d65d2ad-8290-402b-8185-0028a06c7907\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Color',\r\n                placeholder: 'Enter the color for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'color'],\r\n                id: \"ee2dd01c-4c48-4c18-871b-73c6d3c20d4a\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Font Style',\r\n                placeholder: 'Enter the font style for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'fontStyle'],\r\n                id: \"2daf77bf-a5e6-4bcb-ad16-44654b45cbb0\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Font Weight',\r\n                placeholder: 'Enter the font weight for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'fontWeight'],\r\n                id: \"190822d1-adb5-40eb-8ee1-3b269ec32af7\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Font Family',\r\n                placeholder: 'Enter the font family for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'fontFamily'],\r\n                id: \"dcb2d8ff-d44f-4baa-8b2c-4289152e5cf6\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Font Size',\r\n                min: 8,\r\n                max: 72,\r\n                step: 1,\r\n                placeholder: 'Enter the font size for the axis label',\r\n                deepBind: ['axisLabel', 'fontSize'],\r\n                id: \"2ef5a285-8923-4b9a-bc9a-8429eee14696\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Align',\r\n                placeholder: 'Enter the alignment for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'align'],\r\n                id: \"9df1fd73-2b80-44e9-8b5c-4e62e92e4834\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Vertical Align',\r\n                placeholder: 'Enter the vertical alignment for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'verticalAlign'],\r\n                id: \"f0f49d2b-fad9-46de-8bce-f8dc83778a39\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Line Height',\r\n                min: 0,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the line height for the axis label',\r\n                deepBind: ['axisLabel', 'lineHeight'],\r\n                id: \"b818258a-c1e3-47e6-94f4-df884ad5e353\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Background Color',\r\n                placeholder: 'Enter the background color for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'backgroundColor'],\r\n                id: \"47311129-5c15-4e2c-9c96-62d33daec97e\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Border Color',\r\n                placeholder: 'Enter the border color for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'borderColor'],\r\n                id: \"adf64b69-df4e-4e25-8150-feee1cc57665\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Border Width',\r\n                min: 0,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the border width for the axis label',\r\n                deepBind: ['axisLabel', 'borderWidth'],\r\n                id: \"e687ca26-67a0-49ea-910e-5bc8ed43c08b\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Border Type',\r\n                placeholder: 'Enter the border type for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'borderType'],\r\n                id: \"da39913c-d564-4e4e-b5f9-0f86cc130cb6\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Border Dash Offset',\r\n                min: 0,\r\n                max: 20,\r\n                step: 1,\r\n                placeholder: 'Enter the border dash offset for the axis label',\r\n                deepBind: ['axisLabel', 'borderDashOffset'],\r\n                id: \"723c798e-6f0c-46f9-80f3-7797e37f37fd\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Border Radius',\r\n                min: 0,\r\n                max: 20,\r\n                step: 1,\r\n                placeholder: 'Enter the border radius for the axis label',\r\n                deepBind: ['axisLabel', 'borderRadius'],\r\n                id: \"2637bac9-4544-4f87-8f74-ebac104eafef\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Padding',\r\n                min: 0,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the padding for the axis label',\r\n                deepBind: ['axisLabel', 'padding'],\r\n                id: \"c01b9675-b9a3-4049-bbf7-82e15ea49fe0\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Axis Label Shadow Color',\r\n                placeholder: 'Enter the shadow color for the axis label',\r\n\r\n                deepBind: ['axisLabel', 'shadowColor'],\r\n                id: \"68cf3e0f-7295-4187-aaf6-e1a88a3457b7\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Shadow Blur',\r\n                min: 0,\r\n                max: 100,\r\n                step: 1,\r\n                placeholder: 'Enter the shadow blur for the axis label',\r\n                deepBind: ['axisLabel', 'shadowBlur'],\r\n                id: \"ebd9e661-386f-44d9-acba-0c83f8595118\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Shadow Offset X',\r\n                min: -50,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the shadow offset X for the axis label',\r\n                deepBind: ['axisLabel', 'shadowOffsetX'],\r\n                id: \"a0de48f1-8f50-4f6d-9b5a-881cd4273f0b\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Shadow Offset Y',\r\n                min: -50,\r\n                max: 50,\r\n                step: 1,\r\n                placeholder: 'Enter the shadow offset Y for the axis label',\r\n                deepBind: ['axisLabel', 'shadowOffsetY'],\r\n                id: \"89dd5354-32d2-44df-a119-5fc03205bcc7\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Width',\r\n                min: 0,\r\n                max: 200,\r\n                step: 1,\r\n                placeholder: 'Enter the width for the axis label',\r\n                deepBind: ['axisLabel', 'width'],\r\n                id: \"e2b78d96-0a21-46c0-a4ee-1d56f3fa9092\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Height',\r\n                min: 0,\r\n                max: 200,\r\n                step: 1,\r\n                placeholder: 'Enter the height for the axis label',\r\n                deepBind: ['axisLabel', 'height'],\r\n                id: \"bc6caf5c-07ef-48c7-8404-88fbfffb69b5\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n\r\n                label: 'Axis Label Text Border Color',\r\n                placeholder: 'Enter the text border color for the axis label',\r\n                deepBind: ['axisLabel', 'textBorderColor'],\r\n                id: \"36425474-4183-4b48-9e8b-00625e2873b7\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Text Border Width',\r\n                min: 0,\r\n                max: 10,\r\n                step: 1,\r\n                placeholder: 'Enter the text border width for the axis label',\r\n                deepBind: ['axisLabel', 'textBorderWidth'],\r\n                id: \"9b6cd59e-d509-40e0-9b6d-a15bda347113\"\r\n            },\r\n            {\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Range,\r\n                label: 'Text Border Dash Offset',\r\n                min: 0,\r\n                max: 20,\r\n                step: 1,\r\n                placeholder: 'Enter the text border dash offset for the axis label',\r\n                deepBind: ['axisLabel', 'textBorderDashOffset'],\r\n                id: \"8d09538a-de23-4e77-9054-bdcf2d1ce640\"\r\n            }\r\n        ]\r\n    }\r\n]\r\nexport const Y_AXIS_CONFIG = (): Array<ElementEditorConfigSectionInterface> => {\r\n    return AXIS_CONFIG.map(section => {\r\n        if (section.id === \"caa6faba-5958-418a-a0e0-a22ca6341126\") {\r\n            const mainType :ElementEditorInnerSectionElementInterface= {\r\n                id: \"c2907192-3af3-40d7-bcbe-7c1ac49511e8\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Main Type',\r\n                deepBind: ['mainType'],\r\n                readonly: true,\r\n                defaultValue: 'yAxis',\r\n                required: true\r\n            }\r\n            return {\r\n                ...section,\r\n                elements: [\r\n                    mainType,\r\n                    ...section.elements\r\n                ]\r\n            }\r\n        }\r\n        return section\r\n    })\r\n\r\n}\r\n\r\nexport const X_AXIS_CONFIG = (): Array<ElementEditorConfigSectionInterface> => {\r\n    return AXIS_CONFIG.map(section => {\r\n        if (section.id === \"caa6faba-5958-418a-a0e0-a22ca6341126\") {\r\n            const mainType :ElementEditorInnerSectionElementInterface= {\r\n                id: \"23b8d666-d225-4152-911a-f99e22b9a651\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Main Type',\r\n\r\n                deepBind: ['mainType'],\r\n                readonly: true,\r\n                defaultValue: 'xAxis',\r\n                required: true\r\n            }\r\n            return {\r\n                ...section,\r\n                elements: [\r\n                    mainType,\r\n                    ...section.elements\r\n                ]\r\n            }\r\n        }\r\n        return section\r\n    })\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","export enum SeriesType {\r\n    Line = 'line',\r\n    Bar = 'bar',\r\n    Pie = 'pie',\r\n    Scatter = 'scatter',\r\n    Radar = 'radar',\r\n    Tree = 'tree',\r\n    Treemap = 'treemap',\r\n    Sunburst = 'sunburst',\r\n    Boxplot = 'boxplot',\r\n    Candlestick = 'candlestick',\r\n    Heatmap = 'heatmap',\r\n    Map = 'map',\r\n    Parallel = 'parallel',\r\n    Lines = 'lines',\r\n    Graph = 'graph',\r\n    Sankey = 'sankey',\r\n    Funnel = 'funnel',\r\n    Gauge = 'gauge',\r\n    PictorialBar = 'pictorialBar',\r\n    ThemeRiver = 'themeRiver',\r\n    Custom = 'custom'\r\n  }\r\n  ","import { ElementEditorConfigSectionInterface, ElementEditorTypes, SpecialElementKeys } from \"ngx-t-forms-types\";\r\nimport { SeriesType } from \"../services/eChartsConfigController/enums\";\r\n\r\nexport var SERIES_CONFIG: ElementEditorConfigSectionInterface[] = [\r\n    {\r\n        label: 'Basic series config',\r\n        id: \"0e26eb98-b3f3-4699-ace7-85dfe07d6755\",\r\n\r\n        elements: [\r\n            {\r\n                id: \"dc7c4b66-8549-48d8-b520-9e4b7cfd9df4\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.Input,\r\n                label: 'Series name',\r\n                placeholder: 'Enter series name',\r\n                deepBind: ['name']\r\n            },\r\n            {\r\n                id: \"a9fe1a02-7b04-46c4-8acc-9c6583638915\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Select Chart Type',\r\n                placeholder: 'Select series chart type',\r\n                deepBind: ['type'],\r\n\r\n                options: Object.values(SeriesType).map((v) =>\r\n                ({\r\n                    value: v,\r\n                    label: v\r\n                })\r\n                ),\r\n            }\r\n\r\n        ]\r\n    },\r\n    {\r\n        label: 'Axis mapping',\r\n        id: \"ce657f68-4470-44fd-a777-ddab7cbb1922\",\r\n        elements: [\r\n            {\r\n                id: \"79870b56-a410-47e1-827d-e51457bc4eb7\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Map data to series axis',\r\n                deepBind: ['datasetIndex']\r\n            },\r\n            {\r\n                id: \"a1d06f1f-b4d3-480c-a2f0-39fec3c8c545\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Select property to bind Y-axis ',\r\n                deepBind: ['encode', 'y']\r\n            },\r\n            {\r\n                id: \"fe716e92-e80b-4398-ba37-7aea364068ae\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Select property to bind X-axis ',\r\n                deepBind: ['encode', 'x']\r\n            },\r\n            {\r\n                id: \"0b38a111-1dfb-435e-8738-22766d1c3afe\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Select x axis',\r\n\r\n                placeholder: 'Enter x axis index',\r\n                deepBind: ['xAxisIndex']\r\n            },\r\n            {\r\n                id: \"000b6572-f016-452c-be55-5b89579db2a4\",\r\n                name: SpecialElementKeys.Default,\r\n                editType: ElementEditorTypes.ChipSelect,\r\n                label: 'Select y axis',\r\n                placeholder: 'Enter y axis index',\r\n\r\n                deepBind: ['yAxisIndex']\r\n            }\r\n\r\n        ]\r\n    }\r\n]","import { APIDataFetchingConfigurationInterface, DataSources, ElementEditorConfigSectionInterface, ElementEditorTypes, SpecialElementKeys } from 'ngx-t-forms-types';\r\nimport { ElementEditorConfig } from \"./ngx-t-matrix-table-config\";\r\nimport { X_AXIS_CONFIG, Y_AXIS_CONFIG } from \"./axisConfig\";\r\nimport { SERIES_CONFIG } from \"./SeriesConfig\";\r\nimport { LocalReportDataSource } from '../components/report-dashboard/store/report-dashboard-actions';\r\nimport { DashboardChart } from '../../types/DashboardChart';\r\nimport { XAXisOption, YAXisOption } from 'echarts/types/dist/shared';\r\n\r\n\r\n\r\nexport enum DashboardConfigTypes {\r\n    DataSourcesConfig = 'DataSourcesConfig',\r\n    ReportInputsConfig = 'ReportInputsConfig',\r\n    SheetConfig = 'SheetConfig',\r\n    AddChart = 'AddChart',\r\n}\r\nexport const DataSourcesConfig:ElementEditorConfig  = {\r\n    label: \"Data Source Configuration\",\r\n    subTitle: \"Connect and manage data sources for your report. Select from REST APIs or create MongoDB aggregation pipelines.\",\r\n    saveButtonLabel: \"Apply Data Source Settings\",\r\n    editorSections: [\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}\r\nexport const ReportInputsConfig:ElementEditorConfig  = {\r\n    label: \"Report Inputs Configuration\",\r\n    subTitle: \"Define and manage inputs for your report to enable dynamic data filtering and customization.\",\r\n    saveButtonLabel: \"Apply Report Input Settings\",\r\n    editorSections: [\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\nexport const DashSheetConfig: 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: \"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 var ChartEditorSectionsConfig: ElementEditorConfig = {\r\n    label: 'Chart Configuration',\r\n    subTitle: '',\r\n    saveButtonLabel: 'Apply Chart Settings',\r\n    editorSections: [\r\n        {\r\n            label: 'Basic series config',\r\n\r\n            elements: [\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Toggle,\r\n                    label: 'show title',\r\n                    placeholder: '',\r\n                    deepBind: ['title', 'show'],\r\n                    defaultValue: true,\r\n                    id: \"35827cff-a0bf-442b-bb62-204261b0866c\"\r\n                },\r\n                {\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Range,\r\n                    max: 12,\r\n                    min: 4,\r\n                    step: 1,\r\n                    defaultValue: 6,\r\n                    label: 'Columns (width)',\r\n                    placeholder: '',\r\n                    deepBind: ['col'],\r\n                    id: \"5475f6bd-1751-4a31-b026-d12f19f1a0f6\"\r\n                },\r\n                {\r\n                    id: \"c1e2c63f-ab6f-472d-8d11-1f21fdb01a91\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Input,\r\n                    label: 'Chart title',\r\n                    placeholder: 'Enter chart title',\r\n                    deepBind: ['title', 'text'],\r\n                    additionalTest: [\r\n                        {\r\n                            testType: 'equalTo',\r\n                            valueMatch: true,\r\n                            deepBind: ['title', 'show'],\r\n                        },\r\n                    ],\r\n                },\r\n                {\r\n                    id: \"ab9b9927-f9a6-4f4a-bfb5-e41ec1b7a887\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Input,\r\n                    label: 'Title subtext',\r\n                    placeholder: 'Enter chart subtext',\r\n                    deepBind: ['title', 'subtext'],\r\n                    additionalTest: [\r\n                        {\r\n                            testType: 'equalTo',\r\n                            valueMatch: true,\r\n                            deepBind: ['title', 'show'],\r\n                        },\r\n                    ],\r\n                },\r\n                {\r\n                    id: \"60492ac9-1356-4726-a30b-3494077e513b\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.ChipSelect,\r\n                    label: 'Title alignment',\r\n                    deepBind: ['title', 'textAlign'],\r\n                    additionalTest: [\r\n                        {\r\n                            testType: 'equalTo',\r\n                            valueMatch: true,\r\n                            deepBind: ['title', 'show'],\r\n                        },\r\n                    ],\r\n                    defaultValue: 'center',\r\n                    options: [\r\n                        {\r\n                            label: 'left',\r\n                            value: 'left'\r\n                        },\r\n                        {\r\n                            label: 'center',\r\n                            value: 'center'\r\n                        },\r\n                        {\r\n                            label: 'right',\r\n                            value: 'right'\r\n                        }\r\n                    ]\r\n                },\r\n            ],\r\n            id: \"6eca7bb8-d6fc-4868-8cd9-42eb0a14c5f1\"\r\n        },\r\n        {\r\n            label: 'Chart X axis',\r\n            id: \"cf974365-fa86-4d48-90e4-0e7cd0522762\",\r\n            elements: [\r\n                {\r\n                    id: \"a37bd0ea-ff0a-46a0-aa62-cfeb00cab819\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.RecordListManager,\r\n                    secondaryElementEditorConfig: X_AXIS_CONFIG(),\r\n                    options: [\r\n                        {\r\n                            label: 'Axis Name',\r\n                            value: \"name\"\r\n                        },\r\n                        {\r\n                            label: 'Axis Type',\r\n                            value: \"type\"\r\n                        },\r\n\r\n                    ],\r\n                    deepBind: ['xAxis'],\r\n                    label: 'Configure Chart xAxis',\r\n                    hint: 'Add, edit, or remove xAxis configurations for your chart. Ensure each xAxis has a unique name and appropriate type (e.g., category, value).'\r\n\r\n                }\r\n            ]\r\n        },\r\n        {\r\n            label: 'Chart Y axis',\r\n            id: \"c4c5c020-cc7b-4ac2-a76d-198500467ac7\",\r\n            elements: [\r\n                {\r\n                    id: \"38be8a26-ed29-426a-aeea-c37dfdbd4116\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.RecordListManager,\r\n                    secondaryElementEditorConfig: Y_AXIS_CONFIG(),\r\n                    options: [\r\n                        {\r\n                            label: 'Axis Name',\r\n                            value: \"name\"\r\n                        },\r\n                        {\r\n                            label: 'Axis Type',\r\n                            value: \"type\"\r\n                        },\r\n\r\n                    ],\r\n                    deepBind: ['yAxis'],\r\n                    label: 'Configure Chart yAxis',\r\n                    hint: 'Add, edit, or remove yAxis configurations for your chart. Ensure each yAxis has a unique name and appropriate type (e.g., category, value).'\r\n\r\n                }\r\n            ]\r\n        },\r\n\r\n        {\r\n            label: 'Chart series',\r\n            id: \"7c9384eb-4c74-450a-bc83-bd4bf7a06323\",\r\n            elements: [\r\n                {\r\n\r\n                    name: SpecialElementKeys.Default,\r\n                    deepBind: ['series'],\r\n                    editType: ElementEditorTypes.RecordListManager,\r\n                    hint: 'Add, edit, or remove series configurations for your chart. Ensure each series has a unique name and appropriate encoding to map data correctly.',\r\n                    secondaryElementEditorConfig: SERIES_CONFIG,\r\n                    options: [\r\n                        {\r\n                            label: 'Axis Name',\r\n                            value: \"name\"\r\n                        },\r\n                        {\r\n                            label: 'Chart Type',\r\n                            value: \"type\"\r\n                        },\r\n\r\n                    ],\r\n                    id: \"81710d9e-6607-4310-b48f-136f869e1ecb\",\r\n                \r\n                    label: 'Configure Chart series',\r\n                }\r\n            ]\r\n        },\r\n        {\r\n            label: 'Chart legends',\r\n            id: \"199a9328-4cb9-4fa2-a749-59697092f3e9\",\r\n            elements: [\r\n                {\r\n                    id: \"227abef9-c736-481d-a40b-a83026e8735d\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Toggle,\r\n                    label: 'show legends',\r\n                    defaultValue: true,\r\n                    hint: \"Toggle to display or hide the chart legend, which provides context for the data series presented.\",\r\n                    deepBind: ['legend', 'show']\r\n                },\r\n                {\r\n                    id: \"6980e7e4-41c3-4afe-93fa-45dc3acfd44e\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.ChipSelect,\r\n                    label: 'Align legends',\r\n                    placeholder: 'Select legend alignment',\r\n                    deepBind: ['legend', 'align'],\r\n                    defaultValue: 'auto',\r\n                    additionalTest: [\r\n                        {\r\n                            testType: 'equalTo',\r\n                            valueMatch: true,\r\n                            deepBind: ['legend', 'show'],\r\n                        },\r\n                    ],\r\n                    options: [\r\n                        {\r\n                            value: 'auto',\r\n                            label: 'auto'\r\n                        },\r\n                        {\r\n                            value: 'left',\r\n                            label: 'left'\r\n                        },\r\n                        {\r\n                            value: 'right',\r\n                            label: 'right'\r\n                        },\r\n                    ]\r\n                },\r\n                {\r\n                    id: \"96e6d25a-d1f8-43dd-b762-a998a8685536\",\r\n                    name: SpecialElementKeys.Default,\r\n                    editType: ElementEditorTypes.Input,\r\n                    format: (value: any) => Number(value),\r\n                    label: 'Legends padding',\r\n                    placeholder: 'enter legend padding',\r\n                    deepBind: ['legend', 'padding'],\r\n                    additionalTest: [\r\n                        {\r\n                            testType: 'equalTo',\r\n                            valueMatch: true,\r\n                            deepBind: ['legend', 'show'],\r\n                        },\r\n                    ],\r\n\r\n                }\r\n\r\n            ]\r\n        }\r\n\r\n    ]\r\n}\r\nexport function returnChartEditorConfig(dataSources: LocalReportDataSource[],chart: DashboardChart | undefined):ElementEditorConfig | undefined | null{\r\n    try {\r\n        return{\r\n            ...ChartEditorSectionsConfig,\r\n            editorSections: ChartEditorSectionsConfig.editorSections.map(section =>({\r\n                ...section,\r\n                elements: section.elements.map(ele =>{\r\n                    if(ele.id === \"81710d9e-6607-4310-b48f-136f869e1ecb\"){\r\n                        return {\r\n                            ...ele,\r\n                              secondaryElementEditorConfig: getSERIES_CONFIG(dataSources,chart),\r\n\r\n                        }\r\n                    }\r\n                    return ele;\r\n                })\r\n            })\r\n            )\r\n        }\r\n        \r\n    } catch (error) {\r\n        const msg = error instanceof Error ? error.message : \"Unexpected error in returnChartEditorConfig\";\r\n        console.error(msg);\r\n        return undefined;\r\n    }\r\n}\r\nfunction getDataSourceName(ds:LocalReportDataSource){\r\n    if(ds.source === DataSources.Api){\r\n        return (ds.config as APIDataFetchingConfigurationInterface ).name;\r\n    }\r\n    if(ds.source === DataSources.MongoDb){\r\n        return (ds.config as any ).name;\r\n    }\r\n    return 'Unknown Source';\r\n\r\n}\r\nexport function getSERIES_CONFIG(dataSources: LocalReportDataSource[],chartInEdit: DashboardChart | undefined) : ElementEditorConfigSectionInterface[] {\r\n   const allDataPropertiesOptions = [\r\n  ...new Set(dataSources.flatMap(ds => ds.data).flatMap(obj => Object.keys(obj)))\r\n].map(key => ({ label: `${key} 🏷️`, value: key }));\r\nconst xAxisOp = (chartInEdit?.xAxis as XAXisOption[] || []).map((x,index)=>({label:`${x.name} `,value: index}))\r\nconst yAxisOp = (chartInEdit?.yAxis as YAXisOption [] || []).map((x,index)=>({label:`${x.name} `,value: index}))\r\n\r\nreturn SERIES_CONFIG.map(section => ({\r\n        ...section,\r\n        elements: section.elements.map(ele => {\r\n                \r\n                if(ele.id ===\"79870b56-a410-47e1-827d-e51457bc4eb7\"){\r\n                    return {\r\n                        ...ele,\r\n                        options: dataSources.map((ds,index) => ({\r\n                            label: `${getDataSourceName(ds)} 💾`,\r\n                            value: index\r\n                        }))\r\n                    }\r\n                }\r\n                if(ele.id ===\"a1d06f1f-b4d3-480c-a2f0-39fec3c8c545\" || ele.id === \"fe716e92-e80b-4398-ba37-7aea364068ae\"){\r\n\r\n                   return {\r\n                    ...ele,\r\n                    options:allDataPropertiesOptions\r\n                   }\r\n                }\r\n                if(ele.id === \"0b38a111-1dfb-435e-8738-22766d1c3afe\"){\r\n                    return {\r\n                        ...ele,\r\n                        options:xAxisOp\r\n                    }\r\n                }\r\n                   if(ele.id === \"000b6572-f016-452c-be55-5b89579db2a4\"){\r\n                    return {\r\n                        ...ele,\r\n                        options:yAxisOp\r\n                    }\r\n                }\r\n            return ele;\r\n        })\r\n    }))\r\n}\r\nexport const REPORT_DASHBOARD_SIDE_MENU_OPTIONS = [\r\n    {\r\n        title: \"Add Chart\",\r\n        subTitle: \"Add and customize charts to visualize your data effectively\",\r\n        config: DashboardConfigTypes.AddChart,\r\n        icon: 'add_circle',\r\n        color: 'var(--mat-sys-primary)'\r\n    },\r\n    {\r\n        title: \"Data Sources\",\r\n        subTitle: \"Connect and manage data sources \",\r\n        config: DashboardConfigTypes.DataSourcesConfig,\r\n        icon: 'storage',\r\n        color: ''\r\n    },\r\n    {\r\n        title: \"Report Inputs\",\r\n        subTitle: \"Define and manage inputs for your report\",\r\n        config: DashboardConfigTypes.ReportInputsConfig,\r\n        icon: 'input',\r\n        color: ''\r\n    },\r\n  \r\n\r\n]\r\n","import { ElementTypes, FormColumnInputs, IBasicFormInput, InputDataTypes, InputTypes } from \"ngx-t-forms-types\";\n\nconst REPORT_START_DATE_PICKER: IBasicFormInput = {\n    \"id\": \"491523bc-4170-476c-95c9-0a4041e073e2\",\n    \"formControlName\": \"startDate\",\n    \"sectionId\": \"9bb19b6a-829c-49fb-8cd9-9df753140d92\",\n    \"label\": \"Start date\",\n    \"element\": ElementTypes.DatePicker,\n    \"dataType\": InputDataTypes.Date,\n    \"type\": InputTypes.Date,\n    \"appearance\": \"outline\",\n    \"isCalculatedField\": false,\n    \"required\": true,\n    \"onlySetTempErrorOnTouch\": false,\n    \"colSize\": 6,\n    \"validators\": [],\n}\n\nconst REPORT_END_DATE_PICKER: IBasicFormInput = {\n    \"id\": \"7cb8045d-e7a5-421e-bf1d-416da7b4b946\",\n    \"formControlName\": \"endDate\",\n    \"sectionId\": \"9bb19b6a-829c-49fb-8cd9-9df753140d92\",\n    \"label\": \"End date\",\n    \"element\": ElementTypes.DatePicker,\n    \"dataType\": InputDataTypes.Date,\n    \"type\": InputTypes.Date,\n    \"appearance\": \"outline\",\n    \"isCalculatedField\": false,\n    \"required\": true,\n    \"onlySetTempErrorOnTouch\": false,\n    \"colSize\": 6,\n    \"validators\": [],\n}\n\nexport const REPORT_SHEET_INPUTS: FormColumnInputs[] = [\n    REPORT_START_DATE_PICKER as FormColumnInputs,\n    REPORT_END_DATE_PICKER as FormColumnInputs,\n]\n","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');","// TODO(unify): see ngx-t-forms/docs/migration/element-editor-unification.md\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { ElementEditorConfigSectionInterface, ElementEditorInnerSectionElementInterface, FormColumnInputs } from 'ngx-t-forms-types';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { assignDeepPropertyToObject, TDynamicDataEditComponent } from 'ngx-t-forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { _isEqual } from '../../shared/functions/isEqual';\n@Component({\n  selector: 'lib-element-editor',\n  standalone: true,\n  imports: [\n    MatCardModule,\n    MatProgressSpinnerModule,\n    MatExpansionModule,\n    TDynamicDataEditComponent,\n    MatIconModule,\n    MatButtonModule\n  ],\n  templateUrl: './element-editor.component.html',\n  styleUrl: './element-editor.component.css'\n})\nexport class ElementEditorComponent {\n\n  private _inEdit: any = {}\n  @Input() set inEdit(value: any) {\n    if (value) {\n      this._inEdit = { ...value }\n    } else {\n      this._inEdit = {}\n    }\n  }\n  get inEdit() {\n    return this._inEdit\n  }\n  @Input() label: string = ''\n  @Input() subTitle: string = ''\n  @Input() editorSections: ElementEditorConfigSectionInterface[] = []\n  @Input() formInputs: FormColumnInputs[] = []\n  @Input() saveButtonLabel: string = \"Save \"\n  @Input() autoSave: boolean = false\n  @Output() closeEditor = new EventEmitter<void>()\n  @Output() saveElement = new EventEmitter<any>()\n  @Output() clearElement = new EventEmitter<void>()\n  newValue: any = null\n  elementConfigurationChanged = (value: any, ele: ElementEditorInnerSectionElementInterface) => {\n\n    const newValue = JSON.parse(JSON.stringify(this.inEdit || {}));\n    const formatted = typeof ele?.format === 'function' ? ele.format(value) : value;\n    assignDeepPropertyToObject(\n      newValue,\n      ele.deepBind,\n      formatted\n    );\n    this.newValue = {\n      ...newValue\n    }\n\n    if (this.autoSave) {\n      this.saveElement.emit(this.newValue)\n    } else {\n      this.inEdit = {\n        ...this.inEdit,\n        ...this.newValue\n      }\n    }\n  }\n\n  get saveIsDisabled() {\n\n    if (!this.newValue) return true\n    if (this.editorSections.length === 0) return true\n\n    return Boolean(_isEqual(this.newValue, this.inEdit))\n  }\n  elementBlur = (event: any, element: ElementEditorInnerSectionElementInterface) => {\n\n  }\n  save() {\n    this.saveElement.emit(this.newValue)\n    this.newValue = null\n\n  }\n  close() {\n    this.closeEditor.emit()\n  }\n  clearInputInEdit() {\n    this.clearElement.emit()\n  }\n}\n","<mat-card class=\"element-editor\" appearance=\"outlined\">\n    @if((!!label && label !== '') || (!!subTitle && subTitle !== '')) {\n    <header class=\"ee-header\">\n        <div class=\"ee-header-icon\" aria-hidden=\"true\">\n            <mat-icon>tune</mat-icon>\n        </div>\n        <div class=\"ee-header-text\">\n            @if(!!label && label !== '') {\n            <h2 class=\"ee-title\">{{ label }}</h2>\n            }\n            @if(!!subTitle && subTitle !== '') {\n            <p class=\"ee-subtitle\">{{ subTitle }}</p>\n            }\n        </div>\n    </header>\n    }\n\n    <div class=\"ee-section-bar\">\n        <span class=\"ee-section-eyebrow\">Element configuration</span>\n        <span class=\"spacer\"></span>\n        @if((editorSections || []).length) {\n        <span class=\"ee-section-count\">{{ (editorSections || []).length }} sections</span>\n        }\n    </div>\n\n    <div class=\"ee-content\">\n        @defer (on viewport) {\n        <mat-accordion class=\"ee-accordion\" togglePosition=\"before\" multi>\n            @for(section of (editorSections || []); track section.id) {\n            <mat-expansion-panel class=\"ee-panel\">\n                <mat-expansion-panel-header class=\"ee-panel-header\" collapsedHeight=\"48px\" expandedHeight=\"48px\">\n                    <mat-panel-title class=\"ee-panel-title\">\n                        <span class=\"ee-panel-label\">{{ section.label }}</span>\n                        <span class=\"spacer\"></span>\n                        @if(section.showItemValue && !!(inEdit)) {\n                        <span class=\"ee-item-value\">{{ inEdit[section.showItemValue] }}</span>\n                        }\n                    </mat-panel-title>\n                </mat-expansion-panel-header>\n\n                <div class=\"ee-panel-body\">\n                    <!-- Section elements -->\n                    @for(element of section.elements; track element.id) {\n                    <div class=\"ee-element\">\n                        @defer (on viewport) {\n                        <lib-t-dynamic-data-edit [editorConfig]=\"element\" [data]=\"inEdit\"\n                            [validationErrors]=\"element.computedErrors ?? null\"\n                            (valueChange)=\"elementConfigurationChanged($event, element)\" [formInputs]=\"formInputs\"\n                            (blur)=\"elementBlur($event, element)\">\n                        </lib-t-dynamic-data-edit>\n                        } @placeholder {\n                        <div class=\"ee-element-loading\">\n                            <mat-spinner diameter=\"18\"></mat-spinner>\n                        </div>\n                        }\n                    </div>\n                    }\n                </div>\n            </mat-expansion-panel>\n            }\n        </mat-accordion>\n        } @placeholder {\n        <div class=\"ee-loading\">\n            <mat-spinner diameter=\"44\" />\n        </div>\n        } @error {\n        <div class=\"ee-error\">\n            <mat-icon class=\"ee-error-icon\" aria-hidden=\"false\">error_outline</mat-icon>\n            <h3 class=\"ee-error-title\">Error loading element editor</h3>\n            <p class=\"ee-error-text\">An error occurred while loading the element editor. Please try again later.</p>\n        </div>\n        }\n    </div>\n\n    <!-- Consumer-projected content (e.g. report-dashboard side panel extras). -->\n    <ng-content></ng-content>\n\n    <footer class=\"ee-actions\">\n        @if(autoSave) {\n        <span class=\"spacer\"></span>\n        }\n        <button (click)=\"close()\" mat-button class=\"ee-close\">Close</button>\n        @if(!autoSave) {\n        <span class=\"spacer\"></span>\n        <button mat-flat-button (click)=\"save()\" color=\"primary\" class=\"ee-save\">{{ saveButtonLabel }}</button>\n        }\n    </footer>\n</mat-card>\n<br>\n","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: \"dateRange\",\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]\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, EMPTY, Observable, take, tap, Subscription, combineLatest, distinctUntilChanged, map, shareReplay } from 'rxjs';\r\nimport { APIDataFetchingConfigurationInterface, DataSources, ElementEditorInnerSectionElementInterface, InClassFormUtilsInterface, IUserSignature, MinInputTypes, MongoDbPipeLineConfigInterface, NgxTFormsConfig } from 'ngx-t-forms-types';\r\n\r\n\r\nimport { CommonModule } from '@angular/common';\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 { REPORT_SHEET_INPUTS } from '../../config/Report-inputs';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatDateFormats } from '@angular/material/core';\r\nimport { TimeZoneAdapterService } from '../../services';\r\nimport moment, { 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// Stable references for empty fallbacks. Returning a fresh `[]`/`{}` from a\r\n// template-bound getter on every change-detection pass keeps child views dirty\r\n// and can trigger NG0103 (infinite change detection) under zoneless CD.\r\nconst EMPTY_LIST_CONFIG: any[] = []\r\nconst EMPTY_GROUP_OPTIONS: Record<string, any> = {}\r\n\r\nexport type DatePresetKey = '7d' | '1m' | '3m' | '1y' | 'FY'\r\n@Component({\r\n  selector: 'app-report-sheet',\r\n  standalone: true,\r\n  imports: [CommonModule, MatIconModule, NgxTMatrixTableComponent,\r\n    MatTooltipModule,\r\n    MatDatepickerModule, FormsModule, ReactiveFormsModule,\r\n    MatProgressSpinnerModule,\r\n    ElementEditorComponent,\r\n    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<NgxTFormsConfig>(NGX_T_FORMS_CONFIG_TOKEN as any)\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.showDateControls = this.resolveDateRangeBinding()\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\r\n    // A retry starts from a clean slate, otherwise the error panel would stay up\r\n    // over the spinner for the whole request.\r\n    this.error$.next(undefined);\r\n\r\n    if (!dataSource) {\r\n      this.failLoad(\"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\r\n/**\r\n * A failed load discards whatever the last successful one returned. Leaving the\r\n * rows up next to an error implies they still answer the current filters, which\r\n * they do not — the date range or pipeline that produced them is gone.\r\n */\r\nprivate failLoad(message: string) {\r\n  this.dataList$.next([])\r\n  this.error$.next(message || 'Unknown error')\r\n  this.loading$.next(false)\r\n}\r\n\r\n/** Pulls a human-readable message off an HttpErrorResponse, Error, or anything else. */\r\nprivate toErrorMessage(error: any): string {\r\n  return error?.error?.message\r\n    || error?.message\r\n    || (typeof error?.error === 'string' ? error.error : '')\r\n    || 'Unknown error'\r\n}\r\n  loadMongoData(config: MongoDbPipeLineConfigInterface) {\r\n    if (!config.pipeline || config.pipeline.length === 0) {\r\n      this.failLoad(\"No pipeline found\")\r\n      return\r\n    }\r\n    if (!config.workflowId) {\r\n      this.failLoad(\"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` must return a stream. This used to `return error`, which\r\n      // made RxJS throw a second, unrelated error over the first one.\r\n      catchError((error) => {\r\n        console.error(\"Error\", error)\r\n        this.failLoad(this.toErrorMessage(error))\r\n        return EMPTY\r\n      })\r\n\r\n    ).subscribe()\r\n\r\n  }\r\n  loadApiData(config: APIDataFetchingConfigurationInterface) {\r\n    const missingInputs: string[] = []\r\n\r\n    // `minimumInputRequired` is optional — a template-mode fetch carries no mapping.\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.failLoad(`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      // Was `error.error.message`, which itself threw a TypeError whenever the\r\n      // failure had no HTTP body — a network drop, a timeout, a CORS refusal.\r\n      catchError((error) => {\r\n        console.error(\"Error\", error)\r\n        this.failLoad(this.toErrorMessage(error))\r\n        return EMPTY\r\n      })\r\n    ).subscribe()\r\n  }\r\n  get listConfig() {\r\n    return this.config?.listConfig || EMPTY_LIST_CONFIG\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 || EMPTY_GROUP_OPTIONS\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    this._configActiveConfig = this.buildActiveConfig()\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      this._configActiveConfig = null\r\n    }\r\n  }\r\n  private _configActiveConfig: ElementEditorConfig | null = null\r\n  private buildActiveConfig(): 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(\r\n          section.elements, {} as any,\r\n          this.NGX_T_FORMS_CONFIG, this.formsUtils, []) as ElementEditorInnerSectionElementInterface[]\r\n        return {\r\n          ...section,\r\n          elements: [...elements],\r\n        }\r\n      })\r\n    }\r\n  }\r\n  get configActiveConfig(): ElementEditorConfig | null {\r\n    return this._configActiveConfig\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    this._configActiveConfig = 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    this._configActiveConfig = 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    // Keep the newest integration values to hand so click handlers can read them\r\n    // synchronously instead of racing a fresh subscription.\r\n    this.subscription.add(\r\n      this.externalDataIntegration$.pipe(\r\n        tap((dataIntegration) => this.dataIntegrationCache$.next(dataIntegration ?? {}))\r\n      ).subscribe()\r\n    )\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          // Seeding only. Once the user has chosen a preset or a date this feed\r\n          // must not reach in and reset the range — it used to be able to flip a\r\n          // freshly-picked range back to FY behind the user's back.\r\n          if (this.userAdjustedRange) return\r\n\r\n          if (data.financialCycleStart && data.financialCycleEnd) {\r\n            this.range.patchValue({ startDate: data.financialCycleStart, endDate: data.financialCycleEnd })\r\n            this.activePreset = 'FY'\r\n          } else {\r\n            if (data.minDate) {\r\n              this.range.patchValue({ startDate: data.minDate })\r\n              this.activePreset = null\r\n            }\r\n            if (data.maxDate) {\r\n              this.range.patchValue({ endDate: data.maxDate })\r\n              this.activePreset = null\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    return Object.freeze({\r\n      ...configCopy,\r\n      ALL_POSSIBLE_FIELDS: [...new Set(dataList.map((i) => Object.keys(i)).flat())],\r\n      currentFinancialCycleEndDate: dataIntegration['currentFinancialCycleEndDate'] as Moment,\r\n      currentFinancialCycleStartDate: dataIntegration['currentFinancialCycleStartDate'] as Moment,\r\n      currentSprintStartDate: dataIntegration['currentSprintStartDate'] as Moment,\r\n      currentSprintEndDate: dataIntegration['currentSprintEndDate'],\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  /**\r\n   * A field, not a getter. As a getter this handed every `| async` in the\r\n   * template a brand-new observable on each change-detection pass, so the four\r\n   * bindings tore down and rebuilt their `combineLatest` chains continuously.\r\n   * `shareReplay` then lets those bindings and `ngOnInit` share one chain.\r\n   */\r\n  minMaxDateAndComp$ = 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          const financialCycleStart = dataIntegration['currentFinancialCycleStartDate']\r\n            ? moment(dataIntegration['currentFinancialCycleStartDate'])\r\n            : null;\r\n          const financialCycleEnd = dataIntegration['currentFinancialCycleEndDate']\r\n            ? moment(dataIntegration['currentFinancialCycleEndDate'])\r\n            : null;\r\n\r\n          return {\r\n            minDate,\r\n            maxDate,\r\n            compStartDate,\r\n            compEndDate,\r\n            financialCycleStart,\r\n            financialCycleEnd\r\n          };\r\n        }\r\n      ),\r\n      shareReplay({ bufferSize: 1, refCount: true })\r\n    );\r\n\r\n  dateChanged: null | Record<string, any> = null\r\n  activePreset: DatePresetKey | null = '1y'\r\n\r\n  /**\r\n   * The range controls are only shown when the request actually carries the\r\n   * range. `loadApiData` maps `minimumInputRequired` entries of type `mapto`\r\n   * onto `range.value[name]`, so unless something is bound to `startDate` or\r\n   * `endDate` the picker and presets change nothing — a Mongo pipeline source\r\n   * never receives them at all.\r\n   */\r\n  showDateControls = false\r\n\r\n  private resolveDateRangeBinding(): boolean {\r\n    const dataSource = this._config?.dataSources?.at(0)\r\n    if (!dataSource || dataSource.source !== DataSources.Api) return false\r\n\r\n    const inputs = (dataSource.config as APIDataFetchingConfigurationInterface)\r\n      ?.backEndConfig?.minimumInputRequired ?? []\r\n\r\n    return inputs.some(input =>\r\n      input?.type === MinInputTypes.MapTo &&\r\n      (input.name === 'startDate' || input.name === 'endDate'))\r\n  }\r\n\r\n  /**\r\n   * Latest value seen from the host's integration feed.\r\n   *\r\n   * The FY preset used to `take(1)` a fresh subscription at click time. That only\r\n   * works if the host's `dataIntegration()` observable replays its last value —\r\n   * against a plain Subject the subscription waits for the *next* emission, which\r\n   * may never come, so the click resolved nothing. Every other preset is computed\r\n   * from `moment()` and so was unaffected, which is why FY alone appeared dead.\r\n   */\r\n  private dataIntegrationCache$ = new BehaviorSubject<Record<string, any>>({})\r\n\r\n  /**\r\n   * The financial-year preset reads two fixed keys off that feed. Hosts that do\r\n   * not publish a financial cycle get no FY button, rather than a button that\r\n   * lights up and does nothing.\r\n   */\r\n  financialYearAvailable$ = this.dataIntegrationCache$.pipe(\r\n    map(dataIntegration =>\r\n      !!dataIntegration['currentFinancialCycleStartDate'] &&\r\n      !!dataIntegration['currentFinancialCycleEndDate'])\r\n  )\r\n\r\n  /**\r\n   * Set once the user picks a preset or a date. The integration feed seeds the\r\n   * initial range on load, but must not keep overwriting a choice made since.\r\n   */\r\n  private userAdjustedRange = false\r\n\r\n  /**\r\n   * Abbreviated in the segmented control so the whole range picker fits on one\r\n   * compact row; the tooltip carries the full wording.\r\n   */\r\n  readonly datePresets: { key: DatePresetKey; label: string; tooltip: string }[] = [\r\n    { key: '7d', label: '7D', tooltip: 'Last 7 days' },\r\n    { key: '1m', label: '1M', tooltip: 'Last 1 month' },\r\n    { key: '3m', label: '3M', tooltip: 'Last 3 months' },\r\n    { key: '1y', label: '1Y', tooltip: 'Last 1 year' },\r\n    { key: 'FY', label: 'FY', tooltip: 'Current financial year' },\r\n  ]\r\n\r\n  get dateRangeFormatted(): string {\r\n    const start = this.range.value.startDate\r\n    const end = this.range.value.endDate\r\n    if (!start || !end) return 'Select dates'\r\n    return `${moment(start).format('DD MMM YYYY')} – ${moment(end).format('DD MMM YYYY')}`\r\n  }\r\n\r\n  dateRangeChanged(event: any, control: string) {\r\n    const value = event.value\r\n    this.activePreset = null\r\n    this.userAdjustedRange = true\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  applyDatePreset(preset: DatePresetKey) {\r\n    this.userAdjustedRange = true\r\n\r\n    if (preset === 'FY') {\r\n      const dataIntegration = this.dataIntegrationCache$.value\r\n      const start = dataIntegration['currentFinancialCycleStartDate']\r\n        ? moment(dataIntegration['currentFinancialCycleStartDate'])\r\n        : null\r\n      const end = dataIntegration['currentFinancialCycleEndDate']\r\n        ? moment(dataIntegration['currentFinancialCycleEndDate'])\r\n        : null\r\n\r\n      // Previously this fell through silently: `activePreset` had already been\r\n      // set at the top of the method, so the button lit up while the range and\r\n      // the data never changed. Say what went wrong instead.\r\n      if (!start || !end) {\r\n        this.failLoad('No financial year is published by this workspace, so the FY range cannot be resolved.')\r\n        return\r\n      }\r\n\r\n      this.activePreset = 'FY'\r\n      this.range.patchValue({ startDate: start, endDate: end })\r\n      this.loadData()\r\n      return\r\n    }\r\n\r\n    this.activePreset = preset\r\n    const end = moment()\r\n    let start: moment.Moment\r\n    switch (preset) {\r\n      case '7d': start = moment().subtract(7, 'days'); break\r\n      case '1m': start = moment().subtract(1, 'month'); break\r\n      case '3m': start = moment().subtract(3, 'months'); break\r\n      case '1y': start = moment().subtract(1, 'year'); break\r\n      default: return\r\n    }\r\n    this.range.patchValue({ startDate: start, endDate: end })\r\n    this.loadData()\r\n  }\r\n\r\n}\r\n","<div class=\"report-sheet-container\">\r\n    <div class=\"report-sheet-content\">\r\n\r\n        <div class=\"report-sheet-toolbar\">\r\n            <!-- Range controls appear only when the request is actually bound to\r\n                 startDate/endDate; otherwise they would change nothing. -->\r\n            @if (showDateControls) {\r\n            <div class=\"report-sheet-segmented\" role=\"group\" aria-label=\"Date range presets\">\r\n                @for (preset of datePresets; track preset.key) {\r\n                @if (preset.key !== 'FY' || (financialYearAvailable$|async)) {\r\n                <button type=\"button\" class=\"report-sheet-segment\" [matTooltip]=\"preset.tooltip\"\r\n                    [class.is-active]=\"activePreset === preset.key\" [attr.aria-pressed]=\"activePreset === preset.key\"\r\n                    (click)=\"applyDatePreset(preset.key)\">{{ preset.label }}</button>\r\n                }\r\n                }\r\n            </div>\r\n            }\r\n\r\n            <div class=\"report-sheet-toolbar-spacer\"></div>\r\n\r\n            <!-- The toggle, the off-screen range input and the picker share one\r\n                 block: `#picker` is scoped to the @if that declares it. -->\r\n            @if (showDateControls) {\r\n            <div class=\"report-sheet-date-display\">\r\n                <mat-datepicker-toggle [for]=\"picker\" matTooltip=\"Choose a custom range\"></mat-datepicker-toggle>\r\n                <span class=\"report-sheet-date-text\">{{ dateRangeFormatted }}</span>\r\n            </div>\r\n\r\n            <div class=\"report-sheet-toolbar-hidden\">\r\n                <div class=\"report-sheet-date-hidden\">\r\n                    <mat-date-range-input [min]=\"(minMaxDateAndComp$|async)?.minDate\"\r\n                        [max]=\"(minMaxDateAndComp$|async)?.maxDate\" [formGroup]=\"range\" [rangePicker]=\"picker\"\r\n                        [comparisonStart]=\"(minMaxDateAndComp$|async)?.compStartDate\"\r\n                        [comparisonEnd]=\"(minMaxDateAndComp$|async)?.compEndDate\">\r\n                        <input matStartDate (dateChange)=\"dateRangeChanged($event, 'startDate')\"\r\n                            formControlName=\"startDate\">\r\n                        <input (dateChange)=\"dateRangeChanged($event, 'endDate')\" matEndDate formControlName=\"endDate\">\r\n                    </mat-date-range-input>\r\n                </div>\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\" class=\"report-sheet-date-picker-apply\"\r\n                            matDateRangePickerApply>Apply</button>\r\n                    </mat-date-range-picker-actions>\r\n                </mat-date-range-picker>\r\n            </div>\r\n            }\r\n\r\n            <button mat-icon-button class=\"report-sheet-icon-btn\" (click)=\"loadData()\" matTooltip=\"Refresh data\"\r\n                [matTooltipPosition]=\"'before'\" aria-label=\"Refresh data\">\r\n                <mat-icon>refresh</mat-icon>\r\n            </button>\r\n        </div>\r\n\r\n        @if(loading$|async){\r\n        <div class=\"report-sheet-loading\">\r\n            <div class=\"report-sheet-loading-content\">\r\n                <mat-spinner diameter=\"40\" mode=\"indeterminate\"></mat-spinner>\r\n                <div class=\"report-sheet-loading-text\">Loading Report...</div>\r\n            </div>\r\n        </div>\r\n        }\r\n        @else if(error$|async; as error){\r\n        <!-- Stands in for the table: rows from an earlier, differently-filtered\r\n             load would misrepresent the current selection. -->\r\n        <div class=\"report-sheet-error\" role=\"alert\">\r\n            <div class=\"report-sheet-error-icon\" aria-hidden=\"true\">\r\n                <mat-icon>cloud_off</mat-icon>\r\n            </div>\r\n            <h2 class=\"report-sheet-error-title\">Couldn’t load this report</h2>\r\n            <p class=\"report-sheet-error-details\">{{ error }}</p>\r\n            @if (showDateControls) {\r\n            <p class=\"report-sheet-error-hint\">The selected range is {{ dateRangeFormatted }}.</p>\r\n            }\r\n            <button (click)=\"loadData()\" mat-flat-button color=\"primary\" class=\"report-sheet-error-retry\"\r\n                aria-label=\"Try loading the report again\">\r\n                <mat-icon>refresh</mat-icon>\r\n                Try again\r\n            </button>\r\n        </div>\r\n        }\r\n        @else {\r\n        <app-ngx-t-matrix-table [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        }\r\n\r\n\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'\" [attr.aria-label]=\"item.title\">\r\n                <mat-icon [style.color]=\"item.color\">{{item.icon}}</mat-icon>\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>","import { DashboardChart } from \"../../../../types/DashboardChart\";\r\nimport { SeriesOptionWithEncode } from \"../../../services/eChartsConfigController/e-charts-config-controller.service\";\r\n\r\nexport function checkChartsForErrors(charts: DashboardChart[]): DashboardChart[] {\r\n    try {\r\n\r\n        return charts.map(chart => ({\r\n            ...chart,\r\n            errors: validateChartConfig(chart) // Reset errors before checking\r\n\r\n        }))\r\n    } catch (error) {\r\n        console.error('Error checking charts for errors:', error);\r\n        return [];\r\n        \r\n    }\r\n\r\n}\r\n\r\nfunction validateChartConfig(chart: DashboardChart): string[] | undefined {\r\n const missingConfigs: string[] = [];\r\nconst xAxis: echarts.XAXisComponentOption[] = chart?.xAxis as echarts.XAXisComponentOption[];\r\n  const yAxis: echarts.YAXisComponentOption[] = chart?.yAxis as echarts.YAXisComponentOption[];\r\n const   series: SeriesOptionWithEncode[] = chart?.series as SeriesOptionWithEncode[];\r\n\r\n    if (!xAxis?.length || !yAxis?.length) {\r\n      missingConfigs.push('Axis configuration is missing');\r\n    } else {\r\n      if (xAxis?.some(axis => !axis.name)) {\r\n        missingConfigs.push('Some X axis are missing names');\r\n      }\r\n      if (yAxis?.some(axis => !axis.name)) {\r\n        missingConfigs.push('Some Y axis are missing names');\r\n      }\r\n    }\r\n\r\n    if (!series?.length) {\r\n      missingConfigs.push('Series configuration is missing');\r\n    } else if (series.some(series => !series.encode)) {\r\n      missingConfigs.push('Some series are missing encoding');\r\n    }\r\n\r\n    if (! chart.title) {\r\n      missingConfigs.push('Title is missing');\r\n    }\r\n\r\n return missingConfigs.length ? missingConfigs : undefined;\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { EChartsComponent } from '../e-charts/e-charts/e-charts.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DashboardChart } from '../../../types/DashboardChart';\r\n\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { checkChartsForErrors } from './functions/checkChartsForErrors';\r\n\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ElementEditorComponent } from '../element-editor/element-editor.component';\r\n\r\nimport { REPORT_SHEET_INPUTS } from '../../config/Report-inputs';\r\nimport { ElementEditorConfig } from '../../config/ngx-t-matrix-table-config';\r\n@Component({\r\n  selector: 'lib-chart-grid',\r\n  imports: [CommonModule,\r\n    EChartsComponent,\r\n    MatFormFieldModule,\r\n    MatToolbar,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatCardModule,\r\n    ElementEditorComponent,\r\n    MatMenuModule\r\n  ],\r\n  templateUrl: './chart-grid.component.html',\r\n  styleUrl: './chart-grid.component.css'\r\n})\r\nexport class ChartGridComponent {\r\n  @Input() set chartList(value: DashboardChart[]) {\r\n    this._chartList = checkChartsForErrors(value || [])\r\n  }\r\n  @Output() chartListChange = new EventEmitter<DashboardChart[]>()\r\n  @Output() setChartInEdit = new EventEmitter<string | null>()\r\n   _chartInEdit: null | string = null\r\n  @Input() set chartInEdit(value: string | null) {\r\n    this._chartInEdit = value\r\n  }\r\n  get chartInEdit() {\r\n    return this._chartInEdit\r\n  }\r\n  get chartList() {\r\n    return this._chartList\r\n  }\r\n  _chartList: DashboardChart[] = []\r\n\r\n  editChartInContextMenu(chart: DashboardChart) {\r\n    this.setChartInEdit.emit(chart.id)\r\n  }\r\n  removeChart(chart: DashboardChart) {\r\n\r\n  }\r\n  report_inputs = REPORT_SHEET_INPUTS \r\n  _chartEditorSectionsConfig: ElementEditorConfig | undefined | null\r\n  @Input() set chartEditorSectionsConfig(value:  ElementEditorConfig | undefined | null) {\r\n    this._chartEditorSectionsConfig = value \r\n    \r\n  }\r\n  get chartEditorSectionsConfig() {\r\n    return this._chartEditorSectionsConfig\r\n  }\r\n  closeChartEditor() { \r\n    this.setChartInEdit.emit(null)\r\n   }\r\n  /**\r\n   * `col` is a 1–12 track span. A chart being edited needs room for the editor\r\n   * panel beside it, so a narrow one is widened to at least half the grid —\r\n   * the old expression `chart.col + (… ? 4 : '')` concatenated a string onto a\r\n   * number and produced class names like `col-md-24`.\r\n   */\r\n  spanFor(chart: DashboardChart): number {\r\n    const col = Math.min(Math.max(Number(chart.col) || 12, 1), 12)\r\n    return chart.id === this.chartInEdit ? Math.max(col, 6) : col\r\n  }\r\n\r\n  saveElement(value: any) {\r\n    const newChartList = this.chartList.map(chart => {\r\n      if (chart.id === value.id) {\r\n        return {\r\n          ...chart,\r\n          ...value\r\n        }\r\n      }\r\n      return chart\r\n    })\r\n    this.chartListChange.emit(newChartList)\r\n  \r\n\r\n  }\r\n  isArray = Array.isArray;\r\n}\r\n","<div class=\"chart-grid\">\r\n    @for (chart of chartList; track chart.id) {\r\n    <div class=\"chart-cell\" [style.grid-column]=\"'span ' + spanFor(chart)\">\r\n        <mat-card class=\"chart-card\">\r\n            <div class=\"flex-container \">\r\n                <div class=\"left-side \">\r\n                    <mat-toolbar style=\"background: none;\">\r\n                        <span class=\"M3_title_small\" style=\"\">\r\n\r\n                            <!-- {{chart.title ?\r\n                            (isArray(chart.title) ? chart.title[0]?.text : chart.title.text)\r\n                            : 'No title provided' }} -->\r\n                        </span>\r\n                        <span class=\"spacer\"></span>\r\n                        <button #ChartOptionsMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"contextMenu\"\r\n                            [matMenuTriggerData]=\"{\r\n                    chart: chart,\r\n                 }\" mat-icon-button>\r\n                            <mat-icon [style.color]=\"ChartOptionsMenuTrigger.menuOpen ? 'var(--mat-sys-primary)' : ''\">\r\n                                more_vert\r\n                            </mat-icon>\r\n                        </button>\r\n                    </mat-toolbar>\r\n                    @if(!!chart?.errors && (chart.errors?.length || 0) > 0){\r\n                    <mat-error>\r\n                        <ul>\r\n                            @for (error of chart.errors; track error) {\r\n                            <li>\r\n                                {{error}}\r\n                            </li>\r\n\r\n                            }\r\n                        </ul>\r\n\r\n                    </mat-error>\r\n                    }\r\n\r\n                    <app-e-charts [options]=\"chart\"></app-e-charts>\r\n                </div>\r\n                @if(chart.id === chartInEdit && !!chartEditorSectionsConfig){\r\n                <div class=\"right-side\">\r\n                        <lib-element-editor [inEdit]=\"chart\"\r\n                            [autoSave]=\"true\"\r\n                            [label]=\"''\"\r\n                            [subTitle]=\"chartEditorSectionsConfig.subTitle\"\r\n                            [editorSections]=\"chartEditorSectionsConfig.editorSections\" [formInputs]=\"report_inputs \"\r\n                            [saveButtonLabel]=\"chartEditorSectionsConfig.saveButtonLabel\"\r\n                            (closeEditor)=\"closeChartEditor()\" (saveElement)=\"saveElement($event)\">\r\n                        </lib-element-editor>\r\n\r\n\r\n\r\n                </div>\r\n                }\r\n            </div>\r\n\r\n\r\n\r\n\r\n        </mat-card>\r\n    </div>\r\n\r\n    }\r\n</div>\r\n\r\n<mat-menu #contextMenu=\"matMenu\">\r\n    <ng-template matMenuContent let-chart=\"chart\">\r\n        <button mat-menu-item (click)=\"editChartInContextMenu(chart)\">\r\n            <mat-icon>\r\n                edit\r\n            </mat-icon>\r\n            Edit Chart\r\n        </button>\r\n        <button mat-menu-item (click)=\"removeChart(chart)\">\r\n            <mat-icon>\r\n                delete\r\n            </mat-icon>\r\n            Delete Chart\r\n        </button>\r\n    </ng-template>\r\n</mat-menu>","import { DashboardChart } from \"../../../../types/DashboardChart\";\r\nimport {  returnChartEditorConfig } from \"../../../config/ngx-t-dashboard-config\";\r\nimport { ReportDashboardStoreService } from \"./report-dashboard-store.service\";\r\n\r\nexport function ReportDashboardSelectors(store: ReportDashboardStoreService) {\r\n    const state$ = store.select(state => state)\r\n    const loadingDataSources$ = store.select(state => state.loadingDataSources)\r\n    const chartOptions$ = store.select(state => state.chartOptions.map(chart=>({\r\n        ...chart,\r\n          dataset: state.dataSources.map(\r\n            ds=>({\r\n                source:ds.data\r\n            })\r\n        )\r\n    } as DashboardChart)))\r\n    const chartInEdit$ = store.select(state => state.chartInEdit)\r\n    const showSidePanel$ = store.select(state => state.showSidePanel)\r\n    const editMode$ = store.select(state => state.editMode)\r\n    const  activeSideMenuConfig$ = store.select(state => state.activeSideMenuConfig)\r\n    const dashboardConfigTypes$ = store.select(state => state.dashboardConfigTypes)\r\n    const dataSources$ = store.select(state => state.dataSources)\r\n    const chartEditorSectionsConfig$ = store.select(state => {\r\n          const dataSources = state.dataSources\r\n          const chartInEdit = state.chartInEdit\r\n          const chart = state.chartOptions.find(c => c.id === chartInEdit)\r\n        return  returnChartEditorConfig(dataSources,chart)\r\n    })\r\n\r\n    return {\r\n        state$,\r\n        loadingDataSources$,\r\n        chartOptions$,\r\n        showSidePanel$,\r\n        editMode$,\r\n        activeSideMenuConfig$,\r\n        dashboardConfigTypes$,\r\n        dataSources$,\r\n        chartEditorSectionsConfig$,\r\n        chartInEdit$\r\n    }\r\n}","import { IReportDataSources } from \"ngx-t-forms-types\";\r\nimport { ReportDashboardState, ReportDashboardStoreService } from \"./report-dashboard-store.service\";\r\nimport { ElementEditorConfig } from \"../../../config/ngx-t-matrix-table-config\";\r\nimport { DashboardConfigTypes } from \"../../../config/ngx-t-dashboard-config\";\r\nexport interface LocalReportDataSource extends IReportDataSources {\r\n    data: any;\r\n\r\n}\r\nexport function ReportDashboardActions(store: ReportDashboardStoreService) {\r\n    const setId = store.updater((state: ReportDashboardState, id: string) => ({\r\n        ...state,\r\n        id\r\n    }))\r\n\r\n    const setReportName = store.updater((state: ReportDashboardState, reportName: string | null) => ({\r\n\r\n        ...state,\r\n        reportName\r\n    }))\r\n    const setChartOptions = store.updater((state: ReportDashboardState, chartOptions: any[]) => ({\r\n        ...state,\r\n        chartOptions: [...chartOptions]\r\n    }))\r\n    const setEditMode = store.updater((state: ReportDashboardState, editMode: boolean) => ({\r\n        ...state,\r\n        editMode\r\n    }))\r\n    const setActiveSideMenuConfig = store.updater((state: ReportDashboardState, config: ElementEditorConfig | null) => ({\r\n        ...state,\r\n        activeSideMenuConfig: config\r\n    }))\r\n const setDashboardConfigTypes = store.updater((state: ReportDashboardState, config: DashboardConfigTypes | null) => ({\r\n        ...state,\r\n        dashboardConfigTypes: config\r\n    }))\r\n    const setDataSources = store.updater((state: ReportDashboardState, dataSources: LocalReportDataSource[]) => ({\r\n        ...state,\r\n        dataSources: [...dataSources]\r\n    }))\r\n    const setLoadingDataSources = store.updater((state: ReportDashboardState, loading: boolean) => ({\r\n        ...state,\r\n        loadingDataSources: loading\r\n    }))\r\n    const setShowSidePanel = store.updater((state: ReportDashboardState) => ({\r\n        ...state,\r\n        showSidePanel: !state.showSidePanel\r\n    }))\r\n    const setError = store.updater((state: ReportDashboardState, error: string | null) => ({\r\n        ...state,\r\n        error\r\n    }))\r\n    const setChartInEdit = store.updater((state: ReportDashboardState, chartId: string | null) => ({\r\n        ...state,\r\n        chartInEdit: chartId\r\n    }))\r\n\r\n\r\n    return {\r\n        setId,\r\n        setActiveSideMenuConfig,\r\n        setChartOptions,\r\n        setReportName,\r\n        setEditMode,\r\n        setDataSources,\r\n        setLoadingDataSources,\r\n        setShowSidePanel,\r\n        setError,\r\n        setDashboardConfigTypes,\r\n        setChartInEdit\r\n\r\n    }\r\n}","import { APIDataFetchingConfigurationInterface, MongoDbPipeLineConfigInterface } from \"ngx-t-forms-types\"\r\nimport { map, Observable, take } from \"rxjs\"\r\n\r\n/**\r\n * Prepares and executes an API data fetch request based on a given configuration.\r\n * It constructs the request payload by mapping required inputs from source data\r\n * and applying default values defined in the configuration.\r\n *\r\n * @param config The configuration for the API data fetching.\r\n * @param postToServer A function that sends data to a specified URL and returns an Observable.\r\n * @param sourceData An object containing the input values to be mapped.\r\n * @returns An Observable that emits the API response and completes.\r\n * @throws An error if the configuration is missing or required inputs are not found in the sourceData.\r\n */\r\nexport function loadApiData(\r\n  config: APIDataFetchingConfigurationInterface | undefined,\r\n  postToServer: (url: string, data: Record<string, any>) => Observable<any>,\r\n  sourceData: Record<string, any>\r\n): Observable<any> {\r\n  // Guard against missing configuration\r\n  if (!config) {\r\n    throw new Error(\"API data fetching configuration is missing.\");\r\n  }\r\n\r\n  const { httpEndPoint, backEndConfig } = config;\r\n  const postData: Record<string, any> = {};\r\n  const missingInputs: string[] = [];\r\n\r\n  // Build the payload and track missing inputs. `minimumInputRequired` is optional —\r\n  // a template-mode fetch shapes its body from `payloadTemplate` and carries no mapping.\r\n  for (const input of backEndConfig?.minimumInputRequired ?? []) {\r\n    if (input.type === \"default\") {\r\n      postData[input.name] = input.defaultValue;\r\n    } else if (input.type === \"mapto\" && sourceData[input.name] !== undefined) {\r\n      postData[input.name] = sourceData[input.name];\r\n    } else {\r\n      missingInputs.push(input.name);\r\n    }\r\n  }\r\n\r\n  // Guard against missing required inputs\r\n  if (missingInputs.length > 0) {\r\n    throw new Error(`Missing required inputs: ${missingInputs.join(\", \")}`);\r\n  }\r\n\r\n  // Execute the request and ensure it completes after one emission\r\n  return postToServer(httpEndPoint, postData).pipe(take(1));\r\n}\r\n\r\n/**\r\n * Executes a MongoDB aggregation pipeline and safely extracts the results.\r\n *\r\n * @param config The configuration containing the pipeline and workflow ID.\r\n * @param runPipeLine A function to execute the MongoDB pipeline.\r\n * @returns An Observable that emits the 'results' array from the pipeline's output, or an empty array if not found.\r\n * @throws An error if the pipeline or workflowId is missing in the configuration.\r\n */\r\nexport function loadMongoData(\r\n  config: MongoDbPipeLineConfigInterface,\r\n  runPipeLine: (pipeline: any[], workflowId: string) => Observable<{ results: any[] }>\r\n): Observable<any[]> {\r\n  const { pipeline, workflowId } = config;\r\n\r\n  // Guard against invalid configuration\r\n  if (!pipeline || pipeline.length === 0) {\r\n    throw new Error(\"MongoDB pipeline configuration is missing or empty.\");\r\n  }\r\n  if (!workflowId) {\r\n    throw new Error(\"MongoDB workflowId is missing from the configuration.\");\r\n  }\r\n\r\n  return runPipeLine(pipeline, workflowId).pipe(\r\n    take(1),\r\n    // Safely access the 'results' property and default to an empty array\r\n    map(response => response?.results || [])\r\n  );\r\n}\r\n","import { IReportDataSources } from \"ngx-t-forms-types\";\r\nimport { _isEqual } from \"../../../../shared/functions/isEqual\";\r\n/**\r\n * Compares two arrays of data sources to see if they have changed,\r\n * ignoring the 'data' property on each object.\r\n *\r\n * @param currentDataSources The original array of data sources.\r\n * @param newDataSources The new array of data sources.\r\n * @returns `true` if the arrays are different, otherwise `false`.\r\n */\r\nexport function dataSourcesHasChanged(\r\n  currentDataSources: IReportDataSources[],\r\n  newDataSources: IReportDataSources[]\r\n): boolean {\r\n  // First, an efficient check for length. If they differ, the arrays have changed.\r\n  if (currentDataSources.length !== newDataSources.length) {\r\n    return true;\r\n  }\r\n\r\n  // Use 'some' to find if at least one data source is different.\r\n  // This is more direct than '!every' and stops as soon as a difference is found.\r\n  return currentDataSources.some((currentDs, index) => {\r\n    const newDs = newDataSources[index];\r\n\r\n    // Use object destructuring to create copies without the 'data' property.\r\n    // This is cleaner than spreading and setting 'data' to undefined.\r\n    const { data: _currentData, ...currentRest } = currentDs as any;\r\n    const { data: _newData, ...newRest } = newDs as any;\r\n\r\n    // If the objects without the 'data' property are NOT equal,\r\n    // .some() will return true, indicating a change has occurred.\r\n    return !_isEqual(currentRest, newRest);\r\n  });\r\n}","// Import necessary operators and utilities\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { APIDataFetchingConfigurationInterface, IReportDataSources, MongoDbPipeLineConfigInterface } from \"ngx-t-forms-types\";\r\nimport { forkJoin, map, Observable, of, switchMap, tap, withLatestFrom, catchError, filter } from \"rxjs\";\r\nimport { ReportDashboardStoreService } from \"./report-dashboard-store.service\";\r\nimport { loadApiData, loadMongoData } from \"./functions/loadDataSource\";\r\nimport { IReportSheet } from \"../../../../types/report\";\r\nimport { DashboardChart } from \"../../../../types/DashboardChart\";\r\nimport { _isEqual } from \"../../../shared/functions/isEqual\";\r\nimport { dataSourcesHasChanged } from \"./functions/dataSourcesHasChanged\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function ReportDashboardEffects(store: ReportDashboardStoreService) {\r\n\r\n    const dataSourcesChangedLoadData$ = store.effect((dataSources$: Observable<IReportDataSources[]>) =>\r\n        dataSources$.pipe(\r\n            // 1. Set loading state to true and clear any previous errors immediately.\r\n            withLatestFrom(store.selectors.dataSources$),\r\n            filter(([newDataSources, currentDataSources]) => dataSourcesHasChanged(currentDataSources, newDataSources)),\r\n            tap(() => {\r\n                store.actions.setLoadingDataSources(true);\r\n                store.actions.setError(null);\r\n            }\r\n            ),\r\n            switchMap(([dataSources,currentDs]) => {\r\n                // Handle the case where dataSources is null, undefined, or empty.\r\n                if (!dataSources || dataSources.length === 0) {\r\n                    // Return an observable that represents a cleared state.\r\n                    return of({ results: [], originalDataSources: [], error: null });\r\n                }\r\n\r\n                // If we have data sources, proceed with fetching.\r\n                const { postToServer, runPipeLine } = store.NGX_T_REPORTS_CONFIG_TOKEN;\r\n\r\n                const dataRequests$: Observable<any>[] = dataSources.map(ds =>\r\n                    ds.source === 'api'\r\n                        ? loadApiData(ds.config as APIDataFetchingConfigurationInterface, postToServer, {})\r\n                        : loadMongoData(ds.config as MongoDbPipeLineConfigInterface, runPipeLine)\r\n                );\r\n                console.error('Initiating data fetch for data sources:', dataSources, \" currentDs);\",currentDs);\r\n                return forkJoin(dataRequests$).pipe(\r\n                    map(results => ({ results, originalDataSources: dataSources, error: null })),\r\n                    \r\n                    catchError((error: HttpErrorResponse) => {\r\n                        console.error('Failed to load report data:', error);\r\n                        // On error, emit a specific payload to be handled downstream.\r\n                        return of({ error, results: [], originalDataSources: dataSources });\r\n                    })\r\n                );\r\n            }),\r\n\r\n            // 3. Use a single tap for atomic state updates for all cases (success, error, empty).\r\n            tap(({ results, originalDataSources, error }) => {\r\n                if (error !== null) {\r\n                    store.actions.setError('Failed to load data.');\r\n                    store.actions.setLoadingDataSources(false);\r\n                } else {\r\n                    const updatedDataSources = originalDataSources.map((dataSource, index) => ({\r\n                        ...dataSource,\r\n                        data: results[index],\r\n                    }));\r\n\r\n                    console.error('Data sources updated with fetched data:', updatedDataSources);\r\n                    store.actions.setDataSources(updatedDataSources);\r\n                    store.actions.setLoadingDataSources(false);\r\n                    store.actions.setError(null);\r\n                }\r\n            })\r\n        )\r\n    );\r\n    const setConfig = store.effect((config$: Observable<IReportSheet | null>) =>\r\n        config$.pipe(\r\n            tap(config => {\r\n                const dataSources = config?.dataSources || []\r\n                const chartOptions = config?.chartOptions || []\r\n                store.actions.setChartOptions(chartOptions)\r\n                store.effects.dataSourcesChangedLoadData$(dataSources)\r\n\r\n            })\r\n        )\r\n    );\r\n\r\n    const onChartListChange = store.effect((charts$: Observable<DashboardChart[]>) =>\r\n        charts$.pipe(\r\n            withLatestFrom(store.selectors.chartOptions$),\r\n            tap(([incomingCharts, existingCharts]) => {\r\n                if (_isEqual(incomingCharts, existingCharts)) return;\r\n                store.actions.setChartOptions(incomingCharts)\r\n\r\n            })\r\n        )\r\n    );\r\n\r\n\r\n\r\n    return {\r\n        dataSourcesChangedLoadData$,\r\n        setConfig,\r\n        onChartListChange\r\n    };\r\n}","import { inject, Inject, Injectable } from '@angular/core';\r\nimport { ComponentStore } from '@ngrx/component-store';\r\nimport { DashboardChart } from '../../../../types/DashboardChart';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from 'ngx-t-forms';\r\nimport { NgxTFormsConfig } from 'ngx-t-forms-types';\r\nimport { ReportDashboardSelectors } from './report-dashboard-selectors';\r\nimport { LocalReportDataSource, ReportDashboardActions } from './report-dashboard-actions';\r\nimport { ReportDashboardEffects } from './report-dashboard-effects';\r\nimport { NGX_T_REPORTS_CONFIG_TOKEN } from '../../../injection-tokens';\r\nimport { distinctUntilChanged } from 'rxjs';\r\nimport { _isEqual } from '../../../shared/functions/isEqual';\r\nimport { ElementEditorConfig } from '../../../config/ngx-t-matrix-table-config';\r\nimport { DashboardConfigTypes } from '../../../config/ngx-t-dashboard-config';\r\nexport interface ReportDashboardState {\r\n  reportName: string | null;\r\n\r\n  id: string | null;\r\n  chartOptions: DashboardChart[];\r\n  editMode:boolean;\r\n  dataSources:LocalReportDataSource[];\r\n  loadingDataSources?:boolean;\r\n  error:string | null;\r\n  showSidePanel: boolean ;\r\n  dashboardConfigTypes : DashboardConfigTypes | null\r\n  activeSideMenuConfig:ElementEditorConfig |null;\r\n  chartInEdit:string | null;\r\n}\r\nexport const initialReportDashboardState: ReportDashboardState = {\r\n  reportName: null,\r\n  activeSideMenuConfig: null,\r\n  id: null,\r\n  chartOptions: [],\r\n  editMode: false,\r\n  dataSources: [],\r\n  showSidePanel: false,\r\n  error: null,\r\n  dashboardConfigTypes: null,\r\n  chartInEdit: null\r\n}\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ReportDashboardStoreService extends ComponentStore<ReportDashboardState> {\r\n  constructor(@Inject(NGX_T_FORMS_CONFIG_TOKEN) public readonly NGX_T_FORMS_CONFIG: NgxTFormsConfig) {\r\n    super(initialReportDashboardState);\r\n  }\r\n  NGX_T_REPORTS_CONFIG_TOKEN = inject(NGX_T_REPORTS_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  readonly selectors = ReportDashboardSelectors(this);\r\n  readonly actions = ReportDashboardActions(this)\r\n  readonly effects = ReportDashboardEffects(this)\r\n  \r\n}\r\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { IReportSheet } from '../../../types/report';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { CommonModule, NgStyle } from '@angular/common';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { DashboardConfigTypes, DataSourcesConfig, REPORT_DASHBOARD_SIDE_MENU_OPTIONS, ReportInputsConfig } from '../../config/ngx-t-dashboard-config';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { REPORT_SHEET_INPUTS } from '../../config/Report-inputs';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { CUSTOM_DATE_FORMATS } from '../report-sheet/report-sheet.component';\r\nimport { TimeZoneAdapterService } from '../../services';\r\nimport { ChartGridComponent } from '../chart-grid/chart-grid.component';\r\nimport { DashboardChart } from './../../../types/DashboardChart';\r\nimport { ReportDashboardStoreService } from './store/report-dashboard-store.service';\r\nimport { getSectionElements, NGX_T_FORMS_CONFIG_TOKEN } from 'ngx-t-forms';\r\nimport { NgxTFormsConfig } from 'ngx-t-forms-types';\r\nimport { ElementEditorInnerSectionElementInterface, InClassFormUtilsInterface, IUserSignature } from 'ngx-t-forms-types';\r\nimport { PointGroup } from 'signature_pad';\r\nimport { ElementEditorComponent } from '../element-editor/element-editor.component';\r\nimport { ElementEditorConfig } from '../../config/ngx-t-matrix-table-config';\r\n\r\n@Component({\r\n  selector: 'lib-report-dashboard',\r\n  imports: [CommonModule, MatIconModule,\r\n    MatTooltipModule,\r\n    NgStyle,\r\n    MatDividerModule,\r\n    MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule,\r\n    MatProgressSpinnerModule,\r\n    ChartGridComponent,\r\n    ElementEditorComponent,\r\n    MatButtonModule],\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    ReportDashboardStoreService\r\n\r\n  ],\r\n  templateUrl: './report-dashboard.component.html',\r\n  styleUrl: './report-dashboard.component.scss',\r\n\r\n})\r\nexport class ReportDashboardComponent {\r\n  protected sideMenuOptions = REPORT_DASHBOARD_SIDE_MENU_OPTIONS\r\n  protected report_inputs = REPORT_SHEET_INPUTS\r\n  NGX_T_FORMS_CONFIG = inject<NgxTFormsConfig>(NGX_T_FORMS_CONFIG_TOKEN as any)\r\n  store = inject(ReportDashboardStoreService)\r\n  @Input() set reportName(report: string | null) {\r\n    this.store.actions.setReportName(report)\r\n  }\r\n  @Input() topOffset: number = 0\r\n  @Input() set config(config: IReportSheet | null) {\r\n    this.store.effects.setConfig(config)\r\n  }\r\n  @Input() set editMode(edit: boolean) {\r\n    this.store.actions.setEditMode(edit)\r\n  }\r\n\r\n  @Output() configChange = new EventEmitter<IReportSheet | null>()\r\n\r\n  loadingDataSources$ = this.store.selectors.loadingDataSources$\r\n  showSidePanel$ = this.store.selectors.showSidePanel$\r\n  editMode$ = this.store.selectors.editMode$\r\n  activeSideMenuConfig$ = this.store.selectors.activeSideMenuConfig$\r\n  state$ = this.store.selectors.state$\r\n  // Possibility to move to store \r\n  savingChanges$ = new BehaviorSubject<boolean>(false)\r\n  chartOptions$ = this.store.selectors.chartOptions$\r\n  chartEditorSectionsConfig$ = this.store.selectors.chartEditorSectionsConfig$\r\n  chartInEdit$ = this.store.selectors.chartInEdit$\r\n  actionMenuOptions(config: DashboardConfigTypes) {\r\n    switch (config) {\r\n      case DashboardConfigTypes.ReportInputsConfig:\r\n        const currentConfig: ElementEditorConfig = {\r\n          ...ReportInputsConfig,\r\n          editorSections: ReportInputsConfig.editorSections.map((section) => {\r\n            const elements = getSectionElements(\r\n              section.elements, {} as any,\r\n              this.NGX_T_FORMS_CONFIG, this.formsUtils, []) as ElementEditorInnerSectionElementInterface[]\r\n            return {\r\n              ...section,\r\n              elements: [...elements],\r\n            }\r\n          })\r\n        }\r\n        this.store.actions.setActiveSideMenuConfig(currentConfig)\r\n        this.store.actions.setDashboardConfigTypes(DashboardConfigTypes.ReportInputsConfig)\r\n\r\n        return\r\n      case DashboardConfigTypes.DataSourcesConfig:\r\n        const DataSourcesEditor: ElementEditorConfig = {\r\n          ...DataSourcesConfig,\r\n          editorSections: DataSourcesConfig.editorSections.map((section) => {\r\n            const elements = getSectionElements(\r\n              section.elements, {} as any,\r\n              this.NGX_T_FORMS_CONFIG, this.formsUtils, []) as ElementEditorInnerSectionElementInterface[]\r\n            return {\r\n              ...section,\r\n              elements: [...elements],\r\n            }\r\n          })\r\n        }\r\n        this.store.actions.setActiveSideMenuConfig(DataSourcesEditor)\r\n        this.store.actions.setDashboardConfigTypes(DashboardConfigTypes.DataSourcesConfig)\r\n        return\r\n      case DashboardConfigTypes.AddChart:\r\n        return\r\n\r\n      default:\r\n        return\r\n    }\r\n  }\r\n  onChartListChange(charts: DashboardChart[]) {\r\n    this.store.effects.onChartListChange(charts)\r\n  }\r\n  setChartInEdit(chartId: string | null) {\r\n    this.store.actions.setChartInEdit(chartId)\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  closeEditor = () => {\r\n    this.store.actions.setActiveSideMenuConfig(null)\r\n    this.store.actions.setDashboardConfigTypes(null)\r\n  }\r\n  saveElement(value: any) {\r\n    this.store.effects.setConfig(value)\r\n    this.closeEditor()\r\n\r\n  }\r\n}\r\n","<div class=\"report-sheet-container\" [ngStyle]=\"{ 'max-height': 'calc(100vh - ' + topOffset + 'px)' }\">\r\n    <div class=\"report-sheet-content\">\r\n        @if(loadingDataSources$|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=\"28\" 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        <!-- <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\"\r\n                    [max]=\"(minMaxDateAndComp$|async)?.maxDate\" [formGroup]=\"range\" [rangePicker]=\"picker\"\r\n                    [comparisonStart]=\"(minMaxDateAndComp$|async)?.compStartDate\"\r\n                    [comparisonEnd]=\"(minMaxDateAndComp$|async)?.compEndDate\">\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\"\r\n                            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        </mat-toolbar> -->\r\n        <mat-divider></mat-divider>\r\n        <!-- Charts to go here -->\r\n        <div style=\"padding: 16px;\">\r\n            <lib-chart-grid (chartListChange)=\"onChartListChange($event)\"\r\n            (setChartInEdit)=\"setChartInEdit($event)\" \r\n            [chartInEdit] =\"chartInEdit$|async\"\r\n                [chartEditorSectionsConfig]=\"(chartEditorSectionsConfig$|async)\"\r\n                [chartList]=\"( chartOptions$ |async) || []\"></lib-chart-grid>\r\n        </div>\r\n\r\n        }\r\n    </div>\r\n    <div class=\"report-sheet-sidebar-right\">\r\n        @if((editMode$ |async) && (showSidePanel$|async)){ \r\n        <div class=\"side-buttons-container\">\r\n            <button [matTooltipPosition]=\"'before'\" mat-fab color=\"primary\" matTooltip=\"Save Report sheet Changes\">\r\n                <mat-icon>\r\n                    save\r\n                </mat-icon>\r\n                @if(savingChanges$|async){\r\n                <mat-spinner diameter=\"56\" style=\"position:absolute;    right: -16px;bottom: -28px;\">\r\n                </mat-spinner>\r\n                }\r\n\r\n\r\n            </button>\r\n            <br>\r\n            @for(item of sideMenuOptions; track item.config){\r\n            <button (click)=\"actionMenuOptions(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            </button>\r\n\r\n            }\r\n        </div>\r\n        }\r\n        <span class=\"action-panel-container\">\r\n        </span>\r\n        <span class=\"more-actions-container\">\r\n        </span>\r\n        @if(editMode$ |async){ \r\n        <button (click)=\"store.actions.setShowSidePanel()\" mat-flat-button class=\"config-options\" color=\"accent\">\r\n            <mat-icon>\r\n                {{\r\n                (showSidePanel$|async) ? 'navigate_next' : 'navigate_before'\r\n                }}\r\n\r\n            </mat-icon>\r\n            <span class=\"label\">\r\n                {{\r\n                (showSidePanel$|async) ? 'Hide side panel' : 'Show side panel'\r\n                }}\r\n\r\n            </span>\r\n\r\n        </button>\r\n        }\r\n\r\n    </div>\r\n    @if( activeSideMenuConfig$|async){\r\n    <div class=\"report-sheet-sidebar-right \" [ngStyle]=\"{ 'max-height': 'calc(92vh - ' + topOffset + 'px)' }\">\r\n        <lib-element-editor [inEdit]=\"state$|async\" [label]=\"(activeSideMenuConfig$|async)?.label||'Editor'\"\r\n            [subTitle]=\"(activeSideMenuConfig$|async)?.subTitle ||''\" [editorSections]=\" (activeSideMenuConfig$|async)?.editorSections||[]\"\r\n            [formInputs]=\"report_inputs \" [saveButtonLabel]=\"(activeSideMenuConfig$|async)?.saveButtonLabel||'Save'\"\r\n            (closeEditor)=\"closeEditor()\" (saveElement)=\"saveElement($event)\">\r\n            <ng-content ></ng-content>\r\n            <br>\r\n        </lib-element-editor>\r\n    </div>\r\n    }\r\n\r\n</div>","/*\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","i3","i4","i6","i7","i9","i2","moment","i5"],"mappings":"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"}