@c8y/ngx-components 1021.6.0 → 1021.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/branding/shared/lazy/add-branding-modal/add-branding-modal.component.d.ts +14 -1
  2. package/branding/shared/lazy/add-branding-modal/add-branding-modal.component.d.ts.map +1 -1
  3. package/cockpit-config/cockpit-config.model.d.ts +1 -0
  4. package/cockpit-config/cockpit-config.model.d.ts.map +1 -1
  5. package/context-dashboard/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
  6. package/core/common/options.service.d.ts +1 -1
  7. package/core/common/options.service.d.ts.map +1 -1
  8. package/core/forms/validation-pattern.d.ts +4 -0
  9. package/core/forms/validation-pattern.d.ts.map +1 -1
  10. package/core/plugins/plugins.service.d.ts +1 -1
  11. package/core/plugins/plugins.service.d.ts.map +1 -1
  12. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +3 -3
  13. package/esm2022/branding/shared/lazy/add-branding-modal/add-branding-modal.component.mjs +49 -5
  14. package/esm2022/cockpit-config/cockpit-config.model.mjs +3 -2
  15. package/esm2022/cockpit-config/feature-config.component.mjs +3 -3
  16. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.module.mjs +5 -3
  17. package/esm2022/core/common/options.service.mjs +3 -3
  18. package/esm2022/core/docs/defaults.items.mjs +2 -2
  19. package/esm2022/core/forms/validation-pattern.mjs +5 -1
  20. package/esm2022/core/plugins/plugins.service.mjs +3 -3
  21. package/esm2022/core/router/context-route.guard.mjs +2 -2
  22. package/esm2022/core/search/search-input.component.mjs +3 -3
  23. package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +7 -5
  24. package/esm2022/search/search-action.component.mjs +3 -3
  25. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +90 -0
  26. package/esm2022/tenants/custom-properties/custom-properties.service.mjs +76 -0
  27. package/esm2022/tenants/custom-properties/custom-property-field/custom-property-field.component.mjs +29 -0
  28. package/esm2022/tenants/index.mjs +2 -1
  29. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +92 -0
  30. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +124 -0
  31. package/esm2022/tenants/tenants.module.mjs +42 -4
  32. package/esm2022/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.mjs +2 -2
  33. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
  34. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +48 -4
  36. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +4 -3
  38. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -2
  40. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +6 -4
  42. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-search.mjs +2 -2
  44. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-tenants.mjs +416 -11
  46. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +1 -1
  48. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components.mjs +277 -273
  50. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  51. package/locales/de.po +22 -19
  52. package/locales/en.po +3 -0
  53. package/locales/en_US.po +3 -0
  54. package/locales/es.po +167 -170
  55. package/locales/fr.po +134 -128
  56. package/locales/ja_JP.po +171 -133
  57. package/locales/ko.po +543 -49
  58. package/locales/locales.pot +49 -2
  59. package/locales/nl.po +134 -128
  60. package/locales/pl.po +138 -135
  61. package/locales/pt_BR.po +144 -141
  62. package/locales/zh_CN.po +524 -30
  63. package/locales/zh_TW.po +524 -30
  64. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/tenants/custom-properties/custom-properties.component.d.ts +26 -0
  67. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -0
  68. package/tenants/custom-properties/custom-properties.service.d.ts +26 -0
  69. package/tenants/custom-properties/custom-properties.service.d.ts.map +1 -0
  70. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts +10 -0
  71. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts.map +1 -0
  72. package/tenants/index.d.ts +1 -0
  73. package/tenants/index.d.ts.map +1 -1
  74. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +117 -0
  75. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -0
  76. package/tenants/tenant-limits/tenant-limits.component.d.ts +39 -0
  77. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -0
  78. package/tenants/tenants.module.d.ts.map +1 -1
