@c8y/ngx-components 1022.16.2 → 1022.26.1

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 (130) hide show
  1. package/asset-properties/asset-properties.model.d.ts +117 -0
  2. package/asset-properties/asset-properties.model.d.ts.map +1 -0
  3. package/asset-properties/asset-properties.service.d.ts +72 -0
  4. package/asset-properties/asset-properties.service.d.ts.map +1 -0
  5. package/asset-properties/asset-property-list/asset-property-action.directive.d.ts +11 -0
  6. package/asset-properties/asset-property-list/asset-property-action.directive.d.ts.map +1 -0
  7. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts +11 -0
  8. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -0
  9. package/asset-properties/asset-property-list/asset-property-list.component.d.ts +195 -0
  10. package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -0
  11. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts +17 -0
  12. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts.map +1 -0
  13. package/asset-properties/asset-property-list/tree-data-source.d.ts +19 -0
  14. package/asset-properties/asset-property-list/tree-data-source.d.ts.map +1 -0
  15. package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts +75 -0
  16. package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -0
  17. package/asset-properties/c8y-ngx-components-asset-properties.d.ts.map +1 -0
  18. package/asset-properties/index.d.ts +6 -0
  19. package/asset-properties/index.d.ts.map +1 -0
  20. package/core/asset-property/asset-property.model.d.ts +0 -8
  21. package/core/asset-property/asset-property.model.d.ts.map +1 -1
  22. package/core/authentication/new-password.component.d.ts +3 -2
  23. package/core/authentication/new-password.component.d.ts.map +1 -1
  24. package/core/modal/modal.service.d.ts +1 -0
  25. package/core/modal/modal.service.d.ts.map +1 -1
  26. package/core/user/user-edit-modal.component.d.ts +1 -0
  27. package/core/user/user-edit-modal.component.d.ts.map +1 -1
  28. package/core/user/user-edit.component.d.ts +4 -1
  29. package/core/user/user-edit.component.d.ts.map +1 -1
  30. package/datapoint-explorer/datapoint-explorer.module.d.ts +2 -0
  31. package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -1
  32. package/datapoint-explorer/devicemanagement/c8y-ngx-components-datapoint-explorer-devicemanagement.d.ts.map +1 -0
  33. package/datapoint-explorer/devicemanagement/index.d.ts +2 -0
  34. package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -0
  35. package/datapoint-explorer/view/datapoint-explorer.component.d.ts +8 -3
  36. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
  37. package/datapoint-explorer/view/datapoint-explorer.model.d.ts +8 -0
  38. package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -0
  39. package/datapoint-explorer/view/index.d.ts +1 -0
  40. package/datapoint-explorer/view/index.d.ts.map +1 -1
  41. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +8 -2
  42. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  43. package/echart/charts.component.d.ts +1 -1
  44. package/echart/charts.component.d.ts.map +1 -1
  45. package/echart/index.d.ts +1 -0
  46. package/echart/index.d.ts.map +1 -1
  47. package/echart/models/datapoints-graph-widget.model.d.ts +13 -0
  48. package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -1
  49. package/echart/services/chart-helpers.service.d.ts +23 -0
  50. package/echart/services/chart-helpers.service.d.ts.map +1 -0
  51. package/echart/services/chart-realtime.service.d.ts +2 -0
  52. package/echart/services/chart-realtime.service.d.ts.map +1 -1
  53. package/echart/services/echarts-options.service.d.ts +5 -5
  54. package/echart/services/echarts-options.service.d.ts.map +1 -1
  55. package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
  56. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-asset-properties.mjs +1573 -0
  58. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -0
  59. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -0
  60. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -0
  61. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +157 -141
  62. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  63. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +1 -1
  64. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  65. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -2
  66. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  67. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +32 -18
  68. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  69. package/fesm2022/c8y-ngx-components-echart-models.mjs +14 -1
  70. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-echart.mjs +141 -46
  72. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +3 -3
  74. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-time-context.mjs +12 -5
  76. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -2
  78. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  79. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -0
  80. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  81. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +14 -6
  82. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +51 -10
  84. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components.mjs +1152 -1128
  86. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  87. package/locales/de.po +61 -46
  88. package/locales/es.po +44 -27
  89. package/locales/fr.po +72 -55
  90. package/locales/ja_JP.po +106 -88
  91. package/locales/ko.po +43 -27
  92. package/locales/locales.pot +49 -27
  93. package/locales/nl.po +44 -27
  94. package/locales/pl.po +44 -27
  95. package/locales/pt_BR.po +44 -27
  96. package/locales/zh_CN.po +44 -27
  97. package/locales/zh_TW.po +44 -27
  98. package/package.json +1 -1
  99. package/time-context/index.d.ts +1 -0
  100. package/time-context/index.d.ts.map +1 -1
  101. package/time-context/time-context.component.d.ts +6 -3
  102. package/time-context/time-context.component.d.ts.map +1 -1
  103. package/time-context/time-context.model.d.ts +10 -0
  104. package/time-context/time-context.model.d.ts.map +1 -0
  105. package/time-context/time-context.service.d.ts +2 -6
  106. package/time-context/time-context.service.d.ts.map +1 -1
  107. package/widgets/definitions/html-widget/html-widget-config.factory.d.ts.map +1 -1
  108. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +2 -0
  109. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -1
  110. package/widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.d.ts +17 -0
  111. package/widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.d.ts.map +1 -0
  112. package/widgets/implementations/html-widget/html-widget.model.d.ts +2 -2
  113. package/widgets/implementations/html-widget/html-widget.model.d.ts.map +1 -1
  114. package/widgets/implementations/html-widget/index.d.ts +1 -0
  115. package/widgets/implementations/html-widget/index.d.ts.map +1 -1
  116. package/device-parameters/c8y-ngx-components-device-parameters.d.ts.map +0 -1
  117. package/device-parameters/device-parameter-details.component.d.ts +0 -22
  118. package/device-parameters/device-parameter-details.component.d.ts.map +0 -1
  119. package/device-parameters/device-parameter-value.component.d.ts +0 -12
  120. package/device-parameters/device-parameter-value.component.d.ts.map +0 -1
  121. package/device-parameters/device-parameters-list.component.d.ts +0 -23
  122. package/device-parameters/device-parameters-list.component.d.ts.map +0 -1
  123. package/device-parameters/device-parameters-tab.guard.d.ts +0 -11
  124. package/device-parameters/device-parameters-tab.guard.d.ts.map +0 -1
  125. package/device-parameters/index.d.ts +0 -7
  126. package/device-parameters/index.d.ts.map +0 -1
  127. package/device-parameters/parameter-type-cell-renderer.components.d.ts +0 -8
  128. package/device-parameters/parameter-type-cell-renderer.components.d.ts.map +0 -1
  129. package/fesm2022/c8y-ngx-components-device-parameters.mjs +0 -215
  130. package/fesm2022/c8y-ngx-components-device-parameters.mjs.map +0 -1
