@c8y/ngx-components 1024.19.5 → 1024.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/fesm2022/c8y-ngx-components-ai-agents-html.mjs +0 -9
  2. package/fesm2022/c8y-ngx-components-ai-agents-html.mjs.map +1 -1
  3. package/fesm2022/c8y-ngx-components-ai-agents-scada.mjs +0 -4
  4. package/fesm2022/c8y-ngx-components-ai-agents-scada.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-ai.mjs +10 -10
  6. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +13 -9
  8. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-asset-properties.mjs +4 -3
  10. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  11. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-CG8k844T.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-1WsTSnO_.mjs} +9 -5
  12. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-1WsTSnO_.mjs.map +1 -0
  13. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CTXM7Dkc.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-C3KZGqlc.mjs} +2 -2
  14. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CTXM7Dkc.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-C3KZGqlc.mjs.map} +1 -1
  15. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Da3QVvuf.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DOmwNU6m.mjs} +2 -2
  16. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Da3QVvuf.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DOmwNU6m.mjs.map} +1 -1
  17. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  18. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +30 -9
  19. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +2 -2
  21. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +12 -5
  23. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +41 -12
  25. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +10 -6
  27. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-echart.mjs +38 -25
  29. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +21 -9
  31. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +7 -4
  33. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +9 -5
  35. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -12
  37. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +4 -3
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +1 -1
  41. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +3 -3
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components.mjs +166 -29
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/locales/locales.pot +6 -0
  47. package/package.json +1 -1
  48. package/types/c8y-ngx-components-ai-agents-html.d.ts.map +1 -1
  49. package/types/c8y-ngx-components-ai-agents-scada.d.ts.map +1 -1
  50. package/types/c8y-ngx-components-ai.d.ts +1 -1
  51. package/types/c8y-ngx-components-ai.d.ts.map +1 -1
  52. package/types/c8y-ngx-components-alarm-event-selector.d.ts.map +1 -1
  53. package/types/c8y-ngx-components-asset-properties.d.ts +0 -1
  54. package/types/c8y-ngx-components-asset-properties.d.ts.map +1 -1
  55. package/types/c8y-ngx-components-context-dashboard.d.ts +5 -0
  56. package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
  57. package/types/c8y-ngx-components-datapoint-library-list.d.ts.map +1 -1
  58. package/types/c8y-ngx-components-datapoint-selector.d.ts +13 -3
  59. package/types/c8y-ngx-components-datapoint-selector.d.ts.map +1 -1
  60. package/types/c8y-ngx-components-datapoints-export-selector.d.ts +2 -0
  61. package/types/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -1
  62. package/types/c8y-ngx-components-echart.d.ts +1 -0
  63. package/types/c8y-ngx-components-echart.d.ts.map +1 -1
  64. package/types/c8y-ngx-components-widgets-implementations-datapoints-graph.d.ts +7 -0
  65. package/types/c8y-ngx-components-widgets-implementations-datapoints-graph.d.ts.map +1 -1
  66. package/types/c8y-ngx-components-widgets-implementations-datapoints-list.d.ts.map +1 -1
  67. package/types/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -1
  68. package/types/c8y-ngx-components-widgets-implementations-info-gauge.d.ts.map +1 -1
  69. package/types/c8y-ngx-components-widgets-implementations-kpi.d.ts.map +1 -1
  70. package/types/c8y-ngx-components-widgets-implementations-pie-chart.d.ts.map +1 -1
  71. package/types/c8y-ngx-components.d.ts +111 -5
  72. package/types/c8y-ngx-components.d.ts.map +1 -1
  73. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-CG8k844T.mjs.map +0 -1
@@ -5,7 +5,7 @@ import { isEqual, cloneDeep } from 'lodash-es';
5
5
  import { from, merge, interval, BehaviorSubject, of, lastValueFrom, defer, forkJoin } from 'rxjs';
6
6
  import { mergeMap, map, tap, throttleTime, buffer, switchMap } from 'rxjs/operators';
7
7
  import * as i1$1 from '@c8y/ngx-components';
