@c8y/ngx-components 1021.13.3 → 1021.21.0

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 (384) hide show
  1. package/alarms/alarms-list.component.d.ts +2 -17
  2. package/alarms/alarms-list.component.d.ts.map +1 -1
  3. package/alarms/alarms-view.service.d.ts +1 -0
  4. package/alarms/alarms-view.service.d.ts.map +1 -1
  5. package/alarms/alarms.model.d.ts +30 -0
  6. package/alarms/alarms.model.d.ts.map +1 -1
  7. package/context-dashboard/context-dashboard.model.d.ts +1 -0
  8. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  9. package/context-dashboard/context-dashboard.service.d.ts +7 -5
  10. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  11. package/context-dashboard/dashboard-detail.component.d.ts +4 -7
  12. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  13. package/context-dashboard/dashboard-detail.service.d.ts +4 -4
  14. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  15. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
  16. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  17. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
  18. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  19. package/core/action-bar/action-bar-item.component.d.ts +1 -1
  20. package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
  21. package/core/action-bar/action-bar.module.d.ts +6 -6
  22. package/core/action-bar/action-bar.module.d.ts.map +1 -1
  23. package/core/bootstrap/bootstrap.component.d.ts +3 -1
  24. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  25. package/core/common/aggregation/aggregation.model.d.ts +39 -0
  26. package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
  27. package/core/common/aggregation/aggregation.service.d.ts +17 -0
  28. package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
  29. package/core/common/index.d.ts +4 -0
  30. package/core/common/index.d.ts.map +1 -1
  31. package/core/common/inter-app.service.d.ts +48 -0
  32. package/core/common/inter-app.service.d.ts.map +1 -0
  33. package/core/common/interval-based-reload.abstract.d.ts +120 -0
  34. package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
  35. package/core/dashboard/dashboard.module.d.ts +24 -18
  36. package/core/dashboard/dashboard.module.d.ts.map +1 -1
  37. package/core/dashboard/index.d.ts +3 -0
  38. package/core/dashboard/index.d.ts.map +1 -1
  39. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
  40. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
  41. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
  42. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
  43. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
  44. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
  45. package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
  46. package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
  47. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
  48. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
  49. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
  50. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
  51. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
  52. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
  53. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
  54. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
  55. package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
  56. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  57. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
  58. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  59. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
  60. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
  61. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  62. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
  63. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  64. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
  65. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  66. package/core/header/header.module.d.ts +18 -18
  67. package/core/header/header.module.d.ts.map +1 -1
  68. package/core/header/title/title.component.d.ts +1 -1
  69. package/core/header/title/title.component.d.ts.map +1 -1
  70. package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
  71. package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
  72. package/core/i18n/i18n.module.d.ts +0 -4
  73. package/core/i18n/i18n.module.d.ts.map +1 -1
  74. package/core/i18n/index.d.ts +2 -1
  75. package/core/i18n/index.d.ts.map +1 -1
  76. package/core/i18n/translation-loader.service.d.ts +50 -0
  77. package/core/i18n/translation-loader.service.d.ts.map +1 -0
  78. package/core/i18n/translation-utils.d.ts +14 -0
  79. package/core/i18n/translation-utils.d.ts.map +1 -0
  80. package/core/plugins/plugins-resolve.service.d.ts +7 -10
  81. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  82. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
  83. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  84. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
  85. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  86. package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
  87. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  88. package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
  89. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
  90. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
  91. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
  92. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
  93. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
  94. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
  95. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
  96. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
  97. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
  98. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
  99. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
  100. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
  101. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
  102. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
  103. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
  104. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
  105. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
  106. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
  107. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
  108. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
  109. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
  110. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
  111. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
  112. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
  113. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
  114. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
  115. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
  116. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
  117. package/datapoints-export-selector/index.d.ts +15 -0
  118. package/datapoints-export-selector/index.d.ts.map +1 -0
  119. package/device-list/device-list.module.d.ts +4 -2
  120. package/device-list/device-list.module.d.ts.map +1 -1
  121. package/esm2022/alarms/alarms-list.component.mjs +5 -16
  122. package/esm2022/alarms/alarms-view.service.mjs +2 -1
  123. package/esm2022/alarms/alarms.model.mjs +1 -1
  124. package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
  125. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  126. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
  127. package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
  128. package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
  129. package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
  130. package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
  131. package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
  132. package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
  133. package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
  134. package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
  135. package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
  136. package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
  137. package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
  138. package/esm2022/core/common/index.mjs +5 -1
  139. package/esm2022/core/common/inter-app.service.mjs +76 -0
  140. package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
  141. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  142. package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
  143. package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
  144. package/esm2022/core/dashboard/index.mjs +4 -1
  145. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
  146. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
  147. package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
  148. package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
  149. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
  150. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
  151. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
  152. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
  153. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
  154. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
  155. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
  156. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
  157. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
  158. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
  159. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
  160. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
  161. package/esm2022/core/header/header.module.mjs +7 -5
  162. package/esm2022/core/header/title/title.component.mjs +3 -3
  163. package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
  164. package/esm2022/core/i18n/i18n.module.mjs +7 -14
  165. package/esm2022/core/i18n/index.mjs +3 -2
  166. package/esm2022/core/i18n/translate.parser.mjs +2 -2
  167. package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
  168. package/esm2022/core/i18n/translation-utils.mjs +24 -0
  169. package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
  170. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
  171. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
  172. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  173. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  174. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  175. package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
  176. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
  177. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
  178. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
  179. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
  180. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
  181. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
  182. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
  183. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
  184. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
  185. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
  186. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
  187. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
  188. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
  189. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
  190. package/esm2022/datapoints-export-selector/index.mjs +15 -0
  191. package/esm2022/device-list/add-smart-group.component.mjs +4 -3
  192. package/esm2022/device-list/device-list.module.mjs +22 -4
  193. package/esm2022/map/cluster-map.component.mjs +41 -13
  194. package/esm2022/map/map-status.component.mjs +6 -5
  195. package/esm2022/map/map.component.mjs +9 -5
  196. package/esm2022/map/map.model.mjs +1 -1
  197. package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
  198. package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
  199. package/esm2022/translation-editor/data/index.mjs +2 -0
  200. package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
  201. package/esm2022/translation-editor/index.mjs +10 -0
  202. package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
  203. package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
  204. package/esm2022/translation-editor/lazy/index.mjs +2 -0
  205. package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
  206. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
  207. package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
  208. package/esm2022/widgets/cockpit/index.mjs +4 -2
  209. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  210. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
  211. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
  212. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
  213. package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
  214. package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
  215. package/esm2022/widgets/definitions/index.mjs +2 -1
  216. package/esm2022/widgets/definitions/map/index.mjs +4 -2
  217. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
  218. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
  219. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
  220. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
  221. package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
  222. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
  223. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
  224. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
  225. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
  226. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
  227. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
  228. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
  229. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
  230. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
  231. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
  232. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
  233. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
  234. package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
  235. package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
  236. package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
  237. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
  238. package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
  239. package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
  240. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -15
  241. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  242. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
  243. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  244. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
  245. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  246. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
  247. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
  248. package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
  249. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  250. package/fesm2022/c8y-ngx-components-map.mjs +52 -19
  251. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  252. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
  253. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
  254. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
  255. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
  256. package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
  257. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
  258. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  259. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  260. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
  261. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  262. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
  263. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  264. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
  265. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  266. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
  267. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  268. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
  269. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
  270. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
  271. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  272. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  273. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  274. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
  275. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  276. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
  277. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
  278. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
  279. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  280. package/fesm2022/c8y-ngx-components.mjs +5080 -4272
  281. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  282. package/locales/de.po +289 -18
  283. package/locales/en.po +12 -0
  284. package/locales/en_US.po +3 -0
  285. package/locales/es.po +253 -18
  286. package/locales/fr.po +253 -18
  287. package/locales/ja_JP.po +282 -18
  288. package/locales/locales.pot +257 -18
  289. package/locales/nl.po +253 -18
  290. package/locales/pl.po +253 -18
  291. package/locales/pt_BR.po +253 -18
  292. package/map/cluster-map.component.d.ts +8 -3
  293. package/map/cluster-map.component.d.ts.map +1 -1
  294. package/map/map-status.component.d.ts +0 -3
  295. package/map/map-status.component.d.ts.map +1 -1
  296. package/map/map.component.d.ts +4 -2
  297. package/map/map.component.d.ts.map +1 -1
  298. package/map/map.model.d.ts +2 -1
  299. package/map/map.model.d.ts.map +1 -1
  300. package/package.json +1 -1
  301. package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
  302. package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
  303. package/translation-editor/data/index.d.ts +2 -0
  304. package/translation-editor/data/index.d.ts.map +1 -0
  305. package/translation-editor/data/translation-store.service.d.ts +61 -0
  306. package/translation-editor/data/translation-store.service.d.ts.map +1 -0
  307. package/translation-editor/index.d.ts +2 -0
  308. package/translation-editor/index.d.ts.map +1 -0
  309. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
  310. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
  311. package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
  312. package/translation-editor/lazy/index.d.ts +2 -0
  313. package/translation-editor/lazy/index.d.ts.map +1 -0
  314. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
  315. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
  316. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
  317. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
  318. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
  319. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
  320. package/widgets/cockpit/index.d.ts +13 -0
  321. package/widgets/cockpit/index.d.ts.map +1 -1
  322. package/widgets/cockpit-exports/index.d.ts +6 -0
  323. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  324. package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
  325. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  326. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
  327. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  328. package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
  329. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  330. package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
  331. package/widgets/definitions/datapoints-table/index.d.ts +14 -0
  332. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
  333. package/widgets/definitions/index.d.ts +1 -0
  334. package/widgets/definitions/index.d.ts.map +1 -1
  335. package/widgets/definitions/map/index.d.ts +2 -1
  336. package/widgets/definitions/map/index.d.ts.map +1 -1
  337. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
  338. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  339. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
  340. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  341. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
  342. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  343. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
  344. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  345. package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
  346. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
  347. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
  348. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
  349. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
  350. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
  351. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
  352. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
  353. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
  354. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
  355. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
  356. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
  357. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
  358. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
  359. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
  360. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
  361. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
  362. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
  363. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
  364. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
  365. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
  366. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
  367. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
  368. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
  369. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
  370. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
  371. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
  372. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
  373. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
  374. package/widgets/implementations/datapoints-table/index.d.ts +10 -0
  375. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
  376. package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
  377. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  378. package/widgets/implementations/map/map-widget.component.d.ts +8 -3
  379. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  380. package/widgets/implementations/map/map-widget.model.d.ts +4 -3
  381. package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
  382. package/core/i18n/translate.loader.d.ts +0 -31
  383. package/core/i18n/translate.loader.d.ts.map +0 -1
  384. package/esm2022/core/i18n/translate.loader.mjs +0 -71
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Component, inject, InjectionToken, EventEmitter, Input, Output, forwardRef, Optional, Inject, ViewChild, HostBinding, HostListener, TemplateRef, NgModule } from '@angular/core';
3
- import * as i3 from '@c8y/ngx-components';
4
- import { gettext, Permissions, ContextRouteService, ViewContext, Status, NavigatorNode, getActivatedRoute, NEW_DASHBOARD_QUERY_PARAM, memoize, DashboardChildChange, CopyDashboardDisabledReason, WidgetsDashboardComponent, hookRoute, CoreModule, hookTab, HookProviderTypes, hookActionBar, hookNavigator, BaseColumn, getBasicInputArrayFormFieldConfig, DataGridService, alertOnError, BuiltInActionType, ModalModule } from '@c8y/ngx-components';
3
+ import * as i2 from '@c8y/ngx-components';
4
+ import { gettext, Permissions, ContextRouteService, ViewContext, Status, NavigatorNode, getActivatedRoute, NEW_DASHBOARD_QUERY_PARAM, SupportedApps, memoize, DashboardChildChange, CopyDashboardDisabledReason, WidgetsDashboardComponent, hookRoute, CoreModule, hookTab, HookProviderTypes, hookActionBar, hookNavigator, BaseColumn, getBasicInputArrayFormFieldConfig, DataGridService, alertOnError, BuiltInActionType, ModalModule } from '@c8y/ngx-components';
5
5
  import * as i1 from '@angular/router';