@@ -0,0 +1,124 @@
1
+ import { Component } from '@angular/core';
2
+ import { FormGroup, ReactiveFormsModule, FormControl } from '@angular/forms';
3
+ import { CommonModule } from '@angular/common';
4
+ import { ApplicationService, TenantOptionsService, TenantService } from '@c8y/client';
5
+ import { ActivatedRoute, RouterLink } from '@angular/router';
6
+ import { AlertService, CoreModule, FormsModule, gettext } from '@c8y/ngx-components';
7
+ import { tenantLimitsCustomProperties } from './tenant-limits-definitions';
8
+ import { get } from 'lodash-es';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@c8y/client";
11
+ import * as i2 from "@c8y/ngx-components";
12
+ import * as i3 from "@angular/router";
13
+ import * as i4 from "@angular/common";
14
+ import * as i5 from "@angular/forms";
15
+ export class TenantLimitsComponent {
16
+ constructor(tenantService, tenantOptionsService, alertService, activatedRoute, applicationService) {
17
+ this.tenantService = tenantService;
18
+ this.tenantOptionsService = tenantOptionsService;
19
+ this.alertService = alertService;
20
+ this.activatedRoute = activatedRoute;
21
+ this.applicationService = applicationService;
22
+ this.fieldDefinitions = { ...tenantLimitsCustomProperties };
23
+ this.limitsForm = new FormGroup({});
24
+ this.tenant = null;
25
+ this.initialized = false;
26
+ }
27
+ async ngOnInit() {
28
+ await this.loadTenantDetails();
29
+ await this.setupConditionalFields();
30
+ this.generateForm();
31
+ this.initialized = true;
32
+ }
33
+ async onSubmit() {
34
+ if (this.limitsForm.invalid || !this.tenant) {
35
+ return;
36
+ }
37
+ const updatedTenant = {
38
+ ...this.tenant,
39
+ customProperties: {
40
+ ...this.tenant.customProperties,
41
+ ...this.getDirtyValues()
42
+ }
43
+ };
44
+ try {
45
+ await this.tenantService.update(updatedTenant);
46
+ this.alertService.success(gettext('Limit values saved.'));
47
+ }
48
+ catch (error) {
49
+ this.alertService.addServerFailure(error);
50
+ }
51
+ }
52
+ async loadTenantDetails() {
53
+ try {
54
+ const result = await this.tenantService.detail(this.activatedRoute.snapshot.parent.data.contextData.id);
55
+ this.tenant = result.data;
56
+ }
57
+ catch (error) {
58
+ this.alertService.addServerFailure(error);
59
+ }
60
+ }
61
+ async setupConditionalFields() {
62
+ try {
63
+ const apps = (await this.applicationService.listByUser(undefined, {
64
+ dropOverwrittenApps: true,
65
+ noPaging: true
66
+ })).data;
67
+ const cepModuleEnabled = apps.some(app => app.name === 'cep' || app.contextPath === 'cep');
68
+ const dataBrokerModuleEnabled = apps.some(app => app.name === 'feature-broker' || app.contextPath === 'feature-broker');
69
+ const gainsightAvailable = await this.isGainsightAvailable();
70
+ if (!cepModuleEnabled) {
71
+ delete this.fieldDefinitions.cepServerQueueLimit;
72
+ }
73
+ if (!dataBrokerModuleEnabled) {
74
+ delete this.fieldDefinitions.dataBrokerQueueLimit;
75
+ }
76
+ if (!gainsightAvailable) {
77
+ delete this.fieldDefinitions.gainsightEnabled;
78
+ }
79
+ this.fieldKeys = Object.keys(this.fieldDefinitions);
80
+ }
81
+ catch (ex) {
82
+ this.alertService.addServerFailure(ex);
83
+ }
84
+ }
85
+ async isGainsightAvailable() {
86
+ if (get(window, 'C8Y_APP.gainsightKey')) {
87
+ return true;
88
+ }
89
+ try {
90
+ const res = await this.tenantOptionsService.detail({
91
+ category: 'configuration',
92
+ key: 'system.gainsight.api.key'
93
+ });
94
+ return !!res.data.value;
95
+ }
96
+ catch (error) {
97
+ return false;
98
+ }
99
+ }
100
+ generateForm() {
101
+ for (const field of Object.values(tenantLimitsCustomProperties)) {
102
+ this.limitsForm.addControl(field.id, new FormControl(field.defaultValue, field.validators));
103
+ }
104
+ const customProps = this.tenant?.customProperties || {};
105
+ this.limitsForm.patchValue(customProps);
106
+ }
107
+ getDirtyValues() {
108
+ const dirtyValues = {};
109
+ Object.keys(this.limitsForm.controls).forEach(key => {
110
+ const control = this.limitsForm.controls[key];
111
+ if (control && control.dirty) {
112
+ dirtyValues[key] = control.value;
113
+ }
114
+ });
115
+ return dirtyValues;
116
+ }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TenantLimitsComponent, deps: [{ token: i1.TenantService }, { token: i1.TenantOptionsService }, { token: i2.AlertService }, { token: i3.ActivatedRoute }, { token: i1.ApplicationService }], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TenantLimitsComponent, isStandalone: true, selector: "c8y-tenant-limits", ngImport: i0, template: "<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: CoreModule }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TenantLimitsComponent, decorators: [{
121
+ type: Component,
122
+ args: [{ selector: 'c8y-tenant-limits', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, CoreModule, RouterLink], template: "<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n [formGroup]=\"limitsForm\"\n (ngSubmit)=\"onSubmit()\"\n>\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Limits\n </div>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#setting-limits\"></c8y-help>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let key of fieldKeys\">\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'text'\">\n <ng-container\n *ngTemplateOutlet=\"textField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"fieldDefinitions[key].type === 'checkbox'\">\n <ng-container\n *ngTemplateOutlet=\"checkboxField; context: { $implicit: fieldDefinitions[key] }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"limitsForm.invalid\"\n translate\n >\n Save\n </button>\n </div>\n </div>\n\n <ng-template\n #textField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate: fieldDefinition.labelArgs }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [placeholder]=\"fieldDefinition.placeholder | translate: fieldDefinition.placeholderArgs\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #checkboxField\n let-fieldDefinition\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-template>\n</form>\n" }]
123
+ }], ctorParameters: () => [{ type: i1.TenantService }, { type: i1.TenantOptionsService }, { type: i2.AlertService }, { type: i3.ActivatedRoute }, { type: i1.ApplicationService }] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpbWl0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7O0FBUWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFDVSxhQUE0QixFQUM1QixvQkFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsa0JBQXNDO1FBSnRDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFY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R0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzhHQXJIVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw2RUNyQmxDLHF4SEE0SUEsMkNEMUhZLFlBQVksc2FBQUUsbUJBQW1CLCt4Q0FBRSxXQUFXLGtUQUFFLFVBQVUscXBCQUFFLFVBQVU7OzJGQUdyRSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSVJlc3VsdCxcbiAgSVRlbmFudCxcbiAgVGVuYW50T3B0aW9uc1NlcnZpY2UsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBDb3JlTW9kdWxlLCBGb3Jtc01vZHVsZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgdGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllcyB9IGZyb20gJy4vdGVuYW50LWxpbWl0cy1kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdGVuYW50LWxpbWl0cycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBDb3JlTW9kdWxlLCBSb3V0ZXJMaW5rXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbmFudC1saW1pdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudExpbWl0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpZWxkRGVmaW5pdGlvbnMgPSB7IC4uLnRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXMgfTtcbiAgZmllbGRLZXlzOiBzdHJpbmdbXTtcbiAgbGltaXRzRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRlbmFudDogSVRlbmFudCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudE9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFRlbmFudERldGFpbHMoKTtcbiAgICBhd2FpdCB0aGlzLnNldHVwQ29uZGl0aW9uYWxGaWVsZHMoKTtcbiAgICB0aGlzLmdlbmVyYXRlRm9ybSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMubGltaXRzRm9ybS5pbnZhbGlkIHx8ICF0aGlzLnRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4udGhpcy5nZXREaXJ0eVZhbHVlcygpXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHVwZGF0ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdMaW1pdCB2YWx1ZXMgc2F2ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW5hbnREZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IElSZXN1bHQ8SVRlbmFudD4gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkXG4gICAgICApO1xuICAgICAgdGhpcy50ZW5hbnQgPSByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXR1cENvbmRpdGlvbmFsRmllbGRzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlVc2VyKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGRyb3BPdmVyd3JpdHRlbkFwcHM6IHRydWUsXG4gICAgICAgICAgbm9QYWdpbmc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICkuZGF0YTtcblxuICAgICAgY29uc3QgY2VwTW9kdWxlRW5hYmxlZCA9IGFwcHMuc29tZShhcHAgPT4gYXBwLm5hbWUgPT09ICdjZXAnIHx8IGFwcC5jb250ZXh0UGF0aCA9PT0gJ2NlcCcpO1xuICAgICAgY29uc3QgZGF0YUJyb2tlck1vZHVsZUVuYWJsZWQgPSBhcHBzLnNvbWUoXG4gICAgICAgIGFwcCA9PiBhcHAubmFtZSA9PT0gJ2ZlYXR1cmUtYnJva2VyJyB8fCBhcHAuY29udGV4dFBhdGggPT09ICdmZWF0dXJlLWJyb2tlcidcbiAgICAgICk7XG4gICAgICBjb25zdCBnYWluc2lnaHRBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmlzR2FpbnNpZ2h0QXZhaWxhYmxlKCk7XG5cbiAgICAgIGlmICghY2VwTW9kdWxlRW5hYmxlZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5maWVsZERlZmluaXRpb25zLmNlcFNlcnZlclF1ZXVlTGltaXQ7XG4gICAgICB9XG4gICAgICBpZiAoIWRhdGFCcm9rZXJNb2R1bGVFbmFibGVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpZWxkRGVmaW5pdGlvbnMuZGF0YUJyb2tlclF1ZXVlTGltaXQ7XG4gICAgICB9XG4gICAgICBpZiAoIWdhaW5zaWdodEF2YWlsYWJsZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5maWVsZERlZmluaXRpb25zLmdhaW5zaWdodEVuYWJsZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGREZWZpbml0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaXNHYWluc2lnaHRBdmFpbGFibGUoKSB7XG4gICAgaWYgKGdldCh3aW5kb3csICdDOFlfQVBQLmdhaW5zaWdodEtleScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50ZW5hbnRPcHRpb25zU2VydmljZS5kZXRhaWwoe1xuICAgICAgICBjYXRlZ29yeTogJ2NvbmZpZ3VyYXRpb24nLFxuICAgICAgICBrZXk6ICdzeXN0ZW0uZ2FpbnNpZ2h0LmFwaS5rZXknXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAhIXJlcy5kYXRhLnZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm0oKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBPYmplY3QudmFsdWVzKHRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmxpbWl0c0Zvcm0uYWRkQ29udHJvbChmaWVsZC5pZCwgbmV3IEZvcm1Db250cm9sKGZpZWxkLmRlZmF1bHRWYWx1ZSwgZmllbGQudmFsaWRhdG9ycykpO1xuICAgIH1cbiAgICBjb25zdCBjdXN0b21Qcm9wcyA9IHRoaXMudGVuYW50Py5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMubGltaXRzRm9ybS5wYXRjaFZhbHVlKGN1c3RvbVByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlydHlWYWx1ZXMoKTogYW55IHtcbiAgICBjb25zdCBkaXJ0eVZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGltaXRzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubGltaXRzRm9ybS5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5kaXJ0eSkge1xuICAgICAgICBkaXJ0eVZhbHVlc1trZXldID0gY29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlydHlWYWx1ZXM7XG4gIH1cbn1cbiIsIjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInVGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidTdWJ0ZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy90ZW5hbnRzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Zm9ybVxuICBbZm9ybUdyb3VwXT1cImxpbWl0c0Zvcm1cIlxuICAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtLWZ1bGxwYWdlIG0tYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtdGl0bGVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgTGltaXRzXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktaGVscCBzcmM9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzLyNzZXR0aW5nLWxpbWl0c1wiPjwvYzh5LWhlbHA+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiIWluaXRpYWxpemVkXCJcbiAgICAgID5cbiAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIGZpZWxkS2V5c1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZERlZmluaXRpb25zW2tleV0udHlwZSA9PT0gJ3RleHQnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGV4dEZpZWxkOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmllbGREZWZpbml0aW9uc1trZXldIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZERlZmluaXRpb25zW2tleV0udHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJudW1iZXJGaWVsZDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpZWxkRGVmaW5pdGlvbnNba2V5XSB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGREZWZpbml0aW9uc1trZXldLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGVja2JveEZpZWxkOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmllbGREZWZpbml0aW9uc1trZXldIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIlxuICAgICAgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbcm91dGVyTGlua109XCJbJy90ZW5hbnRzJ11cIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxpbWl0c0Zvcm0uaW52YWxpZFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBTYXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI3RleHRGaWVsZFxuICAgIGxldC1maWVsZERlZmluaXRpb25cbiAgPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiPlxuICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5sYWJlbEFyZ3MgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGREZWZpbml0aW9uLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlOiBmaWVsZERlZmluaXRpb24ucGxhY2Vob2xkZXJBcmdzXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgICNudW1iZXJGaWVsZFxuICAgIGxldC1maWVsZERlZmluaXRpb25cbiAgPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCBbZm9yXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiPlxuICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5sYWJlbEFyZ3MgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2lkXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZERlZmluaXRpb24ucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGZpZWxkRGVmaW5pdGlvbi5wbGFjZWhvbGRlckFyZ3NcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2NoZWNrYm94RmllbGRcbiAgICBsZXQtZmllbGREZWZpbml0aW9uXG4gID5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICBbdGl0bGVdPVwiZmllbGREZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Zvcm0+XG4iXX0=
@@ -1,13 +1,15 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { RouterModule } from '@angular/router';
3
3
  import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