8
- import { CommonModule, FormsModule, IconDirective, C8yTranslatePipe, WidgetTimeContextMediatorService, WidgetTimeContextDateRangeService, ThemeSwitcherService, DismissAlertStrategy, DynamicComponentAlert, CoreModule, MeasurementRealtimeService, AlarmRealtimeService, EventRealtimeService } from '@c8y/ngx-components';
8
+ import { translateDatapointUnit, translateDatapointLabel, CommonModule, FormsModule, IconDirective, C8yTranslatePipe, DatapointLabelPipe, WidgetTimeContextMediatorService, WidgetTimeContextDateRangeService, ThemeSwitcherService, DismissAlertStrategy, DynamicComponentAlert, CoreModule, MeasurementRealtimeService, AlarmRealtimeService, EventRealtimeService } from '@c8y/ngx-components';
9
9
  import chroma from 'chroma-js';
10
10
  import * as echarts from 'echarts';
11
11
  import * as i1 from '@ngx-translate/core';
@@ -17,7 +17,7 @@ import * as i4 from '@c8y/ngx-components/alarms';
17
17
  import { AlarmsModule, AlarmSeverityToIconPipe, AlarmSeverityToLabelPipe } from '@c8y/ngx-components/alarms';
18
18
  import { INTERVALS } from '@c8y/ngx-components/interval-picker';
19
19
  import * as i1$2 from '@angular/common';
20
- import { NgIf, NgForOf, CommonModule as CommonModule$1 } from '@angular/common';
20
+ import { CommonModule as CommonModule$1 } from '@angular/common';
21
21
  import * as i2$1 from 'ngx-echarts';
22
22
  import { NgxEchartsModule, NGX_ECHARTS_CONFIG } from 'ngx-echarts';
23
23
  import { TooltipModule } from 'ngx-bootstrap/tooltip';
