@c8y/ngx-components 1023.22.11 → 1023.25.6

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/branding/shared/data/index.d.ts +1 -0
  2. package/branding/shared/data/index.d.ts.map +1 -1
  3. package/branding/shared/lazy/index.d.ts +3 -0
  4. package/branding/shared/lazy/index.d.ts.map +1 -1
  5. package/context-dashboard/index.d.ts.map +1 -1
  6. package/dashboard-manager/index.d.ts.map +1 -1
  7. package/device-grid/index.d.ts.map +1 -1
  8. package/device-profile/index.d.ts.map +1 -1
  9. package/device-provisioned-certificates/index.d.ts.map +1 -1
  10. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +2 -1
  11. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +27 -3
  13. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs +67 -0
  15. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs.map +1 -0
  16. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +3 -2
  17. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +5 -7
  19. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-device-grid.mjs +4 -6
  21. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-device-profile.mjs +4 -7
  23. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +5 -6
  25. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-global-context.mjs +2 -2
  27. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +3 -6
  29. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -7
  31. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -7
  33. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-search.mjs +4 -4
  35. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-services.mjs +5 -12
  37. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-sub-assets.mjs +4 -6
  39. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -3
  41. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +28 -5
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components.mjs +49 -13
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/index.d.ts +19 -8
  47. package/index.d.ts.map +1 -1
  48. package/locales/de.po +14 -5
  49. package/locales/es.po +13 -4
  50. package/locales/fr.po +13 -4
  51. package/locales/ja_JP.po +13 -4
  52. package/locales/ko.po +13 -4
  53. package/locales/locales.pot +24 -6
  54. package/locales/nl.po +13 -4
  55. package/locales/pl.po +14 -5
  56. package/locales/pt_BR.po +13 -4
  57. package/locales/zh_CN.po +13 -4
  58. package/locales/zh_TW.po +13 -4
  59. package/package.json +1 -1
  60. package/repository/configuration/index.d.ts.map +1 -1
  61. package/repository/firmware/index.d.ts.map +1 -1
  62. package/repository/software/index.d.ts.map +1 -1
  63. package/search/index.d.ts.map +1 -1
  64. package/services/index.d.ts.map +1 -1
  65. package/sub-assets/index.d.ts +2 -2
  66. package/sub-assets/index.d.ts.map +1 -1
  67. package/widgets/implementations/three-d-rotation/index.d.ts +7 -2
  68. package/widgets/implementations/three-d-rotation/index.d.ts.map +1 -1
  69. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs +0 -60
  70. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs.map +0 -1
@@ -49,6 +49,7 @@ declare function createGenericBrandingForm(formBuilder: FormBuilder): _angular_f
49
49
  messageBannerEnabled: FormControl<boolean>;
50
50
  messageBannerContent: FormControl<string>;
51
51
  messageBannerType: FormControl<"success" | "warning" | "danger" | "info" | "system">;
52
+ messageBannerId: FormControl<string>;
52
53
  }>;