@@ -368,7 +368,7 @@ const ICONS_MAP = {
368
368
  /* eslint-disable @typescript-eslint/no-explicit-any */
369
369
  const INDEX_HTML = '/index.html';
370
370
  class EchartsOptionsService {
371
- constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, translate, router) {
371
+ constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, translate, router, appState) {
372
372
  this.datePipe = datePipe;
373
373
  this.yAxisService = yAxisService;
374
374
  this.chartTypesService = chartTypesService;
@@ -376,6 +376,7 @@ class EchartsOptionsService {
376
376
  this.severityLabelPipe = severityLabelPipe;
377
377
  this.translate = translate;
378
378
  this.router = router;
379
+ this.appState = appState;
379
380
  this.TOOLTIP_WIDTH = 300;
380
381
  }
381
382
  getChartOptions(datapointsWithValues, timeRange, showSplitLines, events, alarms, displayOptions, selectedTimeRange, aggregatedDatapoints, sliderZoomUsed = false) {
@@ -389,6 +390,8 @@ class EchartsOptionsService {
389
390
  const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;
390
391
  const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];
391
392
  const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;
393
+ const currentUser = this.appState.currentUser?.getValue();
394
+ const selectedLanguage = currentUser?.customProperties?.['c8y_UserPreference-language'] || 'en';
392
395
  let intervalInMs = this.calculateExtendedIntervalInMs(selectedTimeRange?.interval || timeRange.interval || 'hours', selectedTimeRange || timeRange);
393
396
  if (sliderZoomUsed) {
394
397
  intervalInMs = this.calculateExtendedIntervalInMs(timeRange.interval || 'hours', timeRange);
@@ -482,7 +485,36 @@ class EchartsOptionsService {
482
485
  axisLabel: {
483
486
  hideOverlap: true,
484
487
  borderWidth: 2, // as there is no margin for labels spacing, transparent border is a workaround
485
- borderColor: 'transparent'
488
+ borderColor: 'transparent',
489
+ formatter: value => {
490
+ const date = new Date(value);
491
+ const locale = selectedLanguage.replace('_', '-');
492
+ const isStartOfMinute = date.getSeconds() === 0;
493
+ const isStartOfDay = date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0;
494
+ const isStartOfYear = date.getMonth() === 0 && date.getDate() === 1 && isStartOfDay;
495
+ let options;
496
+ // Case 1: Tick is start of year
497
+ // Shows only the year, e.g. "2025"
498
+ if (isStartOfYear) {
499
+ options = { year: 'numeric' };
500
+ }
501
+ // Case 2: Tick is start of day
502
+ // Shows abbreviated month and day, e.g. "Jan 13"
503
+ else if (isStartOfDay) {
504
+ options = { month: 'short', day: 'numeric' };
505
+ }
506
+ // Case 3: Tick is start of minute
507
+ // Shows hour and minute, e.g. "14:30" (format depends on locale)
508
+ else if (isStartOfMinute) {
509
+ options = { hour: 'numeric', minute: '2-digit' };
510
+ }
511
+ // Case 4: Interval is 1 minute or less
512
+ // Shows seconds, e.g. ":45"
513
+ else {
514
+ options = { second: '2-digit' };
515
+ }
516
+ return new Intl.DateTimeFormat(locale, options).format(date);
517
+ }
486
518
  },
487
519
  splitLine: {
488
520
  show: showSplitLines.XAxis,
@@ -666,7 +698,7 @@ class EchartsOptionsService {
666
698
  * @param allAlarms - All alarms.
667
699
  * @returns The formatted string for the tooltip.
668
700
  */
669
- getTooltipFormatterForAlarmAndEvents(tooltipParams, params, allEvents, allAlarms) {
701
+ getTooltipFormatterForAlarmAndEvents(tooltipParams, params, allEvents, allAlarms, displayOptions) {
670
702
  if (!Array.isArray(tooltipParams)) {
671
703
  return '';
672
704
  }
@@ -675,7 +707,7 @@ class EchartsOptionsService {
675
707
  const allSeries = this.echartsInstance?.getOption()['series'];
676
708
  // filter out alarm and event series
677
709
  const allDataPointSeries = allSeries.filter(series => series['typeOfSeries'] !== 'alarm' && series['typeOfSeries'] !== 'event');
678
- this.processSeries(allDataPointSeries, XAxisValue, YAxisReadings);
710
+ this.processSeries(allDataPointSeries, XAxisValue, YAxisReadings, displayOptions);
679
711
  // find event and alarm of the same type as the hovered markedLine or markedPoint
680
712
  const event = allEvents.find(e => e.type === params.data.itemType);
681
713
  const alarm = allAlarms.find(a => a.type === params.data.itemType);
@@ -864,17 +896,17 @@ class EchartsOptionsService {
864
896
  * @param XAxisValue - The X Axis value.
865
897
  * @param YAxisReadings - The Y Axis readings.
866
898
  */
867
- processSeries(allDataPointSeries, XAxisValue, YAxisReadings) {
899
+ processSeries(allDataPointSeries, XAxisValue, YAxisReadings, displayOptions) {
868
900
  allDataPointSeries.forEach((series) => {
869
901
  if (series.datapointId === 'aggregated') {
870
902
  return;
871
903
  }
872
904
  let value = '';
873
905
  if (series.id.endsWith('/min')) {
874
- value = this.processMinSeries(series, allDataPointSeries, XAxisValue);
906
+ value = this.processMinSeries(series, allDataPointSeries, XAxisValue, displayOptions);
875
907
  }
876
908
  else if (!series.id.endsWith('/max')) {
877
- value = this.processRegularSeries(series, XAxisValue);
909
+ value = this.processRegularSeries(series, XAxisValue, displayOptions);
878
910
  }
879
911
  if (value) {
880
912
  YAxisReadings.push(`<div class="d-flex a-i-center p-b-8 text-default"><span class='dlt-c8y-icon-circle m-r-4' style='color: ${series.itemStyle.color};'></span>` + // color circle
@@ -891,7 +923,7 @@ class EchartsOptionsService {
891
923
  * @param XAxisValue - The X Axis value.
892
924
  * @returns The processed value.
893
925
  */
894
- processMinSeries(series, allDataPointSeries, XAxisValue) {
926
+ processMinSeries(series, allDataPointSeries, XAxisValue, displayOptions) {
895
927
  const minValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);
896
928
  if (!minValue) {
897
929
  return '';
@@ -899,7 +931,7 @@ class EchartsOptionsService {
899
931
  const maxSeries = allDataPointSeries.find(s => s['id'] === series.id.replace('/min', '/max'));
900
932
  const maxValue = this.findValueForExactOrEarlierTimestamp(maxSeries?.['data'], XAxisValue);
901
933
  return (`<div class="d-flex a-i-center separator-top p-t-8 p-b-8 text-default"><label class="text-12 m-r-8 m-b-0">${this.datePipe.transform(minValue[0])}</label>` +
902
- `<span class="m-l-auto text-12">${minValue[1]} — ${maxValue?.[1]}` +
934
+ `<span class="m-l-auto text-12">${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue?.[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +
903
935
  (series.datapointUnit ? ` ${series.datapointUnit}` : '') +
904
936
  `</span></div>`);
905
937
  }
@@ -909,14 +941,14 @@ class EchartsOptionsService {
909
941
  * @param XAxisValue - The X Axis value.
910
942
  * @returns The processed value.
911
943
  */
912
- processRegularSeries(series, XAxisValue) {
944
+ processRegularSeries(series, XAxisValue, displayOptions) {
913
945
  const seriesValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);
914
946
  if (!seriesValue) {
915
947
  return '';
916
948
  }
917
949
  return (`<div class="d-flex a-i-center p-t-8 p-b-8 separator-top text-default">` +
918
950
  `<label class="m-b-0 m-r-8 text-12">${this.datePipe.transform(seriesValue[0])}</label><span class="m-l-auto text-12">` +
919
- seriesValue[1]?.toString() +
951
+ `${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +
920
952
  (series.datapointUnit ? ` ${series.datapointUnit}` : '') +
921
953
  `</span></div>`);
922
954
  }
@@ -927,9 +959,9 @@ class EchartsOptionsService {
927
959
  */
928
960
  processEvent(event, XAxisValue) {
929
961
  let value = `<ul class="list-unstyled small separator-top text-default">`;
930
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event type</label><code class="m-l-auto">${event.type}</code></li>`;
931
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event text</label><span class="m-l-auto">${event.text}<span></li>`;
932
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event time</label><span class="m-l-auto">${this.datePipe.transform(XAxisValue)}<span></li>`;
962
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">${this.translate.instant(gettext('Event type'))}</label><code class="m-l-auto" style="display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 2;" title="${event.type}">${event.type}</code></li>`;
963
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">${this.translate.instant(gettext('Event text'))}</label><span class="m-l-auto" style="display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 5;" title="${event.text}">${event.text}</span></li>`;
964
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">${this.translate.instant(gettext('Event time'))}</label><span class="m-l-auto">${this.datePipe.transform(XAxisValue)}<span></li>`;
933
965
  value += `</ul>`;
934
966
  return value;
935
967
  }
@@ -940,19 +972,19 @@ class EchartsOptionsService {
940
972
  */
941
973
  async processAlarm(alarm) {
942
974
  let value = `<ul class="list-unstyled small separator-top text-default m-0">`;
943
- value += `<li class="p-t-4 p-b-4 d-flex a-i-center separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Alarm Severity</label>`;
975
+ value += `<li class="p-t-4 p-b-4 d-flex a-i-center separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Alarm severity'))}</label>`;
944
976
  value += `<span class="small d-inline-flex a-i-center gap-4 m-l-auto"><i class="stroked-icon icon-14 status dlt-c8y-icon-${this.severityIconPipe.transform(alarm.severity)} ${alarm.severity.toLowerCase()}" > </i> ${this.severityLabelPipe.transform(alarm.severity)} </span></li>`;
945
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Alarm Type</label><span class="small m-l-auto"><code>${alarm.type}</code></span></li>`;
946
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Message</label><span class="small m-l-auto" style="overflow: hidden; text-overflow: ellipsis;" title="${alarm.text}">${alarm.text}</span></li>`;
947
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Last Updated</label><span class="small m-l-auto">${this.datePipe.transform(alarm['lastUpdated'])}</span></li>`;
977
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Alarm type'))}</label><span class="small m-l-auto"><code>${alarm.type}</code></span></li>`;
978
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Message'))}</label><span class="small m-l-auto" style="display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px;" title="${this.translate.instant(alarm.text)}">${this.translate.instant(alarm.text)}</span></li>`;
979
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Last updated'))}</label><span class="small m-l-auto">${this.datePipe.transform(alarm['lastUpdated'])}</span></li>`;
948
980
  const exists = await this.alarmRouteExists();
949
981
  if (exists) {
950
982
  const currentUrl = window.location.href;
951
983
  const baseUrlIndex = currentUrl.indexOf(INDEX_HTML);
952
984
  const baseUrl = currentUrl.substring(0, baseUrlIndex + INDEX_HTML.length);
953
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Link</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}/details?showCleared=true">${this.translate.instant(gettext('Alarm details'))}</a></span></li>`;
985
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Open details'))}</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}/details?showCleared=true">${this.translate.instant(gettext('Alarm details'))}</a></span></li>`;
954
986
  }
955
- value += `<li class="p-t-4 p-b-4 d-flex text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Alarm count</label><span class="small m-l-auto"><span class="badge badge-info">${alarm.count}</span></span></li>`;
987
+ value += `<li class="p-t-4 p-b-4 d-flex text-no-wrap"><label class="text-label-small m-b-0 m-r-8">${this.translate.instant(gettext('Alarm count'))}</label><span class="small m-l-auto"><span class="badge badge-info">${alarm.count}</span></span></li>`;
956
988
  value += `</ul>`;
957
989
  return value;
958
990
  }
@@ -1275,7 +1307,7 @@ class EchartsOptionsService {
1275
1307
  getTooltipFormatter(displayOptions) {
1276
1308
  return params => {
1277
1309
  if (!Array.isArray(params) || !params[0]?.data) {
1278
- return '';
1310
+ return null;
1279
1311
  }
1280
1312
  const data = params[0].data;
1281
1313
  const XAxisValue = data[0];
@@ -1303,7 +1335,7 @@ class EchartsOptionsService {
1303
1335
  value =
1304
1336
  `<div class="d-flex a-i-center separator-top text-default p-t-8 p-b-8">` +
1305
1337
  `<label class="text-12 m-r-8 m-b-0">${this.datePipe.transform(minValue[0])}</label>` +
1306
- `<div class="m-l-auto text-12" >${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2)} — ${maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2)}` +
1338
+ `<div class="m-l-auto text-12" >${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +
1307
1339
  (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +
1308
1340
  `</div></div>`;
1309
1341
  }
@@ -1319,7 +1351,7 @@ class EchartsOptionsService {
1319
1351
  value =
1320
1352
  `<div class="d-flex a-i-center separator-top text-default p-t-8 p-b-8">` +
1321
1353
  `<label class="text-12 m-r-8 m-b-0">${this.datePipe.transform(seriesValue[0])}</label>` +
1322
- `<div class="m-l-auto text-12" >${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2)}` +
1354
+ `<div class="m-l-auto text-12" >${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +
1323
1355
  (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +
1324
1356
  `</div></div>`;
1325
1357
  }
@@ -1345,12 +1377,12 @@ class EchartsOptionsService {
1345
1377
  return acc;
1346
1378
  }, null);
1347
1379
  }
1348
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1$1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
1380
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1$1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }, { token: i1$1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1349
1381
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService }); }
1350
1382
  }
1351
1383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, decorators: [{
1352
1384
  type: Injectable
1353
- }], ctorParameters: () => [{ type: i1$1.DatePipe }, { type: YAxisService }, { type: ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }] });
1385
+ }], ctorParameters: () => [{ type: i1$1.DatePipe }, { type: YAxisService }, { type: ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }, { type: i1$1.AppStateService }] });
1354
1386
 
1355
1387
  class ChartRealtimeService {
1356
1388
  constructor(measurementRealtime, alarmRealtimeService, eventRealtimeService, echartsOptionsService) {
@@ -1362,6 +1394,7 @@ class ChartRealtimeService {
1362
1394
  this.MIN_REALTIME_TIMEOUT = 250;
1363
1395
  this.MAX_REALTIME_TIMEOUT = 5_000;
1364
1396
  this.lastMeasurements = new Map();
1397
+ this.pendingAlarmsOrEvents = new Map();
1365
1398
  this.currentAlarms = [];
1366
1399
  this.currentEvents = [];
1367
1400
  }
@@ -1403,7 +1436,7 @@ class ChartRealtimeService {
1403
1436
  dateFrom: this.currentTimeRange.dateFrom.toISOString(),
1404
1437
  dateTo: this.currentTimeRange.dateTo.toISOString()
1405
1438
  });
1406
- interval(this.INTERVAL)
1439
+ this.realtimeIntervalSubscription = interval(this.INTERVAL)
1407
1440
  .pipe(tap(() => {
1408
1441
  const windowSize = this.currentTimeRange.dateTo.valueOf() - this.currentTimeRange.dateFrom.valueOf();
1409
1442
  const now = Date.now();
@@ -1438,7 +1471,16 @@ class ChartRealtimeService {
1438
1471
  this.realtimeSubscriptionMeasurements = measurement$
1439
1472
  .pipe(buffer(bufferReset$))
1440
1473
  .subscribe(measurements => {
1441
- this.updateChartInstance(measurements, null, displayOptions, datapointOutOfSyncCallback);
1474
+ const alarmsOrEvents = Array.from(this.pendingAlarmsOrEvents.values());
1475
+ this.pendingAlarmsOrEvents.clear();
1476
+ if (alarmsOrEvents.length) {
1477
+ alarmsOrEvents.forEach(alarmOrEvent => {
1478
+ this.updateChartInstance(measurements, alarmOrEvent, displayOptions, datapointOutOfSyncCallback);
1479
+ });
1480
+ }
1481
+ else {
1482
+ this.updateChartInstance(measurements, null, displayOptions, datapointOutOfSyncCallback);
1483
+ }
1442
1484
  // Store the last measurements
1443
1485
  measurements.forEach(measurement => {
1444
1486
  this.lastMeasurements.set(measurement.datapoint.fragment, measurement);
@@ -1446,27 +1488,21 @@ class ChartRealtimeService {
1446
1488
  });
1447
1489
  this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$
1448
1490
  .pipe(map(alarmOrEvent => {
1449
- const foundAlarmOrEvent = activeAlarmsOrEvents.find(aOrE => {
1450
- return aOrE.filters.type === alarmOrEvent.type;
1451
- });
1491
+ const foundAlarmOrEvent = activeAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.type);
1452
1492
  if (foundAlarmOrEvent) {
1453
1493
  alarmOrEvent['color'] = foundAlarmOrEvent.color;
1454
1494
  alarmOrEvent['selectedDatapoint'] = foundAlarmOrEvent.selectedDatapoint;
1495
+ const key = String(alarmOrEvent.id || alarmOrEvent.creationTime);
1496
+ this.pendingAlarmsOrEvents.set(key, alarmOrEvent);
1455
1497
  }
1456
- if (foundAlarmOrEvent) {
1457
- const fragment = alarmOrEvent['selectedDatapoint']?.fragment;
1458
- if (fragment && this.lastMeasurements.has(fragment)) {
1459
- const lastMeasurement = this.lastMeasurements.get(fragment);
1460
- this.updateChartInstance([lastMeasurement], alarmOrEvent, displayOptions, datapointOutOfSyncCallback);
1461
- }
1462
- }
1463
- return foundAlarmOrEvent ? alarmOrEvent : null;
1498
+ return null;
1464
1499
  }))
1465
1500
  .subscribe();
1466
1501
  }
1467
1502
  stopRealtime() {
1468
1503
  this.realtimeSubscriptionMeasurements?.unsubscribe();
1469
1504
  this.realtimeSubscriptionAlarmsEvents?.unsubscribe();
1505
+ this.realtimeIntervalSubscription?.unsubscribe();
1470
1506
  }
1471
1507
  /**
1472
1508
  * Updates the chart with the current alarms and events data. Only used when no active datapoints are selected.
@@ -1605,11 +1641,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1605
1641
 
1606
1642
  class ChartAlertsComponent {
1607
1643
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ChartAlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1608
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ChartAlertsComponent, isStandalone: true, selector: "c8y-chart-alerts", inputs: { alerts: "alerts" }, ngImport: i0, template: "<div\n class=\"overlay-center-vertically d-flex d-col a-i-stretch j-c-start p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n *ngIf=\"alertGroup.value.alerts.length\"\n class=\"alert\"\n role=\"alert\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\n \"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n title=\"{{ 'Don\\'t show again' | translate }}\"\n class=\"c8y-checkbox m-t-16\"\n >\n <input type=\"checkbox\" #dismissPermanently />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
1644
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ChartAlertsComponent, isStandalone: true, selector: "c8y-chart-alerts", inputs: { alerts: "alerts" }, ngImport: i0, template: "<div\n class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n class=\"alert\"\n role=\"alert\"\n *ngIf=\"alertGroup.value.alerts.length\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n class=\"c8y-checkbox m-t-16\"\n title=\"{{ 'Don\\'t show again' | translate }}\"\n >\n <input\n type=\"checkbox\"\n #dismissPermanently\n />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
1609
1645
  }
1610
1646
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ChartAlertsComponent, decorators: [{
1611
1647
  type: Component,
1612
- args: [{ selector: 'c8y-chart-alerts', standalone: true, imports: [CommonModule], template: "<div\n class=\"overlay-center-vertically d-flex d-col a-i-stretch j-c-start p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n *ngIf=\"alertGroup.value.alerts.length\"\n class=\"alert\"\n role=\"alert\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\n \"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n title=\"{{ 'Don\\'t show again' | translate }}\"\n class=\"c8y-checkbox m-t-16\"\n >\n <input type=\"checkbox\" #dismissPermanently />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n" }]
1648
+ args: [{ selector: 'c8y-chart-alerts', standalone: true, imports: [CommonModule], template: "<div\n class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n class=\"alert\"\n role=\"alert\"\n *ngIf=\"alertGroup.value.alerts.length\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n class=\"c8y-checkbox m-t-16\"\n title=\"{{ 'Don\\'t show again' | translate }}\"\n >\n <input\n type=\"checkbox\"\n #dismissPermanently\n />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n" }]
1613
1649
  }], propDecorators: { alerts: [{
1614
1650
  type: Input
1615
1651
  }] } });
@@ -1823,7 +1859,15 @@ class ChartsComponent {
1823
1859
  return;
1824
1860
  }
1825
1861
  updatedOptions.tooltip.formatter = (tooltipParams) => {
1826
- return this.echartsOptionsService.getTooltipFormatterForAlarmAndEvents(tooltipParams, params, this.events, this.alarms);
1862
+ return this.echartsOptionsService.getTooltipFormatterForAlarmAndEvents(tooltipParams, params, this.events, this.alarms, {
1863
+ displayMarkedLine: this.config.displayMarkedLine || false,
1864
+ displayMarkedPoint: this.config.displayMarkedPoint || false,
1865
+ mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,
1866
+ forceMergeDatapoints: this.config.forceMergeDatapoints || false,
1867
+ showLabelAndUnit: this.config.showLabelAndUnit || false,
1868
+ showSlider: this.config.showSlider || false,
1869
+ numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2
1870
+ });
1827
1871
  };
1828
1872
  this.echartsInstance.setOption(updatedOptions);
1829
1873
  });
@@ -1837,7 +1881,7 @@ class ChartsComponent {
1837
1881
  }
1838
1882
  onChartClick(params) {
1839
1883
  const options = this.echartsInstance.getOption();
1840
- if (!this.isAlarmClick(params)) {
1884
+ if (!this.isAlarmOrEventClick(params)) {
1841
1885
  this.echartsInstance.setOption({
1842
1886
  tooltip: { triggerOn: 'mousemove' },
1843
1887
  series: [{ markArea: { data: [] }, markLine: { data: [] } }]
@@ -1845,6 +1889,17 @@ class ChartsComponent {
1845
1889
  return;
1846
1890
  }
1847
1891
  const clickedAlarms = this.alarms.filter(alarm => alarm.type === params.data.itemType);
1892
+ const clickedEvents = this.events.filter(event => event.type === params.data.itemType);
1893
+ if (clickedEvents.length > 0) {
1894
+ const updatedOptions = {
1895
+ tooltip: {
1896
+ enterable: true,
1897
+ triggerOn: 'click'
1898
+ }
1899
+ };
1900
+ this.echartsInstance.setOption(updatedOptions);
1901
+ return;
1902
+ }
1848
1903
  this.isMarkedAreaEnabled.emit(this.hasMarkArea(options));
1849
1904
  const updatedOptions = !this.hasMarkArea(options)
1850
1905
  ? {
@@ -1867,8 +1922,9 @@ class ChartsComponent {
1867
1922
  };
1868
1923
  this.echartsInstance.setOption(updatedOptions);
1869
1924
  }
1870
- isAlarmClick(params) {
1871
- return this.alarms.some(alarm => alarm.type === params.data.itemType);
1925
+ isAlarmOrEventClick(params) {
1926
+ return (this.alarms.some(alarm => alarm.type === params.data.itemType) ||
1927
+ this.events.some(event => event.type === params.data.itemType));
1872
1928
  }
1873
1929
  hasMarkArea(options) {
1874
1930
  return options?.series?.[0]?.markArea?.data?.length > 0;
@@ -2154,7 +2210,7 @@ class ChartsComponent {
2154
2210
  values[new Date(this.config.dateFrom).toISOString()] = [{ min: null, max: null }];
2155
2211
  }
2156
2212
  else {
2157
- if (this.alerts) {
2213
+ if (this.alerts && !customTimeRange) {
2158
2214
  this.alerts.clear();
2159
2215
  }
2160
2216
  }
@@ -2263,6 +2319,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
2263
2319
  args: ['chart']
2264
2320
  }] } });
2265
2321
 
2322
+ class ChartHelpersService {
2323
+ /**
2324
+ * Cleans the widget configuration which will be sent to Gainsight by removing unnecessary properties.
2325
+ * @param config The widget configuration to clean.
2326
+ * @returns The cleaned widget configuration.
2327
+ */
2328
+ getConfigSummaryForGainsight(config) {
2329
+ return {
2330
+ datapointCount: config.datapoints?.length ?? 0,
2331
+ alarmsEventsCount: config.alarmsEventsConfigs?.length ?? 0,
2332
+ interval: config.interval,
2333
+ forceMergeDatapoints: config.forceMergeDatapoints,
2334
+ mergeMatchingDatapoints: config.mergeMatchingDatapoints,
2335
+ showSlider: config.showSlider,
2336
+ widgetInstanceGlobalTimeContext: config.widgetInstanceGlobalTimeContext,
2337
+ dateFrom: config.dateFrom,
2338
+ dateTo: config.dateTo
2339
+ };
2340
+ }
2341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ChartHelpersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2342
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ChartHelpersService }); }
2343
+ }
2344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ChartHelpersService, decorators: [{
2345
+ type: Injectable
2346
+ }] });
2347
+
2266
2348
  var DATE_SELECTION_EXTENDED;
2267
2349
  (function (DATE_SELECTION_EXTENDED) {
2268
2350
  DATE_SELECTION_EXTENDED["CONFIG"] = "config";
@@ -2272,6 +2354,19 @@ const REALTIME_TEXTS = {
2272
2354
  ACTIVE: gettext('Realtime active'),
2273
2355
  INACTIVE: gettext('Realtime inactive')
2274
2356
  };
2357
+ const PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH = {
2358
+ EVENTS: {
2359
+ DATA_EXPLORER_AND_GRAPH: 'data-explorer-and-graph'
2360
+ },
2361
+ COMPONENTS: {
2362
+ DATA_EXPLORER_DETAILS: 'data-explorer-details'
2363
+ },
2364
+ ACTIONS: {
2365
+ DATA_EXPLORER_CONFIG_INIT: 'data-explorer-config-init',
2366
+ DATA_EXPLORER_CONFIG_CHANGE: 'data-explorer-config-change',
2367
+ DATA_GRAPH_WIDGET_CONFIG: 'data-graph-widget-config'
2368
+ }
2369
+ };
2275
2370
  const SEVERITY_LABELS = {
2276
2371
  CRITICAL: gettext('Critical`alarm`'),
2277
2372
  MAJOR: gettext('Major`alarm`'),
@@ -2283,5 +2378,5 @@ const SEVERITY_LABELS = {
2283
2378
  * Generated bundle index. Do not edit.
2284
2379
  */
2285
2380
 
2286
- export { ChartAlarmsService, ChartEventsService, ChartsComponent, DATE_SELECTION_EXTENDED, ICONS_MAP, REALTIME_TEXTS, SEVERITY_LABELS };
2381
+ export { ChartAlarmsService, ChartEventsService, ChartHelpersService, ChartsComponent, DATE_SELECTION_EXTENDED, ICONS_MAP, PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH, REALTIME_TEXTS, SEVERITY_LABELS };
2287
2382
  //# sourceMappingURL=c8y-ngx-components-echart.mjs.map