@@ -120,7 +120,7 @@ class YAxisService {
120
120
  if (YAxisOptions.forceMergeDatapoints) {
121
121
  return {
122
122
  name: Array.from(datapointsWithValues)
123
- .map((dp, index) => `{${index}|${dp.unit}}`)
123
+ .map((dp, index) => `{${index}|${translateDatapointUnit(dp, this.translate)}}`)
124
124
  .join(' /'),
125
125
  nameLocation: 'middle',
126
126
  nameTruncate: {
@@ -295,9 +295,11 @@ class YAxisService {
295
295
  return '';
296
296
  }
297
297
  if (!options.mergeMatchingDatapoints || !isFirstOccurrence) {
298
- return `${dp.label} [${dp.unit}]`;
298
+ return `${translateDatapointLabel(dp, this.translate)} [${translateDatapointUnit(dp, this.translate)}]`;
299
299
  }
300
- return uniqueUnitDps.map((dp, index) => `{${index}|${dp.unit}}`).join(' / ');
300
+ return uniqueUnitDps
301
+ .map((dp, index) => `{${index}|${translateDatapointUnit(dp, this.translate)}}`)
302
+ .join(' / ');
301
303
  }
302
304
  getDecimalPlaces(num) {
303
305
  const numStr = num.toString();
@@ -1630,6 +1632,15 @@ class EchartsOptionsService {
1630
1632
  }
1631
1633
  }, []);
1632
1634
  }
1635
+ /**
1636
+ * Builds the display name of a datapoint. Passing the whole datapoint lets `translateDatapointLabel`
1637
+ * apply its `fragment → series` fallback, so an unlabeled datapoint still gets an informative
1638
+ * name. `DatapointsGraphWidgetViewComponent` derives the same string the same way, since
1639
+ * `toggleSeriesByName` matches series on exact string equality.
1640
+ */
1641
+ getTranslatedLabel(dp) {
1642
+ return translateDatapointLabel(dp, this.translate);
1643
+ }
1633
1644
  getSingleSeries(dp, renderType, idx, isMinMaxChart = false, displayOptions, seriesType = '', multiRenderTypeLabel) {
1634
1645
  const datapointId = dp.__target?.id + dp.fragment + dp.series;
1635
1646
  const isLine = dp.lineType === 'line' ||
@@ -1655,15 +1666,17 @@ class EchartsOptionsService {
1655
1666
  const displayType = isMinMaxChart && renderType === 'min' ? 'min — max' : effectiveLabel;
1656
1667
  return {
1657
1668
  datapointId,
1658
- datapointUnit: renderType !== 'count' ? dp.unit : '',
1669
+ datapointUnit: renderType !== 'count' ? translateDatapointUnit(dp, this.translate) : '',
1659
1670
  // 'id' property is needed as 'seriesId' in tooltip formatter
1660
1671
  id: isMinMaxChart
1661
1672
  ? `${datapointId}/${renderType}${seriesType}`
1662
1673
  : `${datapointId}${seriesType}${renderTypeSuffix}`,
1663
1674
  name: displayType
1664
- ? `[${displayType}] ${dp.label} (${dp.__target?.['name']})`
1665
- : `${dp.label} (${dp.__target?.['name']})`,
1666
- datapointLabel: displayType ? `[${displayType}] ${dp.label || ''}` : dp.label || '',
1675
+ ? `[${displayType}] ${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`
1676
+ : `${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`,
1677
+ datapointLabel: displayType
1678
+ ? `[${displayType}] ${this.getTranslatedLabel(dp)}`
1679
+ : this.getTranslatedLabel(dp),
1667
1680
  data,
1668
1681
  ...(displayOptions.forceMergeDatapoints ? {} : { yAxisIndex: idx }),
1669
1682
  ...this.chartTypesService.getSeriesOptions(dpForSeries, isMinMaxChart, renderType),
@@ -1714,7 +1727,7 @@ class EchartsOptionsService {
1714
1727
  datapointId,
1715
1728
  datapointUnit: '',
1716
1729
  id: `${datapointId}/band-max`,
1717
- name: `[band-max] ${dp.label} (${dp.__target?.['name']})`,
1730
+ name: `[band-max] ${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`,
1718
1731
  datapointLabel: '',
1719
1732
  typeOfSeries: 'fake',
1720
1733
  type: 'line',
@@ -1730,10 +1743,10 @@ class EchartsOptionsService {
1730
1743
  // a negative diff on a positive sum (or vice versa), leaving it at its raw value.
1731
1744
  const bandMinSeries = {
1732
1745
  datapointId,
1733
- datapointUnit: dp.unit || '',
1746
+ datapointUnit: translateDatapointUnit(dp, this.translate),
1734
1747
  id: `${datapointId}/band-area`,
1735
- name: `[band] ${dp.label} (${dp.__target?.['name']})`,
1736
- datapointLabel: `[band] ${dp.label || ''}`,
1748
+ name: `[band] ${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`,
1749
+ datapointLabel: `[band] ${this.getTranslatedLabel(dp)}`,
1737
1750
  typeOfSeries: 'fake',
1738
1751
  type: 'line',
1739
1752
  stack: stackId,
@@ -1748,10 +1761,10 @@ class EchartsOptionsService {
1748
1761
  // Visible max line — not stacked, drawn at actual maxVal.
1749
1762
  const maxSeries = {
1750
1763
  datapointId,
1751
- datapointUnit: dp.unit || '',
1764
+ datapointUnit: translateDatapointUnit(dp, this.translate),
1752
1765
  id: `${datapointId}/max`,
1753
- name: `[max] ${dp.label} (${dp.__target?.['name']})`,
1754
- datapointLabel: `[max] ${dp.label || ''}`,
1766
+ name: `[max] ${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`,
1767
+ datapointLabel: `[max] ${this.getTranslatedLabel(dp)}`,
1755
1768
  data: maxData,
1756
1769
  ...this.chartTypesService.getSeriesOptions({ ...dp, color: maxColor }, true, 'max'),
1757
1770
  ...yAxisIndex
@@ -1759,10 +1772,10 @@ class EchartsOptionsService {
1759
1772
  // Visible min line — not stacked, drawn at actual minVal. Tooltip shows combined [min — max].
1760
1773
  const minSeries = {
1761
1774
  datapointId,
1762
- datapointUnit: dp.unit || '',
1775
+ datapointUnit: translateDatapointUnit(dp, this.translate),
1763
1776
  id: `${datapointId}/min`,
1764
- name: `[min — max] ${dp.label} (${dp.__target?.['name']})`,
1765
- datapointLabel: `[min — max] ${dp.label || ''}`,
1777
+ name: `[min — max] ${this.getTranslatedLabel(dp)} (${dp.__target?.['name']})`,
1778
+ datapointLabel: `[min — max] ${this.getTranslatedLabel(dp)}`,
1766
1779
  tooltipColor: bandColor,
1767
1780
  data: minData,
1768
1781
  ...this.chartTypesService.getSeriesOptions({ ...dp, color: minColor }, true, 'min'),
@@ -2625,6 +2638,7 @@ class SelectAggregatedDatapointComponent {
2625
2638
  this.value = null;
2626
2639
  this.valueChange = new EventEmitter();
2627
2640
  this.chartHelpersService = inject(ChartHelpersService);
2641
+ this.translate = inject(TranslateService);
2628
2642
  this.selectedDatapointLabel = gettext('Select data point');
2629
2643
  this.selectedDatapointColor = '';
2630
2644
  }
@@ -2647,15 +2661,15 @@ class SelectAggregatedDatapointComponent {
2647
2661
  }
2648
2662
  const found = this.chartHelpersService.findMatchingDatapoint(this.activeDatapoints, this.value);
2649
2663
  if (this.value && !found) {
2650
- this.selectedDatapointLabel = this.value.label || '';
2664
+ this.selectedDatapointLabel = translateDatapointLabel(this.value, this.translate);
2651
2665
  this.selectedDatapointColor = this.value.color || '';
2652
2666
  return;
2653
2667
  }
2654
- this.selectedDatapointLabel = found?.label || '';
2668
+ this.selectedDatapointLabel = translateDatapointLabel(found, this.translate);
2655
2669
  this.selectedDatapointColor = found?.color || '';
2656
2670
  }
2657
2671
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SelectAggregatedDatapointComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2658
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.19", type: SelectAggregatedDatapointComponent, isStandalone: true, selector: "c8y-select-aggregated-datapoint", inputs: { activeDatapoints: "activeDatapoints", value: "value" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "d-contents" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n *ngIf=\"activeDatapoints?.length > 0\"\n>\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{'Select a data point to view its aggregated values in the time slider.' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li *ngFor=\"let datapoint of activeDatapoints\">\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"text-truncate\" style=\"max-width:220px!important\" title=\"{{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\">\n {{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\n </span>\n <span\n class=\"m-l-auto flex-no-shrink\"\n *ngIf=\"\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n \"\n >\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n </button>\n </li>\n </ul>\n</div>\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i1$4.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: TooltipModule }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
2672
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: SelectAggregatedDatapointComponent, isStandalone: true, selector: "c8y-select-aggregated-datapoint", inputs: { activeDatapoints: "activeDatapoints", value: "value" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "d-contents" }, usesOnChanges: true, ngImport: i0, template: "@if (activeDatapoints?.length > 0) {\n <div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n >\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n @for (datapoint of activeDatapoints; track datapoint) {\n <li>\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span\n class=\"text-truncate\"\n style=\"max-width: 220px !important\"\n title=\"{{ datapoint | datapointLabel }}\"\n >\n {{ datapoint | datapointLabel }}\n </span>\n @if (\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n ) {\n <span class=\"m-l-auto flex-no-shrink\">\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n }\n </button>\n </li>\n }\n </ul>\n </div>\n}\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i1$4.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: TooltipModule }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatapointLabelPipe, name: "datapointLabel" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
2659
2673
  }
2660
2674
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SelectAggregatedDatapointComponent, decorators: [{
2661
2675
  type: Component,
@@ -2669,9 +2683,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
2669
2683
  BsDropdownModule,
2670
2684
  A11yModule,
2671
2685
  IconDirective,
2672
- NgIf,
2673
- NgForOf
2674
- ], changeDetection: ChangeDetectionStrategy.Eager, template: "<div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n *ngIf=\"activeDatapoints?.length > 0\"\n>\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{'Select a data point to view its aggregated values in the time slider.' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li *ngFor=\"let datapoint of activeDatapoints\">\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"text-truncate\" style=\"max-width:220px!important\" title=\"{{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\">\n {{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\n </span>\n <span\n class=\"m-l-auto flex-no-shrink\"\n *ngIf=\"\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n \"\n >\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n </button>\n </li>\n </ul>\n</div>\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n" }]
2686
+ DatapointLabelPipe
2687
+ ], changeDetection: ChangeDetectionStrategy.Eager, template: "@if (activeDatapoints?.length > 0) {\n <div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n >\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n @for (datapoint of activeDatapoints; track datapoint) {\n <li>\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span\n class=\"text-truncate\"\n style=\"max-width: 220px !important\"\n title=\"{{ datapoint | datapointLabel }}\"\n >\n {{ datapoint | datapointLabel }}\n </span>\n @if (\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n ) {\n <span class=\"m-l-auto flex-no-shrink\">\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n }\n </button>\n </li>\n }\n </ul>\n </div>\n}\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n" }]
2675
2688
  }], propDecorators: { activeDatapoints: [{
2676
2689
  type: Input
2677
2690
  }], value: [{