@c8y/ngx-components 1022.10.1 → 1022.16.2

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 (1047) hide show
  1. package/actility-device-registration/actility-device-registration-button.component.d.ts +1 -1
  2. package/actility-device-registration/actility-device-registration-button.component.d.ts.map +1 -1
  3. package/actility-device-registration/actility-device-registration.component.d.ts +1 -1
  4. package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
  5. package/actility-device-registration/actility-device-registration.module.d.ts +4 -4
  6. package/actility-device-registration/actility-device-registration.module.d.ts.map +1 -1
  7. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +1 -1
  8. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
  9. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts +25 -1
  10. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts.map +1 -1
  11. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts +1 -1
  12. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts.map +1 -1
  13. package/alarm-event-selector/alarm-event-selector-modal/alarm-event-selector-modal.component.d.ts +1 -1
  14. package/alarm-event-selector/alarm-event-selector-modal/alarm-event-selector-modal.component.d.ts.map +1 -1
  15. package/alarm-event-selector/alarm-event-selector.component.d.ts +1 -1
  16. package/alarm-event-selector/alarm-event-selector.component.d.ts.map +1 -1
  17. package/alarm-event-selector/alarm-event-selector.module.d.ts +15 -15
  18. package/alarm-event-selector/alarm-event-selector.module.d.ts.map +1 -1
  19. package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts +1 -1
  20. package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts.map +1 -1
  21. package/alarm-event-selector/pipes/includes-alarm.pipe.d.ts +1 -1
  22. package/alarm-event-selector/pipes/includes-alarm.pipe.d.ts.map +1 -1
  23. package/alarms/alarm-details.component.d.ts +1 -1
  24. package/alarms/alarm-details.component.d.ts.map +1 -1
  25. package/alarms/alarm-empty.component.d.ts +1 -1
  26. package/alarms/alarm-empty.component.d.ts.map +1 -1
  27. package/alarms/alarm-info.component.d.ts +1 -1
  28. package/alarms/alarm-info.component.d.ts.map +1 -1
  29. package/alarms/alarm-severities-to-title.pipe.d.ts +1 -1
  30. package/alarms/alarm-severities-to-title.pipe.d.ts.map +1 -1
  31. package/alarms/alarm-severity-to-label.pipe.d.ts +1 -1
  32. package/alarms/alarm-severity-to-label.pipe.d.ts.map +1 -1
  33. package/alarms/alarm-status-to-icon.pipe.d.ts +1 -1
  34. package/alarms/alarm-status-to-icon.pipe.d.ts.map +1 -1
  35. package/alarms/alarm-status-to-label.pipe.d.ts +1 -1
  36. package/alarms/alarm-status-to-label.pipe.d.ts.map +1 -1
  37. package/alarms/alarms-date-filter.component.d.ts +1 -1
  38. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  39. package/alarms/alarms-filter.component.d.ts +1 -1
  40. package/alarms/alarms-filter.component.d.ts.map +1 -1
  41. package/alarms/alarms-icon.component.d.ts +1 -1
  42. package/alarms/alarms-icon.component.d.ts.map +1 -1
  43. package/alarms/alarms-interval-refresh.component.d.ts +1 -1
  44. package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
  45. package/alarms/alarms-list.component.d.ts +1 -1
  46. package/alarms/alarms-list.component.d.ts.map +1 -1
  47. package/alarms/alarms-type-filter.component.d.ts +1 -1
  48. package/alarms/alarms-type-filter.component.d.ts.map +1 -1
  49. package/alarms/alarms.component.d.ts +1 -1
  50. package/alarms/alarms.component.d.ts.map +1 -1
  51. package/alarms/alarms.helper.d.ts.map +1 -1
  52. package/alarms/alarms.module.d.ts +27 -27
  53. package/alarms/alarms.module.d.ts.map +1 -1
  54. package/alarms/audit-changes-message.pipe.d.ts +1 -1
  55. package/alarms/audit-changes-message.pipe.d.ts.map +1 -1
  56. package/api/api.service.d.ts +8 -0
  57. package/api/api.service.d.ts.map +1 -1
  58. package/app-logs/app-logs-auto-refresh.component.d.ts +1 -1
  59. package/app-logs/app-logs-auto-refresh.component.d.ts.map +1 -1
  60. package/app-logs/app-logs-auto-refresh.module.d.ts +4 -4
  61. package/app-logs/app-logs-auto-refresh.module.d.ts.map +1 -1
  62. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts +1 -1
  63. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  64. package/assets-navigator/asset-selector/asset-selector.component.d.ts +12 -1
  65. package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
  66. package/assets-navigator/asset-selector/asset-selector.module.d.ts +8 -8
  67. package/assets-navigator/asset-selector/asset-selector.module.d.ts.map +1 -1
  68. package/assets-navigator/asset-selector/miller-view.component.d.ts +1 -1
  69. package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
  70. package/auth-configuration/basic-settings/auth-configuration.component.d.ts +1 -1
  71. package/auth-configuration/basic-settings/auth-configuration.component.d.ts.map +1 -1
  72. package/auth-configuration/basic-settings/basic-auth-settings.component.d.ts +1 -1
  73. package/auth-configuration/basic-settings/basic-auth-settings.component.d.ts.map +1 -1
  74. package/auth-configuration/basic-settings/basic-settings.module.d.ts +8 -8
  75. package/auth-configuration/basic-settings/basic-settings.module.d.ts.map +1 -1
  76. package/auth-configuration/basic-settings/login-settings.component.d.ts +2 -2
  77. package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
  78. package/auth-configuration/basic-settings/session-configuration.component.d.ts +1 -1
  79. package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
  80. package/auth-configuration/basic-settings/tfa-settings.component.d.ts +1 -1
  81. package/auth-configuration/basic-settings/tfa-settings.component.d.ts.map +1 -1
  82. package/auth-configuration/sso-configuration/sso-configuration.component.d.ts +1 -1
  83. package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
  84. package/auth-configuration/sso-configuration/sso-configuration.module.d.ts +24 -24
  85. package/auth-configuration/sso-configuration/sso-configuration.module.d.ts.map +1 -1
  86. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts +1 -1
  87. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  88. package/auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.d.ts +1 -1
  89. package/auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.d.ts.map +1 -1
  90. package/auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.d.ts +1 -1
  91. package/auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.d.ts.map +1 -1
  92. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.d.ts +1 -1
  93. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.d.ts.map +1 -1
  94. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts +1 -1
  95. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
  96. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts +1 -1
  97. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts.map +1 -1
  98. package/auth-configuration/sso-configuration/template-parts/external-token-config.component.d.ts +1 -1
  99. package/auth-configuration/sso-configuration/template-parts/external-token-config.component.d.ts.map +1 -1
  100. package/auth-configuration/sso-configuration/template-parts/logout-configuration.component.d.ts +1 -1
  101. package/auth-configuration/sso-configuration/template-parts/logout-configuration.component.d.ts.map +1 -1
  102. package/auth-configuration/sso-configuration/template-parts/request-configuration.component.d.ts +1 -1
  103. package/auth-configuration/sso-configuration/template-parts/request-configuration.component.d.ts.map +1 -1
  104. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +1 -1
  105. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
  106. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts +1 -1
  107. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  108. package/auth-configuration/sso-configuration/template-parts/user-id-configuration.component.d.ts +1 -1
  109. package/auth-configuration/sso-configuration/template-parts/user-id-configuration.component.d.ts.map +1 -1
  110. package/auth-configuration/sso-configuration/templates/aad-template.component.d.ts +1 -1
  111. package/auth-configuration/sso-configuration/templates/aad-template.component.d.ts.map +1 -1
  112. package/auth-configuration/sso-configuration/templates/custom-template.component.d.ts +1 -1
  113. package/auth-configuration/sso-configuration/templates/custom-template.component.d.ts.map +1 -1
  114. package/auth-configuration/sso-configuration/templates/key-cloak-template.component.d.ts +1 -1
  115. package/auth-configuration/sso-configuration/templates/key-cloak-template.component.d.ts.map +1 -1
  116. package/auth-configuration/sso-configuration/templates/template.component.d.ts +1 -1
  117. package/bookmarks/bookmarks.component.d.ts +1 -1
  118. package/bookmarks/bookmarks.component.d.ts.map +1 -1
  119. package/bookmarks/bookmarks.module.d.ts +7 -7
  120. package/bookmarks/bookmarks.module.d.ts.map +1 -1
  121. package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts +1 -1
  122. package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
  123. package/child-devices/child-devices.component.d.ts +1 -1
  124. package/child-devices/child-devices.component.d.ts.map +1 -1
  125. package/child-devices/child-devices.module.d.ts +5 -5
  126. package/child-devices/child-devices.module.d.ts.map +1 -1
  127. package/cockpit-config/cockpit-config.module.d.ts +17 -17
  128. package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
  129. package/cockpit-config/cockpit-configuration.component.d.ts +1 -1
  130. package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
  131. package/cockpit-config/feature-config.component.d.ts +1 -1
  132. package/cockpit-config/feature-config.component.d.ts.map +1 -1
  133. package/cockpit-config/home-dashboard-config.component.d.ts +1 -1
  134. package/cockpit-config/home-dashboard-config.component.d.ts.map +1 -1
  135. package/cockpit-config/misc-config.component.d.ts +1 -1
  136. package/cockpit-config/misc-config.component.d.ts.map +1 -1
  137. package/cockpit-config/root-node-config.component.d.ts +1 -1
  138. package/cockpit-config/root-node-config.component.d.ts.map +1 -1
  139. package/cockpit-config/setup/cockpit-setup-step1.component.d.ts +1 -1
  140. package/cockpit-config/setup/cockpit-setup-step1.component.d.ts.map +1 -1
  141. package/cockpit-config/setup/cockpit-setup-step2.component.d.ts +1 -1
  142. package/cockpit-config/setup/cockpit-setup-step2.component.d.ts.map +1 -1
  143. package/cockpit-config/setup/cockpit-setup-step3.component.d.ts +1 -1
  144. package/cockpit-config/setup/cockpit-setup-step3.component.d.ts.map +1 -1
  145. package/cockpit-config/setup/cockpit-setup-step4.component.d.ts +1 -1
  146. package/cockpit-config/setup/cockpit-setup-step4.component.d.ts.map +1 -1
  147. package/cockpit-config/setup/cockpit-setup-stepper-buttons.component.d.ts +1 -1
  148. package/cockpit-config/setup/cockpit-setup-stepper-buttons.component.d.ts.map +1 -1
  149. package/context-dashboard/add-dashboard.component.d.ts +1 -1
  150. package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
  151. package/context-dashboard/context-dashboard.component.d.ts +2 -1
  152. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  153. package/context-dashboard/context-dashboard.model.d.ts +0 -1
  154. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  155. package/context-dashboard/context-dashboard.module.d.ts +26 -19
  156. package/context-dashboard/context-dashboard.module.d.ts.map +1 -1
  157. package/context-dashboard/context-dashboard.service.d.ts +6 -1
  158. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  159. package/context-dashboard/dashboard-detail.component.d.ts +2 -2
  160. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  161. package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts +1 -1
  162. package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
  163. package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts +5 -5
  164. package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
  165. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts +1 -1
  166. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
  167. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts +5 -5
  168. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
  169. package/context-dashboard/paste-dashboard-action.component.d.ts +1 -1
  170. package/context-dashboard/paste-dashboard-action.component.d.ts.map +1 -1
  171. package/context-dashboard/widget-config.component.d.ts +1 -1
  172. package/context-dashboard/widget-config.component.d.ts.map +1 -1
  173. package/context-dashboard/widget-config.service.d.ts +1 -1
  174. package/core/alert/alert.service.d.ts +14 -5
  175. package/core/alert/alert.service.d.ts.map +1 -1
  176. package/core/asset-property/asset-property.model.d.ts +2 -0
  177. package/core/asset-property/asset-property.model.d.ts.map +1 -1
  178. package/core/authentication/authentication.module.d.ts.map +1 -1
  179. package/core/bottom-drawer/bottom-drawer.component.d.ts +3 -0
  180. package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
  181. package/core/breadcrumb/breadcrumb.module.d.ts +3 -3
  182. package/core/common/ApplicationOptions.d.ts +14 -12
  183. package/core/common/ApplicationOptions.d.ts.map +1 -1
  184. package/core/common/date.pipe.d.ts +1 -1
  185. package/core/common/forOf.directive.d.ts +16 -16
  186. package/core/common/forOf.directive.d.ts.map +1 -1
  187. package/core/common/humanize-app-name.pipe.d.ts +7 -0
  188. package/core/common/humanize-app-name.pipe.d.ts.map +1 -1
  189. package/core/common/humanize.pipe.d.ts +7 -0
  190. package/core/common/humanize.pipe.d.ts.map +1 -1
  191. package/core/common/icon.directive.d.ts +19 -0
  192. package/core/common/icon.directive.d.ts.map +1 -1
  193. package/core/common/markdown-to-html.pipe.d.ts +8 -0
  194. package/core/common/markdown-to-html.pipe.d.ts.map +1 -1
  195. package/core/common/options.service.d.ts +5 -5
  196. package/core/common/outlet.directive.d.ts +4 -6
  197. package/core/common/outlet.directive.d.ts.map +1 -1
  198. package/core/common/permissions.service.d.ts +12 -12
  199. package/core/common/service-registry.service.d.ts +2 -1
  200. package/core/common/service-registry.service.d.ts.map +1 -1
  201. package/core/common/user-name-initials.pipe.d.ts +7 -0
  202. package/core/common/user-name-initials.pipe.d.ts.map +1 -1
  203. package/core/common/user-preferences/user-preferences.service.d.ts +1 -1
  204. package/core/countdown-interval/countdown-interval.component.d.ts +7 -0
  205. package/core/countdown-interval/countdown-interval.component.d.ts.map +1 -1
  206. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -1
  207. package/core/date-time-picker/date-time-picker.component.d.ts +20 -0
  208. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  209. package/core/device-status/device-status.component.d.ts +3 -0
  210. package/core/device-status/device-status.component.d.ts.map +1 -1
  211. package/core/drop-area/drop-area.component.d.ts +2 -0
  212. package/core/drop-area/drop-area.component.d.ts.map +1 -1
  213. package/core/dynamic-forms/file/file.type.component.d.ts.map +1 -1
  214. package/core/header/header.model.d.ts +3 -2
  215. package/core/header/header.model.d.ts.map +1 -1
  216. package/core/header/title/title.component.d.ts +2 -0
  217. package/core/header/title/title.component.d.ts.map +1 -1
  218. package/core/i18n/c8y-translate.directive.d.ts +2 -2
  219. package/core/list-display-switch/list-display-switch.component.d.ts +9 -0
  220. package/core/list-display-switch/list-display-switch.component.d.ts.map +1 -1
  221. package/core/modal/modal.module.d.ts.map +1 -1
  222. package/core/plugins/plugins.module.d.ts.map +1 -1
  223. package/core/plugins/plugins.service.d.ts +1 -2
  224. package/core/plugins/plugins.service.d.ts.map +1 -1
  225. package/core/preview-feature/preview-feature.service.d.ts +1 -0
  226. package/core/preview-feature/preview-feature.service.d.ts.map +1 -1
  227. package/core/range-display/range-display.component.d.ts +11 -0
  228. package/core/range-display/range-display.component.d.ts.map +1 -1
  229. package/core/realtime/realtime.service.d.ts +4 -4
  230. package/core/select/select.component.d.ts.map +1 -1
  231. package/dashboard-manager/dashboard-manager.module.d.ts +8 -8
  232. package/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
  233. package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts +1 -1
  234. package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
  235. package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts +1 -1
  236. package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
  237. package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts +1 -1
  238. package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  239. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +1 -1
  240. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  241. package/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.d.ts +10 -1
  242. package/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.d.ts.map +1 -1
  243. package/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.d.ts +1 -1
  244. package/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.d.ts.map +1 -1
  245. package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts +1 -1
  246. package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
  247. package/datapoint-selector/datapoint-selector.component.d.ts +1 -1
  248. package/datapoint-selector/datapoint-selector.component.d.ts.map +1 -1
  249. package/datapoint-selector/datapoint-selector.module.d.ts +18 -18
  250. package/datapoint-selector/datapoint-selector.module.d.ts.map +1 -1
  251. package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts +1 -1
  252. package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
  253. package/datapoint-selector/pipes/datapoint-label.pipe.d.ts +1 -1
  254. package/datapoint-selector/pipes/datapoint-label.pipe.d.ts.map +1 -1
  255. package/datapoint-selector/pipes/filter-datapoints.pipe.d.ts +1 -1
  256. package/datapoint-selector/pipes/filter-datapoints.pipe.d.ts.map +1 -1
  257. package/datapoint-selector/pipes/includes-datapoint.pipe.d.ts +1 -1
  258. package/datapoint-selector/pipes/includes-datapoint.pipe.d.ts.map +1 -1
  259. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +7 -0
  260. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
  261. package/default-subscriptions/default-subscriptions.component.d.ts +1 -1
  262. package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
  263. package/default-subscriptions/default-subscriptions.module.d.ts +4 -4
  264. package/default-subscriptions/default-subscriptions.module.d.ts.map +1 -1
  265. package/device-grid/columns/alarms.cell-renderer.component.d.ts +1 -1
  266. package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
  267. package/device-grid/columns/alarms.header-cell-renderer.component.d.ts +1 -1
  268. package/device-grid/columns/alarms.header-cell-renderer.component.d.ts.map +1 -1
  269. package/device-grid/columns/group.cell-renderer.component.d.ts +1 -1
  270. package/device-grid/columns/group.cell-renderer.component.d.ts.map +1 -1
  271. package/device-grid/columns/group.filtering-form-renderer.component.d.ts +1 -1
  272. package/device-grid/columns/group.filtering-form-renderer.component.d.ts.map +1 -1
  273. package/device-grid/columns/model.cell-renderer.component.d.ts +1 -1
  274. package/device-grid/columns/model.cell-renderer.component.d.ts.map +1 -1
  275. package/device-grid/columns/name.cell-renderer.component.d.ts +1 -1
  276. package/device-grid/columns/name.cell-renderer.component.d.ts.map +1 -1
  277. package/device-grid/columns/registration-date.cell-renderer.component.d.ts +1 -1
  278. package/device-grid/columns/registration-date.cell-renderer.component.d.ts.map +1 -1
  279. package/device-grid/columns/serial-number.cell-renderer.component.d.ts +1 -1
  280. package/device-grid/columns/serial-number.cell-renderer.component.d.ts.map +1 -1
  281. package/device-grid/columns/status.cell-renderer.component.d.ts +1 -1
  282. package/device-grid/columns/status.cell-renderer.component.d.ts.map +1 -1
  283. package/device-grid/device-grid.component.d.ts +1 -1
  284. package/device-grid/device-grid.component.d.ts.map +1 -1
  285. package/device-grid/device-grid.module.d.ts +15 -15
  286. package/device-grid/device-grid.module.d.ts.map +1 -1
  287. package/device-list/add-smart-group.component.d.ts +1 -1
  288. package/device-list/add-smart-group.component.d.ts.map +1 -1
  289. package/device-list/device-list.component.d.ts +1 -1
  290. package/device-list/device-list.component.d.ts.map +1 -1
  291. package/device-list/device-list.module.d.ts +8 -8
  292. package/device-list/device-list.module.d.ts.map +1 -1
  293. package/device-list/devices.breadcrumb-factory.d.ts +1 -0
  294. package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
  295. package/device-parameters/device-parameter-details.component.d.ts +22 -0
  296. package/device-parameters/device-parameter-details.component.d.ts.map +1 -0
  297. package/device-parameters/device-parameter-value.component.d.ts +12 -0
  298. package/device-parameters/device-parameter-value.component.d.ts.map +1 -0
  299. package/device-parameters/device-parameters-list.component.d.ts +2 -1
  300. package/device-parameters/device-parameters-list.component.d.ts.map +1 -1
  301. package/device-parameters/index.d.ts +5 -0
  302. package/device-parameters/index.d.ts.map +1 -1
  303. package/device-parameters/parameter-type-cell-renderer.components.d.ts +8 -0
  304. package/device-parameters/parameter-type-cell-renderer.components.d.ts.map +1 -0
  305. package/device-profile/add-device-profile.component.d.ts +1 -1
  306. package/device-profile/add-device-profile.component.d.ts.map +1 -1
  307. package/device-profile/device-profile-list.component.d.ts +1 -1
  308. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  309. package/device-profile/device-profile.component.d.ts +1 -1
  310. package/device-profile/device-profile.component.d.ts.map +1 -1
  311. package/device-profile/device-profile.module.d.ts +17 -17
  312. package/device-profile/device-profile.module.d.ts.map +1 -1
  313. package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts +1 -1
  314. package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts.map +1 -1
  315. package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts +1 -1
  316. package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts.map +1 -1
  317. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts +1 -1
  318. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
  319. package/device-profile/select-configuration-modal.component.d.ts +1 -1
  320. package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
  321. package/device-protocols/device-protocols.module.d.ts +1 -1
  322. package/device-protocols/device-type-detail.component.d.ts +1 -1
  323. package/device-protocols/device-type-detail.component.d.ts.map +1 -1
  324. package/device-protocols/device-type-detail.directive.d.ts +1 -1
  325. package/device-protocols/device-type-detail.directive.d.ts.map +1 -1
  326. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +7 -7
  327. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
  328. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +5 -3
  329. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  330. package/device-shell/command-templates/command-templates.component.d.ts +1 -1
  331. package/device-shell/command-templates/command-templates.component.d.ts.map +1 -1
  332. package/device-shell/command-templates/command-templates.directive.d.ts +1 -1
  333. package/device-shell/command-templates/command-templates.directive.d.ts.map +1 -1
  334. package/device-shell/command-templates/command-templates.module.d.ts +1 -1
  335. package/device-shell/shell/shell.component.d.ts +1 -1
  336. package/device-shell/shell/shell.component.d.ts.map +1 -1
  337. package/device-shell/shell/shell.module.d.ts +7 -7
  338. package/diagnostics/diagnostics.component.d.ts +1 -1
  339. package/diagnostics/diagnostics.component.d.ts.map +1 -1
  340. package/diagnostics/diagnostics.module.d.ts +8 -8
  341. package/diagnostics/diagnostics.module.d.ts.map +1 -1
  342. package/ecosystem/activity-log/activity-log.component.d.ts +1 -1
  343. package/ecosystem/activity-log/activity-log.component.d.ts.map +1 -1
  344. package/ecosystem/application-plugins/appState.pipe.d.ts +1 -1
  345. package/ecosystem/application-plugins/appState.pipe.d.ts.map +1 -1
  346. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +1 -1
  347. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -1
  348. package/ecosystem/application-plugins/application-plugins.component.d.ts +1 -1
  349. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  350. package/ecosystem/application-plugins/application-plugins.module.d.ts +14 -14
  351. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  352. package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts +2 -2
  353. package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
  354. package/ecosystem/application-plugins/install-plugin.component.d.ts +1 -1
  355. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  356. package/ecosystem/application-plugins/label-cell-renderer.component.d.ts +1 -1
  357. package/ecosystem/application-plugins/label-cell-renderer.component.d.ts.map +1 -1
  358. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +1 -1
  359. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
  360. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts +1 -1
  361. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  362. package/ecosystem/application-plugins/plugin-list-item.component.d.ts +1 -1
  363. package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
  364. package/ecosystem/application-plugins/plugin-list.component.d.ts +1 -1
  365. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  366. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts +1 -1
  367. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  368. package/ecosystem/application-properties/application-properties.component.d.ts +1 -1
  369. package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
  370. package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts +1 -1
  371. package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
  372. package/ecosystem/application-properties/update-application-modal/update-application-modal.component.d.ts +1 -1
  373. package/ecosystem/application-properties/update-application-modal/update-application-modal.component.d.ts.map +1 -1
  374. package/ecosystem/applications/add-external-applicaiton/add-external-application.component.d.ts +1 -1
  375. package/ecosystem/applications/add-external-applicaiton/add-external-application.component.d.ts.map +1 -1
  376. package/ecosystem/applications/add-web-application/add-web-application.component.d.ts +1 -1
  377. package/ecosystem/applications/add-web-application/add-web-application.component.d.ts.map +1 -1
  378. package/ecosystem/applications/application-list/application-list.component.d.ts +1 -1
  379. package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
  380. package/ecosystem/applications/install-from-package/install-from-package.component.d.ts +2 -3
  381. package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
  382. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +1 -1
  383. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -1
  384. package/ecosystem/archived-confirm/archived-confirm.module.d.ts +4 -4
  385. package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -1
  386. package/ecosystem/ecosystem.module.d.ts +34 -34
  387. package/ecosystem/ecosystem.module.d.ts.map +1 -1
  388. package/ecosystem/features/feature-list.component.d.ts +1 -1
  389. package/ecosystem/features/feature-list.component.d.ts.map +1 -1
  390. package/ecosystem/license-confirm/license-confirm-modal.component.d.ts +1 -1
  391. package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
  392. package/ecosystem/license-confirm/license-confirm.module.d.ts +5 -5
  393. package/ecosystem/license-confirm/license-confirm.module.d.ts.map +1 -1
  394. package/ecosystem/license-confirm/license-view.component.d.ts +1 -1
  395. package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
  396. package/ecosystem/microservices/add-microservice.component.d.ts +1 -1
  397. package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
  398. package/ecosystem/microservices/microservice-list.component.d.ts +1 -1
  399. package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
  400. package/ecosystem/packages/add-package.component.d.ts +1 -1
  401. package/ecosystem/packages/add-package.component.d.ts.map +1 -1
  402. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +1 -1
  403. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  404. package/ecosystem/packages/package-details/package-details.component.d.ts +1 -1
  405. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  406. package/ecosystem/packages/package-list/packages-list.component.d.ts +1 -1
  407. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  408. package/ecosystem/packages/package-versions/package-contents/contents-apps/contents-apps.component.d.ts +1 -1
  409. package/ecosystem/packages/package-versions/package-contents/contents-apps/contents-apps.component.d.ts.map +1 -1
  410. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +1 -1
  411. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  412. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +1 -1
  413. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  414. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts +1 -1
  415. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
  416. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +1 -1
  417. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  418. package/ecosystem/shared/add-application.component.d.ts +1 -1
  419. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  420. package/ecosystem/shared/application-card.component.d.ts +1 -1
  421. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  422. package/ecosystem/shared/application-properties-form.component.d.ts +1 -1
  423. package/ecosystem/shared/application-properties-form.component.d.ts.map +1 -1
  424. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +1 -1
  425. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
  426. package/ecosystem/shared/duplicate-application/duplicate-application-list/duplicate-application-list.component.d.ts +1 -1
  427. package/ecosystem/shared/duplicate-application/duplicate-application-list/duplicate-application-list.component.d.ts.map +1 -1
  428. package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts +2 -2
  429. package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts.map +1 -1
  430. package/ecosystem/shared/duplicate-application/duplicate-application.component.d.ts +1 -1
  431. package/ecosystem/shared/duplicate-application/duplicate-application.component.d.ts.map +1 -1
  432. package/ecosystem/shared/list-filters/list-filters.component.d.ts +1 -1
  433. package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
  434. package/ecosystem/shared/package-version-select/package-version-select.component.d.ts +1 -1
  435. package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
  436. package/ecosystem/shared/shared-ecosystem.module.d.ts +20 -20
  437. package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
  438. package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
  439. package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
  440. package/ecosystem/shared/upload-archive.component.d.ts +1 -1
  441. package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
  442. package/events/c8y-ngx-components-events.d.ts.map +1 -0
  443. package/events/events-timeline/c8y-ngx-components-events-events-timeline.d.ts.map +1 -0
  444. package/events/events-timeline/events-timeline.component.d.ts +19 -0
  445. package/events/events-timeline/events-timeline.component.d.ts.map +1 -0
  446. package/events/events-timeline/index.d.ts +2 -0
  447. package/events/events-timeline/index.d.ts.map +1 -0
  448. package/events/events.model.d.ts +6 -0
  449. package/events/events.model.d.ts.map +1 -0
  450. package/events/events.service.d.ts +10 -0
  451. package/events/events.service.d.ts.map +1 -0
  452. package/events/index.d.ts +3 -0
  453. package/events/index.d.ts.map +1 -0
  454. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +36 -12
  455. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  456. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +195 -107
  457. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  458. package/fesm2022/c8y-ngx-components-alarms.mjs +238 -97
  459. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  460. package/fesm2022/c8y-ngx-components-api.mjs +8 -0
  461. package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
  462. package/fesm2022/c8y-ngx-components-app-logs.mjs +6 -8
  463. package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
  464. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +74 -26
  465. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  466. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +580 -368
  467. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  468. package/fesm2022/c8y-ngx-components-bookmarks.mjs +36 -17
  469. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  470. package/fesm2022/c8y-ngx-components-child-devices.mjs +7 -9
  471. package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
  472. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +138 -67
  473. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  474. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-B7m2lsIe.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs} +3 -3
  475. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-B7m2lsIe.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs.map} +1 -1
  476. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BCG_pjJz.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs} +5 -5
  477. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BCG_pjJz.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs.map} +1 -1
  478. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DjCdFkJw.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs} +3 -3
  479. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DjCdFkJw.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs.map} +1 -1
  480. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +170 -94
  481. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  482. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +44 -31
  483. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  484. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +132 -66
  485. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  486. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  487. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +32 -16
  488. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
  489. package/fesm2022/c8y-ngx-components-device-grid.mjs +50 -45
  490. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  491. package/fesm2022/c8y-ngx-components-device-list.mjs +59 -27
  492. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  493. package/fesm2022/c8y-ngx-components-device-parameters.mjs +110 -13
  494. package/fesm2022/c8y-ngx-components-device-parameters.mjs.map +1 -1
  495. package/fesm2022/c8y-ngx-components-device-profile.mjs +126 -49
  496. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  497. package/fesm2022/c8y-ngx-components-device-protocols.mjs +6 -9
  498. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  499. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +78 -18
  500. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  501. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -22
  502. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  503. package/fesm2022/c8y-ngx-components-diagnostics.mjs +36 -19
  504. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  505. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +155 -72
  506. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  507. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +13 -7
  508. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -1
  509. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +43 -12
  510. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  511. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +179 -80
  512. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  513. package/fesm2022/c8y-ngx-components-ecosystem.mjs +353 -1316
  514. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  515. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +45 -0
  516. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -0
  517. package/fesm2022/c8y-ngx-components-events.mjs +44 -0
  518. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -0
  519. package/fesm2022/c8y-ngx-components-file-preview.mjs +17 -8
  520. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  521. package/fesm2022/c8y-ngx-components-files-repository.mjs +55 -22
  522. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  523. package/fesm2022/c8y-ngx-components-icon-selector.mjs +46 -28
  524. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  525. package/fesm2022/c8y-ngx-components-location.mjs +28 -15
  526. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  527. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +36 -12
  528. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  529. package/fesm2022/c8y-ngx-components-map.mjs +260 -28
  530. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  531. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +8 -14
  532. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
  533. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +49 -49
  534. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  535. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +27 -14
  536. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  537. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +27 -33
  538. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  539. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +51 -39
  540. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  541. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +10 -8
  542. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
  543. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +16 -11
  544. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  545. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +8 -11
  546. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  547. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +25 -21
  548. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
  549. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -9
  550. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
  551. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +31 -31
  552. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  553. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +3 -3
  554. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  555. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +33 -13
  556. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  557. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +19 -13
  558. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
  559. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +40 -36
  560. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  561. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +60 -41
  562. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  563. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +122 -109
  564. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  565. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +66 -41
  566. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  567. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +11 -16
  568. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
  569. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +24 -13
  570. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  571. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +133 -26
  572. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  573. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +212 -83
  574. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  575. package/fesm2022/c8y-ngx-components-register-device.mjs +314 -249
  576. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  577. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +41 -17
  578. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  579. package/fesm2022/c8y-ngx-components-reports.mjs +61 -21
  580. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  581. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +113 -54
  582. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  583. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +130 -62
  584. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  585. package/fesm2022/c8y-ngx-components-repository-shared.mjs +37 -28
  586. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  587. package/fesm2022/c8y-ngx-components-repository-software.mjs +156 -83
  588. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  589. package/fesm2022/c8y-ngx-components-search.mjs +34 -21
  590. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  591. package/fesm2022/c8y-ngx-components-services.mjs +32 -19
  592. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  593. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +43 -19
  594. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  595. package/fesm2022/c8y-ngx-components-sub-assets.mjs +207 -72
  596. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  597. package/fesm2022/c8y-ngx-components-tenants.mjs +96 -39
  598. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  599. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +224 -67
  600. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  601. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +16 -3
  602. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
  603. package/fesm2022/c8y-ngx-components-upgrade.mjs +20 -24
  604. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  605. package/fesm2022/c8y-ngx-components-user-roles.mjs +24 -14
  606. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  607. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +76 -50
  608. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  609. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +15 -8
  610. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
  611. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
  612. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  613. package/fesm2022/c8y-ngx-components.mjs +640 -549
  614. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  615. package/file-preview/file-preview.component.d.ts +1 -1
  616. package/file-preview/file-preview.component.d.ts.map +1 -1
  617. package/file-preview/file-preview.module.d.ts +3 -3
  618. package/file-preview/file-preview.module.d.ts.map +1 -1
  619. package/files-repository/files-repository-upload.component.d.ts +1 -1
  620. package/files-repository/files-repository-upload.component.d.ts.map +1 -1
  621. package/files-repository/files-repository.component.d.ts +1 -1
  622. package/files-repository/files-repository.component.d.ts.map +1 -1
  623. package/files-repository/files-repository.module.d.ts +6 -6
  624. package/files-repository/files-repository.module.d.ts.map +1 -1
  625. package/icon-selector/icon-name.pipe.d.ts +1 -1
  626. package/icon-selector/icon-name.pipe.d.ts.map +1 -1
  627. package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts +1 -1
  628. package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
  629. package/icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.d.ts +1 -1
  630. package/icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.d.ts.map +1 -1
  631. package/icon-selector/icon-selector.component.d.ts +1 -1
  632. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  633. package/icon-selector/icon-selector.module.d.ts +8 -8
  634. package/icon-selector/icon-selector.module.d.ts.map +1 -1
  635. package/locales/de.po +55 -17
  636. package/locales/es.po +43 -4
  637. package/locales/fr.po +43 -4
  638. package/locales/ja_JP.po +45 -6
  639. package/locales/ko.po +43 -4
  640. package/locales/locales.pot +41 -2
  641. package/locales/nl.po +43 -4
  642. package/locales/pl.po +43 -4
  643. package/locales/pt_BR.po +43 -4
  644. package/locales/zh_CN.po +44 -5
  645. package/locales/zh_TW.po +43 -4
  646. package/location/add-location.component.d.ts +1 -1
  647. package/location/add-location.component.d.ts.map +1 -1
  648. package/location/location.component.d.ts +1 -1
  649. package/location/location.component.d.ts.map +1 -1
  650. package/location/location.module.d.ts +6 -6
  651. package/location/location.module.d.ts.map +1 -1
  652. package/loriot-device-registration/loriot-device-registration-button.component.d.ts +1 -1
  653. package/loriot-device-registration/loriot-device-registration-button.component.d.ts.map +1 -1
  654. package/loriot-device-registration/loriot-device-registration.component.d.ts +1 -1
  655. package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
  656. package/loriot-device-registration/loriot-device-registration.module.d.ts +4 -4
  657. package/loriot-device-registration/loriot-device-registration.module.d.ts.map +1 -1
  658. package/map/cluster-map.component.d.ts +61 -1
  659. package/map/cluster-map.component.d.ts.map +1 -1
  660. package/map/map-popup.directive.d.ts +1 -1
  661. package/map/map-popup.directive.d.ts.map +1 -1
  662. package/map/map-status.component.d.ts +86 -3
  663. package/map/map-status.component.d.ts.map +1 -1
  664. package/map/map.component.d.ts +100 -5
  665. package/map/map.component.d.ts.map +1 -1
  666. package/map/map.model.d.ts +98 -4
  667. package/map/map.model.d.ts.map +1 -1
  668. package/map/map.module.d.ts +9 -9
  669. package/map/map.module.d.ts.map +1 -1
  670. package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts +1 -1
  671. package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts.map +1 -1
  672. package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts +3 -5
  673. package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts.map +1 -1
  674. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts +1 -1
  675. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
  676. package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts +1 -7
  677. package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts.map +1 -1
  678. package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts +1 -1
  679. package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts.map +1 -1
  680. package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts +1 -1
  681. package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts.map +1 -1
  682. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts +1 -1
  683. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
  684. package/operations/bulk-operation-scheduler/bulk-operation-scheduler.module.d.ts +6 -6
  685. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +1 -1
  686. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  687. package/operations/bulk-operation-stepper/base-stepper.component.d.ts +1 -1
  688. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts +1 -1
  689. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
  690. package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts +1 -5
  691. package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts.map +1 -1
  692. package/operations/bulk-operation-stepper/custom-step.directive.d.ts +1 -1
  693. package/operations/bulk-operation-stepper/custom-step.directive.d.ts.map +1 -1
  694. package/operations/bulk-operations-list/bulk-operations-list.component.d.ts +1 -1
  695. package/operations/bulk-operations-list/bulk-operations-list.component.d.ts.map +1 -1
  696. package/operations/bulk-operations-list/bulk-operations-list.module.d.ts +4 -10
  697. package/operations/bulk-operations-list/bulk-operations-list.module.d.ts.map +1 -1
  698. package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts +1 -1
  699. package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts.map +1 -1
  700. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts +1 -1
  701. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts.map +1 -1
  702. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts +3 -4
  703. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts.map +1 -1
  704. package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts +1 -1
  705. package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts.map +1 -1
  706. package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts +1 -4
  707. package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts.map +1 -1
  708. package/operations/device-selector/device-selector.component.d.ts +1 -1
  709. package/operations/device-selector/device-selector.component.d.ts.map +1 -1
  710. package/operations/device-selector/device-selector.module.d.ts +1 -3
  711. package/operations/device-selector/device-selector.module.d.ts.map +1 -1
  712. package/operations/operation-details/operation-details-modal.component.d.ts +1 -1
  713. package/operations/operation-details/operation-details-modal.component.d.ts.map +1 -1
  714. package/operations/operation-details/operation-details.component.d.ts +1 -1
  715. package/operations/operation-details/operation-details.component.d.ts.map +1 -1
  716. package/operations/operation-details/operation-details.module.d.ts +1 -7
  717. package/operations/operation-details/operation-details.module.d.ts.map +1 -1
  718. package/operations/operation-details/operation-details.service.d.ts.map +1 -1
  719. package/operations/operation-summary/operation-summary.component.d.ts +1 -1
  720. package/operations/operation-summary/operation-summary.component.d.ts.map +1 -1
  721. package/operations/operation-summary/operation-summary.module.d.ts +1 -2
  722. package/operations/operation-summary/operation-summary.module.d.ts.map +1 -1
  723. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  724. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  725. package/operations/operations-list/operations-list.service.d.ts +1 -1
  726. package/operations/operations-list/operations-list.service.d.ts.map +1 -1
  727. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts +1 -1
  728. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
  729. package/operations/operations-list-item-details/operation-details.component.d.ts +1 -1
  730. package/operations/operations-list-item-details/operation-details.component.d.ts.map +1 -1
  731. package/operations/operations-list-item-details/operations-list-item-details.module.d.ts +1 -6
  732. package/operations/operations-list-item-details/operations-list-item-details.module.d.ts.map +1 -1
  733. package/operations/operations-timeline/operations-timeline.component.d.ts +5 -5
  734. package/operations/operations-timeline/operations-timeline.component.d.ts.map +1 -1
  735. package/operations/operations-timeline/operations-timeline.module.d.ts +4 -6
  736. package/operations/operations-timeline/operations-timeline.module.d.ts.map +1 -1
  737. package/operations/status-filter/status-filter.component.d.ts +1 -1
  738. package/operations/status-filter/status-filter.component.d.ts.map +1 -1
  739. package/operations/status-filter/status-filter.module.d.ts +1 -4
  740. package/operations/status-filter/status-filter.module.d.ts.map +1 -1
  741. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts +1 -1
  742. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
  743. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts +1 -6
  744. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts.map +1 -1
  745. package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts +1 -1
  746. package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts.map +1 -1
  747. package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts +1 -1
  748. package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts.map +1 -1
  749. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts +1 -1
  750. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
  751. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts +1 -6
  752. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts.map +1 -1
  753. package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts +1 -1
  754. package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts.map +1 -1
  755. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts +1 -1
  756. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
  757. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts +1 -6
  758. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts.map +1 -1
  759. package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts +1 -1
  760. package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts.map +1 -1
  761. package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts +1 -1
  762. package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts.map +1 -1
  763. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts +1 -1
  764. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
  765. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts +1 -1
  766. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
  767. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts +1 -6
  768. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts.map +1 -1
  769. package/operations/stepper-frames/preview-block.directive.d.ts +1 -1
  770. package/operations/stepper-frames/preview-block.directive.d.ts.map +1 -1
  771. package/operations/stepper-frames/preview-selection-frame.component.d.ts +1 -1
  772. package/operations/stepper-frames/preview-selection-frame.component.d.ts.map +1 -1
  773. package/operations/stepper-frames/select-step-frame.component.d.ts +1 -1
  774. package/operations/stepper-frames/select-step-frame.component.d.ts.map +1 -1
  775. package/operations/stepper-frames/stepper-frames.modules.d.ts +1 -2
  776. package/operations/stepper-frames/stepper-frames.modules.d.ts.map +1 -1
  777. package/package.json +1 -1
  778. package/platform-configuration/platform-configuration-form.component.d.ts +1 -1
  779. package/platform-configuration/platform-configuration-form.component.d.ts.map +1 -1
  780. package/platform-configuration/platform-configuration.module.d.ts +4 -4
  781. package/platform-configuration/platform-configuration.module.d.ts.map +1 -1
  782. package/protocol-lpwan/lpwan-protocol.module.d.ts +4 -4
  783. package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
  784. package/protocol-lpwan/lpwan-set-connections.component.d.ts +1 -1
  785. package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
  786. package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts +1 -1
  787. package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
  788. package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts +1 -1
  789. package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
  790. package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts +1 -1
  791. package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
  792. package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts +1 -1
  793. package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
  794. package/protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.d.ts +8 -8
  795. package/protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.d.ts.map +1 -1
  796. package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts +1 -1
  797. package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts +1 -1
  798. package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
  799. package/protocol-opcua/opcua-address-space-detail.component.d.ts +1 -1
  800. package/protocol-opcua/opcua-address-space-detail.component.d.ts.map +1 -1
  801. package/protocol-opcua/opcua-address-space-tree.component.d.ts +1 -1
  802. package/protocol-opcua/opcua-address-space-tree.component.d.ts.map +1 -1
  803. package/protocol-opcua/opcua-address-space.component.d.ts +1 -1
  804. package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
  805. package/protocol-opcua/opcua-auto-apply-settings.component.d.ts +1 -1
  806. package/protocol-opcua/opcua-auto-apply-settings.component.d.ts.map +1 -1
  807. package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts +1 -1
  808. package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts.map +1 -1
  809. package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts +1 -1
  810. package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts.map +1 -1
  811. package/protocol-opcua/opcua-device-protocol-description.component.d.ts +1 -1
  812. package/protocol-opcua/opcua-device-protocol-description.component.d.ts.map +1 -1
  813. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts +1 -1
  814. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
  815. package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts +1 -1
  816. package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts.map +1 -1
  817. package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts +1 -1
  818. package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts.map +1 -1
  819. package/protocol-opcua/opcua-protocol.module.d.ts +26 -26
  820. package/protocol-opcua/opcua-protocol.module.d.ts.map +1 -1
  821. package/protocol-opcua/opcua-server-config.component.d.ts +1 -1
  822. package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
  823. package/protocol-opcua/opcua-server-list.component.d.ts +1 -1
  824. package/protocol-opcua/opcua-server-list.component.d.ts.map +1 -1
  825. package/protocol-opcua/opcua-servers.component.d.ts +1 -1
  826. package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
  827. package/register-device/bulk/bulk-device-registration-button.component.d.ts +1 -1
  828. package/register-device/bulk/bulk-device-registration-button.component.d.ts.map +1 -1
  829. package/register-device/bulk/bulk-device-registration-modal.component.d.ts +1 -1
  830. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  831. package/register-device/device-registration-view.component.d.ts +1 -1
  832. package/register-device/device-registration-view.component.d.ts.map +1 -1
  833. package/register-device/dropdown/register-device-dropdown.component.d.ts +1 -1
  834. package/register-device/dropdown/register-device-dropdown.component.d.ts.map +1 -1
  835. package/register-device/extensible/bulk/extensible-bulk-device-registration-button.component.d.ts +1 -1
  836. package/register-device/extensible/bulk/extensible-bulk-device-registration-button.component.d.ts.map +1 -1
  837. package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts +1 -1
  838. package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
  839. package/register-device/extensible/single/extensible-device-registration-button.component.d.ts +1 -1
  840. package/register-device/extensible/single/extensible-device-registration-button.component.d.ts.map +1 -1
  841. package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts +1 -1
  842. package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
  843. package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts +1 -1
  844. package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts.map +1 -1
  845. package/register-device/general/general-device-registration-button.component.d.ts +1 -1
  846. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  847. package/register-device/general/general-device-registration.component.d.ts +3 -6
  848. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  849. package/register-device/register-device.module.d.ts +16 -16
  850. package/register-device/register-device.module.d.ts.map +1 -1
  851. package/report-dashboard/report-dashboard-list.component.d.ts +1 -1
  852. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  853. package/report-dashboard/report-dashboard.module.d.ts +7 -7
  854. package/reports/cron.component.d.ts +1 -1
  855. package/reports/cron.component.d.ts.map +1 -1
  856. package/reports/export-schedules.component.d.ts +2 -3
  857. package/reports/export-schedules.component.d.ts.map +1 -1
  858. package/reports/reports.module.d.ts +7 -7
  859. package/reports/reports.module.d.ts.map +1 -1
  860. package/reports/schedule-modal.component.d.ts +2 -3
  861. package/reports/schedule-modal.component.d.ts.map +1 -1
  862. package/repository/configuration/device-tab/configuration-filter.pipe.d.ts +1 -1
  863. package/repository/configuration/device-tab/configuration-filter.pipe.d.ts.map +1 -1
  864. package/repository/configuration/device-tab/configuration-preview.component.d.ts +1 -1
  865. package/repository/configuration/device-tab/configuration-preview.component.d.ts.map +1 -1
  866. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts +11 -13
  867. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
  868. package/repository/configuration/device-tab/device-configuration-list.component.d.ts +1 -1
  869. package/repository/configuration/device-tab/device-configuration-list.component.d.ts.map +1 -1
  870. package/repository/configuration/device-tab/device-configuration.component.d.ts +1 -1
  871. package/repository/configuration/device-tab/device-configuration.component.d.ts.map +1 -1
  872. package/repository/configuration/device-tab/save-to-repository.component.d.ts +1 -1
  873. package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
  874. package/repository/configuration/device-tab/source-code-preview.component.d.ts +1 -1
  875. package/repository/configuration/device-tab/source-code-preview.component.d.ts.map +1 -1
  876. package/repository/configuration/device-tab/text-based-configuration.component.d.ts +1 -1
  877. package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
  878. package/repository/configuration/list/configuration-detail.component.d.ts +1 -1
  879. package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
  880. package/repository/configuration/list/configuration-list.component.d.ts +1 -1
  881. package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
  882. package/repository/configuration/list/configuration-repository-list.module.d.ts +4 -7
  883. package/repository/configuration/list/configuration-repository-list.module.d.ts.map +1 -1
  884. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts +1 -1
  885. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
  886. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts +4 -6
  887. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
  888. package/repository/firmware/list/add-firmware-modal.component.d.ts +1 -1
  889. package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
  890. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts +1 -1
  891. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
  892. package/repository/firmware/list/firmware-details.component.d.ts +1 -1
  893. package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
  894. package/repository/firmware/list/firmware-list.component.d.ts +1 -1
  895. package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
  896. package/repository/firmware/list/firmware-repository-list.module.d.ts +6 -11
  897. package/repository/firmware/list/firmware-repository-list.module.d.ts.map +1 -1
  898. package/repository/shared/file-download/file-download.component.d.ts +1 -1
  899. package/repository/shared/file-download/file-download.component.d.ts.map +1 -1
  900. package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
  901. package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
  902. package/repository/shared/shared-repository.module.d.ts +1 -4
  903. package/repository/shared/shared-repository.module.d.ts.map +1 -1
  904. package/repository/shared/software-type/software-type.component.d.ts +1 -1
  905. package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
  906. package/repository/software/device-tab/device-software-changes.component.d.ts +1 -1
  907. package/repository/software/device-tab/device-software-changes.component.d.ts.map +1 -1
  908. package/repository/software/device-tab/device-software-list.component.d.ts +1 -1
  909. package/repository/software/device-tab/device-software-list.component.d.ts.map +1 -1
  910. package/repository/software/device-tab/installed-software.component.d.ts +1 -1
  911. package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
  912. package/repository/software/device-tab/software-device-tab.component.d.ts +1 -1
  913. package/repository/software/device-tab/software-device-tab.component.d.ts.map +1 -1
  914. package/repository/software/device-tab/software-repository-device-tab.module.d.ts +7 -11
  915. package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
  916. package/repository/software/list/add-software-modal.component.d.ts +1 -1
  917. package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
  918. package/repository/software/list/software-details.component.d.ts +1 -1
  919. package/repository/software/list/software-details.component.d.ts.map +1 -1
  920. package/repository/software/list/software-list.component.d.ts +1 -1
  921. package/repository/software/list/software-list.component.d.ts.map +1 -1
  922. package/repository/software/list/software-repository-list.module.d.ts +5 -11
  923. package/repository/software/list/software-repository-list.module.d.ts.map +1 -1
  924. package/search/search-action.component.d.ts +1 -1
  925. package/search/search-action.component.d.ts.map +1 -1
  926. package/search/search-custom-filters.component.d.ts +1 -1
  927. package/search/search-custom-filters.component.d.ts.map +1 -1
  928. package/search/search-grid.component.d.ts +1 -1
  929. package/search/search-grid.component.d.ts.map +1 -1
  930. package/search/search-results.component.d.ts +1 -1
  931. package/search/search-results.component.d.ts.map +1 -1
  932. package/search/search.module.d.ts +8 -8
  933. package/search/search.module.d.ts.map +1 -1
  934. package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts +1 -1
  935. package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts.map +1 -1
  936. package/services/services-device-tab/columns/name.cell-renderer.component.d.ts +1 -1
  937. package/services/services-device-tab/columns/name.cell-renderer.component.d.ts.map +1 -1
  938. package/services/services-device-tab/columns/status.cell-renderer.component.d.ts +1 -1
  939. package/services/services-device-tab/columns/status.cell-renderer.component.d.ts.map +1 -1
  940. package/services/services-device-tab/services-device-tab.component.d.ts +1 -1
  941. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  942. package/services/services-device-tab/services-device-tab.module.d.ts +1 -4
  943. package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
  944. package/sigfox-device-registration/sigfox-device-registration-button.component.d.ts +1 -1
  945. package/sigfox-device-registration/sigfox-device-registration-button.component.d.ts.map +1 -1
  946. package/sigfox-device-registration/sigfox-device-registration.component.d.ts +1 -1
  947. package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
  948. package/sigfox-device-registration/sigfox-device-registration.module.d.ts +4 -4
  949. package/sigfox-device-registration/sigfox-device-registration.module.d.ts.map +1 -1
  950. package/sub-assets/add-group/add-group.component.d.ts +1 -1
  951. package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
  952. package/sub-assets/add-group/add-group.module.d.ts +7 -7
  953. package/sub-assets/asset-properties-item.component.d.ts +1 -1
  954. package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
  955. package/sub-assets/asset-properties.component.d.ts +1 -1
  956. package/sub-assets/asset-properties.component.d.ts.map +1 -1
  957. package/sub-assets/assign-devices/assign-child-devices.component.d.ts +2 -3
  958. package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
  959. package/sub-assets/assign-devices/assign-devices.component.d.ts +1 -1
  960. package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
  961. package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts +1 -1
  962. package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
  963. package/sub-assets/group-info.component.d.ts +1 -1
  964. package/sub-assets/group-info.component.d.ts.map +1 -1
  965. package/sub-assets/groups.component.d.ts +1 -1
  966. package/sub-assets/groups.component.d.ts.map +1 -1
  967. package/sub-assets/location/asset-location.component.d.ts +1 -1
  968. package/sub-assets/location/asset-location.component.d.ts.map +1 -1
  969. package/sub-assets/sub-assets-grid.component.d.ts +1 -1
  970. package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
  971. package/sub-assets/sub-assets-grids.module.d.ts +9 -9
  972. package/sub-assets/sub-assets-grids.module.d.ts.map +1 -1
  973. package/sub-assets/sub-assets.component.d.ts +1 -1
  974. package/sub-assets/sub-assets.component.d.ts.map +1 -1
  975. package/sub-assets/sub-assets.module.d.ts +18 -18
  976. package/sub-assets/sub-assets.module.d.ts.map +1 -1
  977. package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts +1 -1
  978. package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
  979. package/tenants/tenant-form/tenant-form.component.d.ts +1 -1
  980. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
  981. package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts +2 -3
  982. package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
  983. package/tenants/tenant-list/status.filtering-form-renderer.component.d.ts +1 -1
  984. package/tenants/tenant-list/status.filtering-form-renderer.component.d.ts.map +1 -1
  985. package/tenants/tenant-list/tenant-list.component.d.ts +1 -1
  986. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  987. package/tenants/tenants.module.d.ts +9 -9
  988. package/tenants/tenants.module.d.ts.map +1 -1
  989. package/trusted-certificates/crl/crl-check-settings.component.d.ts +1 -1
  990. package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
  991. package/trusted-certificates/crl/crl-settings.component.d.ts +6 -2
  992. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
  993. package/trusted-certificates/crl/crl-settings.module.d.ts +8 -8
  994. package/trusted-certificates/crl/crl-settings.module.d.ts.map +1 -1
  995. package/trusted-certificates/factories/tabs.factory.d.ts +3 -2
  996. package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
  997. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts +2 -0
  998. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
  999. package/trusted-certificates/list/add-trusted-certificate.component.d.ts +4 -3
  1000. package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
  1001. package/trusted-certificates/list/trusted-certificate-list.component.d.ts +16 -3
  1002. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  1003. package/trusted-certificates/list/trusted-certificate-list.module.d.ts +10 -10
  1004. package/trusted-certificates/list/trusted-certificate-list.module.d.ts.map +1 -1
  1005. package/trusted-certificates/list/trusted-certificate.model.d.ts +2 -0
  1006. package/trusted-certificates/list/trusted-certificate.model.d.ts.map +1 -1
  1007. package/trusted-certificates/pattern-messages.data.d.ts +6 -0
  1008. package/trusted-certificates/pattern-messages.data.d.ts.map +1 -1
  1009. package/trusted-certificates/trusted-certificates.guard.d.ts +11 -0
  1010. package/trusted-certificates/trusted-certificates.guard.d.ts.map +1 -0
  1011. package/upgrade/dashboard/dashboard-upgrade.module.d.ts +6 -6
  1012. package/upgrade/dashboard/dashboard-upgrade.module.d.ts.map +1 -1
  1013. package/upgrade/dashboard/device-selector.component.d.ts +1 -1
  1014. package/upgrade/dashboard/device-selector.component.d.ts.map +1 -1
  1015. package/upgrade/dashboard/widget.component.d.ts +1 -1
  1016. package/upgrade/dashboard/widget.component.d.ts.map +1 -1
  1017. package/upgrade/index.d.ts +0 -1
  1018. package/upgrade/index.d.ts.map +1 -1
  1019. package/upgrade/upgrade.module.d.ts.map +1 -1
  1020. package/upgrade/upgraded-services/index.d.ts +1 -0
  1021. package/upgrade/upgraded-services/index.d.ts.map +1 -1
  1022. package/upgrade/upgraded-services/smart-rules.service.d.ts.map +1 -0
  1023. package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
  1024. package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts +2 -1
  1025. package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts.map +1 -1
  1026. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts +2 -1
  1027. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
  1028. package/user-roles/user-roles.module.d.ts +4 -4
  1029. package/user-roles/user-roles.module.d.ts.map +1 -1
  1030. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +1 -1
  1031. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  1032. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +1 -1
  1033. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  1034. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +1 -1
  1035. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  1036. package/widgets/implementations/alarms/alarms-widget.module.d.ts +13 -13
  1037. package/widgets/implementations/alarms/alarms-widget.module.d.ts.map +1 -1
  1038. package/widgets/implementations/alarms/severity-icon.pipe.d.ts +1 -1
  1039. package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
  1040. package/widgets/implementations/alarms/sorting-description-popover-message.pipe.d.ts +1 -1
  1041. package/widgets/implementations/alarms/sorting-description-popover-message.pipe.d.ts.map +1 -1
  1042. package/widgets/implementations/device-management-welcome/device-management-welcome-widget.module.d.ts +4 -4
  1043. package/widgets/implementations/device-management-welcome/device-management-welcome-widget.module.d.ts.map +1 -1
  1044. package/widgets/implementations/device-management-welcome/welcome.component.d.ts +1 -1
  1045. package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
  1046. package/upgrade/smart-rules.service.d.ts.map +0 -1
  1047. /package/upgrade/{smart-rules.service.d.ts → upgraded-services/smart-rules.service.d.ts} +0 -0
