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.
- package/README.md +24 -0
- package/esm2022/lib/components/chart-renderer/chart-renderer.component.mjs +75 -0
- package/esm2022/lib/components/complex-table-renderer/complex-table-renderer.component.mjs +155 -0
- package/esm2022/lib/components/component-renderer/component-renderer.component.mjs +158 -0
- package/esm2022/lib/components/container-renderer/container-renderer.component.mjs +53 -0
- package/esm2022/lib/components/image-renderer/image-renderer.component.mjs +67 -0
- package/esm2022/lib/components/line-renderer/line-renderer.component.mjs +94 -0
- package/esm2022/lib/components/list-renderer/list-renderer.component.mjs +96 -0
- package/esm2022/lib/components/qrcode-renderer/qrcode-renderer.component.mjs +67 -0
- package/esm2022/lib/components/shape-renderer/shape-renderer.component.mjs +133 -0
- package/esm2022/lib/components/table-renderer/table-renderer.component.mjs +148 -0
- package/esm2022/lib/components/text-renderer/text-renderer.component.mjs +33 -0
- package/esm2022/lib/constants/page-sizes.mjs +3 -0
- package/esm2022/lib/constants/report-tokens.mjs +21 -0
- package/esm2022/lib/layout/report-band.component.mjs +33 -0
- package/esm2022/lib/layout/report-page.component.mjs +159 -0
- package/esm2022/lib/models/component.model.mjs +3 -0
- package/esm2022/lib/models/report-template.model.mjs +19 -0
- package/esm2022/lib/page-container/page-container.component.mjs +248 -0
- package/esm2022/lib/report-viewer.component.mjs +393 -0
- package/esm2022/lib/services/chart-options-builder.service.mjs +749 -0
- package/esm2022/lib/services/data-resolver.service.mjs +385 -0
- package/esm2022/lib/services/export.service.mjs +82 -0
- package/esm2022/lib/services/formatting.service.mjs +59 -0
- package/esm2022/lib/services/print.service.mjs +133 -0
- package/esm2022/lib/services/search.service.mjs +117 -0
- package/esm2022/lib/services/style-mapper.service.mjs +247 -0
- package/esm2022/lib/services/template-normalizer.service.mjs +213 -0
- package/esm2022/lib/services/template-validator.service.mjs +293 -0
- package/esm2022/lib/services/token-resolver.service.mjs +14 -0
- package/esm2022/lib/services/viewer-state.service.mjs +155 -0
- package/esm2022/lib/sidebar/sidebar-container.component.mjs +86 -0
- package/esm2022/lib/sidebar/thumbnail-sidebar.component.mjs +110 -0
- package/esm2022/lib/sidebar/toc-sidebar.component.mjs +155 -0
- package/esm2022/lib/toolbar/viewer-toolbar.component.mjs +486 -0
- package/esm2022/public-api.mjs +43 -0
- package/esm2022/snap-report-viewer.mjs +5 -0
- package/fesm2022/snap-report-viewer.mjs +5110 -0
- package/fesm2022/snap-report-viewer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/chart-renderer/chart-renderer.component.d.ts +14 -0
- package/lib/components/complex-table-renderer/complex-table-renderer.component.d.ts +17 -0
- package/lib/components/component-renderer/component-renderer.component.d.ts +14 -0
- package/lib/components/container-renderer/container-renderer.component.d.ts +11 -0
- package/lib/components/image-renderer/image-renderer.component.d.ts +14 -0
- package/lib/components/line-renderer/line-renderer.component.d.ts +10 -0
- package/lib/components/list-renderer/list-renderer.component.d.ts +16 -0
- package/lib/components/qrcode-renderer/qrcode-renderer.component.d.ts +16 -0
- package/lib/components/shape-renderer/shape-renderer.component.d.ts +11 -0
- package/lib/components/table-renderer/table-renderer.component.d.ts +20 -0
- package/lib/components/text-renderer/text-renderer.component.d.ts +13 -0
- package/lib/constants/page-sizes.d.ts +2 -0
- package/lib/constants/report-tokens.d.ts +8 -0
- package/lib/layout/report-band.component.d.ts +10 -0
- package/lib/layout/report-page.component.d.ts +21 -0
- package/lib/models/component.model.d.ts +315 -0
- package/lib/models/report-template.model.d.ts +122 -0
- package/lib/page-container/page-container.component.d.ts +29 -0
- package/lib/report-viewer.component.d.ts +51 -0
- package/lib/services/chart-options-builder.service.d.ts +31 -0
- package/lib/services/data-resolver.service.d.ts +27 -0
- package/lib/services/export.service.d.ts +11 -0
- package/lib/services/formatting.service.d.ts +10 -0
- package/lib/services/print.service.d.ts +12 -0
- package/lib/services/search.service.d.ts +13 -0
- package/lib/services/style-mapper.service.d.ts +14 -0
- package/lib/services/template-normalizer.service.d.ts +24 -0
- package/lib/services/template-validator.service.d.ts +19 -0
- package/lib/services/token-resolver.service.d.ts +6 -0
- package/lib/services/viewer-state.service.d.ts +49 -0
- package/lib/sidebar/sidebar-container.component.d.ts +8 -0
- package/lib/sidebar/thumbnail-sidebar.component.d.ts +15 -0
- package/lib/sidebar/toc-sidebar.component.d.ts +17 -0
- package/lib/toolbar/viewer-toolbar.component.d.ts +17 -0
- package/package.json +43 -0
- package/public-api.d.ts +35 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class LineRendererComponent {
|
|
5
|
+
get strokeColor() {
|
|
6
|
+
return this.component.lineConfig?.strokeColor || '#000000';
|
|
7
|
+
}
|
|
8
|
+
get arrowSize() {
|
|
9
|
+
return this.component.lineConfig?.arrowSize || 10;
|
|
10
|
+
}
|
|
11
|
+
get dashArray() {
|
|
12
|
+
switch (this.component.lineConfig?.lineType) {
|
|
13
|
+
case 'dashed': return '8,4';
|
|
14
|
+
case 'dotted': return '2,4';
|
|
15
|
+
default: return 'none';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LineRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LineRendererComponent, isStandalone: true, selector: "rv-line-renderer", inputs: { component: "component" }, ngImport: i0, template: `
|
|
20
|
+
<svg class="rv-line" width="100%" height="100%" preserveAspectRatio="none">
|
|
21
|
+
<defs>
|
|
22
|
+
@if (component.lineConfig?.endArrow) {
|
|
23
|
+
<marker [attr.id]="'rv-arrow-end-' + component.id"
|
|
24
|
+
[attr.markerWidth]="arrowSize"
|
|
25
|
+
[attr.markerHeight]="arrowSize * 0.7"
|
|
26
|
+
[attr.refX]="arrowSize - 1"
|
|
27
|
+
[attr.refY]="arrowSize * 0.35"
|
|
28
|
+
orient="auto">
|
|
29
|
+
<polygon [attr.points]="'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)"
|
|
30
|
+
[attr.fill]="strokeColor" />
|
|
31
|
+
</marker>
|
|
32
|
+
}
|
|
33
|
+
@if (component.lineConfig?.startArrow) {
|
|
34
|
+
<marker [attr.id]="'rv-arrow-start-' + component.id"
|
|
35
|
+
[attr.markerWidth]="arrowSize"
|
|
36
|
+
[attr.markerHeight]="arrowSize * 0.7"
|
|
37
|
+
refX="1"
|
|
38
|
+
[attr.refY]="arrowSize * 0.35"
|
|
39
|
+
orient="auto-start-reverse">
|
|
40
|
+
<polygon [attr.points]="'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)"
|
|
41
|
+
[attr.fill]="strokeColor" />
|
|
42
|
+
</marker>
|
|
43
|
+
}
|
|
44
|
+
</defs>
|
|
45
|
+
<line x1="0" y1="50%" x2="100%" y2="50%"
|
|
46
|
+
[attr.stroke]="strokeColor"
|
|
47
|
+
[attr.stroke-width]="component.lineConfig?.strokeWidth || 1"
|
|
48
|
+
[attr.stroke-dasharray]="dashArray"
|
|
49
|
+
[attr.marker-end]="component.lineConfig?.endArrow ? 'url(#rv-arrow-end-' + component.id + ')' : null"
|
|
50
|
+
[attr.marker-start]="component.lineConfig?.startArrow ? 'url(#rv-arrow-start-' + component.id + ')' : null" />
|
|
51
|
+
</svg>
|
|
52
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.rv-line{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LineRendererComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'rv-line-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57
|
+
<svg class="rv-line" width="100%" height="100%" preserveAspectRatio="none">
|
|
58
|
+
<defs>
|
|
59
|
+
@if (component.lineConfig?.endArrow) {
|
|
60
|
+
<marker [attr.id]="'rv-arrow-end-' + component.id"
|
|
61
|
+
[attr.markerWidth]="arrowSize"
|
|
62
|
+
[attr.markerHeight]="arrowSize * 0.7"
|
|
63
|
+
[attr.refX]="arrowSize - 1"
|
|
64
|
+
[attr.refY]="arrowSize * 0.35"
|
|
65
|
+
orient="auto">
|
|
66
|
+
<polygon [attr.points]="'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)"
|
|
67
|
+
[attr.fill]="strokeColor" />
|
|
68
|
+
</marker>
|
|
69
|
+
}
|
|
70
|
+
@if (component.lineConfig?.startArrow) {
|
|
71
|
+
<marker [attr.id]="'rv-arrow-start-' + component.id"
|
|
72
|
+
[attr.markerWidth]="arrowSize"
|
|
73
|
+
[attr.markerHeight]="arrowSize * 0.7"
|
|
74
|
+
refX="1"
|
|
75
|
+
[attr.refY]="arrowSize * 0.35"
|
|
76
|
+
orient="auto-start-reverse">
|
|
77
|
+
<polygon [attr.points]="'0 0, ' + arrowSize + ' ' + (arrowSize * 0.35) + ', 0 ' + (arrowSize * 0.7)"
|
|
78
|
+
[attr.fill]="strokeColor" />
|
|
79
|
+
</marker>
|
|
80
|
+
}
|
|
81
|
+
</defs>
|
|
82
|
+
<line x1="0" y1="50%" x2="100%" y2="50%"
|
|
83
|
+
[attr.stroke]="strokeColor"
|
|
84
|
+
[attr.stroke-width]="component.lineConfig?.strokeWidth || 1"
|
|
85
|
+
[attr.stroke-dasharray]="dashArray"
|
|
86
|
+
[attr.marker-end]="component.lineConfig?.endArrow ? 'url(#rv-arrow-end-' + component.id + ')' : null"
|
|
87
|
+
[attr.marker-start]="component.lineConfig?.startArrow ? 'url(#rv-arrow-start-' + component.id + ')' : null" />
|
|
88
|
+
</svg>
|
|
89
|
+
`, styles: [":host{display:block;width:100%;height:100%}.rv-line{display:block}\n"] }]
|
|
90
|
+
}], propDecorators: { component: [{
|
|
91
|
+
type: Input,
|
|
92
|
+
args: [{ required: true }]
|
|
93
|
+
}] } });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnQtdmlld2VyL3NyYy9saWIvY29tcG9uZW50cy9saW5lLXJlbmRlcmVyL2xpbmUtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUErQy9DLE1BQU0sT0FBTyxxQkFBcUI7SUFHaEMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDNUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztZQUM1QixLQUFLLFFBQVEsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDOytHQWpCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixnSEF2Q3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ1QsNklBbkNTLFlBQVk7OzRGQXlDWCxxQkFBcUI7a0JBNUNqQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNUOzhCQU8wQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnYtbGluZS1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c3ZnIGNsYXNzPVwicnYtbGluZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPlxuICAgICAgPGRlZnM+XG4gICAgICAgIEBpZiAoY29tcG9uZW50LmxpbmVDb25maWc/LmVuZEFycm93KSB7XG4gICAgICAgICAgPG1hcmtlciBbYXR0ci5pZF09XCIncnYtYXJyb3ctZW5kLScgKyBjb21wb25lbnQuaWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIubWFya2VyV2lkdGhdPVwiYXJyb3dTaXplXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLm1hcmtlckhlaWdodF09XCJhcnJvd1NpemUgKiAwLjdcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVmWF09XCJhcnJvd1NpemUgLSAxXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnJlZlldPVwiYXJyb3dTaXplICogMC4zNVwiXG4gICAgICAgICAgICAgICAgICBvcmllbnQ9XCJhdXRvXCI+XG4gICAgICAgICAgICA8cG9seWdvbiBbYXR0ci5wb2ludHNdPVwiJzAgMCwgJyArIGFycm93U2l6ZSArICcgJyArIChhcnJvd1NpemUgKiAwLjM1KSArICcsIDAgJyArIChhcnJvd1NpemUgKiAwLjcpXCJcbiAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoY29tcG9uZW50LmxpbmVDb25maWc/LnN0YXJ0QXJyb3cpIHtcbiAgICAgICAgICA8bWFya2VyIFthdHRyLmlkXT1cIidydi1hcnJvdy1zdGFydC0nICsgY29tcG9uZW50LmlkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLm1hcmtlcldpZHRoXT1cImFycm93U2l6ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5tYXJrZXJIZWlnaHRdPVwiYXJyb3dTaXplICogMC43XCJcbiAgICAgICAgICAgICAgICAgIHJlZlg9XCIxXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnJlZlldPVwiYXJyb3dTaXplICogMC4zNVwiXG4gICAgICAgICAgICAgICAgICBvcmllbnQ9XCJhdXRvLXN0YXJ0LXJldmVyc2VcIj5cbiAgICAgICAgICAgIDxwb2x5Z29uIFthdHRyLnBvaW50c109XCInMCAwLCAnICsgYXJyb3dTaXplICsgJyAnICsgKGFycm93U2l6ZSAqIDAuMzUpICsgJywgMCAnICsgKGFycm93U2l6ZSAqIDAuNylcIlxuICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJzdHJva2VDb2xvclwiIC8+XG4gICAgICAgICAgPC9tYXJrZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGVmcz5cbiAgICAgIDxsaW5lIHgxPVwiMFwiIHkxPVwiNTAlXCIgeDI9XCIxMDAlXCIgeTI9XCI1MCVcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJjb21wb25lbnQubGluZUNvbmZpZz8uc3Ryb2tlV2lkdGggfHwgMVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cImRhc2hBcnJheVwiXG4gICAgICAgICAgICBbYXR0ci5tYXJrZXItZW5kXT1cImNvbXBvbmVudC5saW5lQ29uZmlnPy5lbmRBcnJvdyA/ICd1cmwoI3J2LWFycm93LWVuZC0nICsgY29tcG9uZW50LmlkICsgJyknIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5tYXJrZXItc3RhcnRdPVwiY29tcG9uZW50LmxpbmVDb25maWc/LnN0YXJ0QXJyb3cgPyAndXJsKCNydi1hcnJvdy1zdGFydC0nICsgY29tcG9uZW50LmlkICsgJyknIDogbnVsbFwiIC8+XG4gICAgPC9zdmc+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgLnJ2LWxpbmUgeyBkaXNwbGF5OiBibG9jazsgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBMaW5lUmVuZGVyZXJDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb21wb25lbnQhOiBDb21wb25lbnRNb2RlbDtcblxuICBnZXQgc3Ryb2tlQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubGluZUNvbmZpZz8uc3Ryb2tlQ29sb3IgfHwgJyMwMDAwMDAnO1xuICB9XG5cbiAgZ2V0IGFycm93U2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5saW5lQ29uZmlnPy5hcnJvd1NpemUgfHwgMTA7XG4gIH1cblxuICBnZXQgZGFzaEFycmF5KCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmNvbXBvbmVudC5saW5lQ29uZmlnPy5saW5lVHlwZSkge1xuICAgICAgY2FzZSAnZGFzaGVkJzogcmV0dXJuICc4LDQnO1xuICAgICAgY2FzZSAnZG90dGVkJzogcmV0dXJuICcyLDQnO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICdub25lJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
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 ListRendererComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.dataResolver = inject(DataResolverService);
|
|
10
|
+
this.styleMapper = inject(StyleMapperService);
|
|
11
|
+
}
|
|
12
|
+
get listData() {
|
|
13
|
+
return this.dataResolver.resolveListData(this.component, this.data);
|
|
14
|
+
}
|
|
15
|
+
get listHeader() {
|
|
16
|
+
return this.dataResolver.resolveListHeader(this.component, this.data);
|
|
17
|
+
}
|
|
18
|
+
get headerStyles() {
|
|
19
|
+
const styles = this.component.style;
|
|
20
|
+
const result = {};
|
|
21
|
+
if (styles.fontFamily)
|
|
22
|
+
result['font-family'] = styles.fontFamily;
|
|
23
|
+
if (styles.fontSize)
|
|
24
|
+
result['font-size'] = styles.fontSize;
|
|
25
|
+
if (styles.color)
|
|
26
|
+
result['color'] = styles.color;
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
get itemStyles() {
|
|
30
|
+
return this.styleMapper.mapComponentStyles(this.component.style);
|
|
31
|
+
}
|
|
32
|
+
getBullet(index) {
|
|
33
|
+
return this.dataResolver.getBulletChar(this.component.listConfig?.bulletStyle, index);
|
|
34
|
+
}
|
|
35
|
+
formatItem(item) {
|
|
36
|
+
return this.dataResolver.formatListItem(item, this.component);
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ListRendererComponent, isStandalone: true, selector: "rv-list-renderer", inputs: { component: "component", data: "data" }, ngImport: i0, template: `
|
|
40
|
+
<div class="rv-list-container">
|
|
41
|
+
@if (component.listConfig?.showHeader !== false) {
|
|
42
|
+
<div class="rv-list-header" [ngStyle]="headerStyles">
|
|
43
|
+
{{ listHeader }}
|
|
44
|
+
</div>
|
|
45
|
+
}
|
|
46
|
+
<div class="rv-list-items">
|
|
47
|
+
@for (item of listData; track $index) {
|
|
48
|
+
<div class="rv-list-item"
|
|
49
|
+
[ngStyle]="itemStyles"
|
|
50
|
+
[class.with-bullet]="component.listConfig?.showBullets">
|
|
51
|
+
@if (component.listConfig?.showBullets) {
|
|
52
|
+
<span class="rv-bullet">{{ getBullet($index) }}</span>
|
|
53
|
+
}
|
|
54
|
+
<span class="rv-item-content">{{ formatItem(item) }}</span>
|
|
55
|
+
</div>
|
|
56
|
+
}
|
|
57
|
+
@if (listData.length === 0) {
|
|
58
|
+
<div class="rv-list-empty">No data available</div>
|
|
59
|
+
}
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
`, isInline: true, styles: [".rv-list-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;overflow:hidden}.rv-list-header{padding:6px 8px;font-weight:600;border-bottom:1px solid #e0e0e0;background:#f5f5f5}.rv-list-items{flex:1;overflow:auto}.rv-list-item{padding:4px 8px;border-bottom:1px solid #f0f0f0;font-size:inherit}.rv-list-item.with-bullet{display:flex;align-items:flex-start;gap:8px}.rv-bullet{min-width:16px;color:#666}.rv-item-content{flex:1}.rv-list-item:last-child{border-bottom:none}.rv-list-empty{padding:8px;color:#999;font-style:italic;font-size:11px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListRendererComponent, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'rv-list-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
67
|
+
<div class="rv-list-container">
|
|
68
|
+
@if (component.listConfig?.showHeader !== false) {
|
|
69
|
+
<div class="rv-list-header" [ngStyle]="headerStyles">
|
|
70
|
+
{{ listHeader }}
|
|
71
|
+
</div>
|
|
72
|
+
}
|
|
73
|
+
<div class="rv-list-items">
|
|
74
|
+
@for (item of listData; track $index) {
|
|
75
|
+
<div class="rv-list-item"
|
|
76
|
+
[ngStyle]="itemStyles"
|
|
77
|
+
[class.with-bullet]="component.listConfig?.showBullets">
|
|
78
|
+
@if (component.listConfig?.showBullets) {
|
|
79
|
+
<span class="rv-bullet">{{ getBullet($index) }}</span>
|
|
80
|
+
}
|
|
81
|
+
<span class="rv-item-content">{{ formatItem(item) }}</span>
|
|
82
|
+
</div>
|
|
83
|
+
}
|
|
84
|
+
@if (listData.length === 0) {
|
|
85
|
+
<div class="rv-list-empty">No data available</div>
|
|
86
|
+
}
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
`, styles: [".rv-list-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;overflow:hidden}.rv-list-header{padding:6px 8px;font-weight:600;border-bottom:1px solid #e0e0e0;background:#f5f5f5}.rv-list-items{flex:1;overflow:auto}.rv-list-item{padding:4px 8px;border-bottom:1px solid #f0f0f0;font-size:inherit}.rv-list-item.with-bullet{display:flex;align-items:flex-start;gap:8px}.rv-bullet{min-width:16px;color:#666}.rv-item-content{flex:1}.rv-list-item:last-child{border-bottom:none}.rv-list-empty{padding:8px;color:#999;font-style:italic;font-size:11px}\n"] }]
|
|
90
|
+
}], propDecorators: { component: [{
|
|
91
|
+
type: Input,
|
|
92
|
+
args: [{ required: true }]
|
|
93
|
+
}], data: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}] } });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnQtdmlld2VyL3NyYy9saWIvY29tcG9uZW50cy9saXN0LXJlbmRlcmVyL2xpc3QtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQW9FekUsTUFBTSxPQUFPLHFCQUFxQjtJQWxFbEM7UUFzRVUsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBOEJsRDtJQTVCQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsVUFBVTtZQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ2pFLElBQUksTUFBTSxDQUFDLFFBQVE7WUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLE1BQU0sQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7K0dBbENVLHFCQUFxQjttR0FBckIscUJBQXFCLDhIQTdEdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJULHFvQkF6QlMsWUFBWTs7NEZBK0RYLHFCQUFxQjtrQkFsRWpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCVDs4QkF1QzBCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IERhdGFSZXNvbHZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXJlc29sdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3R5bGVNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3R5bGUtbWFwcGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydi1saXN0LXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJydi1saXN0LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChjb21wb25lbnQubGlzdENvbmZpZz8uc2hvd0hlYWRlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJ2LWxpc3QtaGVhZGVyXCIgW25nU3R5bGVdPVwiaGVhZGVyU3R5bGVzXCI+XG4gICAgICAgICAge3sgbGlzdEhlYWRlciB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJydi1saXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgbGlzdERhdGE7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydi1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiaXRlbVN0eWxlc1wiXG4gICAgICAgICAgICAgICBbY2xhc3Mud2l0aC1idWxsZXRdPVwiY29tcG9uZW50Lmxpc3RDb25maWc/LnNob3dCdWxsZXRzXCI+XG4gICAgICAgICAgICBAaWYgKGNvbXBvbmVudC5saXN0Q29uZmlnPy5zaG93QnVsbGV0cykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ2LWJ1bGxldFwiPnt7IGdldEJ1bGxldCgkaW5kZXgpIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJydi1pdGVtLWNvbnRlbnRcIj57eyBmb3JtYXRJdGVtKGl0ZW0pIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobGlzdERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ2LWxpc3QtZW1wdHlcIj5ObyBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5ydi1saXN0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ydi1saXN0LWhlYWRlciB7XG4gICAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICB9XG4gICAgLnJ2LWxpc3QtaXRlbXMgeyBmbGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgfVxuICAgIC5ydi1saXN0LWl0ZW0ge1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIH1cbiAgICAucnYtbGlzdC1pdGVtLndpdGgtYnVsbGV0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIGdhcDogOHB4O1xuICAgIH1cbiAgICAucnYtYnVsbGV0IHsgbWluLXdpZHRoOiAxNnB4OyBjb2xvcjogIzY2NjsgfVxuICAgIC5ydi1pdGVtLWNvbnRlbnQgeyBmbGV4OiAxOyB9XG4gICAgLnJ2LWxpc3QtaXRlbTpsYXN0LWNoaWxkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfVxuICAgIC5ydi1saXN0LWVtcHR5IHtcbiAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgIGNvbG9yOiAjOTk5O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdFJlbmRlcmVyQ29tcG9uZW50IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcG9uZW50ITogQ29tcG9uZW50TW9kZWw7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcblxuICBwcml2YXRlIGRhdGFSZXNvbHZlciA9IGluamVjdChEYXRhUmVzb2x2ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdHlsZU1hcHBlciA9IGluamVjdChTdHlsZU1hcHBlclNlcnZpY2UpO1xuXG4gIGdldCBsaXN0RGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc29sdmVyLnJlc29sdmVMaXN0RGF0YSh0aGlzLmNvbXBvbmVudCwgdGhpcy5kYXRhKTtcbiAgfVxuXG4gIGdldCBsaXN0SGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc29sdmVyLnJlc29sdmVMaXN0SGVhZGVyKHRoaXMuY29tcG9uZW50LCB0aGlzLmRhdGEpO1xuICB9XG5cbiAgZ2V0IGhlYWRlclN0eWxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmNvbXBvbmVudC5zdHlsZTtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAoc3R5bGVzLmZvbnRGYW1pbHkpIHJlc3VsdFsnZm9udC1mYW1pbHknXSA9IHN0eWxlcy5mb250RmFtaWx5O1xuICAgIGlmIChzdHlsZXMuZm9udFNpemUpIHJlc3VsdFsnZm9udC1zaXplJ10gPSBzdHlsZXMuZm9udFNpemU7XG4gICAgaWYgKHN0eWxlcy5jb2xvcikgcmVzdWx0Wydjb2xvciddID0gc3R5bGVzLmNvbG9yO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgaXRlbVN0eWxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZU1hcHBlci5tYXBDb21wb25lbnRTdHlsZXModGhpcy5jb21wb25lbnQuc3R5bGUpO1xuICB9XG5cbiAgZ2V0QnVsbGV0KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFSZXNvbHZlci5nZXRCdWxsZXRDaGFyKHRoaXMuY29tcG9uZW50Lmxpc3RDb25maWc/LmJ1bGxldFN0eWxlLCBpbmRleCk7XG4gIH1cblxuICBmb3JtYXRJdGVtKGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc29sdmVyLmZvcm1hdExpc3RJdGVtKGl0ZW0sIHRoaXMuY29tcG9uZW50KTtcbiAgfVxufVxuIl19
|
|
@@ -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 QRCode from 'qrcode';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class QrcodeRendererComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.pageNumber = 1;
|
|
9
|
+
this.totalPages = 1;
|
|
10
|
+
this.reportTitle = '';
|
|
11
|
+
this.qrDataUrl = signal('');
|
|
12
|
+
this.dataResolver = inject(DataResolverService);
|
|
13
|
+
}
|
|
14
|
+
ngOnChanges(changes) {
|
|
15
|
+
this.generateQrCode();
|
|
16
|
+
}
|
|
17
|
+
generateQrCode() {
|
|
18
|
+
const content = this.dataResolver.resolveContent(this.component, this.data, this.pageNumber, this.totalPages, this.reportTitle) || 'QR Code';
|
|
19
|
+
QRCode.toDataURL(content, {
|
|
20
|
+
width: 256,
|
|
21
|
+
margin: 1,
|
|
22
|
+
color: { dark: '#000000', light: '#ffffff' },
|
|
23
|
+
}).then(url => {
|
|
24
|
+
this.qrDataUrl.set(url);
|
|
25
|
+
}).catch(() => {
|
|
26
|
+
// Keep placeholder on error
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QrcodeRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: QrcodeRendererComponent, isStandalone: true, selector: "rv-qrcode-renderer", inputs: { component: "component", data: "data", pageNumber: "pageNumber", totalPages: "totalPages", reportTitle: "reportTitle" }, usesOnChanges: true, ngImport: i0, template: `
|
|
31
|
+
@if (qrDataUrl()) {
|
|
32
|
+
<img [src]="qrDataUrl()" alt="QR Code" class="rv-qr-image">
|
|
33
|
+
} @else {
|
|
34
|
+
<div class="rv-qr-placeholder">
|
|
35
|
+
<svg width="48" height="48" viewBox="0 0 24 24" fill="#333">
|
|
36
|
+
<path d="M3 11h8V3H3v8zm2-6h4v4H5V5zM3 21h8v-8H3v8zm2-6h4v4H5v-4zM13 3v8h8V3h-8zm6 6h-4V5h4v4zM13 13h2v2h-2zM15 15h2v2h-2zM13 17h2v2h-2zM17 13h2v2h-2zM19 15h2v2h-2zM17 17h2v2h-2zM15 19h2v2h-2zM19 19h2v2h-2z"/>
|
|
37
|
+
</svg>
|
|
38
|
+
</div>
|
|
39
|
+
}
|
|
40
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.rv-qr-image{width:100%;height:100%;object-fit:contain;display:block}.rv-qr-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:#f5f5f5;border:1px solid #ddd}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QrcodeRendererComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{ selector: 'rv-qrcode-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
45
|
+
@if (qrDataUrl()) {
|
|
46
|
+
<img [src]="qrDataUrl()" alt="QR Code" class="rv-qr-image">
|
|
47
|
+
} @else {
|
|
48
|
+
<div class="rv-qr-placeholder">
|
|
49
|
+
<svg width="48" height="48" viewBox="0 0 24 24" fill="#333">
|
|
50
|
+
<path d="M3 11h8V3H3v8zm2-6h4v4H5V5zM3 21h8v-8H3v8zm2-6h4v4H5v-4zM13 3v8h8V3h-8zm6 6h-4V5h4v4zM13 13h2v2h-2zM15 15h2v2h-2zM13 17h2v2h-2zM17 13h2v2h-2zM19 15h2v2h-2zM17 17h2v2h-2zM15 19h2v2h-2zM19 19h2v2h-2z"/>
|
|
51
|
+
</svg>
|
|
52
|
+
</div>
|
|
53
|
+
}
|
|
54
|
+
`, styles: [":host{display:block;width:100%;height:100%}.rv-qr-image{width:100%;height:100%;object-fit:contain;display:block}.rv-qr-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:#f5f5f5;border:1px solid #ddd}\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL3FyY29kZS1yZW5kZXJlci9xcmNvZGUtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUE0QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7O0FBZ0M1QixNQUFNLE9BQU8sdUJBQXVCO0lBOUJwQztRQWlDVyxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFdkIsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQXFCcEQ7SUFuQkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUM5RSxJQUFJLFNBQVMsQ0FBQztRQUVmLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3hCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7U0FDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDWiw0QkFBNEI7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTdCVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixxT0F6QnhCOzs7Ozs7Ozs7O0dBVVQscVVBWlMsWUFBWTs7NEZBMkJYLHVCQUF1QjtrQkE5Qm5DLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7O0dBVVQ7OEJBZ0IwQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVJlc29sdmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEtcmVzb2x2ZXIuc2VydmljZSc7XG5pbXBvcnQgUVJDb2RlIGZyb20gJ3FyY29kZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J2LXFyY29kZS1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKHFyRGF0YVVybCgpKSB7XG4gICAgICA8aW1nIFtzcmNdPVwicXJEYXRhVXJsKClcIiBhbHQ9XCJRUiBDb2RlXCIgY2xhc3M9XCJydi1xci1pbWFnZVwiPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cInJ2LXFyLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCIjMzMzXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0zIDExaDhWM0gzdjh6bTItNmg0djRINVY1ek0zIDIxaDh2LThIM3Y4em0yLTZoNHY0SDV2LTR6TTEzIDN2OGg4VjNoLTh6bTYgNmgtNFY1aDR2NHpNMTMgMTNoMnYyaC0yek0xNSAxNWgydjJoLTJ6TTEzIDE3aDJ2MmgtMnpNMTcgMTNoMnYyaC0yek0xOSAxNWgydjJoLTJ6TTE3IDE3aDJ2MmgtMnpNMTUgMTloMnYyaC0yek0xOSAxOWgydjJoLTJ6XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IH1cbiAgICAucnYtcXItaW1hZ2UgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5ydi1xci1wbGFjZWhvbGRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFFyY29kZVJlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcG9uZW50ITogQ29tcG9uZW50TW9kZWw7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcbiAgQElucHV0KCkgcGFnZU51bWJlciA9IDE7XG4gIEBJbnB1dCgpIHRvdGFsUGFnZXMgPSAxO1xuICBASW5wdXQoKSByZXBvcnRUaXRsZSA9ICcnO1xuXG4gIHFyRGF0YVVybCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIGRhdGFSZXNvbHZlciA9IGluamVjdChEYXRhUmVzb2x2ZXJTZXJ2aWNlKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0ZVFyQ29kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVFyQ29kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kYXRhUmVzb2x2ZXIucmVzb2x2ZUNvbnRlbnQoXG4gICAgICB0aGlzLmNvbXBvbmVudCwgdGhpcy5kYXRhLCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMudG90YWxQYWdlcywgdGhpcy5yZXBvcnRUaXRsZVxuICAgICkgfHwgJ1FSIENvZGUnO1xuXG4gICAgUVJDb2RlLnRvRGF0YVVSTChjb250ZW50LCB7XG4gICAgICB3aWR0aDogMjU2LFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgY29sb3I6IHsgZGFyazogJyMwMDAwMDAnLCBsaWdodDogJyNmZmZmZmYnIH0sXG4gICAgfSkudGhlbih1cmwgPT4ge1xuICAgICAgdGhpcy5xckRhdGFVcmwuc2V0KHVybCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgLy8gS2VlcCBwbGFjZWhvbGRlciBvbiBlcnJvclxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ShapeRendererComponent {
|
|
5
|
+
get fillColor() { return this.component.shapeConfig?.fillColor || '#e3f2fd'; }
|
|
6
|
+
get strokeColor() { return this.component.shapeConfig?.strokeColor || '#1976d2'; }
|
|
7
|
+
get strokeWidth() { return this.component.shapeConfig?.strokeWidth || 2; }
|
|
8
|
+
get opacity() { return this.component.shapeConfig?.opacity || 1; }
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ShapeRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ShapeRendererComponent, isStandalone: true, selector: "rv-shape-renderer", inputs: { component: "component" }, ngImport: i0, template: `
|
|
11
|
+
<svg class="rv-shape" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none">
|
|
12
|
+
@switch (component.shapeConfig?.shapeType) {
|
|
13
|
+
@case ('rectangle') {
|
|
14
|
+
<rect x="2" y="2" width="96" height="96"
|
|
15
|
+
[attr.rx]="component.shapeConfig?.cornerRadius || 0"
|
|
16
|
+
[attr.ry]="component.shapeConfig?.cornerRadius || 0"
|
|
17
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
18
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
19
|
+
}
|
|
20
|
+
@case ('circle') {
|
|
21
|
+
<circle cx="50" cy="50" r="48"
|
|
22
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
23
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
24
|
+
}
|
|
25
|
+
@case ('ellipse') {
|
|
26
|
+
<ellipse cx="50" cy="50" rx="48" ry="48"
|
|
27
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
28
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
29
|
+
}
|
|
30
|
+
@case ('triangle') {
|
|
31
|
+
<polygon points="50,2 98,98 2,98"
|
|
32
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
33
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
34
|
+
}
|
|
35
|
+
@case ('diamond') {
|
|
36
|
+
<polygon points="50,2 98,50 50,98 2,50"
|
|
37
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
38
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
39
|
+
}
|
|
40
|
+
@case ('pentagon') {
|
|
41
|
+
<polygon points="50,2 97,38 79,97 21,97 3,38"
|
|
42
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
43
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
44
|
+
}
|
|
45
|
+
@case ('hexagon') {
|
|
46
|
+
<polygon points="50,2 93,25 93,75 50,98 7,75 7,25"
|
|
47
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
48
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
49
|
+
}
|
|
50
|
+
@case ('star') {
|
|
51
|
+
<polygon points="50,2 61,39 98,39 68,61 79,98 50,75 21,98 32,61 2,39 39,39"
|
|
52
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
53
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
54
|
+
}
|
|
55
|
+
@case ('arrow') {
|
|
56
|
+
<polygon points="2,35 60,35 60,15 98,50 60,85 60,65 2,65"
|
|
57
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
58
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
59
|
+
}
|
|
60
|
+
@default {
|
|
61
|
+
<rect x="2" y="2" width="96" height="96"
|
|
62
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
63
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</svg>
|
|
67
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.rv-shape{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ShapeRendererComponent, decorators: [{
|
|
70
|
+
type: Component,
|
|
71
|
+
args: [{ selector: 'rv-shape-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
72
|
+
<svg class="rv-shape" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none">
|
|
73
|
+
@switch (component.shapeConfig?.shapeType) {
|
|
74
|
+
@case ('rectangle') {
|
|
75
|
+
<rect x="2" y="2" width="96" height="96"
|
|
76
|
+
[attr.rx]="component.shapeConfig?.cornerRadius || 0"
|
|
77
|
+
[attr.ry]="component.shapeConfig?.cornerRadius || 0"
|
|
78
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
79
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
80
|
+
}
|
|
81
|
+
@case ('circle') {
|
|
82
|
+
<circle cx="50" cy="50" r="48"
|
|
83
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
84
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
85
|
+
}
|
|
86
|
+
@case ('ellipse') {
|
|
87
|
+
<ellipse cx="50" cy="50" rx="48" ry="48"
|
|
88
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
89
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
90
|
+
}
|
|
91
|
+
@case ('triangle') {
|
|
92
|
+
<polygon points="50,2 98,98 2,98"
|
|
93
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
94
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
95
|
+
}
|
|
96
|
+
@case ('diamond') {
|
|
97
|
+
<polygon points="50,2 98,50 50,98 2,50"
|
|
98
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
99
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
100
|
+
}
|
|
101
|
+
@case ('pentagon') {
|
|
102
|
+
<polygon points="50,2 97,38 79,97 21,97 3,38"
|
|
103
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
104
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
105
|
+
}
|
|
106
|
+
@case ('hexagon') {
|
|
107
|
+
<polygon points="50,2 93,25 93,75 50,98 7,75 7,25"
|
|
108
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
109
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
110
|
+
}
|
|
111
|
+
@case ('star') {
|
|
112
|
+
<polygon points="50,2 61,39 98,39 68,61 79,98 50,75 21,98 32,61 2,39 39,39"
|
|
113
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
114
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
115
|
+
}
|
|
116
|
+
@case ('arrow') {
|
|
117
|
+
<polygon points="2,35 60,35 60,15 98,50 60,85 60,65 2,65"
|
|
118
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
119
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
120
|
+
}
|
|
121
|
+
@default {
|
|
122
|
+
<rect x="2" y="2" width="96" height="96"
|
|
123
|
+
[attr.fill]="fillColor" [attr.stroke]="strokeColor"
|
|
124
|
+
[attr.stroke-width]="strokeWidth" [attr.opacity]="opacity" />
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
</svg>
|
|
128
|
+
`, styles: [":host{display:block;width:100%;height:100%}.rv-shape{display:block}\n"] }]
|
|
129
|
+
}], propDecorators: { component: [{
|
|
130
|
+
type: Input,
|
|
131
|
+
args: [{ required: true }]
|
|
132
|
+
}] } });
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvc2hhcGUtcmVuZGVyZXIvc2hhcGUtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUF1RS9DLE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsSUFBSSxTQUFTLEtBQWEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0RixJQUFJLFdBQVcsS0FBYSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFGLElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxPQUFPLEtBQWEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzsrR0FOL0Qsc0JBQXNCO21HQUF0QixzQkFBc0IsaUhBL0R2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURULDhJQTNEUyxZQUFZOzs0RkFpRVgsc0JBQXNCO2tCQXBFbEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlEVDs4QkFPMEIsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J2LXNoYXBlLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzdmcgY2xhc3M9XCJydi1zaGFwZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDEwMCAxMDBcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPlxuICAgICAgQHN3aXRjaCAoY29tcG9uZW50LnNoYXBlQ29uZmlnPy5zaGFwZVR5cGUpIHtcbiAgICAgICAgQGNhc2UgKCdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiOTZcIiBoZWlnaHQ9XCI5NlwiXG4gICAgICAgICAgICAgICAgW2F0dHIucnhdPVwiY29tcG9uZW50LnNoYXBlQ29uZmlnPy5jb3JuZXJSYWRpdXMgfHwgMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucnldPVwiY29tcG9uZW50LnNoYXBlQ29uZmlnPy5jb3JuZXJSYWRpdXMgfHwgMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJmaWxsQ29sb3JcIiBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiIFthdHRyLm9wYWNpdHldPVwib3BhY2l0eVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdjaXJjbGUnKSB7XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0OFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImZpbGxDb2xvclwiIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic3Ryb2tlV2lkdGhcIiBbYXR0ci5vcGFjaXR5XT1cIm9wYWNpdHlcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnZWxsaXBzZScpIHtcbiAgICAgICAgICA8ZWxsaXBzZSBjeD1cIjUwXCIgY3k9XCI1MFwiIHJ4PVwiNDhcIiByeT1cIjQ4XCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImZpbGxDb2xvclwiIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCIgW2F0dHIub3BhY2l0eV09XCJvcGFjaXR5XCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ3RyaWFuZ2xlJykge1xuICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjUwLDIgOTgsOTggMiw5OFwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJmaWxsQ29sb3JcIiBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiIFthdHRyLm9wYWNpdHldPVwib3BhY2l0eVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdkaWFtb25kJykge1xuICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjUwLDIgOTgsNTAgNTAsOTggMiw1MFwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJmaWxsQ29sb3JcIiBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiIFthdHRyLm9wYWNpdHldPVwib3BhY2l0eVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdwZW50YWdvbicpIHtcbiAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCI1MCwyIDk3LDM4IDc5LDk3IDIxLDk3IDMsMzhcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiZmlsbENvbG9yXCIgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic3Ryb2tlV2lkdGhcIiBbYXR0ci5vcGFjaXR5XT1cIm9wYWNpdHlcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICgnaGV4YWdvbicpIHtcbiAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCI1MCwyIDkzLDI1IDkzLDc1IDUwLDk4IDcsNzUgNywyNVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJmaWxsQ29sb3JcIiBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiIFthdHRyLm9wYWNpdHldPVwib3BhY2l0eVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdzdGFyJykge1xuICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjUwLDIgNjEsMzkgOTgsMzkgNjgsNjEgNzksOTggNTAsNzUgMjEsOTggMzIsNjEgMiwzOSAzOSwzOVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJmaWxsQ29sb3JcIiBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiIFthdHRyLm9wYWNpdHldPVwib3BhY2l0eVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdhcnJvdycpIHtcbiAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIyLDM1IDYwLDM1IDYwLDE1IDk4LDUwIDYwLDg1IDYwLDY1IDIsNjVcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiZmlsbENvbG9yXCIgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic3Ryb2tlV2lkdGhcIiBbYXR0ci5vcGFjaXR5XT1cIm9wYWNpdHlcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIyXCIgd2lkdGg9XCI5NlwiIGhlaWdodD1cIjk2XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImZpbGxDb2xvclwiIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCIgW2F0dHIub3BhY2l0eV09XCJvcGFjaXR5XCIgLz5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvc3ZnPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfVxuICAgIC5ydi1zaGFwZSB7IGRpc3BsYXk6IGJsb2NrOyB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXBlUmVuZGVyZXJDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb21wb25lbnQhOiBDb21wb25lbnRNb2RlbDtcblxuICBnZXQgZmlsbENvbG9yKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbXBvbmVudC5zaGFwZUNvbmZpZz8uZmlsbENvbG9yIHx8ICcjZTNmMmZkJzsgfVxuICBnZXQgc3Ryb2tlQ29sb3IoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29tcG9uZW50LnNoYXBlQ29uZmlnPy5zdHJva2VDb2xvciB8fCAnIzE5NzZkMic7IH1cbiAgZ2V0IHN0cm9rZVdpZHRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbXBvbmVudC5zaGFwZUNvbmZpZz8uc3Ryb2tlV2lkdGggfHwgMjsgfVxuICBnZXQgb3BhY2l0eSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb21wb25lbnQuc2hhcGVDb25maWc/Lm9wYWNpdHkgfHwgMTsgfVxufVxuIl19
|
|
@@ -0,0 +1,148 @@
|
|
|
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 TableRendererComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.dataResolver = inject(DataResolverService);
|
|
10
|
+
this.styleMapper = inject(StyleMapperService);
|
|
11
|
+
}
|
|
12
|
+
get tableData() {
|
|
13
|
+
return this.dataResolver.resolveTableData(this.component, this.data);
|
|
14
|
+
}
|
|
15
|
+
get isDynamic() {
|
|
16
|
+
return this.dataResolver.shouldShowDynamicTable(this.component, this.data);
|
|
17
|
+
}
|
|
18
|
+
get dynamicHeaders() {
|
|
19
|
+
return this.dataResolver.getDynamicTableHeaders(this.component, this.data);
|
|
20
|
+
}
|
|
21
|
+
get tableStyle() {
|
|
22
|
+
return this.styleMapper.mapTableStyle(this.component);
|
|
23
|
+
}
|
|
24
|
+
getHeaderStyle(colIndex, col) {
|
|
25
|
+
return this.styleMapper.mapHeaderStyle(this.component, colIndex, col);
|
|
26
|
+
}
|
|
27
|
+
getRowStyle(rowIndex) {
|
|
28
|
+
return this.styleMapper.mapRowStyle(this.component, rowIndex, this.tableData.length);
|
|
29
|
+
}
|
|
30
|
+
getBoundCellStyle(colIndex, col) {
|
|
31
|
+
return this.styleMapper.mapCellStyle(this.component, colIndex, col);
|
|
32
|
+
}
|
|
33
|
+
getDynamicCellStyle(colIndex) {
|
|
34
|
+
return this.styleMapper.mapCellStyle(this.component, colIndex);
|
|
35
|
+
}
|
|
36
|
+
formatCell(row, col) {
|
|
37
|
+
return this.dataResolver.formatCellValue(row, col);
|
|
38
|
+
}
|
|
39
|
+
getCellValue(row, field) {
|
|
40
|
+
return this.dataResolver.getDynamicCellValue(row, field);
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableRendererComponent, isStandalone: true, selector: "rv-table-renderer", inputs: { component: "component", data: "data" }, ngImport: i0, template: `
|
|
44
|
+
@if (component.columns) {
|
|
45
|
+
@if (isDynamic) {
|
|
46
|
+
<table class="rv-table rv-dynamic-table" [ngStyle]="tableStyle">
|
|
47
|
+
<thead>
|
|
48
|
+
<tr>
|
|
49
|
+
@for (field of dynamicHeaders; track field; let colIdx = $index) {
|
|
50
|
+
<th [ngStyle]="getHeaderStyle(colIdx)">{{ field }}</th>
|
|
51
|
+
}
|
|
52
|
+
</tr>
|
|
53
|
+
</thead>
|
|
54
|
+
<tbody>
|
|
55
|
+
@for (row of tableData; track rowIdx; let rowIdx = $index) {
|
|
56
|
+
<tr [ngStyle]="getRowStyle(rowIdx)">
|
|
57
|
+
@for (field of dynamicHeaders; track field; let colIdx = $index) {
|
|
58
|
+
<td [ngStyle]="getDynamicCellStyle(colIdx)">{{ getCellValue(row, field) }}</td>
|
|
59
|
+
}
|
|
60
|
+
</tr>
|
|
61
|
+
}
|
|
62
|
+
</tbody>
|
|
63
|
+
</table>
|
|
64
|
+
} @else {
|
|
65
|
+
<table class="rv-table" [ngStyle]="tableStyle">
|
|
66
|
+
<thead>
|
|
67
|
+
<tr>
|
|
68
|
+
@for (col of component.columns; track col.id; let colIdx = $index) {
|
|
69
|
+
<th [ngStyle]="getHeaderStyle(colIdx, col)">{{ col.header }}</th>
|
|
70
|
+
}
|
|
71
|
+
</tr>
|
|
72
|
+
</thead>
|
|
73
|
+
<tbody>
|
|
74
|
+
@for (row of tableData; track rowIdx; let rowIdx = $index) {
|
|
75
|
+
<tr [ngStyle]="getRowStyle(rowIdx)">
|
|
76
|
+
@for (col of component.columns; track col.id; let colIdx = $index) {
|
|
77
|
+
<td [ngStyle]="getBoundCellStyle(colIdx, col)">{{ formatCell(row, col) }}</td>
|
|
78
|
+
}
|
|
79
|
+
</tr>
|
|
80
|
+
}
|
|
81
|
+
@if (tableData.length === 0) {
|
|
82
|
+
<tr>
|
|
83
|
+
<td [attr.colspan]="component.columns!.length" class="rv-no-data">No data available</td>
|
|
84
|
+
</tr>
|
|
85
|
+
}
|
|
86
|
+
</tbody>
|
|
87
|
+
</table>
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
`, isInline: true, styles: [".rv-table{width:100%;border-collapse:collapse;font-size:inherit}.rv-table th,.rv-table td{border:1px solid #ddd;padding:6px 8px;text-align:left}.rv-table th{background:#f5f5f5;font-weight:600}.rv-no-data{text-align:center;color:#999;font-style:italic;padding:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
91
|
+
}
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRendererComponent, decorators: [{
|
|
93
|
+
type: Component,
|
|
94
|
+
args: [{ selector: 'rv-table-renderer', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
95
|
+
@if (component.columns) {
|
|
96
|
+
@if (isDynamic) {
|
|
97
|
+
<table class="rv-table rv-dynamic-table" [ngStyle]="tableStyle">
|
|
98
|
+
<thead>
|
|
99
|
+
<tr>
|
|
100
|
+
@for (field of dynamicHeaders; track field; let colIdx = $index) {
|
|
101
|
+
<th [ngStyle]="getHeaderStyle(colIdx)">{{ field }}</th>
|
|
102
|
+
}
|
|
103
|
+
</tr>
|
|
104
|
+
</thead>
|
|
105
|
+
<tbody>
|
|
106
|
+
@for (row of tableData; track rowIdx; let rowIdx = $index) {
|
|
107
|
+
<tr [ngStyle]="getRowStyle(rowIdx)">
|
|
108
|
+
@for (field of dynamicHeaders; track field; let colIdx = $index) {
|
|
109
|
+
<td [ngStyle]="getDynamicCellStyle(colIdx)">{{ getCellValue(row, field) }}</td>
|
|
110
|
+
}
|
|
111
|
+
</tr>
|
|
112
|
+
}
|
|
113
|
+
</tbody>
|
|
114
|
+
</table>
|
|
115
|
+
} @else {
|
|
116
|
+
<table class="rv-table" [ngStyle]="tableStyle">
|
|
117
|
+
<thead>
|
|
118
|
+
<tr>
|
|
119
|
+
@for (col of component.columns; track col.id; let colIdx = $index) {
|
|
120
|
+
<th [ngStyle]="getHeaderStyle(colIdx, col)">{{ col.header }}</th>
|
|
121
|
+
}
|
|
122
|
+
</tr>
|
|
123
|
+
</thead>
|
|
124
|
+
<tbody>
|
|
125
|
+
@for (row of tableData; track rowIdx; let rowIdx = $index) {
|
|
126
|
+
<tr [ngStyle]="getRowStyle(rowIdx)">
|
|
127
|
+
@for (col of component.columns; track col.id; let colIdx = $index) {
|
|
128
|
+
<td [ngStyle]="getBoundCellStyle(colIdx, col)">{{ formatCell(row, col) }}</td>
|
|
129
|
+
}
|
|
130
|
+
</tr>
|
|
131
|
+
}
|
|
132
|
+
@if (tableData.length === 0) {
|
|
133
|
+
<tr>
|
|
134
|
+
<td [attr.colspan]="component.columns!.length" class="rv-no-data">No data available</td>
|
|
135
|
+
</tr>
|
|
136
|
+
}
|
|
137
|
+
</tbody>
|
|
138
|
+
</table>
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
`, styles: [".rv-table{width:100%;border-collapse:collapse;font-size:inherit}.rv-table th,.rv-table td{border:1px solid #ddd;padding:6px 8px;text-align:left}.rv-table th{background:#f5f5f5;font-weight:600}.rv-no-data{text-align:center;color:#999;font-style:italic;padding:20px}\n"] }]
|
|
142
|
+
}], propDecorators: { component: [{
|
|
143
|
+
type: Input,
|
|
144
|
+
args: [{ required: true }]
|
|
145
|
+
}], data: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}] } });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcmVuZGVyZXIvdGFibGUtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQThFekUsTUFBTSxPQUFPLHNCQUFzQjtJQTVFbkM7UUFnRlUsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBeUNsRDtJQXZDQyxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVM7UUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxHQUFTO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUSxFQUFFLEtBQWE7UUFDbEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDOytHQTdDVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiwrSEF2RXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVCxtVkFqRFMsWUFBWTs7NEZBeUVYLHNCQUFzQjtrQkE1RWxDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFDTix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVDs4QkF5QjBCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IERhdGFSZXNvbHZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXJlc29sdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3R5bGVNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3R5bGUtbWFwcGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydi10YWJsZS1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGNvbXBvbmVudC5jb2x1bW5zKSB7XG4gICAgICBAaWYgKGlzRHluYW1pYykge1xuICAgICAgICA8dGFibGUgY2xhc3M9XCJydi10YWJsZSBydi1keW5hbWljLXRhYmxlXCIgW25nU3R5bGVdPVwidGFibGVTdHlsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgZHluYW1pY0hlYWRlcnM7IHRyYWNrIGZpZWxkOyBsZXQgY29sSWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRoIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKGNvbElkeClcIj57eyBmaWVsZCB9fTwvdGg+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGVEYXRhOyB0cmFjayByb3dJZHg7IGxldCByb3dJZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0lkeClcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBkeW5hbWljSGVhZGVyczsgdHJhY2sgZmllbGQ7IGxldCBjb2xJZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXREeW5hbWljQ2VsbFN0eWxlKGNvbElkeClcIj57eyBnZXRDZWxsVmFsdWUocm93LCBmaWVsZCkgfX08L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInJ2LXRhYmxlXCIgW25nU3R5bGVdPVwidGFibGVTdHlsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbXBvbmVudC5jb2x1bW5zOyB0cmFjayBjb2wuaWQ7IGxldCBjb2xJZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8dGggW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoY29sSWR4LCBjb2wpXCI+e3sgY29sLmhlYWRlciB9fTwvdGg+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGVEYXRhOyB0cmFjayByb3dJZHg7IGxldCByb3dJZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0lkeClcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgY29tcG9uZW50LmNvbHVtbnM7IHRyYWNrIGNvbC5pZDsgbGV0IGNvbElkeCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldEJvdW5kQ2VsbFN0eWxlKGNvbElkeCwgY29sKVwiPnt7IGZvcm1hdENlbGwocm93LCBjb2wpIH19PC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHRhYmxlRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbXBvbmVudC5jb2x1bW5zIS5sZW5ndGhcIiBjbGFzcz1cInJ2LW5vLWRhdGFcIj5ObyBkYXRhIGF2YWlsYWJsZTwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucnYtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIH1cbiAgICAucnYtdGFibGUgdGgsIC5ydi10YWJsZSB0ZCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIC5ydi10YWJsZSB0aCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgLnJ2LW5vLWRhdGEge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6ICM5OTk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVSZW5kZXJlckNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBvbmVudCE6IENvbXBvbmVudE1vZGVsO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG5cbiAgcHJpdmF0ZSBkYXRhUmVzb2x2ZXIgPSBpbmplY3QoRGF0YVJlc29sdmVyU2VydmljZSk7XG4gIHByaXZhdGUgc3R5bGVNYXBwZXIgPSBpbmplY3QoU3R5bGVNYXBwZXJTZXJ2aWNlKTtcblxuICBnZXQgdGFibGVEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhUmVzb2x2ZXIucmVzb2x2ZVRhYmxlRGF0YSh0aGlzLmNvbXBvbmVudCwgdGhpcy5kYXRhKTtcbiAgfVxuXG4gIGdldCBpc0R5bmFtaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVJlc29sdmVyLnNob3VsZFNob3dEeW5hbWljVGFibGUodGhpcy5jb21wb25lbnQsIHRoaXMuZGF0YSk7XG4gIH1cblxuICBnZXQgZHluYW1pY0hlYWRlcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFSZXNvbHZlci5nZXREeW5hbWljVGFibGVIZWFkZXJzKHRoaXMuY29tcG9uZW50LCB0aGlzLmRhdGEpO1xuICB9XG5cbiAgZ2V0IHRhYmxlU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVNYXBwZXIubWFwVGFibGVTdHlsZSh0aGlzLmNvbXBvbmVudCk7XG4gIH1cblxuICBnZXRIZWFkZXJTdHlsZShjb2xJbmRleDogbnVtYmVyLCBjb2w/OiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZU1hcHBlci5tYXBIZWFkZXJTdHlsZSh0aGlzLmNvbXBvbmVudCwgY29sSW5kZXgsIGNvbCk7XG4gIH1cblxuICBnZXRSb3dTdHlsZShyb3dJbmRleDogbnVtYmVyKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVNYXBwZXIubWFwUm93U3R5bGUodGhpcy5jb21wb25lbnQsIHJvd0luZGV4LCB0aGlzLnRhYmxlRGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgZ2V0Qm91bmRDZWxsU3R5bGUoY29sSW5kZXg6IG51bWJlciwgY29sPzogYW55KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVNYXBwZXIubWFwQ2VsbFN0eWxlKHRoaXMuY29tcG9uZW50LCBjb2xJbmRleCwgY29sKTtcbiAgfVxuXG4gIGdldER5bmFtaWNDZWxsU3R5bGUoY29sSW5kZXg6IG51bWJlcik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0eWxlTWFwcGVyLm1hcENlbGxTdHlsZSh0aGlzLmNvbXBvbmVudCwgY29sSW5kZXgpO1xuICB9XG5cbiAgZm9ybWF0Q2VsbChyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFSZXNvbHZlci5mb3JtYXRDZWxsVmFsdWUocm93LCBjb2wpO1xuICB9XG5cbiAgZ2V0Q2VsbFZhbHVlKHJvdzogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhUmVzb2x2ZXIuZ2V0RHluYW1pY0NlbGxWYWx1ZShyb3csIGZpZWxkKTtcbiAgfVxufVxuIl19
|