6
6
  import { of, Subject, from, combineLatest, iif, timer } from 'rxjs';
7
- import * as i2 from '@angular/common';
7
+ import * as i4 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
- import * as i3$1 from '@angular/forms';
9
+ import * as i3 from '@angular/forms';
10
10
  import { Validators, NG_VALUE_ACCESSOR } from '@angular/forms';
11
- import * as i4 from 'ngx-bootstrap/popover';
11
+ import * as i4$1 from 'ngx-bootstrap/popover';
12
12
  import { PopoverModule } from 'ngx-bootstrap/popover';
13
13
  import { __decorate, __metadata } from 'tslib';
14
14
  import * as i2$1 from '@ngx-translate/core';
@@ -77,13 +77,13 @@ class AddDashboardComponent {
77
77
  tempNewDashboardTab.priority = Infinity;
78
78
  this.tabsService.refresh();
79
79
  }
80
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddDashboardComponent, deps: [{ token: i3.TabsService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
81
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddDashboardComponent, selector: "[c8y-add-dashboard]", host: { classAttribute: "d-flex a-i-stretch sticky-right" }, ngImport: i0, template: "<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddDashboardComponent, deps: [{ token: i2.TabsService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
81
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddDashboardComponent, selector: "[c8y-add-dashboard]", host: { classAttribute: "d-flex a-i-stretch sticky-right" }, ngImport: i0, template: "<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
82
82
  }
83
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddDashboardComponent, decorators: [{
84
84
  type: Component,
85
85
  args: [{ selector: '[c8y-add-dashboard]', host: { class: 'd-flex a-i-stretch sticky-right' }, template: "<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n" }]
86
- }], ctorParameters: () => [{ type: i3.TabsService }, { type: i1.Router }] });
86
+ }], ctorParameters: () => [{ type: i2.TabsService }, { type: i1.Router }] });
87
87
 
88
88
  class AddDashboardFactory {
89
89
  constructor() {
@@ -325,7 +325,7 @@ class AppearanceSettingsComponent {
325
325
  return value;
326
326
  }
327
327
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppearanceSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: { themeClass: "themeClass", headerClass: "headerClass", defaultThemeClass: "defaultThemeClass", defaultHeaderClass: "defaultHeaderClass", dashboardSettings: "dashboardSettings", possibleStylingTheme: "possibleStylingTheme", possibleStylingHeader: "possibleStylingHeader", columns: "columns" }, outputs: { themeClassChange: "themeClassChange", headerClassChange: "headerClassChange" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.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: i3$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.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: i3.C8yTranslatePipe, name: "translate" }] }); }
328
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: { themeClass: "themeClass", headerClass: "headerClass", defaultThemeClass: "defaultThemeClass", defaultHeaderClass: "defaultHeaderClass", dashboardSettings: "dashboardSettings", possibleStylingTheme: "possibleStylingTheme", possibleStylingHeader: "possibleStylingHeader", columns: "columns" }, outputs: { themeClassChange: "themeClassChange", headerClassChange: "headerClassChange" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.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" }] }); }
329
329
  }
