snap-report-viewer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/chart-renderer/chart-renderer.component.mjs +75 -0
  3. package/esm2022/lib/components/complex-table-renderer/complex-table-renderer.component.mjs +155 -0
  4. package/esm2022/lib/components/component-renderer/component-renderer.component.mjs +158 -0
  5. package/esm2022/lib/components/container-renderer/container-renderer.component.mjs +53 -0
  6. package/esm2022/lib/components/image-renderer/image-renderer.component.mjs +67 -0
  7. package/esm2022/lib/components/line-renderer/line-renderer.component.mjs +94 -0
  8. package/esm2022/lib/components/list-renderer/list-renderer.component.mjs +96 -0
  9. package/esm2022/lib/components/qrcode-renderer/qrcode-renderer.component.mjs +67 -0
  10. package/esm2022/lib/components/shape-renderer/shape-renderer.component.mjs +133 -0
  11. package/esm2022/lib/components/table-renderer/table-renderer.component.mjs +148 -0
  12. package/esm2022/lib/components/text-renderer/text-renderer.component.mjs +33 -0
  13. package/esm2022/lib/constants/page-sizes.mjs +3 -0
  14. package/esm2022/lib/constants/report-tokens.mjs +21 -0
  15. package/esm2022/lib/layout/report-band.component.mjs +33 -0
  16. package/esm2022/lib/layout/report-page.component.mjs +159 -0
  17. package/esm2022/lib/models/component.model.mjs +3 -0
  18. package/esm2022/lib/models/report-template.model.mjs +19 -0
  19. package/esm2022/lib/page-container/page-container.component.mjs +248 -0
  20. package/esm2022/lib/report-viewer.component.mjs +393 -0
  21. package/esm2022/lib/services/chart-options-builder.service.mjs +749 -0
  22. package/esm2022/lib/services/data-resolver.service.mjs +385 -0
  23. package/esm2022/lib/services/export.service.mjs +82 -0
  24. package/esm2022/lib/services/formatting.service.mjs +59 -0
  25. package/esm2022/lib/services/print.service.mjs +133 -0
  26. package/esm2022/lib/services/search.service.mjs +117 -0
  27. package/esm2022/lib/services/style-mapper.service.mjs +247 -0
  28. package/esm2022/lib/services/template-normalizer.service.mjs +213 -0
  29. package/esm2022/lib/services/template-validator.service.mjs +293 -0
  30. package/esm2022/lib/services/token-resolver.service.mjs +14 -0
  31. package/esm2022/lib/services/viewer-state.service.mjs +155 -0
  32. package/esm2022/lib/sidebar/sidebar-container.component.mjs +86 -0
  33. package/esm2022/lib/sidebar/thumbnail-sidebar.component.mjs +110 -0
  34. package/esm2022/lib/sidebar/toc-sidebar.component.mjs +155 -0
  35. package/esm2022/lib/toolbar/viewer-toolbar.component.mjs +486 -0
  36. package/esm2022/public-api.mjs +43 -0
  37. package/esm2022/snap-report-viewer.mjs +5 -0
  38. package/fesm2022/snap-report-viewer.mjs +5110 -0
  39. package/fesm2022/snap-report-viewer.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/components/chart-renderer/chart-renderer.component.d.ts +14 -0
  42. package/lib/components/complex-table-renderer/complex-table-renderer.component.d.ts +17 -0
  43. package/lib/components/component-renderer/component-renderer.component.d.ts +14 -0
  44. package/lib/components/container-renderer/container-renderer.component.d.ts +11 -0
  45. package/lib/components/image-renderer/image-renderer.component.d.ts +14 -0
  46. package/lib/components/line-renderer/line-renderer.component.d.ts +10 -0
  47. package/lib/components/list-renderer/list-renderer.component.d.ts +16 -0
  48. package/lib/components/qrcode-renderer/qrcode-renderer.component.d.ts +16 -0
  49. package/lib/components/shape-renderer/shape-renderer.component.d.ts +11 -0
  50. package/lib/components/table-renderer/table-renderer.component.d.ts +20 -0
  51. package/lib/components/text-renderer/text-renderer.component.d.ts +13 -0
  52. package/lib/constants/page-sizes.d.ts +2 -0
  53. package/lib/constants/report-tokens.d.ts +8 -0
  54. package/lib/layout/report-band.component.d.ts +10 -0
  55. package/lib/layout/report-page.component.d.ts +21 -0
  56. package/lib/models/component.model.d.ts +315 -0
  57. package/lib/models/report-template.model.d.ts +122 -0
  58. package/lib/page-container/page-container.component.d.ts +29 -0
  59. package/lib/report-viewer.component.d.ts +51 -0
  60. package/lib/services/chart-options-builder.service.d.ts +31 -0
  61. package/lib/services/data-resolver.service.d.ts +27 -0
  62. package/lib/services/export.service.d.ts +11 -0
  63. package/lib/services/formatting.service.d.ts +10 -0
  64. package/lib/services/print.service.d.ts +12 -0
  65. package/lib/services/search.service.d.ts +13 -0
  66. package/lib/services/style-mapper.service.d.ts +14 -0
  67. package/lib/services/template-normalizer.service.d.ts +24 -0
  68. package/lib/services/template-validator.service.d.ts +19 -0
  69. package/lib/services/token-resolver.service.d.ts +6 -0
  70. package/lib/services/viewer-state.service.d.ts +49 -0
  71. package/lib/sidebar/sidebar-container.component.d.ts +8 -0
  72. package/lib/sidebar/thumbnail-sidebar.component.d.ts +15 -0
  73. package/lib/sidebar/toc-sidebar.component.d.ts +17 -0
  74. package/lib/toolbar/viewer-toolbar.component.d.ts +17 -0
  75. package/package.json +43 -0
  76. package/public-api.d.ts +35 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # ReportViewer
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project report-viewer` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project report-viewer`.
8
+ > Note: Don't forget to add `--project report-viewer` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build report-viewer` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build report-viewer`, go to the dist folder `cd dist/report-viewer` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test report-viewer` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,75 @@
1
+ import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';
4
+ import * as echarts from 'echarts/core';
5
+ import { BarChart, LineChart, PieChart, ScatterChart, RadarChart, FunnelChart, GaugeChart } from 'echarts/charts';
6
+ import { GridComponent, TooltipComponent, LegendComponent, TitleComponent, DataZoomComponent, MarkLineComponent, ToolboxComponent } from 'echarts/components';
7
+ import { CanvasRenderer } from 'echarts/renderers';
8
+ import { ChartOptionsBuilderService } from '../../services/chart-options-builder.service';
9
+ import * as i0 from "@angular/core";
10
+ echarts.use([
11
+ BarChart, LineChart, PieChart, ScatterChart, RadarChart, FunnelChart, GaugeChart,
12
+ GridComponent, TooltipComponent, LegendComponent, TitleComponent, DataZoomComponent, MarkLineComponent, ToolboxComponent,
13
+ CanvasRenderer
14
+ ]);
15
+ export class ChartRendererComponent {
16
+ constructor() {
17
+ this.chartOptions = null;
18
+ this.chartBuilder = inject(ChartOptionsBuilderService);
19
+ }
20
+ ngOnChanges(changes) {
21
+ this.buildChart();
22
+ }
23
+ buildChart() {
24
+ if (!this.component.chartConfig) {
25
+ this.chartOptions = null;
26
+ return;
27
+ }
28
+ const config = this.component.chartConfig;
29
+ let chartData;
30
+ if (this.data && config.dataSourceField) {
31
+ chartData = this.chartBuilder.resolveChartData(this.data, config);
32
+ }
33
+ this.chartOptions = this.chartBuilder.buildOptions(config, chartData && chartData.length > 0 ? chartData : undefined);
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChartRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChartRendererComponent, isStandalone: true, selector: "rv-chart-renderer", inputs: { component: "component", data: "data" }, providers: [provideEchartsCore({ echarts })], usesOnChanges: true, ngImport: i0, template: `
37
+ @if (chartOptions) {
38
+ <div class="rv-chart-container"
39
+ echarts
40
+ [options]="chartOptions">
41
+ </div>
42
+ } @else {
43
+ <div class="rv-chart-placeholder">
44
+ <svg width="32" height="32" viewBox="0 0 24 24" fill="#999">
45
+ <path d="M5 9.2h3V19H5zM10.6 5h2.8v14h-2.8zm5.6 8H19v6h-2.8z"/>
46
+ </svg>
47
+ <span>Chart</span>
48
+ </div>
49
+ }
50
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%}.rv-chart-container{width:100%;height:100%}.rv-chart-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;background:#f5f5f5;border:1px solid #ddd}.rv-chart-placeholder span{font-size:10px;color:#666;margin-top:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChartRendererComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'rv-chart-renderer', standalone: true, imports: [CommonModule, NgxEchartsDirective], providers: [provideEchartsCore({ echarts })], changeDetection: ChangeDetectionStrategy.OnPush, template: `
55
+ @if (chartOptions) {
56
+ <div class="rv-chart-container"
57
+ echarts
58
+ [options]="chartOptions">
59
+ </div>
60
+ } @else {
61
+ <div class="rv-chart-placeholder">
62
+ <svg width="32" height="32" viewBox="0 0 24 24" fill="#999">
63
+ <path d="M5 9.2h3V19H5zM10.6 5h2.8v14h-2.8zm5.6 8H19v6h-2.8z"/>
64
+ </svg>
65
+ <span>Chart</span>
66
+ </div>
67
+ }
68
+ `, styles: [":host{display:block;width:100%;height:100%}.rv-chart-container{width:100%;height:100%}.rv-chart-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;background:#f5f5f5;border:1px solid #ddd}.rv-chart-placeholder span{font-size:10px;color:#666;margin-top:4px}\n"] }]
69
+ }], propDecorators: { component: [{
70
+ type: Input,
71
+ args: [{ required: true }]
72
+ }], data: [{
73
+ type: Input
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvY2hhcnQtcmVuZGVyZXIvY2hhcnQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBcUYsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQUcxRixPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ1YsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNoRixhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0I7SUFDeEgsY0FBYztDQUNmLENBQUMsQ0FBQztBQXVDSCxNQUFNLE9BQU8sc0JBQXNCO0lBckNuQztRQXlDRSxpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFFbEMsaUJBQVksR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQXdCM0Q7SUF0QkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzFDLElBQUksU0FBNEIsQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ2hELE1BQU0sRUFDTixTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUMxRCxDQUFDO0lBQ0osQ0FBQzsrR0E3QlUsc0JBQXNCO21HQUF0QixzQkFBc0Isa0hBakN0QixDQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQywrQ0FFbEM7Ozs7Ozs7Ozs7Ozs7O0dBY1Qsd1lBakJTLFlBQVksK0JBQUUsbUJBQW1COzs0RkFrQ2hDLHNCQUFzQjtrQkFyQ2xDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxhQUNqQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxtQkFDM0IsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7R0FjVDs4QkFrQjBCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIHNpZ25hbCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ3hFY2hhcnRzRGlyZWN0aXZlLCBwcm92aWRlRWNoYXJ0c0NvcmUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5pbXBvcnQgdHlwZSB7IEVDaGFydHNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCAqIGFzIGVjaGFydHMgZnJvbSAnZWNoYXJ0cy9jb3JlJztcbmltcG9ydCB7IEJhckNoYXJ0LCBMaW5lQ2hhcnQsIFBpZUNoYXJ0LCBTY2F0dGVyQ2hhcnQsIFJhZGFyQ2hhcnQsIEZ1bm5lbENoYXJ0LCBHYXVnZUNoYXJ0IH0gZnJvbSAnZWNoYXJ0cy9jaGFydHMnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCwgVG9vbHRpcENvbXBvbmVudCwgTGVnZW5kQ29tcG9uZW50LCBUaXRsZUNvbXBvbmVudCwgRGF0YVpvb21Db21wb25lbnQsIE1hcmtMaW5lQ29tcG9uZW50LCBUb29sYm94Q29tcG9uZW50IH0gZnJvbSAnZWNoYXJ0cy9jb21wb25lbnRzJztcbmltcG9ydCB7IENhbnZhc1JlbmRlcmVyIH0gZnJvbSAnZWNoYXJ0cy9yZW5kZXJlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENoYXJ0T3B0aW9uc0J1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhcnQtb3B0aW9ucy1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTU1fVE9fUFggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGFnZS1zaXplcyc7XG5cbmVjaGFydHMudXNlKFtcbiAgQmFyQ2hhcnQsIExpbmVDaGFydCwgUGllQ2hhcnQsIFNjYXR0ZXJDaGFydCwgUmFkYXJDaGFydCwgRnVubmVsQ2hhcnQsIEdhdWdlQ2hhcnQsXG4gIEdyaWRDb21wb25lbnQsIFRvb2x0aXBDb21wb25lbnQsIExlZ2VuZENvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIERhdGFab29tQ29tcG9uZW50LCBNYXJrTGluZUNvbXBvbmVudCwgVG9vbGJveENvbXBvbmVudCxcbiAgQ2FudmFzUmVuZGVyZXJcbl0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydi1jaGFydC1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5neEVjaGFydHNEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtwcm92aWRlRWNoYXJ0c0NvcmUoeyBlY2hhcnRzIH0pXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChjaGFydE9wdGlvbnMpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJydi1jaGFydC1jb250YWluZXJcIlxuICAgICAgICAgICBlY2hhcnRzXG4gICAgICAgICAgIFtvcHRpb25zXT1cImNoYXJ0T3B0aW9uc1wiPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicnYtY2hhcnQtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiM5OTlcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTUgOS4yaDNWMTlINXpNMTAuNiA1aDIuOHYxNGgtMi44em01LjYgOEgxOXY2aC0yLjh6XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNwYW4+Q2hhcnQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgLnJ2LWNoYXJ0LWNvbnRhaW5lciB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IH1cbiAgICAucnYtY2hhcnQtcGxhY2Vob2xkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgIH1cbiAgICAucnYtY2hhcnQtcGxhY2Vob2xkZXIgc3BhbiB7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6ICM2NjY7IG1hcmdpbi10b3A6IDRweDsgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydFJlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcG9uZW50ITogQ29tcG9uZW50TW9kZWw7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcblxuICBjaGFydE9wdGlvbnM6IEVDaGFydHNPcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGNoYXJ0QnVpbGRlciA9IGluamVjdChDaGFydE9wdGlvbnNCdWlsZGVyU2VydmljZSk7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENoYXJ0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnQuY2hhcnRDb25maWcpIHtcbiAgICAgIHRoaXMuY2hhcnRPcHRpb25zID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbXBvbmVudC5jaGFydENvbmZpZztcbiAgICBsZXQgY2hhcnREYXRhOiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmRhdGEgJiYgY29uZmlnLmRhdGFTb3VyY2VGaWVsZCkge1xuICAgICAgY2hhcnREYXRhID0gdGhpcy5jaGFydEJ1aWxkZXIucmVzb2x2ZUNoYXJ0RGF0YSh0aGlzLmRhdGEsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFydE9wdGlvbnMgPSB0aGlzLmNoYXJ0QnVpbGRlci5idWlsZE9wdGlvbnMoXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydERhdGEgJiYgY2hhcnREYXRhLmxlbmd0aCA+IDAgPyBjaGFydERhdGEgOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,155 @@
1
+ import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DataResolverService } from '../../services/data-resolver.service';
4
+ import { StyleMapperService } from '../../services/style-mapper.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class ComplexTableRendererComponent {
8
+ constructor() {
9
+ this.dataResolver = inject(DataResolverService);
10
+ this.styleMapper = inject(StyleMapperService);
11
+ }
12
+ get config() {
13
+ return this.component.complexTableConfig;
14
+ }
15
+ get headerRows() {
16
+ if (!this.config)
17
+ return [];
18
+ const rows = [];
19
+ for (let i = 0; i < this.config.headerRowCount; i++)
20
+ rows.push(i);
21
+ return rows;
22
+ }
23
+ get bodyRows() {
24
+ if (!this.config)
25
+ return [];
26
+ const rows = [];
27
+ for (let i = this.config.headerRowCount; i < this.config.rowCount; i++)
28
+ rows.push(i);
29
+ return rows;
30
+ }
31
+ get tableStyle() {
32
+ const styles = {
33
+ 'width': '100%',
34
+ 'border-collapse': 'collapse',
35
+ };
36
+ if (!this.config)
37
+ return styles;
38
+ if (this.config.tableLayout) {
39
+ styles['table-layout'] = this.config.tableLayout;
40
+ }
41
+ if (this.config.showOuterBorder !== false) {
42
+ const w = this.config.outerBorderWidth || '1px';
43
+ const c = this.config.outerBorderColor || '#cccccc';
44
+ const s = this.config.outerBorderStyle || 'solid';
45
+ styles['border'] = `${w} ${s} ${c}`;
46
+ }
47
+ else {
48
+ styles['border'] = 'none';
49
+ }
50
+ return styles;
51
+ }
52
+ getVisibleCells(rowIndex) {
53
+ if (!this.config)
54
+ return [];
55
+ return this.config.cells
56
+ .filter(c => c.row === rowIndex && !c.covered)
57
+ .sort((a, b) => a.col - b.col);
58
+ }
59
+ getCellStyle(cell, isHeader) {
60
+ return this.styleMapper.mapComplexCellStyle(cell, this.config, isHeader);
61
+ }
62
+ resolveCellContent(cell) {
63
+ if (cell.dataBinding?.sourceField && this.data) {
64
+ return this.dataResolver.resolvePlaceholders(`{{${cell.dataBinding.sourceField}}}`, this.data);
65
+ }
66
+ if (cell.content) {
67
+ return this.dataResolver.resolvePlaceholders(cell.content, this.data);
68
+ }
69
+ return '';
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComplexTableRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ComplexTableRendererComponent, isStandalone: true, selector: "rv-complex-table-renderer", inputs: { component: "component", data: "data" }, ngImport: i0, template: `
73
+ @if (component.complexTableConfig) {
74
+ <table class="rv-complex-table" [ngStyle]="tableStyle">
75
+ <colgroup>
76
+ @for (width of component.complexTableConfig.columnWidths; track $index) {
77
+ <col [style.width]="width">
78
+ }
79
+ </colgroup>
80
+ <thead>
81
+ @for (rowIndex of headerRows; track rowIndex) {
82
+ <tr>
83
+ @for (cell of getVisibleCells(rowIndex); track cell.id) {
84
+ <th [attr.colspan]="cell.colspan > 1 ? cell.colspan : null"
85
+ [attr.rowspan]="cell.rowspan > 1 ? cell.rowspan : null"
86
+ [ngStyle]="getCellStyle(cell, true)">
87
+ {{ resolveCellContent(cell) }}
88
+ </th>
89
+ }
90
+ </tr>
91
+ }
92
+ </thead>
93
+ <tbody>
94
+ @for (rowIndex of bodyRows; track rowIndex) {
95
+ <tr>
96
+ @for (cell of getVisibleCells(rowIndex); track cell.id) {
97
+ <td [attr.colspan]="cell.colspan > 1 ? cell.colspan : null"
98
+ [attr.rowspan]="cell.rowspan > 1 ? cell.rowspan : null"
99
+ [ngStyle]="getCellStyle(cell, false)">
100
+ {{ resolveCellContent(cell) }}
101
+ </td>
102
+ }
103
+ </tr>
104
+ }
105
+ </tbody>
106
+ </table>
107
+ }
108
+ `, isInline: true, styles: [".rv-complex-table{width:100%;border-collapse:collapse;font-size:inherit}.rv-complex-table th,.rv-complex-table td{border:1px solid #e0e0e0;padding:6px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rv-complex-table th{background:#f5f5f5;font-weight:700;text-align:center}.rv-complex-table td{text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComplexTableRendererComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ selector: 'rv-complex-table-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
113
+ @if (component.complexTableConfig) {
114
+ <table class="rv-complex-table" [ngStyle]="tableStyle">
115
+ <colgroup>
116
+ @for (width of component.complexTableConfig.columnWidths; track $index) {
117
+ <col [style.width]="width">
118
+ }
119
+ </colgroup>
120
+ <thead>
121
+ @for (rowIndex of headerRows; track rowIndex) {
122
+ <tr>
123
+ @for (cell of getVisibleCells(rowIndex); track cell.id) {
124
+ <th [attr.colspan]="cell.colspan > 1 ? cell.colspan : null"
125
+ [attr.rowspan]="cell.rowspan > 1 ? cell.rowspan : null"
126
+ [ngStyle]="getCellStyle(cell, true)">
127
+ {{ resolveCellContent(cell) }}
128
+ </th>
129
+ }
130
+ </tr>
131
+ }
132
+ </thead>
133
+ <tbody>
134
+ @for (rowIndex of bodyRows; track rowIndex) {
135
+ <tr>
136
+ @for (cell of getVisibleCells(rowIndex); track cell.id) {
137
+ <td [attr.colspan]="cell.colspan > 1 ? cell.colspan : null"
138
+ [attr.rowspan]="cell.rowspan > 1 ? cell.rowspan : null"
139
+ [ngStyle]="getCellStyle(cell, false)">
140
+ {{ resolveCellContent(cell) }}
141
+ </td>
142
+ }
143
+ </tr>
144
+ }
145
+ </tbody>
146
+ </table>
147
+ }
148
+ `, styles: [".rv-complex-table{width:100%;border-collapse:collapse;font-size:inherit}.rv-complex-table th,.rv-complex-table td{border:1px solid #e0e0e0;padding:6px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rv-complex-table th{background:#f5f5f5;font-weight:700;text-align:center}.rv-complex-table td{text-align:left}\n"] }]
149
+ }], propDecorators: { component: [{
150
+ type: Input,
151
+ args: [{ required: true }]
152
+ }], data: [{
153
+ type: Input
154
+ }] } });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC10YWJsZS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnQtdmlld2VyL3NyYy9saWIvY29tcG9uZW50cy9jb21wbGV4LXRhYmxlLXJlbmRlcmVyL2NvbXBsZXgtdGFibGUtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQW9FekUsTUFBTSxPQUFPLDZCQUE2QjtJQWxFMUM7UUFzRVUsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBa0VsRDtJQWhFQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixNQUFNLE1BQU0sR0FBMkI7WUFDckMsT0FBTyxFQUFFLE1BQU07WUFDZixpQkFBaUIsRUFBRSxVQUFVO1NBQzlCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDO1lBQ3BELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzVCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUM3QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXNCLEVBQUUsUUFBaUI7UUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFzQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQzFDLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksRUFDckMsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOytHQXRFVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix1SUE3RDlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ1QsK1lBdENTLFlBQVk7OzRGQStEWCw2QkFBNkI7a0JBbEV6QyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUOzhCQTBCMEIsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCwgQ29tcGxleFRhYmxlQ2VsbCwgQ29tcGxleFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS1yZXNvbHZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN0eWxlTWFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0eWxlLW1hcHBlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnYtY29tcGxleC10YWJsZS1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGNvbXBvbmVudC5jb21wbGV4VGFibGVDb25maWcpIHtcbiAgICAgIDx0YWJsZSBjbGFzcz1cInJ2LWNvbXBsZXgtdGFibGVcIiBbbmdTdHlsZV09XCJ0YWJsZVN0eWxlXCI+XG4gICAgICAgIDxjb2xncm91cD5cbiAgICAgICAgICBAZm9yICh3aWR0aCBvZiBjb21wb25lbnQuY29tcGxleFRhYmxlQ29uZmlnLmNvbHVtbldpZHRoczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8Y29sIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIEBmb3IgKHJvd0luZGV4IG9mIGhlYWRlclJvd3M7IHRyYWNrIHJvd0luZGV4KSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIEBmb3IgKGNlbGwgb2YgZ2V0VmlzaWJsZUNlbGxzKHJvd0luZGV4KTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cImNlbGwuY29sc3BhbiA+IDEgPyBjZWxsLmNvbHNwYW4gOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJjZWxsLnJvd3NwYW4gPiAxID8gY2VsbC5yb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShjZWxsLCB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNlbGxDb250ZW50KGNlbGwpIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChyb3dJbmRleCBvZiBib2R5Um93czsgdHJhY2sgcm93SW5kZXgpIHtcbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgQGZvciAoY2VsbCBvZiBnZXRWaXNpYmxlQ2VsbHMocm93SW5kZXgpOyB0cmFjayBjZWxsLmlkKSB7XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuID4gMSA/IGNlbGwuY29sc3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cImNlbGwucm93c3BhbiA+IDEgPyBjZWxsLnJvd3NwYW4gOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKGNlbGwsIGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNlbGxDb250ZW50KGNlbGwpIH19XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5ydi1jb21wbGV4LXRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICB9XG4gICAgLnJ2LWNvbXBsZXgtdGFibGUgdGgsXG4gICAgLnJ2LWNvbXBsZXgtdGFibGUgdGQge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAucnYtY29tcGxleC10YWJsZSB0aCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuICAgIC5ydi1jb21wbGV4LXRhYmxlIHRkIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21wbGV4VGFibGVSZW5kZXJlckNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBvbmVudCE6IENvbXBvbmVudE1vZGVsO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG5cbiAgcHJpdmF0ZSBkYXRhUmVzb2x2ZXIgPSBpbmplY3QoRGF0YVJlc29sdmVyU2VydmljZSk7XG4gIHByaXZhdGUgc3R5bGVNYXBwZXIgPSBpbmplY3QoU3R5bGVNYXBwZXJTZXJ2aWNlKTtcblxuICBnZXQgY29uZmlnKCk6IENvbXBsZXhUYWJsZUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmNvbXBsZXhUYWJsZUNvbmZpZztcbiAgfVxuXG4gIGdldCBoZWFkZXJSb3dzKCk6IG51bWJlcltdIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSByZXR1cm4gW107XG4gICAgY29uc3Qgcm93czogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLmhlYWRlclJvd0NvdW50OyBpKyspIHJvd3MucHVzaChpKTtcbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGdldCBib2R5Um93cygpOiBudW1iZXJbXSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHJvd3M6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuY29uZmlnLmhlYWRlclJvd0NvdW50OyBpIDwgdGhpcy5jb25maWcucm93Q291bnQ7IGkrKykgcm93cy5wdXNoKGkpO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZ2V0IHRhYmxlU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3dpZHRoJzogJzEwMCUnLFxuICAgICAgJ2JvcmRlci1jb2xsYXBzZSc6ICdjb2xsYXBzZScsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSByZXR1cm4gc3R5bGVzO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnRhYmxlTGF5b3V0KSB7XG4gICAgICBzdHlsZXNbJ3RhYmxlLWxheW91dCddID0gdGhpcy5jb25maWcudGFibGVMYXlvdXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNob3dPdXRlckJvcmRlciAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbmZpZy5vdXRlckJvcmRlcldpZHRoIHx8ICcxcHgnO1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29uZmlnLm91dGVyQm9yZGVyQ29sb3IgfHwgJyNjY2NjY2MnO1xuICAgICAgY29uc3QgcyA9IHRoaXMuY29uZmlnLm91dGVyQm9yZGVyU3R5bGUgfHwgJ3NvbGlkJztcbiAgICAgIHN0eWxlc1snYm9yZGVyJ10gPSBgJHt3fSAke3N9ICR7Y31gO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXNbJ2JvcmRlciddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICBnZXRWaXNpYmxlQ2VsbHMocm93SW5kZXg6IG51bWJlcik6IENvbXBsZXhUYWJsZUNlbGxbXSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jZWxsc1xuICAgICAgLmZpbHRlcihjID0+IGMucm93ID09PSByb3dJbmRleCAmJiAhYy5jb3ZlcmVkKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY29sIC0gYi5jb2wpO1xuICB9XG5cbiAgZ2V0Q2VsbFN0eWxlKGNlbGw6IENvbXBsZXhUYWJsZUNlbGwsIGlzSGVhZGVyOiBib29sZWFuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVNYXBwZXIubWFwQ29tcGxleENlbGxTdHlsZShjZWxsLCB0aGlzLmNvbmZpZyEsIGlzSGVhZGVyKTtcbiAgfVxuXG4gIHJlc29sdmVDZWxsQ29udGVudChjZWxsOiBDb21wbGV4VGFibGVDZWxsKTogc3RyaW5nIHtcbiAgICBpZiAoY2VsbC5kYXRhQmluZGluZz8uc291cmNlRmllbGQgJiYgdGhpcy5kYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUmVzb2x2ZXIucmVzb2x2ZVBsYWNlaG9sZGVycyhcbiAgICAgICAgYHt7JHtjZWxsLmRhdGFCaW5kaW5nLnNvdXJjZUZpZWxkfX19YCxcbiAgICAgICAgdGhpcy5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2VsbC5jb250ZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhUmVzb2x2ZXIucmVzb2x2ZVBsYWNlaG9sZGVycyhjZWxsLmNvbnRlbnQsIHRoaXMuZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIl19
@@ -0,0 +1,158 @@
1
+ import { Component, Input, ChangeDetectionStrategy, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { StyleMapperService } from '../../services/style-mapper.service';
4
+ import { TextRendererComponent } from '../text-renderer/text-renderer.component';
5
+ import { TableRendererComponent } from '../table-renderer/table-renderer.component';
6
+ import { ChartRendererComponent } from '../chart-renderer/chart-renderer.component';
7
+ import { ImageRendererComponent } from '../image-renderer/image-renderer.component';
8
+ import { QrcodeRendererComponent } from '../qrcode-renderer/qrcode-renderer.component';
9
+ import { ListRendererComponent } from '../list-renderer/list-renderer.component';
10
+ import { LineRendererComponent } from '../line-renderer/line-renderer.component';
11
+ import { ShapeRendererComponent } from '../shape-renderer/shape-renderer.component';
12
+ import { ContainerRendererComponent } from '../container-renderer/container-renderer.component';
13
+ import { ComplexTableRendererComponent } from '../complex-table-renderer/complex-table-renderer.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/common";
16
+ export class ComponentRendererComponent {
17
+ constructor() {
18
+ this.pageNumber = 1;
19
+ this.totalPages = 1;
20
+ this.reportTitle = '';
21
+ this.styleMapper = inject(StyleMapperService);
22
+ }
23
+ get positionStyles() {
24
+ return {
25
+ 'position': 'absolute',
26
+ 'left': this.component.position.x + 'mm',
27
+ 'top': this.component.position.y + 'mm',
28
+ 'width': this.component.size.width + 'mm',
29
+ 'height': this.component.size.height + 'mm',
30
+ 'z-index': String(this.component.zIndex || 0),
31
+ 'box-sizing': 'border-box',
32
+ 'overflow': 'hidden',
33
+ };
34
+ }
35
+ get componentStyles() {
36
+ return this.styleMapper.mapComponentStyles(this.component.style);
37
+ }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComponentRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ComponentRendererComponent, isStandalone: true, selector: "rv-component-renderer", inputs: { component: "component", data: "data", pageNumber: "pageNumber", totalPages: "totalPages", reportTitle: "reportTitle" }, ngImport: i0, template: `
40
+ <div class="rv-component" [ngStyle]="positionStyles">
41
+ <div class="rv-component-content" [ngStyle]="componentStyles">
42
+ @switch (component.type) {
43
+ @case ('text') {
44
+ <rv-text-renderer [component]="component" [data]="data"
45
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
46
+ }
47
+ @case ('field') {
48
+ <rv-text-renderer [component]="component" [data]="data"
49
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
50
+ }
51
+ @case ('table') {
52
+ <rv-table-renderer [component]="component" [data]="data" />
53
+ }
54
+ @case ('chart') {
55
+ <rv-chart-renderer [component]="component" [data]="data" />
56
+ }
57
+ @case ('image') {
58
+ <rv-image-renderer [component]="component" [data]="data"
59
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
60
+ }
61
+ @case ('qrcode') {
62
+ <rv-qrcode-renderer [component]="component" [data]="data"
63
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
64
+ }
65
+ @case ('list') {
66
+ <rv-list-renderer [component]="component" [data]="data" />
67
+ }
68
+ @case ('line') {
69
+ <rv-line-renderer [component]="component" />
70
+ }
71
+ @case ('shape') {
72
+ <rv-shape-renderer [component]="component" />
73
+ }
74
+ @case ('container') {
75
+ <rv-container-renderer [component]="component" [data]="data"
76
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
77
+ }
78
+ @case ('complex-table') {
79
+ <rv-complex-table-renderer [component]="component" [data]="data" />
80
+ }
81
+ }
82
+ </div>
83
+ </div>
84
+ `, isInline: true, styles: [".rv-component{position:absolute;box-sizing:border-box;overflow:hidden}.rv-component-content{width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TextRendererComponent, selector: "rv-text-renderer", inputs: ["component", "data", "pageNumber", "totalPages", "reportTitle"] }, { kind: "component", type: TableRendererComponent, selector: "rv-table-renderer", inputs: ["component", "data"] }, { kind: "component", type: ChartRendererComponent, selector: "rv-chart-renderer", inputs: ["component", "data"] }, { kind: "component", type: ImageRendererComponent, selector: "rv-image-renderer", inputs: ["component", "data", "pageNumber", "totalPages", "reportTitle"] }, { kind: "component", type: QrcodeRendererComponent, selector: "rv-qrcode-renderer", inputs: ["component", "data", "pageNumber", "totalPages", "reportTitle"] }, { kind: "component", type: ListRendererComponent, selector: "rv-list-renderer", inputs: ["component", "data"] }, { kind: "component", type: LineRendererComponent, selector: "rv-line-renderer", inputs: ["component"] }, { kind: "component", type: ShapeRendererComponent, selector: "rv-shape-renderer", inputs: ["component"] }, { kind: "component", type: ContainerRendererComponent, selector: "rv-container-renderer", inputs: ["component", "data", "pageNumber", "totalPages", "reportTitle"] }, { kind: "component", type: ComplexTableRendererComponent, selector: "rv-complex-table-renderer", inputs: ["component", "data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComponentRendererComponent, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'rv-component-renderer', standalone: true, imports: [
89
+ CommonModule,
90
+ TextRendererComponent,
91
+ TableRendererComponent,
92
+ ChartRendererComponent,
93
+ ImageRendererComponent,
94
+ QrcodeRendererComponent,
95
+ ListRendererComponent,
96
+ LineRendererComponent,
97
+ ShapeRendererComponent,
98
+ ContainerRendererComponent,
99
+ ComplexTableRendererComponent,
100
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
101
+ <div class="rv-component" [ngStyle]="positionStyles">
102
+ <div class="rv-component-content" [ngStyle]="componentStyles">
103
+ @switch (component.type) {
104
+ @case ('text') {
105
+ <rv-text-renderer [component]="component" [data]="data"
106
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
107
+ }
108
+ @case ('field') {
109
+ <rv-text-renderer [component]="component" [data]="data"
110
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
111
+ }
112
+ @case ('table') {
113
+ <rv-table-renderer [component]="component" [data]="data" />
114
+ }
115
+ @case ('chart') {
116
+ <rv-chart-renderer [component]="component" [data]="data" />
117
+ }
118
+ @case ('image') {
119
+ <rv-image-renderer [component]="component" [data]="data"
120
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
121
+ }
122
+ @case ('qrcode') {
123
+ <rv-qrcode-renderer [component]="component" [data]="data"
124
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
125
+ }
126
+ @case ('list') {
127
+ <rv-list-renderer [component]="component" [data]="data" />
128
+ }
129
+ @case ('line') {
130
+ <rv-line-renderer [component]="component" />
131
+ }
132
+ @case ('shape') {
133
+ <rv-shape-renderer [component]="component" />
134
+ }
135
+ @case ('container') {
136
+ <rv-container-renderer [component]="component" [data]="data"
137
+ [pageNumber]="pageNumber" [totalPages]="totalPages" [reportTitle]="reportTitle" />
138
+ }
139
+ @case ('complex-table') {
140
+ <rv-complex-table-renderer [component]="component" [data]="data" />
141
+ }
142
+ }
143
+ </div>
144
+ </div>
145
+ `, styles: [".rv-component{position:absolute;box-sizing:border-box;overflow:hidden}.rv-component-content{width:100%;height:100%;box-sizing:border-box}\n"] }]
146
+ }], propDecorators: { component: [{
147
+ type: Input,
148
+ args: [{ required: true }]
149
+ }], data: [{
150
+ type: Input
151
+ }], pageNumber: [{
152
+ type: Input
153
+ }], totalPages: [{
154
+ type: Input
155
+ }], reportTitle: [{
156
+ type: Input
157
+ }] } });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbXBvbmVudC1yZW5kZXJlci9jb21wb25lbnQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDaEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7OztBQThFM0csTUFBTSxPQUFPLDBCQUEwQjtJQTVFdkM7UUErRVcsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBa0JsRDtJQWhCQyxJQUFJLGNBQWM7UUFDaEIsT0FBTztZQUNMLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDdkMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJO1lBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSTtZQUMzQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUM3QyxZQUFZLEVBQUUsWUFBWTtZQUMxQixVQUFVLEVBQUUsUUFBUTtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQXhCVSwwQkFBMEI7bUdBQTFCLDBCQUEwQixtTkEzRDNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q1Qsb05BMURDLFlBQVksb0hBQ1oscUJBQXFCLHVJQUNyQixzQkFBc0IsNkZBQ3RCLHNCQUFzQiw2RkFDdEIsc0JBQXNCLHdJQUN0Qix1QkFBdUIseUlBQ3ZCLHFCQUFxQiw0RkFDckIscUJBQXFCLG9GQUNyQixzQkFBc0IscUZBQ3RCLDBCQUEwQiw0SUFDMUIsNkJBQTZCOzs0RkE4RHBCLDBCQUEwQjtrQkE1RXRDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixzQkFBc0I7d0JBQ3RCLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2QixxQkFBcUI7d0JBQ3JCLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QiwwQkFBMEI7d0JBQzFCLDZCQUE2QjtxQkFDOUIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDVDs4QkFlMEIsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgU3R5bGVNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3R5bGUtbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dC1yZW5kZXJlci90ZXh0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtcmVuZGVyZXIvdGFibGUtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXJ0UmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9jaGFydC1yZW5kZXJlci9jaGFydC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2ltYWdlLXJlbmRlcmVyL2ltYWdlLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRcmNvZGVSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL3FyY29kZS1yZW5kZXJlci9xcmNvZGUtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2xpc3QtcmVuZGVyZXIvbGlzdC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGluZVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbGluZS1yZW5kZXJlci9saW5lLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFwZVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcGUtcmVuZGVyZXIvc2hhcGUtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRhaW5lclJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGFpbmVyLXJlbmRlcmVyL2NvbnRhaW5lci1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcGxleFRhYmxlUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wbGV4LXRhYmxlLXJlbmRlcmVyL2NvbXBsZXgtdGFibGUtcmVuZGVyZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnYtY29tcG9uZW50LXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUZXh0UmVuZGVyZXJDb21wb25lbnQsXG4gICAgVGFibGVSZW5kZXJlckNvbXBvbmVudCxcbiAgICBDaGFydFJlbmRlcmVyQ29tcG9uZW50LFxuICAgIEltYWdlUmVuZGVyZXJDb21wb25lbnQsXG4gICAgUXJjb2RlUmVuZGVyZXJDb21wb25lbnQsXG4gICAgTGlzdFJlbmRlcmVyQ29tcG9uZW50LFxuICAgIExpbmVSZW5kZXJlckNvbXBvbmVudCxcbiAgICBTaGFwZVJlbmRlcmVyQ29tcG9uZW50LFxuICAgIENvbnRhaW5lclJlbmRlcmVyQ29tcG9uZW50LFxuICAgIENvbXBsZXhUYWJsZVJlbmRlcmVyQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnYtY29tcG9uZW50XCIgW25nU3R5bGVdPVwicG9zaXRpb25TdHlsZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydi1jb21wb25lbnQtY29udGVudFwiIFtuZ1N0eWxlXT1cImNvbXBvbmVudFN0eWxlc1wiPlxuICAgICAgICBAc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xuICAgICAgICAgIEBjYXNlICgndGV4dCcpIHtcbiAgICAgICAgICAgIDxydi10ZXh0LXJlbmRlcmVyIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCIgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgIFtwYWdlTnVtYmVyXT1cInBhZ2VOdW1iZXJcIiBbdG90YWxQYWdlc109XCJ0b3RhbFBhZ2VzXCIgW3JlcG9ydFRpdGxlXT1cInJlcG9ydFRpdGxlXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdmaWVsZCcpIHtcbiAgICAgICAgICAgIDxydi10ZXh0LXJlbmRlcmVyIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCIgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgIFtwYWdlTnVtYmVyXT1cInBhZ2VOdW1iZXJcIiBbdG90YWxQYWdlc109XCJ0b3RhbFBhZ2VzXCIgW3JlcG9ydFRpdGxlXT1cInJlcG9ydFRpdGxlXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCd0YWJsZScpIHtcbiAgICAgICAgICAgIDxydi10YWJsZS1yZW5kZXJlciBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiIFtkYXRhXT1cImRhdGFcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2NoYXJ0Jykge1xuICAgICAgICAgICAgPHJ2LWNoYXJ0LXJlbmRlcmVyIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCIgW2RhdGFdPVwiZGF0YVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnaW1hZ2UnKSB7XG4gICAgICAgICAgICA8cnYtaW1hZ2UtcmVuZGVyZXIgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIiBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZU51bWJlclwiIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIiBbcmVwb3J0VGl0bGVdPVwicmVwb3J0VGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ3FyY29kZScpIHtcbiAgICAgICAgICAgIDxydi1xcmNvZGUtcmVuZGVyZXIgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIiBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZU51bWJlclwiIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIiBbcmVwb3J0VGl0bGVdPVwicmVwb3J0VGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2xpc3QnKSB7XG4gICAgICAgICAgICA8cnYtbGlzdC1yZW5kZXJlciBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiIFtkYXRhXT1cImRhdGFcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2xpbmUnKSB7XG4gICAgICAgICAgICA8cnYtbGluZS1yZW5kZXJlciBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnc2hhcGUnKSB7XG4gICAgICAgICAgICA8cnYtc2hhcGUtcmVuZGVyZXIgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgICAgIDxydi1jb250YWluZXItcmVuZGVyZXIgW2NvbXBvbmVudF09XCJjb21wb25lbnRcIiBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZU51bWJlclwiIFt0b3RhbFBhZ2VzXT1cInRvdGFsUGFnZXNcIiBbcmVwb3J0VGl0bGVdPVwicmVwb3J0VGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2NvbXBsZXgtdGFibGUnKSB7XG4gICAgICAgICAgICA8cnYtY29tcGxleC10YWJsZS1yZW5kZXJlciBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiIFtkYXRhXT1cImRhdGFcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucnYtY29tcG9uZW50IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgICAucnYtY29tcG9uZW50LWNvbnRlbnQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb21wb25lbnQhOiBDb21wb25lbnRNb2RlbDtcbiAgQElucHV0KCkgZGF0YTogYW55O1xuICBASW5wdXQoKSBwYWdlTnVtYmVyID0gMTtcbiAgQElucHV0KCkgdG90YWxQYWdlcyA9IDE7XG4gIEBJbnB1dCgpIHJlcG9ydFRpdGxlID0gJyc7XG5cbiAgcHJpdmF0ZSBzdHlsZU1hcHBlciA9IGluamVjdChTdHlsZU1hcHBlclNlcnZpY2UpO1xuXG4gIGdldCBwb3NpdGlvblN0eWxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3Bvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAgICdsZWZ0JzogdGhpcy5jb21wb25lbnQucG9zaXRpb24ueCArICdtbScsXG4gICAgICAndG9wJzogdGhpcy5jb21wb25lbnQucG9zaXRpb24ueSArICdtbScsXG4gICAgICAnd2lkdGgnOiB0aGlzLmNvbXBvbmVudC5zaXplLndpZHRoICsgJ21tJyxcbiAgICAgICdoZWlnaHQnOiB0aGlzLmNvbXBvbmVudC5zaXplLmhlaWdodCArICdtbScsXG4gICAgICAnei1pbmRleCc6IFN0cmluZyh0aGlzLmNvbXBvbmVudC56SW5kZXggfHwgMCksXG4gICAgICAnYm94LXNpemluZyc6ICdib3JkZXItYm94JyxcbiAgICAgICdvdmVyZmxvdyc6ICdoaWRkZW4nLFxuICAgIH07XG4gIH1cblxuICBnZXQgY29tcG9uZW50U3R5bGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0eWxlTWFwcGVyLm1hcENvbXBvbmVudFN0eWxlcyh0aGlzLmNvbXBvbmVudC5zdHlsZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ import { Component, Input, ChangeDetectionStrategy, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ComponentRendererComponent } from '../component-renderer/component-renderer.component';
4
+ import * as i0 from "@angular/core";
5
+ export class ContainerRendererComponent {
6
+ constructor() {
7
+ this.pageNumber = 1;
8
+ this.totalPages = 1;
9
+ this.reportTitle = '';
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContainerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ContainerRendererComponent, isStandalone: true, selector: "rv-container-renderer", inputs: { component: "component", data: "data", pageNumber: "pageNumber", totalPages: "totalPages", reportTitle: "reportTitle" }, ngImport: i0, template: `
13
+ <div class="rv-container">
14
+ @for (child of component.children || []; track child.id) {
15
+ <rv-component-renderer
16
+ [component]="child"
17
+ [data]="data"
18
+ [pageNumber]="pageNumber"
19
+ [totalPages]="totalPages"
20
+ [reportTitle]="reportTitle">
21
+ </rv-component-renderer>
22
+ }
23
+ </div>
24
+ `, isInline: true, styles: [".rv-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "component", type: i0.forwardRef(() => ComponentRendererComponent), selector: "rv-component-renderer", inputs: ["component", "data", "pageNumber", "totalPages", "reportTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContainerRendererComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'rv-container-renderer', standalone: true, imports: [CommonModule, forwardRef(() => ComponentRendererComponent)], changeDetection: ChangeDetectionStrategy.OnPush, template: `
29
+ <div class="rv-container">
30
+ @for (child of component.children || []; track child.id) {
31
+ <rv-component-renderer
32
+ [component]="child"
33
+ [data]="data"
34
+ [pageNumber]="pageNumber"
35
+ [totalPages]="totalPages"
36
+ [reportTitle]="reportTitle">
37
+ </rv-component-renderer>
38
+ }
39
+ </div>
40
+ `, styles: [".rv-container{position:relative;width:100%;height:100%}\n"] }]
41
+ }], propDecorators: { component: [{
42
+ type: Input,
43
+ args: [{ required: true }]
44
+ }], data: [{
45
+ type: Input
46
+ }], pageNumber: [{
47
+ type: Input
48
+ }], totalPages: [{
49
+ type: Input
50
+ }], reportTitle: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lci1yZW5kZXJlci9jb250YWluZXItcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7O0FBNEJoRyxNQUFNLE9BQU8sMEJBQTBCO0lBMUJ2QztRQTZCVyxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGdCQUFXLEdBQUcsRUFBRSxDQUFDO0tBQzNCOytHQU5ZLDBCQUEwQjttR0FBMUIsMEJBQTBCLG1OQXJCM0I7Ozs7Ozs7Ozs7OztHQVlULHNKQWRTLFlBQVksb0RBQW1CLDBCQUEwQjs7NEZBdUJ4RCwwQkFBMEI7a0JBMUJ0QyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsbUJBQ3BELHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7OztHQVlUOzhCQVUwQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J2LWNvbnRhaW5lci1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQpXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJ2LWNvbnRhaW5lclwiPlxuICAgICAgQGZvciAoY2hpbGQgb2YgY29tcG9uZW50LmNoaWxkcmVuIHx8IFtdOyB0cmFjayBjaGlsZC5pZCkge1xuICAgICAgICA8cnYtY29tcG9uZW50LXJlbmRlcmVyXG4gICAgICAgICAgW2NvbXBvbmVudF09XCJjaGlsZFwiXG4gICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZU51bWJlclwiXG4gICAgICAgICAgW3RvdGFsUGFnZXNdPVwidG90YWxQYWdlc1wiXG4gICAgICAgICAgW3JlcG9ydFRpdGxlXT1cInJlcG9ydFRpdGxlXCI+XG4gICAgICAgIDwvcnYtY29tcG9uZW50LXJlbmRlcmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJ2LWNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRhaW5lclJlbmRlcmVyQ29tcG9uZW50IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcG9uZW50ITogQ29tcG9uZW50TW9kZWw7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcbiAgQElucHV0KCkgcGFnZU51bWJlciA9IDE7XG4gIEBJbnB1dCgpIHRvdGFsUGFnZXMgPSAxO1xuICBASW5wdXQoKSByZXBvcnRUaXRsZSA9ICcnO1xufVxuIl19
@@ -0,0 +1,67 @@
1
+ import { Component, Input, ChangeDetectionStrategy, inject, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DataResolverService } from '../../services/data-resolver.service';
4
+ import * as i0 from "@angular/core";
5
+ export class ImageRendererComponent {
6
+ constructor() {
7
+ this.pageNumber = 1;
8
+ this.totalPages = 1;
9
+ this.reportTitle = '';
10
+ this.imageError = signal(false);
11
+ this.dataResolver = inject(DataResolverService);
12
+ }
13
+ get imageUrl() {
14
+ if (this.component.imageConfig?.imageUrl) {
15
+ return this.component.imageConfig.imageUrl;
16
+ }
17
+ return this.dataResolver.resolveContent(this.component, this.data, this.pageNumber, this.totalPages, this.reportTitle);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ImageRendererComponent, isStandalone: true, selector: "rv-image-renderer", inputs: { component: "component", data: "data", pageNumber: "pageNumber", totalPages: "totalPages", reportTitle: "reportTitle" }, ngImport: i0, template: `
21
+ <div class="rv-image">
22
+ @if (imageUrl && !imageError()) {
23
+ <img [src]="imageUrl"
24
+ [style.object-fit]="component.imageConfig?.objectFit || 'contain'"
25
+ alt="Image"
26
+ (error)="imageError.set(true)">
27
+ } @else {
28
+ <div class="rv-image-placeholder">
29
+ <svg width="32" height="32" viewBox="0 0 24 24" fill="#999">
30
+ <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
31
+ </svg>
32
+ </div>
33
+ }
34
+ </div>
35
+ `, isInline: true, styles: [".rv-image{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.rv-image img{max-width:100%;max-height:100%}.rv-image-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:#f0f0f0;border:1px dashed #ccc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageRendererComponent, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: 'rv-image-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
40
+ <div class="rv-image">
41
+ @if (imageUrl && !imageError()) {
42
+ <img [src]="imageUrl"
43
+ [style.object-fit]="component.imageConfig?.objectFit || 'contain'"
44
+ alt="Image"
45
+ (error)="imageError.set(true)">
46
+ } @else {
47
+ <div class="rv-image-placeholder">
48
+ <svg width="32" height="32" viewBox="0 0 24 24" fill="#999">
49
+ <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>
50
+ </svg>
51
+ </div>
52
+ }
53
+ </div>
54
+ `, styles: [".rv-image{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.rv-image img{max-width:100%;max-height:100%}.rv-image-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:#f0f0f0;border:1px dashed #ccc}\n"] }]
55
+ }], propDecorators: { component: [{
56
+ type: Input,
57
+ args: [{ required: true }]
58
+ }], data: [{
59
+ type: Input
60
+ }], pageNumber: [{
61
+ type: Input
62
+ }], totalPages: [{
63
+ type: Input
64
+ }], reportTitle: [{
65
+ type: Input
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvaW1hZ2UtcmVuZGVyZXIvaW1hZ2UtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQThDM0UsTUFBTSxPQUFPLHNCQUFzQjtJQTVDbkM7UUErQ1csZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQixlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FVcEQ7SUFSQyxJQUFJLFFBQVE7UUFDVixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQzlFLENBQUM7SUFDSixDQUFDOytHQWxCVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiwrTUF2Q3ZCOzs7Ozs7Ozs7Ozs7Ozs7R0FlVCw4VkFqQlMsWUFBWTs7NEZBeUNYLHNCQUFzQjtrQkE1Q2xDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7R0FlVDs4QkF5QjBCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVJlc29sdmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEtcmVzb2x2ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J2LWltYWdlLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJydi1pbWFnZVwiPlxuICAgICAgQGlmIChpbWFnZVVybCAmJiAhaW1hZ2VFcnJvcigpKSB7XG4gICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVVybFwiXG4gICAgICAgICAgICAgW3N0eWxlLm9iamVjdC1maXRdPVwiY29tcG9uZW50LmltYWdlQ29uZmlnPy5vYmplY3RGaXQgfHwgJ2NvbnRhaW4nXCJcbiAgICAgICAgICAgICBhbHQ9XCJJbWFnZVwiXG4gICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3Iuc2V0KHRydWUpXCI+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJ2LWltYWdlLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiM5OTlcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXpcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJ2LWltYWdlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG4gICAgLnJ2LWltYWdlIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAucnYtaW1hZ2UtcGxhY2Vob2xkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VSZW5kZXJlckNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBvbmVudCE6IENvbXBvbmVudE1vZGVsO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHBhZ2VOdW1iZXIgPSAxO1xuICBASW5wdXQoKSB0b3RhbFBhZ2VzID0gMTtcbiAgQElucHV0KCkgcmVwb3J0VGl0bGUgPSAnJztcblxuICBpbWFnZUVycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGRhdGFSZXNvbHZlciA9IGluamVjdChEYXRhUmVzb2x2ZXJTZXJ2aWNlKTtcblxuICBnZXQgaW1hZ2VVcmwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnQuaW1hZ2VDb25maWc/LmltYWdlVXJsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuaW1hZ2VDb25maWcuaW1hZ2VVcmw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFSZXNvbHZlci5yZXNvbHZlQ29udGVudChcbiAgICAgIHRoaXMuY29tcG9uZW50LCB0aGlzLmRhdGEsIHRoaXMucGFnZU51bWJlciwgdGhpcy50b3RhbFBhZ2VzLCB0aGlzLnJlcG9ydFRpdGxlXG4gICAgKTtcbiAgfVxufVxuIl19