@c8y/ngx-components 1018.503.56 → 1018.503.63
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/context-dashboard/context-dashboard.component.d.ts +5 -1
- package/context-dashboard/dashboard-detail.component.d.ts +1 -0
- package/core/common/common.module.d.ts +2 -1
- package/core/common/component-outlet.directive.d.ts +24 -0
- package/core/common/index.d.ts +1 -0
- package/esm2020/context-dashboard/cockpit-dashboard/cockpit-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/context-dashboard.component.mjs +9 -2
- package/esm2020/context-dashboard/dashboard-availability.component.mjs +3 -3
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
- package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.mjs +3 -3
- package/esm2020/core/action/action-outlet.component.mjs +6 -5
- package/esm2020/core/common/common.module.mjs +8 -5
- package/esm2020/core/common/component-outlet.directive.mjs +56 -0
- package/esm2020/core/common/index.mjs +2 -1
- package/esm2020/core/data-grid/column/cell-renderer.component.mjs +5 -4
- package/esm2020/core/data-grid/column/filtering-form-renderer.component.mjs +5 -4
- package/esm2020/core/docs/help-and-support-outlet/help-and-support-outlet.component.mjs +7 -6
- package/esm2020/core/docs/legal-notices-outlet/legal-notices-outlet.component.mjs +6 -5
- package/esm2020/core/drawer/drawer-outlet/drawer-outlet.component.mjs +5 -4
- package/esm2020/core/navigator/navigator-node.component.mjs +6 -5
- package/esm2020/core/stepper/stepper-outlet.component.mjs +8 -7
- package/esm2020/core/tabs/tabs-outlet.component.mjs +5 -4
- package/esm2020/ecosystem/packages/package-details/package-details.component.mjs +3 -3
- package/esm2020/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +18 -11
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +2 -2
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +80 -23
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +18 -11
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +2 -2
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +79 -23
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +6 -0
- package/locales/en.po +6 -0
- package/locales/es.po +6 -0
- package/locales/fr.po +6 -0
- package/locales/ja_JP.po +8 -0
- package/locales/ko.po +6 -0
- package/locales/locales.pot +6 -0
- package/locales/nl.po +6 -0
- package/locales/pl.po +6 -0
- package/locales/pt_BR.po +6 -0
- package/locales/ru.po +6 -0
- package/locales/zh_CN.po +6 -0
- package/locales/zh_TW.po +6 -0
- package/package.json +1 -1
|
@@ -149,10 +149,10 @@ export class ListFiltersComponent {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
ListFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListFiltersComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AppStateService }, { token: i3.TranslateService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
-
ListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ListFiltersComponent, selector: "c8y-list-filters", inputs: { packageTypes: "packageTypes", packageAvailabilities: "packageAvailabilities", packageContents: "packageContents" }, outputs: { filterPipeChange: "filterPipeChange" }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.FilterInputComponent, selector: "c8y-filter", inputs: ["icon"], outputs: ["onSearch"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
|
|
152
|
+
ListFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ListFiltersComponent, selector: "c8y-list-filters", inputs: { packageTypes: "packageTypes", packageAvailabilities: "packageAvailabilities", packageContents: "packageContents" }, outputs: { filterPipeChange: "filterPipeChange" }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability`of package based on app state`' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.FilterInputComponent, selector: "c8y-filter", inputs: ["icon"], outputs: ["onSearch"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
|
|
153
153
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListFiltersComponent, decorators: [{
|
|
154
154
|
type: Component,
|
|
155
|
-
args: [{ selector: 'c8y-list-filters', template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n" }]
|
|
155
|
+
args: [{ selector: 'c8y-list-filters', template: "<form class=\"d-flex a-i-center\" [formGroup]=\"formGroup\">\n <c8y-filter (onSearch)=\"setFilterTerm($event)\"></c8y-filter>\n\n <div\n *ngIf=\"predefinedFiltersVisible\"\n class=\"dropdown m-l-8 m-r-4\"\n dropdown\n (isOpenChange)=\"toggleDropdown($event)\"\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group d-inline-flex\">\n <button\n class=\"btn-clean form-control p-l-8 p-r-16 a-s-stretch d-flex a-i-center w-auto\"\n title=\"{{ 'Filters' | translate }}\"\n dropdownToggle\n >\n <span [ngPlural]=\"chips.length\">\n <ng-template ngPluralCase=\"=0\">\n {{ 'Filters' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filter' | translate }}\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"badge badge-info\">{{ chips.length }}</span>\n {{ 'Filters' | translate }}\n </ng-template>\n </span>\n <span class=\"caret\"></span>\n </button>\n <div\n class=\"input-group-addon p-t-0 p-b-0 d-flex gap-4 a-i-center inner-scroll\"\n *ngIf=\"chips.length > 0\"\n >\n <ng-container *ngFor=\"let chip of chips\">\n <span class=\"label label-info chip\" *ngIf=\"chip[1].value\">\n <button\n class=\"btn btn-xs btn-clean text-10\"\n type=\"button\"\n title=\"{{ 'Remove' | translate }} {{ chip[0] | translate | titlecase }}\"\n (click)=\"deselectChip(chip)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ chip[0] | translate | titlecase }}\n </span>\n </ng-container>\n </div>\n </div>\n <div class=\"dropdown-menu\" *dropdownMenu>\n <div class=\"dropdown-form\">\n <c8y-form-group *ngIf=\"packageTypes.length\" formGroupName=\"type\">\n <label>\n {{ 'Type' | translate }}\n </label>\n <label class=\"c8y-checkbox\" *ngFor=\"let type of packageTypes\" [title]=\"type | translate\">\n <input type=\"checkbox\" [formControlName]=\"type\" [value]=\"type\" />\n <span></span>\n <span>{{ type | translate | titlecase }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageAvailabilities.length\" formGroupName=\"availability\">\n <label>\n {{ 'Availability`of package based on app state`' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let availability of packageAvailabilities\"\n [title]=\"availability | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"availability\" [value]=\"availability\" />\n <span></span>\n <span>{{ availability | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group *ngIf=\"packageContents.length\" formGroupName=\"content\">\n <label>\n {{ 'Content' | translate }}\n </label>\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let content of packageContents\"\n [title]=\"content | translate\"\n >\n <input type=\"checkbox\" [formControlName]=\"content\" [value]=\"content\" />\n <span></span>\n <span>{{ content | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Reset' | translate }}\"\n (click)=\"reset(); filtersDropdown.isOpen = false\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n type=\"button\"\n title=\"{{ 'Apply' | translate }}\"\n (click)=\"applyPredefinedFilters(); filtersDropdown.isOpen = false\"\n [disabled]=\"formGroup.pristine && formGroup.untouched\"\n translate\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n</form>\n" }]
|
|
156
156
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.AppStateService }, { type: i3.TranslateService }, { type: i2.GainsightService }]; }, propDecorators: { packageTypes: [{
|
|
157
157
|
type: Input
|
|
158
158
|
}], packageAvailabilities: [{
|
|
@@ -165,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
165
165
|
type: ViewChild,
|
|
166
166
|
args: [FilterInputComponent]
|
|
167
167
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9zaGFyZWQvbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2xpc3QtZmlsdGVycy9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCL0IsWUFDVSxXQUF3QixFQUN4QixFQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXBCbkMsaUJBQVksR0FBcUMs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RTtZQUMxRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUE0QixFQUFFLEVBQUU7Z0JBQzlFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXJLVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixzUkFLcEIsb0JBQW9CLGdEQzFCakMsMnpJQXdIQTsyRkRuR2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjs4TEFJbkIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQzBCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGludGVybmFsQXBwcyxcbiAgUGFja2FnZVR5cGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQYWNrYWdlRmlsdGVycywgRmlsdGVyUGlwZSB9IGZyb20gJy4vbGlzdC1maWx0ZXJzLm1vZGVsJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnLi4vZWNvc3lzdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxpc3QtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGFja2FnZVR5cGVzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ3R5cGUnXSlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWNrYWdlQXZhaWxhYmlsaXRpZXM6IChrZXlvZiBQYWNrYWdlRmlsdGVyc1snYXZhaWxhYmlsaXR5J10pW10gPSBbXTtcbiAgQElucHV0KCkgcGFja2FnZUNvbnRlbnRzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ2NvbnRlbnQnXSlbXSA9IFtdO1xuICBAT3V0cHV0KCkgZmlsdGVyUGlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGlwZT4oKTtcbiAgQFZpZXdDaGlsZChGaWx0ZXJJbnB1dENvbXBvbmVudCkgZmlsdGVySW5wdXQ6IEZpbHRlcklucHV0Q29tcG9uZW50O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxMaXN0RmlsdGVyc0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGNoaXBzOiBbc3RyaW5nLCBGb3JtQ29udHJvbF1bXSA9IFtdO1xuICBwcmVkZWZpbmVkRmlsdGVyc1Zpc2libGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nO1xuICBwcml2YXRlIGRhdGE6IElBcHBsaWNhdGlvbltdO1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJzU3RhdGU6IFBhcnRpYWw8UGFja2FnZUZpbHRlcnM+O1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJUZXJtOiBzdHJpbmc7XG4gIHByaXZhdGUgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICB0aGlzLnByZWRlZmluZWRGaWx0ZXJzVmlzaWJsZSA9XG4gICAgICB0aGlzLnBhY2thZ2VUeXBlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXRpZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucGFja2FnZUNvbnRlbnRzPy5sZW5ndGggPiAwO1xuICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLnVpLnN0YXRlLmxhbmc7XG4gIH1cblxuICBzZXRGaWx0ZXJUZXJtKGZpbHRlclRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlclRlcm0gPSBmaWx0ZXJUZXJtO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0ZJTFRFUl9URVJNLFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5zZXRDaGlwcygpO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX1BSRURFRklORURfRklMVEVSUyxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgZmlsdGVyczogdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlXG4gICAgfSk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuRklMVEVSX0xJU1QsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkxJU1RfRklMVEVSUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlJFU0VUX0ZJTFRFUixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7XG4gIH1cblxuICByZXNldEFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuZmlsdGVySW5wdXQucmVzZXQoKTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RDaGlwKGNoaXA6IFtzdHJpbmcsIEZvcm1Db250cm9sXSk6IHZvaWQge1xuICAgIGNoaXBbMV0uc2V0VmFsdWUoZmFsc2UpO1xuICAgIHRoaXMuYXBwbHlQcmVkZWZpbmVkRmlsdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0eXBlOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW1BhY2thZ2VUeXBlLk9GRklDSUFMXTogW2ZhbHNlXSxcbiAgICAgICAgW1BhY2thZ2VUeXBlLkNPTU1VTklUWV06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgYXZhaWxhYmlsaXR5OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW0FQUF9TVEFURS5TVUJTQ1JJQkVELmxhYmVsXTogW2ZhbHNlXSxcbiAgICAgICAgW0FQUF9TVEFURS5VTlBBQ0tFRC5sYWJlbF06IFtmYWxzZV0sXG4gICAgICAgIFtBUFBfU1RBVEUuRVhURVJOQUwubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLkNVU1RPTS5sYWJlbF06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgY29udGVudDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIFtBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOLmxhYmVsXTogW2ZhbHNlXVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGlwZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcCgoZGF0YTogSUFwcGxpY2F0aW9uW10pID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5maWx0ZXIoKGFwcDogSUFwcGxpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IG1hdGNoZXNCeVN0cmluZztcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclRlcm0gfHwgdGhpcy5jdXJyZW50RmlsdGVyVGVybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQnlTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID1cbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9PT0gJ2VuJyB8fCAhYXBwLm5hbWU/Lmxlbmd0aCB8fCAhaW50ZXJuYWxBcHBzW2FwcC5uYW1lXVxuICAgICAgICAgICAgICAgID8gYXBwLm5hbWVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGludGVybmFsQXBwc1thcHAubmFtZV0pO1xuICAgICAgICAgICAgbWF0Y2hlc0J5U3RyaW5nID1cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb250YWluU3RyaW5nKGFwcE5hbWUsIHRoaXMuY3VycmVudEZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udGFpblN0cmluZyhhcHAuZGVzY3JpcHRpb24sIHRoaXMuY3VycmVudEZpbHRlclRlcm0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eSA9XG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICd0eXBlJykgJiZcbiAgICAgICAgICAgIHRoaXMuYXBwTWF0Y2hlc0J5UHJlZGVmaW5lZFByb3BlcnR5KGFwcCwgJ2F2YWlsYWJpbGl0eScpICYmXG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICdjb250ZW50Jyk7XG5cbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc0J5U3RyaW5nICYmIG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJQaXBlQ2hhbmdlLmVtaXQoZmlsdGVyUGlwZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBNYXRjaGVzQnlQcmVkZWZpbmVkUHJvcGVydHkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcHJvcGVydHk6IGtleW9mIFBhY2thZ2VGaWx0ZXJzXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIGZpbHRlciBvYmplY3QgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBmaWx0ZXJzIG9yIGFsbCBmaWx0ZXJzIGFyZSBmYWxzZSwgZmlsdGVyIGlzIGluYWN0aXZlXG4gICAgY29uc3QgZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGU/Lltwcm9wZXJ0eV0gJiZcbiAgICAgICFPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZVtwcm9wZXJ0eV0pLmV2ZXJ5KHYgPT4gIXYpO1xuICAgIGlmICghZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghYXBwLmZpbHRlclByb3BzPy5bcHJvcGVydHldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGVbcHJvcGVydHldW2FwcC5maWx0ZXJQcm9wc1twcm9wZXJ0eV1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xzR3JvdXA6IEZvcm1Hcm91cCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbHNHcm91cC5jb250cm9scykuZm9yRWFjaCgoZW50cnk6IFtzdHJpbmcsIEZvcm1Db250cm9sXSkgPT4ge1xuICAgICAgICBpZiAoZW50cnlbMV0udmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNoaXBzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxjOHktZmlsdGVyIChvblNlYXJjaCk9XCJzZXRGaWx0ZXJUZXJtKCRldmVudClcIj48L2M4eS1maWx0ZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwicHJlZGVmaW5lZEZpbHRlcnNWaXNpYmxlXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duIG0tbC04IG0tci00XCJcbiAgICBkcm9wZG93blxuICAgIChpc09wZW5DaGFuZ2UpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBkLWlubGluZS1mbGV4XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGZvcm0tY29udHJvbCBwLWwtOCBwLXItMTYgYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgdy1hdXRvXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgPlxuICAgICAgICA8c3BhbiBbbmdQbHVyYWxdPVwiY2hpcHMubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIj0wXCI+XG4gICAgICAgICAgICB7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCI9MVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCJvdGhlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gcC10LTAgcC1iLTAgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCJcbiAgICAgICAgKm5nSWY9XCJjaGlwcy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjaGlwc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCIgKm5nSWY9XCJjaGlwWzFdLnZhbHVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19IHt7IGNoaXBbMF0gfCB0cmFuc2xhdGUgfCB0aXRsZWNhc2UgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RDaGlwKGNoaXApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB7eyBjaGlwWzBdIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1mb3JtXCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VUeXBlcy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwidHlwZVwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcGFja2FnZVR5cGVzXCIgW3RpdGxlXT1cInR5cGUgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInR5cGVcIiBbdmFsdWVdPVwidHlwZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyB0eXBlIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwicGFja2FnZUF2YWlsYWJpbGl0aWVzLmxlbmd0aFwiIGZvcm1Hcm91cE5hbWU9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQXZhaWxhYmlsaXR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXZhaWxhYmlsaXR5IG9mIHBhY2thZ2VBdmFpbGFiaWxpdGllc1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwiYXZhaWxhYmlsaXR5IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJhdmFpbGFiaWxpdHlcIiBbdmFsdWVdPVwiYXZhaWxhYmlsaXR5XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGF2YWlsYWJpbGl0eSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VDb250ZW50cy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwiY29udGVudFwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdDb250ZW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwYWNrYWdlQ29udGVudHNcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImNvbnRlbnQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRlbnRcIiBbdmFsdWVdPVwiY29udGVudFwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBjb250ZW50IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IGQtZmxleCBnYXAtOCBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJyZXNldCgpOyBmaWx0ZXJzRHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgUmVzZXRcbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTsgZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUdyb3VwLnByaXN0aW5lICYmIGZvcm1Hcm91cC51bnRvdWNoZWRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQXBwbHlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9zaGFyZWQvbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2xpc3QtZmlsdGVycy9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCL0IsWUFDVSxXQUF3QixFQUN4QixFQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXBCbkMsaUJBQVksR0FBcUMs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RTtZQUMxRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUE0QixFQUFFLEVBQUU7Z0JBQzlFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXJLVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixzUkFLcEIsb0JBQW9CLGdEQzFCakMsMDFJQXdIQTsyRkRuR2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjs4TEFJbkIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQzBCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGludGVybmFsQXBwcyxcbiAgUGFja2FnZVR5cGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQYWNrYWdlRmlsdGVycywgRmlsdGVyUGlwZSB9IGZyb20gJy4vbGlzdC1maWx0ZXJzLm1vZGVsJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnLi4vZWNvc3lzdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxpc3QtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGFja2FnZVR5cGVzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ3R5cGUnXSlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWNrYWdlQXZhaWxhYmlsaXRpZXM6IChrZXlvZiBQYWNrYWdlRmlsdGVyc1snYXZhaWxhYmlsaXR5J10pW10gPSBbXTtcbiAgQElucHV0KCkgcGFja2FnZUNvbnRlbnRzOiAoa2V5b2YgUGFja2FnZUZpbHRlcnNbJ2NvbnRlbnQnXSlbXSA9IFtdO1xuICBAT3V0cHV0KCkgZmlsdGVyUGlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGlwZT4oKTtcbiAgQFZpZXdDaGlsZChGaWx0ZXJJbnB1dENvbXBvbmVudCkgZmlsdGVySW5wdXQ6IEZpbHRlcklucHV0Q29tcG9uZW50O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxMaXN0RmlsdGVyc0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGNoaXBzOiBbc3RyaW5nLCBGb3JtQ29udHJvbF1bXSA9IFtdO1xuICBwcmVkZWZpbmVkRmlsdGVyc1Zpc2libGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nO1xuICBwcml2YXRlIGRhdGE6IElBcHBsaWNhdGlvbltdO1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJzU3RhdGU6IFBhcnRpYWw8UGFja2FnZUZpbHRlcnM+O1xuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJUZXJtOiBzdHJpbmc7XG4gIHByaXZhdGUgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICB0aGlzLnByZWRlZmluZWRGaWx0ZXJzVmlzaWJsZSA9XG4gICAgICB0aGlzLnBhY2thZ2VUeXBlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXRpZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucGFja2FnZUNvbnRlbnRzPy5sZW5ndGggPiAwO1xuICAgIHRoaXMuY3VycmVudExhbmcgPSB0aGlzLnVpLnN0YXRlLmxhbmc7XG4gIH1cblxuICBzZXRGaWx0ZXJUZXJtKGZpbHRlclRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlclRlcm0gPSBmaWx0ZXJUZXJtO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0ZJTFRFUl9URVJNLFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UHJlZGVmaW5lZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5zZXRDaGlwcygpO1xuICAgIHRoaXMuc2V0UGlwZSgpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5GSUxURVJfTElTVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuTElTVF9GSUxURVJTLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX1BSRURFRklORURfRklMVEVSUyxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgZmlsdGVyczogdGhpcy5jdXJyZW50RmlsdGVyc1N0YXRlXG4gICAgfSk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuRklMVEVSX0xJU1QsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkxJU1RfRklMVEVSUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlJFU0VUX0ZJTFRFUixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7XG4gIH1cblxuICByZXNldEFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuZmlsdGVySW5wdXQucmVzZXQoKTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RDaGlwKGNoaXA6IFtzdHJpbmcsIEZvcm1Db250cm9sXSk6IHZvaWQge1xuICAgIGNoaXBbMV0uc2V0VmFsdWUoZmFsc2UpO1xuICAgIHRoaXMuYXBwbHlQcmVkZWZpbmVkRmlsdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0eXBlOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW1BhY2thZ2VUeXBlLk9GRklDSUFMXTogW2ZhbHNlXSxcbiAgICAgICAgW1BhY2thZ2VUeXBlLkNPTU1VTklUWV06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgYXZhaWxhYmlsaXR5OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgW0FQUF9TVEFURS5TVUJTQ1JJQkVELmxhYmVsXTogW2ZhbHNlXSxcbiAgICAgICAgW0FQUF9TVEFURS5VTlBBQ0tFRC5sYWJlbF06IFtmYWxzZV0sXG4gICAgICAgIFtBUFBfU1RBVEUuRVhURVJOQUwubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLkNVU1RPTS5sYWJlbF06IFtmYWxzZV1cbiAgICAgIH0pLFxuICAgICAgY29udGVudDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIFtBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQubGFiZWxdOiBbZmFsc2VdLFxuICAgICAgICBbQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOLmxhYmVsXTogW2ZhbHNlXVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGlwZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcCgoZGF0YTogSUFwcGxpY2F0aW9uW10pID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5maWx0ZXIoKGFwcDogSUFwcGxpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IG1hdGNoZXNCeVN0cmluZztcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclRlcm0gfHwgdGhpcy5jdXJyZW50RmlsdGVyVGVybS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQnlTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID1cbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZyA9PT0gJ2VuJyB8fCAhYXBwLm5hbWU/Lmxlbmd0aCB8fCAhaW50ZXJuYWxBcHBzW2FwcC5uYW1lXVxuICAgICAgICAgICAgICAgID8gYXBwLm5hbWVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGludGVybmFsQXBwc1thcHAubmFtZV0pO1xuICAgICAgICAgICAgbWF0Y2hlc0J5U3RyaW5nID1cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb250YWluU3RyaW5nKGFwcE5hbWUsIHRoaXMuY3VycmVudEZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udGFpblN0cmluZyhhcHAuZGVzY3JpcHRpb24sIHRoaXMuY3VycmVudEZpbHRlclRlcm0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eSA9XG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICd0eXBlJykgJiZcbiAgICAgICAgICAgIHRoaXMuYXBwTWF0Y2hlc0J5UHJlZGVmaW5lZFByb3BlcnR5KGFwcCwgJ2F2YWlsYWJpbGl0eScpICYmXG4gICAgICAgICAgICB0aGlzLmFwcE1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eShhcHAsICdjb250ZW50Jyk7XG5cbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc0J5U3RyaW5nICYmIG1hdGNoZXNCeVByZWRlZmluZWRQcm9wZXJ0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJQaXBlQ2hhbmdlLmVtaXQoZmlsdGVyUGlwZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBNYXRjaGVzQnlQcmVkZWZpbmVkUHJvcGVydHkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcHJvcGVydHk6IGtleW9mIFBhY2thZ2VGaWx0ZXJzXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIGZpbHRlciBvYmplY3QgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBmaWx0ZXJzIG9yIGFsbCBmaWx0ZXJzIGFyZSBmYWxzZSwgZmlsdGVyIGlzIGluYWN0aXZlXG4gICAgY29uc3QgZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGU/Lltwcm9wZXJ0eV0gJiZcbiAgICAgICFPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudEZpbHRlcnNTdGF0ZVtwcm9wZXJ0eV0pLmV2ZXJ5KHYgPT4gIXYpO1xuICAgIGlmICghZmlsdGVyRm9yUHJvcGVydHlJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghYXBwLmZpbHRlclByb3BzPy5bcHJvcGVydHldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJzU3RhdGVbcHJvcGVydHldW2FwcC5maWx0ZXJQcm9wc1twcm9wZXJ0eV1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2xzR3JvdXA6IEZvcm1Hcm91cCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbHNHcm91cC5jb250cm9scykuZm9yRWFjaCgoZW50cnk6IFtzdHJpbmcsIEZvcm1Db250cm9sXSkgPT4ge1xuICAgICAgICBpZiAoZW50cnlbMV0udmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNoaXBzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxjOHktZmlsdGVyIChvblNlYXJjaCk9XCJzZXRGaWx0ZXJUZXJtKCRldmVudClcIj48L2M4eS1maWx0ZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwicHJlZGVmaW5lZEZpbHRlcnNWaXNpYmxlXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duIG0tbC04IG0tci00XCJcbiAgICBkcm9wZG93blxuICAgIChpc09wZW5DaGFuZ2UpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBkLWlubGluZS1mbGV4XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGZvcm0tY29udHJvbCBwLWwtOCBwLXItMTYgYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgdy1hdXRvXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgPlxuICAgICAgICA8c3BhbiBbbmdQbHVyYWxdPVwiY2hpcHMubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIj0wXCI+XG4gICAgICAgICAgICB7eyAnRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCI9MVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCJvdGhlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+e3sgY2hpcHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAge3sgJ0ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gcC10LTAgcC1iLTAgZC1mbGV4IGdhcC00IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCJcbiAgICAgICAgKm5nSWY9XCJjaGlwcy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjaGlwc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBjaGlwXCIgKm5nSWY9XCJjaGlwWzFdLnZhbHVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19IHt7IGNoaXBbMF0gfCB0cmFuc2xhdGUgfCB0aXRsZWNhc2UgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RDaGlwKGNoaXApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB7eyBjaGlwWzBdIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1mb3JtXCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInBhY2thZ2VUeXBlcy5sZW5ndGhcIiBmb3JtR3JvdXBOYW1lPVwidHlwZVwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7ICdUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcGFja2FnZVR5cGVzXCIgW3RpdGxlXT1cInR5cGUgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInR5cGVcIiBbdmFsdWVdPVwidHlwZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyB0eXBlIHwgdHJhbnNsYXRlIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwicGFja2FnZUF2YWlsYWJpbGl0aWVzLmxlbmd0aFwiIGZvcm1Hcm91cE5hbWU9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQXZhaWxhYmlsaXR5YG9mIHBhY2thZ2UgYmFzZWQgb24gYXBwIHN0YXRlYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF2YWlsYWJpbGl0eSBvZiBwYWNrYWdlQXZhaWxhYmlsaXRpZXNcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImF2YWlsYWJpbGl0eSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiYXZhaWxhYmlsaXR5XCIgW3ZhbHVlXT1cImF2YWlsYWJpbGl0eVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBhdmFpbGFiaWxpdHkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgKm5nSWY9XCJwYWNrYWdlQ29udGVudHMubGVuZ3RoXCIgZm9ybUdyb3VwTmFtZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyAnQ29udGVudCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcGFja2FnZUNvbnRlbnRzXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjb250ZW50IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250ZW50XCIgW3ZhbHVlXT1cImNvbnRlbnRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29udGVudCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggZ2FwLTggc2VwYXJhdG9yLXRvcFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwicmVzZXQoKTsgZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIFJlc2V0XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJhcHBseVByZWRlZmluZWRGaWx0ZXJzKCk7IGZpbHRlcnNEcm9wZG93bi5pc09wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5wcmlzdGluZSAmJiBmb3JtR3JvdXAudW50b3VjaGVkXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEFwcGx5XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
|
|
@@ -849,10 +849,10 @@ class DashboardAvailabilityComponent {
|
|
|
849
849
|
}
|
|
850
850
|
}
|
|
851
851
|
DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i5.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
852
|
-
DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i5.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
852
|
+
DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i5.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
853
853
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
|
|
854
854
|
type: Component,
|
|
855
|
-
args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
|
|
855
|
+
args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
|
|
856
856
|
}], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i5.GainsightService }]; }, propDecorators: { globalRolesIds: [{
|
|
857
857
|
type: Input
|
|
858
858
|
}], globalRolesIdsChange: [{
|
|
@@ -973,10 +973,10 @@ class DashboardDetailComponent {
|
|
|
973
973
|
}
|
|
974
974
|
}
|
|
975
975
|
DashboardDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: i3$1.BsModalRef }, { token: ContextDashboardService }, { token: i5.NavigatorService }, { token: i5.Permissions }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
976
|
-
DashboardDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", viewQueries: [{ propertyName: "dashboardDetailForm", first: true, predicate: ["dashboardDetailForm"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ title | translate }}</h3>\n </div>\n\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"p-l-24 p-r-24\">\n <form\n class=\"d-contents\"\n #dashboardDetailForm=\"ngForm\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-icon-selector-wrapper\n [selectedIcon]=\"dashboard.icon || 'th'\"\n (onSelect)=\"selectIcon($event)\"\n ></c8y-icon-selector-wrapper>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span\n class=\"m-r-4\"\n id=\"menuLabel\"\n >\n {{ 'Menu label' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"dashboardName\"\n maxlength=\"512\"\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n aria-labelledby=\"description\"\n name=\"description\"\n rows=\"2\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"positionNav\">\n <span\n class=\"m-r-4\"\n id=\"positionNav\"\n >\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n type=\"number\"\n required\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n name=\"isNavigatorNode\"\n type=\"checkbox\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label\n class=\"c8y-checkbox\"\n title=\"{{ applyToDevicesOfTypeTitle }}\"\n >\n <input\n name=\"deviceType\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n translate\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div\n class=\"alert alert-info m-b-24\"\n *ngIf=\"isDeviceType\"\n >\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\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.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { 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: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i8.IconSelectorWrapperComponent, selector: "c8y-icon-selector-wrapper", inputs: ["canRemoveIcon", "selectedIcon", "iconSize"], outputs: ["onSelect"] }, { 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: "component", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.SlicePipe, name: "slice" }] });
|
|
976
|
+
DashboardDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", viewQueries: [{ propertyName: "dashboardDetailForm", first: true, predicate: ["dashboardDetailForm"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ title | translate }}</h3>\n </div>\n\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"p-l-24 p-r-24\">\n <form\n class=\"d-contents\"\n #dashboardDetailForm=\"ngForm\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-icon-selector-wrapper\n [selectedIcon]=\"dashboard.icon || 'th'\"\n (onSelect)=\"selectIcon($event)\"\n ></c8y-icon-selector-wrapper>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span\n class=\"m-r-4\"\n id=\"menuLabel\"\n >\n {{ 'Menu label' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"dashboardName\"\n maxlength=\"512\"\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n aria-labelledby=\"description\"\n name=\"description\"\n rows=\"2\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"positionNav\">\n <span\n class=\"m-r-4\"\n id=\"positionNav\"\n >\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n type=\"number\"\n required\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n name=\"isNavigatorNode\"\n type=\"checkbox\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label\n class=\"c8y-checkbox\"\n title=\"{{ applyToDevicesOfTypeTitle }}\"\n >\n <input\n name=\"deviceType\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n translate\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div\n class=\"alert alert-info m-b-24\"\n *ngIf=\"isDeviceType\"\n >\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false && !hideAvailability\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\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.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { 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: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i8.IconSelectorWrapperComponent, selector: "c8y-icon-selector-wrapper", inputs: ["canRemoveIcon", "selectedIcon", "iconSize"], outputs: ["onSelect"] }, { 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: "component", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.SlicePipe, name: "slice" }] });
|
|
977
977
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DashboardDetailComponent, decorators: [{
|
|
978
978
|
type: Component,
|
|
979
|
-
args: [{ selector: 'c8y-dashboard-detail', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ title | translate }}</h3>\n </div>\n\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"p-l-24 p-r-24\">\n <form\n class=\"d-contents\"\n #dashboardDetailForm=\"ngForm\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-icon-selector-wrapper\n [selectedIcon]=\"dashboard.icon || 'th'\"\n (onSelect)=\"selectIcon($event)\"\n ></c8y-icon-selector-wrapper>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span\n class=\"m-r-4\"\n id=\"menuLabel\"\n >\n {{ 'Menu label' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"dashboardName\"\n maxlength=\"512\"\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n aria-labelledby=\"description\"\n name=\"description\"\n rows=\"2\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"positionNav\">\n <span\n class=\"m-r-4\"\n id=\"positionNav\"\n >\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n type=\"number\"\n required\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n name=\"isNavigatorNode\"\n type=\"checkbox\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label\n class=\"c8y-checkbox\"\n title=\"{{ applyToDevicesOfTypeTitle }}\"\n >\n <input\n name=\"deviceType\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n translate\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div\n class=\"alert alert-info m-b-24\"\n *ngIf=\"isDeviceType\"\n >\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
|
|
979
|
+
args: [{ selector: 'c8y-dashboard-detail', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ title | translate }}</h3>\n </div>\n\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div class=\"p-l-24 p-r-24\">\n <form\n class=\"d-contents\"\n #dashboardDetailForm=\"ngForm\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-icon-selector-wrapper\n [selectedIcon]=\"dashboard.icon || 'th'\"\n (onSelect)=\"selectIcon($event)\"\n ></c8y-icon-selector-wrapper>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span\n class=\"m-r-4\"\n id=\"menuLabel\"\n >\n {{ 'Menu label' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"dashboardName\"\n maxlength=\"512\"\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n aria-labelledby=\"description\"\n name=\"description\"\n rows=\"2\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div\n class=\"col-sm-6\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"positionNav\">\n <span\n class=\"m-r-4\"\n id=\"positionNav\"\n >\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n type=\"number\"\n required\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n name=\"isNavigatorNode\"\n type=\"checkbox\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div\n class=\"col-sm-6\"\n *ngIf=\"isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label\n class=\"c8y-checkbox\"\n title=\"{{ applyToDevicesOfTypeTitle }}\"\n >\n <input\n name=\"deviceType\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n translate\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div\n class=\"alert alert-info m-b-24\"\n *ngIf=\"isDeviceType\"\n >\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false && !hideAvailability\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
|
|
980
980
|
}], ctorParameters: function () { return [{ type: i3$1.BsModalRef }, { type: ContextDashboardService }, { type: i5.NavigatorService }, { type: i5.Permissions }, { type: i3.TranslateService }]; }, propDecorators: { dashboardDetailForm: [{
|
|
981
981
|
type: ViewChild,
|
|
982
982
|
args: ['dashboardDetailForm', { static: true }]
|
|
@@ -1448,6 +1448,10 @@ class ContextDashboardComponent {
|
|
|
1448
1448
|
this.canDelete = true;
|
|
1449
1449
|
this.isLoading = true;
|
|
1450
1450
|
this.showContextHelpButton = true;
|
|
1451
|
+
/**
|
|
1452
|
+
* Hides dashboard availability selection.
|
|
1453
|
+
*/
|
|
1454
|
+
this.hideAvailability = false;
|
|
1451
1455
|
this.class = '';
|
|
1452
1456
|
this.widgets = [];
|
|
1453
1457
|
}
|
|
@@ -1571,6 +1575,7 @@ class ContextDashboardComponent {
|
|
|
1571
1575
|
deviceType: this.context.type,
|
|
1572
1576
|
isDeviceType: this.contextDashboardService.isDeviceType(this.mo),
|
|
1573
1577
|
isNamedDashboard: this.contextDashboardService.isNamed(this.mo),
|
|
1578
|
+
hideAvailability: this.hideAvailability,
|
|
1574
1579
|
isReport
|
|
1575
1580
|
};
|
|
1576
1581
|
const modal = this.bsModal.show(DashboardDetailComponent, {
|
|
@@ -1884,7 +1889,7 @@ class ContextDashboardComponent {
|
|
|
1884
1889
|
}
|
|
1885
1890
|
}
|
|
1886
1891
|
ContextDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", 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 });
|
|
1887
|
-
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", 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", translateWidgetTitle: "translateWidgetTitle" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/users-guide/cockpit/#dashboards\"\n *ngIf=\"showContextHelpButton\"\n></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 ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\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", "inGroupPriority"] }, { 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" }] });
|
|
1892
|
+
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", 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", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/users-guide/cockpit/#dashboards\"\n *ngIf=\"showContextHelpButton\"\n></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 ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy,\n isCopyDisabled: isCopyDisabled,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\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", "inGroupPriority"] }, { 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" }] });
|
|
1888
1893
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ContextDashboardComponent, decorators: [{
|
|
1889
1894
|
type: Component,
|
|
1890
1895
|
args: [{ selector: 'c8y-context-dashboard', host: {
|
|
@@ -1922,6 +1927,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
1922
1927
|
type: Input
|
|
1923
1928
|
}], translateWidgetTitle: [{
|
|
1924
1929
|
type: Input
|
|
1930
|
+
}], hideAvailability: [{
|
|
1931
|
+
type: Input
|
|
1925
1932
|
}], class: [{
|
|
1926
1933
|
type: HostBinding,
|
|
1927
1934
|
args: ['class']
|
|
@@ -1957,10 +1964,10 @@ class CockpitDashboardComponent {
|
|
|
1957
1964
|
}
|
|
1958
1965
|
}
|
|
1959
1966
|
CockpitDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CockpitDashboardComponent, deps: [{ token: i5.AppStateService }, { token: COCKPIT_HOME_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
1960
|
-
CockpitDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
1967
|
+
CockpitDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
1961
1968
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CockpitDashboardComponent, decorators: [{
|
|
1962
1969
|
type: Component,
|
|
1963
|
-
args: [{ selector: 'c8y-cockpit-dashboard', template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n" }]
|
|
1970
|
+
args: [{ selector: 'c8y-cockpit-dashboard', template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n" }]
|
|
1964
1971
|
}], ctorParameters: function () {
|
|
1965
1972
|
return [{ type: i5.AppStateService }, { type: undefined, decorators: [{
|
|
1966
1973
|
type: Optional
|
|
@@ -2560,10 +2567,10 @@ class DeviceInfoDashboardComponent {
|
|
|
2560
2567
|
}
|
|
2561
2568
|
}
|
|
2562
2569
|
DeviceInfoDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DeviceInfoDashboardComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: WidgetService }, { token: i3.TranslateService }, { token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2563
|
-
DeviceInfoDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ 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: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle"] }] });
|
|
2570
|
+
DeviceInfoDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ 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: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }] });
|
|
2564
2571
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DeviceInfoDashboardComponent, decorators: [{
|
|
2565
2572
|
type: Component,
|
|
2566
|
-
args: [{ selector: 'c8y-device-info-dashboard-dashboard', template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n ></c8y-context-dashboard>\n</div>\n" }]
|
|
2573
|
+
args: [{ selector: 'c8y-device-info-dashboard-dashboard', template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n" }]
|
|
2567
2574
|
}], ctorParameters: function () { return [{ type: i1$1.ActivatedRoute }, { type: WidgetService }, { type: i3.TranslateService }, { type: i1.InventoryService }]; } });
|
|
2568
2575
|
|
|
2569
2576
|
class DeviceInfoDashboardModule {
|
|
@@ -2633,10 +2640,10 @@ class DeviceManagementHomeDashboardComponent {
|
|
|
2633
2640
|
}
|
|
2634
2641
|
}
|
|
2635
2642
|
DeviceManagementHomeDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DeviceManagementHomeDashboardComponent, deps: [{ token: WidgetService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2636
|
-
DeviceManagementHomeDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DeviceManagementHomeDashboardComponent, selector: "c8y-device-management-home-dashboard", ngImport: i0, template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
2643
|
+
DeviceManagementHomeDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DeviceManagementHomeDashboardComponent, selector: "c8y-device-management-home-dashboard", ngImport: i0, template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "disabled", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
2637
2644
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DeviceManagementHomeDashboardComponent, decorators: [{
|
|
2638
2645
|
type: Component,
|
|
2639
|
-
args: [{ selector: 'c8y-device-management-home-dashboard', template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n></c8y-context-dashboard>\n" }]
|
|
2646
|
+
args: [{ selector: 'c8y-device-management-home-dashboard', template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n" }]
|
|
2640
2647
|
}], ctorParameters: function () { return [{ type: WidgetService }]; } });
|
|
2641
2648
|
|
|
2642
2649
|
class DeviceManagementHomeDashboardModule {
|