330
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppearanceSettingsComponent, decorators: [{
331
331
  type: Component,
@@ -403,7 +403,7 @@ class ContextDashboardService {
403
403
  this._formDisabled = value;
404
404
  this.formDisabledSubject.next(value);
405
405
  }
406
- constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent, groupService) {
406
+ constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent, groupService, optionsService) {
407
407
  this.inventory = inventory;
408
408
  this.tabs = tabs;
409
409
  this.modal = modal;
@@ -414,6 +414,7 @@ class ContextDashboardService {
414
414
  this.alert = alert;
415
415
  this.dynamicComponent = dynamicComponent;
416
416
  this.groupService = groupService;
417
+ this.optionsService = optionsService;
417
418
  this.REPORT_PARTIAL_NAME = 'report_';
418
419
  this.VERSION_HISTORY_SIZE_LIMIT = 10;
419
420
  this.INVENTORY_ROLES = [
@@ -428,6 +429,7 @@ class ContextDashboardService {
428
429
  this.CACHE_TIMEOUT = 500;
429
430
  this._formDisabled = true;
430
431
  this.formDisabledSubject = new Subject();
432
+ this.HIDE_TYPE_DASHBOARD_FOR_ASSETS = 'hideTypeDashboardForAssets';
431
433
  this.formDisabled$ = this.formDisabledSubject.asObservable();
432
434
  this.queriesUtil = new QueriesUtil();
433
435
  }
@@ -522,7 +524,7 @@ class ContextDashboardService {
522
524
  return of(false);
523
525
  }));
524
526
  }
525
- this.dashboardTabs$ = this.getTabs$(route.data.contextData, types);
527
+ this.dashboardTabs$ = this.getTabs$(route.data.contextData, types, route?.parent?.data);
526
528
  return this.dashboardTabs$;
527
529
  }
528
530
  getNamedDashboardOrCreate(name, defaultWidgets, context) {
@@ -677,18 +679,43 @@ class ContextDashboardService {
677
679
  * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but
678
680
  * type fragment is missing- we do not support this combination.
679
681
  * @param mo Dashboard managed object
680
- * @param deviceTypeValue Value of device type
682
+ * @param context {ContextData} Current context
681
683
  * @returns True if dashboard can be set to type dashboard, false if it is forbidden.
682
684
  */
683
- shouldAllowToSetDashboardType(mo, deviceTypeValue) {
684
- if (!deviceTypeValue || !this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {
685
- return false;
686
- }
687
- const typeFragment = this.createFragmentKey(ContextDashboardType.Type, deviceTypeValue);
688
- if (mo.c8y_Dashboard && mo.c8y_Dashboard.deviceType && !mo[typeFragment]) {
689
- return false;
690
- }
691
- return true;
685
+ shouldAllowToSetDashboardType(mo, context) {
686
+ // disallow if dashboard managed object or context is missing or context is not device/asset/group
687
+ if (!mo ||
688
+ !context?.contextData ||
689
+ (context.context !== ViewContext.Device && context.context !== ViewContext.Group)) {
690
+ return 'disallow';
691
+ }
692
+ // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow
693
+ const typeDashboardHiddenForAssets = this.optionsService.get(this.HIDE_TYPE_DASHBOARD_FOR_ASSETS, true);
694
+ if (context.context === ViewContext.Group &&
695
+ (typeDashboardHiddenForAssets || !context.contextData.type)) {
696
+ return 'disallow';
697
+ }
698
+ // if user has no permission to change dashboard, return disallow
699
+ if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {
700
+ return 'disallow';
701
+ }
702
+ // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but
703
+ // type fragment is missing- we do not support this combination.
704
+ const typeFragment = this.createFragmentKey(ContextDashboardType.Type, context?.contextData?.type);
705
+ if (mo?.c8y_Dashboard &&
706
+ mo?.c8y_Dashboard.deviceType &&
707
+ context?.contextData?.type &&
708
+ !mo[typeFragment]) {
709
+ return 'disallow';
710
+ }
711
+ // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,
712
+ // return allow_if_type_filled
713
+ if (!context?.contextData?.type &&
714
+ context.context === ViewContext.Device &&
715
+ this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {
716
+ return 'allow_if_type_filled';
717
+ }
718
+ return 'allow';
692
719
  }
693
720
  createReport(reportCfg) {
694
721
  const report = {};
@@ -908,9 +935,9 @@ class ContextDashboardService {
908
935
  }
909
936
  return obj;
910
937
  }
911
- getTabs$(mo, dashboardType) {
938
+ getTabs$(mo, dashboardType, context) {
912
939
  const dashboards = this.getContextDashboards(mo, dashboardType);
913
- return this.getContextDashboards$(dashboards).pipe(mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)), mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)), tap(dashboard => this.cacheDashboard(dashboard)), map(dashboard => this.createDashboardTab(dashboard)), toArray());
940
+ return this.getContextDashboards$(dashboards).pipe(mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)), mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)), tap(dashboard => this.cacheDashboard(dashboard)), map(dashboard => this.createDashboardTab(dashboard, context)), toArray());
914
941
  }
915
942
  verifyDashboardAvailability$(dashboard) {
916
943
  const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;
@@ -950,7 +977,7 @@ class ContextDashboardService {
950
977
  cacheDashboard(dashboard) {
951
978
  this.cache.set(dashboard.id, dashboard);
952
979
  }
953
- createDashboardTab(dashboard) {
980
+ createDashboardTab(dashboard, context) {
954
981
  const { c8y_Dashboard: _dashboard, id } = dashboard;
955
982
  return {
956
983
  icon: _dashboard.icon,
@@ -958,8 +985,7 @@ class ContextDashboardService {
958
985
  label: _dashboard.name,
959
986
  priority: _dashboard.priority,
960
987
  hide: this.isReport(dashboard),
961
- badge: _dashboard.deviceType &&
962
- this.shouldAllowToSetDashboardType(dashboard, _dashboard.deviceTypeValue)
988
+ badge: _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)
963
989
  ? gettext('Dashboard template')
964
990
  : null,
965
991
  tooltipText: _dashboard.description || gettext('Dashboard template')
@@ -997,7 +1023,7 @@ class ContextDashboardService {
997
1023
  }
998
1024
  return null;
999
1025
  }
1000
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1$1.InventoryService }, { token: i3.TabsService }, { token: i3.ModalService }, { token: i2$1.TranslateService }, { token: i1.Router }, { token: i3.NavigatorService }, { token: i3.Permissions }, { token: i3.AlertService }, { token: i3.DynamicComponentService }, { token: i3.GroupService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1026
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1$1.InventoryService }, { token: i2.TabsService }, { token: i2.ModalService }, { token: i2$1.TranslateService }, { token: i1.Router }, { token: i2.NavigatorService }, { token: i2.Permissions }, { token: i2.AlertService }, { token: i2.DynamicComponentService }, { token: i2.GroupService }, { token: i2.OptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1001
1027
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardService, providedIn: 'root' }); }
1002
1028
  }
1003
1029
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardService, decorators: [{
@@ -1005,7 +1031,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1005
1031
  args: [{
1006
1032
  providedIn: 'root'
1007
1033
  }]
1008
- }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i3.TabsService }, { type: i3.ModalService }, { type: i2$1.TranslateService }, { type: i1.Router }, { type: i3.NavigatorService }, { type: i3.Permissions }, { type: i3.AlertService }, { type: i3.DynamicComponentService }, { type: i3.GroupService }] });
1034
+ }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i2$1.TranslateService }, { type: i1.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }, { type: i2.OptionsService }] });
1009
1035
 