4
- import { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';
4
+ import { CoreModule, gettext, hookNavigator, hookRoute, ViewContext } from '@c8y/ngx-components';
5
5
  import { TenantsNavigationFactory } from './tenants-navigation.factory';
6
6
  import { TenantListComponent } from './tenant-list/tenant-list.component';
7
7
  import { CreationTimeFilteringFormRendererComponent } from './tenant-list/creation-time.filtering-form-renderer.component';
8
8
  import { StatusFilteringFormRendererComponent } from './tenant-list/status.filtering-form-renderer.component';
9
9
  import { TENANTS_MODULE_CONFIG } from './tenants.model';
10
10
  import { TenantListGuard } from './tenant-list/tenant-list.guard';
11
+ import { CustomPropertiesComponent } from './custom-properties/custom-properties.component';
12
+ import { TenantLimitsComponent } from './tenant-limits/tenant-limits.component';
11
13
  import * as i0 from "@angular/core";
12
14
  export class TenantsModule {
13
15
  static config(config = {}) {
@@ -33,7 +35,25 @@ export class TenantsModule {
33
35
  icon: 'c8y-layers',
34
36
  component: TenantListComponent,
35
37
  canActivate: [TenantListGuard]
36
- })
38
+ }),
39
+ hookRoute([
40
+ {
41
+ path: 'custom_properties',
42
+ component: CustomPropertiesComponent,
43
+ icon: 'property-script',
44
+ label: gettext('Custom properties'),
45
+ context: ViewContext.Tenant,
46
+ priority: 4
47
+ },
48
+ {
49
+ path: 'limits',
50
+ component: TenantLimitsComponent,
51
+ icon: 'sliders',
52
+ label: gettext('Limits'),
53
+ context: ViewContext.Tenant,
54
+ priority: 3
55
+ }
56
+ ])
37
57
  ], imports: [RouterModule, BsDatepickerModule, CoreModule] }); }
