@c8y/ngx-components 1021.7.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 (70) hide show
  1. package/cockpit-config/cockpit-config.model.d.ts +1 -0
  2. package/cockpit-config/cockpit-config.model.d.ts.map +1 -1
  3. package/context-dashboard/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
  4. package/core/common/options.service.d.ts +1 -1
  5. package/core/common/options.service.d.ts.map +1 -1
  6. package/core/forms/validation-pattern.d.ts +4 -0
  7. package/core/forms/validation-pattern.d.ts.map +1 -1
  8. package/core/plugins/plugins.service.d.ts +1 -1
  9. package/core/plugins/plugins.service.d.ts.map +1 -1
  10. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +3 -3
  11. package/esm2022/cockpit-config/cockpit-config.model.mjs +3 -2
  12. package/esm2022/cockpit-config/feature-config.component.mjs +3 -3
  13. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.module.mjs +5 -3
  14. package/esm2022/core/common/options.service.mjs +3 -3
  15. package/esm2022/core/docs/defaults.items.mjs +2 -2
  16. package/esm2022/core/forms/validation-pattern.mjs +5 -1
  17. package/esm2022/core/plugins/plugins.service.mjs +3 -3
  18. package/esm2022/core/router/context-route.guard.mjs +2 -2
  19. package/esm2022/core/search/search-input.component.mjs +3 -3
  20. package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +7 -5
  21. package/esm2022/search/search-action.component.mjs +3 -3
  22. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +90 -0
  23. package/esm2022/tenants/custom-properties/custom-properties.service.mjs +76 -0
  24. package/esm2022/tenants/custom-properties/custom-property-field/custom-property-field.component.mjs +29 -0
  25. package/esm2022/tenants/index.mjs +2 -1
  26. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +92 -0
  27. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +124 -0
  28. package/esm2022/tenants/tenants.module.mjs +42 -4
  29. package/esm2022/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.mjs +2 -2
  30. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
  31. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +4 -3
  33. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -2
  35. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +6 -4
  37. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-search.mjs +2 -2
  39. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-tenants.mjs +416 -11
  41. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +1 -1
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components.mjs +277 -273
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/locales/de.po +4 -1
  47. package/locales/en.po +3 -0
  48. package/locales/en_US.po +3 -0
  49. package/locales/es.po +3 -0
  50. package/locales/fr.po +3 -0
  51. package/locales/ja_JP.po +3 -0
  52. package/locales/locales.pot +38 -0
  53. package/locales/nl.po +3 -0
  54. package/locales/pl.po +3 -0
  55. package/locales/pt_BR.po +3 -0
  56. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  57. package/package.json +1 -1
  58. package/tenants/custom-properties/custom-properties.component.d.ts +26 -0
  59. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -0
  60. package/tenants/custom-properties/custom-properties.service.d.ts +26 -0
  61. package/tenants/custom-properties/custom-properties.service.d.ts.map +1 -0
  62. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts +10 -0
  63. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts.map +1 -0
  64. package/tenants/index.d.ts +1 -0
  65. package/tenants/index.d.ts.map +1 -1
  66. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +117 -0
  67. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -0
  68. package/tenants/tenant-limits/tenant-limits.component.d.ts +39 -0
  69. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -0
  70. package/tenants/tenants.module.d.ts.map +1 -1
@@ -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: [{