@@ -1,36 +1,60 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, NgModule } from '@angular/core';
2
+ import { inject, Injectable, Component, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/router';
4
- import { RouterModule } from '@angular/router';
4
+ import { Router, RouterModule } from '@angular/router';
5
5
  import * as i2 from '@c8y/ngx-components';
6
- import { NavigatorNode, gettext, Status, CoreModule, CommonModule, hookNavigator, hookPatternMessages, hookTab } from '@c8y/ngx-components';
7
- import * as i5$1 from 'ngx-bootstrap/datepicker';
8
- import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
6
+ import { Permissions, NavigatorNode, gettext, ActionBarItemComponent, IconDirective, C8yTranslateDirective, C8yTranslatePipe, Status, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, HelpComponent, FormGroupComponent, RequiredInputPlaceholderDirective, DefaultValidationDirective, DropAreaComponent, CoreModule, CommonModule, EmptyStateComponent, ListGroupComponent, ForOfDirective, ListItemComponent, ListItemIconComponent, ListItemBodyComponent, ListItemCollapseComponent, ProductExperienceDirective, DatePipe, hookNavigator, hookPatternMessages, hookTab } from '@c8y/ngx-components';
7
+ import { BsDatepickerInputDirective, BsDatepickerDirective, BsDatepickerModule } from 'ngx-bootstrap/datepicker';
9
8
  import { pull, isEmpty, assign } from 'lodash-es';
10
9
  import * as i2$1 from '@c8y/client';
11
10
  import { saveAs } from 'file-saver';
12
- import * as i3 from '@angular/common';
11
+ import * as i2$2 from 'ngx-bootstrap/dropdown';
12
+ import { BsDropdownDirective, BsDropdownToggleDirective, BsDropdownMenuDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
13
+ import { NgTemplateOutlet, NgFor, NgIf, AsyncPipe, NgClass } from '@angular/common';
13
14
  import * as i4 from '@angular/forms';
14
- import { ReactiveFormsModule } from '@angular/forms';
15
- import * as i6 from 'ngx-bootstrap/popover';
16
- import { PopoverModule } from 'ngx-bootstrap/popover';
17
- import * as i5 from 'ngx-bootstrap/dropdown';
18
- import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
15
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
16
+ import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';
17
+ import { from, shareReplay, BehaviorSubject, pipe, firstValueFrom } from 'rxjs';
19
18
  import * as i1$1 from 'ngx-bootstrap/modal';
20
- import * as i5$2 from 'ngx-bootstrap/buttons';
21
- import { ButtonsModule } from 'ngx-bootstrap/buttons';
19
+ import { ButtonCheckboxDirective, ButtonsModule } from 'ngx-bootstrap/buttons';
22
20
  import * as i4$1 from '@ngx-translate/core';
23
- import { tap, switchMap, shareReplay } from 'rxjs/operators';
24
- import { BehaviorSubject, pipe, firstValueFrom } from 'rxjs';
25
- import * as i7 from 'ngx-bootstrap/tooltip';
26
- import { TooltipModule } from 'ngx-bootstrap/tooltip';
21
+ import { tap, switchMap, shareReplay as shareReplay$1 } from 'rxjs/operators';
22
+ import { TooltipDirective, TooltipModule } from 'ngx-bootstrap/tooltip';
23
+
24
+ class TrustedCertificatesGuard {
25
+ constructor() {
26
+ this.permissions = inject(Permissions);
27
+ }
28
+ async canActivate() {
29
+ const hasReadRole = await this.hasReadRole();
30
+ const hasAdminRole = await this.hasAdminRole();
31
+ return hasReadRole || hasAdminRole;
32
+ }
33
+ async hasReadRole() {
34
+ return this.permissions.hasAnyRole([Permissions.ROLE_TENANT_MANAGEMENT_READ]);
35
+ }
36
+ async hasAdminRole() {
37
+ return this.permissions.hasAnyRole([
38
+ Permissions.ROLE_TENANT_ADMIN,
39
+ Permissions.ROLE_TENANT_MANAGEMENT_ADMIN
40
+ ]);
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificatesGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificatesGuard, providedIn: 'root' }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificatesGuard, decorators: [{
46
+ type: Injectable,
47
+ args: [{ providedIn: 'root' }]
48
+ }] });
27
49
 
28
50
  class TrustedCertificatesNavigationFactory {
29
51
  constructor() {
52
+ this.guard = inject(TrustedCertificatesGuard);
30
53
  this.navs = [];
31
54
  }
32
55
  async get() {
33
- if (this.navs.length === 0) {
56
+ const canActivate = await this.guard.canActivate();
57
+ if (canActivate && this.navs.length === 0) {
34
58
  this.navs.push(new NavigatorNode({
35
59
  label: gettext('Trusted certificates'),
36
60
  icon: 'certificate',
@@ -56,6 +80,12 @@ const MESSAGES_TRUSTED_CERTIFICATES = {
56
80
  fingerprint: '$1'
57
81
  }
58
82
  },
83
+ '^Certificate Authority is not found or not eligible for renewal for tenant (.+?)$': {
84
+ gettext: gettext('Could not find Certificate Authority or it is not eligible for renewal for tenant {{ tenant }}.'),
85
+ placeholders: {
86
+ tenant: '$1'
87
+ }
88
+ },
59
89
  '^Wrong proof of possession verification code used for tenant (.+?). Certificate (.+?), usage not granted.$': {
60
90
  gettext: gettext('Could not confirm the ownership of {{ fingerprint }} certificate: invalid proof of possession verification code provided, sign verification code with private key.'),
61
91
  placeholders: {
@@ -73,12 +103,14 @@ const MESSAGES_TRUSTED_CERTIFICATES = {
73
103
  };
74
104
 
75
105
  class TabsFactory {
76
- constructor(router) {
77
- this.router = router;
106
+ constructor() {
107
+ this.router = inject(Router);
108
+ this.guard = inject(TrustedCertificatesGuard);
78
109
  }
79
- get() {
110
+ async get() {
80
111
  const tabs = [];
81
- if (this.router.url.match(/trusted-certificates/g)) {
112
+ const canActivate = await this.guard.canActivate();
113
+ if (canActivate && this.router.url.match(/trusted-certificates/g)) {
82
114
  tabs.push({
83
115
  icon: 'certificate',
84
116
  priority: 1000,
@@ -96,12 +128,12 @@ class TabsFactory {
96
128
  }
97
129
  return tabs;
98
130
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TabsFactory, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TabsFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
100
132
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TabsFactory }); }
101
133
  }
102
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TabsFactory, decorators: [{
103
135
  type: Injectable
104
- }], ctorParameters: () => [{ type: i1.Router }] });
136
+ }] });
105
137
 
106
138
  class CrlCheckSettingsComponent {
107
139
  constructor(optionsService, tenantOptionsService, alertService) {
@@ -126,21 +158,34 @@ class CrlCheckSettingsComponent {
126
158
  }
127
159
  }
128
160
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlCheckSettingsComponent, deps: [{ token: i2.OptionsService }, { token: i2$1.TenantOptionsService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
129
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: CrlCheckSettingsComponent, isStandalone: false, selector: "c8y-crl-check-settings", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: CrlCheckSettingsComponent, isStandalone: true, selector: "c8y-crl-check-settings", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n", dependencies: [{ kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
130
162
  }
131
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlCheckSettingsComponent, decorators: [{
132
164
  type: Component,
133
- args: [{ selector: 'c8y-crl-check-settings', standalone: false, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n" }]
165
+ args: [{ selector: 'c8y-crl-check-settings', imports: [
166
+ ActionBarItemComponent,
167
+ BsDropdownDirective,
168
+ BsDropdownToggleDirective,
169
+ IconDirective,
170
+ C8yTranslateDirective,
171
+ BsDropdownMenuDirective,
172
+ NgTemplateOutlet,
173
+ FormsModule,
174
+ C8yTranslatePipe
175
+ ], template: "<c8y-action-bar-item [placement]=\"'right'\">\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown d-flex a-i-center\"\n title=\"{{ 'CRL check' | translate }}\"\n aria-haspopup=\"true\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"'check-document'\"\n ></i>\n <span\n class=\"text-truncate\"\n translate\n >\n CRL check\n </span>\n <i\n class=\"m-l-4 text-primary\"\n [c8yIcon]=\"'caret-down'\"\n ></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n data-cy=\"register-device--dropdown\"\n *dropdownMenu\n >\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ul class=\"dropdown-menu dropdown-menu-right visible-xs\">\n <ng-container *ngTemplateOutlet=\"dropdown\"></ng-container>\n </ul>\n\n <ng-template #dropdown>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Online`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.online\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.online.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Online`type of checking`' | translate }}\n </label>\n </li>\n <li>\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n title=\"{{ 'Offline`type of checking`' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"crlCheck.offline\"\n (ngModelChange)=\"\n updateTenantOption({\n category: 'configuration',\n key: 'crl.offline.check.enabled',\n value: $event\n })\n \"\n />\n <span class=\"m-r-4\"></span>\n {{ 'Offline`type of checking`' | translate }}\n </label>\n </li>\n </ng-template>\n </div>\n</c8y-action-bar-item>\n" }]
134
176
  }], ctorParameters: () => [{ type: i2.OptionsService }, { type: i2$1.TenantOptionsService }, { type: i2.AlertService }] });
135
177
 
136
178
  class CrlSettingsComponent {
137
- constructor(crlService, alertService, modalService) {
179
+ constructor(crlService, alertService, modalService, guard) {
138
180
  this.crlService = crlService;
139
181
  this.alertService = alertService;
140
182
  this.modalService = modalService;
183
+ this.guard = guard;
141
184
  this.crls = [this.getEmptyCertificateRevocation()];
142
185
  this.droppedFiles = [];
143
186
  this.today = new Date();
187
+ this.hasReadRole$ = from(this.guard.hasReadRole()).pipe(shareReplay(1));
188
+ this.hasAdminRole$ = from(this.guard.hasAdminRole()).pipe(shareReplay(1));
144
189
  this.MANUAL_ENTRY_POPOVER = gettext('In this section, you can override or add individual entries to the CRL. Providing the serial number is mandatory. In case the revocation date is not set, it will be configured to the current date.');
145
190
  this.FILE_UPLOAD_POPOVER = gettext('In this section, you can upload a file with the list of certificates to be revoked. The file must be in CSV format, and it should include the serial number and revocation date. If the revocation date is empty, it will be set to the current date.');
146
191
  }
@@ -221,13 +266,33 @@ class CrlSettingsComponent {
221
266
  serialNumberInHex: ''
222
267
  };
223
268
  }
224
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsComponent, deps: [{ token: i2$1.CrlService }, { token: i2.AlertService }, { token: i2.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
225
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: CrlSettingsComponent, isStandalone: false, selector: "c8y-crl-settings", ngImport: i0, template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-crl-check-settings></c8y-crl-check-settings>\n\n<c8y-help\n [icon]=\"'settings'\"\n src=\"/docs/device-certificate-authentication/managing-trusted-certificate-settings/#managing-trusted-certificate-settings\"\n></c8y-help>\n\n<form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n>\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Offline configuration of Certificate Revocation List (CRL)' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div class=\"legend form-block\">\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n data-cy=\"c8y-row-grid--new-row\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"colonedHexNumber\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div class=\"legend form-block\">\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!(crlManualForm.form.valid || isListEmpty) || (isListEmpty && !isFileDropped)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i2.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i5$1.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "ignoreMinMaxErrors", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i5$1.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: CrlCheckSettingsComponent, selector: "c8y-crl-check-settings" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
269
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsComponent, deps: [{ token: i2$1.CrlService }, { token: i2.AlertService }, { token: i2.ModalService }, { token: TrustedCertificatesGuard }], target: i0.ɵɵFactoryTarget.Component }); }
270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: CrlSettingsComponent, isStandalone: true, selector: "c8y-crl-settings", ngImport: i0, template: "<div *ngIf=\"(hasReadRole$ | async) || (hasAdminRole$ | async)\">\n <c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-crl-check-settings></c8y-crl-check-settings>\n\n <c8y-help\n [icon]=\"'settings'\"\n src=\"/docs/device-certificate-authentication/managing-trusted-certificate-settings/#managing-trusted-certificate-settings\"\n ></c8y-help>\n\n <form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Offline configuration of Certificate Revocation List (CRL)' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div class=\"legend form-block\">\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n data-cy=\"c8y-row-grid--new-row\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"colonedHexNumber\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div class=\"legend form-block\">\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n !(hasAdminRole$ | async) ||\n !(crlManualForm.form.valid || isListEmpty) ||\n (isListEmpty && !isFileDropped)\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: CrlCheckSettingsComponent, selector: "c8y-crl-check-settings" }, { kind: "component", type: HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "ignoreMinMaxErrors", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
226
271
  }
227
272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsComponent, decorators: [{
228
273
  type: Component,
229
- args: [{ selector: 'c8y-crl-settings', standalone: false, template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-crl-check-settings></c8y-crl-check-settings>\n\n<c8y-help\n [icon]=\"'settings'\"\n src=\"/docs/device-certificate-authentication/managing-trusted-certificate-settings/#managing-trusted-certificate-settings\"\n></c8y-help>\n\n<form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n>\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Offline configuration of Certificate Revocation List (CRL)' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div class=\"legend form-block\">\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n data-cy=\"c8y-row-grid--new-row\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"colonedHexNumber\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div class=\"legend form-block\">\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!(crlManualForm.form.valid || isListEmpty) || (isListEmpty && !isFileDropped)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
230
- }], ctorParameters: () => [{ type: i2$1.CrlService }, { type: i2.AlertService }, { type: i2.ModalService }] });
274
+ args: [{ selector: 'c8y-crl-settings', imports: [
275
+ TitleComponent,
276
+ BreadcrumbComponent,
277
+ BreadcrumbItemComponent,
278
+ CrlCheckSettingsComponent,
279
+ HelpComponent,
280
+ FormsModule,
281
+ PopoverDirective,
282
+ NgFor,
283
+ FormGroupComponent,
284
+ C8yTranslateDirective,
285
+ RequiredInputPlaceholderDirective,
286
+ DefaultValidationDirective,
287
+ BsDatepickerInputDirective,
288
+ BsDatepickerDirective,
289
+ NgIf,
290
+ IconDirective,
291
+ DropAreaComponent,
292
+ C8yTranslatePipe,
293
+ AsyncPipe
294
+ ], template: "<div *ngIf=\"(hasReadRole$ | async) || (hasAdminRole$ | async)\">\n <c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-crl-check-settings></c8y-crl-check-settings>\n\n <c8y-help\n [icon]=\"'settings'\"\n src=\"/docs/device-certificate-authentication/managing-trusted-certificate-settings/#managing-trusted-certificate-settings\"\n ></c8y-help>\n\n <form\n class=\"card card--fullpage\"\n #crlManualForm=\"ngForm\"\n novalidate\n >\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Offline configuration of Certificate Revocation List (CRL)' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div class=\"legend form-block\">\n {{ 'Manual' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ MANUAL_ENTRY_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <div\n class=\"row tight-grid\"\n data-cy=\"c8y-row-grid--new-row\"\n *ngFor=\"let certificateRevocation of crls; index as index; last as isLast\"\n >\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label\n [for]=\"'serialNumber' + index\"\n translate\n >\n Serial number\n </label>\n <input\n class=\"form-control\"\n required\n [name]=\"'serialNumber' + index\"\n [id]=\"'serialNumber' + index\"\n [(ngModel)]=\"certificateRevocation.serialNumberInHex\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '8ab34fe5476' }\"\n c8yDefaultValidation=\"colonedHexNumber\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-5\">\n <c8y-form-group class=\"datepicker\">\n <label [for]=\"'validTillPicker' + index\">\n {{ 'Valid till' | translate }}\n </label>\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Date to' | translate\"\n placeholder=\"{{ 'Date to' | translate }}\"\n [name]=\"'validTillPicker' + index\"\n [id]=\"'validTillPicker' + index\"\n [(ngModel)]=\"certificateRevocation.revocationDate\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n bsDatepicker\n [maxDate]=\"today\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-2\">\n <c8y-form-group>\n <div class=\"p-t-24\">\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-link hidden-xs hidden-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n *ngIf=\"isLast\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n\n <button\n class=\"btn btn-danger btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n *ngIf=\"crls.length > 1\"\n (click)=\"removeCertificateRevocation(certificateRevocation)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-block btn-sm visible-xs visible-sm\"\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"addCertificateRevocation()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n *ngIf=\"isLast\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add' | translate }}\n </button>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"legend form-block center\">\n {{ 'or' | translate }}\n </div>\n <div class=\"legend form-block\">\n {{ 'File upload' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ FILE_UPLOAD_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </div>\n\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Upload CRL file (.csv format)' | translate\"\n name=\"uploadCrlDropArea\"\n [(ngModel)]=\"droppedFiles\"\n [message]=\"'Upload CRL file (.csv format)' | translate\"\n [loadingMessage]=\"'Uploading\u2026' | translate\"\n [accept]=\"'.csv'\"\n [maxAllowedFiles]=\"1\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n ></c8y-drop-area>\n <p class=\"help-block has-info text-muted m-t-4\">\n {{ 'CRL file content will override manual entries.' | translate }}\n </p>\n\n <button\n class=\"btn btn-sm btn-default m-t-16\"\n title=\"{{ 'Download template' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrlTemplate()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"template\"\n ></i>\n {{ 'Download template' | translate }}\n </button>\n </div>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Download CRL file' | translate }}\"\n type=\"button\"\n (click)=\"downloadCrl()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"download\"\n ></i>\n {{ 'Download CRL file' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n !(hasAdminRole$ | async) ||\n !(crlManualForm.form.valid || isListEmpty) ||\n (isListEmpty && !isFileDropped)\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
295
+ }], ctorParameters: () => [{ type: i2$1.CrlService }, { type: i2.AlertService }, { type: i2.ModalService }, { type: TrustedCertificatesGuard }] });
231
296
 
232
297
  const trustedCertificatesSettingsRoutes = [
233
298
  {
@@ -238,20 +303,23 @@ const trustedCertificatesSettingsRoutes = [
238
303
  ];
239
304
  class CrlSettingsModule {
240
305
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
241
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsModule, declarations: [CrlSettingsComponent, CrlCheckSettingsComponent], imports: [CoreModule,
242
- CommonModule, i1.RouterModule, i5.BsDropdownModule, BsDatepickerModule,
243
- PopoverModule] }); }
306
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsModule, imports: [CoreModule,
307
+ CommonModule, i1.RouterModule, i2$2.BsDropdownModule, BsDatepickerModule,
308
+ PopoverModule,
309
+ CrlSettingsComponent,
310
+ CrlCheckSettingsComponent] }); }
244
311
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsModule, imports: [CoreModule,
245
312
  CommonModule,
246
313
  RouterModule.forChild(trustedCertificatesSettingsRoutes),
247
314
  BsDropdownModule.forRoot(),
248
315
  BsDatepickerModule,
249
- PopoverModule] }); }
316
+ PopoverModule,
317
+ CrlSettingsComponent,
318
+ CrlCheckSettingsComponent] }); }
250
319
  }