1010
1036
  class DashboardDetailService {
1011
1037
  constructor(fb, translateService) {
@@ -1023,12 +1049,12 @@ class DashboardDetailService {
1023
1049
  * Creates dashboard details form divided into two groups- general settings and appearance settings.
1024
1050
  * @param dashboard Context dashboard object
1025
1051
  * @param isReport True if its report dashboard
1026
- * @param deviceTypeValue Value used for typed dashboard
1052
+ * @param allowTypeDashboard Allow to make dashboard type dashboard
1027
1053
  * @returns Dashboard details form
1028
1054
  */
1029
- initForm(dashboard, isReport, deviceTypeValue) {
1055
+ initForm(dashboard, isReport, allowTypeDashboard) {
1030
1056
  return this.fb.group({
1031
- generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, deviceTypeValue),
1057
+ generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),
1032
1058
  appearanceSettingsForm: this.initAppearanceSettingsForm(dashboard)
1033
1059
  });
1034
1060
  }
@@ -1039,7 +1065,7 @@ class DashboardDetailService {
1039
1065
  * @param deviceTypeValue Value used for typed dashboard
1040
1066
  * @returns Dashboard general settings form
1041
1067
  */
1042
- initGeneralSettingsForm(dashboard, isReport, deviceTypeValue) {
1068
+ initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard) {
1043
1069
  const globalRolesIdsValue = !dashboard?.globalRolesIds
1044
1070
  ? null
1045
1071
  : Array.isArray(dashboard.globalRolesIds)
@@ -1061,7 +1087,14 @@ class DashboardDetailService {
1061
1087
  description: [dashboard?.description || null, [Validators.maxLength(1_000)]],
1062
1088
  globalRolesIds: [globalRolesIdsValue],
1063
1089
  c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],
1064
- ...(!!deviceTypeValue && { deviceType: dashboard?.deviceType ?? false })
1090
+ ...(allowTypeDashboard !== 'disallow' && {
1091
+ deviceType: [
1092
+ {
1093
+ value: dashboard?.deviceType ?? false,
1094
+ disabled: allowTypeDashboard === 'allow_if_type_filled'
1095
+ }
1096
+ ]
1097
+ })
1065
1098
  });
1066
1099
  }
1067
1100
  /**
@@ -1080,7 +1113,7 @@ class DashboardDetailService {
1080
1113
  widgetClasses: [dashboard?.widgetClasses || { [this.styling.headerClass]: true }]
1081
1114
  });
1082
1115
  }
1083
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailService, deps: [{ token: i3$1.FormBuilder }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailService, deps: [{ token: i3.FormBuilder }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1084
1117
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailService, providedIn: 'root' }); }
1085
1118
  }
1086
1119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailService, decorators: [{
@@ -1088,7 +1121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1088
1121
  args: [{
1089
1122
  providedIn: 'root'
1090
1123
  }]
1091
- }], ctorParameters: () => [{ type: i3$1.FormBuilder }, { type: i2$1.TranslateService }] });
1124
+ }], ctorParameters: () => [{ type: i3.FormBuilder }, { type: i2$1.TranslateService }] });
1092
1125
 
1093
1126
  class DashboardAvailabilityComponent {
1094
1127
  /**
@@ -1167,13 +1200,13 @@ class DashboardAvailabilityComponent {
1167
1200
  .map(globalRoleId => this.globalRolesItems.find(gR => gR.id === globalRoleId))
1168
1201
  .filter(Boolean);
1169
1202
  }
1170
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1$1.UserGroupService }, { token: i3.GainsightService }, { token: i3.Permissions }], target: i0.ɵɵFactoryTarget.Component }); }
1171
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.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: i3.C8yTranslatePipe, name: "translate" }] }); }
1203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1$1.UserGroupService }, { token: i2.GainsightService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component }); }
1204
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4$1.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" }] }); }
1172
1205
  }
1173
1206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
1174
1207
  type: Component,
1175
1208
  args: [{ selector: 'c8y-dashboard-availability', template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n" }]
1176
- }], ctorParameters: () => [{ type: i1$1.UserGroupService }, { type: i3.GainsightService }, { type: i3.Permissions }], propDecorators: { globalRolesIds: [{
1209
+ }], ctorParameters: () => [{ type: i1$1.UserGroupService }, { type: i2.GainsightService }, { type: i2.Permissions }], propDecorators: { globalRolesIds: [{
1177
1210
  type: Input
1178
1211
  }], globalRolesIdsChange: [{
1179
1212
  type: Output
@@ -1200,13 +1233,13 @@ class TypeDashboardInfoComponent {
1200
1233
  this.asyncRenderFail?.();
1201
1234
  }
1202
1235
  }
1203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardInfoComponent, deps: [{ token: i1$1.InventoryService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
1204
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: { deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", context: "context", asyncRenderSuccess: "asyncRenderSuccess", asyncRenderFail: "asyncRenderFail" }, ngImport: i0, template: "<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }] }); }
1236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardInfoComponent, deps: [{ token: i1$1.InventoryService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
1237
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: { deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", context: "context", asyncRenderSuccess: "asyncRenderSuccess", asyncRenderFail: "asyncRenderFail" }, ngImport: i0, template: "<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
1205
1238
  }
1206
1239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardInfoComponent, decorators: [{
1207
1240
  type: Component,
1208
1241
  args: [{ selector: 'c8y-type-dashboard-info', template: "<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n" }]
1209
- }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i3.AlertService }], propDecorators: { deviceTypeValue: [{
1242
+ }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i2.AlertService }], propDecorators: { deviceTypeValue: [{
1210
1243
  type: Input
1211
1244
  }], displayDeviceTypeValue: [{
1212
1245
  type: Input
@@ -1219,16 +1252,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1219
1252
  }] } });
1220
1253
 
1221
1254
  class TypedDashboardSettingsComponent {
1222
- constructor(inventory) {
1255
+ constructor(inventory, interAppService, route) {
1223
1256
  this.inventory = inventory;
1257
+ this.interAppService = interAppService;
1258
+ this.route = route;
1224
1259
  this.touched = false;
1225
1260
  this.disabled = false;
1226
1261
  this.onDuplicateWithoutType = new EventEmitter();
1262
+ this.deviceManagementAppKey = SupportedApps.devicemanagement;
1263
+ this.deviceManagementLinkTitle = gettext('Device Info page in {{ deviceManagementAppName }}');
1227
1264
  // eslint-disable-next-line @typescript-eslint/no-empty-function
1228
1265
  this.onChange = _ => { };
1229
1266
  // eslint-disable-next-line @typescript-eslint/no-empty-function
1230
1267
  this.onTouched = () => { };
1231
1268
  }
1269
+ async ngOnInit() {
1270
+ this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);
1271
+ this.context = this.route.parent.snapshot.data.contextData;
1272
+ this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(this.deviceManagementAppKey);
1273
+ }
1274
+ async goToDeviceView() {
1275
+ await this.interAppService.navigateToApp(this.deviceManagementAppKey, `#/device/${this.context.id}/device-info`);
1276
+ }
1232
1277
  writeValue(value) {
1233
1278
  this.value = value;
1234
1279
  this.updateTexts();
@@ -1265,6 +1310,11 @@ class TypedDashboardSettingsComponent {
1265
1310
  this.typedDashboardStatus = this.value
1266
1311
  ? gettext('Enabled`typed dashboard`')
1267
1312
  : gettext('Disabled`typed dashboard`');
1313
+ if (this.allowTypeDashboard === 'allow_if_type_filled') {
1314
+ this.infoText = gettext(`<p class="p-b-8">Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the device type.</p>
1315
+ <p class="p-b-16">The current device doesn't have a device type assigned to it. Assign a device type to the device via the "Asset properties" widget in the <strong>Info</strong> tab of the device.</p>`);
1316
+ return;
1317
+ }
1268
1318
  if (this.value) {
1269
1319
  if (this.isDevice) {
1270
1320
  this.infoText = gettext(`<p class="p-b-8">
@@ -1298,14 +1348,14 @@ class TypedDashboardSettingsComponent {
1298
1348
  });
1299
1349
  this.deviceTypeInstancesCount = count.data;
1300
1350
  }
1301
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypedDashboardSettingsComponent, deps: [{ token: i1$1.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
1302
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypedDashboardSettingsComponent, selector: "c8y-typed-dashboard-settings", inputs: { deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", formInvalid: "formInvalid", mo: "mo", isDevice: "isDevice" }, outputs: { onDuplicateWithoutType: "onDuplicateWithoutType" }, providers: [
1351
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypedDashboardSettingsComponent, deps: [{ token: i1$1.InventoryService }, { token: i2.InterAppService }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
1352
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypedDashboardSettingsComponent, selector: "c8y-typed-dashboard-settings", inputs: { deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", formInvalid: "formInvalid", mo: "mo", isDevice: "isDevice", allowTypeDashboard: "allowTypeDashboard" }, outputs: { onDuplicateWithoutType: "onDuplicateWithoutType" }, providers: [
1303
1353
  {
1304
1354
  provide: NG_VALUE_ACCESSOR,
1305
1355
  useExisting: forwardRef(() => TypedDashboardSettingsComponent),
1306
1356
  multi: true
1307
1357
  }
1308
- ], ngImport: i0, template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n </div>\n\n <c8y-type-dashboard-info\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
1358
+ ], ngImport: i0, template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.HumanizeAppNamePipe, name: "humanizeAppName" }] }); }
1309
1359
  }
1310
1360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypedDashboardSettingsComponent, decorators: [{
1311
1361
  type: Component,
@@ -1315,8 +1365,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1315
1365
  useExisting: forwardRef(() => TypedDashboardSettingsComponent),
1316
1366
  multi: true
1317
1367
  }
1318
- ], template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n </div>\n\n <c8y-type-dashboard-info\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n" }]
1319
- }], ctorParameters: () => [{ type: i1$1.InventoryService }], propDecorators: { deviceTypeValue: [{
1368
+ ], template: "<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n" }]
1369
+ }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i2.InterAppService }, { type: i1.ActivatedRoute }], propDecorators: { deviceTypeValue: [{
1320
1370
  type: Input
1321
1371
  }], displayDeviceTypeValue: [{
1322
1372
  type: Input
@@ -1326,6 +1376,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1326
1376
  type: Input
1327
1377
  }], isDevice: [{
1328
1378
  type: Input
1379
+ }], allowTypeDashboard: [{
1380
+ type: Input
1329
1381
  }], onDuplicateWithoutType: [{
1330
1382
  type: Output
1331
1383
  }] } });
@@ -1345,13 +1397,13 @@ class DashboardGeneralSettingsComponent {
1345
1397
  this.generalSettingsForm.patchValue({ globalRolesIds: this.globalRolesIds });
1346
1398
  this.generalSettingsForm.markAsDirty();
1347
1399
  }
1348
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardGeneralSettingsComponent, deps: [{ token: i3.NavigatorService }], target: i0.ɵɵFactoryTarget.Component }); }
1349
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardGeneralSettingsComponent, selector: "c8y-dashboard-general-settings", inputs: { isReport: "isReport", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability", dashboard: "dashboard", generalSettingsForm: "generalSettingsForm", deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", allowTypeDashboard: "allowTypeDashboard", isDevice: "isDevice", mo: "mo" }, outputs: { onDuplicateWithoutType: "onDuplicateWithoutType" }, ngImport: i0, template: "<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard && deviceTypeValue && generalSettingsForm.controls['deviceType']\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.TextareaAutoresizeDirective, selector: "[c8y-textarea-autoresize]" }, { kind: "directive", type: i3$1.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: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: i5.IconSelectorWrapperComponent, selector: "c8y-icon-selector-wrapper", inputs: ["canRemoveIcon", "selectedIcon", "iconSize"], outputs: ["onSelect"] }, { kind: "component", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "component", type: TypedDashboardSettingsComponent, selector: "c8y-typed-dashboard-settings", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "formInvalid", "mo", "isDevice"], outputs: ["onDuplicateWithoutType"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
1400
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardGeneralSettingsComponent, deps: [{ token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component }); }
1401
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardGeneralSettingsComponent, selector: "c8y-dashboard-general-settings", inputs: { isReport: "isReport", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability", dashboard: "dashboard", generalSettingsForm: "generalSettingsForm", deviceTypeValue: "deviceTypeValue", displayDeviceTypeValue: "displayDeviceTypeValue", allowTypeDashboard: "allowTypeDashboard", isDevice: "isDevice", mo: "mo" }, outputs: { onDuplicateWithoutType: "onDuplicateWithoutType" }, ngImport: i0, template: "<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TextareaAutoresizeDirective, selector: "[c8y-textarea-autoresize]" }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[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: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4$1.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: i5.IconSelectorWrapperComponent, selector: "c8y-icon-selector-wrapper", inputs: ["canRemoveIcon", "selectedIcon", "iconSize"], outputs: ["onSelect"] }, { kind: "component", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "component", type: TypedDashboardSettingsComponent, selector: "c8y-typed-dashboard-settings", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "formInvalid", "mo", "isDevice", "allowTypeDashboard"], outputs: ["onDuplicateWithoutType"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
1350
1402
  }
1351
1403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardGeneralSettingsComponent, decorators: [{
1352
1404
  type: Component,
1353
- args: [{ selector: 'c8y-dashboard-general-settings', template: "<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard && deviceTypeValue && generalSettingsForm.controls['deviceType']\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n" }]
1354
- }], ctorParameters: () => [{ type: i3.NavigatorService }], propDecorators: { isReport: [{
1405
+ args: [{ selector: 'c8y-dashboard-general-settings', template: "<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n" }]
1406
+ }], ctorParameters: () => [{ type: i2.NavigatorService }], propDecorators: { isReport: [{
1355
1407
  type: Input
1356
1408
  }], isNamedDashboard: [{
1357
1409
  type: Input
@@ -1420,7 +1472,7 @@ class DashboardAppearanceSettingsComponent {
1420
1472
  });
1421
1473
  }
1422
1474
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardAppearanceSettingsComponent, deps: [{ token: ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
1423
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardAppearanceSettingsComponent, selector: "c8y-dashboard-appearance-settings", inputs: { dashboard: "dashboard", appearanceSettingsForm: "appearanceSettingsForm" }, outputs: { previewChanged: "previewChanged" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n", dependencies: [{ kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3$1.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: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "dashboardSettings", "possibleStylingTheme", "possibleStylingHeader", "columns"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
1475
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardAppearanceSettingsComponent, selector: "c8y-dashboard-appearance-settings", inputs: { dashboard: "dashboard", appearanceSettingsForm: "appearanceSettingsForm" }, outputs: { previewChanged: "previewChanged" }, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[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: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "dashboardSettings", "possibleStylingTheme", "possibleStylingHeader", "columns"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
1424
1476
  }
1425
1477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardAppearanceSettingsComponent, decorators: [{
1426
1478
  type: Component,
@@ -1530,7 +1582,7 @@ class DashboardVersionHistoryComponent {
1530
1582
  this.onRevert.emit(newDashboard);
1531
1583
  }
1532
1584
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardVersionHistoryComponent, deps: [{ token: i2$1.TranslateService }, { token: ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
1533
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardVersionHistoryComponent, selector: "c8y-dashboard-version-history", inputs: { dashboardHistory: "dashboardHistory", isReport: "isReport" }, outputs: { onRevert: "onRevert" }, ngImport: i0, template: "<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }] }); }
1585
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardVersionHistoryComponent, selector: "c8y-dashboard-version-history", inputs: { dashboardHistory: "dashboardHistory", isReport: "isReport" }, outputs: { onRevert: "onRevert" }, ngImport: i0, template: "<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }] }); }
1534
1586
  }
1535
1587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardVersionHistoryComponent, decorators: [{
1536
1588
  type: Component,
@@ -1544,7 +1596,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1544
1596
  }] } });
1545
1597
 
1546
1598
  class DashboardDetailComponent {
1547
- constructor(contextDashboardService, translateService, contextRoute, activatedRoute, tabsService, router, inventory, route, dashboardDetailService, appState, optionsService, groupService, modal, gainsightService) {
1599
+ constructor(contextDashboardService, translateService, contextRoute, activatedRoute, tabsService, router, inventory, route, dashboardDetailService, appState, groupService, modal, gainsightService) {
1548
1600
  this.contextDashboardService = contextDashboardService;
1549
1601
  this.translateService = translateService;
1550
1602
  this.contextRoute = contextRoute;
@@ -1555,7 +1607,6 @@ class DashboardDetailComponent {
1555
1607
  this.route = route;
1556
1608
  this.dashboardDetailService = dashboardDetailService;
1557
1609
  this.appState = appState;
1558
- this.optionsService = optionsService;
1559
1610
  this.groupService = groupService;
1560
1611
  this.modal = modal;
1561
1612
  this.gainsightService = gainsightService;
@@ -1564,7 +1615,6 @@ class DashboardDetailComponent {
1564
1615
  this.selectedTab = DashboardDetailsTabId.GENERAL;
1565
1616
  this.dashboardSaved = new EventEmitter();
1566
1617
  this.previewChanged = new EventEmitter();
1567
- this.HIDE_TYPE_DASHBOARD_FOR_ASSETS = 'hideTypeDashboardForAssets';
1568
1618
  this.destroy$ = new Subject();
1569
1619
  this.TABS_OUTLET_NAME = 'dashboardTabs';
1570
1620
  this.TABS = {
@@ -1588,7 +1638,7 @@ class DashboardDetailComponent {
1588
1638
  ngOnInit() {
1589
1639
  this.tabs$ = this.tabsService.items$;
1590
1640
  this.currentContext = this.contextRoute.getContextData(this.activatedRoute);
1591
- this.deviceTypeValue = this.getDeviceTypeValue();
1641
+ this.deviceTypeValue = this.context?.type;
1592
1642
  this.displayDeviceTypeValue =
1593
1643
  this.context &&
1594
1644
  this.groupService.isGroup(this.context) &&
@@ -1727,16 +1777,10 @@ class DashboardDetailComponent {
1727
1777
  await this.save();
1728
1778
  }
1729
1779
  updateAllowTypeDashboard() {
1730
- this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(this.mo, this.deviceTypeValue);
1731
- }
1732
- getDeviceTypeValue() {
1733
- const isAllowedTypeValue = this.optionsService.get(this.HIDE_TYPE_DASHBOARD_FOR_ASSETS, true)
1734
- ? !!this.context?.c8y_IsDevice
1735
- : !!this.context?.c8y_IsDevice || !!this.context?.c8y_IsDeviceGroup;
1736
- return isAllowedTypeValue ? this.context?.type : null;
1780
+ this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(this.mo, this.currentContext);
1737
1781
  }
1738
1782
  initForm() {
1739
- this.dashboardDetailsForm = this.dashboardDetailService.initForm(this.dashboard, this.isReport, this.allowTypeDashboard ? this.getDeviceTypeValue() : null);
1783
+ this.dashboardDetailsForm = this.dashboardDetailService.initForm(this.dashboard, this.isReport, this.allowTypeDashboard);
1740
1784
  this.generalSettingsForm = this.dashboardDetailsForm.get('generalSettingsForm');
1741
1785
  this.appearanceSettingsForm = this.dashboardDetailsForm.get('appearanceSettingsForm');
1742
1786
  }
@@ -1903,8 +1947,8 @@ class DashboardDetailComponent {
1903
1947
  }
1904
1948
  this.previewChanged.emit(this.dashboard);
1905
1949
  }
1906
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: ContextDashboardService }, { token: i2$1.TranslateService }, { token: i3.ContextRouteService }, { token: i1.ActivatedRoute }, { token: i3.TabsService }, { token: i1.Router }, { token: i1$1.InventoryService }, { token: i1.ActivatedRoute }, { token: DashboardDetailService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: i3.GroupService }, { token: i3.ModalService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
1907
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: { isReport: "isReport", deviceType: "deviceType", context: "context", mo: "mo", dashboard: "dashboard", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability" }, outputs: { dashboardSaved: "dashboardSaved", previewChanged: "previewChanged" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "hasHeader"] }, { kind: "component", type: i3.TabComponent, selector: "c8y-tab", inputs: ["path", "label", "icon", "priority", "orientation", "injector", "tabsOutlet", "isActive"], outputs: ["onSelect"] }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: DashboardGeneralSettingsComponent, selector: "c8y-dashboard-general-settings", inputs: ["isReport", "isNamedDashboard", "hideAvailability", "dashboard", "generalSettingsForm", "deviceTypeValue", "displayDeviceTypeValue", "allowTypeDashboard", "isDevice", "mo"], outputs: ["onDuplicateWithoutType"] }, { kind: "component", type: DashboardAppearanceSettingsComponent, selector: "c8y-dashboard-appearance-settings", inputs: ["dashboard", "appearanceSettingsForm"], outputs: ["previewChanged"] }, { kind: "component", type: DashboardVersionHistoryComponent, selector: "c8y-dashboard-version-history", inputs: ["dashboardHistory", "isReport"], outputs: ["onRevert"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
1950
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: ContextDashboardService }, { token: i2$1.TranslateService }, { token: i2.ContextRouteService }, { token: i1.ActivatedRoute }, { token: i2.TabsService }, { token: i1.Router }, { token: i1$1.InventoryService }, { token: i1.ActivatedRoute }, { token: DashboardDetailService }, { token: i2.AppStateService }, { token: i2.GroupService }, { token: i2.ModalService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
1951
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: { isReport: "isReport", deviceType: "deviceType", context: "context", mo: "mo", dashboard: "dashboard", isNamedDashboard: "isNamedDashboard", hideAvailability: "hideAvailability" }, outputs: { dashboardSaved: "dashboardSaved", previewChanged: "previewChanged" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen", "outletName", "context", "hasHeader"] }, { kind: "component", type: i2.TabComponent, selector: "c8y-tab", inputs: ["path", "label", "icon", "priority", "orientation", "injector", "tabsOutlet", "isActive"], outputs: ["onSelect"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: DashboardGeneralSettingsComponent, selector: "c8y-dashboard-general-settings", inputs: ["isReport", "isNamedDashboard", "hideAvailability", "dashboard", "generalSettingsForm", "deviceTypeValue", "displayDeviceTypeValue", "allowTypeDashboard", "isDevice", "mo"], outputs: ["onDuplicateWithoutType"] }, { kind: "component", type: DashboardAppearanceSettingsComponent, selector: "c8y-dashboard-appearance-settings", inputs: ["dashboard", "appearanceSettingsForm"], outputs: ["previewChanged"] }, { kind: "component", type: DashboardVersionHistoryComponent, selector: "c8y-dashboard-version-history", inputs: ["dashboardHistory", "isReport"], outputs: ["onRevert"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
1908
1952
  }
1909
1953
  __decorate([
1910
1954
  memoize(),
@@ -1915,7 +1959,7 @@ __decorate([
1915
1959
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardDetailComponent, decorators: [{
1916
1960
  type: Component,
1917
1961
  args: [{ selector: 'c8y-dashboard-detail', template: "<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
1918
- }], ctorParameters: () => [{ type: ContextDashboardService }, { type: i2$1.TranslateService }, { type: i3.ContextRouteService }, { type: i1.ActivatedRoute }, { type: i3.TabsService }, { type: i1.Router }, { type: i1$1.InventoryService }, { type: i1.ActivatedRoute }, { type: DashboardDetailService }, { type: i3.AppStateService }, { type: i3.OptionsService }, { type: i3.GroupService }, { type: i3.ModalService }, { type: i3.GainsightService }], propDecorators: { isReport: [{
1962
+ }], ctorParameters: () => [{ type: ContextDashboardService }, { type: i2$1.TranslateService }, { type: i2.ContextRouteService }, { type: i1.ActivatedRoute }, { type: i2.TabsService }, { type: i1.Router }, { type: i1$1.InventoryService }, { type: i1.ActivatedRoute }, { type: DashboardDetailService }, { type: i2.AppStateService }, { type: i2.GroupService }, { type: i2.ModalService }, { type: i2.GainsightService }], propDecorators: { isReport: [{
1919
1963
  type: Input
1920
1964
  }], deviceType: [{
1921
1965
  type: Input
@@ -1984,7 +2028,7 @@ class WidgetService {
1984
2028
  }
1985
2029
  return widget;
1986
2030
  }
1987
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetService, deps: [{ token: i3.DynamicComponentService }, { token: i2$1.TranslateService }, { token: CONTEXT_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2031
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetService, deps: [{ token: i2.DynamicComponentService }, { token: i2$1.TranslateService }, { token: CONTEXT_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1988
2032
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetService, providedIn: 'root' }); }
1989
2033
  }
1990
2034
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetService, decorators: [{
@@ -1992,7 +2036,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
1992
2036
  args: [{
1993
2037
  providedIn: 'root'
1994
2038
  }]
1995
- }], ctorParameters: () => [{ type: i3.DynamicComponentService }, { type: i2$1.TranslateService }, { type: undefined, decorators: [{
2039
+ }], ctorParameters: () => [{ type: i2.DynamicComponentService }, { type: i2$1.TranslateService }, { type: undefined, decorators: [{
1996
2040
  type: Optional
1997
2041
  }, {
1998
2042
  type: Inject,
@@ -2007,7 +2051,7 @@ class WidgetPreviewComponent {
2007
2051
  };
2008
2052
  }
2009
2053
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2010
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: { previewClasses: "previewClasses", tab: "tab" }, ngImport: i0, template: "<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
2054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: { previewClasses: "previewClasses", tab: "tab" }, ngImport: i0, template: "<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
2011
2055
  }
2012
2056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetPreviewComponent, decorators: [{
2013
2057
  type: Component,
@@ -2244,7 +2288,7 @@ class WidgetConfigComponent {
2244
2288
  return widgetConfig;
2245
2289
  }
2246
2290
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetConfigComponent, deps: [{ token: WidgetService }, { token: i2$2.BsModalRef }, { token: i1$1.InventoryService }, { token: ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
2247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }, { propertyName: "configForm", first: true, predicate: ["configForm"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i3.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "dashboardSettings", "possibleStylingTheme", "possibleStylingHeader", "columns"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
2291
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }, { propertyName: "configForm", first: true, predicate: ["configForm"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.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.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "component", type: AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "dashboardSettings", "possibleStylingTheme", "possibleStylingHeader", "columns"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
2248
2292
  }
2249
2293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetConfigComponent, decorators: [{
2250
2294
  type: Component,
@@ -2746,7 +2790,7 @@ class ContextDashboardComponent {
2746
2790
  if (this.dashboard) {
2747
2791
  this.dashboard.historyDescription = {};
2748
2792
  }
2749
- this.widgetsDashboard.editMode = false;
2793
+ this.widgetsDashboard.editMode$.next(false);
2750
2794
  if (!onDeactivate) {
2751
2795
  // when setWidgets is called during navigation from device to device, navigation fails
2752
2796
  await this.setWidgets(dashboardChildren.children);
@@ -3080,8 +3124,8 @@ class ContextDashboardComponent {
3080
3124
  ? str
3081
3125
  : this.gainsightService.hashGroupName(str);
3082
3126
  }
3083
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: ContextDashboardService }, { token: i3.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: WidgetService }, { token: i2$2.BsModalService }, { token: i3.GainsightService }, { token: i3.ActionBarService }, { token: i2$1.TranslateService }, { token: i3.ModalService }, { token: DashboardEditModeService }], target: i0.ɵɵFactoryTarget.Component }); }
3084
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { listeners: { "window:beforeunload": "beforeUnloadHandler($event)" }, properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, viewQueries: [{ propertyName: "dashboardDetails", first: true, predicate: DashboardDetailComponent, descendants: true, static: true }, { propertyName: "widgetsDashboard", first: true, predicate: WidgetsDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || widgetsDashboard?.editMode\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "isCopyDisabled", "breadcrumb", "editModeButtons"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onResize", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onChangeStart", "onChangeEnd", "onSaveDashboard", "onCancelDashboard", "revertChange"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i4.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: DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: ["isReport", "deviceType", "context", "mo", "dashboard", "isNamedDashboard", "hideAvailability"], outputs: ["dashboardSaved", "previewChanged"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
3127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: ContextDashboardService }, { token: i2.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: WidgetService }, { token: i2$2.BsModalService }, { token: i2.GainsightService }, { token: i2.ActionBarService }, { token: i2$1.TranslateService }, { token: i2.ModalService }, { token: DashboardEditModeService }], target: i0.ɵɵFactoryTarget.Component }); }
3128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { listeners: { "window:beforeunload": "beforeUnloadHandler($event)" }, properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, viewQueries: [{ propertyName: "dashboardDetails", first: true, predicate: DashboardDetailComponent, descendants: true, static: true }, { propertyName: "widgetsDashboard", first: true, predicate: WidgetsDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "isCopyDisabled", "breadcrumb", "editModeButtons"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onResize", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onChangeStart", "onChangeEnd", "onSaveDashboard", "onCancelDashboard", "revertChange"] }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i4$1.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: DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: ["isReport", "deviceType", "context", "mo", "dashboard", "isNamedDashboard", "hideAvailability"], outputs: ["dashboardSaved", "previewChanged"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
3085
3129
  }
3086
3130
  __decorate([
3087
3131
  memoize(),
@@ -3096,11 +3140,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
3096
3140
  display: block;
3097
3141
  `,
3098
3142
  class: 'dashboard c8y-grid-dashboard'
3099
- }, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || widgetsDashboard?.editMode\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
3100
- }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: ContextDashboardService }, { type: i3.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
3143
+ }, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
3144
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: ContextDashboardService }, { type: i2.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
3101
3145
  type: Inject,
3102
3146
  args: [CONTEXT_DASHBOARD_CONFIG]
3103
- }] }, { type: WidgetService }, { type: i2$2.BsModalService }, { type: i3.GainsightService }, { type: i3.ActionBarService }, { type: i2$1.TranslateService }, { type: i3.ModalService }, { type: DashboardEditModeService }], propDecorators: { name: [{
3147
+ }] }, { type: WidgetService }, { type: i2$2.BsModalService }, { type: i2.GainsightService }, { type: i2.ActionBarService }, { type: i2$1.TranslateService }, { type: i2.ModalService }, { type: DashboardEditModeService }], propDecorators: { name: [{
3104
3148
  type: Input
3105
3149
  }], childrenClasses: [{
3106
3150
  type: Input
@@ -3172,13 +3216,13 @@ class CockpitDashboardComponent {
3172
3216
  this.pageTitle = config.pageTitle;
3173
3217
  }
3174
3218
  }
3175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CockpitDashboardComponent, deps: [{ token: i3.AppStateService }, { token: COCKPIT_HOME_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
3176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
3219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CockpitDashboardComponent, deps: [{ token: i2.AppStateService }, { token: COCKPIT_HOME_DASHBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
3220
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CockpitDashboardComponent, selector: "c8y-cockpit-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
3177
3221
  }
3178
3222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CockpitDashboardComponent, decorators: [{
3179
3223
  type: Component,
3180
3224
  args: [{ selector: 'c8y-cockpit-dashboard', template: "<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n" }]
3181
- }], ctorParameters: () => [{ type: i3.AppStateService }, { type: undefined, decorators: [{
3225
+ }], ctorParameters: () => [{ type: i2.AppStateService }, { type: undefined, decorators: [{
3182
3226
  type: Optional
3183
3227
  }, {
3184
3228
  type: Inject,
@@ -3266,7 +3310,7 @@ class PasteDashboardActionComponent {
3266
3310
  </button>
3267
3311
  </li>
3268
3312
  </ng-template>
3269
- `, isInline: true, dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
3313
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
3270
3314
  }
3271
3315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PasteDashboardActionComponent, decorators: [{
3272
3316
  type: Component,
@@ -3954,7 +3998,7 @@ class DeviceInfoDashboardComponent {
3954
3998
  return this.contextDashboard?.canDeactivate();
3955
3999
  }
3956
4000
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceInfoDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: WidgetService }, { token: i2$1.TranslateService }, { token: i1$1.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
3957
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }] }); }
4001
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }] }); }
3958
4002
  }
3959
4003
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceInfoDashboardComponent, decorators: [{
3960
4004
  type: Component,
@@ -4034,7 +4078,7 @@ class DeviceManagementHomeDashboardComponent {
4034
4078
  return this.contextDashboard?.canDeactivate();
4035
4079
  }
4036
4080
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceManagementHomeDashboardComponent, deps: [{ token: WidgetService }], target: i0.ɵɵFactoryTarget.Component }); }
4037
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceManagementHomeDashboardComponent, selector: "c8y-device-management-home-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
4081
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceManagementHomeDashboardComponent, selector: "c8y-device-management-home-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n", dependencies: [{ kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
4038
4082
  }
4039
4083
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceManagementHomeDashboardComponent, decorators: [{
4040
4084
  type: Component,
@@ -4230,7 +4274,7 @@ class DashboardManagerService extends DataGridService {
4230
4274
  const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery);
4231
4275
  return this.queriesUtil.buildQuery(fullQuery);
4232
4276
  }
4233
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardManagerService, deps: [{ token: i1$1.InventoryService }, { token: i3.UserPreferencesService }, { token: i3.ModalService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4277
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardManagerService, deps: [{ token: i1$1.InventoryService }, { token: i2.UserPreferencesService }, { token: i2.ModalService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4234
4278
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardManagerService, providedIn: 'root' }); }
4235
4279
  }
4236
4280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DashboardManagerService, decorators: [{
@@ -4238,7 +4282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
4238
4282
  args: [{
4239
4283
  providedIn: 'root'
4240
4284
  }]
4241
- }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i3.UserPreferencesService }, { type: i3.ModalService }, { type: i2$1.TranslateService }] });
4285
+ }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i2.UserPreferencesService }, { type: i2.ModalService }, { type: i2$1.TranslateService }] });
4242
4286
 
4243
4287
  class BasicNameDeviceGridColumn extends NameDeviceGridColumn {
4244
4288
  constructor(initialColumnConfig) {
@@ -4306,7 +4350,7 @@ class TypeDashboardAssetsGridService extends DataGridService {
4306
4350
  fullQuery = this.queriesUtil.addAndFilter(fullQuery, query);
4307
4351
  return this.queriesUtil.buildQuery(fullQuery);
4308
4352
  }
4309
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardAssetsGridService, deps: [{ token: i1$1.InventoryService }, { token: i3.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardAssetsGridService, deps: [{ token: i1$1.InventoryService }, { token: i2.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4310
4354
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardAssetsGridService, providedIn: 'root' }); }
4311
4355
  }
4312
4356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardAssetsGridService, decorators: [{
@@ -4314,7 +4358,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
4314
4358
  args: [{
4315
4359
  providedIn: 'root'
4316
4360
  }]
4317
- }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i3.UserPreferencesService }] });
4361
+ }], ctorParameters: () => [{ type: i1$1.InventoryService }, { type: i2.UserPreferencesService }] });
4318
4362
 
4319
4363
  class TypeDashboardTargetAssetsGridComponent {
4320
4364
  constructor(router, assetsGridService, contextDashboardService) {
@@ -4366,7 +4410,7 @@ class TypeDashboardTargetAssetsGridComponent {
4366
4410
  this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);
4367
4411
  }
4368
4412
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardTargetAssetsGridComponent, deps: [{ token: i1.Router }, { token: TypeDashboardAssetsGridService }, { token: ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
4369
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: { dashboard: "dashboard" }, outputs: { onNavigateToAsset: "onNavigateToAsset" }, ngImport: i0, template: "<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
4413
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: { dashboard: "dashboard" }, outputs: { onNavigateToAsset: "onNavigateToAsset" }, ngImport: i0, template: "<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i2.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
4370
4414
  }
4371
4415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardTargetAssetsGridComponent, decorators: [{
4372
4416
  type: Component,
@@ -4391,7 +4435,7 @@ class TypeDashboardTargetAssetsModalComponent {
4391
4435
  this.bsModalRef.hide();
4392
4436
  }
4393
4437
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardTargetAssetsModalComponent, deps: [{ token: i2$2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
4394
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardTargetAssetsModalComponent, selector: "c8y-type-dashboard-target-assets-modal", inputs: { dashboard: "dashboard" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: ["dashboard"], outputs: ["onNavigateToAsset"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
4438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardTargetAssetsModalComponent, selector: "c8y-type-dashboard-target-assets-modal", inputs: { dashboard: "dashboard" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: i2.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: ["dashboard"], outputs: ["onNavigateToAsset"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
4395
4439
  }
4396
4440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardTargetAssetsModalComponent, decorators: [{
4397
4441
  type: Component,
@@ -4463,7 +4507,7 @@ class TypeDashboardsListComponent {
4463
4507
  };
4464
4508
  }
4465
4509
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardsListComponent, deps: [{ token: DashboardManagerService }, { token: i2$2.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
4466
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardsListComponent, selector: "c8y-dashboard-manager", ngImport: i0, template: "<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i3.ExpandableRowDirective, selector: "[c8yExpandableRow]" }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
4510
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TypeDashboardsListComponent, selector: "c8y-dashboard-manager", ngImport: i0, template: "<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ 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: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i2.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i2.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i2.ExpandableRowDirective, selector: "[c8yExpandableRow]" }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
4467
4511
  }
4468
4512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TypeDashboardsListComponent, decorators: [{
4469
4513
  type: Component,