{"version":3,"file":"c8y-ngx-components-widgets-implementations-datapoints-graph.mjs","sources":["../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.html","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.html","../../widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.ts"],"sourcesContent":["import {\n  Component,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  signal,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport {\n  CommonModule,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  DynamicComponentService,\n  FormsModule,\n  GainsightService,\n  OnBeforeSave,\n  WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport {\n  AlarmEventSelectorModule,\n  SelectedDatapoint\n} from '@c8y/ngx-components/alarm-event-selector';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport {\n  DatapointSelectorModalOptions,\n  DatapointSelectorModule\n} from '@c8y/ngx-components/datapoint-selector';\nimport {\n  CHART_VIEW_CONTEXT,\n  ChartAlarmsService,\n  ChartEventsService,\n  ChartHelpersService,\n  ChartsComponent,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  DatapointsGraphWidgetTimeProps,\n  LEGEND_DISPLAY_OPTIONS,\n  PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH\n} from '@c8y/ngx-components/echart';\nimport {\n  GlobalContextWidgetWrapperComponent,\n  WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Subject, takeUntil } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Component({\n  selector: 'c8y-datapoints-graph-widget-config',\n  host: { class: 'd-contents' },\n  templateUrl: './datapoints-graph-widget-config.component.html',\n  standalone: true,\n  imports: [\n    CommonModule,\n    CoreModule,\n    FormsModule,\n    TooltipModule,\n    PopoverModule,\n    ChartsComponent,\n    DatapointSelectorModule,\n    AlarmEventSelectorModule,\n    GlobalContextWidgetWrapperComponent\n  ],\n  providers: [\n    ChartEventsService,\n    ChartAlarmsService,\n    ChartHelpersService,\n    WidgetTimeContextDateRangeService\n  ]\n})\nexport class DatapointsGraphWidgetConfigComponent\n  implements OnInit, OnChanges, OnBeforeSave, OnDestroy\n{\n  private _config = signal<DatapointsGraphWidgetConfig>({} as DatapointsGraphWidgetConfig);\n  private isFirstConfigSet = true;\n\n  @Input() set config(value: DatapointsGraphWidgetConfig | undefined) {\n    if (!value) return;\n\n    if (this.isFirstConfigSet) {\n      this._config.set({ ...value });\n      this.isFirstConfigSet = false;\n    } else {\n      this._config.set({\n        ...this._config(),\n        dateFrom: value.dateFrom,\n        dateTo: value.dateTo,\n        interval: value.interval,\n        refreshInterval: value.refreshInterval,\n        isAutoRefreshEnabled: value.isAutoRefreshEnabled,\n        aggregation: value.aggregation,\n        realtime: value.realtime,\n        displayMode: value.displayMode,\n        refreshOption: value.refreshOption,\n        dateTimeContext: value.dateTimeContext,\n        datapoints: value.datapoints,\n        alarmsEventsConfigs: value.alarmsEventsConfigs,\n        showAdvancedChartOptions: value.showAdvancedChartOptions\n      });\n    }\n  }\n\n  get config(): DatapointsGraphWidgetConfig | undefined {\n    return this._config();\n  }\n\n  @ViewChild('dataPointsGraphPreview')\n  set previewMapSet(template: TemplateRef<any>) {\n    if (template) {\n      this.widgetConfigService.setPreview(template);\n      return;\n    }\n    this.widgetConfigService.setPreview(null);\n  }\n\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly form = inject(NgForm);\n  private readonly widgetConfigService = inject(WidgetConfigService);\n  private readonly chartHelpersService = inject(ChartHelpersService);\n  private readonly gainsightService = inject(GainsightService);\n\n  alerts: DynamicComponentAlertAggregator | undefined;\n  formGroup: ReturnType<DatapointsGraphWidgetConfigComponent['initForm']>;\n  datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n  activeDatapointsExists = false;\n  alarmsOrEventsHaveNoMatchingDps = false;\n  widgetControls: WidgetControls;\n  chartViewContext: CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT.WIDGET_CONFIG;\n  legendDisplayOptions = LEGEND_DISPLAY_OPTIONS;\n  private destroy$ = new Subject<void>();\n  private isInitialized = false;\n\n  constructor(private dynamicComponentService: DynamicComponentService) {\n    this.formGroup = this.initForm();\n  }\n\n  async ngOnInit() {\n    this.widgetControls =\n      (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n        ?.widgetControls || {};\n\n    const currentConfig = this._config();\n\n    this.form.form.addControl('config', this.formGroup);\n\n    this.formGroup.patchValue({ ...currentConfig }, { emitEvent: false });\n    this.isInitialized = true;\n\n    this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(formValue => {\n      this._config.set({\n        ...this._config(),\n        dataPointLegendDisplay: formValue.dataPointLegendDisplay,\n        displayMarkedLine: formValue.displayMarkedLine,\n        displayMarkedPoint: formValue.displayMarkedPoint,\n        mergeMatchingDatapoints: formValue.mergeMatchingDatapoints,\n        forceMergeDatapoints: formValue.forceMergeDatapoints,\n        setYaxisStartToZero: formValue.setYaxisStartToZero,\n        smoothLines: formValue.smoothLines,\n        showLabelAndUnit: formValue.showLabelAndUnit,\n        showSlider: formValue.showSlider,\n        yAxisSplitLines: formValue.yAxisSplitLines,\n        xAxisSplitLines: formValue.xAxisSplitLines,\n        numberOfDecimalPlaces: formValue.numberOfDecimalPlaces,\n        aggregatedDatapoint: formValue.aggregatedDatapoint\n      });\n\n      this.setActiveDatapointsExists();\n      this.checkForMatchingDatapoints();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!changes.config || changes.config.isFirstChange() || !this.isInitialized) return;\n\n    this.setActiveDatapointsExists();\n    this.checkForMatchingDatapoints();\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  onBeforeSave(\n    config?: DatapointsGraphWidgetConfig\n  ): boolean | Promise<boolean> | Observable<boolean> {\n    if (!this.formGroup.valid || !config) return false;\n\n    const snapshot = { ...this._config() };\n\n    for (const key in snapshot) {\n      if (snapshot.hasOwnProperty(key)) {\n        try {\n          config[key] = snapshot[key];\n        } catch (e) {\n          // do nothing\n        }\n      }\n    }\n\n    this.widgetConfigService.updateConfig(snapshot, true);\n\n    const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n    this.gainsightService.triggerEvent(\n      PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.EVENTS.DATA_EXPLORER_AND_GRAPH,\n      {\n        component: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.COMPONENTS.DATA_EXPLORER_DETAILS,\n        action: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.ACTIONS.DATA_GRAPH_WIDGET_CONFIG,\n        ...configSummaryGS\n      }\n    );\n\n    return true;\n  }\n\n  updateTimeRangeOnRealtime(\n    timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n  ): void {\n    const current = this._config();\n    this._config.set({\n      ...current,\n      ...timeRange,\n      interval: current.interval || 'hours'\n    });\n  }\n\n  updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n    const dateTimeContext = {\n      dateFrom: new Date(timeProps.dateFrom).toISOString(),\n      dateTo: new Date(timeProps.dateTo).toISOString(),\n      interval: timeProps.interval\n    };\n    this._config.set({\n      ...this._config(),\n      dateTimeContext\n    });\n  }\n\n  updateAggregatedSliderDatapoint(selectedDatapoint: SelectedDatapoint | null): void {\n    const aggregatedDatapoint = this.chartHelpersService.findMatchingDatapoint(\n      this._config().datapoints || [],\n      selectedDatapoint\n    ) as DatapointsGraphKPIDetails | undefined;\n\n    this._config.set({\n      ...this._config(),\n      aggregatedDatapoint\n    });\n  }\n\n  private checkForMatchingDatapoints(): void {\n    const config = this._config();\n    const alarmsEventsConfigs = config.alarmsEventsConfigs || [];\n    const datapoints = config.datapoints || [];\n\n    const allMatch = alarmsEventsConfigs.every(ae =>\n      datapoints.some(dp => dp.__target?.id === ae.__target?.id)\n    );\n\n    queueMicrotask(() => {\n      this.alarmsOrEventsHaveNoMatchingDps = !allMatch;\n    });\n  }\n\n  private initForm() {\n    const initialState = this._config();\n\n    const form = this.formBuilder.group({\n      dataPointLegendDisplay: ['auto', []],\n      displayMarkedLine: [true, []],\n      displayMarkedPoint: [true, []],\n      mergeMatchingDatapoints: [true, []],\n      forceMergeDatapoints: [false, []],\n      setYaxisStartToZero: [false, []],\n      smoothLines: [false, []],\n      showLabelAndUnit: [true, []],\n      displayAggregationSelection: [false, []],\n      canDecoupleGlobalTimeContext: [false, []],\n      showSlider: [true, [Validators.required]],\n      yAxisSplitLines: [false, [Validators.required]],\n      xAxisSplitLines: [false, [Validators.required]],\n      numberOfDecimalPlaces: [2, [Validators.required, Validators.min(0), Validators.max(10)]],\n      aggregatedDatapoint: [initialState?.aggregatedDatapoint || null]\n    });\n    return form;\n  }\n\n  private setActiveDatapointsExists() {\n    const datapoints = this._config().datapoints || [];\n    this.activeDatapointsExists = datapoints.filter(dp => dp.__active).length > 0;\n  }\n}\n","<form [formGroup]=\"formGroup\">\n  <div class=\"form-group form-group-sm\">\n    <label\n      [title]=\"'Number of decimal places' | translate\"\n      translate\n    >\n      Number of decimal places\n    </label>\n    <input\n      class=\"form-control\"\n      name=\"numberOfDecimalPlaces\"\n      type=\"number\"\n      formControlName=\"numberOfDecimalPlaces\"\n      [placeholder]=\"'e.g. {{ example }}' | translate: { example: 1 }\"\n    />\n    <c8y-messages\n      [show]=\"\n        formGroup.controls?.numberOfDecimalPlaces?.touched &&\n        formGroup?.controls?.numberOfDecimalPlaces?.errors\n      \"\n    ></c8y-messages>\n  </div>\n  <c8y-form-group class=\"form-group-sm\">\n    <label>\n      {{ 'Data point legend display' | translate }}\n    </label>\n    <div\n      class=\"c8y-select-wrapper\"\n      [formGroup]=\"formGroup\"\n    >\n      <select\n        class=\"form-control\"\n        [title]=\"'Data point legend display' | translate\"\n        id=\"dataPointLegendDisplay\"\n        formControlName=\"dataPointLegendDisplay\"\n      >\n        @for (option of legendDisplayOptions; track option) {\n          <option [ngValue]=\"option.value\">\n            {{ option.label | translate }}\n          </option>\n        }\n      </select>\n    </div>\n  </c8y-form-group>\n</form>\n\n<form\n  class=\"d-block p-t-8\"\n  [formGroup]=\"formGroup\"\n>\n  <label>{{ 'Display options' | translate }}</label>\n  <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n    <legend>{{ 'Axis' | translate }}</legend>\n    <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Y-axis helper lines' | translate\"\n      >\n        <input\n          name=\"yAxisSplitLines\"\n          type=\"checkbox\"\n          formControlName=\"yAxisSplitLines\"\n        />\n        <span></span>\n        <span translate>Y-axis helper lines</span>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'X-axis helper lines' | translate\"\n      >\n        <input\n          name=\"xAxisSplitLines\"\n          type=\"checkbox\"\n          formControlName=\"xAxisSplitLines\"\n        />\n        <span></span>\n        <span translate>X-axis helper lines</span>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Merge matching data points into single axis' | translate\"\n      >\n        <input\n          name=\"mergeMatchingDatapoints\"\n          type=\"checkbox\"\n          formControlName=\"mergeMatchingDatapoints\"\n        />\n        <span></span>\n        <span translate>Merge matching data points into single axis</span>\n        <button\n          class=\"btn-help\"\n          [attr.aria-label]=\"\n            'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n              | translate\n          \"\n          [popover]=\"\n            'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n              | translate\n          \"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          (click)=\"$event.stopPropagation()\"\n          [adaptivePosition]=\"false\"\n        ></button>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Force merge all data points into single axis' | translate\"\n      >\n        <input\n          name=\"forceMergeDatapoints\"\n          type=\"checkbox\"\n          formControlName=\"forceMergeDatapoints\"\n        />\n        <span></span>\n        <span translate>Force merge all datapoints into a single axis</span>\n        <button\n          class=\"btn-help\"\n          [attr.aria-label]=\"\n            'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n              | translate\n          \"\n          [popover]=\"\n            'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n              | translate\n          \"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          (click)=\"$event.stopPropagation()\"\n          [adaptivePosition]=\"false\"\n        ></button>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Set Y-axis start to 0' | translate\"\n      >\n        <input\n          name=\"setYaxisStartToZero\"\n          type=\"checkbox\"\n          formControlName=\"setYaxisStartToZero\"\n        />\n        <span></span>\n        <span translate>Set Y-axis start to 0</span>\n        <button\n          class=\"btn-help\"\n          [attr.aria-label]=\"\n            'Sets the Y-axis minimum to 0 for all data points with positive values. If any data point includes negative values, the axis may still extend below 0. Explicitly configured minimum and maximum values take precedence over this option.'\n              | translate\n          \"\n          [popover]=\"\n            'Sets the Y-axis minimum to 0 for all data points with positive values. If any data point includes negative values, the axis may still extend below 0. Explicitly configured minimum and maximum values take precedence over this option.'\n              | translate\n          \"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          (click)=\"$event.stopPropagation()\"\n          [adaptivePosition]=\"false\"\n        ></button>\n      </label>\n    </c8y-form-group>\n  </fieldset>\n  <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n    <legend>{{ 'Alarms & events' | translate }}</legend>\n    <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Show vertical line on every occurrence' | translate\"\n      >\n        <input\n          name=\"displayMarkedLine\"\n          type=\"checkbox\"\n          formControlName=\"displayMarkedLine\"\n        />\n        <span></span>\n        <span translate>Show vertical line on every occurrence</span>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Show icon when triggered' | translate\"\n      >\n        <input\n          name=\"displayMarkedPoint\"\n          type=\"checkbox\"\n          formControlName=\"displayMarkedPoint\"\n        />\n        <span></span>\n        <span translate>Show icon when triggered</span>\n        @if (alarmsOrEventsHaveNoMatchingDps) {\n          <button\n            class=\"btn-clean m-l-8\"\n            [attr.aria-label]=\"\n              'Some alarms or events have no matching data points. No icons will be shown for them.'\n                | translate\n            \"\n            [tooltip]=\"\n              'Some alarms or events have no matching data points. No icons will be shown for them.'\n                | translate\n            \"\n            container=\"body\"\n            type=\"button\"\n            (click)=\"$event.stopPropagation()\"\n            [adaptivePosition]=\"false\"\n          >\n            <i\n              class=\"text-warning\"\n              c8yIcon=\"exclamation-triangle\"\n            ></i>\n          </button>\n        }\n      </label>\n    </c8y-form-group>\n  </fieldset>\n  <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n    <legend>{{ 'Chart' | translate }}</legend>\n    <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Show labels and units' | translate\"\n      >\n        <input\n          name=\"showLabelAndUnit\"\n          type=\"checkbox\"\n          formControlName=\"showLabelAndUnit\"\n        />\n        <span></span>\n        <span translate>Display labels and units on Y-axis</span>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Show slider' | translate\"\n      >\n        <input\n          name=\"showSlider\"\n          type=\"checkbox\"\n          formControlName=\"showSlider\"\n        />\n        <span></span>\n        <span translate>Show slider</span>\n      </label>\n      <label\n        class=\"c8y-checkbox\"\n        [title]=\"'Show smooth lines' | translate\"\n      >\n        <input\n          name=\"smoothLines\"\n          type=\"checkbox\"\n          formControlName=\"smoothLines\"\n        />\n        <span></span>\n        <span translate>Show smooth lines</span>\n      </label>\n    </c8y-form-group>\n  </fieldset>\n</form>\n\n<ng-template #dataPointsGraphPreview>\n  @if (widgetControls) {\n    <c8y-global-context-widget-wrapper\n      [config]=\"config\"\n      [displayMode]=\"'preview'\"\n      [widgetControls]=\"widgetControls\"\n    ></c8y-global-context-widget-wrapper>\n  }\n\n  @if (activeDatapointsExists) {\n    <c8y-charts\n      class=\"d-block p-relative\"\n      [config]=\"config\"\n      [alerts]=\"alerts\"\n      [chartViewContext]=\"chartViewContext\"\n      (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n      (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n      (updateAggregatedSliderDatapoint)=\"updateAggregatedSliderDatapoint($event)\"\n    ></c8y-charts>\n  }\n\n  @if (!activeDatapointsExists) {\n    <c8y-ui-empty-state\n      class=\"d-block m-t-24\"\n      [icon]=\"'search'\"\n      [title]=\"'No data points selected' | translate\"\n      [subtitle]=\"'Select data point to render content' | translate\"\n      data-cy=\"datapoints-graph-list--empty-state-no-data-point-selected\"\n    >\n      <p c8y-guide-docs>\n        <small\n          translate\n          ngNonBindable\n        >\n          Find out more in the\n          <a c8y-guide-href=\"/docs/cockpit/widgets-collection/#data-point-graph\">\n            user documentation</a\n          >.\n        </small>\n      </p>\n    </c8y-ui-empty-state>\n  }\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, Optional, ViewChild } from '@angular/core';\nimport { ALARM_STATUS_LABELS, AlarmStatusType, SeveritySettings } from '@c8y/client';\nimport {\n  AGGREGATION_ICONS,\n  AGGREGATION_TEXTS,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  DynamicComponentService,\n  SelectableItem,\n  SelectComponent,\n  SelectItemDirective,\n  SelectedItemsDirective,\n  WidgetTimeContextDateRangeService,\n  WidgetActionWrapperComponent\n} from '@c8y/ngx-components';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n  DatapointsExportSelectorComponent,\n  ExportConfig\n} from '@c8y/ngx-components/datapoints-export-selector';\nimport {\n  AlarmDetailsExtended,\n  AlarmOrEventExtended,\n  CHART_VIEW_CONTEXT,\n  ChartAlarmsService,\n  ChartEventsService,\n  ChartsComponent,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  DatapointsGraphWidgetTimeProps,\n  EventDetailsExtended,\n  SelectableDatapoint,\n  SeverityType\n} from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GLOBAL_CONTEXT_EVENTS,\n  GLOBAL_CONTEXT_SOURCE,\n  GlobalContextEvent,\n  GlobalContextWidgetWrapperComponent,\n  REFRESH_OPTION,\n  WidgetConfigMigrationService,\n  WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Component({\n  selector: 'c8y-datapoints-graph-widget-view',\n  templateUrl: './datapoints-graph-widget-view.component.html',\n  standalone: true,\n  imports: [\n    A11yModule,\n    CommonModule,\n    ChartsComponent,\n    CoreModule,\n    TooltipModule,\n    BsDropdownModule,\n    PopoverModule,\n    AlarmsModule,\n    GlobalContextWidgetWrapperComponent,\n    DatapointsExportSelectorComponent,\n    SelectComponent,\n    SelectItemDirective,\n    SelectedItemsDirective,\n    WidgetActionWrapperComponent\n  ],\n  providers: [ChartEventsService, ChartAlarmsService, WidgetTimeContextDateRangeService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnDestroy {\n  events: EventDetailsExtended[] = [];\n  alarms: AlarmDetailsExtended[] = [];\n  exportConfig: ExportConfig;\n  AGGREGATION_ICONS = AGGREGATION_ICONS;\n  AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n  alerts: DynamicComponentAlertAggregator | undefined;\n  datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n  hasAtLeastOneDatapointActive = true;\n  hasAtLeastOneAlarmActive = true;\n  isMarkedAreaEnabled = false;\n  loadedDatapoints: DatapointsGraphKPIDetails[] = [];\n  loadedAlarmsOrEvents: AlarmOrEventExtended[] = [];\n  isLoading$ = new BehaviorSubject<boolean>(false);\n  isSliderBeingDragged$ = new BehaviorSubject<boolean>(false);\n  /*\n   * @description: The type of alarm that has marked area enabled.\n   */\n  enabledMarkedAreaAlarmType: string | undefined;\n  chartViewContext = CHART_VIEW_CONTEXT.WIDGET_VIEW;\n\n  widgetControls: WidgetControls;\n  /** Combined number of datapoints, alarms, and events */\n  totalLegendItems = 0;\n  /** Selectable items for the datapoints, alarms, events dropdown */\n  selectableItems: SelectableItem<SelectableDatapoint>[] = [];\n  /** Selected items from the dropdown */\n  selectedItems: SelectableItem<SelectableDatapoint>[] = [];\n\n  @Input() set config(value: DatapointsGraphWidgetConfig) {\n    // Special case: sync the config with migrated values.\n    // This is needed to reflect migrated states in the widget config.\n    const migratedConfig = this.widgetConfigMigrationService.migrateWidgetConfig(value);\n    const newConfig = merge(value, migratedConfig);\n    this.displayConfig = cloneDeep(newConfig);\n  }\n  get config(): never {\n    throw Error(\n      '\"config\" property should not be referenced in view component to avoid mutating data.'\n    );\n  }\n  @ViewChild(GlobalContextWidgetWrapperComponent) wrapper?: GlobalContextWidgetWrapperComponent;\n  @ViewChild(ChartsComponent) chartComponent!: ChartsComponent;\n  displayConfig: DatapointsGraphWidgetConfig | undefined;\n  legendHelp = this.translate.instant(\n    gettext(`<ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n    <li>\n      <b>Visibility:</b>\n      use visibility icon to toggle datapoint, alarm or event visibility on chart. At least one datapoint is required to display chart.\n    </li>\n    <li>\n      <b>Alarm details</b>\n      Click alarm legend item to highlight area between alarm raised timestamp and alarm cleared timestamp.\n      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.\n    </li>\n  </ul>`)\n  );\n  readonly disableZoomInLabel = gettext('Disable zoom in');\n  readonly enableZoomInLabel = gettext(\n    'Click to enable zoom, then click and drag on the desired area in the chart.'\n  );\n  readonly hideDatapointLabel = gettext('Hide data point');\n  readonly showDatapointLabel = gettext('Show data point');\n  private destroy$ = new Subject<void>();\n  private readonly widgetInstanceId = crypto.randomUUID();\n\n  constructor(\n    private translate: TranslateService,\n    @Optional() private dashboardContextComponent: ContextDashboardComponent,\n    private dynamicComponentService: DynamicComponentService,\n    private widgetConfigMigrationService: WidgetConfigMigrationService,\n    private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  async ngOnInit() {\n    this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n    this.displayConfig.isRealtimeEnabled = this.displayConfig.realtime;\n\n    this.totalLegendItems =\n      (this.displayConfig?.datapoints?.length || 0) +\n      (this.displayConfig?.alarmsEventsConfigs?.length || 0);\n\n    this.loadedDatapoints = (this.displayConfig?.datapoints || []).filter(dp => dp.__active);\n    this.loadedAlarmsOrEvents = (this.displayConfig?.alarmsEventsConfigs || []).filter(\n      aOrE => aOrE.__active && !aOrE.__hidden\n    );\n    if (this.totalLegendItems > 5 || this.displayConfig?.dataPointLegendDisplay === 'dropdown') {\n      this.selectableItems = this.buildSelectableItems();\n      // Initialize selectedItems with the currently active items\n      this.selectedItems = this.selectableItems.filter(item => {\n        if (item.value.type === 'DATAPOINT') {\n          return !!item.value.original.__active;\n        } else {\n          return item.value.original.__active && !item.value.original.__hidden;\n        }\n      });\n    }\n\n    this.widgetControls =\n      (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n        ?.widgetControls || {};\n  }\n\n  onGlobalContextChange(event: GlobalContextEvent) {\n    this.invalidateHiddenItemsCache();\n    const { context, diff } = event;\n    const { dateTimeContext } = context;\n    const { dateFrom, dateTo, interval } = dateTimeContext;\n\n    const isRealtimeEnabled =\n      context.refreshOption === REFRESH_OPTION.LIVE &&\n      context.isAutoRefreshEnabled &&\n      context.refreshInterval === 5000;\n\n    if (this.displayConfig.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      const realtimeToggled = this.displayConfig?.realtime !== isRealtimeEnabled;\n\n      if (realtimeToggled) {\n        // When toggling realtime, we must:\n        // 1. Spread ALL context properties (isAutoRefreshEnabled, refreshOption, etc.)\n        //    to keep the GC wrapper in sync. Otherwise stale isAutoRefreshEnabled on\n        //    displayConfig causes the wrapper's handleConfigChange() to silently\n        //    re-enable auto-refresh via setAutoRefreshEnabled() on the inline component.\n        // 2. Use chart's actual visible range from dataZoom to avoid date jump.\n        //    GC's dateTimeContext dates don't match the chart's visible range — the chart\n        //    slides forward every 1s via ChartRealtimeService independently of GC.\n        // 3. Return early to skip updateInitialTimeRange(null) which resets cached time range.\n        const option = this.chartComponent?.echartsInstance?.getOption();\n        const dataZoom = (option?.dataZoom as any[])?.[0];\n        const chartDateFrom = dataZoom?.startValue\n          ? new Date(dataZoom.startValue).toISOString()\n          : dateFrom;\n        const chartDateTo = dataZoom?.endValue ? new Date(dataZoom.endValue).toISOString() : dateTo;\n\n        this.displayConfig = {\n          ...this.displayConfig,\n          ...structuredClone(context),\n          dateFrom: new Date(chartDateFrom),\n          dateTo: new Date(chartDateTo),\n          dateTimeContext: {\n            ...context.dateTimeContext,\n            dateFrom: chartDateFrom,\n            dateTo: chartDateTo\n          },\n          realtime: isRealtimeEnabled\n        };\n        this.updateExportConfig();\n        return;\n      }\n\n      this.displayConfig = {\n        ...this.displayConfig,\n        ...structuredClone(context),\n        dateFrom: new Date(dateFrom),\n        dateTo: new Date(dateTo),\n        interval,\n        realtime: isRealtimeEnabled\n      };\n      this.updateExportConfig();\n\n      if (this.isSliderBeingDragged$.value === true) {\n        this.isSliderBeingDragged$.next(false);\n        return;\n      }\n\n      this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n      return;\n    }\n\n    if (this.displayConfig?.realtime !== isRealtimeEnabled) {\n      // Sync dates to avoid jumps in the chart\n      this.displayConfig = merge(this.displayConfig, {\n        dateTimeContext: structuredClone(context),\n        dateFrom: new Date(dateFrom),\n        dateTo: new Date(dateTo),\n        interval\n      });\n      this.updateExportConfig();\n\n      this.displayConfig = {\n        ...this.displayConfig,\n        realtime: isRealtimeEnabled\n      };\n    }\n\n    // Realtime is a special case, we need to block \"automatic\" emissions from the global context\n    // GC in auto mode emits every 5 seconds. We only want to react to user changes.\n    if (\n      isRealtimeEnabled &&\n      diff?.dateTimeContext &&\n      Object.keys(diff).length === 1 &&\n      Object.keys(diff.dateTimeContext).length === 2\n    ) {\n      // Sync dates to avoid jumps in the chart\n      this.displayConfig = merge(this.displayConfig, {\n        dateTimeContext: structuredClone(context),\n        dateFrom: new Date(dateFrom),\n        dateTo: new Date(dateTo),\n        interval\n      });\n      this.updateExportConfig();\n      return;\n    }\n\n    this.displayConfig = {\n      ...this.displayConfig,\n      ...structuredClone(context),\n      dateFrom: new Date(dateFrom),\n      dateTo: new Date(dateTo),\n      interval\n    };\n    this.updateExportConfig();\n\n    if (\n      context.source === GLOBAL_CONTEXT_SOURCE.DASHBOARD &&\n      this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n    ) {\n      this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n    const chartOptions = this.chartComponent?.echartsInstance?.getOption();\n    const isEndZoomChanged = chartOptions?.dataZoom[0]?.end !== 100;\n\n    // Check if widget is linked to global context\n    const linkStatus = this.wrapper?.globalContextInlineComponent?.controlLinkStatus();\n    const isLinked = !linkStatus || Object.values(linkStatus).every(v => v !== false);\n\n    if (this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD && isLinked) {\n      const dateTimeContext = isEndZoomChanged\n        ? {\n            dateFrom: new Date(timeProps.dateFrom).toISOString(),\n            dateTo: new Date(timeProps.dateTo).toISOString(),\n            interval: timeProps.interval\n          }\n        : { dateFrom: new Date(timeProps.dateFrom).toISOString(), interval: timeProps.interval };\n\n      window.dispatchEvent(\n        new CustomEvent(GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY, {\n          detail: {\n            type: GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY,\n            payload: {\n              dateTimeContext,\n              isAutoRefreshEnabled: false,\n              aggregation: this.displayConfig.aggregation,\n              source: GLOBAL_CONTEXT_SOURCE.WIDGET,\n              eventSourceId: this.widgetInstanceId\n            },\n            timestamp: Date.now()\n          }\n        })\n      );\n    } else {\n      this.isSliderBeingDragged$.next(true);\n      const dateTimeContext = {\n        dateFrom: new Date(timeProps.dateFrom),\n        dateTo: new Date(timeProps.dateTo),\n        interval: timeProps.interval\n      };\n\n      // Update displayConfig for internal state\n      this.displayConfig = {\n        ...this.displayConfig,\n        dateTimeContext: structuredClone(dateTimeContext) as any,\n        dateFrom: new Date(timeProps.dateFrom),\n        dateTo: new Date(timeProps.dateTo),\n        interval: timeProps.interval,\n        realtime: false,\n        isAutoRefreshEnabled: false\n      };\n\n      // Trigger wrapper to update its internal state\n      this.wrapper.pauseAutoRefresh();\n      this.wrapper.updateDateTimeContext(dateTimeContext);\n    }\n  }\n\n  buildSelectableItems(): SelectableItem<SelectableDatapoint>[] {\n    const dpItems: SelectableItem<SelectableDatapoint>[] = (\n      this.displayConfig.datapoints || []\n    ).map(dp => {\n      return {\n        label: dp.label,\n        value: {\n          type: 'DATAPOINT',\n          original: dp\n        }\n      };\n    });\n\n    const alarmItems: SelectableItem<SelectableDatapoint>[] = (\n      this.displayConfig.alarmsEventsConfigs || []\n    )\n      .filter(ae => ae.timelineType === 'ALARM')\n      .map(alarm => {\n        return {\n          label: alarm.label,\n          value: {\n            type: 'ALARM',\n            original: alarm\n          }\n        };\n      });\n\n    const eventItems: SelectableItem<SelectableDatapoint>[] = (\n      this.displayConfig.alarmsEventsConfigs || []\n    )\n      .filter(ae => ae.timelineType === 'EVENT')\n      .map(event => {\n        return {\n          label: event.label,\n          value: {\n            type: 'EVENT',\n            original: event\n          }\n        };\n      });\n\n    return [...dpItems, ...alarmItems, ...eventItems];\n  }\n\n  onItemSelected(item: SelectableItem<SelectableDatapoint>): void {\n    if (item.value.type === 'DATAPOINT') {\n      this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n    } else {\n      this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n    }\n  }\n\n  onItemDeselected(item: SelectableItem<SelectableDatapoint>): void {\n    if (item.value.type === 'DATAPOINT') {\n      this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n    } else {\n      this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n    }\n  }\n\n  toggleChart(datapoint: DatapointsGraphKPIDetails): void {\n    if (\n      this.displayConfig?.datapoints?.filter(dp => dp.__active).length === 1 &&\n      datapoint.__active\n    ) {\n      // at least 1 datapoint should be active\n      this.hasAtLeastOneDatapointActive = false;\n      this.updateSelectedItems();\n      return;\n    }\n    datapoint.__active = !datapoint.__active;\n    this.hasAtLeastOneDatapointActive = true;\n\n    this.updateSelectedItems();\n\n    const getDatapointId = (dp: DatapointsGraphKPIDetails) =>\n      `${dp.__target?.id}${dp.fragment}${dp.series}`;\n    const isLoaded = this.loadedDatapoints.find(\n      dp => getDatapointId(dp) === getDatapointId(datapoint)\n    );\n\n    if (datapoint.__active && !isLoaded) {\n      // Datapoint being shown but not loaded (or data is stale) - trigger full reload\n      this.loadedDatapoints.push(datapoint);\n      this.displayConfig = { ...this.displayConfig };\n    } else {\n      // Datapoint already loaded with fresh data OR being hidden - just toggle visibility in echarts\n      this.chartComponent.toggleDatapointSeriesVisibility(datapoint);\n    }\n  }\n\n  handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n    const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n    const dpMatch = this.displayConfig?.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n    if (!dpMatch) {\n      return;\n    }\n    this.datapointsOutOfSync.set(dpMatch, true);\n  }\n\n  toggleMarkedArea(alarm: AlarmDetailsExtended): void {\n    this.enabledMarkedAreaAlarmType = alarm.filters.type;\n    const params = {\n      data: {\n        itemType: alarm.filters.type\n      }\n    };\n    this.chartComponent.onChartClick(params);\n  }\n\n  toggleAlarmEventType(alarmOrEvent: AlarmOrEventExtended): void {\n    const type = alarmOrEvent.filters.type;\n    const deviceId = alarmOrEvent.__target?.id;\n    const newHiddenState = !alarmOrEvent.__hidden;\n    const isBeingShown = !newHiddenState;\n\n    // Match by both type AND device to distinguish alarms from different devices\n    const isSameAlarmConfig = (ae: AlarmOrEventExtended) =>\n      ae.filters.type === type && ae.__target?.id === deviceId;\n\n    // Update __hidden in all locations\n    alarmOrEvent.__hidden = newHiddenState;\n    this.displayConfig.alarmsEventsConfigs?.forEach(ae => {\n      if (isSameAlarmConfig(ae)) {\n        ae.__hidden = newHiddenState;\n      }\n    });\n    this.alarms.forEach(alarm => {\n      if (isSameAlarmConfig(alarm)) {\n        alarm.__hidden = newHiddenState;\n      }\n    });\n    this.events.forEach(event => {\n      if (isSameAlarmConfig(event)) {\n        event.__hidden = newHiddenState;\n      }\n    });\n\n    this.updateSelectedItems();\n\n    const isLoaded = this.loadedAlarmsOrEvents.find(aOrE => isSameAlarmConfig(aOrE));\n\n    if (isBeingShown && !isLoaded) {\n      // Showing but not loaded - trigger pipeline to fetch data\n      this.loadedAlarmsOrEvents.push(alarmOrEvent);\n      this.displayConfig = { ...this.displayConfig };\n    } else {\n      // Hiding OR showing already-loaded - just toggle visibility in echarts\n      this.chartComponent.toggleAlarmEventSeriesVisibility(alarmOrEvent);\n    }\n  }\n\n  updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n    this.alarms = alarmsEventsConfigs.filter(\n      alarm => alarm.timelineType === 'ALARM'\n    ) as AlarmDetailsExtended[];\n    this.events = alarmsEventsConfigs.filter(\n      event => event.timelineType === 'EVENT'\n    ) as EventDetailsExtended[];\n    if (this.alarms.length === 0 || !this.alarms.find(alarm => alarm.__active)) {\n      this.hasAtLeastOneAlarmActive = false;\n    }\n  }\n\n  filterSeverity(eventTarget: any): void {\n    this.alarms = this.alarms.map(alarm => {\n      if (!alarm.__severity) {\n        alarm.__severity = [];\n      }\n      alarm.__severity = Object.keys(eventTarget.severityOptions).filter(\n        (severity): severity is keyof SeveritySettings =>\n          eventTarget.severityOptions[severity as keyof SeveritySettings]\n      ) as SeverityType[];\n\n      if (!alarm.__status) {\n        alarm.__status = [];\n      }\n      const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n      const filteredStatuses = eventTarget.showCleared\n        ? statuses\n        : statuses.filter(status => status !== 'CLEARED');\n      alarm.__status = filteredStatuses;\n      return alarm;\n    });\n    this.displayConfig = { ...this.displayConfig };\n  }\n\n  isLastActiveDatapoint(selectedItem: SelectableItem<SelectableDatapoint>): boolean {\n    if (!selectedItem) {\n      return false;\n    }\n\n    if (!selectedItem?.value || selectedItem.value.type !== 'DATAPOINT') {\n      return false;\n    }\n    // Check if this is the last active datapoint\n    return !this.hasAtLeastOneDatapointActive && selectedItem.value.original.__active;\n  }\n\n  private updateExportConfig(): void {\n    const datapointDetails = this.displayConfig.datapoints\n      .filter(({ __active }) => __active)\n      .map(({ __target, fragment, series }) => ({\n        deviceName: __target.name,\n        source: __target.id,\n        valueFragmentSeries: series,\n        valueFragmentType: fragment\n      }));\n\n    if (datapointDetails.length === 0) {\n      this.exportConfig = null;\n    } else {\n      this.exportConfig = {\n        aggregation: this.displayConfig.aggregation,\n        dateFrom: new Date(this.displayConfig.dateFrom).toISOString(),\n        dateTo: new Date(this.displayConfig.dateTo).toISOString(),\n        datapointDetails: datapointDetails\n      };\n    }\n  }\n\n  private updateSelectedItems(): void {\n    const filtered = this.selectableItems.filter(item => {\n      if (item.value.type === 'DATAPOINT') {\n        return !!item.value.original.__active;\n      } else {\n        return item.value.original.__active && !item.value.original.__hidden;\n      }\n    });\n    this.selectedItems = [...filtered];\n    this.cdr.detectChanges();\n  }\n\n  private assignContextFromContextDashboard(\n    dpOrAlarmOrEvent: KPIDetails | AlarmOrEventExtended\n  ): void {\n    if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n      return;\n    }\n    const context = this.dashboardContextComponent?.context;\n    if (context?.id) {\n      const { name, id } = context;\n      dpOrAlarmOrEvent.__target = { name, id };\n    }\n  }\n\n  /**\n   * Remove hidden items from loaded cache so they will be reloaded when toggled visible.\n   * Called when context changes (time range, aggregation, etc.) to mark hidden items data as stale.\n   */\n  private invalidateHiddenItemsCache(): void {\n    this.loadedDatapoints = this.loadedDatapoints.filter(dp => dp.__active);\n    this.loadedAlarmsOrEvents = this.loadedAlarmsOrEvents.filter(\n      aOrE => aOrE.__active && !aOrE.__hidden\n    );\n  }\n}\n","@if (widgetControls) {\n  <c8y-global-context-widget-wrapper\n    [widgetControls]=\"widgetControls\"\n    [isLoading]=\"isLoading$ | async\"\n    [config]=\"displayConfig\"\n    [disableRefreshEmits]=\"true\"\n    (globalContextChange)=\"onGlobalContextChange($event)\"\n  ></c8y-global-context-widget-wrapper>\n}\n\n<div\n  class=\"p-l-16 p-r-16\"\n  style=\"min-height: 34px\"\n>\n  <div class=\"d-flex gap-16 a-i-center\">\n    @if (hasAtLeastOneAlarmActive) {\n      <c8y-alarms-filter\n        class=\"d-contents form-group-sm min-width-0\"\n        (onFilterApplied)=\"filterSeverity($event)\"\n      ></c8y-alarms-filter>\n    }\n    @if (displayConfig?.datapoints.length > 0) {\n      <div class=\"d-flex a-i-center min-width-0\">\n        @if (\n          displayConfig.dataPointLegendDisplay === 'dropdown' ||\n          (displayConfig.dataPointLegendDisplay === 'auto' && totalLegendItems > 5)\n        ) {\n          <c8y-select\n            class=\"min-width-0 c8y-select-v2--sm\"\n            aria-label=\"Select datapoints, alarms or events\"\n            [placeholder]=\"'Select datapoints, alarms or events' | translate\"\n            [multi]=\"true\"\n            [filterItems]=\"true\"\n            [(ngModel)]=\"selectedItems\"\n            (onSelect)=\"onItemSelected($event)\"\n            (onDeselect)=\"onItemDeselected($event)\"\n          >\n            @for (item of selectableItems; track item.value) {\n              <div\n                class=\"d-flex a-i-center gap-4\"\n                *c8ySelectItem=\"item.value; label: item.label\"\n              >\n                @if (\n                  !hasAtLeastOneDatapointActive &&\n                  item.value.type === 'DATAPOINT' &&\n                  item.value.original.__active\n                ) {\n                  <i\n                    class=\"text-warning m-r-4\"\n                    c8yIcon=\"exclamation-triangle\"\n                    [tooltip]=\"'At least 1 data point must be active.' | translate\"\n                    container=\"body\"\n                    data-cy=\"datapoint-warning-icon\"\n                    [adaptivePosition]=\"false\"\n                  ></i>\n                }\n                @if (item.value.type === 'DATAPOINT') {\n                  <span\n                    class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n                    [style.background-color]=\"item.value.original.color\"\n                  ></span>\n                }\n                @if (item.value.type === 'ALARM') {\n                  <span\n                    class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n                    [style.background-color]=\"item.value.original.color\"\n                  >\n                    <i\n                      class=\"stroked-icon\"\n                      c8yIcon=\"bell\"\n                    ></i>\n                  </span>\n                }\n                @if (item.value.type === 'EVENT') {\n                  <span\n                    class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n                    [ngStyle]=\"{ 'background-color': item.value.original.color }\"\n                  >\n                    <i\n                      class=\"stroked-icon\"\n                      c8yIcon=\"online1\"\n                    ></i>\n                  </span>\n                }\n                <span class=\"text-truncate d-col\">\n                  <small class=\"text-truncate\">{{ item.value.original.label }}</small>\n                  <span class=\"text-muted text-10\">{{ item.value.original.__target?.name }}</span>\n                </span>\n              </div>\n            }\n            <span\n              class=\"tag tag--info chip\"\n              title=\"{{ selectedItem.label }}\"\n              *c8ySelectedItems=\"let selectedItem\"\n            >\n              <button\n                class=\"btn btn-xs btn-clean text-10\"\n                title=\"{{ selectedItem.label }}\"\n                type=\"button\"\n                (click)=\"\n                  $event.preventDefault(); $event.stopPropagation(); onItemDeselected(selectedItem)\n                \"\n              >\n                <i c8yIcon=\"times\"></i>\n              </button>\n              @if (isLastActiveDatapoint(selectedItem)) {\n                <i\n                  class=\"text-warning a-s-start\"\n                  c8yIcon=\"exclamation-triangle\"\n                  [tooltip]=\"'At least 1 data point must be active.' | translate\"\n                  container=\"body\"\n                  data-cy=\"datapoint-warning-icon\"\n                  [adaptivePosition]=\"false\"\n                ></i>\n              }\n              @if (selectedItem.value.type === 'DATAPOINT') {\n                <span\n                  class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n                  [style.background-color]=\"selectedItem.value?.original.color || ''\"\n                ></span>\n              }\n              @if (selectedItem.value?.type === 'ALARM') {\n                <span\n                  class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n                  [style.background-color]=\"selectedItem.value?.original.color || ''\"\n                >\n                  <i\n                    class=\"stroked-icon\"\n                    c8yIcon=\"bell\"\n                  ></i>\n                </span>\n              }\n              @if (selectedItem.value?.type === 'EVENT') {\n                <span\n                  class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n                  [ngStyle]=\"{\n                    'background-color': selectedItem.value?.original.color || ''\n                  }\"\n                >\n                  <i\n                    class=\"stroked-icon\"\n                    c8yIcon=\"online1\"\n                  ></i>\n                </span>\n              }\n            </span>\n          </c8y-select>\n        } @else {\n          <div class=\"inner-scroll\">\n            <div class=\"p-t-4 d-flex a-i-start gap-8\">\n              @for (datapoint of displayConfig.datapoints; track datapoint) {\n                @if (datapoint.retrievalError) {\n                  <i\n                    class=\"text-warning m-l-4\"\n                    c8yIcon=\"exclamation-triangle\"\n                    [tooltip]=\"'Data point no longer exists.' | translate\"\n                    container=\"body\"\n                    [adaptivePosition]=\"false\"\n                  ></i>\n                } @else {\n                  <div\n                    class=\"c8y-datapoint-pill pill--sm flex-no-shrink\"\n                    title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n                    [ngClass]=\"{ active: datapoint.__active }\"\n                  >\n                    @if (!hasAtLeastOneDatapointActive && datapoint.__active) {\n                      <i\n                        class=\"text-warning m-l-4\"\n                        c8yIcon=\"exclamation-triangle\"\n                        [tooltip]=\"'At least 1 data point must be active.' | translate\"\n                        container=\"body\"\n                        data-cy=\"datapoint-warning-icon\"\n                        [adaptivePosition]=\"false\"\n                      ></i>\n                    }\n                    <button\n                      class=\"c8y-datapoint-pill__btn\"\n                      title=\"{{\n                        (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n                      }} \"\n                      type=\"button\"\n                      data-cy=\"datapoint-toggle-visibility-btn\"\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 text-bold\">\n                          {{ datapoint.label }}\n                        </span>\n                        <small class=\"text-muted text-10\">\n                          {{ datapoint.__target.name }}\n                        </small>\n                      </span>\n                      @if (datapointsOutOfSync.get(datapoint)) {\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.'\n                              | translate\n                          \"\n                          container=\"body\"\n                          [adaptivePosition]=\"false\"\n                        ></i>\n                      }\n                    </div>\n                  </div>\n                }\n              }\n\n              @for (alarm of alarms; track alarm) {\n                <div\n                  class=\"c8y-alarm-pill pill--sm flex-no-shrink\"\n                  title=\"{{ alarm.filters.type }} \"\n                >\n                  @if (displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)) {\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                      [adaptivePosition]=\"false\"\n                    ></i>\n                  }\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]=\"\n                        alarm.__hidden || !alarm.__active\n                          ? 'eye-slash text-muted'\n                          : 'eye text-primary'\n                      \"\n                    ></i>\n                  </button>\n                  <button\n                    class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n                    (click)=\"toggleMarkedArea(alarm)\"\n                    [ngClass]=\"{\n                      active:\n                        !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 text-bold\">\n                        {{ alarm.label || 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              }\n\n              @for (event of events; track event) {\n                <div\n                  class=\"c8y-event-pill pill--sm flex-no-shrink\"\n                  title=\"{{ event.filters.type }}\"\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]=\"\n                        event.__hidden || !event.__active\n                          ? 'eye-slash text-muted'\n                          : 'eye text-primary'\n                      \"\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=\"online1\"\n                      ></i>\n                    </span>\n                    <span\n                      class=\"text-truncate text-bold\"\n                      [ngClass]=\"{ 'text-muted': event.__hidden }\"\n                    >\n                      <span class=\"text-truncate\">\n                        {{ event.label || 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              }\n            </div>\n          </div>\n          <button\n            class=\"btn-help btn-help--sm m-r-8\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"legendHelpTemplate\"\n            placement=\"left\"\n            triggers=\"focus\"\n            container=\"body\"\n            [adaptivePosition]=\"true\"\n          ></button>\n        }\n      </div>\n    }\n  </div>\n</div>\n\n@if (displayConfig !== null) {\n  <c8y-charts\n    #chart\n    [config]=\"displayConfig\"\n    [alerts]=\"alerts\"\n    [chartViewContext]=\"chartViewContext\"\n    (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n    (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n    (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n    (finishLoading)=\"this.isLoading$.next($event)\"\n    (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n  ></c8y-charts>\n}\n\n<ng-template #legendHelpTemplate>\n  <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n\n<c8y-widget-action>\n  <c8y-datapoints-export-selector\n    [displayMode]=\"'icon-only'\"\n    [exportConfig]=\"exportConfig\"\n    [containerClass]=\"'d-contents'\"\n  ></c8y-datapoints-export-selector>\n  <button\n    class=\"btn btn-icon\"\n    [attr.aria-label]=\"'Save as image' | translate\"\n    tooltip=\"{{ 'Save as image' | translate }}\"\n    container=\"body\"\n    type=\"button\"\n    [delay]=\"500\"\n    (click)=\"chartComponent.saveAsImage()\"\n    [adaptivePosition]=\"false\"\n  >\n    <i\n      class=\"icon-14\"\n      c8yIcon=\"image-file-checked\"\n    ></i>\n  </button>\n</c8y-widget-action>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","CommonModule","i6","i8"],"mappings":"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"}