@c8y/ngx-components 1021.52.0 → 1021.54.4

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 (259) hide show
  1. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +10 -2
  2. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
  3. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts +11 -0
  4. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts.map +1 -0
  5. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts +10 -4
  6. package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts.map +1 -1
  7. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts +3 -1
  8. package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts.map +1 -1
  9. package/alarm-event-selector/alarm-event-selector.model.d.ts +7 -0
  10. package/alarm-event-selector/alarm-event-selector.model.d.ts.map +1 -1
  11. package/core/application/app-icon.component.d.ts.map +1 -1
  12. package/core/dashboard/dashboard-child-action.component.d.ts +1 -1
  13. package/core/dashboard/dashboard-child-action.component.d.ts.map +1 -1
  14. package/core/dashboard/dashboard.module.d.ts +29 -29
  15. package/core/dashboard/index.d.ts +3 -0
  16. package/core/dashboard/index.d.ts.map +1 -1
  17. package/core/dashboard/widgets-dashboard.component.d.ts +1 -1
  18. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  19. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +1 -1
  20. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  21. package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts +1 -1
  22. package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts.map +1 -1
  23. package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts +10 -0
  24. package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts.map +1 -0
  25. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +7 -4
  26. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  27. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +0 -1
  28. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  29. package/core/date-picker/date-picker.component.d.ts +1 -1
  30. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  31. package/core/date-picker/date-picker.module.d.ts +9 -9
  32. package/core/date-time-picker/close-date-picker.directive.d.ts +1 -1
  33. package/core/date-time-picker/close-date-picker.directive.d.ts.map +1 -1
  34. package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
  35. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  36. package/core/date-time-picker/date-time-picker.module.d.ts +11 -11
  37. package/core/date-time-picker/date-time-picker.module.d.ts.map +1 -1
  38. package/core/forms/forms.module.d.ts +18 -18
  39. package/core/forms/required-input-placeholder.directive.d.ts +1 -1
  40. package/core/forms/required-input-placeholder.directive.d.ts.map +1 -1
  41. package/core/router/router.service.d.ts.map +1 -1
  42. package/core/user/user-menu.service.d.ts +36 -11
  43. package/core/user/user-menu.service.d.ts.map +1 -1
  44. package/datapoint-explorer/c8y-ngx-components-datapoint-explorer.d.ts.map +1 -0
  45. package/datapoint-explorer/datapoint-explorer.module.d.ts +7 -0
  46. package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -0
  47. package/datapoint-explorer/index.d.ts +2 -0
  48. package/datapoint-explorer/index.d.ts.map +1 -0
  49. package/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.d.ts.map +1 -0
  50. package/datapoint-explorer/view/configuration/naming-dictionary.d.ts +3 -0
  51. package/datapoint-explorer/view/configuration/naming-dictionary.d.ts.map +1 -0
  52. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +38 -0
  53. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -0
  54. package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts +7 -0
  55. package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts.map +1 -0
  56. package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts +15 -0
  57. package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts.map +1 -0
  58. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts +25 -0
  59. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -0
  60. package/datapoint-explorer/view/datapoint-explorer.component.d.ts +67 -0
  61. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -0
  62. package/datapoint-explorer/view/datapoint-explorer.service.d.ts +9 -0
  63. package/datapoint-explorer/view/datapoint-explorer.service.d.ts.map +1 -0
  64. package/datapoint-explorer/view/index.d.ts +2 -0
  65. package/datapoint-explorer/view/index.d.ts.map +1 -0
  66. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts +23 -0
  67. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -0
  68. package/echart/c8y-ngx-components-echart.d.ts.map +1 -0
  69. package/echart/chart-alerts/chart-alerts.component.d.ts +8 -0
  70. package/echart/chart-alerts/chart-alerts.component.d.ts.map +1 -0
  71. package/echart/charts.component.d.ts +63 -0
  72. package/echart/charts.component.d.ts.map +1 -0
  73. package/echart/index.d.ts +5 -0
  74. package/echart/index.d.ts.map +1 -0
  75. package/echart/models/c8y-ngx-components-echart-models.d.ts.map +1 -0
  76. package/echart/models/chart.model.d.ts +37 -0
  77. package/echart/models/chart.model.d.ts.map +1 -0
  78. package/echart/models/datapoints-graph-widget.model.d.ts +126 -0
  79. package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -0
  80. package/echart/models/index.d.ts +4 -0
  81. package/echart/models/index.d.ts.map +1 -0
  82. package/echart/models/svg-icons.model.d.ts +22 -0
  83. package/echart/models/svg-icons.model.d.ts.map +1 -0
  84. package/echart/services/chart-alarms.service.d.ts +17 -0
  85. package/echart/services/chart-alarms.service.d.ts.map +1 -0
  86. package/echart/services/chart-events.service.d.ts +17 -0
  87. package/echart/services/chart-events.service.d.ts.map +1 -0
  88. package/echart/services/chart-realtime.service.d.ts +35 -0
  89. package/echart/services/chart-realtime.service.d.ts.map +1 -0
  90. package/echart/services/chart-types.service.d.ts +15 -0
  91. package/echart/services/chart-types.service.d.ts.map +1 -0
  92. package/echart/services/custom-measurements.service.d.ts +12 -0
  93. package/echart/services/custom-measurements.service.d.ts.map +1 -0
  94. package/echart/services/echarts-options.service.d.ts +143 -0
  95. package/echart/services/echarts-options.service.d.ts.map +1 -0
  96. package/echart/services/y-axis.service.d.ts +17 -0
  97. package/echart/services/y-axis.service.d.ts.map +1 -0
  98. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.mjs +37 -12
  99. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.mjs +2 -0
  100. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +39 -12
  101. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +6 -4
  102. package/esm2022/alarm-event-selector/alarm-event-selector.component.mjs +1 -1
  103. package/esm2022/alarm-event-selector/alarm-event-selector.model.mjs +1 -1
  104. package/esm2022/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.mjs +1 -1
  105. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  106. package/esm2022/core/application/app-icon.component.mjs +4 -4
  107. package/esm2022/core/dashboard/dashboard-child-action.component.mjs +3 -3
  108. package/esm2022/core/dashboard/dashboard.module.mjs +17 -14
  109. package/esm2022/core/dashboard/index.mjs +4 -1
  110. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -9
  111. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +11 -9
  112. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +8 -7
  113. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-date-range.service.mjs +23 -0
  114. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +70 -26
  115. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -1
  116. package/esm2022/core/date-picker/date-picker.component.mjs +29 -14
  117. package/esm2022/core/date-picker/date-picker.module.mjs +9 -7
  118. package/esm2022/core/date-time-picker/close-date-picker.directive.mjs +4 -3
  119. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +57 -29
  120. package/esm2022/core/date-time-picker/date-time-picker.module.mjs +11 -7
  121. package/esm2022/core/forms/forms.module.mjs +3 -3
  122. package/esm2022/core/forms/ip-range-input-list.component.mjs +5 -5
  123. package/esm2022/core/forms/required-input-placeholder.directive.mjs +4 -3
  124. package/esm2022/core/router/router.service.mjs +1 -1
  125. package/esm2022/core/time-interval/time-interval.component.mjs +3 -3
  126. package/esm2022/core/user/user-menu.service.mjs +57 -17
  127. package/esm2022/datapoint-explorer/c8y-ngx-components-datapoint-explorer.mjs +5 -0
  128. package/esm2022/datapoint-explorer/datapoint-explorer.module.mjs +65 -0
  129. package/esm2022/datapoint-explorer/index.mjs +2 -0
  130. package/esm2022/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.mjs +5 -0
  131. package/esm2022/datapoint-explorer/view/configuration/naming-dictionary.mjs +65 -0
  132. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.component.mjs +169 -0
  133. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.model.mjs +2 -0
  134. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.service.mjs +40 -0
  135. package/esm2022/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.mjs +64 -0
  136. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +279 -0
  137. package/esm2022/datapoint-explorer/view/datapoint-explorer.service.mjs +23 -0
  138. package/esm2022/datapoint-explorer/view/index.mjs +2 -0
  139. package/esm2022/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.mjs +48 -0
  140. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +3 -3
  141. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  142. 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 +3 -3
  143. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
  144. package/esm2022/device-list/add-smart-group.component.mjs +3 -3
  145. package/esm2022/echart/c8y-ngx-components-echart.mjs +5 -0
  146. package/esm2022/echart/chart-alerts/chart-alerts.component.mjs +16 -0
  147. package/esm2022/echart/charts.component.mjs +560 -0
  148. package/esm2022/echart/index.mjs +5 -0
  149. package/esm2022/echart/models/c8y-ngx-components-echart-models.mjs +5 -0
  150. package/esm2022/echart/models/chart.model.mjs +2 -0
  151. package/esm2022/echart/models/datapoints-graph-widget.model.mjs +17 -0
  152. package/esm2022/echart/models/index.mjs +4 -0
  153. package/esm2022/echart/models/svg-icons.model.mjs +22 -0
  154. package/esm2022/echart/services/chart-alarms.service.mjs +58 -0
  155. package/esm2022/echart/services/chart-events.service.mjs +44 -0
  156. package/esm2022/echart/services/chart-realtime.service.mjs +193 -0
  157. package/esm2022/echart/services/chart-types.service.mjs +102 -0
  158. package/esm2022/echart/services/custom-measurements.service.mjs +52 -0
  159. package/esm2022/echart/services/echarts-options.service.mjs +857 -0
  160. package/esm2022/echart/services/y-axis.service.mjs +150 -0
  161. package/esm2022/interval-picker/interval-picker.component.mjs +3 -3
  162. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  163. package/esm2022/map/map.component.mjs +4 -1
  164. package/esm2022/report-dashboard/index.mjs +2 -1
  165. package/esm2022/time-context/c8y-ngx-components-time-context.mjs +5 -0
  166. package/esm2022/time-context/index.mjs +2 -0
  167. package/esm2022/time-context/time-context.component.mjs +217 -0
  168. package/esm2022/time-context/time-context.service.mjs +83 -0
  169. package/esm2022/tracking/tracking.component.mjs +5 -6
  170. package/esm2022/tracking/tracking.service.mjs +7 -3
  171. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +6 -5
  172. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  173. package/esm2022/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +5 -0
  174. package/esm2022/widgets/definitions/datapoints-graph/index.mjs +31 -0
  175. package/esm2022/widgets/definitions/index.mjs +3 -2
  176. package/esm2022/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +5 -0
  177. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +239 -0
  178. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +241 -0
  179. package/esm2022/widgets/implementations/datapoints-graph/index.mjs +3 -0
  180. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +80 -28
  181. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  182. package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
  183. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  184. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +658 -0
  185. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -0
  186. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +72 -0
  187. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -0
  188. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +4 -4
  189. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  190. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +4 -4
  191. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  192. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -2
  193. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  194. package/fesm2022/c8y-ngx-components-echart-models.mjs +46 -0
  195. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -0
  196. package/fesm2022/c8y-ngx-components-echart.mjs +2023 -0
  197. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -0
  198. package/fesm2022/c8y-ngx-components-interval-picker.mjs +2 -2
  199. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  200. package/fesm2022/c8y-ngx-components-map.mjs +3 -0
  201. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  202. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  203. package/fesm2022/c8y-ngx-components-time-context.mjs +300 -0
  204. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -0
  205. package/fesm2022/c8y-ngx-components-tracking.mjs +10 -7
  206. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  207. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -4
  208. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  209. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  210. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  211. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +38 -0
  212. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -0
  213. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
  214. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  215. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +467 -0
  216. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -0
  217. package/fesm2022/c8y-ngx-components.mjs +433 -281
  218. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  219. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  220. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  221. package/locales/de.po +206 -279
  222. package/locales/es.po +206 -279
  223. package/locales/fr.po +206 -279
  224. package/locales/ja_JP.po +196 -279
  225. package/locales/ko.po +455 -444
  226. package/locales/locales.pot +200 -0
  227. package/locales/nl.po +206 -279
  228. package/locales/pl.po +206 -279
  229. package/locales/pt_BR.po +206 -279
  230. package/locales/zh_CN.po +450 -443
  231. package/locales/zh_TW.po +452 -445
  232. package/map/map.component.d.ts.map +1 -1
  233. package/package.json +1 -1
  234. package/report-dashboard/index.d.ts +1 -0
  235. package/report-dashboard/index.d.ts.map +1 -1
  236. package/time-context/c8y-ngx-components-time-context.d.ts.map +1 -0
  237. package/time-context/index.d.ts +2 -0
  238. package/time-context/index.d.ts.map +1 -0
  239. package/time-context/time-context.component.d.ts +61 -0
  240. package/time-context/time-context.component.d.ts.map +1 -0
  241. package/time-context/time-context.service.d.ts +25 -0
  242. package/time-context/time-context.service.d.ts.map +1 -0
  243. package/tracking/tracking.component.d.ts.map +1 -1
  244. package/tracking/tracking.service.d.ts.map +1 -1
  245. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
  246. package/widgets/cockpit-exports/index.d.ts +6 -0
  247. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  248. package/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.d.ts.map +1 -0
  249. package/widgets/definitions/datapoints-graph/index.d.ts +16 -0
  250. package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -0
  251. package/widgets/definitions/index.d.ts +1 -0
  252. package/widgets/definitions/index.d.ts.map +1 -1
  253. package/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.d.ts.map +1 -0
  254. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +43 -0
  255. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -0
  256. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +54 -0
  257. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -0
  258. package/widgets/implementations/datapoints-graph/index.d.ts +3 -0
  259. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -0
