@c8y/ngx-components 1021.22.149 → 1021.22.150
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/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/locales/de.po +53 -46
- package/locales/es.po +32 -68
- package/locales/fr.po +41 -55
- package/locales/ja_JP.po +16 -68
- package/locales/ko.po +41 -57
- package/locales/nl.po +28 -41
- package/locales/pl.po +30 -44
- package/locales/pt_BR.po +32 -46
- package/locales/zh_CN.po +39 -55
- package/locales/zh_TW.po +47 -57
- package/package.json +1 -1
|
@@ -35,14 +35,14 @@ export class InfoGaugeWidgetViewComponent {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, deps: [{ token: i1.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: InfoGaugeCurrentMeasurementPipe, name: "infoGaugeCurrentMeasurement" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }] }); }
|
|
39
39
|
}
|
|
40
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, decorators: [{
|
|
41
41
|
type: Component,
|
|
42
|
-
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
42
|
+
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n" }]
|
|
43
43
|
}], ctorParameters: () => [{ type: i1.ContextDashboardComponent, decorators: [{
|
|
44
44
|
type: Optional
|
|
45
45
|
}] }], propDecorators: { config: [{
|
|
46
46
|
type: Input
|
|
47
47
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sNEJBQTRCO0lBVXZDLFlBQWdDLFNBQW9DO1FBQXBDLGNBQVMsR0FBVCxTQUFTLENBQTJCO1FBSnBFLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUzQixpQkFBWSxHQUFHLE9BQU8sQ0FBQztJQUVnRCxDQUFDO0lBRXhFLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFTyxpQ0FBaUMsQ0FBQyxTQUFxQjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs4R0FyQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK0lBSjVCLENBQUMsMEJBQTBCLENBQUMsK0NDWHpDLHc0SEEySEEsNENEOUdZLElBQUksNkZBQUUsS0FBSyxtSEFBRSxPQUFPLHNFQUFFLCtCQUErQiwrREFBRSxTQUFTLHlDQUFFLFdBQVcsMENBQUUsUUFBUTs7MkZBRXRGLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw0QkFBNEIsUUFFaEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQ2xCLENBQUMsMEJBQTBCLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7OzBCQVlyRixRQUFRO3lDQVRaLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25DaGFuZ2VzLCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IERhdGVQaXBlLCBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5mb0dhdWdlQ3VycmVudE1lYXN1cmVtZW50UGlwZSB9IGZyb20gJy4uL2N1cnJlbnQtbWVhc3VyZW1lbnQucGlwZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1pbmZvLWdhdWdlLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgcHJvdmlkZXJzOiBbTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIE5nU3R5bGUsIEluZm9HYXVnZUN1cnJlbnRNZWFzdXJlbWVudFBpcGUsIEFzeW5jUGlwZSwgRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJbmZvR2F1Z2VXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiB7XG4gICAgZGF0YXBvaW50c0xhYmVscz86IEtQSURldGFpbHNbXTtcbiAgICBkYXRhcG9pbnRzR2F1Z2U6IEtQSURldGFpbHNbXTtcbiAgICBmcmFjdGlvblNpemU6IG51bWJlcjtcbiAgfTtcbiAgYWN0aXZlRGF0YXBvaW50TGFiZWxzID0gW107XG4gIGFjdGl2ZURhdGFwb2ludEdhdWdlOiBLUElEZXRhaWxzO1xuICBmcmFjdGlvblNpemUgPSAnMS4xLTEnO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50KSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0xhYmVscyAmJiBBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0xhYmVscy5mb3JFYWNoKGRwID0+IHRoaXMuYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRwKSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludExhYmVscyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzLmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzR2F1Z2UgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0dhdWdlLmZvckVhY2goZHAgPT4gdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZHApKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50R2F1Z2UgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlLmZpbmQoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuZnJhY3Rpb25TaXplID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSkpIHtcbiAgICAgIHRoaXMuZnJhY3Rpb25TaXplID0gYDEuJHt0aGlzLmNvbmZpZy5mcmFjdGlvblNpemV9LSR7dGhpcy5jb25maWcuZnJhY3Rpb25TaXplfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGFiZWwtdmFsdWUtdW5pdC1nYXVnZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJnYXVnZS1sZWdlbmRcIlxuICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50TGFiZWxzPy5sZW5ndGhcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHAgb2YgYWN0aXZlRGF0YXBvaW50TGFiZWxzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHAgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgZHAubGFiZWwgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZHAubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGgzXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IG1lYXN1cmVtZW50LnZhbHVlIHwgbnVtYmVyOiBmcmFjdGlvblNpemUgfX0ge3sgZHAudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19XCJcbiAgICAgICAgICAqbmdJZj1cIiFtZWFzdXJlbWVudC5ub3RGb3VuZDsgZWxzZSBub3RGb3VuZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19IHt7IGRwLnVuaXQgfHwgbWVhc3VyZW1lbnQudW5pdCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgICAgICAgIDxoMz4tLTwvaDM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtLWItOFwiPlxuICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgIDxlbT57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ3Nob3J0JyB9fTwvZW0+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRHYXVnZVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2F1Z2Utc3ZnXCJcbiAgICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50R2F1Z2UgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQ6IHRydWUgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBoZWlnaHQ9XCIyMTRweFwiXG4gICAgICAgIHdpZHRoPVwiMjE0cHhcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIxNCAyMTRcIlxuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICA+XG4gICAgICAgIDxkZXNjPnJhZGlhbCBnYXVnZTwvZGVzYz5cbiAgICAgICAgPGdcbiAgICAgICAgICBpZD1cInNjYWxlXCJcbiAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjEsNVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBpZD1cIk92YWxcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0NBQ0VDRVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI3XCJcbiAgICAgICAgICAgIGN4PVwiMTA3XCJcbiAgICAgICAgICAgIGN5PVwiMTA3XCJcbiAgICAgICAgICAgIHI9XCIxMDNcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgaWQ9XCJtYXNrXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIxNFwiXG4gICAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgd2lkdGg9XCIyMTRcIlxuICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC00NSAyOTAgMTgyKVwiXG4gICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzPVwidHJhY2tcIlxuICAgICAgICAgIGQ9XCJNIDEwNyAyNyBhIDgwIDgwIDAgMSAwLjEgMCBaXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTEzNSAxMDcgMTA3KVwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3M9XCJ0cmFjay12YWx1ZVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgc3Ryb2tlOiBtZWFzdXJlbWVudC5jb2xvcixcbiAgICAgICAgICAgICdzdHJva2UtZGFzaG9mZnNldCc6IC1tZWFzdXJlbWVudC5zdHJva2VEYXNoT2Zmc2V0XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgZD1cIk0gMTA3IDI3IGEgODAgODAgMCAxIDAuMSAwIFpcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtMTM1IDEwNyAxMDcpXCJcbiAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcz1cImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBkLWNvbCBmaXQtaCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAzcmVtXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhY3RpdmVEYXRhcG9pbnRHYXVnZS5sYWJlbCB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZURhdGFwb2ludEdhdWdlLmxhYmVsIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cImNlbnRlci12YWx1ZSB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVhc3VyZW1lbnQubm90Rm91bmQ7IGVsc2Ugbm90Rm91bmRTVkdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kU1ZHPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNlbnRlci12YWx1ZVwiPi0tPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2VudGVyLXVuaXQgc3Ryb25nXCI+e3sgYWN0aXZlRGF0YXBvaW50R2F1Z2UudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19PC9wPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjZW50ZXItZGF0ZS10aW1lXCI+e3sgbWVhc3VyZW1lbnQuZGF0ZSB8IGM4eURhdGU6ICdzaG9ydCcgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sNEJBQTRCO0lBVXZDLFlBQWdDLFNBQW9DO1FBQXBDLGNBQVMsR0FBVCxTQUFTLENBQTJCO1FBSnBFLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUzQixpQkFBWSxHQUFHLE9BQU8sQ0FBQztJQUVnRCxDQUFDO0lBRXhFLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFTyxpQ0FBaUMsQ0FBQyxTQUFxQjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs4R0FyQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK0lBSjVCLENBQUMsMEJBQTBCLENBQUMsK0NDWHpDLGlrSUE2SEEsNENEaEhZLElBQUksNkZBQUUsS0FBSyxtSEFBRSxPQUFPLHNFQUFFLCtCQUErQiwrREFBRSxTQUFTLHlDQUFFLFdBQVcsMENBQUUsUUFBUTs7MkZBRXRGLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw0QkFBNEIsUUFFaEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQ2xCLENBQUMsMEJBQTBCLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7OzBCQVlyRixRQUFRO3lDQVRaLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25DaGFuZ2VzLCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IERhdGVQaXBlLCBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5mb0dhdWdlQ3VycmVudE1lYXN1cmVtZW50UGlwZSB9IGZyb20gJy4uL2N1cnJlbnQtbWVhc3VyZW1lbnQucGlwZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1pbmZvLWdhdWdlLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgcHJvdmlkZXJzOiBbTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIE5nU3R5bGUsIEluZm9HYXVnZUN1cnJlbnRNZWFzdXJlbWVudFBpcGUsIEFzeW5jUGlwZSwgRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJbmZvR2F1Z2VXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiB7XG4gICAgZGF0YXBvaW50c0xhYmVscz86IEtQSURldGFpbHNbXTtcbiAgICBkYXRhcG9pbnRzR2F1Z2U6IEtQSURldGFpbHNbXTtcbiAgICBmcmFjdGlvblNpemU6IG51bWJlcjtcbiAgfTtcbiAgYWN0aXZlRGF0YXBvaW50TGFiZWxzID0gW107XG4gIGFjdGl2ZURhdGFwb2ludEdhdWdlOiBLUElEZXRhaWxzO1xuICBmcmFjdGlvblNpemUgPSAnMS4xLTEnO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50KSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0xhYmVscyAmJiBBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0xhYmVscy5mb3JFYWNoKGRwID0+IHRoaXMuYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRwKSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludExhYmVscyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzLmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzR2F1Z2UgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0dhdWdlLmZvckVhY2goZHAgPT4gdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZHApKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50R2F1Z2UgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlLmZpbmQoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuZnJhY3Rpb25TaXplID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSkpIHtcbiAgICAgIHRoaXMuZnJhY3Rpb25TaXplID0gYDEuJHt0aGlzLmNvbmZpZy5mcmFjdGlvblNpemV9LSR7dGhpcy5jb25maWcuZnJhY3Rpb25TaXplfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGFiZWwtdmFsdWUtdW5pdC1nYXVnZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJnYXVnZS1sZWdlbmRcIlxuICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50TGFiZWxzPy5sZW5ndGhcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHAgb2YgYWN0aXZlRGF0YXBvaW50TGFiZWxzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHAgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgZHAubGFiZWwgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZHAubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGgzXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IG1lYXN1cmVtZW50LnZhbHVlIHwgbnVtYmVyOiBmcmFjdGlvblNpemUgfX0ge3sgZHAudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19XCJcbiAgICAgICAgICAqbmdJZj1cIiFtZWFzdXJlbWVudC5ub3RGb3VuZDsgZWxzZSBub3RGb3VuZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19IHt7IGRwLnVuaXQgfHwgbWVhc3VyZW1lbnQudW5pdCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgICAgICAgIDxoMz4tLTwvaDM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtLWItOFwiPlxuICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgIDxkaXY+e3sgbWVhc3VyZW1lbnQuZGF0ZSB8IGM4eURhdGU6ICdtZWRpdW1EYXRlJyB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdj57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ21lZGl1bVRpbWUnIH19PC9kaXY+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRHYXVnZVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2F1Z2Utc3ZnXCJcbiAgICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50R2F1Z2UgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQ6IHRydWUgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBoZWlnaHQ9XCIyMTRweFwiXG4gICAgICAgIHdpZHRoPVwiMjE0cHhcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIxNCAyMTRcIlxuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICA+XG4gICAgICAgIDxkZXNjPnJhZGlhbCBnYXVnZTwvZGVzYz5cbiAgICAgICAgPGdcbiAgICAgICAgICBpZD1cInNjYWxlXCJcbiAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjEsNVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBpZD1cIk92YWxcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0NBQ0VDRVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI3XCJcbiAgICAgICAgICAgIGN4PVwiMTA3XCJcbiAgICAgICAgICAgIGN5PVwiMTA3XCJcbiAgICAgICAgICAgIHI9XCIxMDNcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgaWQ9XCJtYXNrXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIxNFwiXG4gICAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgd2lkdGg9XCIyMTRcIlxuICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC00NSAyOTAgMTgyKVwiXG4gICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzPVwidHJhY2tcIlxuICAgICAgICAgIGQ9XCJNIDEwNyAyNyBhIDgwIDgwIDAgMSAwLjEgMCBaXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTEzNSAxMDcgMTA3KVwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3M9XCJ0cmFjay12YWx1ZVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgc3Ryb2tlOiBtZWFzdXJlbWVudC5jb2xvcixcbiAgICAgICAgICAgICdzdHJva2UtZGFzaG9mZnNldCc6IC1tZWFzdXJlbWVudC5zdHJva2VEYXNoT2Zmc2V0XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgZD1cIk0gMTA3IDI3IGEgODAgODAgMCAxIDAuMSAwIFpcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtMTM1IDEwNyAxMDcpXCJcbiAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcz1cImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBkLWNvbCBmaXQtaCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAzcmVtXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhY3RpdmVEYXRhcG9pbnRHYXVnZS5sYWJlbCB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZURhdGFwb2ludEdhdWdlLmxhYmVsIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cImNlbnRlci12YWx1ZSB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVhc3VyZW1lbnQubm90Rm91bmQ7IGVsc2Ugbm90Rm91bmRTVkdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kU1ZHPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNlbnRlci12YWx1ZVwiPi0tPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2VudGVyLXVuaXQgc3Ryb25nXCI+e3sgYWN0aXZlRGF0YXBvaW50R2F1Z2UudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19PC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1kYXRlLXRpbWVcIj57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ21lZGl1bURhdGUnIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWRhdGUtdGltZVwiPnt7IG1lYXN1cmVtZW50LmRhdGUgfCBjOHlEYXRlOiAnbWVkaXVtVGltZScgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -113,11 +113,11 @@ class InfoGaugeWidgetViewComponent {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, deps: [{ token: i1.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
116
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: InfoGaugeCurrentMeasurementPipe, name: "infoGaugeCurrentMeasurement" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }] }); }
|
|
117
117
|
}
|
|
118
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
|
-
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
120
|
+
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n" }]
|
|
121
121
|
}], ctorParameters: () => [{ type: i1.ContextDashboardComponent, decorators: [{
|
|
122
122
|
type: Optional
|
|
123
123
|
}] }], propDecorators: { config: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-widgets-implementations-info-gauge.mjs","sources":["../../widgets/implementations/info-gauge/current-measurement.pipe.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatePipe, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n\n@Component({\n selector: 'c8y-info-gauge-widget-view',\n templateUrl: './info-gauge-widget-view.component.html',\n host: { class: 'd-contents' },\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n\n constructor(@Optional() private dashboard: ContextDashboardComponent) {}\n\n ngOnChanges(): void {\n if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n }\n\n if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n }\n\n if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboard?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboard?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n }\n }\n}\n","<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <em>{{ measurement.date | c8yDate: 'short' }}</em>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <p class=\"center-date-time\">{{ measurement.date | c8yDate: 'short' }}</p>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n datapointListAttributes: string[]\n): ValidatorFn {\n return (control: AbstractControl) => {\n const formValue = control.value;\n for (const listAttributeName of datapointListAttributes) {\n const valueForList: KPIDetails[] = formValue[listAttributeName];\n if (!valueForList || !Array.isArray(valueForList)) {\n continue;\n }\n\n if (valueForList.find(dp => dp.__active)) {\n return null;\n }\n }\n return { noActiveDatapoint: true };\n };\n}\n\n@Component({\n selector: 'c8y-info-gauge-widget-config',\n templateUrl: './info-gauge-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ReactiveFormsModule, DatapointSelectorModule]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true\n };\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent\n ) {}\n\n onBeforeSave(\n config?: InfoGaugeWidgetConfigComponent['config']\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n if (this.widgetConfig.context?.id) {\n this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n }\n this.initForm();\n if (this.config?.datapointsLabels) {\n this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n }\n if (this.config?.datapointsGauge) {\n this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n }\n if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n }\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group(\n {\n fractionSize: [\n 1,\n [\n Validators.required,\n Validators.min(this.limits.numberOfDecimalPlacesMin),\n Validators.max(this.limits.numberOfDecimalPlacesMax)\n ]\n ],\n datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), [])\n },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<div class=\"p-l-24 p-r-24\">\n <form\n class=\"no-card-context\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-widgets-implementations-info-gauge.mjs","sources":["../../widgets/implementations/info-gauge/current-measurement.pipe.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatePipe, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n\n@Component({\n selector: 'c8y-info-gauge-widget-view',\n templateUrl: './info-gauge-widget-view.component.html',\n host: { class: 'd-contents' },\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n\n constructor(@Optional() private dashboard: ContextDashboardComponent) {}\n\n ngOnChanges(): void {\n if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n }\n\n if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n }\n\n if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboard?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboard?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n }\n }\n}\n","<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n datapointListAttributes: string[]\n): ValidatorFn {\n return (control: AbstractControl) => {\n const formValue = control.value;\n for (const listAttributeName of datapointListAttributes) {\n const valueForList: KPIDetails[] = formValue[listAttributeName];\n if (!valueForList || !Array.isArray(valueForList)) {\n continue;\n }\n\n if (valueForList.find(dp => dp.__active)) {\n return null;\n }\n }\n return { noActiveDatapoint: true };\n };\n}\n\n@Component({\n selector: 'c8y-info-gauge-widget-config',\n templateUrl: './info-gauge-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ReactiveFormsModule, DatapointSelectorModule]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true\n };\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent\n ) {}\n\n onBeforeSave(\n config?: InfoGaugeWidgetConfigComponent['config']\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n if (this.widgetConfig.context?.id) {\n this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n }\n this.initForm();\n if (this.config?.datapointsLabels) {\n this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n }\n if (this.config?.datapointsGauge) {\n this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n }\n if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n }\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group(\n {\n fractionSize: [\n 1,\n [\n Validators.required,\n Validators.min(this.limits.numberOfDecimalPlacesMin),\n Validators.max(this.limits.numberOfDecimalPlacesMax)\n ]\n ],\n datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), [])\n },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<div class=\"p-l-24 p-r-24\">\n <form\n class=\"no-card-context\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
package/locales/de.po
CHANGED
|
@@ -6902,7 +6902,7 @@ msgid "Find out more in the\n"
|
|
|
6902
6902
|
" <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">user documentation</a>\n"
|
|
6903
6903
|
" ."
|
|
6904
6904
|
msgstr "Weitere Informationen finden Sie in der\n"
|
|
6905
|
-
" <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\"
|
|
6905
|
+
" <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants\">-Benutzerdokumentation</a>\n"
|
|
6906
6906
|
" ."
|
|
6907
6907
|
|
|
6908
6908
|
msgid "Find out more in the\n"
|
|
@@ -6920,7 +6920,8 @@ msgid "Find out more in the\n"
|
|
|
6920
6920
|
" <a c8y-guide-href=\"/docs/cockpit/smart-rules\">user documentation</a>\n"
|
|
6921
6921
|
" ."
|
|
6922
6922
|
msgstr "Weitere Informationen finden Sie in der \n"
|
|
6923
|
-
" <a c8y-guide-href=\"/docs/cockpit/smart-rules\"
|
|
6923
|
+
" <a c8y-guide-href=\"/docs/cockpit/smart-rules\">-Benutzerdokumentation</a>\n"
|
|
6924
|
+
" ."
|
|
6924
6925
|
|
|
6925
6926
|
msgid "Find out more in the\n"
|
|
6926
6927
|
" <a c8y-guide-href=\"/docs/cockpit/working-with-dashboards\">user documentation</a>\n"
|
|
@@ -6935,10 +6936,10 @@ msgid "Find out more in the\n"
|
|
|
6935
6936
|
" </a>\n"
|
|
6936
6937
|
" ."
|
|
6937
6938
|
msgstr "Weitere Informationen finden Sie in der\n"
|
|
6938
|
-
"
|
|
6939
|
+
" <a c8y-guide-href=\"/docs/device-management-application/managing-device-data/#managing-configurations\">\n"
|
|
6939
6940
|
" Benutzerdokumentation\n"
|
|
6940
|
-
"
|
|
6941
|
-
"
|
|
6941
|
+
" </a>\n"
|
|
6942
|
+
" "
|
|
6942
6943
|
|
|
6943
6944
|
msgid "Find out more in the\n"
|
|
6944
6945
|
" <a c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\">\n"
|
|
@@ -6965,8 +6966,8 @@ msgstr "Weitere Informationen finden Sie in der\n"
|
|
|
6965
6966
|
msgid "Find out more in the\n"
|
|
6966
6967
|
" <a c8y-guide-href=\"/docs/concepts/applications\">user documentation</a>\n"
|
|
6967
6968
|
" ."
|
|
6968
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
6969
|
-
"
|
|
6969
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/concepts/applications\">Benutzerdokumentation</a> „\n"
|
|
6970
|
+
" “ (Erweiterte Funktionen für die automatische Erkennung von Dokumenten) unter\n"
|
|
6970
6971
|
" ."
|
|
6971
6972
|
|
|
6972
6973
|
msgid "Find out more in the\n"
|
|
@@ -6974,10 +6975,10 @@ msgid "Find out more in the\n"
|
|
|
6974
6975
|
" user documentation\n"
|
|
6975
6976
|
" </a>\n"
|
|
6976
6977
|
" ."
|
|
6977
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
6978
|
-
"
|
|
6978
|
+
msgstr "Weitere Informationen finden Sie in der \n"
|
|
6979
|
+
" <a c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\">\n"
|
|
6979
6980
|
" Benutzerdokumentation\n"
|
|
6980
|
-
"
|
|
6981
|
+
" </a>\n"
|
|
6981
6982
|
" ."
|
|
6982
6983
|
|
|
6983
6984
|
msgid "Find out more in the\n"
|
|
@@ -6985,20 +6986,22 @@ msgid "Find out more in the\n"
|
|
|
6985
6986
|
" user documentation\n"
|
|
6986
6987
|
" </a>\n"
|
|
6987
6988
|
" ."
|
|
6988
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
6989
|
+
msgstr "Weitere Informationen finden Sie in der \n"
|
|
6989
6990
|
" <a target=\"_blank\" c8y-guide-href=\"/docs/device-management-application/working-with-simulators\" rel=\"noopener noreferrer\">\n"
|
|
6990
6991
|
" Benutzerdokumentation\n"
|
|
6991
|
-
" </a
|
|
6992
|
+
" </a>\n"
|
|
6993
|
+
" ."
|
|
6992
6994
|
|
|
6993
6995
|
msgid "Find out more in the\n"
|
|
6994
6996
|
" <a c8y-guide-href=\"/docs/cockpit/data-explorer/#to-add-alarms-or-events\">\n"
|
|
6995
6997
|
" user documentation\n"
|
|
6996
6998
|
" </a>\n"
|
|
6997
6999
|
" ."
|
|
6998
|
-
msgstr "Weitere Informationen finden Sie in der \n"
|
|
6999
|
-
" <a c8y-guide-href=\"/docs/cockpit/data-explorer/#to-add-alarms-or-events\"
|
|
7000
|
-
"
|
|
7001
|
-
" </a
|
|
7000
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/cockpit/data-explorer/#to-add-alarms-or-events\"> Benutzerdokumentation </a> „\n"
|
|
7001
|
+
" <a c8y-guide-href=\"/docs/cockpit/data-explorer/#to-add-alarms-or-events\"> “ (\n"
|
|
7002
|
+
" ) unter\n"
|
|
7003
|
+
" </a>\n"
|
|
7004
|
+
"."
|
|
7002
7005
|
|
|
7003
7006
|
msgid "Find out more in the\n"
|
|
7004
7007
|
" <a c8y-guide-href=\"/docs/cockpit/managing-exports\">user documentation</a>\n"
|
|
@@ -7011,32 +7014,33 @@ msgid "Find out more in the\n"
|
|
|
7011
7014
|
" user documentation\n"
|
|
7012
7015
|
" </a>\n"
|
|
7013
7016
|
" ."
|
|
7014
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7015
|
-
"
|
|
7016
|
-
"
|
|
7017
|
-
"
|
|
7018
|
-
"
|
|
7017
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/data-broker/data-broker-application/#data-subscriptions\"> Benutzerdokumentation </a> „\n"
|
|
7018
|
+
" <a c8y-guide-href=\"/docs/data-broker/data-broker-application/#data-subscriptions\"> “ (\n"
|
|
7019
|
+
" ) unter\n"
|
|
7020
|
+
" </a>\n"
|
|
7021
|
+
"."
|
|
7019
7022
|
|
|
7020
7023
|
msgid "Find out more in the\n"
|
|
7021
7024
|
" <a c8y-guide-href=\"/docs/device-management-application/smartrest-templates/#smartrest-templates\">\n"
|
|
7022
7025
|
" user documentation\n"
|
|
7023
7026
|
" </a>\n"
|
|
7024
7027
|
" ."
|
|
7025
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7026
|
-
"
|
|
7027
|
-
"
|
|
7028
|
-
"
|
|
7029
|
-
"
|
|
7028
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/device-management-application/smartrest-templates/#smartrest-templates\"> Benutzerdokumentation </a> „\n"
|
|
7029
|
+
" <a c8y-guide-href=\"/docs/device-management-application/smartrest-templates/#smartrest-templates\"> “ (\n"
|
|
7030
|
+
" ) unter\n"
|
|
7031
|
+
" </a>\n"
|
|
7032
|
+
"."
|
|
7030
7033
|
|
|
7031
7034
|
msgid "Find out more in the\n"
|
|
7032
7035
|
" <a c8y-guide-href=\"/docs/device-management-application/viewing-device-details/#measurements\">\n"
|
|
7033
7036
|
" user documentation\n"
|
|
7034
7037
|
" </a>\n"
|
|
7035
7038
|
" ."
|
|
7036
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7037
|
-
" <a c8y-guide-href=\"/docs/device-management-application/viewing-device-details/#measurements\"
|
|
7038
|
-
"
|
|
7039
|
-
" </a
|
|
7039
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/device-management-application/viewing-device-details/#measurements\"> Benutzerdokumentation </a> „\n"
|
|
7040
|
+
" <a c8y-guide-href=\"/docs/device-management-application/viewing-device-details/#measurements\"> “ (\n"
|
|
7041
|
+
" ) unter\n"
|
|
7042
|
+
" </a>\n"
|
|
7043
|
+
"."
|
|
7040
7044
|
|
|
7041
7045
|
msgid "Find out more in the\n"
|
|
7042
7046
|
" <a c8y-guide-href=\"/docs/standard-tenant/alarm-mapping\">user documentation</a>\n"
|
|
@@ -7050,50 +7054,53 @@ msgid "Find out more in the\n"
|
|
|
7050
7054
|
" user documentation\n"
|
|
7051
7055
|
" </a>\n"
|
|
7052
7056
|
" ."
|
|
7053
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7054
|
-
" <a c8y-guide-href=\"/docs/standard-tenant/managing-data/#retention-rules\"
|
|
7055
|
-
"
|
|
7057
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/standard-tenant/managing-data/#retention-rules\"> Benutzerdokumentation </a> „\n"
|
|
7058
|
+
" <a c8y-guide-href=\"/docs/standard-tenant/managing-data/#retention-rules\"> “ (\n"
|
|
7059
|
+
" ) unter\n"
|
|
7056
7060
|
" </a>\n"
|
|
7057
|
-
"
|
|
7061
|
+
"."
|
|
7058
7062
|
|
|
7059
7063
|
msgid "Find out more in the\n"
|
|
7060
7064
|
" <a c8y-guide-href=\"/docs/cockpit/cockpit-introduction\">user documentation</a>\n"
|
|
7061
7065
|
" ."
|
|
7062
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7063
|
-
"
|
|
7066
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/cockpit/cockpit-introduction\">Benutzerdokumentation</a> „\n"
|
|
7067
|
+
" “ unter\n"
|
|
7064
7068
|
" ."
|
|
7065
7069
|
|
|
7066
7070
|
msgid "Find out more in the\n"
|
|
7067
7071
|
" <a c8y-guide-href=\"/docs/cockpit/working-with-reports\">user documentation</a>\n"
|
|
7068
7072
|
" ."
|
|
7069
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7070
|
-
"
|
|
7073
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/cockpit/working-with-reports\">Benutzerdokumentation</a> „\n"
|
|
7074
|
+
" “ unter\n"
|
|
7075
|
+
" ."
|
|
7071
7076
|
|
|
7072
7077
|
msgid "Find out more in the\n"
|
|
7073
7078
|
" <a c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-events\">\n"
|
|
7074
7079
|
" user documentation\n"
|
|
7075
7080
|
" </a>\n"
|
|
7076
7081
|
" ."
|
|
7077
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7082
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-events\"> Benutzerdokumentation „ </a>\n"
|
|
7078
7083
|
" <a c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-events\">\n"
|
|
7079
|
-
"
|
|
7080
|
-
" </a
|
|
7084
|
+
" “ (Benutzerhandbuch für die Verwaltung von Datenbanken)\n"
|
|
7085
|
+
" </a>\n"
|
|
7086
|
+
"."
|
|
7081
7087
|
|
|
7082
7088
|
msgid "Find out more in the\n"
|
|
7083
7089
|
" <a c8y-guide-href=\"/docs/device-management-application/working-with-simulators\">\n"
|
|
7084
7090
|
" user documentation\n"
|
|
7085
7091
|
" </a>\n"
|
|
7086
7092
|
" ."
|
|
7087
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7093
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/device-management-application/working-with-simulators\"> Benutzerdokumentation „ </a>\n"
|
|
7088
7094
|
" <a c8y-guide-href=\"/docs/device-management-application/working-with-simulators\">\n"
|
|
7089
|
-
"
|
|
7090
|
-
" </a
|
|
7095
|
+
" “ (Benutzerhandbuch für die Verwaltung von Datenbanken)\n"
|
|
7096
|
+
" </a>\n"
|
|
7097
|
+
"."
|
|
7091
7098
|
|
|
7092
7099
|
msgid "Find out more in the\n"
|
|
7093
7100
|
" <a c8y-guide-href=\"/docs/standard-tenant/managing-permissions\">user documentation</a>\n"
|
|
7094
7101
|
" ."
|
|
7095
|
-
msgstr "Weitere Informationen finden Sie in der\n"
|
|
7096
|
-
"
|
|
7102
|
+
msgstr "Weitere Informationen finden Sie in der <a c8y-guide-href=\"/docs/standard-tenant/managing-permissions\">Benutzerdokumentation</a> „\n"
|
|
7103
|
+
" “ unter\n"
|
|
7097
7104
|
" ."
|
|
7098
7105
|
|
|
7099
7106
|
msgid "Find your protocol in the\n"
|