251
320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrlSettingsModule, decorators: [{
252
321
  type: NgModule,
253
322
  args: [{
254
- declarations: [CrlSettingsComponent, CrlCheckSettingsComponent],
255
323
  exports: [],
256
324
  imports: [
257
325
  CoreModule,
@@ -259,7 +327,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
259
327
  RouterModule.forChild(trustedCertificatesSettingsRoutes),
260
328
  BsDropdownModule.forRoot(),
261
329
  BsDatepickerModule,
262
- PopoverModule
330
+ PopoverModule,
331
+ CrlSettingsComponent,
332
+ CrlCheckSettingsComponent
263
333
  ]
264
334
  }]
265
335
  }] });
@@ -273,12 +343,14 @@ const PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES = {
273
343
  ACTIONS: {
274
344
  ADD: 'add',
275
345
  UPDATE: 'update',
276
- DELETE: 'delete'
346
+ DELETE: 'delete',
347
+ RENEW: 'renew'
277
348
  },
278
349
  RESULTS: {
279
350
  ADD_SUCCESS: 'certificateAdded',
280
351
  UPDATE_SUCCESS: 'certificateUpdated',
281
- DELETE_SUCCESS: 'certificateDeleted'
352
+ DELETE_SUCCESS: 'certificateDeleted',
353
+ RENEW_SUCCESS: 'certificateRenewed'
282
354
  }
283
355
  },