@@ -0,0 +1,241 @@
1
+ import { Component, Input, Optional, ViewChild } from '@angular/core';
2
+ import { AGGREGATION_ICONS, AGGREGATION_TEXTS, CoreModule, gettext, WidgetTimeContextDateRangeService } from '@c8y/ngx-components';
3
+ import { cloneDeep } from 'lodash-es';
4
+ import { FormBuilder, Validators } from '@angular/forms';
5
+ import { takeUntil } from 'rxjs/operators';
6
+ import { ALARM_STATUS_LABELS } from '@c8y/client';
7
+ import { TranslateService } from '@ngx-translate/core';
8
+ import { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';
9
+ import { A11yModule } from '@angular/cdk/a11y';
10
+ import { CommonModule } from '@angular/common';
11
+ import { ChartsComponent, ChartEventsService, ChartAlarmsService } from '@c8y/ngx-components/echart';
12
+ import { TooltipModule } from 'ngx-bootstrap/tooltip';
13
+ import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
14
+ import { PopoverModule } from 'ngx-bootstrap/popover';
15
+ import { AlarmsModule } from '@c8y/ngx-components/alarms';
16
+ import { Subject } from 'rxjs';
17
+ import { TimeContextComponent } from '@c8y/ngx-components/time-context';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@angular/forms";
20
+ import * as i2 from "@ngx-translate/core";
21
+ import * as i3 from "@c8y/ngx-components";
22
+ import * as i4 from "@c8y/ngx-components/context-dashboard";
23
+ import * as i5 from "@angular/common";
24
+ import * as i6 from "ngx-bootstrap/tooltip";
25
+ import * as i7 from "ngx-bootstrap/popover";
26
+ import * as i8 from "@c8y/ngx-components/alarms";
27
+ export class DatapointsGraphWidgetViewComponent {
28
+ set config(value) {
29
+ this.displayConfig = cloneDeep(value);
30
+ }
31
+ get config() {
32
+ throw Error('"config" property should not be referenced in view component to avoid mutating data.');
33
+ }
34
+ constructor(formBuilder, translate, widgetTimeContextDateRangeService, dashboardContextComponent) {
35
+ this.formBuilder = formBuilder;
36
+ this.translate = translate;
37
+ this.widgetTimeContextDateRangeService = widgetTimeContextDateRangeService;
38
+ this.dashboardContextComponent = dashboardContextComponent;
39
+ this.events = [];
40
+ this.alarms = [];
41
+ this.AGGREGATION_ICONS = AGGREGATION_ICONS;
42
+ this.AGGREGATION_TEXTS = AGGREGATION_TEXTS;
43
+ this.datapointsOutOfSync = new Map();
44
+ this.hasAtLeastOneDatapointActive = true;
45
+ this.hasAtLeastOneAlarmActive = true;
46
+ this.isMarkedAreaEnabled = false;
47
+ this.legendHelp = this.translate.instant(gettext(`<ul class="m-l-0 p-l-8 m-t-8 m-b-0">
48
+ <li>
49
+ <b>Visibility:</b>
50
+ use visibility icon to toggle datapoint, alarm or event visibility on chart. At least one datapoint is required to display chart.
51
+ </li>
52
+ <li>
53
+ <b>Alarm details</b>
54
+ Click alarm legend item to highlight area between alarm raised timestamp and alarm cleared timestamp.
55
+ You can also click alarm markline on chart to highlight alarm and to pause tooltip. Click on highlighted area or legend item to cancel highlighting.
56
+ </li>
57
+ </ul>`));
58
+ this.disableZoomInLabel = gettext('Disable zoom in');
59
+ this.enableZoomInLabel = gettext('Click to enable zoom, then click and drag on the desired area in the chart.');
60
+ this.hideDatapointLabel = gettext('Hide data point');
61
+ this.showDatapointLabel = gettext('Show data point');
62
+ this.destroy$ = new Subject();
63
+ this.timeControlsFormGroup = this.initForm();
64
+ this.timeControlsFormGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
65
+ this.displayConfig = { ...this.displayConfig, ...value };
66
+ });
67
+ }
68
+ ngOnInit() {
69
+ this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));
70
+ if (this.displayConfig.dateFrom && this.displayConfig.dateTo) {
71
+ this.timeProps = {
72
+ dateFrom: new Date(this.displayConfig?.dateFrom),
73
+ dateTo: new Date(this.displayConfig?.dateTo),
74
+ interval: this.displayConfig?.interval,
75
+ realtime: this.displayConfig?.realtime,
76
+ aggregation: this.displayConfig?.realtime ? null : this.displayConfig?.aggregation
77
+ };
78
+ }
79
+ }
80
+ ngOnDestroy() {
81
+ this.destroy$.next();
82
+ this.destroy$.complete();
83
+ }
84
+ ngOnChanges(changes) {
85
+ this.timeControlsFormGroup.patchValue(this.displayConfig || {});
86
+ const config = changes['config']?.currentValue;
87
+ if (config?.date && config?.widgetInstanceGlobalTimeContext && this.displayConfig?.date) {
88
+ if (!this.displayConfig.sliderChange) {
89
+ this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);
90
+ }
91
+ this.timePropsChanged({
92
+ currentDateContextFromDate: this.displayConfig?.date[0].toISOString(),
93
+ currentDateContextToDate: this.displayConfig?.date[1].toISOString(),
94
+ currentDateContextInterval: this.displayConfig?.interval,
95
+ realtime: this.displayConfig?.realtime,
96
+ aggregation: this.displayConfig?.aggregation
97
+ });
98
+ }
99
+ }
100
+ timePropsChanged(timeProps) {
101
+ const patchValues = {
102
+ dateFrom: new Date(timeProps.currentDateContextFromDate),
103
+ dateTo: new Date(timeProps.currentDateContextToDate),
104
+ interval: timeProps.currentDateContextInterval,
105
+ ...(timeProps.aggregation && { aggregation: timeProps.aggregation }),
106
+ ...(timeProps.realtime && { realtime: timeProps.realtime })
107
+ };
108
+ this.timeControlsFormGroup.patchValue(patchValues);
109
+ }
110
+ updateDashboardTimeContext(timeProps) {
111
+ if (this.displayConfig?.widgetInstanceGlobalTimeContext) {
112
+ this.widgetTimeContextDateRangeService.emitPropertyUpdate(timeProps);
113
+ }
114
+ this.timeControlsFormGroup.patchValue(timeProps);
115
+ this.timeProps = { ...timeProps, realtime: false };
116
+ }
117
+ updateTimeRangeOnRealtime(timeRange) {
118
+ this.timeControlsFormGroup.patchValue(timeRange, { emitEvent: false });
119
+ }
120
+ toggleChart(datapoint) {
121
+ if (this.displayConfig?.datapoints?.filter(dp => dp.__active).length === 1 &&
122
+ datapoint.__active) {
123
+ // at least 1 datapoint should be active
124
+ this.hasAtLeastOneDatapointActive = false;
125
+ return;
126
+ }
127
+ datapoint.__active = !datapoint.__active;
128
+ this.hasAtLeastOneDatapointActive = true;
129
+ this.displayConfig = { ...this.displayConfig };
130
+ }
131
+ handleDatapointOutOfSync(dpOutOfSync) {
132
+ const key = (dp) => dp.__target?.id + dp.fragment + dp.series;
133
+ const dpMatch = this.displayConfig?.datapoints?.find(dp => key(dp) === key(dpOutOfSync));
134
+ if (!dpMatch) {
135
+ return;
136
+ }
137
+ this.datapointsOutOfSync.set(dpMatch, true);
138
+ }
139
+ toggleMarkedArea(alarm) {
140
+ this.enabledMarkedAreaAlarmType = alarm.filters.type;
141
+ const params = {
142
+ data: {
143
+ itemType: alarm.filters.type
144
+ }
145
+ };
146
+ this.chartComponent.onChartClick(params);
147
+ }
148
+ toggleAlarmEventType(alarmOrEvent) {
149
+ if (alarmOrEvent.timelineType === 'ALARM') {
150
+ this.alarms = this.alarms.map(alarm => {
151
+ if (alarm.filters.type === alarmOrEvent.filters.type) {
152
+ alarm.__hidden = !alarm.__hidden;
153
+ }
154
+ return alarm;
155
+ });
156
+ }
157
+ else {
158
+ this.events = this.events.map(event => {
159
+ if (event.filters.type === alarmOrEvent.filters.type) {
160
+ event.__hidden = !event.__hidden;
161
+ }
162
+ return event;
163
+ });
164
+ }
165
+ this.displayConfig = { ...this.displayConfig };
166
+ }
167
+ updateAlarmsAndEvents(alarmsEventsConfigs) {
168
+ this.alarms = alarmsEventsConfigs.filter(alarm => alarm.timelineType === 'ALARM');
169
+ this.events = alarmsEventsConfigs.filter(event => event.timelineType === 'EVENT');
170
+ if (this.alarms.length === 0 || !this.alarms.find(alarm => alarm.__active)) {
171
+ this.hasAtLeastOneAlarmActive = false;
172
+ }
173
+ }
174
+ filterSeverity(eventTarget) {
175
+ this.alarms = this.alarms.map(alarm => {
176
+ if (!alarm.__severity) {
177
+ alarm.__severity = [];
178
+ }
179
+ alarm.__severity = Object.keys(eventTarget.severityOptions).filter((severity) => eventTarget.severityOptions[severity]);
180
+ if (!alarm.__status) {
181
+ alarm.__status = [];
182
+ }
183
+ const statuses = Object.keys(ALARM_STATUS_LABELS);
184
+ const filteredStatuses = eventTarget.showCleared
185
+ ? statuses
186
+ : statuses.filter(status => status !== 'CLEARED');
187
+ alarm.__status = filteredStatuses;
188
+ return alarm;
189
+ });
190
+ this.displayConfig = { ...this.displayConfig };
191
+ }
192
+ assignContextFromContextDashboard(datapoint) {
193
+ if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {
194
+ return;
195
+ }
196
+ const context = this.dashboardContextComponent?.context;
197
+ if (context?.id) {
198
+ const { name, id } = context;
199
+ datapoint.__target = { name, id };
200
+ }
201
+ }
202
+ initForm() {
203
+ const form = this.formBuilder.group({
204
+ dateFrom: [undefined, [Validators.required]],
205
+ dateTo: [undefined, [Validators.required]],
206
+ interval: [
207
+ this.displayConfig?.interval || 'hours',
208
+ [Validators.required]
209
+ ],
210
+ aggregation: [null, []],
211
+ realtime: [false, [Validators.required]],
212
+ widgetInstanceGlobalTimeContext: [false, []]
213
+ });
214
+ form.patchValue(this.displayConfig || {});
215
+ return form;
216
+ }
217
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsGraphWidgetViewComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TranslateService }, { token: i3.WidgetTimeContextDateRangeService }, { token: i4.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsGraphWidgetViewComponent, isStandalone: true, selector: "c8y-datapoints-graph-widget-view", inputs: { config: "config" }, providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chartComponent", first: true, predicate: ChartsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 active data points must be active.' | translate\"\n container=\"body\"\n *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"c8y-events\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "ngmodule", type: AlarmsModule }, { kind: "component", type: i8.AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: ["contextSourceId"], outputs: ["onFilterApplied"] }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }] }); }
219
+ }
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsGraphWidgetViewComponent, decorators: [{
221
+ type: Component,
222
+ args: [{ selector: 'c8y-datapoints-graph-widget-view', standalone: true, imports: [
223
+ A11yModule,
224
+ CommonModule,
225
+ ChartsComponent,
226
+ CoreModule,
227
+ TooltipModule,
228
+ BsDropdownModule,
229
+ PopoverModule,
230
+ AlarmsModule,
231
+ TimeContextComponent
232
+ ], providers: [ChartEventsService, ChartAlarmsService], template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 active data points must be active.' | translate\"\n container=\"body\"\n *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"c8y-events\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n" }]
233
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TranslateService }, { type: i3.WidgetTimeContextDateRangeService }, { type: i4.ContextDashboardComponent, decorators: [{
234
+ type: Optional
235
+ }] }], propDecorators: { config: [{
236
+ type: Input
237
+ }], chartComponent: [{
238
+ type: ViewChild,
239
+ args: [ChartsComponent]
240
+ }] } });
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLWdyYXBoL2RhdGFwb2ludHMtZ3JhcGgtdmlldy9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC12aWV3L2RhdGFwb2ludHMtZ3JhcGgtd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixVQUFVLEVBRVYsT0FBTyxFQUNQLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUNMLG1CQUFtQixFQUlwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFD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S0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLCtCQUErQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQXhPVSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyw2R0FGbEMsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQywwRUEyQnhDLGVBQWUscUVDOUY1Qix5MVJBcVFBLDJDRDVNSSxVQUFVLDhCQUNWLFlBQVksbWJBQ1osZUFBZSwyTkFDZixVQUFVLHlMQUNWLGFBQWEsaWtCQUNiLGdCQUFnQiw4QkFDaEIsYUFBYSw4VkFDYixZQUFZLGdMQUNaLG9CQUFvQjs7MkZBSVgsa0NBQWtDO2tCQWpCOUMsU0FBUzsrQkFDRSxrQ0FBa0MsY0FFaEMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixvQkFBb0I7cUJBQ3JCLGFBQ1UsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQzs7MEJBc0RoRCxRQUFRO3lDQW5DRSxNQUFNO3NCQUFsQixLQUFLO2dCQVFzQixjQUFjO3NCQUF6QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0lDT05TLFxuICBBR0dSRUdBVElPTl9URVhUUyxcbiAgQ29yZU1vZHVsZSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgZ2V0dGV4dCxcbiAgV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQUxBUk1fU1RBVFVTX0xBQkVMUyxcbiAgQWxhcm1TdGF0dXNUeXBlLFxuICBTZXZlcml0eVNldHRpbmdzLFxuICBhZ2dyZWdhdGlvblR5cGVcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFydHNDb21wb25lbnQsXG4gIERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsXG4gIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0VGltZVByb3BzLFxuICBTZXZlcml0eVR5cGUsXG4gIEFsYXJtRGV0YWlsc0V4dGVuZGVkLFxuICBBbGFybU9yRXZlbnRFeHRlbmRlZCxcbiAgRXZlbnREZXRhaWxzRXh0ZW5kZWQsXG4gIENoYXJ0RXZlbnRzU2VydmljZSxcbiAgQ2hhcnRBbGFybXNTZXJ2aWNlLFxuICBUaW1lQ29udGV4dFByb3BzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNoYXJ0JztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5pbXBvcnQgeyBBbGFybXNNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaW1lQ29udGV4dENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvdGltZS1jb250ZXh0JztcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEExMXlNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENoYXJ0c0NvbXBvbmVudCxcbiAgICBDb3JlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgQnNEcm9wZG93bk1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIEFsYXJtc01vZHVsZSxcbiAgICBUaW1lQ29udGV4dENvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtDaGFydEV2ZW50c1NlcnZpY2UsIENoYXJ0QWxhcm1zU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgZXZlbnRzOiBFdmVudERldGFpbHNFeHRlbmRlZFtdID0gW107XG4gIGFsYXJtczogQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXSA9IFtdO1xuICBBR0dSRUdBVElPTl9JQ09OUyA9IEFHR1JFR0FUSU9OX0lDT05TO1xuICBBR0dSRUdBVElPTl9URVhUUyA9IEFHR1JFR0FUSU9OX1RFWFRTO1xuICBhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IgfCB1bmRlZmluZWQ7XG4gIGRhdGFwb2ludHNPdXRPZlN5bmMgPSBuZXcgTWFwPERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsIGJvb2xlYW4+KCk7XG4gIHRpbWVQcm9wczogRGF0YXBvaW50c0dyYXBoV2lkZ2V0VGltZVByb3BzIHwgdW5kZWZpbmVkO1xuICBoYXNBdExlYXN0T25lRGF0YXBvaW50QWN0aXZlID0gdHJ1ZTtcbiAgaGFzQXRMZWFzdE9uZUFsYXJtQWN0aXZlID0gdHJ1ZTtcbiAgdGltZUNvbnRyb2xzRm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNHcmFwaFdpZGdldFZpZXdDb21wb25lbnRbJ2luaXRGb3JtJ10+O1xuICBpc01hcmtlZEFyZWFFbmFibGVkID0gZmFsc2U7XG4gIC8qXG4gICAqIEBkZXNjcmlwdGlvbjogVGhlIHR5cGUgb2YgYWxhcm0gdGhhdCBoYXMgbWFya2VkIGFyZWEgZW5hYmxlZC5cbiAgICovXG4gIGVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0gY2xvbmVEZWVwKHZhbHVlKTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IG5ldmVyIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICdcImNvbmZpZ1wiIHByb3BlcnR5IHNob3VsZCBub3QgYmUgcmVmZXJlbmNlZCBpbiB2aWV3IGNvbXBvbmVudCB0byBhdm9pZCBtdXRhdGluZyBkYXRhLidcbiAgICApO1xuICB9XG4gIEBWaWV3Q2hpbGQoQ2hhcnRzQ29tcG9uZW50KSBjaGFydENvbXBvbmVudCE6IENoYXJ0c0NvbXBvbmVudDtcbiAgZGlzcGxheUNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnIHwgdW5kZWZpbmVkO1xuICBsZWdlbmRIZWxwID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICBnZXR0ZXh0KGA8dWwgY2xhc3M9XCJtLWwtMCBwLWwtOCBtLXQtOCBtLWItMFwiPlxuICAgIDxsaT5cbiAgICAgIDxiPlZpc2liaWxpdHk6PC9iPlxuICAgICAgdXNlIHZpc2liaWxpdHkgaWNvbiB0byB0b2dnbGUgZGF0YXBvaW50LCBhbGFybSBvciBldmVudCB2aXNpYmlsaXR5IG9uIGNoYXJ0LiBBdCBsZWFzdCBvbmUgZGF0YXBvaW50IGlzIHJlcXVpcmVkIHRvIGRpc3BsYXkgY2hhcnQuXG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8Yj5BbGFybSBkZXRhaWxzPC9iPlxuICAgICAgQ2xpY2sgYWxhcm0gbGVnZW5kIGl0ZW0gdG8gaGlnaGxpZ2h0IGFyZWEgYmV0d2VlbiBhbGFybSByYWlzZWQgdGltZXN0YW1wIGFuZCBhbGFybSBjbGVhcmVkIHRpbWVzdGFtcC5cbiAgICAgIFlvdSBjYW4gYWxzbyBjbGljayBhbGFybSBtYXJrbGluZSBvbiBjaGFydCB0byBoaWdobGlnaHQgYWxhcm0gYW5kIHRvIHBhdXNlIHRvb2x0aXAuIENsaWNrIG9uIGhpZ2hsaWdodGVkIGFyZWEgb3IgbGVnZW5kIGl0ZW0gdG8gY2FuY2VsIGhpZ2hsaWdodGluZy5cbiAgICA8L2xpPlxuICA8L3VsPmApXG4gICk7XG4gIHJlYWRvbmx5IGRpc2FibGVab29tSW5MYWJlbCA9IGdldHRleHQoJ0Rpc2FibGUgem9vbSBpbicpO1xuICByZWFkb25seSBlbmFibGVab29tSW5MYWJlbCA9IGdldHRleHQoXG4gICAgJ0NsaWNrIHRvIGVuYWJsZSB6b29tLCB0aGVuIGNsaWNrIGFuZCBkcmFnIG9uIHRoZSBkZXNpcmVkIGFyZWEgaW4gdGhlIGNoYXJ0LidcbiAgKTtcbiAgcmVhZG9ubHkgaGlkZURhdGFwb2ludExhYmVsID0gZ2V0dGV4dCgnSGlkZSBkYXRhIHBvaW50Jyk7XG4gIHJlYWRvbmx5IHNob3dEYXRhcG9pbnRMYWJlbCA9IGdldHRleHQoJ1Nob3cgZGF0YSBwb2ludCcpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZTogV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cCA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZywgLi4udmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0YXBvaW50cz8uZm9yRWFjaChkcCA9PiB0aGlzLmFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkcCkpO1xuICAgIGlmICh0aGlzLmRpc3BsYXlDb25maWcuZGF0ZUZyb20gJiYgdGhpcy5kaXNwbGF5Q29uZmlnLmRhdGVUbykge1xuICAgICAgdGhpcy50aW1lUHJvcHMgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVUbyksXG4gICAgICAgIGludGVydmFsOiB0aGlzLmRpc3BsYXlDb25maWc/LmludGVydmFsLFxuICAgICAgICByZWFsdGltZTogdGhpcy5kaXNwbGF5Q29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUgPyBudWxsIDogdGhpcy5kaXNwbGF5Q29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmRpc3BsYXlDb25maWcgfHwge30pO1xuICAgIGNvbnN0IGNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnID0gY2hhbmdlc1snY29uZmlnJ10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoY29uZmlnPy5kYXRlICYmIGNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCAmJiB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGUpIHtcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5Q29uZmlnLnNsaWRlckNoYW5nZSkge1xuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lUHJvcHNDaGFuZ2VkKHtcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRUb0RhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogdGhpcy5kaXNwbGF5Q29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmRpc3BsYXlDb25maWc/LmFnZ3JlZ2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0aW1lUHJvcHNDaGFuZ2VkKHRpbWVQcm9wczogVGltZUNvbnRleHRQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoVmFsdWVzID0ge1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpLFxuICAgICAgaW50ZXJ2YWw6IHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgIC4uLih0aW1lUHJvcHMuYWdncmVnYXRpb24gJiYgeyBhZ2dyZWdhdGlvbjogdGltZVByb3BzLmFnZ3JlZ2F0aW9uIH0pLFxuICAgICAgLi4uKHRpbWVQcm9wcy5yZWFsdGltZSAmJiB7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSlcbiAgICB9O1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUocGF0Y2hWYWx1ZXMpO1xuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQodGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5Q29uZmlnPy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5lbWl0UHJvcGVydHlVcGRhdGUodGltZVByb3BzKTtcbiAgICB9XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aW1lUHJvcHMpO1xuICAgIHRoaXMudGltZVByb3BzID0geyAuLi50aW1lUHJvcHMsIHJlYWx0aW1lOiBmYWxzZSB9O1xuICB9XG5cbiAgdXBkYXRlVGltZVJhbmdlT25SZWFsdGltZShcbiAgICB0aW1lUmFuZ2U6IFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVJhbmdlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICB0b2dnbGVDaGFydChkYXRhcG9pbnQ6IERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGFwb2ludHM/LmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSkubGVuZ3RoID09PSAxICYmXG4gICAgICBkYXRhcG9pbnQuX19hY3RpdmVcbiAgICApIHtcbiAgICAgIC8vIGF0IGxlYXN0IDEgZGF0YXBvaW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhcG9pbnQuX19hY3RpdmUgPSAhZGF0YXBvaW50Ll9fYWN0aXZlO1xuICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0geyAuLi50aGlzLmRpc3BsYXlDb25maWcgfTtcbiAgfVxuXG4gIGhhbmRsZURhdGFwb2ludE91dE9mU3luYyhkcE91dE9mU3luYzogRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IChkcDogS1BJRGV0YWlscykgPT4gZHAuX190YXJnZXQ/LmlkICsgZHAuZnJhZ21lbnQgKyBkcC5zZXJpZXM7XG4gICAgY29uc3QgZHBNYXRjaCA9IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0YXBvaW50cz8uZmluZChkcCA9PiBrZXkoZHApID09PSBrZXkoZHBPdXRPZlN5bmMpKTtcbiAgICBpZiAoIWRwTWF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhcG9pbnRzT3V0T2ZTeW5jLnNldChkcE1hdGNoLCB0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZU1hcmtlZEFyZWEoYWxhcm06IEFsYXJtRGV0YWlsc0V4dGVuZGVkKTogdm9pZCB7XG4gICAgdGhpcy5lbmFibGVkTWFya2VkQXJlYUFsYXJtVHlwZSA9IGFsYXJtLmZpbHRlcnMudHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGl0ZW1UeXBlOiBhbGFybS5maWx0ZXJzLnR5cGVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY2hhcnRDb21wb25lbnQub25DaGFydENsaWNrKHBhcmFtcyk7XG4gIH1cblxuICB0b2dnbGVBbGFybUV2ZW50VHlwZShhbGFybU9yRXZlbnQ6IEFsYXJtT3JFdmVudEV4dGVuZGVkKTogdm9pZCB7XG4gICAgaWYgKGFsYXJtT3JFdmVudC50aW1lbGluZVR5cGUgPT09ICdBTEFSTScpIHtcbiAgICAgIHRoaXMuYWxhcm1zID0gdGhpcy5hbGFybXMubWFwKGFsYXJtID0+IHtcbiAgICAgICAgaWYgKGFsYXJtLmZpbHRlcnMudHlwZSA9PT0gYWxhcm1PckV2ZW50LmZpbHRlcnMudHlwZSkge1xuICAgICAgICAgIGFsYXJtLl9faGlkZGVuID0gIWFsYXJtLl9faGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGFybTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV2ZW50cyA9IHRoaXMuZXZlbnRzLm1hcChldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5maWx0ZXJzLnR5cGUgPT09IGFsYXJtT3JFdmVudC5maWx0ZXJzLnR5cGUpIHtcbiAgICAgICAgICBldmVudC5fX2hpZGRlbiA9ICFldmVudC5fX2hpZGRlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0geyAuLi50aGlzLmRpc3BsYXlDb25maWcgfTtcbiAgfVxuXG4gIHVwZGF0ZUFsYXJtc0FuZEV2ZW50cyhhbGFybXNFdmVudHNDb25maWdzOiBBbGFybU9yRXZlbnRFeHRlbmRlZFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGFybXMgPSBhbGFybXNFdmVudHNDb25maWdzLmZpbHRlcihcbiAgICAgIGFsYXJtID0+IGFsYXJtLnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJ1xuICAgICkgYXMgQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXTtcbiAgICB0aGlzLmV2ZW50cyA9IGFsYXJtc0V2ZW50c0NvbmZpZ3MuZmlsdGVyKFxuICAgICAgZXZlbnQgPT4gZXZlbnQudGltZWxpbmVUeXBlID09PSAnRVZFTlQnXG4gICAgKSBhcyBFdmVudERldGFpbHNFeHRlbmRlZFtdO1xuICAgIGlmICh0aGlzLmFsYXJtcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuYWxhcm1zLmZpbmQoYWxhcm0gPT4gYWxhcm0uX19hY3RpdmUpKSB7XG4gICAgICB0aGlzLmhhc0F0TGVhc3RPbmVBbGFybUFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlclNldmVyaXR5KGV2ZW50VGFyZ2V0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFsYXJtcyA9IHRoaXMuYWxhcm1zLm1hcChhbGFybSA9PiB7XG4gICAgICBpZiAoIWFsYXJtLl9fc2V2ZXJpdHkpIHtcbiAgICAgICAgYWxhcm0uX19zZXZlcml0eSA9IFtdO1xuICAgICAgfVxuICAgICAgYWxhcm0uX19zZXZlcml0eSA9IE9iamVjdC5rZXlzKGV2ZW50VGFyZ2V0LnNldmVyaXR5T3B0aW9ucykuZmlsdGVyKFxuICAgICAgICAoc2V2ZXJpdHkpOiBzZXZlcml0eSBpcyBrZXlvZiBTZXZlcml0eVNldHRpbmdzID0+XG4gICAgICAgICAgZXZlbnRUYXJnZXQuc2V2ZXJpdHlPcHRpb25zW3NldmVyaXR5IGFzIGtleW9mIFNldmVyaXR5U2V0dGluZ3NdXG4gICAgICApIGFzIFNldmVyaXR5VHlwZVtdO1xuXG4gICAgICBpZiAoIWFsYXJtLl9fc3RhdHVzKSB7XG4gICAgICAgIGFsYXJtLl9fc3RhdHVzID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0dXNlcyA9IE9iamVjdC5rZXlzKEFMQVJNX1NUQVRVU19MQUJFTFMpIGFzIEFsYXJtU3RhdHVzVHlwZVtdO1xuICAgICAgY29uc3QgZmlsdGVyZWRTdGF0dXNlcyA9IGV2ZW50VGFyZ2V0LnNob3dDbGVhcmVkXG4gICAgICAgID8gc3RhdHVzZXNcbiAgICAgICAgOiBzdGF0dXNlcy5maWx0ZXIoc3RhdHVzID0+IHN0YXR1cyAhPT0gJ0NMRUFSRUQnKTtcbiAgICAgIGFsYXJtLl9fc3RhdHVzID0gZmlsdGVyZWRTdGF0dXNlcztcbiAgICAgIHJldHVybiBhbGFybTtcbiAgICB9KTtcbiAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZENvbnRleHRDb21wb25lbnQ/LmlzRGV2aWNlVHlwZURhc2hib2FyZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5kYXNoYm9hcmRDb250ZXh0Q29tcG9uZW50Py5jb250ZXh0O1xuICAgIGlmIChjb250ZXh0Py5pZCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpZCB9ID0gY29udGV4dDtcbiAgICAgIGRhdGFwb2ludC5fX3RhcmdldCA9IHsgbmFtZSwgaWQgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCkge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGRhdGVGcm9tOiBbdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRGF0ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGRhdGVUbzogW3VuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBpbnRlcnZhbDogW1xuICAgICAgICB0aGlzLmRpc3BsYXlDb25maWc/LmludGVydmFsIHx8ICgnaG91cnMnIGFzIEludGVydmFsWydpZCddKSxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICBdLFxuICAgICAgYWdncmVnYXRpb246IFtudWxsIGFzIGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGwsIFtdXSxcbiAgICAgIHJlYWx0aW1lOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB3aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0OiBbZmFsc2UsIFtdXVxuICAgIH0pO1xuICAgIGZvcm0ucGF0Y2hWYWx1ZSh0aGlzLmRpc3BsYXlDb25maWcgfHwge30pO1xuICAgIHJldHVybiBmb3JtO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTE2IHAtci0xNlwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBhLWktc3RhcnRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gZmxleC1uby1zaHJpbmtcIlxuICAgICAgKm5nSWY9XCIhZGlzcGxheUNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ3JlZ2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgIChkaXNwbGF5Q29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgICAgICAgPyBBR0dSRUdBVElPTl9URVhUU1tkaXNwbGF5Q29uZmlnLmFnZ3JlZ2F0aW9uXVxuICAgICAgICAgICAgOiBBR0dSRUdBVElPTl9URVhUUy51bmRlZmluZWRcbiAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgIH19XCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiaWNvbi0xNFwiXG4gICAgICAgICAgW2M4eUljb25dPVwiXG4gICAgICAgICAgICBkaXNwbGF5Q29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgICAgICAgICA/IEFHR1JFR0FUSU9OX0lDT05TW2Rpc3BsYXlDb25maWcuYWdncmVnYXRpb25dXG4gICAgICAgICAgICAgIDogQUdHUkVHQVRJT05fSUNPTlMudW5kZWZpbmVkXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8Yzh5LXRpbWUtY29udGV4dFxuICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAoY29udGV4dENoYW5nZSk9XCJ0aW1lUHJvcHNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbY2hhbmdlZERhdGVDb250ZXh0XT1cInRpbWVQcm9wc1wiXG4gICAgICAgIFtjb250cm9sc0F2YWlsYWJsZV09XCJ7XG4gICAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgICAgdGltZVJhbmdlOiBkaXNwbGF5Q29uZmlnPy5kaXNwbGF5RGF0ZVNlbGVjdGlvbixcbiAgICAgICAgICBpbnRlcnZhbDogZGlzcGxheUNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgYWdncmVnYXRpb246IGRpc3BsYXlDb25maWc/LmRpc3BsYXlBZ2dyZWdhdGlvblNlbGVjdGlvblxuICAgICAgICB9XCJcbiAgICAgID48L2M4eS10aW1lLWNvbnRleHQ+XG4gICAgPC9kaXY+XG4gICAgPGM4eS1hbGFybXMtZmlsdGVyXG4gICAgICBjbGFzcz1cImQtY29udGVudHMgZm9ybS1ncm91cC1zbVwiXG4gICAgICAqbmdJZj1cImhhc0F0TGVhc3RPbmVBbGFybUFjdGl2ZVwiXG4gICAgICAoZmlsdGVyQXBwbGllZCk9XCJmaWx0ZXJTZXZlcml0eSgkZXZlbnQpXCJcbiAgICA+PC9jOHktYWxhcm1zLWZpbHRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtbm8tc2hyaW5rXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2F2ZSBhcyBpbWFnZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0b29sdGlwPVwie3sgJ1NhdmUgYXMgaW1hZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2hhcnQuc2F2ZUFzSW1hZ2UoKVwiXG4gICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgIGM4eUljb249XCJpbWFnZS1maWxlLWNoZWNrZWRcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlclwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbSBtLXItOFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJsZWdlbmRIZWxwVGVtcGxhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgPjwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3cgcC10LTggZC1mbGV4IGEtaS1zdGFydCBnYXAtOCBwLWItNFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGwgZmxleC1uby1zaHJpbmtcIlxuICAgICAgICAgIHRpdGxlPVwie3sgZGF0YXBvaW50LmxhYmVsIH19IC0ge3sgZGF0YXBvaW50Ll9fdGFyZ2V0Lm5hbWUgfX1cIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhcG9pbnQgb2YgZGlzcGxheUNvbmZpZy5kYXRhcG9pbnRzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogZGF0YXBvaW50Ll9fYWN0aXZlIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC13YXJuaW5nIG0tbC00XCJcbiAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInQXQgbGVhc3QgMSBhY3RpdmUgZGF0YSBwb2ludHMgbXVzdCBiZSBhY3RpdmUuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWhhc0F0TGVhc3RPbmVEYXRhcG9pbnRBY3RpdmUgJiYgZGF0YXBvaW50Ll9fYWN0aXZlXCJcbiAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsX19idG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAoZGF0YXBvaW50Ll9fYWN0aXZlID8gaGlkZURhdGFwb2ludExhYmVsIDogc2hvd0RhdGFwb2ludExhYmVsKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX0gXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoYXJ0KGRhdGFwb2ludClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi0xNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cImRhdGFwb2ludC5fX2FjdGl2ZSA/ICdleWUgdGV4dC1wcmltYXJ5JyA6ICdleWUtc2xhc2ggdGV4dC1tdXRlZCdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsX19sYWJlbCBjOHktZGF0YXBvaW50LXBpbGxfX2J0blwiPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNCBpY29uLTE0XCJcbiAgICAgICAgICAgICAgYzh5SWNvbj1cImNpcmNsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICBjb2xvcjogZGF0YXBvaW50LmNvbG9yXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtbXV0ZWQnOiAhZGF0YXBvaW50Ll9fYWN0aXZlIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICB7eyBkYXRhcG9pbnQubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIj5cbiAgICAgICAgICAgICAgICB7eyBkYXRhcG9pbnQuX190YXJnZXQubmFtZSB9fVxuICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdhcm5pbmcgbS1sLTRcIlxuICAgICAgICAgICAgICBjOHlJY29uPVwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnTWVhc3VyZW1lbnRzIHJlY2VpdmVkIGZvciB0aGlzIGRhdGEgcG9pbnQgbWF5IGJlIG91dCBvZiBzeW5jLicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YXBvaW50c091dE9mU3luYy5nZXQoZGF0YXBvaW50KVwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEFsYXJtcyAgLS0+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWxhcm0gb2YgYWxhcm1zXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktYWxhcm0tcGlsbCBmbGV4LW5vLXNocmlua1wiXG4gICAgICAgICAgICB0aXRsZT1cInt7IGFsYXJtLmZpbHRlcnMudHlwZSB9fSBcIlxuICAgICAgICAgICAgKm5nSWY9XCJhbGFybS5fX2FjdGl2ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdhcm5pbmcgbS1sLTRcIlxuICAgICAgICAgICAgICBjOHlJY29uPVwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnQWxhcm0gb2YgdGhpcyB0eXBlIGlzIGN1cnJlbnRseSBhY3RpdmUgYW5kIG91dHNpZGUgb2YgdGhlIHNlbGVjdGVkIHRpbWUgcmFuZ2UnXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q29uZmlnPy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZT8uaW5jbHVkZXMoYWxhcm0uZmlsdGVycy50eXBlKVwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWFsYXJtLXBpbGxfX2J0blwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgYWxhcm0uZmlsdGVycy50eXBlIH19IFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxhcm1FdmVudFR5cGUoYWxhcm0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cImFsYXJtLl9faGlkZGVuID8gJ2V5ZS1zbGFzaCB0ZXh0LW11dGVkJyA6ICdleWUgdGV4dC1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktYWxhcm0tcGlsbF9fbGFiZWwgYzh5LWFsYXJtLXBpbGxfX2J0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXJrZWRBcmVhKGFsYXJtKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICFpc01hcmtlZEFyZWFFbmFibGVkICYmIGFsYXJtLmZpbHRlcnMudHlwZSA9PT0gZW5hYmxlZE1hcmtlZEFyZWFBbGFybVR5cGVcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhbGFybS5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHJva2VkLWljb25cIlxuICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImJlbGxcIlxuICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtbXV0ZWQnOiBhbGFybS5fX2hpZGRlbiB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgYWxhcm0uZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC0xMFwiPlxuICAgICAgICAgICAgICAgICAge3sgYWxhcm0uX190YXJnZXQubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEV2ZW50cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXZlbnQgb2YgZXZlbnRzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktZXZlbnQtcGlsbCBmbGV4LW5vLXNocmlua1wiXG4gICAgICAgICAgICB0aXRsZT1cInt7IGV2ZW50LmZpbHRlcnMudHlwZSB9fVwiXG4gICAgICAgICAgICAqbmdJZj1cImV2ZW50Ll9fYWN0aXZlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWV2ZW50LXBpbGxfX2J0blwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgZXZlbnQuZmlsdGVycy50eXBlIH19IFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxhcm1FdmVudFR5cGUoZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cImV2ZW50Ll9faGlkZGVuID8gJ2V5ZS1zbGFzaCB0ZXh0LW11dGVkJyA6ICdleWUgdGV4dC1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktZXZlbnQtcGlsbF9fbGFiZWwgYzh5LWV2ZW50LXBpbGxfX2J0blwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2lyY2xlLWljb24td3JhcHBlciBjaXJjbGUtaWNvbi13cmFwcGVyLS1zbWFsbCBtLXItNFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGV2ZW50LmNvbG9yIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJjOHktZXZlbnRzXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LW11dGVkJzogZXZlbnQuX19oaWRkZW4gfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGV2ZW50LmZpbHRlcnMudHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGV2ZW50Ll9fdGFyZ2V0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGM4eS1jaGFydHNcbiAgI2NoYXJ0XG4gIFtjb25maWddPVwiZGlzcGxheUNvbmZpZ1wiXG4gIFthbGVydHNdPVwiYWxlcnRzXCJcbiAgKHVwZGF0ZUFsYXJtc0FuZEV2ZW50cyk9XCJ1cGRhdGVBbGFybXNBbmRFdmVudHMoJGV2ZW50KVwiXG4gIChjb25maWdDaGFuZ2VPblpvb21PdXQpPVwidXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQoJGV2ZW50KVwiXG4gIChkYXRhcG9pbnRPdXRPZlN5bmMpPVwiaGFuZGxlRGF0YXBvaW50T3V0T2ZTeW5jKCRldmVudClcIlxuICAodGltZVJhbmdlQ2hhbmdlT25SZWFsdGltZSk9XCJ1cGRhdGVUaW1lUmFuZ2VPblJlYWx0aW1lKCRldmVudClcIlxuICAoaXNNYXJrZWRBcmVhRW5hYmxlZCk9XCJpc01hcmtlZEFyZWFFbmFibGVkID0gJGV2ZW50XCJcbj48L2M4eS1jaGFydHM+XG5cbjxuZy10ZW1wbGF0ZSAjbGVnZW5kSGVscFRlbXBsYXRlPlxuICA8ZGl2IFtpbm5lckhUTUxdPVwibGVnZW5kSGVscFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './datapoints-graph-config/datapoints-graph-widget-config.component';
2
+ export * from './datapoints-graph-view/datapoints-graph-widget-view.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLWdyYXBoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0VBQW9FLENBQUM7QUFDbkYsY0FBYyxnRUFBZ0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YXBvaW50cy1ncmFwaC1jb25maWcvZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGFwb2ludHMtZ3JhcGgtdmlldy9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3LmNvbXBvbmVudCc7XG4iXX0=