53
54
  baseTypography: _angular_forms.FormGroup<{
54
55
  'font-url': FormControl<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../../branding/shared/data/branding.type.ts","../../../../branding/shared/data/apply-branding-locally.service.ts","../../../../branding/shared/data/branding-shades.service.ts","../../../../branding/shared/data/branding-version.service.ts","../../../../branding/shared/data/branding-tracking.service.ts","../../../../branding/shared/data/store-branding.service.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;AAGM;AACA;AACA;AACA;AAGA;;AASA;;AAEA;AAEA;;AAKN;AACG;;AAGG;;AAIA;;AACwC;;;AACe;;AAE7D;AAMA;AAIA;AACA;AAoDA;AAMA;AAEA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCC;;ACrLD;AAIc;;AAAQ;AAEpB;;AAqBA;AAMA;AAMA;;;AAWD;;ACpDD;;AAOE;AAQA;AAqBA;AAYA;;;AAyBD;;AC1ED;;AAEG;AACH;AAIE;AAEA;;;;AAIG;AACH;AAIA;;;;;;AAMG;AACH;;;AAAuF;AAgCvF;;;;;;AAMG;;;;AAKJ;;ACnED;AAK0B;;AAAQ;;;;;;AAsBhC;;;;AAgBA;;;AAYD;;;;;;;;;;;AC5BA;;;;;AAMA;;;;;;;AAQA;AAED;;AAEG;AACH;AAkBI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBF;;;;AAIW;AACX;;;;;;;;AAQkC;AAClC;AAEU;AAYV;;AAEG;AACG;AAON;;;AAGG;;AAYH;;;;AAIG;AACG;AAEO;;;AA2Cb;;;AAGG;;AAyBH;;AAEG;AACG;AA8CN;AAUA;;;AAGG;;AAMH;;;;AAIG;;AAkBH;;;AAGG;;;;;;AA2BH;;;AAGG;AACG;AAMN;;AAEG;AACG;AAUN;;;AAGG;;;;;;AAgBH;;;AAGG;;AAYH;;AAEG;;AAkCH;;;AAGG;AACG;;;;;AAuDN;;;;AAIG;AACH;;;;;AA0CD;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../../branding/shared/data/branding.type.ts","../../../../branding/shared/data/apply-branding-locally.service.ts","../../../../branding/shared/data/branding-shades.service.ts","../../../../branding/shared/data/branding-version.service.ts","../../../../branding/shared/data/branding-tracking.service.ts","../../../../branding/shared/data/store-branding.service.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;AAGM;AACA;AACA;AACA;AAGA;;AASA;;AAEA;AAEA;;AAKN;AACG;;AAGG;;AAIA;;AACwC;;;AACe;;AAE7D;AAMA;AAIA;AACA;AAoDA;AAMA;AAEA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCC;;ACtLD;AAIc;;AAAQ;AAEpB;;AAqBA;AAMA;AAMA;;;AAWD;;ACpDD;;AAOE;AAQA;AAqBA;AAYA;;;AAyBD;;AC1ED;;AAEG;AACH;AAIE;AAEA;;;;AAIG;AACH;AAIA;;;;;;AAMG;AACH;;;AAAuF;AAgCvF;;;;;;AAMG;;;;AAKJ;;ACnED;AAK0B;;AAAQ;;;;;;AAsBhC;;;;AAgBA;;;AAYD;;;;;;;;;;;AC5BA;;;;;AAMA;;;;;;;AAQA;AAED;;AAEG;AACH;AAkBI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBF;;;;AAIW;AACX;;;;;;;;AAQkC;AAClC;AAEU;AAYV;;AAEG;AACG;AAON;;;AAGG;;AAYH;;;;AAIG;AACG;AAEO;;;AA2Cb;;;AAGG;;AAyBH;;AAEG;AACG;AA8CN;AAUA;;;AAGG;;AAMH;;;;AAIG;;AAkBH;;;AAGG;;;;;;AA2BH;;;AAGG;AACG;AAMN;;AAEG;AACG;AAUN;;;AAGG;;;;;;AAgBH;;;AAGG;;AAYH;;AAEG;;AAkCH;;;AAGG;AACG;;;;;AAuDN;;;;AAIG;AACH;;;;;AA0CD;;;"}
@@ -103,6 +103,7 @@ declare class BrandingFormComponent implements ControlValueAccessor {
103
103
  messageBannerEnabled: _angular_forms.FormControl<boolean>;
104
104
  messageBannerContent: _angular_forms.FormControl<string>;
105
105
  messageBannerType: _angular_forms.FormControl<"success" | "warning" | "danger" | "info" | "system">;
106
+ messageBannerId: _angular_forms.FormControl<string>;
106
107
  }>;
107
108
  baseTypography: _angular_forms.FormGroup<{
108
109
  "font-url": _angular_forms.FormControl<string>;
@@ -120,6 +121,8 @@ declare class BrandingFormComponent implements ControlValueAccessor {
120
121
  applyStateToForm(branding: BrandingOptionsJson): void;
121
122
  convertFormToState(value: BrandingFormComponent['formGroup']['value']): string;
122
123
  previewBanner(): void;
124
+ private setupMessageBannerIdAutoGeneration;
125
+ private ensureMessageBannerIdExists;
123
126
  static ɵfac: i0.ɵɵFactoryDeclaration<BrandingFormComponent, never>;
124
127
  static ɵcmp: i0.ɵɵComponentDeclaration<BrandingFormComponent, "c8y-branding-form", never, {}, {}, never, never, true, never>;
125
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../../branding/shared/lazy/branding-import-modal/branding-import-modal.service.ts","../../../../branding/shared/lazy/branding/branding.component.ts","../../../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app.service.ts","../../../../branding/shared/lazy/branding-form/branding-form.component.ts","../../../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.ts","../../../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts","../../../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.ts","../../../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.ts","../../../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.ts","../../../../branding/shared/lazy/branding-assets/branding-assets.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,cAAA,0BAAA;AAIc;AAAQ,uBAAA,cAAA;;;;AAkBrB;;ACoBD,cAAA,iBAAA;AAoKI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AArBF;;;;AAIC;;;AA+BK,uCAAA,YAAA,GAAA,OAAA;;;;;;;;;;;;AAmMP;;AC7aD,cAAA,yBAAA;AAEc;AAAQ,sBAAA,kBAAA;AAEd,wBAAA,OAAA,CAAA,YAAA;AAUN,yDAAA,YAAA,KAAA,YAAA;;;AAmBD;;ACnBD,cAAA,qBAAA,YAAA,oBAAA;AA+BI;AACA;;AAjBF;;;;;;;AASE;;;;AAOQ,6BAAA,WAAA,wBAAA,oBAAA;AAOV;;AAcA;;AAQA;gBAIQ,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CR;;;AAGD;;ACjGD,cAAA,0BAAA,YAAA,oBAAA,EAAA,SAAA;AAuBI;AACA;AACA;AACA;AACA;AAnBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAuC;;;AAGvC,+BAAA,UAAA;;;;;AAMA;AAMU,gCAAA,cAAA,eAAA,WAAA,gBAAA,YAAA,kBAAA,qBAAA,iBAAA,oBAAA;AAmEV;AAIA;AAOA;;AAcA;AAIA;gBAIQ,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CR;;;AAGD;;AC1LD,cAAA,iCAAA,YAAA,SAAA;AAkBI;AACA;AACA;AACA;AACA;AACA;AAhBF,mBAAA,UAAA;AACA,iBAAA,WAAA;AACA,uBAAA,UAAA,CAAA,mBAAA;AACA,cAAA,UAAA;AACA,uBAAA,UAAA;;;;AAyDA;;;;;;;AAgFA;;;AAUD;;ACtKD,cAAA,iCAAA;AAWI;;;AADA,yBAAA,mBAAA,YAAA,eAAA;AAYF;;;AAgBD;;ACtCD,cAAA,4BAAA;AAoBI;AACA;AACA;AACA;;AAdF,YAAA,OAAA;;AAKA;;;AAMU,yCAAA,uBAAA,OAAA,UAAA,gBAAA,mBAAA,aAAA,oBAAA;AAMJ,uBAAA,WAAA,KAAA,OAAA;;;;;AAwHP;;ACpJD,cAAA,uCAAA;;;;;AAmBC;;ACND,cAAA,uBAAA;AAiCI;AACA;AACA;;;;;;;;;;AANA;AACF;;;;;AAcD;;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../../branding/shared/lazy/branding-import-modal/branding-import-modal.service.ts","../../../../branding/shared/lazy/branding/branding.component.ts","../../../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app.service.ts","../../../../branding/shared/lazy/branding-form/branding-form.component.ts","../../../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.ts","../../../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts","../../../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.ts","../../../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.ts","../../../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.ts","../../../../branding/shared/lazy/branding-assets/branding-assets.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,cAAA,0BAAA;AAIc;AAAQ,uBAAA,cAAA;;;;AAkBrB;;ACoBD,cAAA,iBAAA;AAoKI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AArBF;;;;AAIC;;;AA+BK,uCAAA,YAAA,GAAA,OAAA;;;;;;;;;;;;AAmMP;;AC7aD,cAAA,yBAAA;AAEc;AAAQ,sBAAA,kBAAA;AAEd,wBAAA,OAAA,CAAA,YAAA;AAUN,yDAAA,YAAA,KAAA,YAAA;;;AAmBD;;ACjBD,cAAA,qBAAA,YAAA,oBAAA;AA+BI;AACA;;AAjBF;;;;;;;AASE;;;;AAOQ,6BAAA,WAAA,wBAAA,oBAAA;AAQV;;AAcA;;AAQA;gBAIQ,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CR;AAIA;;;;AA6BD;;ACpID,cAAA,0BAAA,YAAA,oBAAA,EAAA,SAAA;AAuBI;AACA;AACA;AACA;AACA;AAnBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAuC;;;AAGvC,+BAAA,UAAA;;;;;AAMA;AAMU,gCAAA,cAAA,eAAA,WAAA,gBAAA,YAAA,kBAAA,qBAAA,iBAAA,oBAAA;AAmEV;AAIA;AAOA;;AAcA;AAIA;gBAIQ,cAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CR;;;AAGD;;AC1LD,cAAA,iCAAA,YAAA,SAAA;AAkBI;AACA;AACA;AACA;AACA;AACA;AAhBF,mBAAA,UAAA;AACA,iBAAA,WAAA;AACA,uBAAA,UAAA,CAAA,mBAAA;AACA,cAAA,UAAA;AACA,uBAAA,UAAA;;;;AAyDA;;;;;;;AAgFA;;;AAUD;;ACtKD,cAAA,iCAAA;AAWI;;;AADA,yBAAA,mBAAA,YAAA,eAAA;AAYF;;;AAgBD;;ACtCD,cAAA,4BAAA;AAoBI;AACA;AACA;AACA;;AAdF,YAAA,OAAA;;AAKA;;;AAMU,yCAAA,uBAAA,OAAA,UAAA,gBAAA,mBAAA,aAAA,oBAAA;AAMJ,uBAAA,WAAA,KAAA,OAAA;;;;;AAwHP;;ACpJD,cAAA,uCAAA;;;;;AAmBC;;ACND,cAAA,uBAAA;AAiCI;AACA;AACA;;;;;;;;;;AANA;AACF;;;;;AAcD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../dashboard-manager/dashboard-manager.model.ts","../../dashboard-manager/dashboard-manager.service.ts","../../dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../dashboard-manager/dashboard-manager.module.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAOC;AAED;;;;;;;;;;;;;;;ACaA;;;;;AA2BI;;;;;;;;;;;;;;AAfA;AAEF;AASY;;AA2CZ;;AAiBM;AAcA;AAkCN;AAeA;;;AAWD;;ACpJD;AA6CI;AACA;AACA;AA9BF;AACA;;AAEA;AACA;;;;AAqBA;;;AAcA;;;;;AA4CD;;AC5HD;AASc;;;AAAQ;;AASpB;;;AAGD;;AClBD;;;AAKc;AAMZ;AAeM;AAQA;;AAkBN;AAWA;;;AAKD;;ACpDD;AA6BI;AACA;AACA;AACA;;;;AAhBF;;;;;AAKE;;;AAIQ;;AAIA;;;;AAoDV;;;AAcD;;AClGD;;;;AAqCsC;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../dashboard-manager/dashboard-manager.model.ts","../../dashboard-manager/dashboard-manager.service.ts","../../dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../dashboard-manager/dashboard-manager.module.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAOC;AAED;;;;;;;;;;;;;;;ACaA;;;;;AA2BI;;;;;;;;;;;;;;AAfA;AAEF;AASY;;AA2CZ;;AAiBM;AAcA;AAkCN;AAeA;;;AAWD;;ACrJD;AA4CI;AACA;AACA;AA9BF;AACA;;AAEA;AACA;;;;AAqBA;;;AAcA;;;;;AA4CD;;AC1HD;AASc;;;AAAQ;;AASpB;;;AAGD;;AClBD;;;AAKc;AAMZ;AAeM;AAQA;;AAkBN;AAWA;;;AAKD;;ACtDD;AA6BI;AACA;AACA;AACA;;;;AAhBF;;;;;AAKE;;;AAIQ;;AAIA;;;;AAoDV;;;AAcD;;AChGD;;;;AAqCsC;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../device-grid/columns/column-util.service.ts","../../device-grid/columns/alarms.cell-renderer.component.ts","../../device-grid/columns/alarms.device-grid-column.ts","../../device-grid/columns/alarms.header-cell-renderer.component.ts","../../device-grid/columns/group.cell-renderer.component.ts","../../device-grid/columns/group.device-grid-column.ts","../../device-grid/columns/group.filtering-form-renderer.component.ts","../../device-grid/columns/imei.device-grid-column.ts","../../device-grid/columns/model.cell-renderer.component.ts","../../device-grid/columns/model.device-grid-column.ts","../../device-grid/columns/name.cell-renderer.component.ts","../../device-grid/columns/name.device-grid-column.ts","../../device-grid/columns/registration-date.cell-renderer.component.ts","../../device-grid/columns/registration-date.device-grid-column.ts","../../device-grid/columns/serial-number.cell-renderer.component.ts","../../device-grid/columns/serial-number.device-grid-column.ts","../../device-grid/columns/status.cell-renderer.component.ts","../../device-grid/columns/status.device-grid-column.ts","../../device-grid/columns/system-id.device-grid-column.ts","../../device-grid/columns/type.device-grid-column.ts","../../device-grid/columns/icon.cell-renderer.component.ts","../../device-grid/device-grid.model.ts","../../device-grid/device-grid.service.ts","../../device-grid/device-grid.component.ts","../../device-grid/device-grid.module.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;AAKA;;AAEG;AAEH;;AAEwB;AAEtB;;AAWA;AAUA;AAKA;AAKA;AAKA;;;AAGD;;AC9CD;AAQW;AACA;;AADA;;;AAGV;;ACVD;;AAoHC;;ACvHD;AAwBqB;AAAA;;;AACpB;;ACzBD;AAMW;AACA;AADA;;;AAGV;;ACFD;;AAyCC;;AC1CD;AAWqB;;;;;AAFnB;AAEmB;;;;;;;;AAgDnB;;;AAYD;;AC9ED;;AA+BC;;AC9BD;AAMW;AACA;AADA;;;AAGV;;ACTD;;AAmCC;;ACnCD;AAcW;AACA;AADA;;;AAGV;;ACZD;;AAgCC;;ACtCD;AAMqB;AAAA;;;AACpB;;ACLD;;AAgFE;AAGD;;ACpFD;AAMW;AACA;AADA;;;AAGV;;ACTD;;AAmCC;;ACpCD;AAMqB;AAAA;;;AACpB;;ACLD;;AAoMC;;ACtMD;;AA+BC;;AC/BD;;AA6BC;;ACtBD;;AAQc;;;AAQb;AAED;AAGW;AADP;AAcH;;ACnCK;;;;AAKL;AAED;AACE;AACD;AAED;AAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;AAsBG;;AAED;;;;;AAKA;AACA;AACD;AAED;;AAEG;;;AC5BH;;;;;;;;;;AAOc;;;AA2CZ;AAOA;;;AAeA;AAIA;AAIA;AAIA;;AAQA;;AA6DM;AAgBA;AAgBA;AAQA;AAcA;;AAgBN;;;AA4BA;;;;AA0BD;;AC3QD;AA4HqB;;;;AArGV;;;;AAIA;;;AAGT;;;;AAIG;;AAEH;;;;AAIG;;;;;AAKH;;;AAOA;;AAOA;;AAIS;;AAEA;;;;AAIT;;AAQA;AAOS;;;AAGA;AACT;;;AAGG;AACM;AACT;;;AAGG;AAEH;;AAEU;AACA;AACA;;AAEA;;;;;;;;;AAcV;AACA;AACA;;AAImB;AAInB;;;AA4FA;;AAII;;;AACD;;;AASJ;;AC1PD;;;;AAmCgC;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../device-grid/columns/column-util.service.ts","../../device-grid/columns/alarms.cell-renderer.component.ts","../../device-grid/columns/alarms.device-grid-column.ts","../../device-grid/columns/alarms.header-cell-renderer.component.ts","../../device-grid/columns/group.cell-renderer.component.ts","../../device-grid/columns/group.device-grid-column.ts","../../device-grid/columns/group.filtering-form-renderer.component.ts","../../device-grid/columns/imei.device-grid-column.ts","../../device-grid/columns/model.cell-renderer.component.ts","../../device-grid/columns/model.device-grid-column.ts","../../device-grid/columns/name.cell-renderer.component.ts","../../device-grid/columns/name.device-grid-column.ts","../../device-grid/columns/registration-date.cell-renderer.component.ts","../../device-grid/columns/registration-date.device-grid-column.ts","../../device-grid/columns/serial-number.cell-renderer.component.ts","../../device-grid/columns/serial-number.device-grid-column.ts","../../device-grid/columns/status.cell-renderer.component.ts","../../device-grid/columns/status.device-grid-column.ts","../../device-grid/columns/system-id.device-grid-column.ts","../../device-grid/columns/type.device-grid-column.ts","../../device-grid/columns/icon.cell-renderer.component.ts","../../device-grid/device-grid.model.ts","../../device-grid/device-grid.service.ts","../../device-grid/device-grid.component.ts","../../device-grid/device-grid.module.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;AAKA;;AAEG;AAEH;;AAEwB;AAEtB;;AAWA;AAUA;AAKA;AAKA;AAKA;;;AAGD;;AC9CD;AAQW;AACA;;AADA;;;AAGV;;ACVD;;AAoHC;;ACvHD;AAwBqB;AAAA;;;AACpB;;ACzBD;AAMW;AACA;AADA;;;AAGV;;ACFD;;AAyCC;;AC1CD;AAWqB;;;;;AAFnB;AAEmB;;;;;;;;AAgDnB;;;AAYD;;AC9ED;;AA+BC;;AC9BD;AAMW;AACA;AADA;;;AAGV;;ACTD;;AAmCC;;ACnCD;AAcW;AACA;AADA;;;AAGV;;ACZD;;AAgCC;;ACtCD;AAMqB;AAAA;;;AACpB;;ACLD;;AAgFE;AAGD;;ACpFD;AAMW;AACA;AADA;;;AAGV;;ACTD;;AAmCC;;ACpCD;AAMqB;AAAA;;;AACpB;;ACLD;;AAoMC;;ACtMD;;AA+BC;;AC/BD;;AA6BC;;ACtBD;;AAQc;;;AAQb;AAED;AAGW;AADP;AAcH;;ACnCK;;;;AAKL;AAED;AACE;AACD;AAED;AAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;AAsBG;;AAED;;;;;AAKA;AACA;AACD;AAED;;AAEG;;;AC5BH;;;;;;;;;;AAOc;;;AA2CZ;AAOA;;;AAeA;AAIA;AAIA;AAIA;;AAQA;;AA6DM;AAgBA;AAgBA;AAQA;AAcA;;AAgBN;;;AA4BA;;;;AA0BD;;AC9QD;AA0HqB;;;;AArGV;;;;AAIA;;;AAGT;;;;AAIG;;AAEH;;;;AAIG;;;;;AAKH;;;AAOA;;AAOA;;AAIS;;AAEA;;;;AAIT;;AAQA;AAOS;;;AAGA;AACT;;;AAGG;AACM;AACT;;;AAGG;AAEH;;AAEU;AACA;AACA;;AAEA;;;;;;;;;AAcV;AACA;AACA;;AAImB;AAInB;;;AA4FA;;AAII;;;AACD;;;AASJ;;ACrPD;;;;AAmCgC;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../device-profile/device-profile-navigation.factory.ts","../../device-profile/device-profile.model.ts","../../device-profile/device-profile.service.ts","../../device-profile/select-configuration-modal.component.ts","../../device-profile/device-profile.component.ts","../../device-profile/device-profile-list.component.ts","../../device-profile/add-device-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile-detail.component.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.ts","../../device-profile/device-profile.module.ts","../../device-profile/device-profile.guard.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA;;;;;AAeC;;;;;ACdC;;;AAGA;;AAEE;AACA;;AAEH;;;;;;;AAQA;;;;;;;AAQA;;;;;AAMA;;AAGC;;;;;;AAMA;;;;;;;AAOD;AAED;AACE;AACD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AAaI;AACA;AACA;;;;;;;;AAKF;AAOA;;;;;;;;;;;AAWG;AACH;AA6BA;;AAEG;;AAYH;AAYM;;AAgCN;AAyBA;AAgBA;AAqBA;;;;;;AAMG;AACH;AA4BA;AASA;AA6BA;AAyBA;AA0BA;;;AA4BD;;AC9VD;AA2Bc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAf8C;;AAE1D;AACA;AAIA;;;;;;;AAQoB;;;;AA2BpB;;;AA2BD;;ACtDD;AAkDI;AACA;AACA;AACA;AACA;AACA;AAvBF;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGuD;;;;;;;;;AA0GvD;;;AAqGA;AAWA;;;;AA4CA;;;AAqBD;;ACrUD;AA2DI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzCF;AACA;AACA;AACA;;;;;;;AAgBE;;AAQF;AACA;AACA;AACA;AAGU;AAaV;;AAmEA;;;;;;;;AA4ED;;ACjPD;AAwCI;AACA;AApBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGuD;AACvD;AAMA;;;;AASU;;;;;AAaX;;AClCD;AAiDW;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAzBqD;;;AAGvD;;;;;;AAOA;AACA;;;AAUS;;;;;AA4DT;AAMA;AAoBA;AAaA;;;AAkBD;;ACtMD;;;AAcW;AACA;;;;AAIA;;;AACV;;ACfD;;;;;;;AAoBC;;ACmBD;;;;AA4BmC;;ACzEnC;;AAUE;;;AAOD;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../device-profile/device-profile-navigation.factory.ts","../../device-profile/device-profile.model.ts","../../device-profile/device-profile.service.ts","../../device-profile/select-configuration-modal.component.ts","../../device-profile/device-profile.component.ts","../../device-profile/device-profile-list.component.ts","../../device-profile/add-device-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile-detail.component.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.ts","../../device-profile/device-profile.module.ts","../../device-profile/device-profile.guard.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA;;;;;AAeC;;;;;ACdC;;;AAGA;;AAEE;AACA;;AAEH;;;;;;;AAQA;;;;;;;AAQA;;;;;AAMA;;AAGC;;;;;;AAMA;;;;;;;AAOD;AAED;AACE;AACD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AAaI;AACA;AACA;;;;;;;;AAKF;AAOA;;;;;;;;;;;AAWG;AACH;AA6BA;;AAEG;;AAYH;AAYM;;AAgCN;AAyBA;AAgBA;AAqBA;;;;;;AAMG;AACH;AA4BA;AASA;AA6BA;AAyBA;AA0BA;;;AA4BD;;AC9VD;AA2Bc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAf8C;;AAE1D;AACA;AAIA;;;;;;;AAQoB;;;;AA2BpB;;;AA2BD;;ACtDD;AAkDI;AACA;AACA;AACA;AACA;AACA;AAvBF;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGuD;;;;;;;;;AA0GvD;;;AAqGA;AAWA;;;;AA4CA;;;AAqBD;;ACvUD;AAwDI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzCF;AACA;AACA;AACA;;;;;;;AAgBE;;AAQF;AACA;AACA;AACA;AAGU;AAaV;;AAmEA;;;;;;;;AA4ED;;AC5OD;AAwCI;AACA;AApBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGuD;AACvD;AAMA;;;;AASU;;;;;AAaX;;AClCD;AAiDW;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAzBqD;;;AAGvD;;;;;;AAOA;AACA;;;AAUS;;;;;AA4DT;AAMA;AAoBA;AAaA;;;AAkBD;;ACtMD;;;AAcW;AACA;;;;AAIA;;;AACV;;ACfD;;;;;;;AAoBC;;ACmBD;;;;AA4BmC;;ACzEnC;;AAUE;;;AAOD;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-provisioned-certificates.module.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;;;;;;;;;AAIA;AAGI;AACA;AADQ;;;;;AA6BX;;ACNK;;;;;AAEN;AAgGI;AACA;AACA;AACA;AACA;AACA;;AAhFF;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqE2C;;AAW3C;;;;;;;;AAkCM;;;;AA6CP;;AC5MD;;;;AAyBmD;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-provisioned-certificates.module.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;;;;;;;;;AAIA;AAGI;AACA;AADQ;;;;;AA6BX;;ACNK;;;;;AAEN;AA+FI;AACA;AACA;AACA;AACA;AACA;;AAhFF;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqE2C;;AAW3C;;;;;;;;AAkCM;;;;AA6CP;;AC3MD;;;;AAyBmD;;"}
@@ -277,7 +277,8 @@ function createGenericBrandingForm(formBuilder) {
277
277
  messageBanner: formBuilder.group({
278
278
  messageBannerEnabled: formBuilder.control(false),
279
279
  messageBannerContent: formBuilder.control(''),
280
- messageBannerType: formBuilder.control('info')
280
+ messageBannerType: formBuilder.control('info'),
281
+ messageBannerId: formBuilder.control('')
281
282
  }),
282
283
  baseTypography: formBuilder.group({
283
284
  'font-url': formBuilder.control(undefined),
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-branding-shared-data.mjs","sources":["../../branding/shared/data/apply-branding-locally.service.ts","../../branding/shared/data/branding-shades.service.ts","../../branding/shared/data/branding-version.service.ts","../../branding/shared/data/branding.type.ts","../../branding/shared/data/branding-tracking.service.ts","../../branding/shared/data/store-branding.service.ts","../../branding/shared/data/c8y-ngx-components-branding-shared-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { BrandingOptionsJson } from './branding.type';\nimport { applyBrandingOptions, getOptionsToMerge, mergeOptions } from '@c8y/bootstrap';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingLocallyService {\n private keysToRemove: Array<string> | null;\n\n constructor(private options: OptionsService) {}\n\n applyBranding(optionsJson?: BrandingOptionsJson) {\n if (!this.keysToRemove) {\n this.keysToRemove = Object.keys(this.combineOptions());\n }\n const combinedOptions = this.combineOptions(optionsJson);\n const newKeysToRemove = Object.keys(combinedOptions);\n\n // avoid to remove keys that would actually be set again afterwards\n const keysToActuallyRemove = this.keysToRemove.filter(key => !newKeysToRemove.includes(key));\n this.removeKeysFromOptions(keysToActuallyRemove);\n\n this.keysToRemove = newKeysToRemove;\n\n applyBrandingOptions(combinedOptions);\n this.applyApplicationOptions(combinedOptions);\n }\n\n resetBranding() {\n this.applyBranding();\n }\n\n private applyApplicationOptions(optionsJson: any) {\n Object.entries(optionsJson).forEach(([key, value]) => {\n this.options.set(key, value);\n });\n }\n\n private removeKeysFromOptions(keys: string[]) {\n for (const key of keys) {\n this.options.delete(key);\n }\n }\n\n private combineOptions(optionsJson?: BrandingOptionsJson) {\n const optionsToMerge = getOptionsToMerge();\n if (!optionsToMerge) {\n // should never happen as the options should be set quite early in bootstrapping process.\n throw Error(`Failed to retrieve options for merging`);\n }\n if (optionsJson) {\n optionsToMerge.dynamicOptions = optionsJson;\n }\n return mergeOptions(optionsToMerge);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { default as chroma } from 'chroma-js';\n\n@Injectable({ providedIn: 'root' })\nexport class BrandingShadesService {\n getShadeColorBrandingCssVars(newBrandPrimary: string) {\n const shades = this.generateShades(newBrandPrimary);\n return this.shadesToObject(shades);\n }\n\n isValidShadeColor(color: string): boolean {\n try {\n return chroma.valid(color);\n } catch {\n return false;\n }\n }\n\n hasCustomShadesSet(\n previousBrandPrimary: string,\n otherVars: Record<string, string | number>\n ): boolean {\n if (previousBrandPrimary && otherVars) {\n const oldShades = this.generateShades(previousBrandPrimary);\n const oldShadesObj = this.shadesToObject(oldShades);\n for (const shadeKey of Object.keys(oldShadesObj)) {\n const fromVars = otherVars[shadeKey];\n const generated = oldShadesObj[shadeKey];\n if (fromVars === null || fromVars === undefined) {\n continue;\n }\n if (fromVars !== generated) {\n return true;\n }\n }\n }\n return false;\n }\n\n private shadesToObject(shades: string[]) {\n const brandingCssVars: Record<`c8y-brand-${number}0`, string> = {};\n let i = 1;\n for (const shade of shades) {\n const key = `c8y-brand-${i}0` as const;\n brandingCssVars[key] = shade;\n i++;\n }\n\n return brandingCssVars;\n }\n\n private generateShades(inputColor: string) {\n const referenceShades = [\n '#134158',\n '#1C5569',\n '#058192', // primary color\n '#22A6AA',\n '#3CC1B7',\n '#8ADBD5',\n '#C5EDEA',\n '#EBF9F8'\n ];\n // Calculate the luminance of the reference shades\n const referenceLuminances = referenceShades.map(color => chroma(color).luminance());\n const inputColorAsHex = chroma(inputColor);\n // Generate shades of the input color with the same luminance as the reference shades\n const generatedShades = referenceLuminances.map(luminance =>\n chroma(inputColor).luminance(luminance).hex('rgb')\n );\n // Calculate the distance between the input color and each color in the generatedShades array\n const distances = generatedShades.map(color => chroma.deltaE(inputColorAsHex, color));\n // Find the index of the color with the smallest distance\n const index = distances.indexOf(Math.min(...distances));\n generatedShades[index] = inputColorAsHex.hex('rgb');\n return generatedShades;\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for creating and manipulating branding versions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingVersionService {\n static readonly nameAndIterationSeparator = '-';\n\n /**\n * Creates the initial branding version for a given name.\n * @param name The name of the branding.\n * @returns The initial branding version.\n */\n createInitialBrandingVersion<T extends string>(name: T) {\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${1}` as const;\n }\n\n /**\n * Splits a branding version into its name and iteration.\n * @param version The branding version to split.\n * @returns The name and iteration of the branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n splitBrandingIntoNameAndIteration(version: string): { name: string; iteration: number } {\n const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);\n if (splitted.length < 2) {\n throw Error(\n `A valid version should at least conatin one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`\n );\n }\n\n const lastValueOfSplittedArray = splitted[splitted.length - 1];\n if (lastValueOfSplittedArray === '' || !/[0-9]+/.test(lastValueOfSplittedArray)) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${lastValueOfSplittedArray}' from '${version}'`\n );\n }\n\n const iteration = Number.parseInt(lastValueOfSplittedArray);\n if (Number.isNaN(iteration) && iteration <= 0) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`\n );\n }\n\n const name = splitted.slice(0, -1).join(BrandingVersionService.nameAndIterationSeparator);\n if (!name) {\n throw Error(\n `The first part of the version should not be empty, this is the case for '${name}' from '${version}'`\n );\n }\n\n return { iteration, name };\n }\n\n /**\n * Bumps the iteration of a branding version.\n * @param version The branding version to bump.\n * @returns The bumped branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n bumpBrandingIteration(version: string) {\n const { name, iteration } = this.splitBrandingIntoNameAndIteration(version);\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${iteration + 1}` as const;\n }\n}\n","import type { FormBuilder, FormControl } from '@angular/forms';\nimport { Alert, colorValidator, ApplicationOptions } from '@c8y/ngx-components';\n\nexport type BrandingFormValue = ReturnType<typeof createGenericBrandingForm>['value'];\nexport type BrandingFormKeys = keyof BrandingFormValue;\nexport type BrandingFormTopLevelKeys = (typeof brandingFormGroupTopLevelEntries)[number];\nexport type BrandingFormTopLevelKeysToUnpack =\n (typeof brandingFormGroupTopLevelEntriesToUnpack)[number];\n\nexport type TopLevelFormKeysNotToUnpack = Exclude<\n BrandingFormTopLevelKeys,\n BrandingFormTopLevelKeysToUnpack\n>;\nexport type UnpackedTopLevelFormKeys = Pick<\n BrandingFormValue,\n BrandingFormTopLevelKeysToUnpack\n>[keyof Pick<BrandingFormValue, BrandingFormTopLevelKeysToUnpack>];\n\nexport type NotUnpackedTopLevelFormKeys = Pick<BrandingFormValue, TopLevelFormKeysNotToUnpack>;\nexport type TopLevelForm = NotUnpackedTopLevelFormKeys & UnpackedTopLevelFormKeys;\nexport type TopLevelValues = TopLevelForm;\n\nexport type BrandingCSSVarsForm = Omit<BrandingFormValue, BrandingFormTopLevelKeys>;\n\nexport type LightBrandingCSSVarsValues = ReturnType<typeof createBrandingForm>['value'] &\n BrandingCSSVarsForm[keyof BrandingCSSVarsForm];\n\ntype addPrefixToObject<T, P extends string> = {\n [K in keyof T as K extends string ? `${P}${K}` : never]: T[K];\n};\n\nexport type DarkBrandingCSSVarsValues = addPrefixToObject<LightBrandingCSSVarsValues, 'dark-'>;\n\nexport type BrandingCSSVarsValues = LightBrandingCSSVarsValues & DarkBrandingCSSVarsValues;\n\nexport type BrandingOptionsJson = TopLevelValues & {\n brandingCssVars?: BrandingCSSVarsValues & { [key: string]: any };\n} & Omit<Partial<ApplicationOptions>, 'brandingCssVars'> & { [key: string]: any };\n\nexport const brandingFormGroupTopLevelEntries = [\n 'cookieBanner',\n 'genericApplicationOptions',\n 'darkThemeAvailable',\n 'messageBanner'\n] as const satisfies ReadonlyArray<BrandingFormKeys>;\nexport const brandingFormGroupTopLevelEntriesToUnpack = [\n 'genericApplicationOptions'\n] as const satisfies ReadonlyArray<(typeof brandingFormGroupTopLevelEntries)[number]>;\n\nexport const numberBrandingVars = ['brand-logo-img-height', 'btn-border-radius-base'] as const;\nexport const colorBrandingVars = [\n 'brand-dark',\n 'brand-light',\n 'brand-primary',\n 'c8y-brand-10',\n 'c8y-brand-20',\n 'c8y-brand-30',\n 'c8y-brand-40',\n 'c8y-brand-50',\n 'c8y-brand-60',\n 'c8y-brand-70',\n 'c8y-brand-80',\n 'palette-status-info',\n 'palette-status-warning',\n 'palette-status-success',\n 'palette-status-danger',\n 'palette-status-info-light',\n 'palette-status-warning-light',\n 'palette-status-success-light',\n 'palette-status-danger-light',\n 'palette-status-info-dark',\n 'palette-status-warning-dark',\n 'palette-status-success-dark',\n 'palette-status-danger-dark',\n 'body-background-color',\n 'text-color',\n 'text-muted',\n 'link-color',\n 'link-hover-color',\n 'action-bar-background-default',\n 'action-bar-color-actions-hover',\n 'action-bar-color-actions',\n 'action-bar-color-default',\n 'action-bar-icon-color',\n 'header-color',\n 'header-text-color',\n 'header-hover-color',\n 'navigator-bg-color',\n 'navigator-active-bg',\n 'navigator-border-active',\n 'navigator-header-bg',\n 'navigator-title-color',\n 'navigator-separator-color',\n 'navigator-text-color',\n 'navigator-color-active',\n 'right-drawer-background-default',\n 'right-drawer-text-color-default',\n 'right-drawer-separator-color',\n 'right-drawer-link-color',\n 'right-drawer-link-color-hover',\n 'right-drawer-text-color-muted'\n] as const;\nexport const stringBrandingVars = [\n 'brand-logo-img',\n 'navigator-platform-logo',\n 'login-platform-animation-img'\n] as const;\n\nexport const stringOrNumberBrandingVars = ['navigator-platform-logo-height'] as const;\n\nexport const allBrandingCSSVars = [\n ...numberBrandingVars,\n ...stringBrandingVars,\n ...colorBrandingVars\n] as const;\n\nexport function createGenericBrandingForm(formBuilder: FormBuilder) {\n const form = formBuilder.group({\n darkThemeAvailable: formBuilder.control<boolean>(false),\n cookieBanner: formBuilder.group({\n cookieBannerTitle: formBuilder.control<string>(undefined),\n cookieBannerText: formBuilder.control<string>(undefined),\n cookieBannerDisabled: formBuilder.control(false),\n policyUrl: formBuilder.control<string>(undefined),\n policyVersion: formBuilder.control<string>(undefined)\n }),\n messageBanner: formBuilder.group({\n messageBannerEnabled: formBuilder.control(false),\n messageBannerContent: formBuilder.control<string>(''),\n messageBannerType: formBuilder.control<Alert['type']>('info')\n }),\n baseTypography: formBuilder.group({\n 'font-url': formBuilder.control<string>(undefined),\n 'font-family-base': formBuilder.control<string>(undefined)\n }),\n headingsAndNavigatorTypography: formBuilder.group({\n 'font-family-headings': formBuilder.control<string>(undefined),\n 'navigator-font-family': formBuilder.control<string>('var(--font-family-base)')\n }),\n genericApplicationOptions: formBuilder.group({\n globalTitle: formBuilder.control<string>(undefined),\n faviconUrl: formBuilder.control<string>(undefined)\n })\n });\n return form;\n}\n\nexport function createBrandingForm(formBuilder: FormBuilder) {\n const colorControls = colorBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined, { asyncValidators: [colorValidator()] });\n return acc;\n },\n {} as { [key in (typeof colorBrandingVars)[number]]: FormControl<string> }\n );\n const stringControls = stringBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined);\n return acc;\n },\n {} as { [key in (typeof stringBrandingVars)[number]]: FormControl<string> }\n );\n const numberControls = numberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as { [key in (typeof numberBrandingVars)[number]]: FormControl<number> }\n );\n const stringOrNumberControls = stringOrNumberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as {\n [key in (typeof stringOrNumberBrandingVars)[number]]: FormControl<string | number>;\n }\n );\n const form = formBuilder.group({\n ...colorControls,\n ...stringControls,\n ...numberControls,\n ...stringOrNumberControls\n });\n\n return form;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { GainsightService, PxEventData } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingTrackingService {\n readonly prefix = 'brandingManager';\n constructor(@Optional() private gainsight: GainsightService) {}\n\n getStartedUsingBranding() {\n this.triggerEvent('getStartedUsingBranding');\n }\n\n deleteAllBrandings() {\n this.triggerEvent('deleteAllBrandings');\n }\n\n exportBranding() {\n this.triggerEvent('exportBranding');\n }\n\n addNewVersion() {\n this.triggerEvent('addNewVersion');\n }\n\n duplicateVersion() {\n this.triggerEvent('duplicateVersion');\n }\n\n applyToApps(apps: string[]) {\n this.triggerEvent('applyToApps', { apps });\n }\n\n importBranding() {\n this.triggerEvent('importBranding');\n }\n\n deleteBrandingVariant() {\n this.triggerEvent('deleteBrandingVariant');\n }\n\n openPreviewForBranding() {\n this.triggerEvent('openPreviewForBranding');\n }\n\n private triggerEvent(action: string, props?: PxEventData) {\n if (!this.gainsight) {\n return;\n }\n\n const finalProps = {\n ...props,\n action\n };\n\n return this.gainsight.triggerEvent(this.prefix, finalProps);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationType,\n FetchClient,\n IApplication,\n IApplicationBinary,\n IManagedObject,\n InventoryBinaryService,\n InventoryService\n} from '@c8y/client';\nimport { ApplicationService } from '@c8y/client';\nimport { AppStateService, ThemeSwitcherService, ZipService } from '@c8y/ngx-components';\nimport { defer, BehaviorSubject, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BrandingVersionService } from './branding-version.service';\nimport { BrandingOptionsJson, allBrandingCSSVars, numberBrandingVars } from './branding.type';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { BrandingTrackingService } from './branding-tracking.service';\n\nexport interface BrandVersion {\n name: string;\n id: string;\n revision: number;\n version: string;\n tags: string[];\n owner?: string;\n lastUpdated?: string;\n publicOptionsApp?: IApplication;\n}\n\nexport interface BrandingFileDetails {\n fileName: string;\n blob: Blob;\n jsonContent?: any;\n}\n\nexport interface BrandingFileDetailsLegacy {\n path: string;\n value: string;\n blob?: Blob;\n fileName: string;\n urlWrapped: boolean;\n}\n\n/**\n * Service to load and store the branding of the tenant.\n */\n@Injectable({ providedIn: 'root' })\nexport class StoreBrandingService {\n readonly fileNames = {\n options: 'options.json',\n manifest: 'cumulocity.json',\n exportZipName: 'public-options.zip'\n } as const;\n readonly manifestValues = {\n name: 'public-options',\n contextPath: 'public-options',\n key: 'public-options-key',\n description: 'Application containing static assets used by e.g. branding.',\n noAppSwitcher: true,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.SHARED\n } as const satisfies IApplication;\n refreshTriggerBrandingVariants = new BehaviorSubject<void>(null);\n constructor(\n private applicationService: ApplicationService,\n private inventory: InventoryService,\n private binary: InventoryBinaryService,\n private zip: ZipService,\n private fetch: FetchClient,\n private brandingVersionService: BrandingVersionService,\n private appState: AppStateService,\n private staticAssets: StaticAssetsService,\n private themeSwitcher: ThemeSwitcherService,\n private brandingTracking: BrandingTrackingService\n ) {}\n\n /**\n * Sets the `latest` tag on the provided branding version. Making it the global active branding.\n */\n async markAsActive(brandingVersion: BrandVersion, app?: IApplication): Promise<void> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n const tags = brandingVersion.tags || [];\n const version = brandingVersion.version;\n await this.applicationService.setPackageVersionTag(publicOptions, version, [...tags, 'latest']);\n }\n\n /**\n * Opens a new tab with to preview the branding. The branding must have been saved beforehand.\n * @param brandingName the name of the branding to be previewed\n */\n openPreviewForBranding(brandingName: string) {\n this.brandingTracking.openPreviewForBranding();\n window.open(\n `/apps/${\n this.appState.currentApplication.value?.contextPath || 'cockpit'\n }/index.html?brandingPreview=true&dynamicOptionsUrl=/apps/public/public-options@${brandingName}/options.json`,\n '_blank',\n 'noopener,noreferrer'\n );\n }\n\n /**\n * Returns the brandings of the tenant.\n * If no public options app is found, publicOptions will be undefined and variants an empty array.\n * For old brandings (created without versioning) a default version is returned.\n */\n async loadBrandingVariants(\n app?: IApplication\n ): Promise<{ publicOptions: IApplication | undefined; variants: BrandVersion[] }> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n if (!publicOptions) {\n return { publicOptions: undefined, variants: [] };\n }\n const { data: versions } = await this.applicationService.listVersions(publicOptions);\n let mappedVersions: BrandVersion[] =\n versions\n ?.map(tmp => {\n try {\n const { name, iteration } =\n this.brandingVersionService.splitBrandingIntoNameAndIteration(tmp.version);\n return {\n revision: iteration,\n name: name,\n id: tmp.binaryId,\n version: tmp.version,\n tags: tmp.tags || [],\n publicOptionsApp: publicOptions\n };\n } catch (e) {\n console.warn('Failed to parse version', tmp, e);\n return undefined;\n }\n })\n ?.filter(Boolean) || [];\n if (!versions && publicOptions.activeVersionId) {\n mappedVersions = [\n {\n name: 'default',\n id: publicOptions.activeVersionId,\n version: 'default-1',\n revision: 1,\n tags: ['latest', 'default'],\n publicOptionsApp: publicOptions\n }\n ];\n }\n\n const variants = await this.getMetadataOfBrandingBinaries(mappedVersions);\n return { publicOptions, variants };\n }\n\n /**\n * As the branding is not immediately available after creation, this method will wait for the branding to be present.\n * @param version The version of the branding to be retrieved.\n */\n async waitForBrandingToBePresent(version: string): Promise<void> {\n const numberOfAttempts = 120;\n const sleepDurationInSeconds = 1;\n for (let i = 0; i < numberOfAttempts; i++) {\n try {\n // do not sleep before the first attempt\n if (i !== 0) {\n await new Promise(resolve => setTimeout(resolve, sleepDurationInSeconds * 1_000));\n }\n await this.getBrandingOptionsForVersion(version);\n console.info(`Branding \"${version}\" available now.`);\n return;\n } catch (e) {\n console.warn(\n `Branding \"${version}\" not yet present, retrying in ${sleepDurationInSeconds} seconds...`,\n e\n );\n }\n }\n throw new Error(\n `Branding \"${version}\" not available after ${numberOfAttempts * sleepDurationInSeconds} seconds, giving up.`\n );\n }\n\n /**\n * Will create a the initial branding based on the currently applied CSS variables.\n */\n async getStartedUsingBranding(): Promise<void> {\n const allVariables: Record<string, string> = {};\n const themeToRetrieveVars = ['light', 'dark'] as const;\n const unretrievableVars = new Array<string>();\n for (const theme of themeToRetrieveVars) {\n this.themeSwitcher.temporaryChangeTheme(theme);\n const styles = getComputedStyle(document.body);\n const variablesToSkip = [\n 'navigator-platform-logo',\n 'brand-logo-img'\n ] satisfies (typeof allBrandingCSSVars)[number][];\n const values = allBrandingCSSVars\n .filter(cssVar => !variablesToSkip.includes(cssVar as any))\n .reduce((prev, key) => {\n const directValue = styles.getPropertyValue(`--${key}`);\n const c8yPrefixedValue = styles.getPropertyValue(`--c8y-${key}`);\n const newKey = theme === 'light' ? key : `dark-${key}`;\n if (!directValue && !c8yPrefixedValue) {\n unretrievableVars.push(newKey);\n return prev;\n }\n let value: string | number = directValue || c8yPrefixedValue;\n if (numberBrandingVars.includes(key as any)) {\n try {\n value = Number.parseFloat(value.replace(/[A-Za-z]/g, '').trim());\n } catch (e) {\n console.warn(\n `Failed to parse number for \"${key}\" value that failed to parse: \"${value}\"`,\n e\n );\n return prev;\n }\n }\n return Object.assign(prev, { [newKey]: value });\n }, {});\n Object.assign(allVariables, values);\n }\n this.themeSwitcher.resetTemporaryTheme();\n\n try {\n await this.createPublicOptionsAppFromInheritedOptions(allVariables);\n } catch (e) {\n console.warn(e);\n }\n }\n\n getZipForBinary(\n binaryId: string,\n fileName: string = this.fileNames.exportZipName\n ): Observable<File> {\n return defer(() => this.binary.download(binaryId)).pipe(\n switchMap(response => response.blob()),\n map(blob => new File([blob], fileName))\n );\n }\n\n /**\n * Deletes the public options app and therefore all brandings.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteAllBrandings(publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.delete(publicOptions);\n }\n\n /**\n * Enhances the provided branding versions with metadata from the linked binaries.\n * It will add the owner and lastUpdated fields to the versions.\n * The provided array is altered.\n */\n async getMetadataOfBrandingBinaries(versions: BrandVersion[]): Promise<BrandVersion[]> {\n const binaryIds = uniq(versions.map(tmp => tmp.id));\n if (!binaryIds.length) {\n return versions;\n }\n const { data: metadata } = await this.inventory.list({\n ids: binaryIds.join(','),\n pageSize: 2000\n });\n return versions.map(version => {\n const metadataForVersion =\n metadata.find(tmp => tmp.id === version.id) || ({} as IManagedObject);\n const { owner, lastUpdated } = metadataForVersion;\n return Object.assign(version, { owner, lastUpdated });\n });\n }\n\n /**\n * Saves the provided branding as a new version for the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async saveBranding(\n blob: Blob | File,\n version: string,\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const file = blob instanceof File ? blob : new File([blob], `public-options-${version}.zip`);\n const publicOptions = publicOptionsApp || (await this.getPublicOptionsApp());\n\n const { data: binary } = await this.applicationService\n .binary(publicOptions)\n .uploadApplicationVersion(file, version, tags);\n if (!publicOptions.activeVersionId || tags.includes('latest')) {\n await this.applicationService.update({\n id: publicOptions.id,\n activeVersionId: `${binary.binaryId}`\n });\n }\n this.refreshTriggerBrandingVariants.next();\n return { version, binary, tags };\n }\n\n /**\n * Removes a branding version from the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteBrandingVersion(version: string, publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.deleteVersionPackage(publicOptions, { version });\n this.refreshTriggerBrandingVariants.next();\n }\n\n /**\n * Returns the blob of a zip file containing the provided branding options (options.json) and the manifest (cumulocity.json).\n */\n async getBrandingZip(content: Record<string, any> = {}): Promise<Blob> {\n content.lastUpdated = new Date().toISOString();\n const contentAsString = JSON.stringify(content);\n const zip = await this.zip.createZip([\n { fileName: this.fileNames.options, blob: new Blob([contentAsString]) },\n { fileName: this.fileNames.manifest, blob: new Blob([JSON.stringify(this.manifestValues)]) }\n ]);\n return zip;\n }\n\n /**\n * Adds a new branding version to the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async addBranding(\n version: string,\n content: BrandingOptionsJson = {},\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const zip = await this.getBrandingZip(content);\n\n return await this.saveBranding(zip, version, tags, publicOptionsApp);\n }\n\n /**\n * Returns the branding options for the provided version.\n * If no branding was found (e.g. status 404), an error is thrown.\n */\n async getBrandingOptionsForVersion(version?: string): Promise<BrandingOptionsJson> {\n const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}?nocache=${new Date().getTime()}`;\n const response = await this.fetch.fetch(url);\n if (response.status !== 200) {\n throw Error(`Unexpected status code: ${response.status}`);\n }\n\n const content = await response.json();\n return content as BrandingOptionsJson;\n }\n\n /**\n * Saves a new iteration of an already existing branding.\n */\n async saveExistingBranding(\n branding: Record<string, any>,\n currentVersion: string,\n tagsOfCurrentVersion: string[] = [],\n newVersion?: string\n ): Promise<string> {\n const publicOptions = await this.getPublicOptionsApp();\n const versionToBeSet = newVersion\n ? this.brandingVersionService.createInitialBrandingVersion(newVersion)\n : this.brandingVersionService.bumpBrandingIteration(currentVersion);\n\n const finalTags = tagsOfCurrentVersion;\n // only apply latest tag directly\n // there seems to be some special handling for the latest tag in the backend, that allows to directly move it while uploading the new version.\n // for all other tags this results in a 409 conflict. We therefore need to first delete the old version, before setting the other tags on the new version.\n if (!newVersion) {\n tagsOfCurrentVersion = tagsOfCurrentVersion.filter(tag => tag === 'latest');\n }\n await this.addBranding(versionToBeSet, branding, tagsOfCurrentVersion, publicOptions);\n if (!newVersion) {\n try {\n await this.deleteBrandingVersion(currentVersion, publicOptions);\n } catch (e) {\n if (e.res.status !== 404) {\n throw e;\n }\n }\n await this.applicationService.setPackageVersionTag(publicOptions, versionToBeSet, finalTags);\n }\n\n return versionToBeSet;\n }\n\n /**\n * Combines current branding options with the provided branding variables and creates a new public options app.\n * Any assets in the branding will be cloned.\n */\n async createPublicOptionsAppFromInheritedOptions(brandingVars?: Record<string, string>): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n let currentlyAppliedBranding: BrandingOptionsJson;\n let fallBackBranding: BrandingOptionsJson = {};\n try {\n currentlyAppliedBranding = await this.getBrandingOptionsForVersion();\n fallBackBranding = cloneDeep(currentlyAppliedBranding);\n } catch (e) {\n console.warn('Failed to get currently applied branding, proceeding with empty branding.', e);\n }\n\n if (brandingVars) {\n currentlyAppliedBranding = currentlyAppliedBranding || {};\n const brandingCssVars = currentlyAppliedBranding.brandingCssVars || {};\n Object.assign(brandingCssVars, brandingVars);\n currentlyAppliedBranding.brandingCssVars = brandingCssVars;\n }\n\n if (currentlyAppliedBranding) {\n try {\n const { oldAssets, newAssets } = await this.staticAssets.cloneAssetsIntoTenant('branding');\n currentlyAppliedBranding = this.replaceBrandingAssetsInBrandingOptions(\n currentlyAppliedBranding,\n oldAssets,\n newAssets\n );\n } catch (e) {\n console.warn('Failed to relocate branding assets into current tenant.', e);\n }\n }\n\n const publicOptionsApp = await this.createPublicOptionsApp();\n\n const defaultBrandingName = `default`;\n const result = await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(defaultBrandingName),\n currentlyAppliedBranding || {},\n ['latest', defaultBrandingName],\n publicOptionsApp\n );\n\n const fallbackBrandingName = `fallback`;\n await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(fallbackBrandingName),\n fallBackBranding,\n [fallbackBrandingName],\n publicOptionsApp\n );\n\n return result;\n }\n\n /**\n * Replaces the assets in the branding options with the new assets.\n * Goes through the provided `oldAssets` and replaces their occurrences in the branding with the corresponding `newAssets` entry sharing the same fileName.\n * Returns the updated branding options.\n */\n replaceBrandingAssetsInBrandingOptions(\n branding: BrandingOptionsJson,\n oldAssets: StaticAsset[],\n newAssets: StaticAsset[]\n ): BrandingOptionsJson {\n let brandingAsJSONString = JSON.stringify(branding);\n for (const oldAsset of oldAssets) {\n const newLocatedAsset = newAssets.find(tmp => tmp.fileName === oldAsset.fileName);\n if (!newLocatedAsset) {\n continue;\n }\n // if the path is the same, we don't need to replace it.\n if (oldAsset.path === newLocatedAsset.path) {\n continue;\n }\n\n // TODO: use proper replaceAll once it's available with es2021\n brandingAsJSONString = brandingAsJSONString.split(oldAsset.path).join(newLocatedAsset.path);\n }\n return JSON.parse(brandingAsJSONString);\n }\n\n private async getPublicOptionsApp() {\n try {\n const { data: manifest } = await this.applicationService.getManifestOfContextPath(\n this.manifestValues.contextPath\n );\n const { data: app } = await this.applicationService.detail(manifest.id);\n if (app.owner.tenant.id !== this.appState.currentTenant.value?.name) {\n return undefined;\n }\n return app;\n } catch (e) {\n // e.g. reached when no app with the given context path exists\n return undefined;\n }\n }\n\n private async createPublicOptionsApp() {\n const { data: app } = await this.applicationService.create(this.manifestValues);\n return app;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.BrandingVersionService","i5.BrandingTrackingService"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-branding-shared-data.mjs","sources":["../../branding/shared/data/apply-branding-locally.service.ts","../../branding/shared/data/branding-shades.service.ts","../../branding/shared/data/branding-version.service.ts","../../branding/shared/data/branding.type.ts","../../branding/shared/data/branding-tracking.service.ts","../../branding/shared/data/store-branding.service.ts","../../branding/shared/data/c8y-ngx-components-branding-shared-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { BrandingOptionsJson } from './branding.type';\nimport { applyBrandingOptions, getOptionsToMerge, mergeOptions } from '@c8y/bootstrap';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingLocallyService {\n private keysToRemove: Array<string> | null;\n\n constructor(private options: OptionsService) {}\n\n applyBranding(optionsJson?: BrandingOptionsJson) {\n if (!this.keysToRemove) {\n this.keysToRemove = Object.keys(this.combineOptions());\n }\n const combinedOptions = this.combineOptions(optionsJson);\n const newKeysToRemove = Object.keys(combinedOptions);\n\n // avoid to remove keys that would actually be set again afterwards\n const keysToActuallyRemove = this.keysToRemove.filter(key => !newKeysToRemove.includes(key));\n this.removeKeysFromOptions(keysToActuallyRemove);\n\n this.keysToRemove = newKeysToRemove;\n\n applyBrandingOptions(combinedOptions);\n this.applyApplicationOptions(combinedOptions);\n }\n\n resetBranding() {\n this.applyBranding();\n }\n\n private applyApplicationOptions(optionsJson: any) {\n Object.entries(optionsJson).forEach(([key, value]) => {\n this.options.set(key, value);\n });\n }\n\n private removeKeysFromOptions(keys: string[]) {\n for (const key of keys) {\n this.options.delete(key);\n }\n }\n\n private combineOptions(optionsJson?: BrandingOptionsJson) {\n const optionsToMerge = getOptionsToMerge();\n if (!optionsToMerge) {\n // should never happen as the options should be set quite early in bootstrapping process.\n throw Error(`Failed to retrieve options for merging`);\n }\n if (optionsJson) {\n optionsToMerge.dynamicOptions = optionsJson;\n }\n return mergeOptions(optionsToMerge);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { default as chroma } from 'chroma-js';\n\n@Injectable({ providedIn: 'root' })\nexport class BrandingShadesService {\n getShadeColorBrandingCssVars(newBrandPrimary: string) {\n const shades = this.generateShades(newBrandPrimary);\n return this.shadesToObject(shades);\n }\n\n isValidShadeColor(color: string): boolean {\n try {\n return chroma.valid(color);\n } catch {\n return false;\n }\n }\n\n hasCustomShadesSet(\n previousBrandPrimary: string,\n otherVars: Record<string, string | number>\n ): boolean {\n if (previousBrandPrimary && otherVars) {\n const oldShades = this.generateShades(previousBrandPrimary);\n const oldShadesObj = this.shadesToObject(oldShades);\n for (const shadeKey of Object.keys(oldShadesObj)) {\n const fromVars = otherVars[shadeKey];\n const generated = oldShadesObj[shadeKey];\n if (fromVars === null || fromVars === undefined) {\n continue;\n }\n if (fromVars !== generated) {\n return true;\n }\n }\n }\n return false;\n }\n\n private shadesToObject(shades: string[]) {\n const brandingCssVars: Record<`c8y-brand-${number}0`, string> = {};\n let i = 1;\n for (const shade of shades) {\n const key = `c8y-brand-${i}0` as const;\n brandingCssVars[key] = shade;\n i++;\n }\n\n return brandingCssVars;\n }\n\n private generateShades(inputColor: string) {\n const referenceShades = [\n '#134158',\n '#1C5569',\n '#058192', // primary color\n '#22A6AA',\n '#3CC1B7',\n '#8ADBD5',\n '#C5EDEA',\n '#EBF9F8'\n ];\n // Calculate the luminance of the reference shades\n const referenceLuminances = referenceShades.map(color => chroma(color).luminance());\n const inputColorAsHex = chroma(inputColor);\n // Generate shades of the input color with the same luminance as the reference shades\n const generatedShades = referenceLuminances.map(luminance =>\n chroma(inputColor).luminance(luminance).hex('rgb')\n );\n // Calculate the distance between the input color and each color in the generatedShades array\n const distances = generatedShades.map(color => chroma.deltaE(inputColorAsHex, color));\n // Find the index of the color with the smallest distance\n const index = distances.indexOf(Math.min(...distances));\n generatedShades[index] = inputColorAsHex.hex('rgb');\n return generatedShades;\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for creating and manipulating branding versions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingVersionService {\n static readonly nameAndIterationSeparator = '-';\n\n /**\n * Creates the initial branding version for a given name.\n * @param name The name of the branding.\n * @returns The initial branding version.\n */\n createInitialBrandingVersion<T extends string>(name: T) {\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${1}` as const;\n }\n\n /**\n * Splits a branding version into its name and iteration.\n * @param version The branding version to split.\n * @returns The name and iteration of the branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n splitBrandingIntoNameAndIteration(version: string): { name: string; iteration: number } {\n const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);\n if (splitted.length < 2) {\n throw Error(\n `A valid version should at least conatin one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`\n );\n }\n\n const lastValueOfSplittedArray = splitted[splitted.length - 1];\n if (lastValueOfSplittedArray === '' || !/[0-9]+/.test(lastValueOfSplittedArray)) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${lastValueOfSplittedArray}' from '${version}'`\n );\n }\n\n const iteration = Number.parseInt(lastValueOfSplittedArray);\n if (Number.isNaN(iteration) && iteration <= 0) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`\n );\n }\n\n const name = splitted.slice(0, -1).join(BrandingVersionService.nameAndIterationSeparator);\n if (!name) {\n throw Error(\n `The first part of the version should not be empty, this is the case for '${name}' from '${version}'`\n );\n }\n\n return { iteration, name };\n }\n\n /**\n * Bumps the iteration of a branding version.\n * @param version The branding version to bump.\n * @returns The bumped branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n bumpBrandingIteration(version: string) {\n const { name, iteration } = this.splitBrandingIntoNameAndIteration(version);\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${iteration + 1}` as const;\n }\n}\n","import type { FormBuilder, FormControl } from '@angular/forms';\nimport { Alert, colorValidator, ApplicationOptions } from '@c8y/ngx-components';\n\nexport type BrandingFormValue = ReturnType<typeof createGenericBrandingForm>['value'];\nexport type BrandingFormKeys = keyof BrandingFormValue;\nexport type BrandingFormTopLevelKeys = (typeof brandingFormGroupTopLevelEntries)[number];\nexport type BrandingFormTopLevelKeysToUnpack =\n (typeof brandingFormGroupTopLevelEntriesToUnpack)[number];\n\nexport type TopLevelFormKeysNotToUnpack = Exclude<\n BrandingFormTopLevelKeys,\n BrandingFormTopLevelKeysToUnpack\n>;\nexport type UnpackedTopLevelFormKeys = Pick<\n BrandingFormValue,\n BrandingFormTopLevelKeysToUnpack\n>[keyof Pick<BrandingFormValue, BrandingFormTopLevelKeysToUnpack>];\n\nexport type NotUnpackedTopLevelFormKeys = Pick<BrandingFormValue, TopLevelFormKeysNotToUnpack>;\nexport type TopLevelForm = NotUnpackedTopLevelFormKeys & UnpackedTopLevelFormKeys;\nexport type TopLevelValues = TopLevelForm;\n\nexport type BrandingCSSVarsForm = Omit<BrandingFormValue, BrandingFormTopLevelKeys>;\n\nexport type LightBrandingCSSVarsValues = ReturnType<typeof createBrandingForm>['value'] &\n BrandingCSSVarsForm[keyof BrandingCSSVarsForm];\n\ntype addPrefixToObject<T, P extends string> = {\n [K in keyof T as K extends string ? `${P}${K}` : never]: T[K];\n};\n\nexport type DarkBrandingCSSVarsValues = addPrefixToObject<LightBrandingCSSVarsValues, 'dark-'>;\n\nexport type BrandingCSSVarsValues = LightBrandingCSSVarsValues & DarkBrandingCSSVarsValues;\n\nexport type BrandingOptionsJson = TopLevelValues & {\n brandingCssVars?: BrandingCSSVarsValues & { [key: string]: any };\n} & Omit<Partial<ApplicationOptions>, 'brandingCssVars'> & { [key: string]: any };\n\nexport const brandingFormGroupTopLevelEntries = [\n 'cookieBanner',\n 'genericApplicationOptions',\n 'darkThemeAvailable',\n 'messageBanner'\n] as const satisfies ReadonlyArray<BrandingFormKeys>;\nexport const brandingFormGroupTopLevelEntriesToUnpack = [\n 'genericApplicationOptions'\n] as const satisfies ReadonlyArray<(typeof brandingFormGroupTopLevelEntries)[number]>;\n\nexport const numberBrandingVars = ['brand-logo-img-height', 'btn-border-radius-base'] as const;\nexport const colorBrandingVars = [\n 'brand-dark',\n 'brand-light',\n 'brand-primary',\n 'c8y-brand-10',\n 'c8y-brand-20',\n 'c8y-brand-30',\n 'c8y-brand-40',\n 'c8y-brand-50',\n 'c8y-brand-60',\n 'c8y-brand-70',\n 'c8y-brand-80',\n 'palette-status-info',\n 'palette-status-warning',\n 'palette-status-success',\n 'palette-status-danger',\n 'palette-status-info-light',\n 'palette-status-warning-light',\n 'palette-status-success-light',\n 'palette-status-danger-light',\n 'palette-status-info-dark',\n 'palette-status-warning-dark',\n 'palette-status-success-dark',\n 'palette-status-danger-dark',\n 'body-background-color',\n 'text-color',\n 'text-muted',\n 'link-color',\n 'link-hover-color',\n 'action-bar-background-default',\n 'action-bar-color-actions-hover',\n 'action-bar-color-actions',\n 'action-bar-color-default',\n 'action-bar-icon-color',\n 'header-color',\n 'header-text-color',\n 'header-hover-color',\n 'navigator-bg-color',\n 'navigator-active-bg',\n 'navigator-border-active',\n 'navigator-header-bg',\n 'navigator-title-color',\n 'navigator-separator-color',\n 'navigator-text-color',\n 'navigator-color-active',\n 'right-drawer-background-default',\n 'right-drawer-text-color-default',\n 'right-drawer-separator-color',\n 'right-drawer-link-color',\n 'right-drawer-link-color-hover',\n 'right-drawer-text-color-muted'\n] as const;\nexport const stringBrandingVars = [\n 'brand-logo-img',\n 'navigator-platform-logo',\n 'login-platform-animation-img'\n] as const;\n\nexport const stringOrNumberBrandingVars = ['navigator-platform-logo-height'] as const;\n\nexport const allBrandingCSSVars = [\n ...numberBrandingVars,\n ...stringBrandingVars,\n ...colorBrandingVars\n] as const;\n\nexport function createGenericBrandingForm(formBuilder: FormBuilder) {\n const form = formBuilder.group({\n darkThemeAvailable: formBuilder.control<boolean>(false),\n cookieBanner: formBuilder.group({\n cookieBannerTitle: formBuilder.control<string>(undefined),\n cookieBannerText: formBuilder.control<string>(undefined),\n cookieBannerDisabled: formBuilder.control(false),\n policyUrl: formBuilder.control<string>(undefined),\n policyVersion: formBuilder.control<string>(undefined)\n }),\n messageBanner: formBuilder.group({\n messageBannerEnabled: formBuilder.control(false),\n messageBannerContent: formBuilder.control<string>(''),\n messageBannerType: formBuilder.control<Alert['type']>('info'),\n messageBannerId: formBuilder.control<string>('')\n }),\n baseTypography: formBuilder.group({\n 'font-url': formBuilder.control<string>(undefined),\n 'font-family-base': formBuilder.control<string>(undefined)\n }),\n headingsAndNavigatorTypography: formBuilder.group({\n 'font-family-headings': formBuilder.control<string>(undefined),\n 'navigator-font-family': formBuilder.control<string>('var(--font-family-base)')\n }),\n genericApplicationOptions: formBuilder.group({\n globalTitle: formBuilder.control<string>(undefined),\n faviconUrl: formBuilder.control<string>(undefined)\n })\n });\n return form;\n}\n\nexport function createBrandingForm(formBuilder: FormBuilder) {\n const colorControls = colorBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined, { asyncValidators: [colorValidator()] });\n return acc;\n },\n {} as { [key in (typeof colorBrandingVars)[number]]: FormControl<string> }\n );\n const stringControls = stringBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined);\n return acc;\n },\n {} as { [key in (typeof stringBrandingVars)[number]]: FormControl<string> }\n );\n const numberControls = numberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as { [key in (typeof numberBrandingVars)[number]]: FormControl<number> }\n );\n const stringOrNumberControls = stringOrNumberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as {\n [key in (typeof stringOrNumberBrandingVars)[number]]: FormControl<string | number>;\n }\n );\n const form = formBuilder.group({\n ...colorControls,\n ...stringControls,\n ...numberControls,\n ...stringOrNumberControls\n });\n\n return form;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { GainsightService, PxEventData } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingTrackingService {\n readonly prefix = 'brandingManager';\n constructor(@Optional() private gainsight: GainsightService) {}\n\n getStartedUsingBranding() {\n this.triggerEvent('getStartedUsingBranding');\n }\n\n deleteAllBrandings() {\n this.triggerEvent('deleteAllBrandings');\n }\n\n exportBranding() {\n this.triggerEvent('exportBranding');\n }\n\n addNewVersion() {\n this.triggerEvent('addNewVersion');\n }\n\n duplicateVersion() {\n this.triggerEvent('duplicateVersion');\n }\n\n applyToApps(apps: string[]) {\n this.triggerEvent('applyToApps', { apps });\n }\n\n importBranding() {\n this.triggerEvent('importBranding');\n }\n\n deleteBrandingVariant() {\n this.triggerEvent('deleteBrandingVariant');\n }\n\n openPreviewForBranding() {\n this.triggerEvent('openPreviewForBranding');\n }\n\n private triggerEvent(action: string, props?: PxEventData) {\n if (!this.gainsight) {\n return;\n }\n\n const finalProps = {\n ...props,\n action\n };\n\n return this.gainsight.triggerEvent(this.prefix, finalProps);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationType,\n FetchClient,\n IApplication,\n IApplicationBinary,\n IManagedObject,\n InventoryBinaryService,\n InventoryService\n} from '@c8y/client';\nimport { ApplicationService } from '@c8y/client';\nimport { AppStateService, ThemeSwitcherService, ZipService } from '@c8y/ngx-components';\nimport { defer, BehaviorSubject, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BrandingVersionService } from './branding-version.service';\nimport { BrandingOptionsJson, allBrandingCSSVars, numberBrandingVars } from './branding.type';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { BrandingTrackingService } from './branding-tracking.service';\n\nexport interface BrandVersion {\n name: string;\n id: string;\n revision: number;\n version: string;\n tags: string[];\n owner?: string;\n lastUpdated?: string;\n publicOptionsApp?: IApplication;\n}\n\nexport interface BrandingFileDetails {\n fileName: string;\n blob: Blob;\n jsonContent?: any;\n}\n\nexport interface BrandingFileDetailsLegacy {\n path: string;\n value: string;\n blob?: Blob;\n fileName: string;\n urlWrapped: boolean;\n}\n\n/**\n * Service to load and store the branding of the tenant.\n */\n@Injectable({ providedIn: 'root' })\nexport class StoreBrandingService {\n readonly fileNames = {\n options: 'options.json',\n manifest: 'cumulocity.json',\n exportZipName: 'public-options.zip'\n } as const;\n readonly manifestValues = {\n name: 'public-options',\n contextPath: 'public-options',\n key: 'public-options-key',\n description: 'Application containing static assets used by e.g. branding.',\n noAppSwitcher: true,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.SHARED\n } as const satisfies IApplication;\n refreshTriggerBrandingVariants = new BehaviorSubject<void>(null);\n constructor(\n private applicationService: ApplicationService,\n private inventory: InventoryService,\n private binary: InventoryBinaryService,\n private zip: ZipService,\n private fetch: FetchClient,\n private brandingVersionService: BrandingVersionService,\n private appState: AppStateService,\n private staticAssets: StaticAssetsService,\n private themeSwitcher: ThemeSwitcherService,\n private brandingTracking: BrandingTrackingService\n ) {}\n\n /**\n * Sets the `latest` tag on the provided branding version. Making it the global active branding.\n */\n async markAsActive(brandingVersion: BrandVersion, app?: IApplication): Promise<void> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n const tags = brandingVersion.tags || [];\n const version = brandingVersion.version;\n await this.applicationService.setPackageVersionTag(publicOptions, version, [...tags, 'latest']);\n }\n\n /**\n * Opens a new tab with to preview the branding. The branding must have been saved beforehand.\n * @param brandingName the name of the branding to be previewed\n */\n openPreviewForBranding(brandingName: string) {\n this.brandingTracking.openPreviewForBranding();\n window.open(\n `/apps/${\n this.appState.currentApplication.value?.contextPath || 'cockpit'\n }/index.html?brandingPreview=true&dynamicOptionsUrl=/apps/public/public-options@${brandingName}/options.json`,\n '_blank',\n 'noopener,noreferrer'\n );\n }\n\n /**\n * Returns the brandings of the tenant.\n * If no public options app is found, publicOptions will be undefined and variants an empty array.\n * For old brandings (created without versioning) a default version is returned.\n */\n async loadBrandingVariants(\n app?: IApplication\n ): Promise<{ publicOptions: IApplication | undefined; variants: BrandVersion[] }> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n if (!publicOptions) {\n return { publicOptions: undefined, variants: [] };\n }\n const { data: versions } = await this.applicationService.listVersions(publicOptions);\n let mappedVersions: BrandVersion[] =\n versions\n ?.map(tmp => {\n try {\n const { name, iteration } =\n this.brandingVersionService.splitBrandingIntoNameAndIteration(tmp.version);\n return {\n revision: iteration,\n name: name,\n id: tmp.binaryId,\n version: tmp.version,\n tags: tmp.tags || [],\n publicOptionsApp: publicOptions\n };\n } catch (e) {\n console.warn('Failed to parse version', tmp, e);\n return undefined;\n }\n })\n ?.filter(Boolean) || [];\n if (!versions && publicOptions.activeVersionId) {\n mappedVersions = [\n {\n name: 'default',\n id: publicOptions.activeVersionId,\n version: 'default-1',\n revision: 1,\n tags: ['latest', 'default'],\n publicOptionsApp: publicOptions\n }\n ];\n }\n\n const variants = await this.getMetadataOfBrandingBinaries(mappedVersions);\n return { publicOptions, variants };\n }\n\n /**\n * As the branding is not immediately available after creation, this method will wait for the branding to be present.\n * @param version The version of the branding to be retrieved.\n */\n async waitForBrandingToBePresent(version: string): Promise<void> {\n const numberOfAttempts = 120;\n const sleepDurationInSeconds = 1;\n for (let i = 0; i < numberOfAttempts; i++) {\n try {\n // do not sleep before the first attempt\n if (i !== 0) {\n await new Promise(resolve => setTimeout(resolve, sleepDurationInSeconds * 1_000));\n }\n await this.getBrandingOptionsForVersion(version);\n console.info(`Branding \"${version}\" available now.`);\n return;\n } catch (e) {\n console.warn(\n `Branding \"${version}\" not yet present, retrying in ${sleepDurationInSeconds} seconds...`,\n e\n );\n }\n }\n throw new Error(\n `Branding \"${version}\" not available after ${numberOfAttempts * sleepDurationInSeconds} seconds, giving up.`\n );\n }\n\n /**\n * Will create a the initial branding based on the currently applied CSS variables.\n */\n async getStartedUsingBranding(): Promise<void> {\n const allVariables: Record<string, string> = {};\n const themeToRetrieveVars = ['light', 'dark'] as const;\n const unretrievableVars = new Array<string>();\n for (const theme of themeToRetrieveVars) {\n this.themeSwitcher.temporaryChangeTheme(theme);\n const styles = getComputedStyle(document.body);\n const variablesToSkip = [\n 'navigator-platform-logo',\n 'brand-logo-img'\n ] satisfies (typeof allBrandingCSSVars)[number][];\n const values = allBrandingCSSVars\n .filter(cssVar => !variablesToSkip.includes(cssVar as any))\n .reduce((prev, key) => {\n const directValue = styles.getPropertyValue(`--${key}`);\n const c8yPrefixedValue = styles.getPropertyValue(`--c8y-${key}`);\n const newKey = theme === 'light' ? key : `dark-${key}`;\n if (!directValue && !c8yPrefixedValue) {\n unretrievableVars.push(newKey);\n return prev;\n }\n let value: string | number = directValue || c8yPrefixedValue;\n if (numberBrandingVars.includes(key as any)) {\n try {\n value = Number.parseFloat(value.replace(/[A-Za-z]/g, '').trim());\n } catch (e) {\n console.warn(\n `Failed to parse number for \"${key}\" value that failed to parse: \"${value}\"`,\n e\n );\n return prev;\n }\n }\n return Object.assign(prev, { [newKey]: value });\n }, {});\n Object.assign(allVariables, values);\n }\n this.themeSwitcher.resetTemporaryTheme();\n\n try {\n await this.createPublicOptionsAppFromInheritedOptions(allVariables);\n } catch (e) {\n console.warn(e);\n }\n }\n\n getZipForBinary(\n binaryId: string,\n fileName: string = this.fileNames.exportZipName\n ): Observable<File> {\n return defer(() => this.binary.download(binaryId)).pipe(\n switchMap(response => response.blob()),\n map(blob => new File([blob], fileName))\n );\n }\n\n /**\n * Deletes the public options app and therefore all brandings.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteAllBrandings(publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.delete(publicOptions);\n }\n\n /**\n * Enhances the provided branding versions with metadata from the linked binaries.\n * It will add the owner and lastUpdated fields to the versions.\n * The provided array is altered.\n */\n async getMetadataOfBrandingBinaries(versions: BrandVersion[]): Promise<BrandVersion[]> {\n const binaryIds = uniq(versions.map(tmp => tmp.id));\n if (!binaryIds.length) {\n return versions;\n }\n const { data: metadata } = await this.inventory.list({\n ids: binaryIds.join(','),\n pageSize: 2000\n });\n return versions.map(version => {\n const metadataForVersion =\n metadata.find(tmp => tmp.id === version.id) || ({} as IManagedObject);\n const { owner, lastUpdated } = metadataForVersion;\n return Object.assign(version, { owner, lastUpdated });\n });\n }\n\n /**\n * Saves the provided branding as a new version for the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async saveBranding(\n blob: Blob | File,\n version: string,\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const file = blob instanceof File ? blob : new File([blob], `public-options-${version}.zip`);\n const publicOptions = publicOptionsApp || (await this.getPublicOptionsApp());\n\n const { data: binary } = await this.applicationService\n .binary(publicOptions)\n .uploadApplicationVersion(file, version, tags);\n if (!publicOptions.activeVersionId || tags.includes('latest')) {\n await this.applicationService.update({\n id: publicOptions.id,\n activeVersionId: `${binary.binaryId}`\n });\n }\n this.refreshTriggerBrandingVariants.next();\n return { version, binary, tags };\n }\n\n /**\n * Removes a branding version from the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteBrandingVersion(version: string, publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.deleteVersionPackage(publicOptions, { version });\n this.refreshTriggerBrandingVariants.next();\n }\n\n /**\n * Returns the blob of a zip file containing the provided branding options (options.json) and the manifest (cumulocity.json).\n */\n async getBrandingZip(content: Record<string, any> = {}): Promise<Blob> {\n content.lastUpdated = new Date().toISOString();\n const contentAsString = JSON.stringify(content);\n const zip = await this.zip.createZip([\n { fileName: this.fileNames.options, blob: new Blob([contentAsString]) },\n { fileName: this.fileNames.manifest, blob: new Blob([JSON.stringify(this.manifestValues)]) }\n ]);\n return zip;\n }\n\n /**\n * Adds a new branding version to the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async addBranding(\n version: string,\n content: BrandingOptionsJson = {},\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const zip = await this.getBrandingZip(content);\n\n return await this.saveBranding(zip, version, tags, publicOptionsApp);\n }\n\n /**\n * Returns the branding options for the provided version.\n * If no branding was found (e.g. status 404), an error is thrown.\n */\n async getBrandingOptionsForVersion(version?: string): Promise<BrandingOptionsJson> {\n const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}?nocache=${new Date().getTime()}`;\n const response = await this.fetch.fetch(url);\n if (response.status !== 200) {\n throw Error(`Unexpected status code: ${response.status}`);\n }\n\n const content = await response.json();\n return content as BrandingOptionsJson;\n }\n\n /**\n * Saves a new iteration of an already existing branding.\n */\n async saveExistingBranding(\n branding: Record<string, any>,\n currentVersion: string,\n tagsOfCurrentVersion: string[] = [],\n newVersion?: string\n ): Promise<string> {\n const publicOptions = await this.getPublicOptionsApp();\n const versionToBeSet = newVersion\n ? this.brandingVersionService.createInitialBrandingVersion(newVersion)\n : this.brandingVersionService.bumpBrandingIteration(currentVersion);\n\n const finalTags = tagsOfCurrentVersion;\n // only apply latest tag directly\n // there seems to be some special handling for the latest tag in the backend, that allows to directly move it while uploading the new version.\n // for all other tags this results in a 409 conflict. We therefore need to first delete the old version, before setting the other tags on the new version.\n if (!newVersion) {\n tagsOfCurrentVersion = tagsOfCurrentVersion.filter(tag => tag === 'latest');\n }\n await this.addBranding(versionToBeSet, branding, tagsOfCurrentVersion, publicOptions);\n if (!newVersion) {\n try {\n await this.deleteBrandingVersion(currentVersion, publicOptions);\n } catch (e) {\n if (e.res.status !== 404) {\n throw e;\n }\n }\n await this.applicationService.setPackageVersionTag(publicOptions, versionToBeSet, finalTags);\n }\n\n return versionToBeSet;\n }\n\n /**\n * Combines current branding options with the provided branding variables and creates a new public options app.\n * Any assets in the branding will be cloned.\n */\n async createPublicOptionsAppFromInheritedOptions(brandingVars?: Record<string, string>): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n let currentlyAppliedBranding: BrandingOptionsJson;\n let fallBackBranding: BrandingOptionsJson = {};\n try {\n currentlyAppliedBranding = await this.getBrandingOptionsForVersion();\n fallBackBranding = cloneDeep(currentlyAppliedBranding);\n } catch (e) {\n console.warn('Failed to get currently applied branding, proceeding with empty branding.', e);\n }\n\n if (brandingVars) {\n currentlyAppliedBranding = currentlyAppliedBranding || {};\n const brandingCssVars = currentlyAppliedBranding.brandingCssVars || {};\n Object.assign(brandingCssVars, brandingVars);\n currentlyAppliedBranding.brandingCssVars = brandingCssVars;\n }\n\n if (currentlyAppliedBranding) {\n try {\n const { oldAssets, newAssets } = await this.staticAssets.cloneAssetsIntoTenant('branding');\n currentlyAppliedBranding = this.replaceBrandingAssetsInBrandingOptions(\n currentlyAppliedBranding,\n oldAssets,\n newAssets\n );\n } catch (e) {\n console.warn('Failed to relocate branding assets into current tenant.', e);\n }\n }\n\n const publicOptionsApp = await this.createPublicOptionsApp();\n\n const defaultBrandingName = `default`;\n const result = await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(defaultBrandingName),\n currentlyAppliedBranding || {},\n ['latest', defaultBrandingName],\n publicOptionsApp\n );\n\n const fallbackBrandingName = `fallback`;\n await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(fallbackBrandingName),\n fallBackBranding,\n [fallbackBrandingName],\n publicOptionsApp\n );\n\n return result;\n }\n\n /**\n * Replaces the assets in the branding options with the new assets.\n * Goes through the provided `oldAssets` and replaces their occurrences in the branding with the corresponding `newAssets` entry sharing the same fileName.\n * Returns the updated branding options.\n */\n replaceBrandingAssetsInBrandingOptions(\n branding: BrandingOptionsJson,\n oldAssets: StaticAsset[],\n newAssets: StaticAsset[]\n ): BrandingOptionsJson {\n let brandingAsJSONString = JSON.stringify(branding);\n for (const oldAsset of oldAssets) {\n const newLocatedAsset = newAssets.find(tmp => tmp.fileName === oldAsset.fileName);\n if (!newLocatedAsset) {\n continue;\n }\n // if the path is the same, we don't need to replace it.\n if (oldAsset.path === newLocatedAsset.path) {\n continue;\n }\n\n // TODO: use proper replaceAll once it's available with es2021\n brandingAsJSONString = brandingAsJSONString.split(oldAsset.path).join(newLocatedAsset.path);\n }\n return JSON.parse(brandingAsJSONString);\n }\n\n private async getPublicOptionsApp() {\n try {\n const { data: manifest } = await this.applicationService.getManifestOfContextPath(\n this.manifestValues.contextPath\n );\n const { data: app } = await this.applicationService.detail(manifest.id);\n if (app.owner.tenant.id !== this.appState.currentTenant.value?.name) {\n return undefined;\n }\n return app;\n } catch (e) {\n // e.g. reached when no app with the given context path exists\n return undefined;\n }\n }\n\n private async createPublicOptionsApp() {\n const { data: app } = await this.applicationService.create(this.manifestValues);\n return app;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.BrandingVersionService","i5.BrandingTrackingService"],"mappings":"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"}
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, Input, Component, ViewChild } from '@angular/core';
3
3
  import * as i1$2 from '@c8y/ngx-components/branding/shared/data';
4
4
  import { createGenericBrandingForm, brandingFormGroupTopLevelEntries, brandingFormGroupTopLevelEntriesToUnpack, createBrandingForm } from '@c8y/ngx-components/branding/shared/data';
5
- import { merge, of, firstValueFrom, BehaviorSubject, defer, interval } from 'rxjs';
6
- import { map, startWith, switchMap, shareReplay, distinctUntilChanged, filter, take, pairwise, delay } from 'rxjs/operators';
5
+ import { merge, of, firstValueFrom, BehaviorSubject, combineLatest, defer, interval } from 'rxjs';
6
+ import { map, startWith, switchMap, shareReplay, debounceTime, distinctUntilChanged, filter, take, pairwise, delay } from 'rxjs/operators';
7
7
  import * as i2$1 from '@angular/router';
8
8
  import { RouterLink, RouterOutlet } from '@angular/router';
9
9
  import * as i3 from '@c8y/ngx-components';
@@ -657,6 +657,7 @@ class BrandingFormComponent {
657
657
  this.externalValue = {};
658
658
  this.formGroup = this.initForm();
659
659
  this.formGroupValueChanges$ = this.formGroup.valueChanges.pipe(takeUntilDestroyed());
660
+ this.setupMessageBannerIdAutoGeneration();
660
661
  }
661
662
  writeValue(obj) {
662
663
  try {
@@ -699,6 +700,7 @@ class BrandingFormComponent {
699
700
  return Object.assign(prev, { [curr]: branding.brandingCssVars || {} });
700
701
  }, toBePatched);
701
702
  this.formGroup.patchValue(toBePatched);
703
+ this.ensureMessageBannerIdExists();
702
704
  }
703
705
  convertFormToState(value) {
704
706
  const topLevel = brandingFormGroupTopLevelEntries.reduceRight((prev, curr) => {
@@ -721,7 +723,29 @@ class BrandingFormComponent {
721
723
  return JSON.stringify(externalValue, null, 2);
722
724
  }
723
725
  previewBanner() {
724
- this.messageBannerService.showBanner();
726
+ this.messageBannerService.showBanner(true);
727
+ }
728
+ setupMessageBannerIdAutoGeneration() {
729
+ const messageBannerGroup = this.formGroup.controls.messageBanner;
730
+ combineLatest([
731
+ messageBannerGroup.controls.messageBannerContent.valueChanges,
732
+ messageBannerGroup.controls.messageBannerType.valueChanges,
733
+ messageBannerGroup.controls.messageBannerEnabled.valueChanges
734
+ ])
735
+ .pipe(debounceTime(300), distinctUntilChanged((prev, curr) => {
736
+ return JSON.stringify(prev) === JSON.stringify(curr);
737
+ }), takeUntilDestroyed())
738
+ .subscribe(() => {
739
+ messageBannerGroup.controls.messageBannerId.setValue(crypto.randomUUID());
740
+ });
741
+ }
742
+ async ensureMessageBannerIdExists() {
743
+ const messageBannerGroup = this.formGroup.controls.messageBanner;
744
+ const content = messageBannerGroup.controls.messageBannerContent.value;
745
+ const currentId = messageBannerGroup.controls.messageBannerId.value;
746
+ if (content && !currentId) {
747
+ messageBannerGroup.controls.messageBannerId.setValue(crypto.randomUUID());
748
+ }
725
749
  }
726
750
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BrandingFormComponent, deps: [{ token: i2.FormBuilder }, { token: i3.MessageBannerService }], target: i0.ɵɵFactoryTarget.Component }); }
727
751
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: BrandingFormComponent, isStandalone: true, selector: "c8y-branding-form", host: { classAttribute: "d-contents" }, ngImport: i0, template: "<c8y-help [src]=\"'/docs/enterprise-tenant/customization/#generic-tab'\"></c8y-help>\n\n<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Title & Favicon-->\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4 class=\"text-normal text-right text-left-xs m-b-16\">\n {{ 'Title & favicon' | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div\n class=\"row p-t-16 p-b-16\"\n [formGroupName]=\"'genericApplicationOptions'\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"globalTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"globalTitle\"\n name=\"globalTitle\"\n type=\"text\"\n formControlName=\"globalTitle\"\n />\n <c8y-messages\n [helpMessage]=\"'Title to display in the browser tab' | translate\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Favicon</label>\n <c8y-static-assets-file-picker\n name=\"faviconUrl\"\n [supportedFileExtensions]=\"['ico']\"\n [isCSSURL]=\"false\"\n formControlName=\"faviconUrl\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.ico' | translate\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-block separator-top\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Dark theme\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <c8y-form-group class=\"m-b-32 p-t-8 m-t-4\">\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"darkThemeAvailable\"\n type=\"checkbox\"\n formControlName=\"darkThemeAvailable\"\n />\n <span></span>\n <span translate>Enable dark theme support</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <!-- Typography -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Typography\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'baseTypography'\"\n >\n <legend translate>Base typography</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"font-url\"\n translate\n >\n Fonts URL\n </label>\n <input\n class=\"form-control\"\n id=\"font-url\"\n placeholder=\"{{\n 'e.g. {{ example }}' | translate : { example: 'https://fonts.googleapis.com/css?family=Roboto:400,500,700' }\n }}\"\n type=\"text\"\n formControlName=\"font-url\"\n />\n <c8y-messages [helpMessage]=\"'The Google fonts URL' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-base\"\n for=\"font-family-base\"\n translate\n >\n Base font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-base\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n name=\"font-family-base\"\n type=\"text\"\n formControlName=\"font-family-base\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'headingsAndNavigatorTypography'\"\n >\n <legend>{{ 'Headings & navigator' | translate }}</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"font-family-headings\"\n for=\"font-family-headings\"\n translate\n >\n Headings font stack\n </label>\n <input\n class=\"form-control\"\n id=\"font-family-headings\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate : {example: '&quot;Roboto&quot;, Arial, sans-serif'} }}\"\n type=\"text\"\n formControlName=\"font-family-headings\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Leave empty to use the same font as the base font stack' | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-font-family\"\n translate\n >\n Navigator font stack\n </label>\n <div class=\"form-control-static\">\n <label class=\"c8y-radio radio-inline\">\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-base)'\"\n />\n <span></span>\n <span translate>Match base font stack</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"Radio Two\"\n >\n <input\n name=\"navigator-font-family\"\n type=\"radio\"\n formControlName=\"navigator-font-family\"\n [value]=\"'var(--font-family-headings)'\"\n />\n <span></span>\n <span translate>Match headings font stack</span>\n </label>\n </div>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Cookie banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Cookie banner\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'cookieBanner'\"\n >\n <legend translate>Cookie banner</legend>\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"cookieBannerEnabled\"\n type=\"checkbox\"\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"!formGroup.value.cookieBanner.cookieBannerDisabled\"\n (ngModelChange)=\"cockieBannerChange($event)\"\n />\n <span></span>\n <span translate>Enable cookie banner</span>\n </label>\n\n <div\n class=\"collapse\"\n [collapse]=\"formGroup.value.cookieBanner.cookieBannerDisabled\"\n [isAnimated]=\"true\"\n >\n <div\n class=\"row\"\n style=\"min-height: 227px\"\n >\n <ng-container *ngIf=\"formGroup.value.cookieBanner.cookieBannerDisabled !== true\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"cookieBannerTitle\"\n name=\"cookieBannerTitle\"\n type=\"text\"\n formControlName=\"cookieBannerTitle\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyUrl\"\n translate\n >\n Link to privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyUrl\"\n name=\"policyUrl\"\n type=\"text\"\n formControlName=\"policyUrl\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"policyVersion\"\n translate\n >\n Version of privacy policy\n </label>\n <input\n class=\"form-control\"\n id=\"policyVersion\"\n name=\"policyVersion\"\n type=\"text\"\n formControlName=\"policyVersion\"\n />\n <c8y-messages\n [helpMessage]=\"\n 'Changing the version of the privacy policy invalidates already existing cookie consents.'\n | translate\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-32\">\n <label\n for=\"cookieBannerText\"\n translate\n >\n Text\n </label>\n <textarea\n class=\"form-control\"\n id=\"cookieBannerText\"\n name=\"cookieBannerText\"\n rows=\"8\"\n formControlName=\"cookieBannerText\"\n ></textarea>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Message banner -->\n <div class=\"card-block separator-top\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2 p-t-16\">\n <h4\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Message banner\n </h4>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset\n class=\"c8y-fieldset p-24\"\n [formGroupName]=\"'messageBanner'\"\n >\n <legend translate>Message banner</legend>\n\n <label class=\"c8y-switch\">\n <input\n class=\"form-control\"\n name=\"messageBannerEnabled\"\n type=\"checkbox\"\n formControlName=\"messageBannerEnabled\"\n />\n <span></span>\n <span translate>Enable message banner</span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"!formGroup.value.messageBanner.messageBannerEnabled\"\n [isAnimated]=\"true\"\n >\n <div class=\"d-flex a-i-center gap-8 p-t-16 p-b-16\">\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Message type' | translate }}</legend>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Info' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"info\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-info icon-16 m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n Info\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Warning' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"warning\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-warning icon-16 m-r-4\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Warning' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Danger' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"danger\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-danger icon-16 m-r-4\"\n c8yIcon=\"exclamation-circle\"\n ></i>\n {{ 'Danger' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Success' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"success\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span class=\"d-flex a-i-center\">\n <i\n class=\"text-success icon-16 m-r-4\"\n c8yIcon=\"check-circle\"\n ></i>\n {{ 'Success' | translate }}\n </span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'System' | translate }}\"\n >\n <input\n type=\"radio\"\n value=\"system\"\n formControlName=\"messageBannerType\"\n />\n <span></span>\n <span>\n <i\n class=\"text-primary icon-16 m-r4\"\n c8yIcon=\"wrench\"\n ></i>\n {{ 'System' | translate }}\n </span>\n </label>\n </fieldset>\n </div>\n\n <c8y-form-group\n class=\"m-b-32 p-b-32\"\n [style]=\"{ height: '300px' }\"\n *ngIf=\"formGroup.value.messageBanner.messageBannerEnabled\"\n >\n <label\n for=\"messageBannerContent\"\n translate\n >\n Message content\n </label>\n <c8y-editor\n class=\"flex-grow form-control\"\n style=\"height: 100%\"\n formControlName=\"messageBannerContent\"\n [editorOptions]=\"{language: 'markdown'}\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n <c8y-messages\n [helpMessage]=\"messageBannerHelp | translate: messageBannerHelpParams\"\n ></c8y-messages>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"previewBanner()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"eye\"\n ></i>\n <span translate>Preview banner</span>\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: i4.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: StaticAssetsFilePickerComponent, selector: "c8y-static-assets-file-picker", inputs: ["isCSSURL", "staticAssetType", "supportedFileExtensions", "layout", "size"] }, { kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions", "theme"], outputs: ["editorInit"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }