@c8y/ngx-components 1022.35.1 → 1022.44.7

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 (925) hide show
  1. package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
  2. package/actility-device-registration/actility-device-registration.service.d.ts.map +1 -1
  3. package/alarms/alarm-details.component.d.ts.map +1 -1
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarm-severity-to-icon-class.pipe.d.ts +9 -0
  6. package/alarms/alarm-severity-to-icon-class.pipe.d.ts.map +1 -0
  7. package/alarms/alarms-icon.component.d.ts.map +1 -1
  8. package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
  9. package/alarms/alarms-list.component.d.ts.map +1 -1
  10. package/alarms/alarms-view.service.d.ts.map +1 -1
  11. package/alarms/alarms.component.d.ts.map +1 -1
  12. package/alarms/alarms.helper.d.ts.map +1 -1
  13. package/alarms/alarms.model.d.ts.map +1 -1
  14. package/alarms/cockpit/index.d.ts.map +1 -1
  15. package/alarms/devicemanagement/index.d.ts.map +1 -1
  16. package/alarms/index.d.ts +1 -0
  17. package/alarms/index.d.ts.map +1 -1
  18. package/asset-properties/asset-properties.model.d.ts +77 -1
  19. package/asset-properties/asset-properties.model.d.ts.map +1 -1
  20. package/asset-properties/asset-properties.service.d.ts +17 -0
  21. package/asset-properties/asset-properties.service.d.ts.map +1 -1
  22. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts +14 -0
  23. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts.map +1 -0
  24. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts +2 -1
  25. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -1
  26. package/asset-properties/asset-property-list/asset-property-list.component.d.ts +52 -13
  27. package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -1
  28. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts +7 -3
  29. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts.map +1 -1
  30. package/asset-properties/asset-property-list/tree-data-source.d.ts +1 -0
  31. package/asset-properties/asset-property-list/tree-data-source.d.ts.map +1 -1
  32. package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -1
  33. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts +39 -0
  34. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts.map +1 -0
  35. package/asset-properties/computed-properties.service.d.ts +27 -0
  36. package/asset-properties/computed-properties.service.d.ts.map +1 -0
  37. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts +11 -6
  38. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts.map +1 -1
  39. package/asset-properties/custom-properties-drawer.service.d.ts +2 -1
  40. package/asset-properties/custom-properties-drawer.service.d.ts.map +1 -1
  41. package/asset-properties/index.d.ts +1 -0
  42. package/asset-properties/index.d.ts.map +1 -1
  43. package/assets-navigator/asset-node.d.ts.map +1 -1
  44. package/assets-navigator/asset-node.service.d.ts.map +1 -1
  45. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  46. package/assets-navigator/asset-selector/asset-selector.model.d.ts +1 -2
  47. package/assets-navigator/asset-selector/asset-selector.model.d.ts.map +1 -1
  48. package/assets-navigator/asset-selector/miller-view.component.d.ts +17 -5
  49. package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
  50. package/assets-navigator/asset-selector/unassigned-devices-node.d.ts.map +1 -1
  51. package/assets-navigator/load-more-node.d.ts.map +1 -1
  52. package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
  53. package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
  54. package/auth-configuration/factories/navigation.factory.d.ts.map +1 -1
  55. package/auth-configuration/factories/tabs.factory.d.ts.map +1 -1
  56. package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
  57. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
  58. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
  59. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  60. package/binary-file-download/binary-file-download.service.d.ts.map +1 -1
  61. package/bookmarks/bookmarks.component.d.ts.map +1 -1
  62. package/bookmarks/bookmarks.service.d.ts.map +1 -1
  63. package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
  64. package/branding/dark-theme/dark-theme-tab.factory.d.ts.map +1 -1
  65. package/branding/extra-css-branding-editor/extra-css-branding-editor-tab.factory.d.ts.map +1 -1
  66. package/branding/plain-branding-editor/plain-branding-editor-tab.factory.d.ts.map +1 -1
  67. package/branding/shared/lazy/branding-form/branding-form.component.d.ts.map +1 -1
  68. package/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
  69. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  70. package/cockpit-config/cockpit-config.guard.d.ts.map +1 -1
  71. package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
  72. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts +8 -0
  73. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts.map +1 -0
  74. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts +26 -0
  75. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts.map +1 -0
  76. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts +8 -0
  77. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts.map +1 -0
  78. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts +17 -0
  79. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts.map +1 -0
  80. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts +6 -0
  81. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts.map +1 -0
  82. package/computed-asset-properties/c8y-ngx-components-computed-asset-properties.d.ts.map +1 -0
  83. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts +14 -0
  84. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts.map +1 -0
  85. package/computed-asset-properties/child-count/child-count-value.d.ts +14 -0
  86. package/computed-asset-properties/child-count/child-count-value.d.ts.map +1 -0
  87. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts +14 -0
  88. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts.map +1 -0
  89. package/computed-asset-properties/common/realtime-value-base.d.ts +32 -0
  90. package/computed-asset-properties/common/realtime-value-base.d.ts.map +1 -0
  91. package/computed-asset-properties/common/realtime-value-handler.d.ts +19 -0
  92. package/computed-asset-properties/common/realtime-value-handler.d.ts.map +1 -0
  93. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts +7 -0
  94. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts.map +1 -0
  95. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts +21 -0
  96. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts.map +1 -0
  97. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts +8 -0
  98. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts.map +1 -0
  99. package/computed-asset-properties/event-count/event-count-3-months.d.ts +8 -0
  100. package/computed-asset-properties/event-count/event-count-3-months.d.ts.map +1 -0
  101. package/computed-asset-properties/event-count/event-count-config.component.d.ts +18 -0
  102. package/computed-asset-properties/event-count/event-count-config.component.d.ts.map +1 -0
  103. package/computed-asset-properties/event-count/event-count-today.d.ts +8 -0
  104. package/computed-asset-properties/event-count/event-count-today.d.ts.map +1 -0
  105. package/computed-asset-properties/event-count/event-count-value.d.ts +17 -0
  106. package/computed-asset-properties/event-count/event-count-value.d.ts.map +1 -0
  107. package/computed-asset-properties/event-count/event-count.model.d.ts +4 -0
  108. package/computed-asset-properties/event-count/event-count.model.d.ts.map +1 -0
  109. package/computed-asset-properties/index.d.ts +3 -0
  110. package/computed-asset-properties/index.d.ts.map +1 -0
  111. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts +3 -0
  112. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts.map +1 -0
  113. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts +13 -0
  114. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts.map +1 -0
  115. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts +8 -0
  116. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts.map +1 -0
  117. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts +48 -0
  118. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts.map +1 -0
  119. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts +13 -0
  120. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts.map +1 -0
  121. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts +28 -0
  122. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts.map +1 -0
  123. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts +17 -0
  124. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts.map +1 -0
  125. package/computed-asset-properties/strategies/child-count-strategy.d.ts +14 -0
  126. package/computed-asset-properties/strategies/child-count-strategy.d.ts.map +1 -0
  127. package/computed-asset-properties/strategies/count-strategy-base.d.ts +12 -0
  128. package/computed-asset-properties/strategies/count-strategy-base.d.ts.map +1 -0
  129. package/computed-asset-properties/strategies/event-count-strategy.d.ts +16 -0
  130. package/computed-asset-properties/strategies/event-count-strategy.d.ts.map +1 -0
  131. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts +20 -0
  132. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts.map +1 -0
  133. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts +16 -0
  134. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts.map +1 -0
  135. package/connectivity/abstract-connectivity-node.factory.d.ts.map +1 -1
  136. package/connectivity/actility/actility-tab.factory.d.ts.map +1 -1
  137. package/connectivity/sigfox/sigfox-tab.factory.d.ts.map +1 -1
  138. package/connectivity/sim/sim.module.d.ts.map +1 -1
  139. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.component.d.ts.map +1 -1
  140. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.model.d.ts.map +1 -1
  141. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.module.d.ts.map +1 -1
  142. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  143. package/context-dashboard/context-dashboard.model.d.ts +16 -0
  144. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  145. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  146. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  147. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  148. package/context-dashboard/dashboard-details-tabs.factory.d.ts.map +1 -1
  149. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  150. package/context-dashboard/dashboard-settings/dashboard-version-history.component.d.ts.map +1 -1
  151. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  152. package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
  153. package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
  154. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
  155. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
  156. package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
  157. package/context-dashboard/widget-config/appearance-settings.component.d.ts.map +1 -1
  158. package/context-dashboard/widget-config.service.d.ts +11 -1
  159. package/context-dashboard/widget-config.service.d.ts.map +1 -1
  160. package/core/action/action.service.d.ts +1 -1
  161. package/core/action-bar/action-bar.service.d.ts +1 -1
  162. package/core/authentication/simplified-auth.service.d.ts +1 -1
  163. package/core/authentication/simplified-auth.service.d.ts.map +1 -1
  164. package/core/bottom-drawer/bottom-drawer.component.d.ts +16 -2
  165. package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
  166. package/core/bottom-drawer/bottom-drawer.service.d.ts +13 -5
  167. package/core/bottom-drawer/bottom-drawer.service.d.ts.map +1 -1
  168. package/core/breadcrumb/breadcrumb.service.d.ts +1 -1
  169. package/core/common/extension-hooks.d.ts.map +1 -1
  170. package/core/common/options.service.d.ts +1 -1
  171. package/core/common/service-registry.service.d.ts +1 -1
  172. package/core/common/ui-state.service.d.ts +7 -7
  173. package/core/common/ui-state.service.d.ts.map +1 -1
  174. package/core/common/user-preferences/user-preferences.service.d.ts +4 -4
  175. package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
  176. package/core/dashboard/widgets-dashboard.component.d.ts +9 -1
  177. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  178. package/core/data-grid/action-controls-extension.service.d.ts +1 -1
  179. package/core/data-grid/filter-chip/filter-mapper.factory.d.ts +1 -1
  180. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  181. package/core/docs/docs.models.d.ts +1 -1
  182. package/core/docs/docs.module.d.ts +1 -1
  183. package/core/docs/help-and-support-outlet/help-and-support-outlet.module.d.ts +1 -1
  184. package/core/docs/legal-notices-outlet/legal-notices-outlet.module.d.ts +1 -1
  185. package/core/docs/support-outlet/support-outlet.component.d.ts +4 -3
  186. package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
  187. package/core/docs/support-outlet/support-outlet.module.d.ts +1 -1
  188. package/core/drawer/drawer.service.d.ts +1 -1
  189. package/core/dynamic-component/dynamic-component.model.d.ts +18 -4
  190. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  191. package/core/dynamic-forms/i18n/translate.extension.d.ts.map +1 -1
  192. package/core/feedback-form/feedback-form.component.d.ts +27 -0
  193. package/core/feedback-form/feedback-form.component.d.ts.map +1 -0
  194. package/core/feedback-form/feedback-form.model.d.ts +6 -0
  195. package/core/feedback-form/feedback-form.model.d.ts.map +1 -0
  196. package/core/feedback-form/index.d.ts +2 -0
  197. package/core/feedback-form/index.d.ts.map +1 -0
  198. package/core/i18n/gettext.d.ts +4 -1
  199. package/core/i18n/gettext.d.ts.map +1 -1
  200. package/core/i18n/pattern-messages.data.d.ts +61 -0
  201. package/core/i18n/pattern-messages.data.d.ts.map +1 -1
  202. package/core/i18n/patterns-message.hook.d.ts +1 -1
  203. package/core/index.d.ts +1 -0
  204. package/core/index.d.ts.map +1 -1
  205. package/core/modal/modal.service.d.ts +0 -1
  206. package/core/modal/modal.service.d.ts.map +1 -1
  207. package/core/navigator/navigator-bottom/navigator-bottom.module.d.ts +1 -1
  208. package/core/navigator/navigator-top/navigator-top.module.d.ts +1 -1
  209. package/core/navigator/navigator.module.d.ts +1 -1
  210. package/core/navigator/navigator.service.d.ts +1 -1
  211. package/core/plugins/index.d.ts +1 -0
  212. package/core/plugins/index.d.ts.map +1 -1
  213. package/core/plugins/plugins-injection-token.d.ts +14 -0
  214. package/core/plugins/plugins-injection-token.d.ts.map +1 -0
  215. package/core/plugins/plugins-loader.service.d.ts +7 -21
  216. package/core/plugins/plugins-loader.service.d.ts.map +1 -1
  217. package/core/plugins/plugins-resolve.service.d.ts +1 -0
  218. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  219. package/core/preview-feature/preview-feature.component.d.ts.map +1 -1
  220. package/core/preview-feature/preview-feature.service.d.ts +1 -1
  221. package/core/provider-configuration/provider-configuration-hook.d.ts +1 -1
  222. package/core/query-param-handler/index.d.ts +1 -1
  223. package/core/query-param-handler/query-param-bottom-drawer.service.d.ts +1 -1
  224. package/core/query-param-handler/query-param-handler.service.d.ts +1 -1
  225. package/core/query-param-handler/query-param-modal-handler.service.d.ts +1 -1
  226. package/core/router/router.service.d.ts +1 -1
  227. package/core/search/search.service.d.ts +1 -1
  228. package/core/stepper/stepper.service.d.ts +1 -1
  229. package/core/tabs/tab.component.d.ts +2 -2
  230. package/core/tabs/tab.component.d.ts.map +1 -1
  231. package/core/tabs/tab.model.d.ts +2 -2
  232. package/core/tabs/tab.model.d.ts.map +1 -1
  233. package/core/tabs/tabs.service.d.ts +1 -1
  234. package/core/tabs/tabs.service.d.ts.map +1 -1
  235. package/core/ui-settings/ui-settings.module.d.ts +1 -1
  236. package/core/user/change-current-user-password.service.d.ts +10 -0
  237. package/core/user/change-current-user-password.service.d.ts.map +1 -0
  238. package/core/user/index.d.ts +1 -0
  239. package/core/user/index.d.ts.map +1 -1
  240. package/core/user/user-details-drawer/user-details-drawer.module.d.ts +1 -1
  241. package/core/user/user-menu.service.d.ts +1 -1
  242. package/core/user/user.module.d.ts +1 -1
  243. package/core/version/version.model.d.ts +1 -1
  244. package/core/version/version.module.d.ts +1 -1
  245. package/core/wizard/wizard.model.d.ts +1 -1
  246. package/dashboard-details-advanced-tab/advanced-tab.factory.d.ts.map +1 -1
  247. package/dashboard-details-advanced-tab/assign-widget-assets/assign-widget-asset-modal.component.d.ts.map +1 -1
  248. package/dashboard-details-advanced-tab/dashboard-json-editor/dashboard-json-editor.component.d.ts.map +1 -1
  249. package/dashboard-details-advanced-tab/dashboard-json-editor/import-export-widgets.service.d.ts.map +1 -1
  250. package/dashboard-manager/dashboard-manager-tabs.factory.d.ts.map +1 -1
  251. package/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
  252. package/dashboard-manager/devicemanagement/index.d.ts +1 -1
  253. package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
  254. package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
  255. package/dashboard-manager/type-dashboards-list/device-type-value.grid-column.d.ts.map +1 -1
  256. package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  257. package/data-grid-columns/asset-type/asset-type-grid-column.d.ts.map +1 -1
  258. package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
  259. package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -1
  260. package/datapoint-explorer/devicemanagement/index.d.ts +3 -0
  261. package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -1
  262. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +4 -2
  263. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
  264. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -1
  265. package/datapoint-explorer/view/datapoint-explorer.model.d.ts +1 -0
  266. package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -1
  267. package/datapoint-explorer/view/index.d.ts +3 -0
  268. package/datapoint-explorer/view/index.d.ts.map +1 -1
  269. package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts.map +1 -1
  270. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -1
  271. package/datapoint-library/datapoint-library.module.d.ts.map +1 -1
  272. package/datapoint-library/details/datapoint-library-details.component.d.ts +1 -2
  273. package/datapoint-library/details/datapoint-library-details.component.d.ts.map +1 -1
  274. package/datapoint-library/list/datapoint-library-list.component.d.ts.map +1 -1
  275. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  276. package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
  277. package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
  278. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
  279. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -1
  280. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -1
  281. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -1
  282. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  283. package/default-subscriptions/default-subscriptions-navigation.factory.d.ts.map +1 -1
  284. package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
  285. package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
  286. package/device-grid/columns/alarms.device-grid-column.d.ts.map +1 -1
  287. package/device-grid/columns/group.device-grid-column.d.ts.map +1 -1
  288. package/device-grid/columns/imei.device-grid-column.d.ts.map +1 -1
  289. package/device-grid/columns/model.device-grid-column.d.ts.map +1 -1
  290. package/device-grid/columns/name.device-grid-column.d.ts.map +1 -1
  291. package/device-grid/columns/registration-date.device-grid-column.d.ts.map +1 -1
  292. package/device-grid/columns/serial-number.device-grid-column.d.ts.map +1 -1
  293. package/device-grid/columns/status.device-grid-column.d.ts.map +1 -1
  294. package/device-grid/columns/system-id.device-grid-column.d.ts.map +1 -1
  295. package/device-grid/columns/type.device-grid-column.d.ts.map +1 -1
  296. package/device-grid/device-grid.component.d.ts.map +1 -1
  297. package/device-grid/device-grid.service.d.ts.map +1 -1
  298. package/device-list/add-smart-group.component.d.ts.map +1 -1
  299. package/device-list/device-list-navigation.factory.d.ts.map +1 -1
  300. package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
  301. package/device-map/device-map-navigation.factory.d.ts.map +1 -1
  302. package/device-profile/add-device-profile.component.d.ts.map +1 -1
  303. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  304. package/device-profile/device-profile-navigation.factory.d.ts.map +1 -1
  305. package/device-profile/device-profile.component.d.ts.map +1 -1
  306. package/device-profile/device-profile.service.d.ts.map +1 -1
  307. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
  308. package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
  309. package/device-protocols/device-protocols.guard.d.ts.map +1 -1
  310. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
  311. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  312. package/device-shell/device-shell.module.d.ts.map +1 -1
  313. package/device-shell/shared/device-shell.service.d.ts.map +1 -1
  314. package/device-shell/shell/shell.component.d.ts.map +1 -1
  315. package/diagnostics/diagnostics.module.d.ts.map +1 -1
  316. package/diagnostics/diagnostics.service.d.ts.map +1 -1
  317. package/echart/services/echarts-options.service.d.ts +2 -3
  318. package/echart/services/echarts-options.service.d.ts.map +1 -1
  319. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  320. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  321. package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
  322. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
  323. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  324. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -1
  325. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  326. package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
  327. package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
  328. package/ecosystem/ecosystem-tabs.factory.d.ts.map +1 -1
  329. package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
  330. package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
  331. package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
  332. package/ecosystem/packages/add-package.component.d.ts.map +1 -1
  333. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  334. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  335. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
  336. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  337. package/ecosystem/plugin-setup-stepper/plugin-setup-stepper.module.d.ts.map +1 -1
  338. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  339. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  340. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
  341. package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
  342. package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
  343. package/ecosystem/shared/package-availability.service.d.ts.map +1 -1
  344. package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
  345. package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
  346. package/editor/editor.component.d.ts +16 -0
  347. package/editor/editor.component.d.ts.map +1 -1
  348. package/exports/index.d.ts +1 -1
  349. package/exports/index.d.ts.map +1 -1
  350. package/exports/list/exports-grid.service.d.ts.map +1 -1
  351. package/exports/list/exports-list/exports-list.component.d.ts.map +1 -1
  352. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +2 -1
  353. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  354. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +8 -7
  355. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  356. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +2 -1
  357. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  358. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +2 -1
  359. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  360. package/fesm2022/c8y-ngx-components-alarms.mjs +40 -2
  361. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  362. package/fesm2022/c8y-ngx-components-asset-properties.mjs +608 -97
  363. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  364. package/fesm2022/c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs.map +1 -1
  365. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +70 -23
  366. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  367. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -1
  368. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  369. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +2 -1
  370. package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
  371. package/fesm2022/c8y-ngx-components-bookmarks.mjs +2 -1
  372. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  373. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +2 -1
  374. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
  375. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +3 -3
  376. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
  377. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +2 -1
  378. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
  379. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +22 -12
  380. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  381. package/fesm2022/c8y-ngx-components-child-devices.mjs +2 -1
  382. package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
  383. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +2 -1
  384. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  385. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs +68 -0
  386. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs.map +1 -0
  387. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs +73 -0
  388. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs.map +1 -0
  389. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs +44 -0
  390. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs.map +1 -0
  391. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs +91 -0
  392. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs.map +1 -0
  393. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +643 -0
  394. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs.map +1 -0
  395. package/fesm2022/c8y-ngx-components-connectivity.mjs +2 -1
  396. package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
  397. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +2 -1
  398. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  399. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs} +3 -2
  400. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs.map +1 -0
  401. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs} +3 -2
  402. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs.map +1 -0
  403. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +45 -12
  404. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  405. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs} +12 -8
  406. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs.map +1 -0
  407. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +4 -3
  408. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
  409. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +2 -1
  410. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  411. package/fesm2022/c8y-ngx-components-data-broker.mjs +2 -1
  412. package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
  413. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +2 -1
  414. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
  415. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +2 -1
  416. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
  417. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -9
  418. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
  419. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +58 -53
  420. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  421. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +2 -1
  422. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  423. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +2 -1
  424. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
  425. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +2 -1
  426. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  427. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +2 -1
  428. package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
  429. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -1
  430. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  431. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -1
  432. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  433. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +2 -1
  434. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
  435. package/fesm2022/c8y-ngx-components-device-grid.mjs +3 -3
  436. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  437. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -1
  438. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  439. package/fesm2022/c8y-ngx-components-device-map.mjs +2 -1
  440. package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
  441. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -1
  442. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  443. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -2
  444. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
  445. package/fesm2022/c8y-ngx-components-device-protocols.mjs +2 -1
  446. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  447. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +2 -1
  448. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  449. package/fesm2022/c8y-ngx-components-device-shell.mjs +2 -1
  450. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  451. package/fesm2022/c8y-ngx-components-diagnostics.mjs +2 -1
  452. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  453. package/fesm2022/c8y-ngx-components-echart.mjs +6 -8
  454. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  455. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -1
  456. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  457. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +2 -1
  458. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  459. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +2 -1
  460. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
  461. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -1
  462. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  463. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -1
  464. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  465. package/fesm2022/c8y-ngx-components-editor.mjs +39 -1
  466. package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
  467. package/fesm2022/c8y-ngx-components-events.mjs +1 -1
  468. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  469. package/fesm2022/c8y-ngx-components-exports-list.mjs +2 -1
  470. package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
  471. package/fesm2022/c8y-ngx-components-exports.mjs +2 -1
  472. package/fesm2022/c8y-ngx-components-exports.mjs.map +1 -1
  473. package/fesm2022/c8y-ngx-components-file-preview.mjs +2 -1
  474. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  475. package/fesm2022/c8y-ngx-components-files-repository.mjs +2 -1
  476. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  477. package/fesm2022/c8y-ngx-components-icon-selector.mjs +2 -1
  478. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  479. package/fesm2022/c8y-ngx-components-location.mjs +2 -1
  480. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  481. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +2 -1
  482. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  483. package/fesm2022/c8y-ngx-components-map.mjs +2 -1
  484. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  485. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -1
  486. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  487. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +2 -1
  488. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  489. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +2 -1
  490. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  491. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +2 -1
  492. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  493. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +2 -1
  494. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  495. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +2 -1
  496. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  497. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +2 -1
  498. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
  499. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +2 -1
  500. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  501. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +2 -1
  502. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  503. package/fesm2022/c8y-ngx-components-operations-shared.mjs +2 -1
  504. package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
  505. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +4 -4
  506. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  507. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +4 -4
  508. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  509. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +4 -4
  510. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  511. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +4 -4
  512. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  513. package/fesm2022/c8y-ngx-components-operations.mjs +2 -1
  514. package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
  515. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +2 -1
  516. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
  517. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +2 -1
  518. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  519. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -1
  520. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  521. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +1 -1
  522. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
  523. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -1
  524. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  525. package/fesm2022/c8y-ngx-components-register-device.mjs +2 -1
  526. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  527. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +3 -3
  528. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  529. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +2 -1
  530. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
  531. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +2 -1
  532. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
  533. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +2 -1
  534. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
  535. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +2 -1
  536. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
  537. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +3 -3
  538. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
  539. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +2 -1
  540. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
  541. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +2 -1
  542. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  543. package/fesm2022/c8y-ngx-components-replace-device.mjs +2 -1
  544. package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
  545. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +2 -1
  546. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  547. package/fesm2022/c8y-ngx-components-reports.mjs +2 -1
  548. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  549. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -1
  550. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  551. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -1
  552. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  553. package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -2
  554. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  555. package/fesm2022/c8y-ngx-components-repository-software.mjs +2 -1
  556. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  557. package/fesm2022/c8y-ngx-components-search.mjs +2 -1
  558. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  559. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -1
  560. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  561. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +3 -2
  562. package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
  563. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +2 -1
  564. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
  565. package/fesm2022/c8y-ngx-components-services-shared.mjs +1 -1
  566. package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
  567. package/fesm2022/c8y-ngx-components-services.mjs +2 -1
  568. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  569. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +2 -1
  570. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  571. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +3 -2
  572. package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  573. package/fesm2022/c8y-ngx-components-sub-assets.mjs +13 -9
  574. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  575. package/fesm2022/c8y-ngx-components-tenants.mjs +37 -37
  576. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  577. package/fesm2022/c8y-ngx-components-tracking.mjs +2 -1
  578. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  579. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -5
  580. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  581. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -1
  582. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  583. package/fesm2022/c8y-ngx-components-upgrade.mjs +10 -3
  584. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  585. package/fesm2022/c8y-ngx-components-user-roles.mjs +2 -1
  586. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  587. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -1
  588. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  589. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -1
  590. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  591. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -1
  592. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  593. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -1
  594. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  595. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +2 -1
  596. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -1
  597. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -1
  598. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  599. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -1
  600. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  601. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +2 -1
  602. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  603. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
  604. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  605. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -1
  606. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  607. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
  608. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  609. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -1
  610. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  611. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +3 -3
  612. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  613. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +3 -6
  614. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  615. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -1
  616. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  617. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -1
  618. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  619. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +2 -1
  620. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
  621. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -1
  622. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  623. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  624. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  625. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs +2 -1
  626. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs.map +1 -1
  627. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +2 -1
  628. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
  629. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +2 -1
  630. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
  631. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -1
  632. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  633. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -1
  634. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  635. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +2 -1
  636. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
  637. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +9 -6
  638. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  639. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  640. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  641. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +2 -1
  642. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
  643. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +2 -1
  644. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
  645. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +2 -1
  646. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  647. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +13 -8
  648. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  649. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +2 -1
  650. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  651. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -1
  652. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  653. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -1
  654. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  655. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -1
  656. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  657. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -1
  658. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  659. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +2 -1
  660. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  661. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs +3 -10
  662. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs.map +1 -1
  663. package/fesm2022/c8y-ngx-components.mjs +789 -531
  664. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  665. package/file-preview/file-preview.component.d.ts.map +1 -1
  666. package/files-repository/files-repository-navigation.factory.d.ts.map +1 -1
  667. package/files-repository/files-repository-upload.component.d.ts.map +1 -1
  668. package/files-repository/files-repository.component.d.ts.map +1 -1
  669. package/files-repository/files-repository.service.d.ts +1 -2
  670. package/files-repository/files-repository.service.d.ts.map +1 -1
  671. package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
  672. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  673. package/locales/de.po +105 -12
  674. package/locales/es.po +105 -12
  675. package/locales/fr.po +105 -12
  676. package/locales/ja_JP.po +99 -12
  677. package/locales/ko.po +104 -12
  678. package/locales/locales.pot +97 -12
  679. package/locales/nl.po +105 -12
  680. package/locales/pl.po +105 -12
  681. package/locales/pt_BR.po +105 -12
  682. package/locales/zh_CN.po +104 -12
  683. package/locales/zh_TW.po +104 -12
  684. package/location/location-tab.factory.d.ts.map +1 -1
  685. package/location/location.component.d.ts.map +1 -1
  686. package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
  687. package/loriot-device-registration/loriot-provider.service.d.ts.map +1 -1
  688. package/map/map.component.d.ts.map +1 -1
  689. package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -1
  690. package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -1
  691. package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -1
  692. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -1
  693. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -1
  694. package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -1
  695. package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -1
  696. package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -1
  697. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
  698. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
  699. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  700. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
  701. package/operations/bulk-single-operations-list/single-operation-item.component.d.ts.map +1 -1
  702. package/operations/bulk-single-operations-list/single-operations-list.component.d.ts.map +1 -1
  703. package/operations/factories/bulk-operations-tab.factory.d.ts.map +1 -1
  704. package/operations/grid-columns/creation-time.grid-column.d.ts.map +1 -1
  705. package/operations/grid-columns/device.grid-column.d.ts.map +1 -1
  706. package/operations/grid-columns/failure-reason.grid-column.d.ts.map +1 -1
  707. package/operations/grid-columns/status.grid-column.d.ts.map +1 -1
  708. package/operations/operations-list/device-control.feature.d.ts.map +1 -1
  709. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  710. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  711. package/operations/operations-list/single-operations-tab.factory.d.ts.map +1 -1
  712. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
  713. package/operations/shared/nav.factory.d.ts.map +1 -1
  714. package/operations/shared/operations.service.d.ts.map +1 -1
  715. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
  716. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
  717. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
  718. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
  719. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
  720. package/package.json +1 -1
  721. package/pending-mo-request/pending-mo-request-interceptor.d.ts.map +1 -1
  722. package/pending-mo-request/pending-mo-request.service.d.ts.map +1 -1
  723. package/platform-configuration/platform-configuration-form-provider.service.d.ts.map +1 -1
  724. package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
  725. package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
  726. package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
  727. package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
  728. package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
  729. package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
  730. package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts.map +1 -1
  731. package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
  732. package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
  733. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
  734. package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
  735. package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
  736. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  737. package/register-device/device-registration-view.component.d.ts.map +1 -1
  738. package/register-device/extensible/base-extensible-device-registration.service.d.ts.map +1 -1
  739. package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
  740. package/register-device/extensible/bulk/extensible-bulk-device-registration.service.d.ts.map +1 -1
  741. package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
  742. package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts.map +1 -1
  743. package/register-device/extensible/single/extensible-device-registration.service.d.ts.map +1 -1
  744. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  745. package/register-device/register-device-navigation.factory.d.ts.map +1 -1
  746. package/register-device/register-device.service.d.ts.map +1 -1
  747. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -1
  748. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -1
  749. package/remote-access/passthrough/index.d.ts +1 -1
  750. package/remote-access/passthrough/index.d.ts.map +1 -1
  751. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -1
  752. package/remote-access/ssh/index.d.ts.map +1 -1
  753. package/remote-access/telnet/index.d.ts.map +1 -1
  754. package/remote-access/vnc/index.d.ts.map +1 -1
  755. package/replace-device/replace-device-grid-action.factory.d.ts.map +1 -1
  756. package/replace-device/replace-device-wizard/replace-device-wizard.component.d.ts.map +1 -1
  757. package/replace-device/replace-device-wizard/replace-device-wizard.service.d.ts.map +1 -1
  758. package/replace-device/replace-device.service.d.ts.map +1 -1
  759. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  760. package/report-dashboard/report-dashboard-navigation.factory.d.ts.map +1 -1
  761. package/reports/export-schedules.component.d.ts.map +1 -1
  762. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
  763. package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
  764. package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
  765. package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
  766. package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
  767. package/repository/configuration/list/configuration-repository-navigation-factory.d.ts.map +1 -1
  768. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
  769. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
  770. package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
  771. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
  772. package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
  773. package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
  774. package/repository/firmware/list/firmware-repository-navigation-factory.d.ts.map +1 -1
  775. package/repository/shared/columns/description.grid-column.d.ts.map +1 -1
  776. package/repository/shared/columns/device-type.grid-column.d.ts.map +1 -1
  777. package/repository/shared/columns/file.grid-column.d.ts.map +1 -1
  778. package/repository/shared/columns/name.grid-column.d.ts.map +1 -1
  779. package/repository/shared/columns/type.filtering-form-renderer.component.d.ts.map +1 -1
  780. package/repository/shared/columns/type.grid-column.d.ts.map +1 -1
  781. package/repository/shared/columns/versions.grid-column.d.ts.map +1 -1
  782. package/repository/shared/repository.service.d.ts.map +1 -1
  783. package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
  784. package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
  785. package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
  786. package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
  787. package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
  788. package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
  789. package/repository/software/list/software-details.component.d.ts.map +1 -1
  790. package/repository/software/list/software-list.component.d.ts.map +1 -1
  791. package/repository/software/list/software-repository-navigation-factory.d.ts.map +1 -1
  792. package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
  793. package/search/search-grid.component.d.ts.map +1 -1
  794. package/search/search-results.component.d.ts.map +1 -1
  795. package/sensor-phone/connect-smartphone.factory.d.ts.map +1 -1
  796. package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
  797. package/sensor-phone/sensor-phone-modal/sensor-phone.service.d.ts.map +1 -1
  798. package/services/service-command-tab/service-command.feature.d.ts.map +1 -1
  799. package/services/services-device-tab/columns/last-updated-date.device-grid-column.d.ts.map +1 -1
  800. package/services/services-device-tab/columns/name.grid-column.d.ts.map +1 -1
  801. package/services/services-device-tab/columns/service-type.grid-column.d.ts.map +1 -1
  802. package/services/services-device-tab/columns/status.grid-column.d.ts.map +1 -1
  803. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  804. package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
  805. package/services/services-device-tab/services.breadcrumb-factory.d.ts.map +1 -1
  806. package/services/shared/service-command.service.d.ts.map +1 -1
  807. package/services/status-options/status-options.model.d.ts.map +1 -1
  808. package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
  809. package/sigfox-device-registration/sigfox-provider.service.d.ts.map +1 -1
  810. package/sms-gateway/sms-gateway.module.d.ts.map +1 -1
  811. package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
  812. package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
  813. package/sub-assets/asset-properties.component.d.ts.map +1 -1
  814. package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
  815. package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
  816. package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
  817. package/sub-assets/group-info.component.d.ts.map +1 -1
  818. package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
  819. package/sub-assets/sub-assets.component.d.ts.map +1 -1
  820. package/sub-assets/sub-assets.module.d.ts.map +1 -1
  821. package/sub-assets/sub-assets.service.d.ts.map +1 -1
  822. package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
  823. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
  824. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
  825. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
  826. package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
  827. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  828. package/tenants/tenants-navigation.factory.d.ts.map +1 -1
  829. package/tenants/tenants.module.d.ts.map +1 -1
  830. package/tracking/tracking.feature.d.ts.map +1 -1
  831. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
  832. package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
  833. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
  834. package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
  835. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
  836. package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
  837. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  838. package/upgrade/auth-bridge.service.d.ts.map +1 -1
  839. package/upgrade/bridge.service.d.ts.map +1 -1
  840. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  841. package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
  842. package/upgrade/ng1/index.d.ts.map +1 -1
  843. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
  844. package/widgets/cockpit/index.d.ts +4 -4
  845. package/widgets/definitions/alarms/alarm-list/index.d.ts +1 -1
  846. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  847. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +1 -1
  848. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  849. package/widgets/definitions/alarms/recent-alarms/index.d.ts +1 -1
  850. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  851. package/widgets/definitions/applications/index.d.ts +1 -1
  852. package/widgets/definitions/applications/index.d.ts.map +1 -1
  853. package/widgets/definitions/asset-notes/index.d.ts +1 -1
  854. package/widgets/definitions/asset-notes/index.d.ts.map +1 -1
  855. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts +1 -1
  856. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  857. package/widgets/definitions/cockpit-welcome/index.d.ts +1 -1
  858. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  859. package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -1
  860. package/widgets/definitions/datapoints-graph/index.d.ts +1 -1
  861. package/widgets/definitions/datapoints-table/index.d.ts +1 -1
  862. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  863. package/widgets/definitions/device-control-message/index.d.ts +1 -1
  864. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  865. package/widgets/definitions/help-and-service/index.d.ts +1 -1
  866. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  867. package/widgets/definitions/html-widget/html-widget.factory.d.ts.map +1 -1
  868. package/widgets/definitions/html-widget/index.d.ts +1 -1
  869. package/widgets/definitions/image/index.d.ts +5 -3
  870. package/widgets/definitions/image/index.d.ts.map +1 -1
  871. package/widgets/definitions/info-gauge/index.d.ts +2 -3
  872. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  873. package/widgets/definitions/kpi/index.d.ts +1 -1
  874. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  875. package/widgets/definitions/linear-gauge/index.d.ts +1 -1
  876. package/widgets/definitions/linear-gauge/index.d.ts.map +1 -1
  877. package/widgets/definitions/map/index.d.ts +1 -1
  878. package/widgets/definitions/map/index.d.ts.map +1 -1
  879. package/widgets/definitions/markdown/index.d.ts +5 -3
  880. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  881. package/widgets/definitions/quick-links/index.d.ts +1 -1
  882. package/widgets/definitions/quick-links/index.d.ts.map +1 -1
  883. package/widgets/definitions/radial-gauge/index.d.ts +1 -1
  884. package/widgets/definitions/radial-gauge/index.d.ts.map +1 -1
  885. package/widgets/definitions/silo/index.d.ts +1 -1
  886. package/widgets/definitions/silo/index.d.ts.map +1 -1
  887. package/widgets/definitions/three-d-rotation/index.d.ts +1 -1
  888. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  889. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  890. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  891. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  892. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  893. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts +3 -2
  894. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts.map +1 -1
  895. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
  896. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -1
  897. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
  898. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
  899. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -1
  900. package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts.map +1 -1
  901. package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
  902. package/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.d.ts.map +1 -1
  903. package/widgets/implementations/html-widget/advanced-settings/advanced-settings.component.d.ts.map +1 -1
  904. package/widgets/implementations/html-widget/html-widget-config.service.d.ts.map +1 -1
  905. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts +5 -3
  906. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts.map +1 -1
  907. package/widgets/implementations/image/image-widget-config/image-widget-config.component.d.ts.map +1 -1
  908. package/widgets/implementations/image/image-widget.service.d.ts +1 -2
  909. package/widgets/implementations/image/image-widget.service.d.ts.map +1 -1
  910. package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
  911. package/widgets/implementations/linear-gauge/linear-gauge-widget-view/linear-gauge-widget-view.component.d.ts.map +1 -1
  912. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  913. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  914. package/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.d.ts.map +1 -1
  915. package/widgets/implementations/markdown/markdown-widget.service.d.ts.map +1 -1
  916. package/widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.d.ts.map +1 -1
  917. package/widgets/import-export-config/config-target-export.d.ts +3 -1
  918. package/widgets/import-export-config/config-target-export.d.ts.map +1 -1
  919. package/widgets/import-export-config/config-target-import.d.ts +3 -1
  920. package/widgets/import-export-config/config-target-import.d.ts.map +1 -1
  921. package/widgets/import-export-config/device-import-export.d.ts +3 -1
  922. package/widgets/import-export-config/device-import-export.d.ts.map +1 -1
  923. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs.map +0 -1
  924. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs.map +0 -1
  925. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-branding-shared-lazy.mjs","sources":["../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app.service.ts","../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app-modal.component.ts","../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app-modal.component.html","../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.ts","../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.html","../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.ts","../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.html","../../branding/shared/lazy/branding-import-modal/branding-import-modal.service.ts","../../branding/shared/lazy/branding-name-cell-renderer/branding-name-cell-renderer.component.ts","../../branding/shared/lazy/branding-name-cell-renderer/branding-name-cell-renderer.component.html","../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.ts","../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.html","../../branding/shared/lazy/branding/branding.component.ts","../../branding/shared/lazy/branding/branding.component.html","../../branding/shared/lazy/branding-form/branding-form.component.ts","../../branding/shared/lazy/branding-form/branding-form.component.html","../../branding/shared/lazy/branding-theme-form/branding-theme-form-structure.ts","../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.ts","../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.html","../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts","../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.html","../../branding/shared/lazy/branding-assets/branding-assets.component.ts","../../branding/shared/lazy/branding-assets/branding-assets.component.html","../../branding/shared/lazy/c8y-ngx-components-branding-shared-lazy.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ApplicationService, ApplicationType, IApplication } from '@c8y/client';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingToAppService {\n constructor(private apps: ApplicationService) {}\n\n async getBrandableApps(): Promise<IApplication[]> {\n const { data: apps } = await this.apps.list({\n pageSize: 2000,\n dropOverwrittenApps: true,\n type: ApplicationType.HOSTED\n });\n const appsWithDynamicOptionsUrl = this.getHostedAppsWhereDynamicOptionsUrlIsUndefined(apps);\n return appsWithDynamicOptionsUrl;\n }\n\n getHostedAppsWhereDynamicOptionsUrlIsUndefined(apps: IApplication[]) {\n return apps.filter(app => {\n const manifest = app.manifest;\n if (!manifest) {\n return false;\n }\n // filter out none web sdk based apps\n if (!manifest.webSdkVersion) {\n return false;\n }\n // filter out packages\n if (manifest.isPackage) {\n return false;\n }\n const dynamicOptionsUrl = manifest.dynamicOptionsUrl;\n\n return dynamicOptionsUrl === undefined || dynamicOptionsUrl === true;\n });\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ApplyBrandingToAppService } from './apply-branding-to-app.service';\nimport { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AsyncPipe, NgForOf, NgIf } from '@angular/common';\nimport {\n AppIconComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n HumanizeAppNamePipe,\n ListItemBodyComponent,\n ListItemCheckboxComponent,\n ListItemComponent,\n ListItemIconComponent,\n ModalComponent\n} from '@c8y/ngx-components';\nimport { Observable, merge, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { uniqBy } from 'lodash-es';\n\n@Component({\n selector: 'c8y-apply-branding-to-app-modal',\n templateUrl: './apply-branding-to-app-modal.component.html',\n standalone: true,\n imports: [\n NgIf,\n AsyncPipe,\n ReactiveFormsModule,\n ModalComponent,\n C8yTranslatePipe,\n C8yTranslateDirective,\n ListItemComponent,\n ListItemIconComponent,\n ListItemCheckboxComponent,\n AppIconComponent,\n ListItemBodyComponent,\n HumanizeAppNamePipe,\n NgForOf\n ]\n})\nexport class ApplyBrandingToAppModalComponent implements OnInit {\n @Input() currentTags: string[];\n brandableApps: Awaited<ReturnType<ApplyBrandingToAppService['getBrandableApps']>> = [];\n form: ReturnType<ApplyBrandingToAppModalComponent['initForm']>;\n numberOfSelectedApps$: Observable<number>;\n\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n\n private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n constructor(\n private apply: ApplyBrandingToAppService,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n const brandableApps = await this.apply.getBrandableApps();\n this.brandableApps = uniqBy(brandableApps, 'contextPath');\n const tags = this.brandableApps.map(app => app.contextPath);\n this.form = this.initForm(tags);\n if (this.currentTags.length) {\n this.form.patchValue(\n this.currentTags.reduce((prev, curr) => Object.assign(prev, { [curr]: true }), {})\n );\n }\n this.numberOfSelectedApps$ = merge(this.form.valueChanges, of(this.form.value)).pipe(\n map(value => Object.values(value).filter(Boolean).length)\n );\n }\n\n save() {\n this._resovle(this.form.value);\n }\n\n cancel() {\n this._reject();\n }\n\n private initForm(tags: string[]) {\n const tagsFormMap: Record<string, FormControl<boolean>> = tags.reduceRight(\n (prev, curr) => Object.assign(prev, { [curr]: this.formBuilder.control(false) }),\n {}\n );\n return this.formBuilder.group(tagsFormMap);\n }\n}\n","<c8y-modal\n [title]=\"'Apply branding to apps' | translate\"\n [disabled]=\"!form || form.invalid || !brandableApps.length\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"palette\"></span>\n </ng-container>\n <c8y-list-group\n class=\"m-b-0 no-border-last\"\n *ngIf=\"form\"\n [formGroup]=\"form\"\n >\n <c8y-li>\n <p\n class=\"text-center text-medium\"\n *ngIf=\"numberOfSelectedApps$ | async as numberOfApps; else noapps\"\n translate\n >\n {{ numberOfApps }} apps selected for branding\n </p>\n <ng-template #noapps>\n <p\n class=\"text-center text-medium\"\n translate\n >\n No apps selected for branding\n </p>\n </ng-template>\n </c8y-li>\n <c8y-li *ngFor=\"let app of brandableApps\">\n <c8y-li-icon>\n <c8y-app-icon\n class=\"icon-40\"\n [app]=\"app\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <c8y-li-checkbox\n [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + app.contextPath\"\n [formControlName]=\"app.contextPath\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"p-t-8 d-block\">{{ app | humanizeAppName | async }}</c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-modal>\n","import { AsyncPipe, NgForOf, NgIf } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { AppStateService, CellRendererContext, HumanizeAppNamePipe } from '@c8y/ngx-components';\nimport { Observable, of } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-branding-tags-cell-renderer',\n templateUrl: './branding-tags-cell-renderer.component.html',\n standalone: true,\n imports: [NgIf, NgForOf, HumanizeAppNamePipe, AsyncPipe]\n})\nexport class BrandingTagsCellRendererComponent {\n hasLatestTag: boolean;\n appContextPathsOrApps$: Observable<Array<string | IApplication>>;\n constructor(\n context: CellRendererContext,\n private appState: AppStateService\n ) {\n const tags: string[] = context.value || [];\n this.hasLatestTag = tags.some(tag => tag === 'latest');\n const appSpecificTags = tags\n .filter(tag => tag.startsWith('app-'))\n .map(tag => tag.replace('app-', ''));\n\n this.appContextPathsOrApps$ = this.getAppContextPathsOrApps$(appSpecificTags);\n }\n\n private getAppContextPathsOrApps$(\n appContextPaths: string[]\n ): Observable<Array<string | IApplication>> {\n if (!appContextPaths.length) {\n return of([]);\n }\n return this.appState.currentAppsOfUser.pipe(\n map(apps => {\n return appContextPaths.map(tag => {\n const app = apps.find(app => app.contextPath === tag);\n return app || tag;\n });\n }),\n startWith(appContextPaths)\n );\n }\n}\n","<div class=\"d-flex a-i-center gap-4 flex-wrap\">\n <div\n class=\"tag tag--success\"\n *ngIf=\"hasLatestTag\"\n translate\n >\n Global\n </div>\n <div\n class=\"tag tag--info\"\n *ngFor=\"let tag of appContextPathsOrApps$ | async\"\n [attr.data-cy]=\"'branding-tags-cell-renderer--tag-' + (tag.contextPath ? tag.contextPath : tag)\"\n >\n {{ tag | humanizeAppName | async }}\n </div>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { CoreModule, DroppedFile, ModalComponent, ZipService } from '@c8y/ngx-components';\nimport { AddBrandingModalService } from '@c8y/ngx-components/branding/shared/lazy/add-branding-modal';\nimport { firstValueFrom } from 'rxjs';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { StoreBrandingService } from '@c8y/ngx-components/branding/shared/data';\n\n@Component({\n selector: 'c8y-branding-import-modal',\n templateUrl: './branding-import-modal.component.html',\n standalone: true,\n imports: [CoreModule]\n})\nexport class BrandingImportModalComponent {\n @ViewChild(ModalComponent, { static: true }) modal: ModalComponent;\n\n result = new Promise<void>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n files: DroppedFile[] = [];\n loading = false;\n\n private _resovle: () => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private addBrandingModalService: AddBrandingModalService,\n private zip: ZipService,\n private staticAssets: StaticAssetsService,\n private brandings: StoreBrandingService\n ) {}\n\n async droppedFile(event: DroppedFile[]) {\n this.loading = true;\n try {\n this.files = event;\n await this.import(event[0].file);\n } catch (e) {\n console.error(e);\n this.files = [];\n this.loading = false;\n return;\n }\n this.modal._close();\n this._resovle();\n }\n\n async import(file: File) {\n const versionDetails = await this.addBrandingModalService.openAddBrandingModal();\n if (!versionDetails) {\n throw Error('No version details provided');\n }\n\n // verify if branding is already present\n const { variants } = await this.brandings.loadBrandingVariants();\n if (!variants?.length) {\n await this.brandings.getStartedUsingBranding();\n }\n\n const importedZipEntries = await firstValueFrom(this.zip.getEntries(file));\n const staticAssetsEntry = importedZipEntries.find(\n entry => entry.filename === this.staticAssets.fileNames.exportZipName\n );\n if (!staticAssetsEntry) {\n throw Error(\n `Missing \"${this.staticAssets.fileNames.exportZipName}\" file in the uploaded zip.`\n );\n }\n const staticAssetsZip = await firstValueFrom(this.zip.getData(staticAssetsEntry));\n const staticAssetsZipFile = new File([staticAssetsZip], staticAssetsEntry.filename);\n const staticAssetsZipEntries = await firstValueFrom(this.zip.getEntries(staticAssetsZipFile));\n const filesToAdd = new Array<File>();\n let oldAssets: Array<StaticAsset>;\n let newAssets: Array<StaticAsset>;\n for (const entry of staticAssetsZipEntries) {\n if (entry.filename === this.brandings.fileNames.manifest) {\n continue;\n }\n if (entry.filename === this.staticAssets.fileNames.contents) {\n const fileContent = await (await firstValueFrom(this.zip.getData(entry))).text();\n oldAssets = JSON.parse(fileContent);\n continue;\n }\n const file = await firstValueFrom(this.zip.getData(entry));\n filesToAdd.push(new File([file], entry.filename));\n }\n if (filesToAdd.length > 0) {\n const currentStaticAssets = await this.staticAssets.listFilesCached('branding', true);\n newAssets = await this.staticAssets.addFilesToStaticAssets(\n 'branding',\n filesToAdd,\n currentStaticAssets,\n false\n );\n }\n\n const publicOptionsEntry = importedZipEntries.find(\n entry => entry.filename === this.brandings.fileNames.exportZipName\n );\n if (!publicOptionsEntry) {\n throw Error(`Missing \"${this.brandings.fileNames.exportZipName}\" file in the uploaded zip.`);\n }\n const publicOptionsZip = await firstValueFrom(this.zip.getData(publicOptionsEntry));\n const publicOptionsZipFile = new File([publicOptionsZip], publicOptionsEntry.filename);\n\n const publicOptionsFiles = await firstValueFrom(this.zip.getEntries(publicOptionsZipFile));\n const optionsFileEntry = publicOptionsFiles.find(\n entry => entry.filename === this.brandings.fileNames.options\n );\n if (!optionsFileEntry) {\n throw Error(\n `Missing \"${this.brandings.fileNames.options}\" file in \"${this.brandings.fileNames.exportZipName}\" file of the uploaded zip.`\n );\n }\n\n const optionsFile = await firstValueFrom(this.zip.getData(optionsFileEntry));\n let options = JSON.parse(await optionsFile.text());\n\n if (oldAssets.length && newAssets.length) {\n options = this.brandings.replaceBrandingAssetsInBrandingOptions(\n options,\n oldAssets,\n newAssets\n );\n }\n\n const zip = await this.brandings.getBrandingZip(options);\n\n await this.brandings.saveBranding(zip, `${versionDetails.brandingName}-1`, [\n versionDetails.brandingName\n ]);\n }\n\n cancel() {\n this._reject();\n }\n}\n","<c8y-modal\n [title]=\"'Import branding variant'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"import\"></span>\n </ng-container>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <p\n class=\"text-medium text-center text-16\"\n translate\n >\n Easily copy any branding variant from any tenant\n </p>\n <p translate class=\"p-t-8\">\n Export the branding variant from the source tenant and import the .zip file here. This process\n allows you to maintain consistent branding across multiple tenants efficiently.\n </p>\n </div>\n <div\n class=\"p-24 m-r-auto m-l-auto\"\n style=\"max-width: 300px\"\n >\n <c8y-drop-area\n [icon]=\"'upload'\"\n (dropped)=\"droppedFile($event)\"\n [files]=\"files\"\n [accept]=\"'.zip'\"\n [maxAllowedFiles]=\"1\"\n [loading]=\"loading\"\n ></c8y-drop-area>\n </div>\n</c8y-modal>\n","import { Injectable } from '@angular/core';\nimport { BrandingImportModalComponent } from './branding-import-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingImportModalService {\n constructor(private modal: BsModalService) {}\n\n async openBrandingImportModal() {\n let versionDetails: Awaited<BrandingImportModalComponent['result']>;\n try {\n const modalRef = this.modal.show(BrandingImportModalComponent, {\n class: 'modal-sm',\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n}\n","import { Component } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-branding-name-cell-renderer',\n templateUrl: './branding-name-cell-renderer.component.html',\n standalone: true,\n imports: [RouterLink]\n})\nexport class BrandingNameCellRendererComponent {\n name: string;\n routerLink: string;\n constructor(\n context: CellRendererContext,\n private router: Router\n ) {\n this.name = context.value;\n this.routerLink = `${this.router.url}/${context.item.name}`;\n }\n}\n","<a [routerLink]=\"routerLink\">{{ name }}</a>\n","import { Component } from '@angular/core';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-branding-tags-header-cell-renderer',\n templateUrl: './branding-tags-header-cell-renderer.component.html',\n standalone: true,\n imports: [PopoverModule, C8yTranslatePipe]\n})\nexport class BrandingTagsHeaderCellRendererComponent {\n readonly heading = gettext('Applied to');\n readonly popoverContent = gettext(`<p class=\"m-b-8\">Branding can be applied at two levels</p>\n <ul class=\"list-unstyled m-b-0\">\n <li class=\"m-b-4\">\n <strong>Global: </strong>\n <span>Applied to the entire platform, affecting all apps and interfaces.</span>\n </li>\n <li>\n <strong>App-specific: </strong>\n <span>Applied only to selected apps within the platform.</span>\n </li>\n </ul>`);\n}\n","<div class=\"d-flex\">\n <span\n class=\"text-truncate\"\n [title]=\"heading | translate\"\n >\n {{ heading | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm a-s-center\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"applyBrandingPopover\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n <ng-template #applyBrandingPopover>\n <div [innerHTML]=\"popoverContent | translate\"></div>\n </ng-template>\n</div>\n","import { Component } from '@angular/core';\nimport {\n BrandVersion,\n StoreBrandingService,\n BrandingVersionService,\n BrandingTrackingService\n} from '@c8y/ngx-components/branding/shared/data';\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs';\nimport { map, shareReplay, switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n DisplayOptions,\n ModalService,\n Pagination,\n Status,\n ZipService,\n DataGridComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n TitleComponent,\n HelpComponent,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe,\n EmptyStateComponent,\n LoadingComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ApplicationService, IApplication } from '@c8y/client';\nimport { saveAs } from 'file-saver';\nimport { StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ApplyBrandingToAppModalComponent } from '../apply-branding-to-app-modal/apply-branding-to-app-modal.component';\nimport { AddBrandingModalService } from '@c8y/ngx-components/branding/shared/lazy/add-branding-modal';\nimport { BrandingTagsCellRendererComponent } from '../branding-tags-cell-renderer/branding-tags-cell-renderer.component';\nimport { BrandingImportModalService } from '../branding-import-modal/branding-import-modal.service';\nimport { BrandingNameCellRendererComponent } from '../branding-name-cell-renderer/branding-name-cell-renderer.component';\nimport { BrandingTagsHeaderCellRendererComponent } from '../branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component';\nimport { AsyncPipe, NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-branding',\n templateUrl: './branding.component.html',\n standalone: true,\n imports: [\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n TitleComponent,\n HelpComponent,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe,\n EmptyStateComponent,\n LoadingComponent,\n DataGridComponent,\n NgIf,\n AsyncPipe\n ]\n})\nexport class BrandingComponent {\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n callback: (entry: BrandVersion, _reload) => {\n this.editBranding(entry.name);\n }\n },\n {\n type: BuiltInActionType.Export,\n callback: async (entry: BrandVersion, _reload) => {\n await this.exportBranding(entry);\n }\n },\n {\n type: 'preview',\n icon: 'external-link',\n text: gettext('Open preview'),\n callback: async (entry: BrandVersion, _reload) => {\n this.brandings.openPreviewForBranding(entry.name);\n }\n },\n {\n type: 'duplicate',\n icon: 'copy',\n text: gettext('Duplicate'),\n callback: async (entry: BrandVersion, _reload) => {\n await this.duplicateVersion(entry);\n this.refresh();\n }\n },\n {\n type: 'apply-to-app',\n icon: 'form',\n text: gettext('Apply to specific apps'),\n callback: async (entry: BrandVersion, _reload) => {\n await this.applyToApps(entry);\n this.refresh();\n }\n },\n {\n type: 'set-as-default',\n icon: 'globe1',\n text: gettext('Set as global'),\n showIf: (entry: BrandVersion) => {\n if (entry.tags?.includes('latest')) {\n return false;\n }\n return true;\n },\n callback: async (entry: BrandVersion, _reload) => {\n try {\n await this.confirmModal.confirm(\n gettext('Set as global branding'),\n gettext(\n 'Are you sure that you want to set this variant as the global branding? By doing so, this variant will be applied to all apps that do not have a specific branding applied. Do you want to proceed?'\n ),\n Status.INFO\n );\n } catch {\n // did not confirm\n return;\n }\n await this.brandings.markAsActive(entry);\n this.refresh();\n }\n },\n {\n type: BuiltInActionType.Delete,\n showIf: (entry: BrandVersion) => {\n if (entry.tags?.includes('latest')) {\n return false;\n }\n return true;\n },\n callback: async (entry: BrandVersion, _reload) => {\n try {\n await this.confirmModal.confirm(\n gettext('Delete branding variant'),\n gettext(\n 'You are about to delete this branding variant. This action cannot be undone. Do you want to proceed?'\n ),\n Status.DANGER\n );\n } catch {\n // did not confirm\n return;\n }\n\n this.brandingTracking.deleteBrandingVariant();\n await this.applicationService.deleteVersionPackage(entry.publicOptionsApp, {\n version: entry.version\n });\n this.refresh();\n }\n }\n ];\n columns: Column[] = [\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n cellRendererComponent: BrandingNameCellRendererComponent\n },\n {\n name: gettext('Applied to`Applications a branding applies to (table column header)`'),\n path: 'tags',\n filterable: false,\n cellCSSClassName: 'small',\n cellRendererComponent: BrandingTagsCellRendererComponent,\n headerCellRendererComponent: BrandingTagsHeaderCellRendererComponent\n },\n {\n name: 'owner',\n header: gettext('Owner'),\n path: 'owner',\n filterable: false\n },\n {\n name: 'lastUpdated',\n header: gettext('Last updated'),\n path: 'lastUpdated',\n filterable: false\n }\n ];\n currentAppContextPath = 'administration';\n availableBrandingVariants$: Observable<{\n publicOptions: IApplication;\n variants: BrandVersion[];\n }>;\n\n private reloadTrigger = new BehaviorSubject<void>(undefined);\n constructor(\n private brandings: StoreBrandingService,\n private activatedRoute: ActivatedRoute,\n private appState: AppStateService,\n private applicationService: ApplicationService,\n private zip: ZipService,\n private staticAssets: StaticAssetsService,\n private router: Router,\n private modal: BsModalService,\n private confirmModal: ModalService,\n private brandingVersionService: BrandingVersionService,\n private addBrandingModalService: AddBrandingModalService,\n private alert: AlertService,\n private brandingImportModalService: BrandingImportModalService,\n private brandingTracking: BrandingTrackingService\n ) {\n this.currentAppContextPath = this.appState.state.app?.contextPath || this.currentAppContextPath;\n this.availableBrandingVariants$ = this.reloadTrigger.pipe(\n switchMap(() => this.brandings.loadBrandingVariants()),\n // hide the fallback from users\n map(variants => {\n variants.variants = variants.variants.filter(v => !v.tags?.includes('fallback'));\n return variants;\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n }\n\n async deleteAllBrandings(publicOptions?: IApplication) {\n const result = await this.confirmModal.confirm(\n gettext('Delete all branding variants'),\n gettext(\n `<p class=\"m-b-8\">\n This action will permanently remove all custom branding variants. Your tenant will revert\n to the default branding.\n </p>\n <p class=\"m-b-8\">\n Consider exporting your custom branding variants before proceeding, as this action cannot\n be undone.\n </p>\n <p>\n Are you sure you want to continue?\n </p>`\n ),\n Status.DANGER,\n { cancel: gettext('Cancel'), ok: gettext('Delete all') }\n );\n if (result === false || (typeof result === 'object' && !result.confirmed)) {\n return;\n }\n\n this.brandingTracking.deleteAllBrandings();\n\n await this.brandings.deleteAllBrandings(publicOptions);\n this.refresh();\n }\n\n async exportBranding(variant: BrandVersion) {\n this.brandingTracking.exportBranding();\n const branding = await firstValueFrom(this.brandings.getZipForBinary(variant.id));\n const staticAssetsApp = await this.staticAssets.getAppForTenant('branding');\n const staticAssetsZip = await firstValueFrom(\n this.brandings.getZipForBinary(\n staticAssetsApp.activeVersionId,\n this.staticAssets.fileNames.exportZipName\n )\n );\n const blob = await this.zip.createZip([\n { fileName: this.brandings.fileNames.exportZipName, blob: branding },\n { fileName: this.staticAssets.fileNames.exportZipName, blob: staticAssetsZip }\n ]);\n saveAs(blob, `branding-export-${variant.name}-${variant.revision}-${new Date().getTime()}.zip`);\n }\n\n refresh() {\n this.reloadTrigger.next();\n }\n\n async addNewVersion() {\n const versionDetails = await this.addBrandingModalService.openAddBrandingModal();\n if (!versionDetails) {\n this.refresh();\n return;\n }\n let fallBackBranding = {};\n try {\n fallBackBranding = await this.brandings.getBrandingOptionsForVersion('latest');\n } catch (e) {\n console.warn(`Failed to load latest branding`);\n }\n\n this.brandingTracking.addNewVersion();\n\n try {\n await this.brandings.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName),\n fallBackBranding,\n [versionDetails.brandingName]\n );\n await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);\n this.editBranding(versionDetails.brandingName);\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n }\n }\n\n async duplicateVersion(version: BrandVersion) {\n const options = await this.brandings.getBrandingOptionsForVersion(version.version);\n const versionDetails = await this.addBrandingModalService.openDuplicateBrandingModal();\n if (!versionDetails) {\n return;\n }\n\n this.brandingTracking.duplicateVersion();\n\n try {\n await this.brandings.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName),\n options,\n [versionDetails.brandingName]\n );\n await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);\n this.editBranding(versionDetails.brandingName);\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n }\n }\n\n async editBranding(brandingName: string) {\n return this.router.navigate([brandingName, 'edit'], { relativeTo: this.activatedRoute });\n }\n\n async getStartedUsingBranding() {\n const result = await this.confirmModal.confirm(\n gettext(`Get started using branding variants`),\n gettext(\n `<p class=\"m-b-8\">Confirming this action creates two branding variants:</p>\n <ul class=\"m-b-8 p-l-16\">\n <li>A default copy of your current global branding</li>\n <li>Your new customizable variant.</li>\n </ul>\n <p class=\"m-b-8\">\n After customization, you can set your new variant as global or apply it to specific apps.\n </p>\n <p>\n To revert changes, simply set the default branding as global or use the \"Delete all variants\" button at any time.\n </p>`\n )\n );\n if (result === false || (typeof result === 'object' && !result.confirmed)) {\n return;\n }\n\n this.brandingTracking.getStartedUsingBranding();\n\n await this.brandings.getStartedUsingBranding();\n await this.addNewVersion();\n }\n\n async applyToApps(version: BrandVersion) {\n const prefix = 'app-';\n const currentTags = version.tags\n .filter(tag => tag.startsWith(prefix))\n .map(tag => tag.replace(prefix, ''));\n const otherTags = version.tags.filter(tag => !tag.startsWith(prefix));\n let selectedTags: Awaited<ApplyBrandingToAppModalComponent['result']>;\n try {\n const modalRef = this.modal.show(ApplyBrandingToAppModalComponent, {\n initialState: { currentTags },\n ignoreBackdropClick: true,\n keyboard: false\n });\n selectedTags = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n const selectedApps = Object.keys(selectedTags).filter(key => selectedTags[key]);\n\n this.brandingTracking.applyToApps(selectedApps);\n\n const tagsToSet = [...otherTags, ...selectedApps.map(tag => `${prefix}${tag}`)];\n\n await this.removeTagsFromOtherVersions(version.publicOptionsApp, tagsToSet, version.version);\n await this.applicationService.setPackageVersionTag(\n version.publicOptionsApp,\n version.version,\n tagsToSet\n );\n }\n\n async importBranding() {\n try {\n await this.brandingImportModalService.openBrandingImportModal();\n\n this.brandings.refreshTriggerBrandingVariants.next();\n this.reloadTrigger.next();\n } catch (e) {\n // modal closed\n }\n }\n\n private async removeTagsFromOtherVersions(\n publicOptionsApp: IApplication,\n tagsToRemove: string[],\n versionToIgnore?: string\n ) {\n for (const version of publicOptionsApp.applicationVersions) {\n if (version.version === versionToIgnore) {\n continue;\n }\n const removedTags = version.tags.filter(tag => !tagsToRemove.includes(tag));\n if (removedTags.length === version.tags.length) {\n continue;\n }\n await this.applicationService.setPackageVersionTag(\n publicOptionsApp,\n version.version,\n removedTags\n );\n }\n }\n}\n","<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Variants' | translate\"\n [path]=\"'/branding-editor/variants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-help [src]=\"'/docs/enterprise-tenant/customization/#to-configure-branding-settings'\"></c8y-help>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormsModule } from '@angular/forms';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { CoreModule, gettext, MessageBannerService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { StaticAssetsFilePickerComponent } from '@c8y/ngx-components/static-assets';\nimport {\n brandingFormGroupTopLevelEntries,\n brandingFormGroupTopLevelEntriesToUnpack,\n BrandingOptionsJson,\n createGenericBrandingForm,\n TopLevelValues\n} from '@c8y/ngx-components/branding/shared/data';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EditorComponent } from '@c8y/ngx-components/editor';\n\n@Component({\n selector: 'c8y-branding-form',\n templateUrl: './branding-form.component.html',\n standalone: true,\n host: { class: 'd-contents' },\n imports: [\n CoreModule,\n FormsModule,\n CollapseModule,\n StaticAssetsFilePickerComponent,\n EditorComponent\n ]\n})\nexport class BrandingFormComponent implements ControlValueAccessor {\n formGroup: ReturnType<BrandingFormComponent['initForm']>;\n messageBannerHelp = gettext(\n 'Supports markdown. Use {{ headerMark }} for headers, {{ listMark }} for lists, {{ boldMark }} for bold, {{ italicMark }} for italic, and {{ linkMark }} for links.'\n );\n messageBannerHelpParams = {\n headerMark: '`#`',\n listMark: '`*`',\n boldMark: '`**`',\n italicMark: '`_`',\n linkMark: '`[]()`'\n };\n private onTouched: () => void;\n\n private externalValue: BrandingOptionsJson = {};\n private formGroupValueChanges$: BrandingFormComponent['formGroup']['valueChanges'];\n\n constructor(\n private formBuilder: FormBuilder,\n private messageBannerService: MessageBannerService\n ) {\n this.formGroup = this.initForm();\n this.formGroupValueChanges$ = this.formGroup.valueChanges.pipe(takeUntilDestroyed());\n }\n\n writeValue(obj: string): void {\n try {\n const parsedObj = JSON.parse(obj);\n this.externalValue = parsedObj;\n this.applyStateToForm(parsedObj);\n } catch (e) {\n // failed to parse\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.formGroupValueChanges$.subscribe(value => fn(this.convertFormToState(value)));\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n cockieBannerChange(toggleState: boolean) {\n this.formGroup.controls.cookieBanner.patchValue({ cookieBannerDisabled: !toggleState });\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n initForm() {\n return createGenericBrandingForm(this.formBuilder);\n }\n\n applyStateToForm(branding: BrandingOptionsJson) {\n if (!branding) {\n return;\n }\n let toBePatched = brandingFormGroupTopLevelEntries.reduceRight((prev, curr) => {\n if (brandingFormGroupTopLevelEntriesToUnpack.includes(curr as any)) {\n return Object.assign(prev, { [curr]: branding });\n }\n return Object.assign(prev, { [curr]: branding[curr] });\n }, {});\n\n toBePatched = Object.keys(this.formGroup.controls)\n .filter(key => !brandingFormGroupTopLevelEntries.includes(key as any))\n .reduceRight((prev, curr) => {\n return Object.assign(prev, { [curr]: branding.brandingCssVars || {} });\n }, toBePatched);\n this.formGroup.patchValue(toBePatched);\n }\n\n convertFormToState(value: BrandingFormComponent['formGroup']['value']): string {\n const topLevel: TopLevelValues = brandingFormGroupTopLevelEntries.reduceRight((prev, curr) => {\n if (brandingFormGroupTopLevelEntriesToUnpack.includes(curr as any)) {\n return Object.assign(prev, value[curr]);\n }\n return Object.assign(prev, { [curr]: value[curr] });\n }, {});\n const newBrandingCssVars = Object.entries(value).reduceRight((prev, [key, value]) => {\n if (brandingFormGroupTopLevelEntries.includes(key as any)) {\n return prev;\n }\n return Object.assign(prev, value);\n }, {});\n const externalValue: BrandingOptionsJson = cloneDeep(this.externalValue || {});\n Object.assign(externalValue, topLevel);\n const currentCSSVars = externalValue['brandingCssVars'] || {};\n const assignedNewValues = Object.assign(currentCSSVars, newBrandingCssVars);\n externalValue['brandingCssVars'] = assignedNewValues;\n return JSON.stringify(externalValue, null, 2);\n }\n\n previewBanner(): void {\n this.messageBannerService.showBanner();\n }\n}\n","<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","import { gettext } from '@c8y/ngx-components/gettext';\nimport { colorBrandingVars } from '@c8y/ngx-components/branding/shared/data';\n\ntype ColorVariableName = (typeof colorBrandingVars)[number];\n\ntype Color = { label: string; formControlName: ColorVariableName };\n\nexport const formStructure = {\n brandColors: {\n label: gettext('Brand colors'),\n brandColors: {\n label: gettext('Brand colors'),\n colors: [\n {\n label: gettext('Brand primary'),\n formControlName: 'brand-primary'\n },\n {\n label: gettext('Brand light'),\n formControlName: 'brand-light'\n },\n {\n label: gettext('Brand dark'),\n formControlName: 'brand-dark'\n }\n ] as const satisfies Color[]\n },\n shades: {\n label: gettext('Shades'),\n colorColumn: [\n [\n {\n label: 'c8y-brand-10',\n formControlName: 'c8y-brand-10'\n },\n {\n label: 'c8y-brand-20',\n formControlName: 'c8y-brand-20'\n },\n {\n label: 'c8y-brand-30',\n formControlName: 'c8y-brand-30'\n },\n {\n label: 'c8y-brand-40',\n formControlName: 'c8y-brand-40'\n }\n ],\n [\n {\n label: 'c8y-brand-50',\n formControlName: 'c8y-brand-50'\n },\n {\n label: 'c8y-brand-60',\n formControlName: 'c8y-brand-60'\n },\n {\n label: 'c8y-brand-70',\n formControlName: 'c8y-brand-70'\n },\n {\n label: 'c8y-brand-80',\n formControlName: 'c8y-brand-80'\n }\n ]\n ] as const satisfies Color[][]\n }\n },\n statusColors: {\n label: gettext('Status colors'),\n subCategories: [\n {\n label: gettext('Info colors'),\n colors: [\n {\n label: gettext('Info'),\n formControlName: 'palette-status-info'\n },\n {\n label: gettext('Info light'),\n formControlName: 'palette-status-info-light'\n },\n {\n label: gettext('Info dark'),\n formControlName: 'palette-status-info-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Warning colors'),\n colors: [\n {\n label: gettext('Warning'),\n formControlName: 'palette-status-warning'\n },\n {\n label: gettext('Warning light'),\n formControlName: 'palette-status-warning-light'\n },\n {\n label: gettext('Warning dark'),\n formControlName: 'palette-status-warning-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Danger colors'),\n colors: [\n {\n label: gettext('Danger'),\n formControlName: 'palette-status-danger'\n },\n {\n label: gettext('Danger light'),\n formControlName: 'palette-status-danger-light'\n },\n {\n label: gettext('Danger dark'),\n formControlName: 'palette-status-danger-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Success colors'),\n colors: [\n {\n label: gettext('Success'),\n formControlName: 'palette-status-success'\n },\n {\n label: gettext('Success light'),\n formControlName: 'palette-status-success-light'\n },\n {\n label: gettext('Success dark'),\n formControlName: 'palette-status-success-dark'\n }\n ] as const satisfies Color[]\n }\n ]\n },\n actionBar: {\n label: gettext('Action bar'),\n colorColumns: [\n {\n label: gettext('Action bar'),\n colorColumns: [\n [\n {\n label: gettext('Background color'),\n formControlName: 'action-bar-background-default'\n },\n {\n label: gettext('Text color'),\n formControlName: 'action-bar-color-default'\n },\n {\n label: gettext('Icon color'),\n formControlName: 'action-bar-icon-color'\n }\n ],\n [\n {\n label: gettext('Button color'),\n formControlName: 'action-bar-color-actions'\n },\n {\n label: gettext('Button hover color'),\n formControlName: 'action-bar-color-actions-hover'\n }\n ]\n ] as const satisfies Color[][]\n }\n ]\n },\n mainHeader: {\n label: gettext('Main header'),\n colorColumns: [\n {\n label: gettext('Main header'),\n colorColumns: [\n [\n {\n label: gettext('Background color'),\n formControlName: 'header-color'\n },\n {\n label: gettext('Text color'),\n formControlName: 'header-text-color'\n }\n ],\n [\n {\n label: gettext('Button hover color'),\n formControlName: 'header-hover-color'\n }\n ]\n ] as const satisfies Color[][]\n }\n ]\n },\n navigator: {\n label: gettext('Navigator'),\n colorColumns: [\n {\n label: gettext('Navigation'),\n colors: [\n {\n label: gettext('Background color'),\n formControlName: 'navigator-bg-color'\n },\n {\n label: gettext('Text color'),\n formControlName: 'navigator-text-color'\n },\n {\n label: gettext('Separator color'),\n formControlName: 'navigator-separator-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Header'),\n colors: [\n {\n label: gettext('Header background color'),\n formControlName: 'navigator-header-bg'\n },\n {\n label: gettext('Title color'),\n formControlName: 'navigator-title-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Active node'),\n colors: [\n {\n label: gettext('Active background color'),\n formControlName: 'navigator-active-bg'\n },\n {\n label: gettext('Active border color'),\n formControlName: 'navigator-border-active'\n },\n {\n label: gettext('Active text color'),\n formControlName: 'navigator-color-active'\n }\n ] as const satisfies Color[]\n }\n ]\n },\n rightDrawer: {\n label: gettext('Right drawer'),\n colorColumns: [\n {\n label: gettext('Panel'),\n colors: [\n {\n label: gettext('Background color'),\n formControlName: 'right-drawer-background-default'\n },\n {\n label: gettext('Text color'),\n formControlName: 'right-drawer-text-color-default'\n },\n {\n label: gettext('Text muted color'),\n formControlName: 'right-drawer-text-color-muted'\n },\n {\n label: gettext('Separator color'),\n formControlName: 'right-drawer-separator-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Interactive'),\n colors: [\n {\n label: gettext('Link color'),\n formControlName: 'right-drawer-link-color'\n },\n {\n label: gettext('Link hover color'),\n formControlName: 'right-drawer-link-color-hover'\n }\n ] as const satisfies Color[]\n }\n ]\n }\n} as const;\n","import { Component, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormsModule } from '@angular/forms';\nimport {\n map,\n distinctUntilChanged,\n pairwise,\n delay,\n switchMap,\n filter,\n startWith,\n take\n} from 'rxjs/operators';\nimport {\n CoreModule,\n FilesService,\n GENERIC_FILE_TYPE,\n ThemeSwitcherService,\n ColorInputComponent\n} from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { StaticAssetsFilePickerComponent } from '@c8y/ngx-components/static-assets';\nimport {\n BrandingOptionsJson,\n BrandingShadesService,\n createBrandingForm\n} from '@c8y/ngx-components/branding/shared/data';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, defer, interval, merge, of } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\nimport { formStructure } from './branding-theme-form-structure';\n\n@Component({\n selector: 'c8y-branding-theme-form',\n templateUrl: './branding-theme-form.component.html',\n standalone: true,\n host: { class: 'd-contents' },\n imports: [CoreModule, FormsModule, StaticAssetsFilePickerComponent, ColorInputComponent]\n})\nexport class BrandingThemeFormComponent implements ControlValueAccessor, OnDestroy {\n readonly formStructure = formStructure;\n formGroup: ReturnType<BrandingThemeFormComponent['initForm']>;\n imageFileExtensions: string[];\n resetShadesButtonEnabled$: Observable<boolean>;\n private onTouched: () => void;\n\n private externalValue: BrandingOptionsJson = {};\n private formGroupValueChanges$: BrandingThemeFormComponent['formGroup']['valueChanges'];\n private addDarkThemePrefix = false;\n private readonly varsToConvertToHeight = [\n 'navigator-platform-logo-height',\n 'dark-navigator-platform-logo-height'\n ] as const;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private formBuilder: FormBuilder,\n private filesService: FilesService,\n private brandingShades: BrandingShadesService,\n private themeSwitcher: ThemeSwitcherService\n ) {\n this.addDarkThemePrefix = !!this.activatedRoute.snapshot.data.dark;\n this.themeSwitcher.temporaryChangeTheme(this.addDarkThemePrefix ? 'dark' : 'light');\n this.formGroup = this.initForm();\n this.formGroupValueChanges$ = this.formGroup.valueChanges.pipe(takeUntilDestroyed());\n this.imageFileExtensions = this.filesService\n .mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.IMAGE])\n .filter(ext => ext !== 'ico');\n\n const hasCustomShades$ = merge(\n this.formGroup.valueChanges,\n defer(() => of(this.formGroup.value))\n ).pipe(\n takeUntilDestroyed(),\n map(tmp => this.brandingShades.hasCustomShadesSet(tmp['brand-primary'], tmp)),\n distinctUntilChanged()\n );\n this.resetShadesButtonEnabled$ = merge(\n defer(() => of(this.formGroup.controls['brand-primary'].status)),\n this.formGroup.controls['brand-primary'].statusChanges\n ).pipe(\n // statusChanges emits 'PENDING' when the form control is async validating\n // https://github.com/angular/angular/issues/41519\n switchMap(status => {\n if (status === 'PENDING') {\n return interval(200).pipe(\n map(() => this.formGroup.controls['brand-primary'].status),\n filter(stat => stat !== 'PENDING'),\n take(1),\n startWith(status)\n );\n }\n return of(status);\n }),\n switchMap(status => {\n if (status !== 'VALID') {\n return of(false);\n }\n return hasCustomShades$;\n })\n );\n\n const brandPrimaryFormControl = this.formGroup.controls['brand-primary'];\n brandPrimaryFormControl.valueChanges\n .pipe(\n filter(color => this.brandingShades.isValidShadeColor(color)),\n takeUntilDestroyed(),\n distinctUntilChanged(),\n pairwise(),\n delay(5)\n )\n .subscribe(([prev, curr]) => {\n try {\n if (!this.brandingShades.hasCustomShadesSet(prev, this.formGroup.value)) {\n this.regenerateShadesBasedOnPrimaryColor(curr);\n }\n } catch (e) {\n console.log(e);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.themeSwitcher.resetTemporaryTheme();\n }\n\n regenerateShadesBasedOnPrimaryColor(color?: string) {\n const newShades = this.brandingShades.getShadeColorBrandingCssVars(\n color || this.formGroup.value['brand-primary']\n );\n this.formGroup.patchValue(newShades);\n }\n\n writeValue(obj: string): void {\n try {\n const parsedObj = JSON.parse(obj);\n this.externalValue = parsedObj;\n this.applyStateToForm(parsedObj);\n } catch (e) {\n // failed to parse\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.formGroupValueChanges$.subscribe(value => fn(this.convertFormToState(value)));\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n initForm() {\n return createBrandingForm(this.formBuilder);\n }\n\n applyStateToForm(branding: BrandingOptionsJson) {\n if (!branding) {\n return;\n }\n const toBePatched = {};\n\n const prefix = this.getPrefix();\n Object.entries(branding.brandingCssVars || {}).forEach(([key, value]) => {\n if (prefix && !key.startsWith(prefix)) {\n return;\n }\n const keyInForm = key.replace(prefix, '');\n if (this.varsToConvertToHeight.includes(keyInForm as any) && typeof value === 'string') {\n toBePatched[keyInForm] = Number.parseInt(value.replace(/[a-zA-Z%]/, '') || '0');\n return;\n }\n toBePatched[keyInForm] = value;\n });\n this.formGroup.patchValue(toBePatched);\n }\n\n convertFormToState(value: BrandingThemeFormComponent['formGroup']['value']): string {\n const prefixedBrandingCssVars = {};\n const prefix = this.getPrefix();\n Object.entries(value).forEach(([key, value]) => {\n prefixedBrandingCssVars[`${prefix}${key}`] = value;\n });\n const externalValue: BrandingOptionsJson = cloneDeep(this.externalValue || {});\n const currentCSSVars = externalValue['brandingCssVars'] || {};\n const assignedNewValues = Object.assign(currentCSSVars, prefixedBrandingCssVars);\n for (const key of this.varsToConvertToHeight) {\n const value = assignedNewValues[key];\n if (typeof value === 'number') {\n assignedNewValues[key] += 'px';\n }\n }\n externalValue['brandingCssVars'] = assignedNewValues;\n return JSON.stringify(externalValue, null, 2);\n }\n\n private getPrefix() {\n return this.addDarkThemePrefix ? 'dark-' : '';\n }\n}\n","<c8y-help [src]=\"'/docs/enterprise-tenant/customization/#light-dark-theme-tab'\"></c8y-help>\n\n<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Logos -->\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\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Logos\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 class=\"c8y-fieldset p-24\">\n <legend translate>Brand logo</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"brand-logo-img\"\n translate\n >\n Brand logo file\n </label>\n <c8y-static-assets-file-picker\n name=\"brand-logo-img\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"true\"\n [size]=\"150\"\n formControlName=\"brand-logo-img\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"brand-logo-img-height\"\n for=\"brand-logo-img-height\"\n translate\n >\n Brand logo height\n </label>\n <input\n class=\"form-control\"\n id=\"brand-logo-img-height\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: '50' } }}\"\n name=\"brand-logo-img-height\"\n type=\"number\"\n formControlName=\"brand-logo-img-height\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Navigator logo</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-platform-logo\"\n translate\n >\n Navigator logo file\n </label>\n <c8y-static-assets-file-picker\n name=\"navigator-platform-logo\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"true\"\n [size]=\"150\"\n formControlName=\"navigator-platform-logo\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-platform-logo-height\"\n for=\"navigator-platform-logo-height\"\n translate\n >\n Navigator logo height\n </label>\n <input\n class=\"form-control\"\n id=\"navigator-platform-logo-height\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: '50' } }}\"\n name=\"navigator-platform-logo-height\"\n type=\"number\"\n [min]=\"1\"\n formControlName=\"navigator-platform-logo-height\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Login image</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"login-platform-animation-img\"\n translate\n >\n Login image file\n </label>\n <c8y-static-assets-file-picker\n name=\"login-platform-animation-img\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"false\"\n [size]=\"150\"\n formControlName=\"login-platform-animation-img\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Brand colors -->\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 >\n {{ formStructure.brandColors.label | translate}}\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-4\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ formStructure.brandColors.brandColors.label | translate}}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of formStructure.brandColors.brandColors.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-8\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ formStructure.brandColors.shades.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let colorColumn of formStructure.brandColors.shades.colorColumn\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n data-cy=\"branding-reset-shades-button\"\n (click)=\"regenerateShadesBasedOnPrimaryColor()\"\n [disabled]=\"!(resetShadesButtonEnabled$ | async)\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reset shades</span>\n </button>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Status colors -->\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 >\n {{ formStructure.statusColors.label | translate }}\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\" *ngFor=\"let subCategory of formStructure.statusColors.subCategories\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ subCategory.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subCategory.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Generic -->\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 Generic\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 class=\"c8y-fieldset p-24\">\n <legend translate>Generic colors</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"body-background-color\"\n for=\"body-background-color\"\n translate\n >\n Body background color\n </label>\n <c8y-color-input\n name=\"body-background-color\"\n formControlName=\"body-background-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"text-color\"\n for=\"text-color\"\n translate\n >\n Text color\n </label>\n <c8y-color-input\n name=\"text-color\"\n formControlName=\"text-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"text-muted\"\n for=\"text-muted\"\n translate\n >\n Text muted color\n </label>\n <c8y-color-input\n name=\"text-muted\"\n formControlName=\"text-muted\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Interactive</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"link-color\"\n for=\"link-color\"\n translate\n >\n Link color\n </label>\n <c8y-color-input\n name=\"link-color\"\n formControlName=\"link-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"link-hover-color\"\n for=\"link-hover-color\"\n translate\n >\n Link hover color\n </label>\n <c8y-color-input\n name=\"link-hover-color\"\n formControlName=\"link-hover-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"btn-border-radius-base\"\n for=\"btn-border-radius-base\"\n translate\n >\n Button border-radius\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. 4' | translate }}\"\n name=\"btn-border-radius-base\"\n type=\"number\"\n formControlName=\"btn-border-radius-base\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Action bar -->\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 >\n {{ formStructure.actionBar.label | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset class=\"c8y-fieldset p-24\" *ngFor=\"let colorColumn of formStructure.actionBar.colorColumns\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let subColorColumn of colorColumn.colorColumns\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subColorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Main header -->\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 >\n {{ formStructure.mainHeader.label | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset class=\"c8y-fieldset p-24\" *ngFor=\"let colorColumn of formStructure.mainHeader.colorColumns\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let subColorColumn of colorColumn.colorColumns\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subColorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Navigator -->\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 >\n {{ formStructure.navigator.label }}\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-4\" *ngFor=\"let colorColumn of formStructure.navigator.colorColumns\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Right drawer -->\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 >\n {{ formStructure.rightDrawer.label | translate }}\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\" *ngFor=\"let colorColumn of formStructure.rightDrawer.colorColumns\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport { AlertService, AppStateService, CoreModule, gettext } from '@c8y/ngx-components';\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs';\nimport { map, distinctUntilChanged, switchMap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash-es';\nimport {\n ApplyBrandingLocallyService,\n BrandingOptionsJson,\n StoreBrandingService\n} from '@c8y/ngx-components/branding/shared/data';\nimport { AsyncValidator, ControlValueAccessor, FormControl } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-edit-branding-router-outlet',\n templateUrl: './edit-branding-router-outlet.component.html',\n standalone: true,\n imports: [RouterOutlet, CoreModule]\n})\nexport class EditBrandingRouterOutletComponent implements OnDestroy {\n brandingName$: Observable<string>;\n formControl = new FormControl<string>(undefined);\n fallbackBranding$: Observable<BrandingOptionsJson>;\n tabName$: Observable<string>;\n isGlobalBranding$: Observable<boolean>;\n private newBranding = new BehaviorSubject<BrandingOptionsJson>(null);\n private currentlyDisplayedComponent = new BehaviorSubject<\n (ControlValueAccessor & Partial<AsyncValidator>) | null\n >(null);\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private store: StoreBrandingService,\n private router: Router,\n private alert: AlertService,\n private applyBrandingService: ApplyBrandingLocallyService,\n private appState: AppStateService\n ) {\n this.isGlobalBranding$ = this.activatedRoute.data.pipe(\n map(({ tags }) => {\n return tags?.includes('latest');\n })\n );\n this.tabName$ = this.currentlyDisplayedComponent.pipe(\n switchMap(() => this.activatedRoute.firstChild.data),\n map(data => data.tabName)\n );\n this.brandingName$ = this.activatedRoute.params.pipe(map(params => params.name));\n this.formControl.addValidators(control => {\n try {\n JSON.parse(control.value);\n return null;\n } catch (e) {\n return { invalidJson: true };\n }\n });\n this.fallbackBranding$ = this.activatedRoute.data.pipe(map(data => data.fallbackBranding));\n this.activatedRoute.data\n .pipe(takeUntilDestroyed(), distinctUntilChanged())\n .subscribe(({ branding }) => {\n this.applyBrandingService.applyBranding(branding);\n this.formControl.setValue(JSON.stringify(branding, null, 2));\n });\n this.currentlyDisplayedComponent.pipe(takeUntilDestroyed()).subscribe(component => {\n if (!component) {\n return;\n }\n this.formControl.clearAsyncValidators();\n component.registerOnChange(value => this.onBrandingVarChanges(value));\n component.writeValue(this.formControl.value);\n if (component.validate) {\n this.formControl.addAsyncValidators(form => component.validate(form));\n if (component.registerOnValidatorChange) {\n component.registerOnValidatorChange(() => this.formControl.updateValueAndValidity());\n }\n }\n\n this.formControl.updateValueAndValidity();\n });\n }\n\n ngOnDestroy(): void {\n this.applyBrandingService.resetBranding();\n }\n\n routeActivated(event: ControlValueAccessor & Partial<AsyncValidator>) {\n this.currentlyDisplayedComponent.next(event);\n }\n\n async saveBranding() {\n try {\n const currentBranding = this.newBranding.value;\n const tagsOfCurrentVersion = await firstValueFrom(\n this.activatedRoute.data.pipe(map(data => data.tags))\n );\n\n const currentBrandingName = this.activatedRoute.snapshot.params.name;\n const { variants } = await this.store.loadBrandingVariants();\n const currentBrandingObj = variants.find(v => v.tags.includes(currentBrandingName));\n const currentVersion = currentBrandingObj.version;\n await this.store.saveExistingBranding(currentBranding, currentVersion, tagsOfCurrentVersion);\n this.router.navigate(\n ['../../', currentBrandingName, this.activatedRoute.snapshot.routeConfig.path],\n {\n relativeTo: this.activatedRoute,\n replaceUrl: true\n }\n );\n this.alert.success(\n gettext(\n 'Branding saved. To apply this branding, refresh any open window that might be affected.'\n )\n );\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n console.warn(e);\n }\n }\n\n cancel() {\n this.router.navigate(['branding-editor']);\n }\n\n async openPreview() {\n const name = this.activatedRoute.snapshot.params.name;\n this.store.openPreviewForBranding(name);\n }\n\n async markAsActive() {\n const currentBrandingName = this.activatedRoute.snapshot.params.name;\n const { variants } = await this.store.loadBrandingVariants();\n const currentBrandingObj = variants.find(v => v.tags.includes(currentBrandingName));\n await this.store.markAsActive(currentBrandingObj);\n }\n\n async onBrandingVarChanges(value: string) {\n this.formControl.setValue(value);\n\n try {\n const parsedValue: BrandingOptionsJson = JSON.parse(value);\n const fallbackBranding: BrandingOptionsJson = cloneDeep(\n await firstValueFrom(this.fallbackBranding$)\n );\n this.cleanUpObjects(parsedValue);\n this.cleanUpObjects(parsedValue.brandingCssVars);\n for (const key in fallbackBranding) {\n if (parsedValue[key] === undefined) {\n parsedValue[key] = fallbackBranding[key];\n }\n\n if (typeof parsedValue[key] === 'object' && typeof fallbackBranding[key] === 'object') {\n parsedValue[key] = Object.assign(fallbackBranding[key], parsedValue[key]);\n }\n }\n this.applyBrandingService.applyBranding(parsedValue);\n this.newBranding.next(parsedValue);\n } catch (e) {\n // not valid JSON;\n }\n }\n\n private cleanUpObjects(value: Record<string, any>) {\n if (!value) {\n return;\n }\n Object.keys(value).forEach(key => {\n if (value[key] === null || value[key] === '') {\n delete value[key];\n }\n });\n }\n}\n","<c8y-title>{{ brandingName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"brandingName$ | async\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"card card--fullpage content-fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">{{ brandingName$ | async }} — {{ tabName$ | async | translate }}</div>\n </div>\n <router-outlet\n class=\"d-contents\"\n (activate)=\"routeActivated($event)\"\n ></router-outlet>\n\n <div class=\"card-footer separator\">\n <!-- footer content -->\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-cancel\"\n (click)=\"cancel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n data-cy=\"branding-save\"\n [disabled]=\"formControl.invalid\"\n (click)=\"saveBranding()\"\n translate\n >\n Save\n </button>\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-save-as\"\n [disabled]=\"formControl.invalid\"\n (click)=\"openPreview()\"\n translate\n >\n Open preview\n </button>\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-set-as-latest\"\n (click)=\"markAsActive()\"\n [disabled]=\"isGlobalBranding$ | async\"\n translate\n >\n Set as global\n </button>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { StaticAssetsFileListComponent } from '@c8y/ngx-components/static-assets/modal';\nimport {\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n ClipboardService,\n TitleComponent,\n ActionBarItemComponent,\n FilesService,\n GENERIC_FILE_TYPE\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { StaticAsset } from '@c8y/ngx-components/static-assets/data';\nimport { NgForOf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-branding-assets',\n templateUrl: './branding-assets.component.html',\n standalone: true,\n imports: [\n StaticAssetsFileListComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n ActionBarItemComponent,\n NgForOf,\n FormsModule\n ]\n})\nexport class BrandingAssetsComponent {\n filterOptions = [\n {\n label: gettext('All'),\n value: []\n },\n {\n label: gettext('Images'),\n value: this.filesService.mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.IMAGE])\n },\n {\n label: gettext('Fonts'),\n value: this.filesService.mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.FONT])\n }\n ];\n supportedFileExtensions = this.filterOptions[0].value;\n\n constructor(\n private clipboard: ClipboardService,\n private filesService: FilesService,\n private translate: TranslateService\n ) {}\n\n onItemSelected(file: StaticAsset) {\n const successMessage = this.translate.instant(\n gettext('Copied asset file path to clipboard. You can use it e.g. in custom CSS.')\n );\n this.clipboard.writeText(file.path, { success: successMessage });\n }\n}\n","<c8y-title translate>Branding assets</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'files'\"\n [label]=\"'Branding assets' | translate\"\n [path]=\"'/branding-editor/assets'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [(ngModel)]=\"supportedFileExtensions\"\n >\n <option\n *ngFor=\"let filterOption of filterOptions\"\n [ngValue]=\"filterOption.value\"\n >\n {{ filterOption.label | translate }}\n </option>\n </select>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage\">\n <c8y-static-assets-file-list\n [supportedFileExtensions]=\"supportedFileExtensions\"\n (itemSelected)=\"onItemSelected($event)\"\n ></c8y-static-assets-file-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ApplyBrandingToAppService","i1","i2","i3","i4","i5","i6","i7","i8.BrandingImportModalService","gettext"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-branding-shared-lazy.mjs","sources":["../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app.service.ts","../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app-modal.component.ts","../../branding/shared/lazy/apply-branding-to-app-modal/apply-branding-to-app-modal.component.html","../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.ts","../../branding/shared/lazy/branding-tags-cell-renderer/branding-tags-cell-renderer.component.html","../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.ts","../../branding/shared/lazy/branding-import-modal/branding-import-modal.component.html","../../branding/shared/lazy/branding-import-modal/branding-import-modal.service.ts","../../branding/shared/lazy/branding-name-cell-renderer/branding-name-cell-renderer.component.ts","../../branding/shared/lazy/branding-name-cell-renderer/branding-name-cell-renderer.component.html","../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.ts","../../branding/shared/lazy/branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component.html","../../branding/shared/lazy/branding/branding.component.ts","../../branding/shared/lazy/branding/branding.component.html","../../branding/shared/lazy/branding-form/branding-form.component.ts","../../branding/shared/lazy/branding-form/branding-form.component.html","../../branding/shared/lazy/branding-theme-form/branding-theme-form-structure.ts","../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.ts","../../branding/shared/lazy/branding-theme-form/branding-theme-form.component.html","../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts","../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.html","../../branding/shared/lazy/branding-assets/branding-assets.component.ts","../../branding/shared/lazy/branding-assets/branding-assets.component.html","../../branding/shared/lazy/c8y-ngx-components-branding-shared-lazy.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ApplicationService, ApplicationType, IApplication } from '@c8y/client';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingToAppService {\n constructor(private apps: ApplicationService) {}\n\n async getBrandableApps(): Promise<IApplication[]> {\n const { data: apps } = await this.apps.list({\n pageSize: 2000,\n dropOverwrittenApps: true,\n type: ApplicationType.HOSTED\n });\n const appsWithDynamicOptionsUrl = this.getHostedAppsWhereDynamicOptionsUrlIsUndefined(apps);\n return appsWithDynamicOptionsUrl;\n }\n\n getHostedAppsWhereDynamicOptionsUrlIsUndefined(apps: IApplication[]) {\n return apps.filter(app => {\n const manifest = app.manifest;\n if (!manifest) {\n return false;\n }\n // filter out none web sdk based apps\n if (!manifest.webSdkVersion) {\n return false;\n }\n // filter out packages\n if (manifest.isPackage) {\n return false;\n }\n const dynamicOptionsUrl = manifest.dynamicOptionsUrl;\n\n return dynamicOptionsUrl === undefined || dynamicOptionsUrl === true;\n });\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ApplyBrandingToAppService } from './apply-branding-to-app.service';\nimport { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AsyncPipe, NgForOf, NgIf } from '@angular/common';\nimport {\n AppIconComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n HumanizeAppNamePipe,\n ListItemBodyComponent,\n ListItemCheckboxComponent,\n ListItemComponent,\n ListItemIconComponent,\n ModalComponent\n} from '@c8y/ngx-components';\nimport { Observable, merge, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { uniqBy } from 'lodash-es';\n\n@Component({\n selector: 'c8y-apply-branding-to-app-modal',\n templateUrl: './apply-branding-to-app-modal.component.html',\n standalone: true,\n imports: [\n NgIf,\n AsyncPipe,\n ReactiveFormsModule,\n ModalComponent,\n C8yTranslatePipe,\n C8yTranslateDirective,\n ListItemComponent,\n ListItemIconComponent,\n ListItemCheckboxComponent,\n AppIconComponent,\n ListItemBodyComponent,\n HumanizeAppNamePipe,\n NgForOf\n ]\n})\nexport class ApplyBrandingToAppModalComponent implements OnInit {\n @Input() currentTags: string[];\n brandableApps: Awaited<ReturnType<ApplyBrandingToAppService['getBrandableApps']>> = [];\n form: ReturnType<ApplyBrandingToAppModalComponent['initForm']>;\n numberOfSelectedApps$: Observable<number>;\n\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n\n private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n constructor(\n private apply: ApplyBrandingToAppService,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n const brandableApps = await this.apply.getBrandableApps();\n this.brandableApps = uniqBy(brandableApps, 'contextPath');\n const tags = this.brandableApps.map(app => app.contextPath);\n this.form = this.initForm(tags);\n if (this.currentTags.length) {\n this.form.patchValue(\n this.currentTags.reduce((prev, curr) => Object.assign(prev, { [curr]: true }), {})\n );\n }\n this.numberOfSelectedApps$ = merge(this.form.valueChanges, of(this.form.value)).pipe(\n map(value => Object.values(value).filter(Boolean).length)\n );\n }\n\n save() {\n this._resovle(this.form.value);\n }\n\n cancel() {\n this._reject();\n }\n\n private initForm(tags: string[]) {\n const tagsFormMap: Record<string, FormControl<boolean>> = tags.reduceRight(\n (prev, curr) => Object.assign(prev, { [curr]: this.formBuilder.control(false) }),\n {}\n );\n return this.formBuilder.group(tagsFormMap);\n }\n}\n","<c8y-modal\n [title]=\"'Apply branding to apps' | translate\"\n [disabled]=\"!form || form.invalid || !brandableApps.length\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"palette\"></span>\n </ng-container>\n <c8y-list-group\n class=\"m-b-0 no-border-last\"\n *ngIf=\"form\"\n [formGroup]=\"form\"\n >\n <c8y-li>\n <p\n class=\"text-center text-medium\"\n *ngIf=\"numberOfSelectedApps$ | async as numberOfApps; else noapps\"\n translate\n >\n {{ numberOfApps }} apps selected for branding\n </p>\n <ng-template #noapps>\n <p\n class=\"text-center text-medium\"\n translate\n >\n No apps selected for branding\n </p>\n </ng-template>\n </c8y-li>\n <c8y-li *ngFor=\"let app of brandableApps\">\n <c8y-li-icon>\n <c8y-app-icon\n class=\"icon-40\"\n [app]=\"app\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <c8y-li-checkbox\n [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + app.contextPath\"\n [formControlName]=\"app.contextPath\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"p-t-8 d-block\">{{ app | humanizeAppName | async }}</c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-modal>\n","import { AsyncPipe, NgForOf, NgIf } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { AppStateService, CellRendererContext, HumanizeAppNamePipe } from '@c8y/ngx-components';\nimport { Observable, of } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-branding-tags-cell-renderer',\n templateUrl: './branding-tags-cell-renderer.component.html',\n standalone: true,\n imports: [NgIf, NgForOf, HumanizeAppNamePipe, AsyncPipe]\n})\nexport class BrandingTagsCellRendererComponent {\n hasLatestTag: boolean;\n appContextPathsOrApps$: Observable<Array<string | IApplication>>;\n constructor(\n context: CellRendererContext,\n private appState: AppStateService\n ) {\n const tags: string[] = context.value || [];\n this.hasLatestTag = tags.some(tag => tag === 'latest');\n const appSpecificTags = tags\n .filter(tag => tag.startsWith('app-'))\n .map(tag => tag.replace('app-', ''));\n\n this.appContextPathsOrApps$ = this.getAppContextPathsOrApps$(appSpecificTags);\n }\n\n private getAppContextPathsOrApps$(\n appContextPaths: string[]\n ): Observable<Array<string | IApplication>> {\n if (!appContextPaths.length) {\n return of([]);\n }\n return this.appState.currentAppsOfUser.pipe(\n map(apps => {\n return appContextPaths.map(tag => {\n const app = apps.find(app => app.contextPath === tag);\n return app || tag;\n });\n }),\n startWith(appContextPaths)\n );\n }\n}\n","<div class=\"d-flex a-i-center gap-4 flex-wrap\">\n <div\n class=\"tag tag--success\"\n *ngIf=\"hasLatestTag\"\n translate\n >\n Global\n </div>\n <div\n class=\"tag tag--info\"\n *ngFor=\"let tag of appContextPathsOrApps$ | async\"\n [attr.data-cy]=\"'branding-tags-cell-renderer--tag-' + (tag.contextPath ? tag.contextPath : tag)\"\n >\n {{ tag | humanizeAppName | async }}\n </div>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { CoreModule, DroppedFile, ModalComponent, ZipService } from '@c8y/ngx-components';\nimport { AddBrandingModalService } from '@c8y/ngx-components/branding/shared/lazy/add-branding-modal';\nimport { firstValueFrom } from 'rxjs';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { StoreBrandingService } from '@c8y/ngx-components/branding/shared/data';\n\n@Component({\n selector: 'c8y-branding-import-modal',\n templateUrl: './branding-import-modal.component.html',\n standalone: true,\n imports: [CoreModule]\n})\nexport class BrandingImportModalComponent {\n @ViewChild(ModalComponent, { static: true }) modal: ModalComponent;\n\n result = new Promise<void>((resolve, reject) => {\n this._resovle = resolve;\n this._reject = reject;\n });\n files: DroppedFile[] = [];\n loading = false;\n\n private _resovle: () => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private addBrandingModalService: AddBrandingModalService,\n private zip: ZipService,\n private staticAssets: StaticAssetsService,\n private brandings: StoreBrandingService\n ) {}\n\n async droppedFile(event: DroppedFile[]) {\n this.loading = true;\n try {\n this.files = event;\n await this.import(event[0].file);\n } catch (e) {\n console.error(e);\n this.files = [];\n this.loading = false;\n return;\n }\n this.modal._close();\n this._resovle();\n }\n\n async import(file: File) {\n const versionDetails = await this.addBrandingModalService.openAddBrandingModal();\n if (!versionDetails) {\n throw Error('No version details provided');\n }\n\n // verify if branding is already present\n const { variants } = await this.brandings.loadBrandingVariants();\n if (!variants?.length) {\n await this.brandings.getStartedUsingBranding();\n }\n\n const importedZipEntries = await firstValueFrom(this.zip.getEntries(file));\n const staticAssetsEntry = importedZipEntries.find(\n entry => entry.filename === this.staticAssets.fileNames.exportZipName\n );\n if (!staticAssetsEntry) {\n throw Error(\n `Missing \"${this.staticAssets.fileNames.exportZipName}\" file in the uploaded zip.`\n );\n }\n const staticAssetsZip = await firstValueFrom(this.zip.getData(staticAssetsEntry));\n const staticAssetsZipFile = new File([staticAssetsZip], staticAssetsEntry.filename);\n const staticAssetsZipEntries = await firstValueFrom(this.zip.getEntries(staticAssetsZipFile));\n const filesToAdd = new Array<File>();\n let oldAssets: Array<StaticAsset>;\n let newAssets: Array<StaticAsset>;\n\n const contentsFileEntry = staticAssetsZipEntries.find(\n entry => entry.filename === this.staticAssets.fileNames.contents\n );\n if (contentsFileEntry) {\n const fileContent = await (await firstValueFrom(this.zip.getData(contentsFileEntry))).text();\n oldAssets = JSON.parse(fileContent);\n }\n for (const entry of staticAssetsZipEntries) {\n if (\n entry.filename === this.brandings.fileNames.manifest ||\n entry.filename === this.staticAssets.fileNames.contents\n ) {\n continue;\n }\n const file = await firstValueFrom(this.zip.getData(entry));\n const metadata = oldAssets?.find(asset => asset.fileName === entry.filename);\n if (metadata) {\n filesToAdd.push(\n new File([file], entry.filename, {\n type: metadata.type,\n lastModified: metadata.lastModified\n })\n );\n } else {\n filesToAdd.push(new File([file], entry.filename));\n }\n }\n if (filesToAdd.length > 0) {\n const currentStaticAssets = await this.staticAssets.listFilesCached('branding', true);\n newAssets = await this.staticAssets.addFilesToStaticAssets(\n 'branding',\n filesToAdd,\n currentStaticAssets,\n false\n );\n }\n\n const publicOptionsEntry = importedZipEntries.find(\n entry => entry.filename === this.brandings.fileNames.exportZipName\n );\n if (!publicOptionsEntry) {\n throw Error(`Missing \"${this.brandings.fileNames.exportZipName}\" file in the uploaded zip.`);\n }\n const publicOptionsZip = await firstValueFrom(this.zip.getData(publicOptionsEntry));\n const publicOptionsZipFile = new File([publicOptionsZip], publicOptionsEntry.filename);\n\n const publicOptionsFiles = await firstValueFrom(this.zip.getEntries(publicOptionsZipFile));\n const optionsFileEntry = publicOptionsFiles.find(\n entry => entry.filename === this.brandings.fileNames.options\n );\n if (!optionsFileEntry) {\n throw Error(\n `Missing \"${this.brandings.fileNames.options}\" file in \"${this.brandings.fileNames.exportZipName}\" file of the uploaded zip.`\n );\n }\n\n const optionsFile = await firstValueFrom(this.zip.getData(optionsFileEntry));\n let options = JSON.parse(await optionsFile.text());\n\n if (oldAssets.length && newAssets.length) {\n options = this.brandings.replaceBrandingAssetsInBrandingOptions(\n options,\n oldAssets,\n newAssets\n );\n }\n\n const zip = await this.brandings.getBrandingZip(options);\n\n await this.brandings.saveBranding(zip, `${versionDetails.brandingName}-1`, [\n versionDetails.brandingName\n ]);\n }\n\n cancel() {\n this._reject();\n }\n}\n","<c8y-modal\n [title]=\"'Import branding variant'\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"import\"></span>\n </ng-container>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <p\n class=\"text-medium text-center text-16\"\n translate\n >\n Easily copy any branding variant from any tenant\n </p>\n <p translate class=\"p-t-8\">\n Export the branding variant from the source tenant and import the .zip file here. This process\n allows you to maintain consistent branding across multiple tenants efficiently.\n </p>\n </div>\n <div\n class=\"p-24 m-r-auto m-l-auto\"\n style=\"max-width: 300px\"\n >\n <c8y-drop-area\n [icon]=\"'upload'\"\n (dropped)=\"droppedFile($event)\"\n [files]=\"files\"\n [accept]=\"'.zip'\"\n [maxAllowedFiles]=\"1\"\n [loading]=\"loading\"\n ></c8y-drop-area>\n </div>\n</c8y-modal>\n","import { Injectable } from '@angular/core';\nimport { BrandingImportModalComponent } from './branding-import-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingImportModalService {\n constructor(private modal: BsModalService) {}\n\n async openBrandingImportModal() {\n let versionDetails: Awaited<BrandingImportModalComponent['result']>;\n try {\n const modalRef = this.modal.show(BrandingImportModalComponent, {\n class: 'modal-sm',\n ignoreBackdropClick: true,\n keyboard: false\n });\n versionDetails = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n return versionDetails;\n }\n}\n","import { Component } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-branding-name-cell-renderer',\n templateUrl: './branding-name-cell-renderer.component.html',\n standalone: true,\n imports: [RouterLink]\n})\nexport class BrandingNameCellRendererComponent {\n name: string;\n routerLink: string;\n constructor(\n context: CellRendererContext,\n private router: Router\n ) {\n this.name = context.value;\n this.routerLink = `${this.router.url}/${context.item.name}`;\n }\n}\n","<a [routerLink]=\"routerLink\">{{ name }}</a>\n","import { Component } from '@angular/core';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-branding-tags-header-cell-renderer',\n templateUrl: './branding-tags-header-cell-renderer.component.html',\n standalone: true,\n imports: [PopoverModule, C8yTranslatePipe]\n})\nexport class BrandingTagsHeaderCellRendererComponent {\n readonly heading = gettext('Applied to');\n readonly popoverContent = gettext(`<p class=\"m-b-8\">Branding can be applied at two levels</p>\n <ul class=\"list-unstyled m-b-0\">\n <li class=\"m-b-4\">\n <strong>Global: </strong>\n <span>Applied to the entire platform, affecting all apps and interfaces.</span>\n </li>\n <li>\n <strong>App-specific: </strong>\n <span>Applied only to selected apps within the platform.</span>\n </li>\n </ul>`);\n}\n","<div class=\"d-flex\">\n <span\n class=\"text-truncate\"\n [title]=\"heading | translate\"\n >\n {{ heading | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm a-s-center\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"applyBrandingPopover\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n <ng-template #applyBrandingPopover>\n <div [innerHTML]=\"popoverContent | translate\"></div>\n </ng-template>\n</div>\n","import { Component } from '@angular/core';\nimport {\n BrandVersion,\n StoreBrandingService,\n BrandingVersionService,\n BrandingTrackingService\n} from '@c8y/ngx-components/branding/shared/data';\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs';\nimport { map, shareReplay, switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BuiltInActionType,\n Column,\n DisplayOptions,\n ModalService,\n Pagination,\n Status,\n ZipService,\n DataGridComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n TitleComponent,\n HelpComponent,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe,\n EmptyStateComponent,\n LoadingComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ApplicationService, IApplication } from '@c8y/client';\nimport { saveAs } from 'file-saver';\nimport { StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ApplyBrandingToAppModalComponent } from '../apply-branding-to-app-modal/apply-branding-to-app-modal.component';\nimport { AddBrandingModalService } from '@c8y/ngx-components/branding/shared/lazy/add-branding-modal';\nimport { BrandingTagsCellRendererComponent } from '../branding-tags-cell-renderer/branding-tags-cell-renderer.component';\nimport { BrandingImportModalService } from '../branding-import-modal/branding-import-modal.service';\nimport { BrandingNameCellRendererComponent } from '../branding-name-cell-renderer/branding-name-cell-renderer.component';\nimport { BrandingTagsHeaderCellRendererComponent } from '../branding-tags-header-cell-renderer/branding-tags-header-cell-renderer.component';\nimport { AsyncPipe, NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-branding',\n templateUrl: './branding.component.html',\n standalone: true,\n imports: [\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n TitleComponent,\n HelpComponent,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe,\n EmptyStateComponent,\n LoadingComponent,\n DataGridComponent,\n NgIf,\n AsyncPipe\n ]\n})\nexport class BrandingComponent {\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n callback: (entry: BrandVersion, _reload) => {\n this.editBranding(entry.name);\n }\n },\n {\n type: BuiltInActionType.Export,\n callback: async (entry: BrandVersion, _reload) => {\n await this.exportBranding(entry);\n }\n },\n {\n type: 'preview',\n icon: 'external-link',\n text: gettext('Open preview'),\n callback: async (entry: BrandVersion, _reload) => {\n this.brandings.openPreviewForBranding(entry.name);\n }\n },\n {\n type: 'duplicate',\n icon: 'copy',\n text: gettext('Duplicate'),\n callback: async (entry: BrandVersion, _reload) => {\n await this.duplicateVersion(entry);\n this.refresh();\n }\n },\n {\n type: 'apply-to-app',\n icon: 'form',\n text: gettext('Apply to specific apps'),\n callback: async (entry: BrandVersion, _reload) => {\n await this.applyToApps(entry);\n this.refresh();\n }\n },\n {\n type: 'set-as-default',\n icon: 'globe1',\n text: gettext('Set as global'),\n showIf: (entry: BrandVersion) => {\n if (entry.tags?.includes('latest')) {\n return false;\n }\n return true;\n },\n callback: async (entry: BrandVersion, _reload) => {\n try {\n await this.confirmModal.confirm(\n gettext('Set as global branding'),\n gettext(\n 'Are you sure that you want to set this variant as the global branding? By doing so, this variant will be applied to all apps that do not have a specific branding applied. Do you want to proceed?'\n ),\n Status.INFO\n );\n } catch {\n // did not confirm\n return;\n }\n await this.brandings.markAsActive(entry);\n this.refresh();\n }\n },\n {\n type: BuiltInActionType.Delete,\n showIf: (entry: BrandVersion) => {\n if (entry.tags?.includes('latest')) {\n return false;\n }\n return true;\n },\n callback: async (entry: BrandVersion, _reload) => {\n try {\n await this.confirmModal.confirm(\n gettext('Delete branding variant'),\n gettext(\n 'You are about to delete this branding variant. This action cannot be undone. Do you want to proceed?'\n ),\n Status.DANGER\n );\n } catch {\n // did not confirm\n return;\n }\n\n this.brandingTracking.deleteBrandingVariant();\n await this.applicationService.deleteVersionPackage(entry.publicOptionsApp, {\n version: entry.version\n });\n this.refresh();\n }\n }\n ];\n columns: Column[] = [\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n cellRendererComponent: BrandingNameCellRendererComponent\n },\n {\n name: gettext('Applied to`Applications a branding applies to (table column header)`'),\n path: 'tags',\n filterable: false,\n cellCSSClassName: 'small',\n cellRendererComponent: BrandingTagsCellRendererComponent,\n headerCellRendererComponent: BrandingTagsHeaderCellRendererComponent\n },\n {\n name: 'owner',\n header: gettext('Owner'),\n path: 'owner',\n filterable: false\n },\n {\n name: 'lastUpdated',\n header: gettext('Last updated'),\n path: 'lastUpdated',\n filterable: false\n }\n ];\n currentAppContextPath = 'administration';\n availableBrandingVariants$: Observable<{\n publicOptions: IApplication;\n variants: BrandVersion[];\n }>;\n\n private reloadTrigger = new BehaviorSubject<void>(undefined);\n constructor(\n private brandings: StoreBrandingService,\n private activatedRoute: ActivatedRoute,\n private appState: AppStateService,\n private applicationService: ApplicationService,\n private zip: ZipService,\n private staticAssets: StaticAssetsService,\n private router: Router,\n private modal: BsModalService,\n private confirmModal: ModalService,\n private brandingVersionService: BrandingVersionService,\n private addBrandingModalService: AddBrandingModalService,\n private alert: AlertService,\n private brandingImportModalService: BrandingImportModalService,\n private brandingTracking: BrandingTrackingService\n ) {\n this.currentAppContextPath = this.appState.state.app?.contextPath || this.currentAppContextPath;\n this.availableBrandingVariants$ = this.reloadTrigger.pipe(\n switchMap(() => this.brandings.loadBrandingVariants()),\n // hide the fallback from users\n map(variants => {\n variants.variants = variants.variants.filter(v => !v.tags?.includes('fallback'));\n return variants;\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n }\n\n async deleteAllBrandings(publicOptions?: IApplication) {\n const result = await this.confirmModal.confirm(\n gettext('Delete all branding variants'),\n gettext(\n `<p class=\"m-b-8\">\n This action will permanently remove all custom branding variants. Your tenant will revert\n to the default branding.\n </p>\n <p class=\"m-b-8\">\n Consider exporting your custom branding variants before proceeding, as this action cannot\n be undone.\n </p>\n <p>\n Are you sure you want to continue?\n </p>`\n ),\n Status.DANGER,\n { cancel: gettext('Cancel'), ok: gettext('Delete all') }\n );\n if (result === false || (typeof result === 'object' && !result.confirmed)) {\n return;\n }\n\n this.brandingTracking.deleteAllBrandings();\n\n await this.brandings.deleteAllBrandings(publicOptions);\n this.refresh();\n }\n\n async exportBranding(variant: BrandVersion) {\n this.brandingTracking.exportBranding();\n const branding = await firstValueFrom(this.brandings.getZipForBinary(variant.id));\n const staticAssetsApp = await this.staticAssets.getAppForTenant('branding');\n const staticAssetsZip = await firstValueFrom(\n this.brandings.getZipForBinary(\n staticAssetsApp.activeVersionId,\n this.staticAssets.fileNames.exportZipName\n )\n );\n const blob = await this.zip.createZip([\n { fileName: this.brandings.fileNames.exportZipName, blob: branding },\n { fileName: this.staticAssets.fileNames.exportZipName, blob: staticAssetsZip }\n ]);\n saveAs(blob, `branding-export-${variant.name}-${variant.revision}-${new Date().getTime()}.zip`);\n }\n\n refresh() {\n this.reloadTrigger.next();\n }\n\n async addNewVersion() {\n const versionDetails = await this.addBrandingModalService.openAddBrandingModal();\n if (!versionDetails) {\n this.refresh();\n return;\n }\n let fallBackBranding = {};\n try {\n fallBackBranding = await this.brandings.getBrandingOptionsForVersion('latest');\n } catch (e) {\n console.warn(`Failed to load latest branding`);\n }\n\n this.brandingTracking.addNewVersion();\n\n try {\n await this.brandings.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName),\n fallBackBranding,\n [versionDetails.brandingName]\n );\n await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);\n this.editBranding(versionDetails.brandingName);\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n }\n }\n\n async duplicateVersion(version: BrandVersion) {\n const options = await this.brandings.getBrandingOptionsForVersion(version.version);\n const versionDetails = await this.addBrandingModalService.openDuplicateBrandingModal();\n if (!versionDetails) {\n return;\n }\n\n this.brandingTracking.duplicateVersion();\n\n try {\n await this.brandings.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(versionDetails.brandingName),\n options,\n [versionDetails.brandingName]\n );\n await this.brandings.waitForBrandingToBePresent(versionDetails.brandingName);\n this.editBranding(versionDetails.brandingName);\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n }\n }\n\n async editBranding(brandingName: string) {\n return this.router.navigate([brandingName, 'edit'], { relativeTo: this.activatedRoute });\n }\n\n async getStartedUsingBranding() {\n const result = await this.confirmModal.confirm(\n gettext(`Get started using branding variants`),\n gettext(\n `<p class=\"m-b-8\">Confirming this action creates two branding variants:</p>\n <ul class=\"m-b-8 p-l-16\">\n <li>A default copy of your current global branding</li>\n <li>Your new customizable variant.</li>\n </ul>\n <p class=\"m-b-8\">\n After customization, you can set your new variant as global or apply it to specific apps.\n </p>\n <p>\n To revert changes, simply set the default branding as global or use the \"Delete all variants\" button at any time.\n </p>`\n )\n );\n if (result === false || (typeof result === 'object' && !result.confirmed)) {\n return;\n }\n\n this.brandingTracking.getStartedUsingBranding();\n\n await this.brandings.getStartedUsingBranding();\n await this.addNewVersion();\n }\n\n async applyToApps(version: BrandVersion) {\n const prefix = 'app-';\n const currentTags = version.tags\n .filter(tag => tag.startsWith(prefix))\n .map(tag => tag.replace(prefix, ''));\n const otherTags = version.tags.filter(tag => !tag.startsWith(prefix));\n let selectedTags: Awaited<ApplyBrandingToAppModalComponent['result']>;\n try {\n const modalRef = this.modal.show(ApplyBrandingToAppModalComponent, {\n initialState: { currentTags },\n ignoreBackdropClick: true,\n keyboard: false\n });\n selectedTags = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n\n const selectedApps = Object.keys(selectedTags).filter(key => selectedTags[key]);\n\n this.brandingTracking.applyToApps(selectedApps);\n\n const tagsToSet = [...otherTags, ...selectedApps.map(tag => `${prefix}${tag}`)];\n\n await this.removeTagsFromOtherVersions(version.publicOptionsApp, tagsToSet, version.version);\n await this.applicationService.setPackageVersionTag(\n version.publicOptionsApp,\n version.version,\n tagsToSet\n );\n }\n\n async importBranding() {\n try {\n await this.brandingImportModalService.openBrandingImportModal();\n\n this.brandings.refreshTriggerBrandingVariants.next();\n this.reloadTrigger.next();\n } catch (e) {\n // modal closed\n }\n }\n\n private async removeTagsFromOtherVersions(\n publicOptionsApp: IApplication,\n tagsToRemove: string[],\n versionToIgnore?: string\n ) {\n for (const version of publicOptionsApp.applicationVersions) {\n if (version.version === versionToIgnore) {\n continue;\n }\n const removedTags = version.tags.filter(tag => !tagsToRemove.includes(tag));\n if (removedTags.length === version.tags.length) {\n continue;\n }\n await this.applicationService.setPackageVersionTag(\n publicOptionsApp,\n version.version,\n removedTags\n );\n }\n }\n}\n","<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Variants' | translate\"\n [path]=\"'/branding-editor/variants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-help [src]=\"'/docs/enterprise-tenant/customization/#to-configure-branding-settings'\"></c8y-help>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormsModule } from '@angular/forms';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, MessageBannerService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { StaticAssetsFilePickerComponent } from '@c8y/ngx-components/static-assets';\nimport {\n brandingFormGroupTopLevelEntries,\n brandingFormGroupTopLevelEntriesToUnpack,\n BrandingOptionsJson,\n createGenericBrandingForm,\n TopLevelValues\n} from '@c8y/ngx-components/branding/shared/data';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EditorComponent } from '@c8y/ngx-components/editor';\n\n@Component({\n selector: 'c8y-branding-form',\n templateUrl: './branding-form.component.html',\n standalone: true,\n host: { class: 'd-contents' },\n imports: [\n CoreModule,\n FormsModule,\n CollapseModule,\n StaticAssetsFilePickerComponent,\n EditorComponent\n ]\n})\nexport class BrandingFormComponent implements ControlValueAccessor {\n formGroup: ReturnType<BrandingFormComponent['initForm']>;\n messageBannerHelp = gettext(\n 'Supports markdown. Use {{ headerMark }} for headers, {{ listMark }} for lists, {{ boldMark }} for bold, {{ italicMark }} for italic, and {{ linkMark }} for links.'\n );\n messageBannerHelpParams = {\n headerMark: '`#`',\n listMark: '`*`',\n boldMark: '`**`',\n italicMark: '`_`',\n linkMark: '`[]()`'\n };\n private onTouched: () => void;\n\n private externalValue: BrandingOptionsJson = {};\n private formGroupValueChanges$: BrandingFormComponent['formGroup']['valueChanges'];\n\n constructor(\n private formBuilder: FormBuilder,\n private messageBannerService: MessageBannerService\n ) {\n this.formGroup = this.initForm();\n this.formGroupValueChanges$ = this.formGroup.valueChanges.pipe(takeUntilDestroyed());\n }\n\n writeValue(obj: string): void {\n try {\n const parsedObj = JSON.parse(obj);\n this.externalValue = parsedObj;\n this.applyStateToForm(parsedObj);\n } catch (e) {\n // failed to parse\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.formGroupValueChanges$.subscribe(value => fn(this.convertFormToState(value)));\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n cockieBannerChange(toggleState: boolean) {\n this.formGroup.controls.cookieBanner.patchValue({ cookieBannerDisabled: !toggleState });\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n initForm() {\n return createGenericBrandingForm(this.formBuilder);\n }\n\n applyStateToForm(branding: BrandingOptionsJson) {\n if (!branding) {\n return;\n }\n let toBePatched = brandingFormGroupTopLevelEntries.reduceRight((prev, curr) => {\n if (brandingFormGroupTopLevelEntriesToUnpack.includes(curr as any)) {\n return Object.assign(prev, { [curr]: branding });\n }\n return Object.assign(prev, { [curr]: branding[curr] });\n }, {});\n\n toBePatched = Object.keys(this.formGroup.controls)\n .filter(key => !brandingFormGroupTopLevelEntries.includes(key as any))\n .reduceRight((prev, curr) => {\n return Object.assign(prev, { [curr]: branding.brandingCssVars || {} });\n }, toBePatched);\n this.formGroup.patchValue(toBePatched);\n }\n\n convertFormToState(value: BrandingFormComponent['formGroup']['value']): string {\n const topLevel: TopLevelValues = brandingFormGroupTopLevelEntries.reduceRight((prev, curr) => {\n if (brandingFormGroupTopLevelEntriesToUnpack.includes(curr as any)) {\n return Object.assign(prev, value[curr]);\n }\n return Object.assign(prev, { [curr]: value[curr] });\n }, {});\n const newBrandingCssVars = Object.entries(value).reduceRight((prev, [key, value]) => {\n if (brandingFormGroupTopLevelEntries.includes(key as any)) {\n return prev;\n }\n return Object.assign(prev, value);\n }, {});\n const externalValue: BrandingOptionsJson = cloneDeep(this.externalValue || {});\n Object.assign(externalValue, topLevel);\n const currentCSSVars = externalValue['brandingCssVars'] || {};\n const assignedNewValues = Object.assign(currentCSSVars, newBrandingCssVars);\n externalValue['brandingCssVars'] = assignedNewValues;\n return JSON.stringify(externalValue, null, 2);\n }\n\n previewBanner(): void {\n this.messageBannerService.showBanner();\n }\n}\n","<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","import { gettext } from '@c8y/ngx-components/gettext';\nimport { colorBrandingVars } from '@c8y/ngx-components/branding/shared/data';\n\ntype ColorVariableName = (typeof colorBrandingVars)[number];\n\ntype Color = { label: string; formControlName: ColorVariableName };\n\nexport const formStructure = {\n brandColors: {\n label: gettext('Brand colors'),\n brandColors: {\n label: gettext('Brand colors'),\n colors: [\n {\n label: gettext('Brand primary'),\n formControlName: 'brand-primary'\n },\n {\n label: gettext('Brand light'),\n formControlName: 'brand-light'\n },\n {\n label: gettext('Brand dark'),\n formControlName: 'brand-dark'\n }\n ] as const satisfies Color[]\n },\n shades: {\n label: gettext('Shades'),\n colorColumn: [\n [\n {\n label: 'c8y-brand-10',\n formControlName: 'c8y-brand-10'\n },\n {\n label: 'c8y-brand-20',\n formControlName: 'c8y-brand-20'\n },\n {\n label: 'c8y-brand-30',\n formControlName: 'c8y-brand-30'\n },\n {\n label: 'c8y-brand-40',\n formControlName: 'c8y-brand-40'\n }\n ],\n [\n {\n label: 'c8y-brand-50',\n formControlName: 'c8y-brand-50'\n },\n {\n label: 'c8y-brand-60',\n formControlName: 'c8y-brand-60'\n },\n {\n label: 'c8y-brand-70',\n formControlName: 'c8y-brand-70'\n },\n {\n label: 'c8y-brand-80',\n formControlName: 'c8y-brand-80'\n }\n ]\n ] as const satisfies Color[][]\n }\n },\n statusColors: {\n label: gettext('Status colors'),\n subCategories: [\n {\n label: gettext('Info colors'),\n colors: [\n {\n label: gettext('Info'),\n formControlName: 'palette-status-info'\n },\n {\n label: gettext('Info light'),\n formControlName: 'palette-status-info-light'\n },\n {\n label: gettext('Info dark'),\n formControlName: 'palette-status-info-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Warning colors'),\n colors: [\n {\n label: gettext('Warning'),\n formControlName: 'palette-status-warning'\n },\n {\n label: gettext('Warning light'),\n formControlName: 'palette-status-warning-light'\n },\n {\n label: gettext('Warning dark'),\n formControlName: 'palette-status-warning-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Danger colors'),\n colors: [\n {\n label: gettext('Danger'),\n formControlName: 'palette-status-danger'\n },\n {\n label: gettext('Danger light'),\n formControlName: 'palette-status-danger-light'\n },\n {\n label: gettext('Danger dark'),\n formControlName: 'palette-status-danger-dark'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Success colors'),\n colors: [\n {\n label: gettext('Success'),\n formControlName: 'palette-status-success'\n },\n {\n label: gettext('Success light'),\n formControlName: 'palette-status-success-light'\n },\n {\n label: gettext('Success dark'),\n formControlName: 'palette-status-success-dark'\n }\n ] as const satisfies Color[]\n }\n ]\n },\n actionBar: {\n label: gettext('Action bar'),\n colorColumns: [\n {\n label: gettext('Action bar'),\n colorColumns: [\n [\n {\n label: gettext('Background color'),\n formControlName: 'action-bar-background-default'\n },\n {\n label: gettext('Text color'),\n formControlName: 'action-bar-color-default'\n },\n {\n label: gettext('Icon color'),\n formControlName: 'action-bar-icon-color'\n }\n ],\n [\n {\n label: gettext('Button color'),\n formControlName: 'action-bar-color-actions'\n },\n {\n label: gettext('Button hover color'),\n formControlName: 'action-bar-color-actions-hover'\n }\n ]\n ] as const satisfies Color[][]\n }\n ]\n },\n mainHeader: {\n label: gettext('Main header'),\n colorColumns: [\n {\n label: gettext('Main header'),\n colorColumns: [\n [\n {\n label: gettext('Background color'),\n formControlName: 'header-color'\n },\n {\n label: gettext('Text color'),\n formControlName: 'header-text-color'\n }\n ],\n [\n {\n label: gettext('Button hover color'),\n formControlName: 'header-hover-color'\n }\n ]\n ] as const satisfies Color[][]\n }\n ]\n },\n navigator: {\n label: gettext('Navigator'),\n colorColumns: [\n {\n label: gettext('Navigation'),\n colors: [\n {\n label: gettext('Background color'),\n formControlName: 'navigator-bg-color'\n },\n {\n label: gettext('Text color'),\n formControlName: 'navigator-text-color'\n },\n {\n label: gettext('Separator color'),\n formControlName: 'navigator-separator-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Header'),\n colors: [\n {\n label: gettext('Header background color'),\n formControlName: 'navigator-header-bg'\n },\n {\n label: gettext('Title color'),\n formControlName: 'navigator-title-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Active node'),\n colors: [\n {\n label: gettext('Active background color'),\n formControlName: 'navigator-active-bg'\n },\n {\n label: gettext('Active border color'),\n formControlName: 'navigator-border-active'\n },\n {\n label: gettext('Active text color'),\n formControlName: 'navigator-color-active'\n }\n ] as const satisfies Color[]\n }\n ]\n },\n rightDrawer: {\n label: gettext('Right drawer'),\n colorColumns: [\n {\n label: gettext('Panel'),\n colors: [\n {\n label: gettext('Background color'),\n formControlName: 'right-drawer-background-default'\n },\n {\n label: gettext('Text color'),\n formControlName: 'right-drawer-text-color-default'\n },\n {\n label: gettext('Text muted color'),\n formControlName: 'right-drawer-text-color-muted'\n },\n {\n label: gettext('Separator color'),\n formControlName: 'right-drawer-separator-color'\n }\n ] as const satisfies Color[]\n },\n {\n label: gettext('Interactive'),\n colors: [\n {\n label: gettext('Link color'),\n formControlName: 'right-drawer-link-color'\n },\n {\n label: gettext('Link hover color'),\n formControlName: 'right-drawer-link-color-hover'\n }\n ] as const satisfies Color[]\n }\n ]\n }\n} as const;\n","import { Component, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, FormsModule } from '@angular/forms';\nimport {\n map,\n distinctUntilChanged,\n pairwise,\n delay,\n switchMap,\n filter,\n startWith,\n take\n} from 'rxjs/operators';\nimport {\n CoreModule,\n FilesService,\n GENERIC_FILE_TYPE,\n ThemeSwitcherService,\n ColorInputComponent\n} from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { StaticAssetsFilePickerComponent } from '@c8y/ngx-components/static-assets';\nimport {\n BrandingOptionsJson,\n BrandingShadesService,\n createBrandingForm\n} from '@c8y/ngx-components/branding/shared/data';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, defer, interval, merge, of } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\nimport { formStructure } from './branding-theme-form-structure';\n\n@Component({\n selector: 'c8y-branding-theme-form',\n templateUrl: './branding-theme-form.component.html',\n standalone: true,\n host: { class: 'd-contents' },\n imports: [CoreModule, FormsModule, StaticAssetsFilePickerComponent, ColorInputComponent]\n})\nexport class BrandingThemeFormComponent implements ControlValueAccessor, OnDestroy {\n readonly formStructure = formStructure;\n formGroup: ReturnType<BrandingThemeFormComponent['initForm']>;\n imageFileExtensions: string[];\n resetShadesButtonEnabled$: Observable<boolean>;\n private onTouched: () => void;\n\n private externalValue: BrandingOptionsJson = {};\n private formGroupValueChanges$: BrandingThemeFormComponent['formGroup']['valueChanges'];\n private addDarkThemePrefix = false;\n private readonly varsToConvertToHeight = [\n 'navigator-platform-logo-height',\n 'dark-navigator-platform-logo-height'\n ] as const;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private formBuilder: FormBuilder,\n private filesService: FilesService,\n private brandingShades: BrandingShadesService,\n private themeSwitcher: ThemeSwitcherService\n ) {\n this.addDarkThemePrefix = !!this.activatedRoute.snapshot.data.dark;\n this.themeSwitcher.temporaryChangeTheme(this.addDarkThemePrefix ? 'dark' : 'light');\n this.formGroup = this.initForm();\n this.formGroupValueChanges$ = this.formGroup.valueChanges.pipe(takeUntilDestroyed());\n this.imageFileExtensions = this.filesService\n .mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.IMAGE])\n .filter(ext => ext !== 'ico');\n\n const hasCustomShades$ = merge(\n this.formGroup.valueChanges,\n defer(() => of(this.formGroup.value))\n ).pipe(\n takeUntilDestroyed(),\n map(tmp => this.brandingShades.hasCustomShadesSet(tmp['brand-primary'], tmp)),\n distinctUntilChanged()\n );\n this.resetShadesButtonEnabled$ = merge(\n defer(() => of(this.formGroup.controls['brand-primary'].status)),\n this.formGroup.controls['brand-primary'].statusChanges\n ).pipe(\n // statusChanges emits 'PENDING' when the form control is async validating\n // https://github.com/angular/angular/issues/41519\n switchMap(status => {\n if (status === 'PENDING') {\n return interval(200).pipe(\n map(() => this.formGroup.controls['brand-primary'].status),\n filter(stat => stat !== 'PENDING'),\n take(1),\n startWith(status)\n );\n }\n return of(status);\n }),\n switchMap(status => {\n if (status !== 'VALID') {\n return of(false);\n }\n return hasCustomShades$;\n })\n );\n\n const brandPrimaryFormControl = this.formGroup.controls['brand-primary'];\n brandPrimaryFormControl.valueChanges\n .pipe(\n filter(color => this.brandingShades.isValidShadeColor(color)),\n takeUntilDestroyed(),\n distinctUntilChanged(),\n pairwise(),\n delay(5)\n )\n .subscribe(([prev, curr]) => {\n try {\n if (!this.brandingShades.hasCustomShadesSet(prev, this.formGroup.value)) {\n this.regenerateShadesBasedOnPrimaryColor(curr);\n }\n } catch (e) {\n console.log(e);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.themeSwitcher.resetTemporaryTheme();\n }\n\n regenerateShadesBasedOnPrimaryColor(color?: string) {\n const newShades = this.brandingShades.getShadeColorBrandingCssVars(\n color || this.formGroup.value['brand-primary']\n );\n this.formGroup.patchValue(newShades);\n }\n\n writeValue(obj: string): void {\n try {\n const parsedObj = JSON.parse(obj);\n this.externalValue = parsedObj;\n this.applyStateToForm(parsedObj);\n } catch (e) {\n // failed to parse\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.formGroupValueChanges$.subscribe(value => fn(this.convertFormToState(value)));\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n initForm() {\n return createBrandingForm(this.formBuilder);\n }\n\n applyStateToForm(branding: BrandingOptionsJson) {\n if (!branding) {\n return;\n }\n const toBePatched = {};\n\n const prefix = this.getPrefix();\n Object.entries(branding.brandingCssVars || {}).forEach(([key, value]) => {\n if (prefix && !key.startsWith(prefix)) {\n return;\n }\n const keyInForm = key.replace(prefix, '');\n if (this.varsToConvertToHeight.includes(keyInForm as any) && typeof value === 'string') {\n toBePatched[keyInForm] = Number.parseInt(value.replace(/[a-zA-Z%]/, '') || '0');\n return;\n }\n toBePatched[keyInForm] = value;\n });\n this.formGroup.patchValue(toBePatched);\n }\n\n convertFormToState(value: BrandingThemeFormComponent['formGroup']['value']): string {\n const prefixedBrandingCssVars = {};\n const prefix = this.getPrefix();\n Object.entries(value).forEach(([key, value]) => {\n prefixedBrandingCssVars[`${prefix}${key}`] = value;\n });\n const externalValue: BrandingOptionsJson = cloneDeep(this.externalValue || {});\n const currentCSSVars = externalValue['brandingCssVars'] || {};\n const assignedNewValues = Object.assign(currentCSSVars, prefixedBrandingCssVars);\n for (const key of this.varsToConvertToHeight) {\n const value = assignedNewValues[key];\n if (typeof value === 'number') {\n assignedNewValues[key] += 'px';\n }\n }\n externalValue['brandingCssVars'] = assignedNewValues;\n return JSON.stringify(externalValue, null, 2);\n }\n\n private getPrefix() {\n return this.addDarkThemePrefix ? 'dark-' : '';\n }\n}\n","<c8y-help [src]=\"'/docs/enterprise-tenant/customization/#light-dark-theme-tab'\"></c8y-help>\n\n<div\n class=\"inner-scroll\"\n [formGroup]=\"formGroup\"\n>\n <!-- Logos -->\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\n class=\"text-normal text-right text-left-xs m-b-16\"\n translate\n >\n Logos\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 class=\"c8y-fieldset p-24\">\n <legend translate>Brand logo</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"brand-logo-img\"\n translate\n >\n Brand logo file\n </label>\n <c8y-static-assets-file-picker\n name=\"brand-logo-img\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"true\"\n [size]=\"150\"\n formControlName=\"brand-logo-img\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"brand-logo-img-height\"\n for=\"brand-logo-img-height\"\n translate\n >\n Brand logo height\n </label>\n <input\n class=\"form-control\"\n id=\"brand-logo-img-height\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: '50' } }}\"\n name=\"brand-logo-img-height\"\n type=\"number\"\n formControlName=\"brand-logo-img-height\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Navigator logo</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-platform-logo\"\n translate\n >\n Navigator logo file\n </label>\n <c8y-static-assets-file-picker\n name=\"navigator-platform-logo\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"true\"\n [size]=\"150\"\n formControlName=\"navigator-platform-logo\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"navigator-platform-logo-height\"\n for=\"navigator-platform-logo-height\"\n translate\n >\n Navigator logo height\n </label>\n <input\n class=\"form-control\"\n id=\"navigator-platform-logo-height\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: '50' } }}\"\n name=\"navigator-platform-logo-height\"\n type=\"number\"\n [min]=\"1\"\n formControlName=\"navigator-platform-logo-height\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Login image</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"login-platform-animation-img\"\n translate\n >\n Login image file\n </label>\n <c8y-static-assets-file-picker\n name=\"login-platform-animation-img\"\n [supportedFileExtensions]=\"imageFileExtensions\"\n [isCSSURL]=\"false\"\n [size]=\"150\"\n formControlName=\"login-platform-animation-img\"\n ></c8y-static-assets-file-picker>\n <c8y-messages [helpMessage]=\"'Supported files: *.png, *.svg, *.jpg' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Brand colors -->\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 >\n {{ formStructure.brandColors.label | translate}}\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-4\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ formStructure.brandColors.brandColors.label | translate}}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of formStructure.brandColors.brandColors.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-8\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ formStructure.brandColors.shades.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let colorColumn of formStructure.brandColors.shades.colorColumn\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n data-cy=\"branding-reset-shades-button\"\n (click)=\"regenerateShadesBasedOnPrimaryColor()\"\n [disabled]=\"!(resetShadesButtonEnabled$ | async)\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reset shades</span>\n </button>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Status colors -->\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 >\n {{ formStructure.statusColors.label | translate }}\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\" *ngFor=\"let subCategory of formStructure.statusColors.subCategories\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ subCategory.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subCategory.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Generic -->\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 Generic\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 class=\"c8y-fieldset p-24\">\n <legend translate>Generic colors</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"body-background-color\"\n for=\"body-background-color\"\n translate\n >\n Body background color\n </label>\n <c8y-color-input\n name=\"body-background-color\"\n formControlName=\"body-background-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"text-color\"\n for=\"text-color\"\n translate\n >\n Text color\n </label>\n <c8y-color-input\n name=\"text-color\"\n formControlName=\"text-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"text-muted\"\n for=\"text-muted\"\n translate\n >\n Text muted color\n </label>\n <c8y-color-input\n name=\"text-muted\"\n formControlName=\"text-muted\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n <div class=\"col-md-6\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend translate>Interactive</legend>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"link-color\"\n for=\"link-color\"\n translate\n >\n Link color\n </label>\n <c8y-color-input\n name=\"link-color\"\n formControlName=\"link-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"link-hover-color\"\n for=\"link-hover-color\"\n translate\n >\n Link hover color\n </label>\n <c8y-color-input\n name=\"link-hover-color\"\n formControlName=\"link-hover-color\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n <c8y-form-group class=\"m-b-32\">\n <label\n title=\"btn-border-radius-base\"\n for=\"btn-border-radius-base\"\n translate\n >\n Button border-radius\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. 4' | translate }}\"\n name=\"btn-border-radius-base\"\n type=\"number\"\n formControlName=\"btn-border-radius-base\"\n />\n <c8y-messages [helpMessage]=\"'Value is applied in px' | translate\"></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Action bar -->\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 >\n {{ formStructure.actionBar.label | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset class=\"c8y-fieldset p-24\" *ngFor=\"let colorColumn of formStructure.actionBar.colorColumns\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let subColorColumn of colorColumn.colorColumns\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subColorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Main header -->\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 >\n {{ formStructure.mainHeader.label | translate }}\n </h4>\n </div>\n <div class=\"col-xs-12 col-sm-9 col-md-10\">\n <fieldset class=\"c8y-fieldset p-24\" *ngFor=\"let colorColumn of formStructure.mainHeader.colorColumns\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngFor=\"let subColorColumn of colorColumn.colorColumns\">\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of subColorColumn\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <!-- Navigator -->\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 >\n {{ formStructure.navigator.label }}\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-4\" *ngFor=\"let colorColumn of formStructure.navigator.colorColumns\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Right drawer -->\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 >\n {{ formStructure.rightDrawer.label | translate }}\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\" *ngFor=\"let colorColumn of formStructure.rightDrawer.colorColumns\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ colorColumn.label | translate }}</legend>\n <c8y-form-group class=\"m-b-32\" *ngFor=\"let color of colorColumn.colors\">\n <label\n [title]=\"color.formControlName\"\n [for]=\"color.formControlName\"\n >\n {{ color.label | translate }}\n </label>\n <c8y-color-input\n [attr.data-cy]=\"'branding-theme-form-color-input-' + color.formControlName\"\n [formControlName]=\"color.formControlName\"\n ></c8y-color-input>\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, AppStateService, CoreModule } from '@c8y/ngx-components';\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs';\nimport { map, distinctUntilChanged, switchMap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash-es';\nimport {\n ApplyBrandingLocallyService,\n BrandingOptionsJson,\n StoreBrandingService\n} from '@c8y/ngx-components/branding/shared/data';\nimport { AsyncValidator, ControlValueAccessor, FormControl } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-edit-branding-router-outlet',\n templateUrl: './edit-branding-router-outlet.component.html',\n standalone: true,\n imports: [RouterOutlet, CoreModule]\n})\nexport class EditBrandingRouterOutletComponent implements OnDestroy {\n brandingName$: Observable<string>;\n formControl = new FormControl<string>(undefined);\n fallbackBranding$: Observable<BrandingOptionsJson>;\n tabName$: Observable<string>;\n isGlobalBranding$: Observable<boolean>;\n private newBranding = new BehaviorSubject<BrandingOptionsJson>(null);\n private currentlyDisplayedComponent = new BehaviorSubject<\n (ControlValueAccessor & Partial<AsyncValidator>) | null\n >(null);\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private store: StoreBrandingService,\n private router: Router,\n private alert: AlertService,\n private applyBrandingService: ApplyBrandingLocallyService,\n private appState: AppStateService\n ) {\n this.isGlobalBranding$ = this.activatedRoute.data.pipe(\n map(({ tags }) => {\n return tags?.includes('latest');\n })\n );\n this.tabName$ = this.currentlyDisplayedComponent.pipe(\n switchMap(() => this.activatedRoute.firstChild.data),\n map(data => data.tabName)\n );\n this.brandingName$ = this.activatedRoute.params.pipe(map(params => params.name));\n this.formControl.addValidators(control => {\n try {\n JSON.parse(control.value);\n return null;\n } catch (e) {\n return { invalidJson: true };\n }\n });\n this.fallbackBranding$ = this.activatedRoute.data.pipe(map(data => data.fallbackBranding));\n this.activatedRoute.data\n .pipe(takeUntilDestroyed(), distinctUntilChanged())\n .subscribe(({ branding }) => {\n this.applyBrandingService.applyBranding(branding);\n this.formControl.setValue(JSON.stringify(branding, null, 2));\n });\n this.currentlyDisplayedComponent.pipe(takeUntilDestroyed()).subscribe(component => {\n if (!component) {\n return;\n }\n this.formControl.clearAsyncValidators();\n component.registerOnChange(value => this.onBrandingVarChanges(value));\n component.writeValue(this.formControl.value);\n if (component.validate) {\n this.formControl.addAsyncValidators(form => component.validate(form));\n if (component.registerOnValidatorChange) {\n component.registerOnValidatorChange(() => this.formControl.updateValueAndValidity());\n }\n }\n\n this.formControl.updateValueAndValidity();\n });\n }\n\n ngOnDestroy(): void {\n this.applyBrandingService.resetBranding();\n }\n\n routeActivated(event: ControlValueAccessor & Partial<AsyncValidator>) {\n this.currentlyDisplayedComponent.next(event);\n }\n\n async saveBranding() {\n try {\n const currentBranding = this.newBranding.value;\n const tagsOfCurrentVersion = await firstValueFrom(\n this.activatedRoute.data.pipe(map(data => data.tags))\n );\n\n const currentBrandingName = this.activatedRoute.snapshot.params.name;\n const { variants } = await this.store.loadBrandingVariants();\n const currentBrandingObj = variants.find(v => v.tags.includes(currentBrandingName));\n const currentVersion = currentBrandingObj.version;\n await this.store.saveExistingBranding(currentBranding, currentVersion, tagsOfCurrentVersion);\n this.router.navigate(\n ['../../', currentBrandingName, this.activatedRoute.snapshot.routeConfig.path],\n {\n relativeTo: this.activatedRoute,\n replaceUrl: true\n }\n );\n this.alert.success(\n gettext(\n 'Branding saved. To apply this branding, refresh any open window that might be affected.'\n )\n );\n } catch (e) {\n this.alert.addServerFailure(e, 'danger');\n console.warn(e);\n }\n }\n\n cancel() {\n this.router.navigate(['branding-editor']);\n }\n\n async openPreview() {\n const name = this.activatedRoute.snapshot.params.name;\n this.store.openPreviewForBranding(name);\n }\n\n async markAsActive() {\n const currentBrandingName = this.activatedRoute.snapshot.params.name;\n const { variants } = await this.store.loadBrandingVariants();\n const currentBrandingObj = variants.find(v => v.tags.includes(currentBrandingName));\n await this.store.markAsActive(currentBrandingObj);\n }\n\n async onBrandingVarChanges(value: string) {\n this.formControl.setValue(value);\n\n try {\n const parsedValue: BrandingOptionsJson = JSON.parse(value);\n const fallbackBranding: BrandingOptionsJson = cloneDeep(\n await firstValueFrom(this.fallbackBranding$)\n );\n this.cleanUpObjects(parsedValue);\n this.cleanUpObjects(parsedValue.brandingCssVars);\n for (const key in fallbackBranding) {\n if (parsedValue[key] === undefined) {\n parsedValue[key] = fallbackBranding[key];\n }\n\n if (typeof parsedValue[key] === 'object' && typeof fallbackBranding[key] === 'object') {\n parsedValue[key] = Object.assign(fallbackBranding[key], parsedValue[key]);\n }\n }\n this.applyBrandingService.applyBranding(parsedValue);\n this.newBranding.next(parsedValue);\n } catch (e) {\n // not valid JSON;\n }\n }\n\n private cleanUpObjects(value: Record<string, any>) {\n if (!value) {\n return;\n }\n Object.keys(value).forEach(key => {\n if (value[key] === null || value[key] === '') {\n delete value[key];\n }\n });\n }\n}\n","<c8y-title>{{ brandingName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"brandingName$ | async\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"card card--fullpage content-fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">{{ brandingName$ | async }} — {{ tabName$ | async | translate }}</div>\n </div>\n <router-outlet\n class=\"d-contents\"\n (activate)=\"routeActivated($event)\"\n ></router-outlet>\n\n <div class=\"card-footer separator\">\n <!-- footer content -->\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-cancel\"\n (click)=\"cancel()\"\n translate\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n data-cy=\"branding-save\"\n [disabled]=\"formControl.invalid\"\n (click)=\"saveBranding()\"\n translate\n >\n Save\n </button>\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-save-as\"\n [disabled]=\"formControl.invalid\"\n (click)=\"openPreview()\"\n translate\n >\n Open preview\n </button>\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-set-as-latest\"\n (click)=\"markAsActive()\"\n [disabled]=\"isGlobalBranding$ | async\"\n translate\n >\n Set as global\n </button>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { StaticAssetsFileListComponent } from '@c8y/ngx-components/static-assets/modal';\nimport {\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n ClipboardService,\n TitleComponent,\n ActionBarItemComponent,\n FilesService,\n GENERIC_FILE_TYPE\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { StaticAsset } from '@c8y/ngx-components/static-assets/data';\nimport { NgForOf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-branding-assets',\n templateUrl: './branding-assets.component.html',\n standalone: true,\n imports: [\n StaticAssetsFileListComponent,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n ActionBarItemComponent,\n NgForOf,\n FormsModule\n ]\n})\nexport class BrandingAssetsComponent {\n filterOptions = [\n {\n label: gettext('All'),\n value: []\n },\n {\n label: gettext('Images'),\n value: this.filesService.mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.IMAGE])\n },\n {\n label: gettext('Fonts'),\n value: this.filesService.mapGenericFileTypesToExtensions([GENERIC_FILE_TYPE.FONT])\n }\n ];\n supportedFileExtensions = this.filterOptions[0].value;\n\n constructor(\n private clipboard: ClipboardService,\n private filesService: FilesService,\n private translate: TranslateService\n ) {}\n\n onItemSelected(file: StaticAsset) {\n const successMessage = this.translate.instant(\n gettext('Copied asset file path to clipboard. You can use it e.g. in custom CSS.')\n );\n this.clipboard.writeText(file.path, { success: successMessage });\n }\n}\n","<c8y-title translate>Branding assets</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'cog'\"\n [label]=\"'Settings' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'files'\"\n [label]=\"'Branding assets' | translate\"\n [path]=\"'/branding-editor/assets'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [(ngModel)]=\"supportedFileExtensions\"\n >\n <option\n *ngFor=\"let filterOption of filterOptions\"\n [ngValue]=\"filterOption.value\"\n >\n {{ filterOption.label | translate }}\n </option>\n </select>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage inner-scroll\">\n <c8y-static-assets-file-list\n [supportedFileExtensions]=\"supportedFileExtensions\"\n (itemSelected)=\"onItemSelected($event)\"\n ></c8y-static-assets-file-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ApplyBrandingToAppService","i1","i2","i3","i4","i5","i6","i7","i8.BrandingImportModalService"],"mappings":"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"}