38
58
  }
39
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TenantsModule, decorators: [{
@@ -54,8 +74,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
54
74
  icon: 'c8y-layers',
55
75
  component: TenantListComponent,
56
76
  canActivate: [TenantListGuard]
57
- })
77
+ }),
78
+ hookRoute([
79
+ {
80
+ path: 'custom_properties',
81
+ component: CustomPropertiesComponent,
82
+ icon: 'property-script',
83
+ label: gettext('Custom properties'),
84
+ context: ViewContext.Tenant,
85
+ priority: 4
86
+ },
87
+ {
88
+ path: 'limits',
89
+ component: TenantLimitsComponent,
90
+ icon: 'sliders',
91
+ label: gettext('Limits'),
92
+ context: ViewContext.Tenant,
93
+ priority: 3
94
+ }
95
+ ])
58
96
  ]
59
97
  }]
60
98
  }] });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL3RlbmFudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RyxPQUFPLEVBQXVCLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQXFCbEUsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUE4QixFQUFFO1FBQzVDLE9BQU87WUFDTCxRQUFRLEVBQUUsYUFBYTtZQUN2QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FYVSxhQUFhOytHQUFiLGFBQWEsaUJBZnRCLG1CQUFtQjtZQUNuQiwwQ0FBMEM7WUFDMUMsb0NBQW9DLGFBTDVCLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVOytHQWtCM0MsYUFBYSxhQVhiO1lBQ1QsZUFBZTtZQUNmLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2QyxTQUFTLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLFdBQVcsRUFBRSxDQUFDLGVBQWUsQ0FBQzthQUMvQixDQUFDO1NBQ0gsWUFoQlMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFVBQVU7OzJGQWtCM0MsYUFBYTtrQkFuQnpCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQztvQkFDdkQsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFO3dCQUNaLG1CQUFtQjt3QkFDbkIsMENBQTBDO3dCQUMxQyxvQ0FBb0M7cUJBQ3JDO29CQUNELFNBQVMsRUFBRTt3QkFDVCxlQUFlO3dCQUNmLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzt3QkFDdkMsU0FBUyxDQUFDOzRCQUNSLElBQUksRUFBRSxTQUFTOzRCQUNmLElBQUksRUFBRSxZQUFZOzRCQUNsQixTQUFTLEVBQUUsbUJBQW1COzRCQUM5QixXQUFXLEVBQUUsQ0FBQyxlQUFlLENBQUM7eUJBQy9CLENBQUM7cUJBQ0g7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IENvcmVNb2R1bGUsIGhvb2tOYXZpZ2F0b3IsIGhvb2tSb3V0ZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGVuYW50c05hdmlnYXRpb25GYWN0b3J5IH0gZnJvbSAnLi90ZW5hbnRzLW5hdmlnYXRpb24uZmFjdG9yeSc7XG5pbXBvcnQgeyBUZW5hbnRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3JlYXRpb25UaW1lRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC9jcmVhdGlvbi10aW1lLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL3RlbmFudC1saXN0L3N0YXR1cy5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGVuYW50c01vZHVsZUNvbmZpZywgVEVOQU5UU19NT0RVTEVfQ09ORklHIH0gZnJvbSAnLi90ZW5hbnRzLm1vZGVsJztcbmltcG9ydCB7IFRlbmFudExpc3RHdWFyZCB9IGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuZ3VhcmQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLCBCc0RhdGVwaWNrZXJNb2R1bGUsIENvcmVNb2R1bGVdLFxuICBleHBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICBDcmVhdGlvblRpbWVGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRlbmFudExpc3RHdWFyZCxcbiAgICBob29rTmF2aWdhdG9yKFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSksXG4gICAgaG9va1JvdXRlKHtcbiAgICAgIHBhdGg6ICd0ZW5hbnRzJyxcbiAgICAgIGljb246ICdjOHktbGF5ZXJzJyxcbiAgICAgIGNvbXBvbmVudDogVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICAgIGNhbkFjdGl2YXRlOiBbVGVuYW50TGlzdEd1YXJkXVxuICAgIH0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGVuYW50c01vZHVsZSB7XG4gIHN0YXRpYyBjb25maWcoY29uZmlnOiBUZW5hbnRzTW9kdWxlQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFRlbmFudHNNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFRlbmFudHNNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFRFTkFOVFNfTU9EVUxFX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL3RlbmFudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzNILE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlHLE9BQU8sRUFBdUIscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBdUNoRixNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQThCLEVBQUU7UUFDNUMsT0FBTztZQUNMLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUscUJBQXFCO29CQUM5QixRQUFRLEVBQUUsTUFBTTtpQkFDakI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzhHQVhVLGFBQWE7K0dBQWIsYUFBYSxpQkFqQ3RCLG1CQUFtQjtZQUNuQiwwQ0FBMEM7WUFDMUMsb0NBQW9DLGFBTDVCLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVOytHQW9DM0MsYUFBYSxhQTdCYjtZQUNULGVBQWU7WUFDZixhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDdkMsU0FBUyxDQUFDO2dCQUNSLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxZQUFZO2dCQUNsQixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixXQUFXLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDL0IsQ0FBQztZQUNGLFNBQVMsQ0FBQztnQkFDUjtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixTQUFTLEVBQUUseUJBQXlCO29CQUNwQyxJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixLQUFLLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQzNCLFFBQVEsRUFBRSxDQUFDO2lCQUNaO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxxQkFBcUI7b0JBQ2hDLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUN4QixPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQzNCLFFBQVEsRUFBRSxDQUFDO2lCQUNaO2FBQ0YsQ0FBQztTQUNILFlBbENTLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVOzsyRkFvQzNDLGFBQWE7a0JBckN6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVLENBQUM7b0JBQ3ZELE9BQU8sRUFBRSxFQUFFO29CQUNYLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLDBDQUEwQzt3QkFDMUMsb0NBQW9DO3FCQUNyQztvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsZUFBZTt3QkFDZixhQUFhLENBQUMsd0JBQXdCLENBQUM7d0JBQ3ZDLFNBQVMsQ0FBQzs0QkFDUixJQUFJLEVBQUUsU0FBUzs0QkFDZixJQUFJLEVBQUUsWUFBWTs0QkFDbEIsU0FBUyxFQUFFLG1CQUFtQjs0QkFDOUIsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDO3lCQUMvQixDQUFDO3dCQUNGLFNBQVMsQ0FBQzs0QkFDUjtnQ0FDRSxJQUFJLEVBQUUsbUJBQW1CO2dDQUN6QixTQUFTLEVBQUUseUJBQXlCO2dDQUNwQyxJQUFJLEVBQUUsaUJBQWlCO2dDQUN2QixLQUFLLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2dDQUNuQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0NBQzNCLFFBQVEsRUFBRSxDQUFDOzZCQUNaOzRCQUNEO2dDQUNFLElBQUksRUFBRSxRQUFRO2dDQUNkLFNBQVMsRUFBRSxxQkFBcUI7Z0NBQ2hDLElBQUksRUFBRSxTQUFTO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2dDQUN4QixPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0NBQzNCLFFBQVEsRUFBRSxDQUFDOzZCQUNaO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IENvcmVNb2R1bGUsIGdldHRleHQsIGhvb2tOYXZpZ2F0b3IsIGhvb2tSb3V0ZSwgVmlld0NvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSB9IGZyb20gJy4vdGVuYW50cy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuaW1wb3J0IHsgVGVuYW50TGlzdENvbXBvbmVudCB9IGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vdGVuYW50LWxpc3QvY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRlbmFudHNNb2R1bGVDb25maWcsIFRFTkFOVFNfTU9EVUxFX0NPTkZJRyB9IGZyb20gJy4vdGVuYW50cy5tb2RlbCc7XG5pbXBvcnQgeyBUZW5hbnRMaXN0R3VhcmQgfSBmcm9tICcuL3RlbmFudC1saXN0L3RlbmFudC1saXN0Lmd1YXJkJztcbmltcG9ydCB7IEN1c3RvbVByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZW5hbnRMaW1pdHNDb21wb25lbnQgfSBmcm9tICcuL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLCBCc0RhdGVwaWNrZXJNb2R1bGUsIENvcmVNb2R1bGVdLFxuICBleHBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICBDcmVhdGlvblRpbWVGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRlbmFudExpc3RHdWFyZCxcbiAgICBob29rTmF2aWdhdG9yKFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSksXG4gICAgaG9va1JvdXRlKHtcbiAgICAgIHBhdGg6ICd0ZW5hbnRzJyxcbiAgICAgIGljb246ICdjOHktbGF5ZXJzJyxcbiAgICAgIGNvbXBvbmVudDogVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICAgIGNhbkFjdGl2YXRlOiBbVGVuYW50TGlzdEd1YXJkXVxuICAgIH0pLFxuICAgIGhvb2tSb3V0ZShbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdjdXN0b21fcHJvcGVydGllcycsXG4gICAgICAgIGNvbXBvbmVudDogQ3VzdG9tUHJvcGVydGllc0NvbXBvbmVudCxcbiAgICAgICAgaWNvbjogJ3Byb3BlcnR5LXNjcmlwdCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiA0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAnbGltaXRzJyxcbiAgICAgICAgY29tcG9uZW50OiBUZW5hbnRMaW1pdHNDb21wb25lbnQsXG4gICAgICAgIGljb246ICdzbGlkZXJzJyxcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0xpbWl0cycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiAzXG4gICAgICB9XG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW5hbnRzTW9kdWxlIHtcbiAgc3RhdGljIGNvbmZpZyhjb25maWc6IFRlbmFudHNNb2R1bGVDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VGVuYW50c01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVGVuYW50c01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogVEVOQU5UU19NT0RVTEVfQ09ORklHLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -51,7 +51,7 @@ export class HelpAndServiceViewComponent {
51
51
  let firstDocsLink = true;
52
52
  return links
53
53
  .map(link => {
54
- const isDocsLink = link.url && link.url.includes(DOCS_PATH);
54
+ const isDocsLink = link.url && /\/docs\/(?!legal-notices)/.test(link.url);
55
55
  if (isDocsLink) {
56
56
  if (firstDocsLink) {
57
57
  firstDocsLink = false;
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
93
93
  type: Component,
94
94
  args: [{ selector: 'c8y-help-and-service-view', standalone: true, imports: [CoreModule, ReactiveFormsModule], template: "<div class=\"card-group-block\">\n <a\n class=\"card card--btn\"\n title=\"{{ link.label | translate }}\"\n role=\"button\"\n [attr.target]=\"link.target\"\n *ngFor=\"let link of links$ | async\"\n rel=\"noopener noreferrer\"\n [href]=\"link.url ? link.url : '#'\"\n (click)=\"openLink(link, $event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.HELP_AND_SERVICE_LINKS.EVENTS.HELP_AND_SERVICE_LINKS\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.HELP_AND_SERVICE_LINKS.COMPONENTS.HELP_AND_SERVICE_COMPONENT,\n action: link.label\n }\"\n >\n <div class=\"card-block text-center\">\n <div class=\"icon-32\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"link.icon\"\n ></i>\n </div>\n <small class=\"text-muted\">{{ link.label | translate }}</small>\n </div>\n </a>\n</div>\n" }]
95
95
  }], ctorParameters: () => [{ type: i1.DocsService }, { type: i1.AppStateService }, { type: i1.NavigatorService }, { type: i2.Router }] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1hbmQtc2VydmljZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2hlbHAtYW5kLXNlcnZpY2Utd2lkZ2V0L2hlbHAtYW5kLXNlcnZpY2Utdmlldy9oZWxwLWFuZC1zZXJ2aWNlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvaGVscC1hbmQtc2VydmljZS13aWRnZXQvaGVscC1hbmQtc2VydmljZS12aWV3L2hlbHAtYW5kLXNlcnZpY2Utdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFHVixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVFyRCxNQUFNLE9BQU8sMkJBQTJCO0lBTXRDLFlBQ1MsSUFBaUIsRUFDaEIsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLE1BQWM7UUFIZixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2hCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFUeEIs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Q0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO2lCQUNsRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQWE7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ2xELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsT0FBTyxVQUFVLENBQUMsV0FBVyxLQUFLLGtCQUFrQixDQUFDO0lBQ3ZELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLFdBQTRCLEVBQUU7UUFDeEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztJQUN6RSxDQUFDOzhHQXRGVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixxRkN2QnhDLHE0QkE0QkEsMkNEUFksVUFBVSxzaEJBQUUsbUJBQW1COzsyRkFFOUIsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLDJCQUEyQixjQUV6QixJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIERvY0xpbmssXG4gIERvY0xpbmtXaXRoTGFiZWwsXG4gIERvY3NTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFX0hFTFBfQU5EX1NFUlZJQ0VfV0lER0VUIH0gZnJvbSAnLi4vaGVscC1hbmQtc2VydmljZS5tb2RlbCc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaGVscC1hbmQtc2VydmljZS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlbHAtYW5kLXNlcnZpY2Utdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBIZWxwQW5kU2VydmljZVZpZXdDb21wb25lbnQge1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0VfSEVMUF9BTkRfU0VSVklDRV9XSURHRVQ7XG4gIGxpbmtzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZG9jcy5pdGVtcyQsIHRoaXMubmF2aWdhdG9yU2VydmljZS5pdGVtcyRdKS5waXBlKFxuICAgIG1hcCgoW2xpbmtzLCBuYXZpZ2F0b3JOb2Rlc10pID0+IHRoaXMuaGFuZGxlRG9jTGlua3MoWy4uLmxpbmtzXSwgbmF2aWdhdG9yTm9kZXMpKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkb2NzOiBEb2NzU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBvcGVuTGluayhsaW5rOiBEb2NMaW5rLCAkZXZlbnQpIHtcbiAgICBpZiAobGluay5jbGljaykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEb2NMaW5rcyhsaW5rczogRG9jTGlua1tdLCBuYXZpZ2F0b3JOb2RlczogTmF2aWdhdG9yTm9kZVtdKTogRG9jTGlua1tdIHtcbiAgICBjb25zdCBncm91cExpbmsgPSB0aGlzLmNyZWF0ZUFkZEdyb3VwRG9jTGluayhuYXZpZ2F0b3JOb2Rlcyk7XG5cbiAgICBpZiAoZ3JvdXBMaW5rKSB7XG4gICAgICBsaW5rcy5wdXNoKGdyb3VwTGluayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcGxhY2VEb2NzTGlua3NXaXRoTWFpbk9uZShsaW5rcyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFkZEdyb3VwRG9jTGluayhuYXZpZ2F0b3JOb2RlczogTmF2aWdhdG9yTm9kZVtdKTogRG9jTGluayB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGRvY0xpbms6IERvY0xpbms7XG4gICAgY29uc3QgZ3JvdXBzTm9kZUxhYmVsID0gZ2V0dGV4dCgnR3JvdXBzJyk7XG4gICAgY29uc3QgZ3JvdXBzTm9kZSA9IHRoaXMuZmluZE5hdmlnYXRvck5vZGUoZ3JvdXBzTm9kZUxhYmVsLCBuYXZpZ2F0b3JOb2Rlcyk7XG5cbiAgICBpZiAoZ3JvdXBzTm9kZSkge1xuICAgICAgZG9jTGluayA9IHtcbiAgICAgICAgdHlwZTogJ3F1aWNrbGluaycsXG4gICAgICAgIGljb246ICdjOHktaWNvbiBjOHktaWNvbi1ncm91cC1hZGQnLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIGdyb3VwJyksXG4gICAgICAgIHVybDogJy9ncm91cCcsXG4gICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZG9jTGluay51cmxdLCB7IHF1ZXJ5UGFyYW1zOiB7IHNob3dBZGRHcm91cDogdHJ1ZSB9IH0pXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZG9jTGluaztcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZURvY3NMaW5rc1dpdGhNYWluT25lKGxpbmtzOiBEb2NMaW5rW10pOiBEb2NMaW5rW10ge1xuICAgIGNvbnN0IERPQ1NfUEFUSCA9ICcvZG9jcy8nO1xuICAgIGxldCBmaXJzdERvY3NMaW5rID0gdHJ1ZTtcblxuICAgIHJldHVybiBsaW5rc1xuICAgICAgLm1hcChsaW5rID0+IHtcbiAgICAgICAgY29uc3QgaXNEb2NzTGluayA9IGxpbmsudXJsICYmIGxpbmsudXJsLmluY2x1ZGVzKERPQ1NfUEFUSCk7XG4gICAgICAgIGlmIChpc0RvY3NMaW5rKSB7XG4gICAgICAgICAgaWYgKGZpcnN0RG9jc0xpbmspIHtcbiAgICAgICAgICAgIGZpcnN0RG9jc0xpbmsgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGZpcnN0IC9kb2NzLyBsaW5rIHdpdGggdGhlIG1haW4gb25lXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpY29uOiAnYm9vay1zaGVsZicsXG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdVc2VyIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICAgICAgdXJsOiB0aGlzLmRvY3MuZ2V0VXNlckd1aWRlTGluayhET0NTX1BBVEgpLFxuICAgICAgICAgICAgICB0eXBlOiAnZG9jJyxcbiAgICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xuICAgICAgICAgICAgfSBhcyBEb2NMaW5rV2l0aExhYmVsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHN1YnNlcXVlbnQgL2RvY3MvIGxpbmtzXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmxpbmssXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuaXNDdXJyZW50QXBwKGxpbmspID8gbnVsbCA6ICdfYmxhbmsnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIobGluayA9PiBsaW5rICE9PSBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXJyZW50QXBwKGxpbms6IERvY0xpbmspOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQXBwUGF0aCA9IChsaW5rLnVybD8uc3BsaXQoJy9hcHBzLycpWzFdIHx8ICcnKS5zcGxpdCgnLycpWzBdO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBkZXN0aW5hdGlvbkFwcFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGZpbmROYXZpZ2F0b3JOb2RlKG5vZGVOYW1lOiBzdHJpbmcsIG5hdk5vZGVzOiBOYXZpZ2F0b3JOb2RlW10gPSBbXSk6IE5hdmlnYXRvck5vZGUge1xuICAgIHJldHVybiBuYXZOb2Rlcy5maW5kKChub2RlOiBOYXZpZ2F0b3JOb2RlKSA9PiBub2RlLmxhYmVsID09PSBub2RlTmFtZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWdyb3VwLWJsb2NrXCI+XG4gIDxhXG4gICAgY2xhc3M9XCJjYXJkIGNhcmQtLWJ0blwiXG4gICAgdGl0bGU9XCJ7eyBsaW5rLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICBbYXR0ci50YXJnZXRdPVwibGluay50YXJnZXRcIlxuICAgICpuZ0Zvcj1cImxldCBsaW5rIG9mIGxpbmtzJCB8IGFzeW5jXCJcbiAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICBbaHJlZl09XCJsaW5rLnVybCA/IGxpbmsudXJsIDogJyMnXCJcbiAgICAoY2xpY2spPVwib3BlbkxpbmsobGluaywgJGV2ZW50KVwiXG4gICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuSEVMUF9BTkRfU0VSVklDRV9MSU5LUy5FVkVOVFMuSEVMUF9BTkRfU0VSVklDRV9MSU5LU1wiXG4gICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuSEVMUF9BTkRfU0VSVklDRV9MSU5LUy5DT01QT05FTlRTLkhFTFBfQU5EX1NFUlZJQ0VfQ09NUE9ORU5ULFxuICAgICAgYWN0aW9uOiBsaW5rLmxhYmVsXG4gICAgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb24tMzJcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICBbYzh5SWNvbl09XCJsaW5rLmljb25cIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgbGluay5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvYT5cbjwvZGl2PlxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1hbmQtc2VydmljZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2hlbHAtYW5kLXNlcnZpY2Utd2lkZ2V0L2hlbHAtYW5kLXNlcnZpY2Utdmlldy9oZWxwLWFuZC1zZXJ2aWNlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvaGVscC1hbmQtc2VydmljZS13aWRnZXQvaGVscC1hbmQtc2VydmljZS12aWV3L2hlbHAtYW5kLXNlcnZpY2Utdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFHVixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVFyRCxNQUFNLE9BQU8sMkJBQTJCO0lBTXRDLFlBQ1MsSUFBaUIsRUFDaEIsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLE1BQWM7UUFIZixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2hCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFUeEIs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QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVE7aUJBQ2xELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBYTtRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLFVBQVUsQ0FBQyxXQUFXLEtBQUssa0JBQWtCLENBQUM7SUFDdkQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsV0FBNEIsRUFBRTtRQUN4RSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7OEdBdEZVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLHFGQ3ZCeEMscTRCQTRCQSwyQ0RQWSxVQUFVLHNoQkFBRSxtQkFBbUI7OzJGQUU5QiwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBRXpCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgRG9jTGluayxcbiAgRG9jTGlua1dpdGhMYWJlbCxcbiAgRG9jc1NlcnZpY2UsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvclNlcnZpY2UsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0VfSEVMUF9BTkRfU0VSVklDRV9XSURHRVQgfSBmcm9tICcuLi9oZWxwLWFuZC1zZXJ2aWNlLm1vZGVsJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1oZWxwLWFuZC1zZXJ2aWNlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC1hbmQtc2VydmljZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEhlbHBBbmRTZXJ2aWNlVmlld0NvbXBvbmVudCB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRV9IRUxQX0FORF9TRVJWSUNFX1dJREdFVDtcbiAgbGlua3MkID0gY29tYmluZUxhdGVzdChbdGhpcy5kb2NzLml0ZW1zJCwgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLml0ZW1zJF0pLnBpcGUoXG4gICAgbWFwKChbbGlua3MsIG5hdmlnYXRvck5vZGVzXSkgPT4gdGhpcy5oYW5kbGVEb2NMaW5rcyhbLi4ubGlua3NdLCBuYXZpZ2F0b3JOb2RlcykpXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRvY3M6IERvY3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIG9wZW5MaW5rKGxpbms6IERvY0xpbmssICRldmVudCkge1xuICAgIGlmIChsaW5rLmNsaWNrKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURvY0xpbmtzKGxpbmtzOiBEb2NMaW5rW10sIG5hdmlnYXRvck5vZGVzOiBOYXZpZ2F0b3JOb2RlW10pOiBEb2NMaW5rW10ge1xuICAgIGNvbnN0IGdyb3VwTGluayA9IHRoaXMuY3JlYXRlQWRkR3JvdXBEb2NMaW5rKG5hdmlnYXRvck5vZGVzKTtcblxuICAgIGlmIChncm91cExpbmspIHtcbiAgICAgIGxpbmtzLnB1c2goZ3JvdXBMaW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZURvY3NMaW5rc1dpdGhNYWluT25lKGxpbmtzKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQWRkR3JvdXBEb2NMaW5rKG5hdmlnYXRvck5vZGVzOiBOYXZpZ2F0b3JOb2RlW10pOiBEb2NMaW5rIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZG9jTGluazogRG9jTGluaztcbiAgICBjb25zdCBncm91cHNOb2RlTGFiZWwgPSBnZXR0ZXh0KCdHcm91cHMnKTtcbiAgICBjb25zdCBncm91cHNOb2RlID0gdGhpcy5maW5kTmF2aWdhdG9yTm9kZShncm91cHNOb2RlTGFiZWwsIG5hdmlnYXRvck5vZGVzKTtcblxuICAgIGlmIChncm91cHNOb2RlKSB7XG4gICAgICBkb2NMaW5rID0ge1xuICAgICAgICB0eXBlOiAncXVpY2tsaW5rJyxcbiAgICAgICAgaWNvbjogJ2M4eS1pY29uIGM4eS1pY29uLWdyb3VwLWFkZCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgZ3JvdXAnKSxcbiAgICAgICAgdXJsOiAnL2dyb3VwJyxcbiAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFtkb2NMaW5rLnVybF0sIHsgcXVlcnlQYXJhbXM6IHsgc2hvd0FkZEdyb3VwOiB0cnVlIH0gfSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBkb2NMaW5rO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlRG9jc0xpbmtzV2l0aE1haW5PbmUobGlua3M6IERvY0xpbmtbXSk6IERvY0xpbmtbXSB7XG4gICAgY29uc3QgRE9DU19QQVRIID0gJy9kb2NzLyc7XG4gICAgbGV0IGZpcnN0RG9jc0xpbmsgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGxpbmtzXG4gICAgICAubWFwKGxpbmsgPT4ge1xuICAgICAgICBjb25zdCBpc0RvY3NMaW5rID0gbGluay51cmwgJiYgL1xcL2RvY3NcXC8oPyFsZWdhbC1ub3RpY2VzKS8udGVzdChsaW5rLnVybCk7XG4gICAgICAgIGlmIChpc0RvY3NMaW5rKSB7XG4gICAgICAgICAgaWYgKGZpcnN0RG9jc0xpbmspIHtcbiAgICAgICAgICAgIGZpcnN0RG9jc0xpbmsgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGZpcnN0IC9kb2NzLyBsaW5rIHdpdGggdGhlIG1haW4gb25lXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpY29uOiAnYm9vay1zaGVsZicsXG4gICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdVc2VyIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICAgICAgdXJsOiB0aGlzLmRvY3MuZ2V0VXNlckd1aWRlTGluayhET0NTX1BBVEgpLFxuICAgICAgICAgICAgICB0eXBlOiAnZG9jJyxcbiAgICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xuICAgICAgICAgICAgfSBhcyBEb2NMaW5rV2l0aExhYmVsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHN1YnNlcXVlbnQgL2RvY3MvIGxpbmtzXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmxpbmssXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuaXNDdXJyZW50QXBwKGxpbmspID8gbnVsbCA6ICdfYmxhbmsnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIobGluayA9PiBsaW5rICE9PSBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXJyZW50QXBwKGxpbms6IERvY0xpbmspOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQXBwUGF0aCA9IChsaW5rLnVybD8uc3BsaXQoJy9hcHBzLycpWzFdIHx8ICcnKS5zcGxpdCgnLycpWzBdO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBkZXN0aW5hdGlvbkFwcFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGZpbmROYXZpZ2F0b3JOb2RlKG5vZGVOYW1lOiBzdHJpbmcsIG5hdk5vZGVzOiBOYXZpZ2F0b3JOb2RlW10gPSBbXSk6IE5hdmlnYXRvck5vZGUge1xuICAgIHJldHVybiBuYXZOb2Rlcy5maW5kKChub2RlOiBOYXZpZ2F0b3JOb2RlKSA9PiBub2RlLmxhYmVsID09PSBub2RlTmFtZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWdyb3VwLWJsb2NrXCI+XG4gIDxhXG4gICAgY2xhc3M9XCJjYXJkIGNhcmQtLWJ0blwiXG4gICAgdGl0bGU9XCJ7eyBsaW5rLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICBbYXR0ci50YXJnZXRdPVwibGluay50YXJnZXRcIlxuICAgICpuZ0Zvcj1cImxldCBsaW5rIG9mIGxpbmtzJCB8IGFzeW5jXCJcbiAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICBbaHJlZl09XCJsaW5rLnVybCA/IGxpbmsudXJsIDogJyMnXCJcbiAgICAoY2xpY2spPVwib3BlbkxpbmsobGluaywgJGV2ZW50KVwiXG4gICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuSEVMUF9BTkRfU0VSVklDRV9MSU5LUy5FVkVOVFMuSEVMUF9BTkRfU0VSVklDRV9MSU5LU1wiXG4gICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuSEVMUF9BTkRfU0VSVklDRV9MSU5LUy5DT01QT05FTlRTLkhFTFBfQU5EX1NFUlZJQ0VfQ09NUE9ORU5ULFxuICAgICAgYWN0aW9uOiBsaW5rLmxhYmVsXG4gICAgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb24tMzJcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICBbYzh5SWNvbl09XCJsaW5rLmljb25cIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgbGluay5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvYT5cbjwvZGl2PlxuIl19
@@ -1083,11 +1083,11 @@ class AssetSelectorNodeComponent {
1083
1083
  this.cd.markForCheck();
1084
1084
  }
1085
1085
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorNodeComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: AssetSelectorService }], target: i0.ɵɵFactoryTarget.Component }); }
1086
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", handleNextMillerViewColumn: "handleNextMillerViewColumn", disabled: "disabled" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn", "disabled"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
1086
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", handleNextMillerViewColumn: "handleNextMillerViewColumn", disabled: "disabled" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn", "disabled"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
1087
1087
  }
1088
1088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorNodeComponent, decorators: [{
1089
1089
  type: Component,
1090
- args: [{ selector: 'c8y-asset-selector-node', template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n" }]
1090
+ args: [{ selector: 'c8y-asset-selector-node', template: "<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn-dot\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div class=\"d-flex a-i-center p-t-4 p-b-4 \" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n \n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n" }]
1091
1091
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: AssetSelectorService }], propDecorators: { node: [{
1092
1092
  type: Input
1093
1093
  }], rootNode: [{