284
356
  VERIFICATION_CODE: {
@@ -349,15 +421,25 @@ class AddTrustedCertificateComponent {
349
421
  this.modal.hide();
350
422
  }
351
423
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AddTrustedCertificateComponent, deps: [{ token: i1$1.BsModalRef }, { token: i2$1.TrustedCertificateService }, { token: i2.AlertService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
352
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AddTrustedCertificateComponent, isStandalone: false, selector: "c8y-add-trusted-certificate", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div\n class=\"modal-title\"\n id=\"addCertificateModalTitle\"\n translate\n >\n Add trusted certificate\n </div>\n </div>\n <form\n #addTrustedCertificateForm=\"ngForm\"\n (ngSubmit)=\"addTrustedCertificateForm.form.valid && fileIsUploaded && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addCertificateModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"certificateName\"\n translate\n >\n Certificate name\n </label>\n <input\n class=\"form-control\"\n id=\"certificateName\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n name=\"certificateName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"trustedCertificate.name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"certificate\"\n translate\n >\n Certificate\n </label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n id=\"autoRegistration\"\n name=\"autoRegistration\"\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add certificate' | translate }}\"\n type=\"submit\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5$2.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
424
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AddTrustedCertificateComponent, isStandalone: true, selector: "c8y-add-trusted-certificate", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div\n class=\"modal-title\"\n id=\"addCertificateModalTitle\"\n translate\n >\n Add trusted certificate\n </div>\n </div>\n <form\n #addTrustedCertificateForm=\"ngForm\"\n (ngSubmit)=\"addTrustedCertificateForm.form.valid && fileIsUploaded && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addCertificateModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"certificateName\"\n translate\n >\n Certificate name\n </label>\n <input\n class=\"form-control\"\n id=\"certificateName\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n name=\"certificateName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"trustedCertificate.name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"certificate\"\n translate\n >\n Certificate\n </label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n id=\"autoRegistration\"\n name=\"autoRegistration\"\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add certificate' | translate }}\"\n type=\"submit\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
353
425
  }
354
426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AddTrustedCertificateComponent, decorators: [{
355
427
  type: Component,
356
- args: [{ selector: 'c8y-add-trusted-certificate', standalone: false, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div\n class=\"modal-title\"\n id=\"addCertificateModalTitle\"\n translate\n >\n Add trusted certificate\n </div>\n </div>\n <form\n #addTrustedCertificateForm=\"ngForm\"\n (ngSubmit)=\"addTrustedCertificateForm.form.valid && fileIsUploaded && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addCertificateModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"certificateName\"\n translate\n >\n Certificate name\n </label>\n <input\n class=\"form-control\"\n id=\"certificateName\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n name=\"certificateName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"trustedCertificate.name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"certificate\"\n translate\n >\n Certificate\n </label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n id=\"autoRegistration\"\n name=\"autoRegistration\"\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add certificate' | translate }}\"\n type=\"submit\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
428
+ args: [{ selector: 'c8y-add-trusted-certificate', imports: [
429
+ IconDirective,
430
+ C8yTranslateDirective,
431
+ FormsModule,
432
+ FormGroupComponent,
433
+ RequiredInputPlaceholderDirective,
434
+ DropAreaComponent,
435
+ PopoverDirective,
436
+ ButtonCheckboxDirective,
437
+ C8yTranslatePipe
438
+ ], template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div\n class=\"modal-title\"\n id=\"addCertificateModalTitle\"\n translate\n >\n Add trusted certificate\n </div>\n </div>\n <form\n #addTrustedCertificateForm=\"ngForm\"\n (ngSubmit)=\"addTrustedCertificateForm.form.valid && fileIsUploaded && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addCertificateModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"certificateName\"\n translate\n >\n Certificate name\n </label>\n <input\n class=\"form-control\"\n id=\"certificateName\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n name=\"certificateName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"trustedCertificate.name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label\n for=\"certificate\"\n translate\n >\n Certificate\n </label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n id=\"autoRegistration\"\n name=\"autoRegistration\"\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add certificate' | translate }}\"\n type=\"submit\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
357
439
  }], ctorParameters: () => [{ type: i1$1.BsModalRef }, { type: i2$1.TrustedCertificateService }, { type: i2.AlertService }, { type: i2.GainsightService }] });
358
440
 
359
441
  class TrustedCertificateListComponent {
360
- constructor(bsModal, alertService, trustedCertificateService, modalService, translateService, clipboardService, gainsightService, systemOptionsService, featureCacheService) {
442
+ constructor(bsModal, alertService, trustedCertificateService, modalService, translateService, clipboardService, gainsightService, systemOptionsService, featureCacheService, guard) {
361
443
  this.bsModal = bsModal;
362
444
  this.alertService = alertService;
363
445
  this.trustedCertificateService = trustedCertificateService;
@@ -367,14 +449,15 @@ class TrustedCertificateListComponent {
367
449
  this.gainsightService = gainsightService;
368
450
  this.systemOptionsService = systemOptionsService;
369
451
  this.featureCacheService = featureCacheService;
452
+ this.guard = guard;
370
453
  this.PROOF_OF_POSSESSION_POPOVER = gettext('"Proof of possession" is a security method used to prove that whoever sends a message is also in the possession of the particular cryptographic key.');
371
454
  this.SIGNED_VERIFICATION_CODE_POPOVER = gettext('Use the following openssl command to create the signed verification code: openssl dgst -sha256 -sign <private.key> <verification_code.txt> | openssl base64 -A');
372
455
  this.AUTO_REGISTRATION_POPOVER = gettext('Devices using the MQTT protocol with credentials signed by this certificate will be able to communicate with the platform without prior registration. The option does not support devices using the LWM2M protocol.');
373
456
  this.reloading = new BehaviorSubject(false);
374
457
  this.reload = new BehaviorSubject(null);
375
- this.trustedCertificates = this.reload.pipe(tap(() => this.reloading.next(true)), switchMap(() => this.getTrustedCertificates()), tap(reponse => {
376
- this.certificateAuthorityExists = reponse.data.some(value => value.tenantCertificateAuthority);
377
- }), tap(() => this.reloading.next(false)), shareReplay(1));
458
+ this.trustedCertificates = this.reload.pipe(tap(() => this.reloading.next(true)), switchMap(() => this.getTrustedCertificates()), tap(response => {
459
+ this.certificateAuthorityExists = response.data.some(value => value.tenantCertificateAuthority);
460
+ }), tap(() => this.reloading.next(false)), shareReplay$1(1));
378
461
  this.sortByExpirationDateAsc = pipe(tap(results => {
379
462
  return results.sort((n1, n2) => {
380
463
  if (n1.tenantCertificateAuthority !== n2.tenantCertificateAuthority) {
@@ -383,6 +466,8 @@ class TrustedCertificateListComponent {
383
466
  return n1.notAfter.localeCompare(n2.notAfter);
384
467
  });
385
468
  }));
469
+ this.hasReadRole$ = from(this.guard.hasReadRole()).pipe(shareReplay$1(1));
470
+ this.hasAdminRole$ = from(this.guard.hasAdminRole()).pipe(shareReplay$1(1));
386
471
  this.certificateAuthorityExists = false;
387
472
  this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES;
388
473
  this.certificateAuthorityFeatureEnabled = false;
@@ -475,20 +560,44 @@ class TrustedCertificateListComponent {
475
560
  this.alertService.addServerFailure(ex);
476
561
  }
477
562
  }
478
- highlightDependingOnExpirationStatus(item) {
479
- const warningOffset = 24 * 60 * 60 * 1000 * 90; // 90 days
480
- const todayTimestamp = new Date().getTime();
481
- const warningTimestamp = new Date().getTime() + warningOffset;
482
- const notAfterTimestamp = new Date(item.notAfter).getTime();
483
- const expired = notAfterTimestamp < todayTimestamp;
484
- const expiresInLessThan90Days = notAfterTimestamp < warningTimestamp;
485
- if (expired) {
486
- return 'text-danger';
563
+ getExpirationHighlight(item) {
564
+ const now = Date.now();
565
+ const notAfter = new Date(item.notAfter).getTime();
566
+ const oneAndHalfYear = 1.5 * 365 * 24 * 60 * 60 * 1000;
567
+ const oneYear = 365 * 24 * 60 * 60 * 1000;
568
+ const ninetyDays = 90 * 24 * 60 * 60 * 1000;
569
+ const result = {
570
+ expired: false,
571
+ icon: 'calendar',
572
+ textClass: '',
573
+ tooltipText: '',
574
+ renewable: false
575
+ };
576
+ if (notAfter < now) {
577
+ result.expired = true;
578
+ result.icon = 'warning';
579
+ result.textClass = 'text-muted';
580
+ result.tooltipText = gettext('Certificate expired');
581
+ }
582
+ else if (notAfter < now + ninetyDays) {
583
+ result.icon = 'warning';
584
+ result.textClass = 'text-danger';
585
+ result.tooltipText = gettext('Certificate expires in less than 90 days');
586
+ }
587
+ else if (notAfter < now + oneYear) {
588
+ result.icon = 'warning';
589
+ result.textClass = 'text-warning';
590
+ result.tooltipText = gettext('Certificate expires in less than 1 year');
591
+ }
592
+ else if (notAfter < now + oneAndHalfYear) {
593
+ result.icon = 'info';
594
+ result.textClass = 'text-info';
595
+ result.tooltipText = gettext('Certificate expires in less than 1.5 year');
487
596
  }
488
- if (expiresInLessThan90Days) {
489
- return 'text-warning';
597
+ if (item.tenantCertificateAuthority && notAfter < now + oneAndHalfYear) {
598
+ result.renewable = true;
490
599
  }
491
- return '';
600
+ return result;
492
601
  }
493
602
  regenerateUnsignedVerificationCode(trustedCertificate) {
494
603
  this.trustedCertificateService.regeneratePoPVerificationCode(trustedCertificate).then(({ data }) => {
@@ -537,6 +646,21 @@ class TrustedCertificateListComponent {
537
646
  };
538
647
  reader.readAsText(input.files[0]);
539
648
  }
649
+ async renewCertificate() {
650
+ try {
651
+ await this.trustedCertificateService.renewCertificateAuthority();
652
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES.EVENT, {
653
+ component: PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES.CERTIFICATES.COMPONENTS.TRUSTED_CERTIFICATE,
654
+ result: PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES.CERTIFICATES.RESULTS.RENEW_SUCCESS,
655
+ action: PRODUCT_EXPERIENCE_TRUSTED_CERTIFICATES.CERTIFICATES.ACTIONS.RENEW
656
+ });
657
+ this.alertService.success(gettext('CA certificate renewed.'));
658
+ this.reload.next();
659
+ }
660
+ catch (ex) {
661
+ this.alertService.addServerFailure(ex);
662
+ }
663
+ }
540
664
  async showLimitationAlert() {
541
665
  const { data } = await this.systemOptionsService.detail({
542
666
  category: 'ssl',
@@ -550,13 +674,41 @@ class TrustedCertificateListComponent {
550
674
  async checkCertificateAuthorityFeature() {
551
675
  this.certificateAuthorityFeatureEnabled = await firstValueFrom(this.featureCacheService.getFeatureState('certificate-authority'));
552
676
  }
553
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListComponent, deps: [{ token: i1$1.BsModalService }, { token: i2.AlertService }, { token: i2$1.TrustedCertificateService }, { token: i2.ModalService }, { token: i4$1.TranslateService }, { token: i2.ClipboardService }, { token: i2.GainsightService }, { token: i2$1.SystemOptionsService }, { token: i2.FeatureCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
554
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TrustedCertificateListComponent, isStandalone: false, selector: "c8y-trusted-certificates", ngImport: i0, template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"certificateAuthorityFeatureEnabled\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add CA certificate' | translate }}\"\n type=\"button\"\n [disabled]=\"certificateAuthorityExists\"\n (click)=\"addCACertificate()\"\n >\n <i c8yIcon=\"contract\"></i>\n {{ 'Add CA certificate' | translate }}\n </button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections. Only one certificate is allowed, which is why the button is disabled.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"certificateAuthorityExists\"\n ></button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!certificateAuthorityExists\"\n ></button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add trusted certificate' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadTrustedCertificates()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-certificate-authentication/managing-trusted-certificates/#managing-trusted-certificates\"\n></c8y-help>\n\n<c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No trusted certificates to display.' | translate\"\n [subtitle]=\"'Add your first certificate by clicking below.' | translate\"\n *ngIf=\"(trustedCertificates | async)?.data.length === 0\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n {{ 'Add trusted certificate' | translate }}\n </button>\n</c8y-ui-empty-state>\n\n<c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list__item--empty-actions\"\n *ngIf=\"(trustedCertificates | async)?.data.length > 0\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"invisible\"\n c8yIcon=\"certificate\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Certificate' | translate }} \"\n >\n {{ 'Certificate' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Status' | translate }}\"\n >\n {{ 'Status' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}\"\n >\n {{ 'Algorithm' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Auto registration' | translate }}\"\n >\n {{ 'Auto registration' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Proof of possession' | translate }}\"\n >\n {{ 'Proof of possession' | translate }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n\n <c8y-li\n *c8yFor=\"\n let trustedCertificate of trustedCertificates | async;\n let i = index;\n pipe: sortByExpirationDateAsc;\n loadMore: 'none'\n \"\n #listItem\n data-cy=\"c8y-trusted-certificates-list--item-block\"\n >\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'Certificate' | translate }}\"\n tooltip=\"{{ 'Certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"certificate\"></i>\n </button>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'CA certificate' | translate }}\"\n tooltip=\"{{ 'CA certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"contract\"></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n <button\n class=\"btn-clean text-truncate\"\n title=\"{{ trustedCertificate.name }}\"\n type=\"button\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n {{ trustedCertificate.name }}\n </button>\n </div>\n <div class=\"col-2\">\n <div class=\"visible-xs p-8\"></div>\n <button\n class=\"btn c8y-btn-checkbox--inline\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n (ngModelChange)=\"updateCertificate(trustedCertificate, { status: $event })\"\n >\n <small\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </small>\n <small\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </small>\n </button>\n <div class=\"visible-xs p-8\"></div>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}: {{ trustedCertificate.algorithmName }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Algorithm\n </span>\n {{ trustedCertificate.algorithmName }}\n </div>\n </div>\n\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{ trustedCertificate.notAfter | c8yDate }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n <small [ngClass]=\"highlightDependingOnExpirationStatus(trustedCertificate)\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n *ngIf=\"!highlightDependingOnExpirationStatus(trustedCertificate)\"\n ></i>\n <i\n class=\"m-r-4\"\n c8yIcon=\"warning\"\n *ngIf=\"highlightDependingOnExpirationStatus(trustedCertificate)\"\n ></i>\n <span>{{ trustedCertificate.notAfter | c8yDate }}</span>\n </small>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Auto registration' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Enabled`auto registration`' | translate\n }}\"\n *ngIf=\"trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Enabled`auto registration`' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Disabled`auto registration`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Disabled`auto registration`' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n </div>\n <div class=\"col-2 d-flex\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Proof of possession' | translate }}\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{ 'N/A' | translate }}\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n {{ 'N/A' | translate }}\n </span>\n <span *ngIf=\"!trustedCertificate.tenantCertificateAuthority\">\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n *ngIf=\"trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </div>\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </div>\n </span>\n </span>\n </div>\n <button\n class=\"m-l-auto btn-dot btn-dot--danger btn showOnHover m-r-8\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificate--delete\"\n [delay]=\"500\"\n (click)=\"deleteTrustedCertificate(trustedCertificate)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <div class=\"p-t-16 p-b-16\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Certificate name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n type=\"text\"\n required\n data-cy=\"c8y-trusted-certificates--edit-certificate-name\"\n [(ngModel)]=\"trustedCertificate.name\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Update certificate name' | translate }}\"\n type=\"button\"\n (click)=\"\n updateCertificate(trustedCertificate, { name: trustedCertificate.name })\n \"\n [disabled]=\"!trustedCertificate.name\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-1\"></div>\n <div class=\"col-md-7\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"certInPemFormat\"\n translate\n >\n Certificate\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"certInPemFormat\"\n name=\"certInPemFormat\"\n type=\"text\"\n rows=\"7\"\n readonly\n [(ngModel)]=\"trustedCertificate.certInPemFormat\"\n ></textarea>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n (ngModelChange)=\"\n updateCertificate(trustedCertificate, { autoRegistrationEnabled: $event })\n \"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div\n class=\"legend form-block\"\n translate\n >\n Additional properties\n </div>\n <ul class=\"list-unstyled\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Algorithm' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.algorithmName }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Version' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.version }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Valid from' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notBefore | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Issuer' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.issuer }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Expiration date' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notAfter | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Serial number' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.serialNumber }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Subject`of a certificate`' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.subject }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"col-md-1\"></div>\n <div\n class=\"col-md-7\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <div class=\"legend form-block\">\n {{ 'Proof of possession' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PROOF_OF_POSSESSION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n <div *ngIf=\"trustedCertificate.proofOfPossessionValid\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </span>\n </div>\n <div *ngIf=\"!trustedCertificate.proofOfPossessionValid\">\n <div class=\"row m-b-16\">\n <div class=\"col-md-6\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </span>\n </div>\n <div class=\"col-md-6 col-lg-6 text-right-md\">\n <span class=\"text-label-small m-r-4\">\n {{ 'Verification code expires/expired on' | translate }}\n </span>\n {{\n (trustedCertificate.proofOfPossessionVerificationCodeUsableUntil | c8yDate) ||\n '---'\n }}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"unsignedVerificationCode\"\n translate\n >\n Verification code\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"unsignedVerificationCode\"\n name=\"unsignedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n readonly\n [(ngModel)]=\"trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Regenerate verification code' | translate }}\"\n type=\"button\"\n (click)=\"regenerateUnsignedVerificationCode(trustedCertificate)\"\n >\n {{ 'Regenerate`verification code`' | translate }}\n </button>\n\n <button\n class=\"btn btn-sm btn-default m-l-auto m-r-0\"\n [attr.aria-label]=\"'Copy to clipboard' | translate\"\n tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--copy-to-clipboard\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"copyUnsignedVerificationCodeToClipboard(trustedCertificate)\"\n >\n <i c8yIcon=\"clipboard\"></i>\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Download as file' | translate\"\n tooltip=\"{{ 'Download as file' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--download-as-file\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"downloadUnsignedVerificationCode(trustedCertificate)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.VERIFICATION_CODE.COMPONENTS.DOWNLOAD_CODE,\n action: PRODUCT_EXPERIENCE.VERIFICATION_CODE.ACTIONS.DOWNLOAD\n }\"\n >\n <i c8yIcon=\"download\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"signedVerificationCode\"\n >\n {{ 'Signed verification code' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ SIGNED_VERIFICATION_CODE_POPOVER | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--signed-verification-code-popup\"\n [outsideClick]=\"true\"\n ></button>\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"signedVerificationCode\"\n name=\"signedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n [(ngModel)]=\"trustedCertificate.signedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Verify signed verification code' | translate }}\"\n type=\"button\"\n (click)=\"verifySignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!trustedCertificate.signedVerificationCode\"\n >\n {{ 'Verify`signed verification code`' | translate }}\n </button>\n <button\n class=\"btn btn-sm btn-default m-l-auto\"\n [attr.aria-label]=\"'Upload file' | translate\"\n tooltip=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"fileInput.click()\"\n >\n <i c8yIcon=\"upload\"></i>\n </button>\n <input\n class=\"hidden\"\n type=\"file\"\n #fileInput\n (change)=\"onFileInput($event, trustedCertificate)\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-collapse>\n </c8y-li>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i5$2.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
677
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListComponent, deps: [{ token: i1$1.BsModalService }, { token: i2.AlertService }, { token: i2$1.TrustedCertificateService }, { token: i2.ModalService }, { token: i4$1.TranslateService }, { token: i2.ClipboardService }, { token: i2.GainsightService }, { token: i2$1.SystemOptionsService }, { token: i2.FeatureCacheService }, { token: TrustedCertificatesGuard }], target: i0.ɵɵFactoryTarget.Component }); }
678
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TrustedCertificateListComponent, isStandalone: true, selector: "c8y-trusted-certificates", ngImport: i0, template: "<div *ngIf=\"(hasReadRole$ | async) || (hasAdminRole$ | async)\">\n <c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"certificateAuthorityFeatureEnabled\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add CA certificate' | translate }}\"\n type=\"button\"\n [disabled]=\"!(hasAdminRole$ | async) || certificateAuthorityExists\"\n (click)=\"addCACertificate()\"\n >\n <i c8yIcon=\"contract\"></i>\n {{ 'Add CA certificate' | translate }}\n </button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections. Only one certificate is allowed, which is why the button is disabled.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"certificateAuthorityExists\"\n ></button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!certificateAuthorityExists\"\n ></button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add trusted certificate' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadTrustedCertificates()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-certificate-authentication/managing-trusted-certificates/#managing-trusted-certificates\"\n ></c8y-help>\n\n <c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No trusted certificates to display.' | translate\"\n [subtitle]=\"'Add your first certificate by clicking below.' | translate\"\n *ngIf=\"(trustedCertificates | async)?.data.length === 0\"\n >\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n {{ 'Add trusted certificate' | translate }}\n </button>\n </c8y-ui-empty-state>\n\n <c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list__item--empty-actions\"\n *ngIf=\"(trustedCertificates | async)?.data.length > 0\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"invisible\"\n c8yIcon=\"certificate\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Certificate' | translate }} \"\n >\n {{ 'Certificate' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Status' | translate }}\"\n >\n {{ 'Status' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}\"\n >\n {{ 'Algorithm' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Auto registration' | translate }}\"\n >\n {{ 'Auto registration' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Proof of possession' | translate }}\"\n >\n {{ 'Proof of possession' | translate }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n\n <c8y-li\n *c8yFor=\"\n let trustedCertificate of trustedCertificates | async;\n let i = index;\n pipe: sortByExpirationDateAsc;\n loadMore: 'none'\n \"\n #listItem\n data-cy=\"c8y-trusted-certificates-list--item-block\"\n >\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'Certificate' | translate }}\"\n tooltip=\"{{ 'Certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"certificate\"></i>\n </button>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'CA certificate' | translate }}\"\n tooltip=\"{{ 'CA certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"contract\"></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n <button\n class=\"btn-clean text-truncate\"\n title=\"{{ trustedCertificate.name }}\"\n type=\"button\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n {{ trustedCertificate.name }}\n </button>\n </div>\n <div class=\"col-2\">\n <div class=\"visible-xs p-8\"></div>\n <button\n class=\"btn c8y-btn-checkbox--inline\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n (ngModelChange)=\"updateCertificate(trustedCertificate, { status: $event })\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n [ngClass]=\"{\n disabled: !(hasAdminRole$ | async)\n }\"\n >\n <small\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </small>\n <small\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </small>\n </button>\n <div class=\"visible-xs p-8\"></div>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}: {{ trustedCertificate.algorithmName }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Algorithm\n </span>\n {{ trustedCertificate.algorithmName }}\n </div>\n </div>\n\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{ trustedCertificate.notAfter | c8yDate }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n @let expirationHighlight = getExpirationHighlight(trustedCertificate);\n <span>\n <small\n [attr.title]=\"expirationHighlight?.tooltipText\"\n [ngClass]=\"expirationHighlight?.textClass\"\n >\n <ng-container *ngIf=\"expirationHighlight?.expired; else notExpiredYet\">\n <del>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </del>\n </ng-container>\n <ng-template #notExpiredYet>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </ng-template>\n <ng-template #expirationDateTpl>\n <i\n class=\"m-r-4\"\n c8yIcon=\"{{ expirationHighlight?.icon }}\"\n *ngIf=\"expirationHighlight?.icon\"\n ></i>\n <span>{{ trustedCertificate.notAfter | c8yDate }}</span>\n </ng-template>\n </small>\n <button\n class=\"btn btn-link btn-icon\"\n title=\"{{ 'Renew certificate' | translate }}\"\n type=\"button\"\n *ngIf=\"expirationHighlight?.renewable\"\n (click)=\"renewCertificate()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n </span>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Auto registration' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Enabled`auto registration`' | translate\n }}\"\n *ngIf=\"trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Enabled`auto registration`' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Disabled`auto registration`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Disabled`auto registration`' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n </div>\n <div class=\"col-2 d-flex\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Proof of possession' | translate }}\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{ 'N/A' | translate }}\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n {{ 'N/A' | translate }}\n </span>\n <span *ngIf=\"!trustedCertificate.tenantCertificateAuthority\">\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n *ngIf=\"trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </div>\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </div>\n </span>\n </span>\n </div>\n <button\n class=\"m-l-auto btn-dot btn-dot--danger btn showOnHover m-r-8\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificate--delete\"\n [delay]=\"500\"\n (click)=\"deleteTrustedCertificate(trustedCertificate)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <div class=\"p-t-16 p-b-16\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Certificate name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n type=\"text\"\n required\n data-cy=\"c8y-trusted-certificates--edit-certificate-name\"\n [(ngModel)]=\"trustedCertificate.name\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Update certificate name' | translate }}\"\n type=\"button\"\n (click)=\"\n updateCertificate(trustedCertificate, { name: trustedCertificate.name })\n \"\n [disabled]=\"!trustedCertificate.name\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-1\"></div>\n <div class=\"col-md-7\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"certInPemFormat\"\n translate\n >\n Certificate\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"certInPemFormat\"\n name=\"certInPemFormat\"\n type=\"text\"\n rows=\"7\"\n readonly\n [(ngModel)]=\"trustedCertificate.certInPemFormat\"\n ></textarea>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n [ngClass]=\"{\n disabled: !(hasAdminRole$ | async)\n }\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n (ngModelChange)=\"\n updateCertificate(trustedCertificate, { autoRegistrationEnabled: $event })\n \"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div\n class=\"legend form-block\"\n translate\n >\n Additional properties\n </div>\n <ul class=\"list-unstyled\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Algorithm' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.algorithmName }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Version' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.version }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Valid from' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notBefore | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Issuer' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.issuer }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Expiration date' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notAfter | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Serial number' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.serialNumber }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Subject`of a certificate`' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.subject }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"col-md-1\"></div>\n <div\n class=\"col-md-7\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <div class=\"legend form-block\">\n {{ 'Proof of possession' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PROOF_OF_POSSESSION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n <div *ngIf=\"trustedCertificate.proofOfPossessionValid\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </span>\n </div>\n <div *ngIf=\"!trustedCertificate.proofOfPossessionValid\">\n <div class=\"row m-b-16\">\n <div class=\"col-md-6\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </span>\n </div>\n <div class=\"col-md-6 col-lg-6 text-right-md\">\n <span class=\"text-label-small m-r-4\">\n {{ 'Verification code expires/expired on' | translate }}\n </span>\n {{\n (trustedCertificate.proofOfPossessionVerificationCodeUsableUntil | c8yDate) ||\n '---'\n }}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"unsignedVerificationCode\"\n translate\n >\n Verification code\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"unsignedVerificationCode\"\n name=\"unsignedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n readonly\n [(ngModel)]=\"trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Regenerate verification code' | translate }}\"\n type=\"button\"\n (click)=\"regenerateUnsignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n {{ 'Regenerate`verification code`' | translate }}\n </button>\n\n <button\n class=\"btn btn-sm btn-default m-l-auto m-r-0\"\n [attr.aria-label]=\"'Copy to clipboard' | translate\"\n tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--copy-to-clipboard\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"copyUnsignedVerificationCodeToClipboard(trustedCertificate)\"\n >\n <i c8yIcon=\"clipboard\"></i>\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Download as file' | translate\"\n tooltip=\"{{ 'Download as file' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--download-as-file\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"downloadUnsignedVerificationCode(trustedCertificate)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.VERIFICATION_CODE.COMPONENTS.DOWNLOAD_CODE,\n action: PRODUCT_EXPERIENCE.VERIFICATION_CODE.ACTIONS.DOWNLOAD\n }\"\n >\n <i c8yIcon=\"download\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"signedVerificationCode\"\n >\n {{ 'Signed verification code' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ SIGNED_VERIFICATION_CODE_POPOVER | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--signed-verification-code-popup\"\n [outsideClick]=\"true\"\n ></button>\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"signedVerificationCode\"\n name=\"signedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n [(ngModel)]=\"trustedCertificate.signedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Verify signed verification code' | translate }}\"\n type=\"button\"\n (click)=\"verifySignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!trustedCertificate.signedVerificationCode\"\n >\n {{ 'Verify`signed verification code`' | translate }}\n </button>\n <button\n class=\"btn btn-sm btn-default m-l-auto\"\n [attr.aria-label]=\"'Upload file' | translate\"\n tooltip=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"fileInput.click()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"upload\"></i>\n </button>\n <input\n class=\"hidden\"\n type=\"file\"\n #fileInput\n (change)=\"onFileInput($event, trustedCertificate)\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</div>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "directive", type: ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
555
679
  }
556
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListComponent, decorators: [{
557
681
  type: Component,
558
- args: [{ selector: 'c8y-trusted-certificates', standalone: false, template: "<c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"certificateAuthorityFeatureEnabled\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add CA certificate' | translate }}\"\n type=\"button\"\n [disabled]=\"certificateAuthorityExists\"\n (click)=\"addCACertificate()\"\n >\n <i c8yIcon=\"contract\"></i>\n {{ 'Add CA certificate' | translate }}\n </button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections. Only one certificate is allowed, which is why the button is disabled.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"certificateAuthorityExists\"\n ></button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!certificateAuthorityExists\"\n ></button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add trusted certificate' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadTrustedCertificates()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-certificate-authentication/managing-trusted-certificates/#managing-trusted-certificates\"\n></c8y-help>\n\n<c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No trusted certificates to display.' | translate\"\n [subtitle]=\"'Add your first certificate by clicking below.' | translate\"\n *ngIf=\"(trustedCertificates | async)?.data.length === 0\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n {{ 'Add trusted certificate' | translate }}\n </button>\n</c8y-ui-empty-state>\n\n<c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list__item--empty-actions\"\n *ngIf=\"(trustedCertificates | async)?.data.length > 0\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"invisible\"\n c8yIcon=\"certificate\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Certificate' | translate }} \"\n >\n {{ 'Certificate' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Status' | translate }}\"\n >\n {{ 'Status' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}\"\n >\n {{ 'Algorithm' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Auto registration' | translate }}\"\n >\n {{ 'Auto registration' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Proof of possession' | translate }}\"\n >\n {{ 'Proof of possession' | translate }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n\n <c8y-li\n *c8yFor=\"\n let trustedCertificate of trustedCertificates | async;\n let i = index;\n pipe: sortByExpirationDateAsc;\n loadMore: 'none'\n \"\n #listItem\n data-cy=\"c8y-trusted-certificates-list--item-block\"\n >\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'Certificate' | translate }}\"\n tooltip=\"{{ 'Certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"certificate\"></i>\n </button>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'CA certificate' | translate }}\"\n tooltip=\"{{ 'CA certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"contract\"></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n <button\n class=\"btn-clean text-truncate\"\n title=\"{{ trustedCertificate.name }}\"\n type=\"button\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n {{ trustedCertificate.name }}\n </button>\n </div>\n <div class=\"col-2\">\n <div class=\"visible-xs p-8\"></div>\n <button\n class=\"btn c8y-btn-checkbox--inline\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n (ngModelChange)=\"updateCertificate(trustedCertificate, { status: $event })\"\n >\n <small\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </small>\n <small\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </small>\n </button>\n <div class=\"visible-xs p-8\"></div>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}: {{ trustedCertificate.algorithmName }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Algorithm\n </span>\n {{ trustedCertificate.algorithmName }}\n </div>\n </div>\n\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{ trustedCertificate.notAfter | c8yDate }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n <small [ngClass]=\"highlightDependingOnExpirationStatus(trustedCertificate)\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n *ngIf=\"!highlightDependingOnExpirationStatus(trustedCertificate)\"\n ></i>\n <i\n class=\"m-r-4\"\n c8yIcon=\"warning\"\n *ngIf=\"highlightDependingOnExpirationStatus(trustedCertificate)\"\n ></i>\n <span>{{ trustedCertificate.notAfter | c8yDate }}</span>\n </small>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Auto registration' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Enabled`auto registration`' | translate\n }}\"\n *ngIf=\"trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Enabled`auto registration`' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Disabled`auto registration`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Disabled`auto registration`' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n </div>\n <div class=\"col-2 d-flex\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Proof of possession' | translate }}\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{ 'N/A' | translate }}\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n {{ 'N/A' | translate }}\n </span>\n <span *ngIf=\"!trustedCertificate.tenantCertificateAuthority\">\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n *ngIf=\"trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </div>\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </div>\n </span>\n </span>\n </div>\n <button\n class=\"m-l-auto btn-dot btn-dot--danger btn showOnHover m-r-8\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificate--delete\"\n [delay]=\"500\"\n (click)=\"deleteTrustedCertificate(trustedCertificate)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <div class=\"p-t-16 p-b-16\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Certificate name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n type=\"text\"\n required\n data-cy=\"c8y-trusted-certificates--edit-certificate-name\"\n [(ngModel)]=\"trustedCertificate.name\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Update certificate name' | translate }}\"\n type=\"button\"\n (click)=\"\n updateCertificate(trustedCertificate, { name: trustedCertificate.name })\n \"\n [disabled]=\"!trustedCertificate.name\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-1\"></div>\n <div class=\"col-md-7\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"certInPemFormat\"\n translate\n >\n Certificate\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"certInPemFormat\"\n name=\"certInPemFormat\"\n type=\"text\"\n rows=\"7\"\n readonly\n [(ngModel)]=\"trustedCertificate.certInPemFormat\"\n ></textarea>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n (ngModelChange)=\"\n updateCertificate(trustedCertificate, { autoRegistrationEnabled: $event })\n \"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div\n class=\"legend form-block\"\n translate\n >\n Additional properties\n </div>\n <ul class=\"list-unstyled\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Algorithm' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.algorithmName }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Version' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.version }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Valid from' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notBefore | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Issuer' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.issuer }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Expiration date' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notAfter | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Serial number' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.serialNumber }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Subject`of a certificate`' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.subject }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"col-md-1\"></div>\n <div\n class=\"col-md-7\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <div class=\"legend form-block\">\n {{ 'Proof of possession' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PROOF_OF_POSSESSION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n <div *ngIf=\"trustedCertificate.proofOfPossessionValid\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </span>\n </div>\n <div *ngIf=\"!trustedCertificate.proofOfPossessionValid\">\n <div class=\"row m-b-16\">\n <div class=\"col-md-6\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </span>\n </div>\n <div class=\"col-md-6 col-lg-6 text-right-md\">\n <span class=\"text-label-small m-r-4\">\n {{ 'Verification code expires/expired on' | translate }}\n </span>\n {{\n (trustedCertificate.proofOfPossessionVerificationCodeUsableUntil | c8yDate) ||\n '---'\n }}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"unsignedVerificationCode\"\n translate\n >\n Verification code\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"unsignedVerificationCode\"\n name=\"unsignedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n readonly\n [(ngModel)]=\"trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Regenerate verification code' | translate }}\"\n type=\"button\"\n (click)=\"regenerateUnsignedVerificationCode(trustedCertificate)\"\n >\n {{ 'Regenerate`verification code`' | translate }}\n </button>\n\n <button\n class=\"btn btn-sm btn-default m-l-auto m-r-0\"\n [attr.aria-label]=\"'Copy to clipboard' | translate\"\n tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--copy-to-clipboard\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"copyUnsignedVerificationCodeToClipboard(trustedCertificate)\"\n >\n <i c8yIcon=\"clipboard\"></i>\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Download as file' | translate\"\n tooltip=\"{{ 'Download as file' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--download-as-file\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"downloadUnsignedVerificationCode(trustedCertificate)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.VERIFICATION_CODE.COMPONENTS.DOWNLOAD_CODE,\n action: PRODUCT_EXPERIENCE.VERIFICATION_CODE.ACTIONS.DOWNLOAD\n }\"\n >\n <i c8yIcon=\"download\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"signedVerificationCode\"\n >\n {{ 'Signed verification code' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ SIGNED_VERIFICATION_CODE_POPOVER | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--signed-verification-code-popup\"\n [outsideClick]=\"true\"\n ></button>\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"signedVerificationCode\"\n name=\"signedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n [(ngModel)]=\"trustedCertificate.signedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Verify signed verification code' | translate }}\"\n type=\"button\"\n (click)=\"verifySignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!trustedCertificate.signedVerificationCode\"\n >\n {{ 'Verify`signed verification code`' | translate }}\n </button>\n <button\n class=\"btn btn-sm btn-default m-l-auto\"\n [attr.aria-label]=\"'Upload file' | translate\"\n tooltip=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"fileInput.click()\"\n >\n <i c8yIcon=\"upload\"></i>\n </button>\n <input\n class=\"hidden\"\n type=\"file\"\n #fileInput\n (change)=\"onFileInput($event, trustedCertificate)\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-collapse>\n </c8y-li>\n</c8y-list-group>\n" }]
559
- }], ctorParameters: () => [{ type: i1$1.BsModalService }, { type: i2.AlertService }, { type: i2$1.TrustedCertificateService }, { type: i2.ModalService }, { type: i4$1.TranslateService }, { type: i2.ClipboardService }, { type: i2.GainsightService }, { type: i2$1.SystemOptionsService }, { type: i2.FeatureCacheService }] });
682
+ args: [{ selector: 'c8y-trusted-certificates', imports: [
683
+ TitleComponent,
684
+ BreadcrumbComponent,
685
+ BreadcrumbItemComponent,
686
+ NgIf,
687
+ ActionBarItemComponent,
688
+ IconDirective,
689
+ PopoverDirective,
690
+ NgClass,
691
+ HelpComponent,
692
+ EmptyStateComponent,
693
+ ListGroupComponent,
694
+ ForOfDirective,
695
+ ListItemComponent,
696
+ ListItemIconComponent,
697
+ TooltipDirective,
698
+ ListItemBodyComponent,
699
+ ButtonCheckboxDirective,
700
+ FormsModule,
701
+ C8yTranslateDirective,
702
+ ListItemCollapseComponent,
703
+ FormGroupComponent,
704
+ RequiredInputPlaceholderDirective,
705
+ ProductExperienceDirective,
706
+ C8yTranslatePipe,
707
+ AsyncPipe,
708
+ DatePipe,
709
+ NgTemplateOutlet
710
+ ], template: "<div *ngIf=\"(hasReadRole$ | async) || (hasAdminRole$ | async)\">\n <c8y-title>{{ 'Trusted certificates' | translate }}</c8y-title>\n\n <c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"certificate\"\n label=\"{{ 'Trusted certificates' | translate }}\"\n ></c8y-breadcrumb-item>\n </c8y-breadcrumb>\n\n <c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"certificateAuthorityFeatureEnabled\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add CA certificate' | translate }}\"\n type=\"button\"\n [disabled]=\"!(hasAdminRole$ | async) || certificateAuthorityExists\"\n (click)=\"addCACertificate()\"\n >\n <i c8yIcon=\"contract\"></i>\n {{ 'Add CA certificate' | translate }}\n </button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections. Only one certificate is allowed, which is why the button is disabled.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"certificateAuthorityExists\"\n ></button>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Adding a CA certificate lets the app trust certificates from the specified authority, ensuring secure connections.'\n | translate\n }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!certificateAuthorityExists\"\n ></button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add trusted certificate' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadTrustedCertificates()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n </c8y-action-bar-item>\n\n <c8y-help\n src=\"/docs/device-certificate-authentication/managing-trusted-certificates/#managing-trusted-certificates\"\n ></c8y-help>\n\n <c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No trusted certificates to display.' | translate\"\n [subtitle]=\"'Add your first certificate by clicking below.' | translate\"\n *ngIf=\"(trustedCertificates | async)?.data.length === 0\"\n >\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add trusted certificate' | translate }}\"\n type=\"button\"\n (click)=\"addTrustedCertificate()\"\n >\n {{ 'Add trusted certificate' | translate }}\n </button>\n </c8y-ui-empty-state>\n\n <c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list__item--empty-actions\"\n *ngIf=\"(trustedCertificates | async)?.data.length > 0\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"invisible\"\n c8yIcon=\"certificate\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Certificate' | translate }} \"\n >\n {{ 'Certificate' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Status' | translate }}\"\n >\n {{ 'Status' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}\"\n >\n {{ 'Algorithm' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Auto registration' | translate }}\"\n >\n {{ 'Auto registration' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Proof of possession' | translate }}\"\n >\n {{ 'Proof of possession' | translate }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n\n <c8y-li\n *c8yFor=\"\n let trustedCertificate of trustedCertificates | async;\n let i = index;\n pipe: sortByExpirationDateAsc;\n loadMore: 'none'\n \"\n #listItem\n data-cy=\"c8y-trusted-certificates-list--item-block\"\n >\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'Certificate' | translate }}\"\n tooltip=\"{{ 'Certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"certificate\"></i>\n </button>\n <button\n class=\"btn-clean\"\n attr.aria-label=\"{{ 'CA certificate' | translate }}\"\n tooltip=\"{{ 'CA certificate' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n <i c8yIcon=\"contract\"></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n <button\n class=\"btn-clean text-truncate\"\n title=\"{{ trustedCertificate.name }}\"\n type=\"button\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n {{ trustedCertificate.name }}\n </button>\n </div>\n <div class=\"col-2\">\n <div class=\"visible-xs p-8\"></div>\n <button\n class=\"btn c8y-btn-checkbox--inline\"\n name=\"certificateStatus\"\n type=\"button\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n (ngModelChange)=\"updateCertificate(trustedCertificate, { status: $event })\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n [ngClass]=\"{\n disabled: !(hasAdminRole$ | async)\n }\"\n >\n <small\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </small>\n <small\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </small>\n </button>\n <div class=\"visible-xs p-8\"></div>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Algorithm' | translate }}: {{ trustedCertificate.algorithmName }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Algorithm\n </span>\n {{ trustedCertificate.algorithmName }}\n </div>\n </div>\n\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{ trustedCertificate.notAfter | c8yDate }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n @let expirationHighlight = getExpirationHighlight(trustedCertificate);\n <span>\n <small\n [attr.title]=\"expirationHighlight?.tooltipText\"\n [ngClass]=\"expirationHighlight?.textClass\"\n >\n <ng-container *ngIf=\"expirationHighlight?.expired; else notExpiredYet\">\n <del>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </del>\n </ng-container>\n <ng-template #notExpiredYet>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </ng-template>\n <ng-template #expirationDateTpl>\n <i\n class=\"m-r-4\"\n c8yIcon=\"{{ expirationHighlight?.icon }}\"\n *ngIf=\"expirationHighlight?.icon\"\n ></i>\n <span>{{ trustedCertificate.notAfter | c8yDate }}</span>\n </ng-template>\n </small>\n <button\n class=\"btn btn-link btn-icon\"\n title=\"{{ 'Renew certificate' | translate }}\"\n type=\"button\"\n *ngIf=\"expirationHighlight?.renewable\"\n (click)=\"renewCertificate()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n </span>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Auto registration' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Enabled`auto registration`' | translate\n }}\"\n *ngIf=\"trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Enabled`auto registration`' | translate }}\n </span>\n <span\n title=\"{{ 'Auto registration' | translate }}: {{\n 'Disabled`auto registration`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.autoRegistrationEnabled\"\n >\n {{ 'Disabled`auto registration`' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n </div>\n <div class=\"col-2 d-flex\">\n <div class=\"text-truncate\">\n <span class=\"text-label-small m-t-8 m-r-4 visible-xs-inline\">\n {{ 'Proof of possession' | translate }}\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{ 'N/A' | translate }}\"\n *ngIf=\"trustedCertificate.tenantCertificateAuthority\"\n >\n {{ 'N/A' | translate }}\n </span>\n <span *ngIf=\"!trustedCertificate.tenantCertificateAuthority\">\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n *ngIf=\"trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </div>\n </span>\n <span\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n *ngIf=\"!trustedCertificate.proofOfPossessionValid\"\n >\n <div class=\"icon-flex\">\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </div>\n </span>\n </span>\n </div>\n <button\n class=\"m-l-auto btn-dot btn-dot--danger btn showOnHover m-r-8\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificate--delete\"\n [delay]=\"500\"\n (click)=\"deleteTrustedCertificate(trustedCertificate)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <div class=\"p-t-16 p-b-16\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Certificate name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n type=\"text\"\n required\n data-cy=\"c8y-trusted-certificates--edit-certificate-name\"\n [(ngModel)]=\"trustedCertificate.name\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Update certificate name' | translate }}\"\n type=\"button\"\n (click)=\"\n updateCertificate(trustedCertificate, { name: trustedCertificate.name })\n \"\n [disabled]=\"!trustedCertificate.name\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-1\"></div>\n <div class=\"col-md-7\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"certInPemFormat\"\n translate\n >\n Certificate\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"certInPemFormat\"\n name=\"certInPemFormat\"\n type=\"text\"\n rows=\"7\"\n readonly\n [(ngModel)]=\"trustedCertificate.certInPemFormat\"\n ></textarea>\n </c8y-form-group>\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Auto registration' | translate }}\"\n [ngClass]=\"{\n disabled: !(hasAdminRole$ | async)\n }\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n (ngModelChange)=\"\n updateCertificate(trustedCertificate, { autoRegistrationEnabled: $event })\n \"\n [disabled]=\"!(hasAdminRole$ | async)\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div\n class=\"legend form-block\"\n translate\n >\n Additional properties\n </div>\n <ul class=\"list-unstyled\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Algorithm' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.algorithmName }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Version' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.version }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Valid from' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notBefore | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Issuer' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.issuer }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Expiration date' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.notAfter | c8yDate }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Serial number' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.serialNumber }}\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom flex-wrap\">\n <label class=\"small m-b-0 m-r-8 a-s-start flex-grow\">\n {{ 'Subject`of a certificate`' | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ trustedCertificate.subject }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"col-md-1\"></div>\n <div\n class=\"col-md-7\"\n *ngIf=\"!trustedCertificate.tenantCertificateAuthority\"\n >\n <div class=\"legend form-block\">\n {{ 'Proof of possession' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PROOF_OF_POSSESSION_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n type=\"button\"\n ></button>\n </div>\n <div *ngIf=\"trustedCertificate.proofOfPossessionValid\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Complete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-success\"\n c8yIcon=\"success\"\n ></i>\n {{ 'Complete`proof of possession`' | translate }}\n </span>\n </div>\n <div *ngIf=\"!trustedCertificate.proofOfPossessionValid\">\n <div class=\"row m-b-16\">\n <div class=\"col-md-6\">\n <span\n class=\"icon-flex\"\n title=\"{{ 'Proof of possession' | translate }}: {{\n 'Incomplete`proof of possession`' | translate\n }}\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"warning\"\n ></i>\n {{ 'Incomplete`proof of possession`' | translate }}\n </span>\n </div>\n <div class=\"col-md-6 col-lg-6 text-right-md\">\n <span class=\"text-label-small m-r-4\">\n {{ 'Verification code expires/expired on' | translate }}\n </span>\n {{\n (trustedCertificate.proofOfPossessionVerificationCodeUsableUntil | c8yDate) ||\n '---'\n }}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"unsignedVerificationCode\"\n translate\n >\n Verification code\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"unsignedVerificationCode\"\n name=\"unsignedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n readonly\n [(ngModel)]=\"trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Regenerate verification code' | translate }}\"\n type=\"button\"\n (click)=\"regenerateUnsignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n {{ 'Regenerate`verification code`' | translate }}\n </button>\n\n <button\n class=\"btn btn-sm btn-default m-l-auto m-r-0\"\n [attr.aria-label]=\"'Copy to clipboard' | translate\"\n tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n placement=\"right\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--copy-to-clipboard\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"copyUnsignedVerificationCodeToClipboard(trustedCertificate)\"\n >\n <i c8yIcon=\"clipboard\"></i>\n </button>\n <button\n class=\"btn btn-default btn-sm\"\n [attr.aria-label]=\"'Download as file' | translate\"\n tooltip=\"{{ 'Download as file' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--download-as-file\"\n [delay]=\"500\"\n [disabled]=\"!trustedCertificate.proofOfPossessionUnsignedVerificationCode\"\n (click)=\"downloadUnsignedVerificationCode(trustedCertificate)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.VERIFICATION_CODE.COMPONENTS.DOWNLOAD_CODE,\n action: PRODUCT_EXPERIENCE.VERIFICATION_CODE.ACTIONS.DOWNLOAD\n }\"\n >\n <i c8yIcon=\"download\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"col-md-6 col-lg-6\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"signedVerificationCode\"\n >\n {{ 'Signed verification code' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ SIGNED_VERIFICATION_CODE_POPOVER | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n data-cy=\"c8y-trusted-certificates--signed-verification-code-popup\"\n [outsideClick]=\"true\"\n ></button>\n </label>\n <textarea\n class=\"form-control no-resize\"\n id=\"signedVerificationCode\"\n name=\"signedVerificationCode\"\n type=\"text\"\n rows=\"5\"\n [(ngModel)]=\"trustedCertificate.signedVerificationCode\"\n ></textarea>\n </c8y-form-group>\n <div class=\"d-flex\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Verify signed verification code' | translate }}\"\n type=\"button\"\n (click)=\"verifySignedVerificationCode(trustedCertificate)\"\n [disabled]=\"!trustedCertificate.signedVerificationCode\"\n >\n {{ 'Verify`signed verification code`' | translate }}\n </button>\n <button\n class=\"btn btn-sm btn-default m-l-auto\"\n [attr.aria-label]=\"'Upload file' | translate\"\n tooltip=\"{{ 'Upload file' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"fileInput.click()\"\n [disabled]=\"!(hasAdminRole$ | async)\"\n >\n <i c8yIcon=\"upload\"></i>\n </button>\n <input\n class=\"hidden\"\n type=\"file\"\n #fileInput\n (change)=\"onFileInput($event, trustedCertificate)\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</div>\n" }]
711
+ }], ctorParameters: () => [{ type: i1$1.BsModalService }, { type: i2.AlertService }, { type: i2$1.TrustedCertificateService }, { type: i2.ModalService }, { type: i4$1.TranslateService }, { type: i2.ClipboardService }, { type: i2.GainsightService }, { type: i2$1.SystemOptionsService }, { type: i2.FeatureCacheService }, { type: TrustedCertificatesGuard }] });
560
712
 
561
713
  const trustedCertificatesRoutes = [
562
714
  {
@@ -567,11 +719,13 @@ const trustedCertificatesRoutes = [
567
719
  ];
568
720
  class TrustedCertificateListModule {
569
721
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
570
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListModule, declarations: [TrustedCertificateListComponent, AddTrustedCertificateComponent], imports: [CoreModule,
571
- CommonModule, i1.RouterModule, i5.BsDropdownModule, TooltipModule,
722
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListModule, imports: [CoreModule,
723
+ CommonModule, i1.RouterModule, i2$2.BsDropdownModule, TooltipModule,
572
724
  ReactiveFormsModule,
573
725
  ButtonsModule,
574
- PopoverModule] }); }
726
+ PopoverModule,
727
+ TrustedCertificateListComponent,
728
+ AddTrustedCertificateComponent] }); }
575
729
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListModule, imports: [CoreModule,
576
730
  CommonModule,
577
731
  RouterModule.forChild(trustedCertificatesRoutes),
@@ -579,12 +733,13 @@ class TrustedCertificateListModule {
579
733
  TooltipModule,
580
734
  ReactiveFormsModule,
581
735
  ButtonsModule,
582
- PopoverModule] }); }
736
+ PopoverModule,
737
+ TrustedCertificateListComponent,
738
+ AddTrustedCertificateComponent] }); }
583
739
  }
584
740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TrustedCertificateListModule, decorators: [{
585
741
  type: NgModule,
586
742
  args: [{
587
- declarations: [TrustedCertificateListComponent, AddTrustedCertificateComponent],
588
743
  exports: [],
589
744
  imports: [
590
745
  CoreModule,
@@ -594,7 +749,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
594
749
  TooltipModule,
595
750
  ReactiveFormsModule,
596
751
  ButtonsModule,
597
- PopoverModule
752
+ PopoverModule,
753
+ TrustedCertificateListComponent,
754
+ AddTrustedCertificateComponent
598
755
  ]
599
756
  }]
600
757
  }] });