@c8y/ngx-components 1018.0.74 → 1018.0.76

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.
@@ -84,9 +84,9 @@ export class WelcomeToDeviceManagementComponent {
84
84
  }
85
85
  }
86
86
  WelcomeToDeviceManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WelcomeToDeviceManagementComponent, deps: [{ token: i1.Router }, { token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
87
- WelcomeToDeviceManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WelcomeToDeviceManagementComponent, selector: "c8y-welcome-to-devicemanagement", ngImport: i0, template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.QuickLinkComponent, selector: "c8y-quick-link", inputs: ["icon", "label"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
87
+ WelcomeToDeviceManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WelcomeToDeviceManagementComponent, selector: "c8y-welcome-to-devicemanagement", ngImport: i0, template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n data-cy=\"devicemanagement-welcome--quick-link\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.QuickLinkComponent, selector: "c8y-quick-link", inputs: ["icon", "label"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
88
88
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WelcomeToDeviceManagementComponent, decorators: [{
89
89
  type: Component,
90
- args: [{ selector: 'c8y-welcome-to-devicemanagement', template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
90
+ args: [{ selector: 'c8y-welcome-to-devicemanagement', template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n data-cy=\"devicemanagement-welcome--quick-link\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
91
91
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.NavigatorService }]; } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VsY29tZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kZXZpY2UtbWFuYWdlbWVudC13ZWxjb21lL3dlbGNvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGV2aWNlLW1hbmFnZW1lbnQtd2VsY29tZS93ZWxjb21lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQVcsZ0JBQWdCLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVF6QyxNQUFNLE9BQU8sa0NBQWtDO0lBTzdDLFlBQW9CLE1BQWMsRUFBVSxTQUEyQjtRQUFuRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFOdkUsZUFBVSxHQUFnQixFQUFFLENBQUM7UUFDN0IsY0FBUyxHQUFHLElBQUksQ0FBQztJQUt5RCxDQUFDO0lBRTNFLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFD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QUFRLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OytIQS9GVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyx1RUNWL0MsbThCQXlCQTsyRkRmYSxrQ0FBa0M7a0JBSjlDLFNBQVM7K0JBQ0UsaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCwgRG9jTGluaywgTmF2aWdhdG9yU2VydmljZSwgTmF2aWdhdG9yTm9kZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xudHlwZSBRdWlja0xpbmsgPSBQaWNrPERvY0xpbmssICdsYWJlbCcgfCAnY2xpY2snIHwgJ2ljb24nPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdlbGNvbWUtdG8tZGV2aWNlbWFuYWdlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93ZWxjb21lLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXZWxjb21lVG9EZXZpY2VNYW5hZ2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWlja0xpbmtzOiBRdWlja0xpbmtbXSA9IFtdO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gIHByaXZhdGUgbmF2Tm9kZXM6IE5hdmlnYXRvck5vZGVbXTtcbiAgcHJpdmF0ZSBuYXZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIG5hdmlnYXRvcjogTmF2aWdhdG9yU2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdG9yLml0ZW1zJC5zdWJzY3JpYmUobm9kZXMgPT4ge1xuICAgICAgdGhpcy5uYXZOb2RlcyA9IG5vZGVzO1xuICAgICAgdGhpcy5jcmVhdGVBbGxEZXZpY2VzUXVpY2tMaW5rKCk7XG4gICAgICB0aGlzLmNyZWF0ZVF1aWNrbGlua1JlZ2lzdGVyRGV2aWNlKCk7XG4gICAgICB0aGlzLmNyZWF0ZVF1aWNrbGlua0FkZEdyb3VwKCk7XG4gICAgICB0aGlzLmNyZWF0ZUFkZERldmljZVByb2ZpbGVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuY3JlYXRlQWRkU29mdHdhcmVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuY3JlYXRlQWRkRmlybXdhcmVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5uYXZTdWJzY3JpcHRpb24gJiYgIXRoaXMubmF2U3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5uYXZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFsbERldmljZXNRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydEZXZpY2VzJywgJ0FsbCBkZXZpY2VzJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja2xpbmtSZWdpc3RlckRldmljZSgpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ0RldmljZXMnLCAnUmVnaXN0cmF0aW9uJ10sIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdSZWdpc3RlciBkZXZpY2UnKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja2xpbmtBZGRHcm91cCgpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ0dyb3VwcyddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIGdyb3VwJyksXG4gICAgICBpY29uOiAnYzh5LWdyb3VwLWFkZCdcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQWRkRGV2aWNlUHJvZmlsZVF1aWNrTGluaygpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ01hbmFnZW1lbnQnLCAnRGV2aWNlIHByb2ZpbGVzJ10sIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgZGV2aWNlIHByb2ZpbGUnKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBZGRTb2Z0d2FyZVF1aWNrTGluaygpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ01hbmFnZW1lbnQnLCAnU29mdHdhcmUgcmVwb3NpdG9yeSddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIHNvZnR3YXJlJylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQWRkRmlybXdhcmVRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydNYW5hZ2VtZW50JywgJ0Zpcm13YXJlIHJlcG9zaXRvcnknXSwge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCBmaXJtd2FyZScpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShcbiAgICBuYXZOb2RlUGF0aExhYmVsczogc3RyaW5nW10sXG4gICAgcXVpY2tMaW5rT3ZlcnJpZGVzOiBQYXJ0aWFsPERvY0xpbms+ID0ge31cbiAgKSB7XG4gICAgY29uc3QgbmF2Tm9kZSA9IHRoaXMuZmluZFZpc2libGVOYXZOb2RlKG5hdk5vZGVQYXRoTGFiZWxzKTtcblxuICAgIGlmICghbmF2Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHF1aWNrTGluayA9IHtcbiAgICAgIGljb246IG5hdk5vZGUuaWNvbixcbiAgICAgIGxhYmVsOiBuYXZOb2RlLmxhYmVsLFxuICAgICAgLi4ucXVpY2tMaW5rT3ZlcnJpZGVzLFxuICAgICAgY2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgbmF2Tm9kZS5wYXJlbnRzWzBdLm9wZW4gPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKG5hdk5vZGUucGF0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnF1aWNrTGlua3MucHVzaChxdWlja0xpbmspO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVmlzaWJsZU5hdk5vZGUoXG4gICAgbmF2Tm9kZVBhdGhMYWJlbHM6IHN0cmluZ1tdLFxuICAgIG5hdk5vZGVzOiBOYXZpZ2F0b3JOb2RlW10gPSB0aGlzLm5hdk5vZGVzXG4gICk6IE5hdmlnYXRvck5vZGUge1xuICAgIGNvbnN0IGN1cnJlbnRMYWJlbCA9IG5hdk5vZGVQYXRoTGFiZWxzLnNoaWZ0KCk7XG4gICAgY29uc3QgbmF2Tm9kZSA9IG5hdk5vZGVzLmZpbmQobmF2Tm9kZSA9PiAhbmF2Tm9kZS5oaWRkZW4gJiYgbmF2Tm9kZS5sYWJlbCA9PT0gY3VycmVudExhYmVsKTtcbiAgICBpZiAobmF2Tm9kZSAmJiBuYXZOb2RlUGF0aExhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kVmlzaWJsZU5hdk5vZGUobmF2Tm9kZVBhdGhMYWJlbHMsIG5hdk5vZGUuY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmF2Tm9kZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndlbGNvbWUtd2lkZ2V0XCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZml0LWhcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGEtcy1zdHJldGNoIGNvbC1tZC0xMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZ3JvdXAgaW50ZXJhY3QtZ3JpZCBmaXQtaFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsaW5rIG9mIHF1aWNrTGlua3NcIiBjbGFzcz1cImNvbC14cy00IG5vLWd1dHRlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGNhcmQgdGV4dC1wcmUtbm9ybWFsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ20tYi0wJzogdHJ1ZSB9XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cImxpbmsubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImxpbmsuY2xpY2sgPyBsaW5rLmNsaWNrKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgW2FjdGlvbk5hbWVdPVwiJ3dlbGNvbWVXaWRnZXRDbGlja2VkJ1wiXG4gICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGxpbms6IGxpbmsubGFiZWwgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1xdWljay1saW5rIFtpY29uXT1cImxpbmsuaWNvblwiIFtsYWJlbF09XCJsaW5rLmxhYmVsXCI+PC9jOHktcXVpY2stbGluaz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VsY29tZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kZXZpY2UtbWFuYWdlbWVudC13ZWxjb21lL3dlbGNvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGV2aWNlLW1hbmFnZW1lbnQtd2VsY29tZS93ZWxjb21lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQVcsZ0JBQWdCLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVF6QyxNQUFNLE9BQU8sa0NBQWtDO0lBTzdDLFlBQW9CLE1BQWMsRUFBVSxTQUEyQjtRQUFuRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFOdkUsZUFBVSxHQUFnQixFQUFFLENBQUM7UUFDN0IsY0FBUyxHQUFHLElBQUksQ0FBQztJQUt5RCxDQUFDO0lBRTNFLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFD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QUFRLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OytIQS9GVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyx1RUNWL0MsaWdDQTBCQTsyRkRoQmEsa0NBQWtDO2tCQUo5QyxTQUFTOytCQUNFLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQsIERvY0xpbmssIE5hdmlnYXRvclNlcnZpY2UsIE5hdmlnYXRvck5vZGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbnR5cGUgUXVpY2tMaW5rID0gUGljazxEb2NMaW5rLCAnbGFiZWwnIHwgJ2NsaWNrJyB8ICdpY29uJz47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13ZWxjb21lLXRvLWRldmljZW1hbmFnZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2VsY29tZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2VsY29tZVRvRGV2aWNlTWFuYWdlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcXVpY2tMaW5rczogUXVpY2tMaW5rW10gPSBbXTtcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICBwcml2YXRlIG5hdk5vZGVzOiBOYXZpZ2F0b3JOb2RlW107XG4gIHByaXZhdGUgbmF2U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uYXZTdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRvci5pdGVtcyQuc3Vic2NyaWJlKG5vZGVzID0+IHtcbiAgICAgIHRoaXMubmF2Tm9kZXMgPSBub2RlcztcbiAgICAgIHRoaXMuY3JlYXRlQWxsRGV2aWNlc1F1aWNrTGluaygpO1xuICAgICAgdGhpcy5jcmVhdGVRdWlja2xpbmtSZWdpc3RlckRldmljZSgpO1xuICAgICAgdGhpcy5jcmVhdGVRdWlja2xpbmtBZGRHcm91cCgpO1xuICAgICAgdGhpcy5jcmVhdGVBZGREZXZpY2VQcm9maWxlUXVpY2tMaW5rKCk7XG4gICAgICB0aGlzLmNyZWF0ZUFkZFNvZnR3YXJlUXVpY2tMaW5rKCk7XG4gICAgICB0aGlzLmNyZWF0ZUFkZEZpcm13YXJlUXVpY2tMaW5rKCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubmF2U3Vic2NyaXB0aW9uICYmICF0aGlzLm5hdlN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgIHRoaXMubmF2U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbGxEZXZpY2VzUXVpY2tMaW5rKCkge1xuICAgIHRoaXMuY3JlYXRlUXVpY2tMaW5rVG9OYXZOb2RlKFsnRGV2aWNlcycsICdBbGwgZGV2aWNlcyddKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUXVpY2tsaW5rUmVnaXN0ZXJEZXZpY2UoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydEZXZpY2VzJywgJ1JlZ2lzdHJhdGlvbiddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnUmVnaXN0ZXIgZGV2aWNlJylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUXVpY2tsaW5rQWRkR3JvdXAoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydHcm91cHMnXSwge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCBncm91cCcpLFxuICAgICAgaWNvbjogJ2M4eS1ncm91cC1hZGQnXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFkZERldmljZVByb2ZpbGVRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydNYW5hZ2VtZW50JywgJ0RldmljZSBwcm9maWxlcyddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIGRldmljZSBwcm9maWxlJylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQWRkU29mdHdhcmVRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydNYW5hZ2VtZW50JywgJ1NvZnR3YXJlIHJlcG9zaXRvcnknXSwge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCBzb2Z0d2FyZScpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFkZEZpcm13YXJlUXVpY2tMaW5rKCkge1xuICAgIHRoaXMuY3JlYXRlUXVpY2tMaW5rVG9OYXZOb2RlKFsnTWFuYWdlbWVudCcsICdGaXJtd2FyZSByZXBvc2l0b3J5J10sIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgZmlybXdhcmUnKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoXG4gICAgbmF2Tm9kZVBhdGhMYWJlbHM6IHN0cmluZ1tdLFxuICAgIHF1aWNrTGlua092ZXJyaWRlczogUGFydGlhbDxEb2NMaW5rPiA9IHt9XG4gICkge1xuICAgIGNvbnN0IG5hdk5vZGUgPSB0aGlzLmZpbmRWaXNpYmxlTmF2Tm9kZShuYXZOb2RlUGF0aExhYmVscyk7XG5cbiAgICBpZiAoIW5hdk5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdWlja0xpbmsgPSB7XG4gICAgICBpY29uOiBuYXZOb2RlLmljb24sXG4gICAgICBsYWJlbDogbmF2Tm9kZS5sYWJlbCxcbiAgICAgIC4uLnF1aWNrTGlua092ZXJyaWRlcyxcbiAgICAgIGNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIG5hdk5vZGUucGFyZW50c1swXS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChuYXZOb2RlLnBhdGgpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5xdWlja0xpbmtzLnB1c2gocXVpY2tMaW5rKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZpc2libGVOYXZOb2RlKFxuICAgIG5hdk5vZGVQYXRoTGFiZWxzOiBzdHJpbmdbXSxcbiAgICBuYXZOb2RlczogTmF2aWdhdG9yTm9kZVtdID0gdGhpcy5uYXZOb2Rlc1xuICApOiBOYXZpZ2F0b3JOb2RlIHtcbiAgICBjb25zdCBjdXJyZW50TGFiZWwgPSBuYXZOb2RlUGF0aExhYmVscy5zaGlmdCgpO1xuICAgIGNvbnN0IG5hdk5vZGUgPSBuYXZOb2Rlcy5maW5kKG5hdk5vZGUgPT4gIW5hdk5vZGUuaGlkZGVuICYmIG5hdk5vZGUubGFiZWwgPT09IGN1cnJlbnRMYWJlbCk7XG4gICAgaWYgKG5hdk5vZGUgJiYgbmF2Tm9kZVBhdGhMYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZFZpc2libGVOYXZOb2RlKG5hdk5vZGVQYXRoTGFiZWxzLCBuYXZOb2RlLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdk5vZGU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3ZWxjb21lLXdpZGdldFwiIHRhYmluZGV4PVwiMFwiPlxuICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZpdC1oXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBhLXMtc3RyZXRjaCBjb2wtbWQtMTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWdyb3VwIGludGVyYWN0LWdyaWQgZml0LWhcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGluayBvZiBxdWlja0xpbmtzXCIgY2xhc3M9XCJjb2wteHMtNCBuby1ndXR0ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1jbGVhbiBjYXJkIHRleHQtcHJlLW5vcm1hbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdtLWItMCc6IHRydWUgfVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJsaW5rLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJsaW5rLmNsaWNrID8gbGluay5jbGljaygpIDogZmFsc2VcIlxuICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgIFthY3Rpb25OYW1lXT1cIid3ZWxjb21lV2lkZ2V0Q2xpY2tlZCdcIlxuICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBsaW5rOiBsaW5rLmxhYmVsIH1cIlxuICAgICAgICAgICAgZGF0YS1jeT1cImRldmljZW1hbmFnZW1lbnQtd2VsY29tZS0tcXVpY2stbGlua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1xdWljay1saW5rIFtpY29uXT1cImxpbmsuaWNvblwiIFtsYWJlbF09XCJsaW5rLmxhYmVsXCI+PC9jOHktcXVpY2stbGluaz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1293,10 +1293,10 @@ class WidgetConfigComponent {
1293
1293
  }
1294
1294
  }
1295
1295
  WidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, deps: [{ token: WidgetService }, { token: i3$1.BsModalRef }, { token: i1.InventoryService }, { token: ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component });
1296
- WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n data-cy=\"widget-config--Search\"\n type=\"text\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n type=\"button\"\n title=\"{{ 'Search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i8$1.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1296
+ WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n type=\"button\"\n title=\"{{ 'Search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i8$1.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1297
1297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, decorators: [{
1298
1298
  type: Component,
1299
- args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n data-cy=\"widget-config--Search\"\n type=\"text\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n type=\"button\"\n title=\"{{ 'Search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
1299
+ args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form name=\"form\" #configForm=\"ngForm\">\n <div class=\"c8y-modal-tabs\" id=\"modal-body\">\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Select widget' | translate }}\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Configuration' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n type=\"button\"\n title=\"{{ 'Appearance' | translate }}\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n type=\"button\"\n title=\"{{ 'Search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-body bg-level-2\" *ngIf=\"mode === 'select'\">\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean card p-8\"\n type=\"button\"\n [class.active]=\"selected === cmp\"\n (click)=\"select(cmp)\"\n >\n <div class=\"text-center p-8 m-b-8 d-col flex-center bg-level-2\" role=\"presentation\">\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img class=\"img-responsive\" alt [src]=\"cmp.previewImage\" />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div class=\"c8y-empty-state text-center\" *ngIf=\"searchResult && searchResult.length === 0\">\n <div class=\"h1\" c8yIcon=\"search\"></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p class=\"m-r-8\" translate>Rephrase your search term.</p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Reset search' | translate }}\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div class=\"d-flex d-col fit-h\" *ngIf=\"selected\" [ngClass]=\"{ hidden: mode !== 'config' }\">\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label for=\"widgetTitle\" translate>Title</label>\n <input\n class=\"form-control\"\n type=\"text\"\n id=\"widgetTitle\"\n name=\"title\"\n [(ngModel)]=\"selected.data.title\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row flex-grow\" [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\">\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div class=\"fit-h bg-inherit p-l-16\" [ngClass]=\"{ 'p-r-24': !hasConfig() }\">\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div class=\"modal-body p-t-0\" style=\"height: calc(100vh - 310px)\" *ngIf=\"mode === 'style'\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
1300
1300
  }], ctorParameters: function () { return [{ type: WidgetService }, { type: i3$1.BsModalRef }, { type: i1.InventoryService }, { type: ContextDashboardService }]; }, propDecorators: { dynamicComponent: [{
1301
1301
  type: ViewChild,
1302
1302
  args: ['config', { static: false }]
@@ -1742,7 +1742,7 @@ class ContextDashboardComponent {
1742
1742
  }
1743
1743
  }
1744
1744
  ContextDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: ContextDashboardService }, { token: i5.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: WidgetService }, { token: i3$1.BsModalService }, { token: i1.InventoryService }, { token: i5.GainsightService }, { token: i5.ActionBarService }, { token: i3.TranslateService }, { token: i5.ModalService }], target: i0.ɵɵFactoryTarget.Component });
1745
- ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i5.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i5.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1745
+ ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i5.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "component", type: i5.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
1746
1746
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, decorators: [{
1747
1747
  type: Component,
1748
1748
  args: [{ selector: 'c8y-context-dashboard', host: {
@@ -1750,7 +1750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
1750
1750
  display: block;
1751
1751
  `,
1752
1752
  class: 'dashboard c8y-grid-dashboard'
1753
- }, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
1753
+ }, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item *ngIf=\"defaultWidgets.length > 0\" [placement]=\"'right'\" [priority]=\"-1\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n (click)=\"restore()\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n >\n <i class=\"m-r-4\" c8yIcon=\"reset\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help *ngIf=\"showContextHelpButton\" src=\"/users-guide/cockpit/#dashboards\"></c8y-help>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
1754
1754
  }], ctorParameters: function () {
1755
1755
  return [{ type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: ContextDashboardService }, { type: i5.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
1756
1756
  type: Inject,