{"version":3,"file":"c8y-ngx-components-datapoint-explorer-view.mjs","sources":["../../datapoint-explorer/view/configuration/naming-dictionary.ts","../../datapoint-explorer/view/configuration/name-generator.service.ts","../../datapoint-explorer/view/datapoint-explorer.model.ts","../../datapoint-explorer/view/configuration/workspace-configuration.service.ts","../../datapoint-explorer/view/datapoint-explorer.service.ts","../../datapoint-explorer/view/configuration/workspace-configuration.component.ts","../../datapoint-explorer/view/configuration/workspace-configuration.component.html","../../datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.ts","../../datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.html","../../datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.ts","../../datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.html","../../datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.ts","../../datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.html","../../datapoint-explorer/view/datapoint-explorer.component.ts","../../datapoint-explorer/view/datapoint-explorer.component.html","../../datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.ts"],"sourcesContent":["export const adjectives = [\n  'caffeinated',\n  'sleepy',\n  'hungry',\n  'puzzled',\n  'overexcited',\n  'daydreaming',\n  'chocolate-loving',\n  'coffee-powered',\n  'cookie-craving',\n  'disco-ready',\n  'weekend-mode',\n  'pizza-powered',\n  'nap-seeking',\n  'wifi-hunting',\n  'battery-hungry',\n  'donut-powered',\n  'tea-sipping',\n  'keyboard-loving',\n  'screen-staring',\n  'mouse-chasing',\n  'code-dreaming',\n  'pixel-perfect',\n  'bug-finding',\n  'zoom-tired',\n  'meeting-dodging',\n  'deadline-racing',\n  'coffee-seeking',\n  'sandwich-craving',\n  'debug-ready',\n  'rest-needing'\n];\nexport const nouns = [\n  'sensor',\n  'robot',\n  'thermostat',\n  'gateway',\n  'dashboard',\n  'widget',\n  'gadget',\n  'button',\n  'antenna',\n  'beacon',\n  'adapter',\n  'gizmo',\n  'hub',\n  'switch',\n  'chip',\n  'controller',\n  'display',\n  'terminal',\n  'processor',\n  'transmitter',\n  'receiver',\n  'pod',\n  'device',\n  'module',\n  'relay',\n  'node',\n  'bridge',\n  'screen',\n  'router',\n  'box'\n];\n","import { Injectable } from '@angular/core';\nimport { adjectives, nouns } from './naming-dictionary';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NameGeneratorService {\n  generateName(): string {\n    const getRandomElement = (arr: string[]) => arr[Math.floor(Math.random() * arr.length)];\n    const randomAdjective = getRandomElement(adjectives);\n    const randomNoun = getRandomElement(nouns);\n\n    return `${randomAdjective}_${randomNoun}`;\n  }\n}\n","import { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { TimeContext } from '@c8y/ngx-components/time-context';\n\nexport interface Settings {\n  hideWorkspaceConfig?: boolean;\n  hideExportSelector?: boolean;\n  hideWidgetActions?: boolean;\n  timeContext?: TimeContext;\n  defaultConfigurationId?: string;\n}\n\nexport interface DataExplorerUrlConfig {\n  datapoints?: BaseDatapointConfig[];\n  alarmsEventsConfigs?: BaseAlarmEventConfig[];\n  dateFrom?: Date | string | null;\n  dateTo?: Date | string | null;\n\n  // Allow any additional fields so it's forward-compatible\n  [key: string]: any;\n}\n\nexport interface BaseDatapointConfig {\n  fragment: string;\n  series: string;\n  __target?: {\n    id?: string;\n    [key: string]: any;\n  };\n  __template?: string;\n\n  [key: string]: any;\n}\n\nexport interface BaseAlarmEventConfig {\n  timelineType: string;\n  label: string;\n\n  filters: {\n    type: string;\n    [key: string]: any;\n  };\n\n  __target?: {\n    id?: string;\n    [key: string]: any;\n  };\n  [key: string]: any;\n}\n\nexport const DATA_EXPLORER_BASE_CONFIG: DatapointsGraphWidgetConfig = {\n  datapoints: [],\n  alarmsEventsConfigs: [],\n  dateFrom: null,\n  dateTo: null,\n  interval: 'hours',\n  aggregation: null,\n  realtime: false,\n  isAutoRefreshEnabled: false,\n  refreshInterval: 0,\n  displayMarkedLine: true,\n  displayMarkedPoint: true,\n  mergeMatchingDatapoints: false,\n  forceMergeDatapoints: false,\n  showLabelAndUnit: true,\n  showSlider: true,\n  displayDateSelection: false,\n  yAxisSplitLines: false,\n  xAxisSplitLines: false,\n  numberOfDecimalPlaces: 2\n};\n\nexport const REVERSE_KEY_MAP = {\n  d: 'datapoints',\n  a: 'alarmsEventsConfigs',\n  f: 'fragment',\n  s: 'series',\n  t: '__target',\n  m: '__template',\n  l: 'label',\n  r: 'filters',\n  y: 'timelineType',\n  df: 'dateFrom',\n  dt: 'dateTo',\n  ac: '__active',\n  c: 'color',\n  i: 'id',\n  tp: 'type'\n};\n\nexport const KEY_MAP = Object.fromEntries(\n  Object.entries(REVERSE_KEY_MAP).map(([shortKey, longKey]) => [longKey, shortKey])\n);\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\nimport { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from 'lz-string';\nimport {\n  DATA_EXPLORER_BASE_CONFIG,\n  DataExplorerUrlConfig,\n  KEY_MAP,\n  REVERSE_KEY_MAP\n} from '../datapoint-explorer.model';\nimport { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { IIdentified } from '@c8y/client';\nimport { AlertService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WorkspaceConfigurationService {\n  private readonly baseKey = 'c8y-configs';\n  private readonly baseDefaultKey = 'c8y-default-config-id';\n  contextIdSignal: WritableSignal<number | string | null> = signal(null);\n\n  private readonly alertService = inject(AlertService);\n\n  get LOCAL_STORAGE_KEY(): string {\n    const id = this.contextIdSignal();\n    return id !== null ? `${this.baseKey}-${id}` : this.baseKey;\n  }\n\n  get LOCAL_STORAGE_DEFAULT_ID_KEY(): string {\n    const id = this.contextIdSignal();\n    return id !== null ? `${this.baseDefaultKey}-${id}` : this.baseDefaultKey;\n  }\n\n  /**\n   * Generates a full datapoint explorer link from a bare config\n   */\n  generateExplorerLink(\n    config: Partial<DatapointsGraphWidgetConfig> | DataExplorerUrlConfig,\n    label: string,\n    id: string\n  ): string {\n    const diffed = this.removeDefaults(config);\n    const minified = this.minifyKeys(diffed);\n    const compressed = compressToEncodedURIComponent(JSON.stringify(minified));\n    const url = `/datapointexplorer-v2?id=${id}&label=${encodeURIComponent(label)}&config=${compressed}`;\n\n    return url;\n  }\n\n  /** Load workspace configs from localStorage  */\n  getConfigurations(): WorkspaceConfiguration[] {\n    const configurations = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n    if (configurations) {\n      const parsedConfigs: WorkspaceConfiguration[] = JSON.parse(configurations);\n      return parsedConfigs.map(workspaceConfig => {\n        if (typeof workspaceConfig.config === 'string') {\n          return {\n            ...workspaceConfig,\n            config: this.decodeConfig(workspaceConfig.config)\n          };\n        }\n        return workspaceConfig;\n      });\n    }\n    return [];\n  }\n\n  getDefaultConfigurationId(): string | null {\n    return localStorage.getItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY);\n  }\n\n  /** Save workspace configs in localStorage */\n  saveConfigurations(configurations: WorkspaceConfiguration[], id: string): void {\n    // Before saving, we need to clean up the config objects to remove any unnecessary properties in the __target object\n    configurations = configurations.map(workspace => ({\n      ...workspace,\n      config: this.cleanUpTargetObject(workspace.config)\n    }));\n    localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));\n    localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);\n  }\n\n  /**\n   *\n   * @param urlConfig - configuration from the URL, either compressed string or already decoded object\n   * @returns\n   */\n  getConfigurationFromUrl(\n    urlConfig: DatapointsGraphWidgetConfig | string\n  ): DatapointsGraphWidgetConfig {\n    if (typeof urlConfig === 'string') {\n      const decodedConfig = this.decodeConfig(urlConfig);\n      const expandedConfig = this.expandKeys(decodedConfig);\n      return expandedConfig;\n    }\n\n    return this.expandKeys(urlConfig);\n  }\n\n  /**\n   * Encode a config for the URL:\n   * - Cleanup the __target objects to contain only name and id\n   * - Remove default values (diff from base)\n   * - Minify keys\n   * - Compress with lz-string\n   */\n  encodeConfig(config: DatapointsGraphWidgetConfig): string {\n    const normalized = this.cleanUpTargetObject(config);\n    const diffed = this.removeDefaults(normalized);\n    const minified = this.minifyKeys(diffed);\n    return compressToEncodedURIComponent(JSON.stringify(minified));\n  }\n\n  /**\n   * Decode a config from the URL:\n   * - Decompress\n   * - Expand keys\n   * - Merge with base config\n   */\n  decodeConfig(urlConfig: string): Partial<DatapointsGraphWidgetConfig> {\n    if (!urlConfig) return null;\n    try {\n      const decompressed = decompressFromEncodedURIComponent(urlConfig);\n      if (!decompressed) return null;\n      const parsed = JSON.parse(decompressed);\n      const expanded = this.expandKeys(parsed) as Partial<DatapointsGraphWidgetConfig>;\n      return { ...DATA_EXPLORER_BASE_CONFIG, ...expanded };\n    } catch {\n      this.alertService.danger(\n        gettext('The decoded configuration is invalid and could not be loaded.')\n      );\n    }\n  }\n\n  /** Minify keys recursively using KEY_MAP */\n  private minifyKeys(\n    config: Partial<DatapointsGraphWidgetConfig>\n  ): Record<keyof typeof KEY_MAP, unknown> | unknown {\n    if (Array.isArray(config)) return config.map(object => this.minifyKeys(object));\n    if (config !== Object(config)) return config;\n\n    return Object.fromEntries(\n      Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n        KEY_MAP[originalKey] || originalKey,\n        this.minifyKeys(originalValue)\n      ])\n    );\n  }\n\n  /** Expand keys recursively using REVERSE_KEY_MAP */\n  private expandKeys(\n    config: Partial<DatapointsGraphWidgetConfig>\n  ): Record<keyof typeof REVERSE_KEY_MAP, unknown> | unknown {\n    if (Array.isArray(config)) return config.map(o => this.expandKeys(o));\n    if (config !== Object(config)) return config;\n\n    return Object.fromEntries(\n      Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n        REVERSE_KEY_MAP[originalKey] || originalKey,\n        this.expandKeys(originalValue)\n      ])\n    );\n  }\n\n  /**\n   * Remove properties from `config` that match `base` so only changed values remain.\n   */\n  private removeDefaults(\n    config: DatapointsGraphWidgetConfig | DataExplorerUrlConfig\n  ): DatapointsGraphWidgetConfig {\n    const result = {};\n\n    for (const key in config) {\n      if (!(key in DATA_EXPLORER_BASE_CONFIG) || DATA_EXPLORER_BASE_CONFIG[key] !== config[key]) {\n        result[key] = config[key];\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Cleans up __target objects to only keep id and name and remove the rest.\n   */\n  private cleanUpTargetObject(config: DatapointsGraphWidgetConfig): DatapointsGraphWidgetConfig {\n    const configCopy: any = { ...config };\n\n    // Cleanup the datapoints array\n    if (Array.isArray(configCopy.datapoints)) {\n      configCopy.datapoints = configCopy.datapoints.map((dp: KPIDetails) => {\n        if (dp && typeof dp === 'object' && dp.__target && typeof dp.__target === 'object') {\n          const { id, name } = dp.__target;\n          const target: IIdentified = {};\n          if (id !== undefined) target.id = id;\n          if (name !== undefined) target.name = name;\n          return { ...dp, __target: target };\n        }\n        return dp;\n      });\n    }\n\n    // Cleanup the alarmEventsConfig array\n    if (Array.isArray(configCopy.alarmsEventsConfigs)) {\n      configCopy.alarmsEventsConfigs = configCopy.alarmsEventsConfigs.map((a: KPIDetails) => {\n        if (a && typeof a === 'object' && a.__target && typeof a.__target === 'object') {\n          const { id, name } = a.__target;\n          const target: IIdentified = {};\n          if (id !== undefined) target.id = id;\n          if (name !== undefined) target.name = name;\n          return { ...a, __target: target };\n        }\n        return a;\n      });\n    }\n\n    return configCopy;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { DatapointSyncService, MOChunkLoaderService } from '@c8y/ngx-components';\nimport {\n  ContextDashboardService,\n  ContextDashboardType\n} from '@c8y/ngx-components/context-dashboard';\nimport { firstValueFrom } from 'rxjs';\nimport { WorkspaceConfigurationService } from './configuration/workspace-configuration.service';\nimport { Router } from '@angular/router';\nimport { DatapointsGraphKPIDetails, DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { DataExplorerUrlConfig } from './datapoint-explorer.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataExplorerService {\n  private readonly inventory = inject(InventoryService);\n  private readonly contextDashboardService = inject(ContextDashboardService);\n  private readonly workspaceConfigurationService = inject(WorkspaceConfigurationService);\n  private readonly moChunkLoader = inject(MOChunkLoaderService);\n  private readonly datapointSyncService = inject(DatapointSyncService);\n  private readonly router = inject(Router);\n  private readonly maxNumberOfManagedObjectsPerRequest = 50;\n\n  async fetchReportDashboard(reportId: string): Promise<IManagedObject> {\n    return (\n      await this.inventory.list({\n        pageSize: 1,\n        query: `has('c8y_Dashboard!name!report_${reportId}')`\n      })\n    ).data[0];\n  }\n\n  async fetchContextDashboard(\n    dashboardId: string,\n    contextAsset: IManagedObject\n  ): Promise<IManagedObject> {\n    const context = contextAsset.c8y_isDevice\n      ? ContextDashboardType.Device\n      : ContextDashboardType.Group;\n    return firstValueFrom(this.contextDashboardService.getDashboard$(dashboardId, [context]));\n  }\n\n  async loadManagedObjectsInChunks(uniqIds: string[]) {\n    const { results, errors } = await this.moChunkLoader.processInChunks(\n      uniqIds,\n      this.maxNumberOfManagedObjectsPerRequest,\n      ids => this.loadAChunkOfManagedObjects(ids)\n    );\n\n    return { result: results, errors };\n  }\n\n  /**\n   * Navigate to datapoint explorer with given config.\n   * The goal of this method is to navigate to the data explorer with a provided config from any other application.\n   * @param config Configuration to use\n   * @param label Label to be displayed for the configuration\n   * @param id ID for the configuration\n   */\n  navigateToDataExplorer(config: DataExplorerUrlConfig, label: string, id: string): void {\n    const url = this.getUrlForConfig(config, label, id);\n    this.router.navigateByUrl(url);\n  }\n\n  /**\n   * Generate a URL for the datapoint explorer with the given config.\n   * The goal of this method is to generate a shareable link to the data explorer.\n   * @param config Configuration to use\n   * @param label Label to be displayed for the configuration\n   * @param id ID for the configuration\n   * @returns The generated URL\n   */\n  getUrlForConfig(config: DataExplorerUrlConfig, label: string, id: string): string {\n    return this.workspaceConfigurationService.generateExplorerLink(\n      config as Partial<DatapointsGraphWidgetConfig>,\n      label,\n      id\n    );\n  }\n\n  processAlarmEventConfigs(config: DatapointsGraphWidgetConfig): void {\n    const firstTarget = config.alarmsEventsConfigs.find(ae => ae.__target)?.__target;\n\n    config.alarmsEventsConfigs = config.alarmsEventsConfigs.map((ae, index) => {\n      if (ae.__active === undefined) ae.__active = true;\n      if (!ae.__target && firstTarget) ae.__target = firstTarget;\n      if (!ae.color) ae.color = this.generateColor(index);\n      return ae;\n    });\n  }\n\n  processDatapoints(config: DatapointsGraphWidgetConfig): void {\n    const firstTarget = config.datapoints.find(dp => dp.__target)?.__target;\n\n    config.datapoints = config.datapoints.map((dp, index) => {\n      // Default __active\n      if (dp.__active === undefined) dp.__active = true;\n\n      if (!dp.__target && firstTarget) dp.__target = firstTarget;\n\n      if (!dp.color && !dp.__template) dp.color = this.generateColor(index);\n\n      if (!dp.label) dp.label = `${dp.fragment} -> ${dp.series}`;\n\n      return dp;\n    });\n  }\n\n  /**\n   * Generates a color from a fixed palette based on the index.\n   * Used to assign colors to alarm/event configs in the UI.\n   */\n  generateColor(index: number): string {\n    // Simple palette, can expand\n    const palette = ['#c87d33', '#8c145f', '#8cd7fd', '#59a036', '#fb00ff', '#8d4c22', '#fbb2d7'];\n    return palette[index % palette.length];\n  }\n\n  async loadAndAssignManagedObjects(\n    config: DatapointsGraphWidgetConfig,\n    uniqueIds: string[]\n  ): Promise<void> {\n    const managedObjectsResult = await this.loadManagedObjectsInChunks([...uniqueIds]);\n    const managedObjects = managedObjectsResult.result;\n    const errors = managedObjectsResult.errors;\n\n    config.datapoints = this.datapointSyncService.assignUpdatedValues(\n      config.datapoints,\n      managedObjects,\n      errors\n    ) as DatapointsGraphKPIDetails[];\n  }\n\n  private async loadAChunkOfManagedObjects(uniqIds: string[]) {\n    return this.moChunkLoader.loadAChunkOfManagedObjectsBase(\n      uniqIds,\n      this.inventory,\n      this.maxNumberOfManagedObjectsPerRequest,\n      id => this.moChunkLoader.getStatusDetails(id)\n    );\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationStart, Router } from '@angular/router';\nimport {\n  ClipboardService,\n  ContextRouteService,\n  CoreModule,\n  DatapointSyncService,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { NameGeneratorService } from './name-generator.service';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\nimport { WorkspaceConfigurationService } from './workspace-configuration.service';\nimport { DataExplorerService } from '../datapoint-explorer.service';\n\n@Component({\n  selector: 'c8y-workspace-config',\n  templateUrl: './workspace-configuration.component.html',\n  standalone: true,\n  imports: [CoreModule, BsDropdownModule, FormsModule, A11yModule, TooltipModule]\n})\nexport class WorkspaceConfigComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() updatedConfig: DatapointsGraphWidgetConfig;\n  @Input() silent = false;\n  @Input() defaultConfigurationId: string;\n  @Output() onConfigurationChange = new EventEmitter<DatapointsGraphWidgetConfig>();\n\n  currentConfiguration: WorkspaceConfiguration;\n  configurations: WorkspaceConfiguration[] = [];\n  configurationsFormGroup: FormGroup;\n  navigationSubscription = null;\n  shouldCleanParams = false;\n  activeConfigTooltip = gettext('Active configuration cannot be removed');\n  removeConfigTooltip = gettext('Remove configuration');\n\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly workspaceConfigurationService = inject(WorkspaceConfigurationService);\n  private readonly contextRouteService = inject(ContextRouteService);\n  private readonly clipboardService = inject(ClipboardService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly router = inject(Router);\n  private readonly nameGeneratorService = inject(NameGeneratorService);\n  private readonly datapointSyncService = inject(DatapointSyncService);\n  private readonly dataExplorerService = inject(DataExplorerService);\n\n  ngOnInit(): void {\n    this.initializeContextSourceId();\n    this.initializeConfigurations();\n    this.initWorkspaceForm();\n    this.subscribeToRouterEvents();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.updatedConfig && !changes.updatedConfig.firstChange) {\n      this.updateConfigurations();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.shouldCleanParams) {\n      this.router.navigate([], {\n        queryParams: {\n          config: null,\n          id: null,\n          label: null\n        },\n        queryParamsHandling: 'merge'\n      });\n    }\n\n    this.navigationSubscription?.unsubscribe();\n  }\n\n  addConfig(duplicatedConfig?: DatapointsGraphWidgetConfig, id?: string, label?: string): void {\n    const name = this.nameGeneratorService.generateName();\n    const workspace: WorkspaceConfiguration = {\n      id: id || new Date().toISOString(),\n      label: label || name,\n      config: { datapoints: [], alarmsEventsConfigs: [] }\n    };\n    if (duplicatedConfig) {\n      workspace.config = duplicatedConfig;\n    }\n    this.configurations = [workspace, ...this.configurations];\n    this.initWorkspaceForm();\n    this.changeConfiguration(true, workspace);\n  }\n\n  changeConfiguration(selected: boolean, configuration: WorkspaceConfiguration): void {\n    if (!selected) {\n      return;\n    }\n\n    if (this.currentConfiguration?.id === configuration.id) {\n      return;\n    }\n\n    this.currentConfiguration = configuration;\n    localStorage.setItem(\n      this.workspaceConfigurationService.LOCAL_STORAGE_DEFAULT_ID_KEY,\n      this.currentConfiguration.id\n    );\n    this.onConfigurationChange.emit(configuration.config);\n  }\n\n  updateConfigurationLabel(configuration: WorkspaceConfiguration): void {\n    this.configurations = this.configurations.map(c =>\n      c.id === configuration.id ? configuration : c\n    );\n    if (this.currentConfiguration.id === configuration.id) {\n      this.currentConfiguration = configuration;\n    }\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n  }\n\n  deleteConfiguration(configuration: WorkspaceConfiguration): void {\n    this.configurations = this.configurations.filter(c => c.id !== configuration.id);\n    this.initWorkspaceForm();\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n  }\n\n  clearAll(): void {\n    this.configurations = [this.currentConfiguration];\n    this.initWorkspaceForm();\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n  }\n\n  async shareConfig(configuration: WorkspaceConfiguration): Promise<void> {\n    await this.clipboardService.writeText(JSON.stringify(configuration.config));\n  }\n\n  private async addConfigFromUrl(queryParams: Partial<WorkspaceConfiguration>): Promise<void> {\n    const id = queryParams.id || new Date().toISOString();\n    const label = queryParams.label || this.nameGeneratorService.generateName();\n    const config = this.workspaceConfigurationService.getConfigurationFromUrl(\n      queryParams.config || {}\n    );\n\n    this.addConfig(config, id, label);\n\n    if (config.datapoints?.length) {\n      this.dataExplorerService.processDatapoints(config);\n    }\n\n    const uniqueIds = this.datapointSyncService.getManagedObjectIds(config.datapoints || []);\n    if (uniqueIds.length) {\n      await this.dataExplorerService.loadAndAssignManagedObjects(config, uniqueIds);\n    }\n\n    if (config.alarmsEventsConfigs?.length) {\n      this.dataExplorerService.processAlarmEventConfigs(config);\n    }\n\n    this.onConfigurationChange.emit(config);\n  }\n\n  private updateConfigurations(): void {\n    const config = { ...this.updatedConfig };\n    this.currentConfiguration.config = config;\n\n    this.configurations = this.configurations.map(currentConfig =>\n      currentConfig.id === this.currentConfiguration.id ? this.currentConfiguration : currentConfig\n    );\n    const queryParams = {\n      id: this.currentConfiguration.id,\n      label: this.currentConfiguration.label,\n      config: this.workspaceConfigurationService.encodeConfig(config)\n    };\n\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration.id\n    );\n    const control = <FormArray>this.configurationsFormGroup.controls['configurations'];\n    const index = this.configurations.findIndex(c => c.id === this.currentConfiguration.id);\n    if (index !== -1) {\n      control.at(index).patchValue({\n        label: this.currentConfiguration.label,\n        config: this.currentConfiguration.config,\n        id: this.currentConfiguration.id\n      });\n    }\n\n    this.router.navigate([], {\n      queryParams,\n      queryParamsHandling: 'merge'\n    });\n  }\n\n  private initializeConfigurations(): void {\n    const configurations = this.workspaceConfigurationService.getConfigurations();\n    const defaultId =\n      this.defaultConfigurationId ?? this.workspaceConfigurationService.getDefaultConfigurationId();\n    const queryParams = this.router.parseUrl(this.router.url).queryParams;\n\n    if (configurations.length) {\n      this.configurations = configurations;\n      this.currentConfiguration =\n        this.configurations.find(c => c.id === defaultId) || this.configurations[0];\n\n      this.onConfigurationChange.emit(this.currentConfiguration.config);\n      if (queryParams?.id && !this.configurations.find(c => c.id === queryParams.id)) {\n        this.addConfigFromUrl(queryParams);\n      } else if (\n        queryParams?.id &&\n        this.configurations.find(c => c.id === queryParams.id) &&\n        this.currentConfiguration.id !== queryParams.id\n      ) {\n        this.currentConfiguration = this.configurations.find(c => c.id === queryParams.id);\n        this.changeConfiguration(true, this.currentConfiguration);\n      }\n    }\n\n    if (!this.currentConfiguration) {\n      if (Object.keys(queryParams).length === 0) {\n        this.addConfig();\n        return;\n      }\n      this.addConfigFromUrl(queryParams);\n    }\n  }\n\n  private initWorkspaceForm(): void {\n    this.configurationsFormGroup = this.formBuilder.group({\n      configurations: this.formBuilder.array([])\n    });\n\n    this.patchForm();\n  }\n\n  private patchForm(): void {\n    const control = <FormArray>this.configurationsFormGroup.controls['configurations'];\n    this.configurations.forEach(workspace => {\n      control.push(this.patchValues(workspace));\n    });\n  }\n\n  private patchValues(workspace: WorkspaceConfiguration): FormGroup {\n    return this.formBuilder.group({\n      label: [workspace.label],\n      config: [workspace.config],\n      id: [workspace.id]\n    });\n  }\n\n  /**\n   * Subscribe to router events to clean query params when navigating away, but only when navigating between group or device context\n   * Otherwise it breaks GC.\n   */\n  private subscribeToRouterEvents(): void {\n    this.navigationSubscription = this.router.events.subscribe(event => {\n      if (event instanceof NavigationStart) {\n        const urlTree = this.router.parseUrl(event.url);\n        if (\n          urlTree.queryParams['config'] ||\n          urlTree.queryParams['id'] ||\n          urlTree.queryParams['label']\n        ) {\n          this.shouldCleanParams = true;\n        } else {\n          this.shouldCleanParams = false;\n        }\n      }\n    });\n  }\n\n  private initializeContextSourceId(): void {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      this.workspaceConfigurationService.contextIdSignal.set(null);\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if ([ViewContext.Device, ViewContext.Group].includes(context)) {\n      this.workspaceConfigurationService.contextIdSignal.set(contextData?.id);\n    }\n  }\n}\n","@if (!silent) {\n  <div\n    class=\"dropdown\"\n    #actionbar_dropdown=\"bs-dropdown\"\n    [cdkTrapFocus]=\"actionbar_dropdown.isOpen\"\n    dropdown\n    [insideClick]=\"true\"\n  >\n    <button\n      class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n      attr.aria-label=\"{{ currentConfiguration?.label }}\"\n      tooltip=\"{{ 'Selected configuration' | translate }}\"\n      placement=\"top\"\n      container=\"body\"\n      data-cy=\"current-configuration-dropdown-button\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      dropdownToggle\n    >\n      <i\n        class=\"m-r-4\"\n        c8yIcon=\"list\"\n      ></i>\n      <div class=\"d-col text-left fit-w\">\n        <span class=\"text-12\">\n          {{ 'Configuration' | translate }}\n        </span>\n        <span class=\"text-10 text-muted text-truncate\">\n          {{ currentConfiguration?.label }}\n        </span>\n      </div>\n      <span class=\"caret m-r-16 m-l-4\"></span>\n    </button>\n    <div\n      class=\"dropdown-menu dropdown-menu-wide dropdown-menu-action-bar\"\n      *dropdownMenu\n    >\n      <div class=\"sticky-top separator-bottom p-t-8 p-b-8 p-l-16 p-r-16\">\n        <p>\n          <strong>{{ 'Data explorer configurations' | translate }}</strong>\n        </p>\n        <p>\n          <small>{{ 'Easily switch and manage configurations.' | translate }}</small>\n        </p>\n      </div>\n      <c8y-list-group class=\"no-border-last\">\n        <form [formGroup]=\"configurationsFormGroup\">\n          <div formArrayName=\"configurations\">\n            @for (\n              configuration of configurationsFormGroup.controls.configurations['controls'];\n              track $index\n            ) {\n              <c8y-li\n                class=\"p-0\"\n                [dense]=\"true\"\n              >\n                <c8y-li-radio\n                  style=\"min-height: 48px\"\n                  [selected]=\"configuration.value.id === currentConfiguration.id\"\n                  (onSelect)=\"changeConfiguration($event, configuration.value)\"\n                ></c8y-li-radio>\n\n                <div class=\"d-flex a-i-center gap-8\">\n                  <div\n                    class=\"min-width-0\"\n                    [formGroupName]=\"$index\"\n                  >\n                    <label\n                      class=\"editable\"\n                      [ngClass]=\"{\n                        updated:\n                          configuration.controls.label.touched && configuration.controls.label.dirty\n                      }\"\n                    >\n                      <input\n                        class=\"form-control\"\n                        [style.width.ch]=\"configuration.value.label || 25\"\n                        [attr.aria-label]=\"'Configuration label' | translate\"\n                        placeholder=\"{{ 'Configuration 1' | translate }}\"\n                        type=\"text\"\n                        autocomplete=\"off\"\n                        required\n                        formControlName=\"label\"\n                        (blur)=\"updateConfigurationLabel(configuration.value)\"\n                        (keydown.enter)=\"\n                          $event.preventDefault(); updateConfigurationLabel(configuration.value)\n                        \"\n                      />\n                    </label>\n                  </div>\n\n                  <div class=\"flex-nogrow d-flex gap-8\">\n                    <button\n                      class=\"btn-dot btn m-0\"\n                      [attr.aria-label]=\"'Duplicate configuration' | translate\"\n                      tooltip=\"{{ 'Duplicate configuration' | translate }}\"\n                      placement=\"left\"\n                      (click)=\"addConfig(configuration.value.config)\"\n                      [delay]=\"500\"\n                    >\n                      <i c8yIcon=\"copy\"></i>\n                    </button>\n\n                    <button\n                      class=\"btn-dot btn btn-dot--danger\"\n                      [attr.aria-label]=\"'Remove configurations' | translate\"\n                      tooltip=\"{{\n                        (configuration.value.id === currentConfiguration.id\n                          ? activeConfigTooltip\n                          : removeConfigTooltip\n                        ) | translate\n                      }}\"\n                      placement=\"left\"\n                      [delay]=\"500\"\n                      (click)=\"$event.stopPropagation(); deleteConfiguration(configuration.value)\"\n                      [disabled]=\"configuration.value.id === currentConfiguration.id\"\n                    >\n                      <i c8yIcon=\"minus-circle\"></i>\n                    </button>\n                  </div>\n                </div>\n              </c8y-li>\n            }\n          </div>\n        </form>\n      </c8y-list-group>\n      <div class=\"sticky-bottom separator-top\">\n        <div class=\"d-flex p-l-16 p-r-16 p-t-8 p-b-8\">\n          <button\n            class=\"btn btn-danger btn-sm flex-grow m-r-4\"\n            (click)=\"clearAll()\"\n            [disabled]=\"configurations.length < 2\"\n          >\n            <i [c8yIcon]=\"'delete'\"></i>\n            {{ 'Delete all configurations' | translate }}\n          </button>\n          <button\n            class=\"btn btn-default btn-sm flex-grow\"\n            type=\"button\"\n            (click)=\"addConfig()\"\n          >\n            <i [c8yIcon]=\"'add-circle-outline'\"></i>\n            {{ 'Add configuration' | translate }}\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, ModalLabels } from '@c8y/ngx-components';\nimport { ReportDashboardModule } from '@c8y/ngx-components/report-dashboard';\nimport { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n  selector: 'c8y-create-new-report-modal',\n  templateUrl: './create-new-report-modal.component.html',\n  standalone: true,\n  imports: [ReactiveFormsModule, CoreModule, ReportDashboardModule]\n})\nexport class CreateNewReportModalComponent {\n  reportName = '';\n  labels: ModalLabels = { cancel: gettext('Cancel'), ok: gettext('Send') };\n\n  result = new Promise<IManagedObject>((resolve, reject) => {\n    this._resolve = resolve;\n    this._reject = reject;\n  });\n\n  styling = {\n    themeClass: 'dashboard-theme-light',\n    headerClass: 'panel-title-regular'\n  };\n\n  readonly DEFAULT_DASHBOARD_ICON = 'th';\n  readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n  readonly DEFAULT_DASHBOARD_MARGIN = 12;\n  private _resolve: (value: IManagedObject) => void;\n  private _reject: (reason?: any) => void;\n  constructor(private contextDashboardService: ContextDashboardService) {}\n\n  async save() {\n    const dashboard = {\n      name: this.reportName,\n      icon: this.DEFAULT_DASHBOARD_ICON,\n      c8y_IsNavigatorNode: null,\n      priority: this.DEFAULT_DASHBOARD_PRIORITY,\n      description: '',\n      widgetMargin: this.DEFAULT_DASHBOARD_MARGIN,\n      classes: { [this.styling.headerClass]: true },\n      widgetClasses: { [this.styling.headerClass]: true },\n      translateDashboardTitle: true\n    };\n    try {\n      const { name, icon, c8y_IsNavigatorNode, priority, description, translateDashboardTitle } =\n        dashboard;\n      const report = (\n        await this.contextDashboardService.createReport({\n          name,\n          icon,\n          c8y_IsNavigatorNode,\n          priority,\n          description,\n          translateDashboardTitle\n        } as Partial<IManagedObject>)\n      ).data;\n\n      await this.contextDashboardService.create(\n        dashboard,\n        undefined,\n        `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n      );\n\n      this._resolve(report);\n    } catch (ex) {\n      this._reject(ex);\n    }\n  }\n\n  cancel() {\n    this._reject();\n  }\n}\n","<c8y-modal\n  [title]=\"'Create new report with widget' | translate\"\n  [headerClasses]=\"'dialog-header'\"\n  [disabled]=\"reportName === ''\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [labels]=\"labels\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"c8y-reports\"></span>\n  </ng-container>\n\n  <p class=\"text-center bg-component text-balance sticky-top p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom\">\n   {{' Create a new report with the Data points graph widget using the current configuration.' | translate}}\n  </p>\n  <div class=\"p-24 p-t-8\">\n    <c8y-form-group>\n      <label\n        for=\"reportName\"\n        translate\n        >\n        Report name\n      </label>\n      <input\n        class=\"form-control\"\n        id=\"reportName\"\n        placeholder=\"{{ 'e.g. My data point Report' }}\"\n        name=\"name\"\n        type=\"text\"\n        autocomplete=\"off\"\n        required\n        [(ngModel)]=\"reportName\"\n      />\n      <c8y-messages></c8y-messages>\n    </c8y-form-group>\n  </div>\n</c8y-modal>\n","import { Component, inject, Input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, ModalLabels } from '@c8y/ngx-components';\nimport { Observable, merge, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport {\n  ContextDashboardModule,\n  ContextDashboardService,\n  ContextDashboardType\n} from '@c8y/ngx-components/context-dashboard';\n\n@Component({\n  selector: 'c8y-send-as-widget-to-dashboard-modal',\n  templateUrl: './send-as-widget-to-dashboard-modal.component.html',\n  standalone: true,\n  imports: [ReactiveFormsModule, CoreModule, ContextDashboardModule]\n})\nexport class SendAsWidgetToDashboardModal {\n  @Input() contextAsset: IIdentified;\n  dashboards: IManagedObject[] = [];\n  numberOfSelectedDashboards$: Observable<number>;\n  form: ReturnType<typeof this.initForm>;\n  result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n    this._resolve = resolve;\n    this._reject = reject;\n  });\n  labels: ModalLabels = { cancel: gettext('Cancel'), ok: gettext('Send') };\n  private contextDashboardService = inject(ContextDashboardService);\n  private _resolve: (value: ReturnType<typeof this.initForm>['value']) => void;\n  private _reject: (reason?: any) => void;\n\n  async ngOnInit() {\n    const context = this.contextAsset.c8y_IsDevice\n      ? ContextDashboardType.Device\n      : ContextDashboardType.Group;\n\n    this.dashboards = (\n      await this.contextDashboardService.getContextDashboards(this.contextAsset as IManagedObject, [\n        context\n      ])\n    ).data;\n\n    if (this.dashboards.length > 0) {\n      this.form = this.initForm();\n    }\n    this.numberOfSelectedDashboards$ = merge(this.form.valueChanges, of(this.form.value)).pipe(\n      map(value => Object.values(value).filter(Boolean).length)\n    );\n  }\n\n  save() {\n    this._resolve(this.form.value);\n  }\n\n  cancel() {\n    this._reject();\n  }\n\n  private initForm(): FormGroup<Record<string, FormControl<boolean>>> {\n    const controls = this.dashboards.reduce(\n      (acc, dashboard) => ({\n        ...acc,\n        [dashboard.id]: new FormControl(false)\n      }),\n      {}\n    );\n    return new FormGroup(controls);\n  }\n}\n","<c8y-modal\n  [title]=\"'Send as widget to dashboards' | translate\"\n  [disabled]=\"!form || form.invalid\"\n  [headerClasses]=\"'dialog-header'\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [labels]=\"labels\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"th\"></span>\n  </ng-container>\n\n  <c8y-list-group\n    class=\"m-b-0 no-border-last\"\n    *ngIf=\"form\"\n    [formGroup]=\"form\"\n  >\n    <c8y-li>\n      <p\n        class=\"text-center text-medium\"\n        *ngIf=\"numberOfSelectedDashboards$ | async as numberOfDashboards; else noSelectedDashboards\"\n        translate\n        [translateParams]=\"{ numberOfDashboards: numberOfDashboards }\"\n        ngNonBindable\n      >\n        {{ numberOfDashboards }} dashboards selected for widget\n      </p>\n      <ng-template #noSelectedDashboards>\n        <p\n          class=\"text-center text-medium\"\n          translate\n        >\n          Select one or more dashboards to send the Data points graph widget with the current\n          configuration\n        </p>\n      </ng-template>\n    </c8y-li>\n    <c8y-li *ngFor=\"let dashboard of dashboards\">\n      <c8y-li-checkbox\n        [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + dashboard.id\"\n        [formControlName]=\"dashboard.id\"\n      ></c8y-li-checkbox>\n      <c8y-li-icon class=\"p-l-0\">\n        <i c8yIcon=\"{{ dashboard.icon }}\"></i>\n      </c8y-li-icon>\n      <div\n        class=\"text-truncate\"\n        title=\"{{ dashboard.name }}\"\n      >\n        {{ dashboard.name }}\n      </div>\n    </c8y-li>\n  </c8y-list-group>\n\n  <c8y-ui-empty-state\n    [icon]=\"'th'\"\n    [title]=\"'There are no dashboards defined.' | translate\"\n    [subtitle]=\"'Add a dashboard first.' | translate\"\n    *ngIf=\"dashboards.length === 0\"\n  ></c8y-ui-empty-state>\n</c8y-modal>\n","import { Component, inject } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, ModalLabels } from '@c8y/ngx-components';\nimport { Observable, merge, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n  ReportDashboardModule,\n  ReportDashboardService\n} from '@c8y/ngx-components/report-dashboard';\nimport { IManagedObject } from '@c8y/client';\n@Component({\n  selector: 'c8y-send-as-widget-to-report-modal',\n  templateUrl: './send-as-widget-to-report-modal.component.html',\n  standalone: true,\n  imports: [ReactiveFormsModule, CoreModule, ReportDashboardModule]\n})\nexport class SendAsWidgetToReportModal {\n  reports: IManagedObject[] = [];\n  numberOfSelectedReports$: Observable<number>;\n  form: ReturnType<typeof this.initForm>;\n  result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n    this._resolve = resolve;\n    this._reject = reject;\n  });\n  labels: ModalLabels = { cancel: gettext('Cancel'), ok: gettext('Send') };\n  private reportDashboardService = inject(ReportDashboardService);\n  private _resolve: (value: ReturnType<typeof this.initForm>['value']) => void;\n  private _reject: (reason?: any) => void;\n  async ngOnInit() {\n    this.reports = (await this.reportDashboardService.listReports({ pageSize: 2000 })).data;\n    if (this.reports.length > 0) {\n      this.form = this.initForm();\n    }\n    this.numberOfSelectedReports$ = merge(this.form.valueChanges, of(this.form.value)).pipe(\n      map(value => Object.values(value).filter(Boolean).length)\n    );\n  }\n  save() {\n    this._resolve(this.form.value);\n  }\n  cancel() {\n    this._reject();\n  }\n  private initForm(): FormGroup<Record<string, FormControl<boolean>>> {\n    const controls = this.reports.reduce(\n      (acc, report) => ({\n        ...acc,\n        [report.id]: new FormControl(false)\n      }),\n      {}\n    );\n    return new FormGroup(controls);\n  }\n}\n","<c8y-modal\n  [title]=\"'Send as widget to reports' | translate\"\n  [disabled]=\"!form || form.invalid\"\n  [headerClasses]=\"'dialog-header'\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [labels]=\"labels\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"c8y-reports\"></span>\n  </ng-container>\n\n  <c8y-list-group\n    class=\"m-b-0 no-border-last\"\n    *ngIf=\"form\"\n    [formGroup]=\"form\"\n  >\n    <c8y-li>\n      <p\n        class=\"text-center text-medium\"\n        *ngIf=\"numberOfSelectedReports$ | async as numberOfReports; else noSelectedReports\"\n        translate\n        [translateParams]=\"{ numberOfReports: numberOfReports }\"\n        ngNonBindable\n      >\n        {{ numberOfReports }} reports selected for widget\n      </p>\n      <ng-template #noSelectedReports>\n        <p\n          class=\"text-center text-medium\"\n          translate\n        >\n          Select one or more reports to send the Data points graph widget with the current configuration\n        </p>\n      </ng-template>\n    </c8y-li>\n    <c8y-li *ngFor=\"let report of reports\">\n      <c8y-li-checkbox\n        [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + report.id\"\n        [formControlName]=\"report.id\"\n      ></c8y-li-checkbox>\n      <c8y-li-icon class=\"p-l-0\">\n        <i c8yIcon=\"{{ report.icon }}\"></i>\n      </c8y-li-icon>\n      <div class=\"text-truncate\" title=\"{{report.name}}\">{{ report.name }}</div>\n    </c8y-li>\n  </c8y-list-group>\n\n  <c8y-ui-empty-state\n    [icon]=\"'c8y-reports'\"\n    [title]=\"'There are no reports defined.' | translate\"\n    [subtitle]=\"'Add a report first.' | translate\"\n    *ngIf=\"reports.length === 0\"\n  ></c8y-ui-empty-state>\n</c8y-modal>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Component, DestroyRef, ElementRef, inject, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { aggregationType, IIdentified, IManagedObject, MeasurementService } from '@c8y/client';\nimport {\n  AlertService,\n  CommonModule,\n  ContextRouteService,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  FormsModule,\n  IconDirective,\n  GainsightService,\n  Permissions,\n  ViewContext,\n  WidgetTimeContextDateRangeService,\n  DateAndTimeOptions,\n  DatapointSyncService\n} from '@c8y/ngx-components';\nimport {\n  AlarmEventSelectorModule,\n  SelectedDatapoint\n} from '@c8y/ngx-components/alarm-event-selector';\nimport { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';\nimport {\n  DatapointAttributesFormConfig,\n  DatapointSelectorModule,\n  KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport {\n  DatapointsExportSelectorComponent,\n  ExportConfig\n} from '@c8y/ngx-components/datapoints-export-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlarmDetailsExtended,\n  AlarmOrEventExtended,\n  CHART_VIEW_CONTEXT,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  EventDetailsExtended,\n  PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH,\n  TimeContextProps\n} from '@c8y/ngx-components/echart/models';\nimport {\n  ChartAlarmsService,\n  ChartEventsService,\n  ChartHelpersService,\n  ChartsComponent\n} from '@c8y/ngx-components/echart';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { filter, map, Observable, take } from 'rxjs';\nimport { WorkspaceConfigComponent } from './configuration/workspace-configuration.component';\nimport { CreateNewReportModalComponent } from './create-new-report-modal/create-new-report-modal.component';\nimport { Settings } from './datapoint-explorer.model';\nimport { DataExplorerService } from './datapoint-explorer.service';\nimport { SendAsWidgetToDashboardModal } from './send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component';\nimport { SendAsWidgetToReportModal } from './send-as-widget-to-report-modal/send-as-widget-to-report-modal.component';\n\n@Component({\n  selector: 'c8y-datapoint-explorer',\n  templateUrl: './datapoint-explorer.component.html',\n  standalone: true,\n  imports: [\n    CoreModule,\n    CommonModule,\n    DatapointSelectorModule,\n    AlarmEventSelectorModule,\n    TooltipModule,\n    PopoverModule,\n    TimeContextComponent,\n    ChartsComponent,\n    BsDropdownModule,\n    FormsModule,\n    A11yModule,\n    DatapointsExportSelectorComponent,\n    WorkspaceConfigComponent,\n    IconDirective\n  ],\n  providers: [\n    ChartEventsService,\n    ChartAlarmsService,\n    ChartHelpersService,\n    WidgetTimeContextDateRangeService\n  ]\n})\nexport class DatapointExplorerComponent {\n  settings$!: Observable<Settings>;\n  @ViewChild('chart') chart: ElementRef;\n  @ViewChild('timeContext') timeContext: TimeContextComponent;\n  config: DatapointsGraphWidgetConfig = { datapoints: [], alarmsEventsConfigs: [] };\n  exportConfig: ExportConfig;\n  alerts = new DynamicComponentAlertAggregator();\n  alarms: AlarmDetailsExtended[] = [];\n  events: EventDetailsExtended[] = [];\n  datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n  contextAsset: IIdentified;\n  formGroup: FormGroup;\n  activeDatapoints: KPIDetails[] = [];\n  hasAtLeastOneAlarmActive = true;\n  isMarkedAreaEnabled = false;\n  alarmsOrEventsHaveNoMatchingDps = false;\n  canAddReport = false;\n  timeProps: {\n    dateFrom: Date;\n    dateTo: Date;\n    interval?: Interval['id'];\n    realtime?: boolean;\n    aggregation?: aggregationType | null;\n  };\n  datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n    showRange: true,\n    showChart: true,\n    showAdvancedChartOptions: false\n  };\n  /** Flag to skip onTimeContextChange during zoom handling */\n  private isHandlingZoom = false;\n  chartViewContext = CHART_VIEW_CONTEXT.DATAPOINT_EXPLORER;\n\n  readonly TIME_PICKER_CONFIG: DateAndTimeOptions = {\n    showMinutes: true,\n    showSeconds: true,\n    showSpinners: false\n  };\n\n  #destroyRef = inject(DestroyRef);\n\n  private readonly dataExplorerService = inject(DataExplorerService);\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly alertService = inject(AlertService);\n  private readonly bsModalService = inject(BsModalService);\n  private readonly permissions = inject(Permissions);\n  private readonly contextDashboardService = inject(ContextDashboardService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly contextRouteService = inject(ContextRouteService);\n  private readonly chartHelpersService = inject(ChartHelpersService);\n  private readonly gainsightService = inject(GainsightService);\n  private readonly datapointSyncService = inject(DatapointSyncService);\n  private readonly measurementService = inject(MeasurementService);\n\n  constructor() {\n    this.formGroup = this.initForm();\n    this.settings$ = this.activatedRoute.data.pipe(map(data => data.settings as Settings));\n  }\n\n  ngOnInit(): void {\n    this.contextAsset = this.initializeContextSourceId();\n    this.checkForMatchingDatapoints();\n    this.canAddReport = this.permissions.hasAnyRole([\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE\n    ]);\n\n    // Initialize timeProps from config if available\n    if (this.config.dateFrom && this.config.dateTo) {\n      this.timeProps = {\n        dateFrom: new Date(this.config.dateFrom),\n        dateTo: new Date(this.config.dateTo),\n        interval: (this.config.interval === 'none' ? null : this.config.interval) as Interval['id'],\n        realtime: this.config.realtime,\n        aggregation: this.config.aggregation\n      };\n    }\n\n    this.formGroup.controls.datapoints.valueChanges\n      .pipe(\n        takeUntilDestroyed(this.#destroyRef),\n        filter(value => value.length > 0),\n        take(1)\n      )\n      .subscribe(async value => {\n        const isMigrated = await this.detectTimeSeriesMigration(value[0]);\n        this.datapointSelectDefaultFormOptions.showAdvancedChartOptions = isMigrated;\n        this.formGroup.patchValue({ showAdvancedChartOptions: isMigrated }, { emitEvent: false });\n      });\n\n    this.formGroup.valueChanges\n      .pipe(takeUntilDestroyed(this.#destroyRef))\n      .subscribe(configChange => {\n        const { alarms, events, ...configValues } = configChange;\n        this.config = {\n          ...configValues,\n          alarmsEventsConfigs: [...(alarms || []), ...(events || [])]\n        };\n\n        this.updateExportConfig();\n        this.checkForMatchingDatapoints();\n      });\n\n    const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(this.config);\n\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_EXPLORER_CONFIG_INIT,\n        ...configSummaryGS\n      }\n    );\n  }\n\n  onTimeContextChange(timeProps: TimeContextProps): void {\n    // Skip context changes during zoom handling - zoom already set the correct dates\n    if (this.isHandlingZoom) {\n      return;\n    }\n\n    const realtime = this.formGroup.controls.realtime.value;\n\n    if (timeProps.realtime !== realtime) {\n      this.formGroup.patchValue({\n        realtime: timeProps.realtime,\n        isAutoRefreshEnabled: timeProps.realtime,\n        refreshInterval: 5000,\n        aggregation: timeProps.realtime ? null : timeProps.aggregation || null\n      });\n    }\n\n    if (timeProps.realtime) {\n      // Force aggregation to null when realtime is active\n      if (this.formGroup.value.aggregation !== null) {\n        this.formGroup.patchValue({ aggregation: null });\n      }\n      if (timeProps.currentDateContextInterval !== this.formGroup.value.interval) {\n        this.formGroup.patchValue({ interval: timeProps.currentDateContextInterval });\n      }\n      this.timeProps = {\n        dateFrom: new Date(timeProps.currentDateContextFromDate),\n        dateTo: new Date(timeProps.currentDateContextToDate),\n        interval: timeProps.currentDateContextInterval,\n        realtime: timeProps.realtime,\n        aggregation: timeProps.aggregation\n      };\n      return;\n    }\n\n    this.formGroup.patchValue({\n      dateFrom: timeProps.currentDateContextFromDate,\n      dateTo: timeProps.currentDateContextToDate,\n      interval: timeProps.currentDateContextInterval,\n      aggregation: timeProps.aggregation || null\n    });\n    this.timeProps = {\n      dateFrom: new Date(timeProps.currentDateContextFromDate),\n      dateTo: new Date(timeProps.currentDateContextToDate),\n      interval: timeProps.currentDateContextInterval,\n      realtime: timeProps.realtime,\n      aggregation: timeProps.aggregation\n    };\n  }\n\n  async onConfigurationChange(config: DatapointsGraphWidgetConfig): Promise<void> {\n    const uniqueIds = this.datapointSyncService.getManagedObjectIds(config.datapoints || []);\n    if (uniqueIds.length) {\n      const managedObjectsResult =\n        await this.dataExplorerService.loadManagedObjectsInChunks(uniqueIds);\n      const managedObjects = managedObjectsResult.result;\n      const errors = managedObjectsResult.errors;\n\n      config.datapoints = this.datapointSyncService.assignUpdatedValues(\n        config.datapoints,\n        managedObjects,\n        errors\n      ) as DatapointsGraphKPIDetails[];\n    }\n    // Calculate date range based on interval if not provided\n    const hasExplicitDates = this.isActualDate(config.dateFrom) && this.isActualDate(config.dateTo);\n    let dateFrom: Date, dateTo: Date;\n\n    if (hasExplicitDates) {\n      dateFrom = new Date(config.dateFrom);\n      dateTo = new Date(config.dateTo);\n    } else {\n      const intervalDef = INTERVALS.find(i => i.id === (config.interval as Interval['id']));\n      dateTo = new Date();\n      dateFrom = new Date(dateTo.getTime() - (intervalDef?.timespanInMs || 60 * 60 * 1000));\n    }\n\n    this.timeProps = {\n      dateFrom,\n      dateTo,\n      interval: config?.interval as any,\n      realtime: config?.realtime,\n      aggregation: config?.realtime ? null : config?.aggregation\n    };\n\n    this.alarms = config.alarmsEventsConfigs.filter(ae => ae.timelineType === 'ALARM');\n    this.events = config.alarmsEventsConfigs.filter(ae => ae.timelineType === 'EVENT');\n\n    const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n\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_EXPLORER_CONFIG_CHANGE,\n        ...configSummaryGS\n      }\n    );\n\n    // Ensure realtime properties and dates are set correctly\n    // formGroup.valueChanges subscription will update this.config\n    this.formGroup.patchValue({\n      alarms: this.alarms,\n      events: this.events,\n      ...config,\n      dateFrom,\n      dateTo,\n      isAutoRefreshEnabled: config.realtime ? true : config.isAutoRefreshEnabled || false,\n      refreshInterval: config.realtime ? 5000 : config.refreshInterval || 0\n    });\n  }\n\n  onSliderZoom(timeProps: { dateFrom: Date; dateTo: Date; interval?: Interval['id'] }) {\n    this.isHandlingZoom = true;\n\n    // Update main form - pause realtime and disable auto-refresh\n    this.formGroup.patchValue({\n      ...timeProps,\n      realtime: false,\n      isAutoRefreshEnabled: false,\n      refreshInterval: 0\n    });\n\n    // Update timeProps binding\n    this.timeProps = {\n      dateFrom: new Date(timeProps.dateFrom.getTime()),\n      dateTo: new Date(timeProps.dateTo.getTime()),\n      interval: 'custom',\n      realtime: false\n    };\n\n    // Sync timeContext state\n    if (this.timeContext) {\n      this.timeContext.stopRealtime();\n      this.timeContext.form.patchValue(\n        {\n          currentDateContextFromDate: timeProps.dateFrom.toISOString(),\n          currentDateContextToDate: timeProps.dateTo.toISOString(),\n          temporaryUserSelectedFromDate: timeProps.dateFrom.toISOString(),\n          temporaryUserSelectedToDate: timeProps.dateTo.toISOString(),\n          currentDateContextInterval: 'custom',\n          realtime: false\n        },\n        { emitEvent: false }\n      );\n      this.timeContext.form.controls.aggregation.enable();\n    }\n\n    this.isHandlingZoom = false;\n  }\n\n  updateTimeRangeOnRealtime(\n    timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n  ): void {\n    this.formGroup.patchValue(timeRange, { emitEvent: false });\n  }\n\n  updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n    this.alarms = alarmsEventsConfigs.filter(this.isAlarm);\n    this.events = alarmsEventsConfigs.filter(this.isEvent);\n    this.hasAtLeastOneAlarmActive = this.hasActiveAlarms(this.alarms);\n  }\n\n  handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n    const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n    const dpMatch = this.config.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n    if (!dpMatch) {\n      return;\n    }\n    this.datapointsOutOfSync.set(dpMatch, true);\n  }\n\n  updateActiveDatapoints(activeDatapoints: KPIDetails[]): void {\n    this.activeDatapoints = [...activeDatapoints];\n  }\n\n  updateAggregatedSliderDatapoint(selectedDatapoint: SelectedDatapoint | null): void {\n    const aggregatedDatapoint = this.chartHelpersService.findMatchingDatapoint(\n      this.activeDatapoints,\n      selectedDatapoint\n    );\n    this.formGroup.patchValue({ aggregatedDatapoint });\n  }\n\n  async createNewReportWithWidget(): Promise<void> {\n    const modal = this.bsModalService.show(CreateNewReportModalComponent, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      class: 'modal-sm'\n    });\n    const content = modal.content as CreateNewReportModalComponent;\n    try {\n      const report = await content.result;\n      const reportDashboard = await this.dataExplorerService.fetchReportDashboard(report.id);\n      const widget = this.createWidgetConfig();\n      reportDashboard.c8y_Dashboard.children = { [widget.id]: widget };\n      await this.contextDashboardService.update(reportDashboard);\n      this.alertService.success(gettext('Report and widget created.'));\n    } catch (e) {\n      if (e) {\n        this.alertService.danger(gettext('Failed to create report and widget.'));\n        this.alertService.addServerFailure(e);\n      }\n      // else: modal was closed\n    }\n  }\n\n  async sendAsWidgetToReport(): Promise<void> {\n    const modal = this.bsModalService.show(SendAsWidgetToReportModal, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      class: 'modal-sm'\n    });\n    const content = modal.content as SendAsWidgetToReportModal;\n    try {\n      const reports = await content.result;\n      const selectedReports = Object.entries(reports).filter(([, value]) => value);\n      const reportPromises = selectedReports.map(async ([reportId]) => {\n        const reportDashboard = await this.dataExplorerService.fetchReportDashboard(reportId);\n        const widget = this.createWidgetConfig();\n        const children = reportDashboard.c8y_Dashboard.children || {};\n        reportDashboard.c8y_Dashboard.children = { ...children, [widget.id]: widget };\n        await this.contextDashboardService.update(reportDashboard);\n      });\n\n      await Promise.all(reportPromises);\n\n      this.alertService.success(gettext('Widget created.'));\n    } catch (e) {\n      if (e) {\n        this.alertService.danger(gettext('Failed to create widget.'));\n        this.alertService.addServerFailure(e);\n      }\n      // else: modal was closed\n    }\n  }\n\n  async sendAsWidgetToDashboard(): Promise<void> {\n    const modal = this.bsModalService.show(SendAsWidgetToDashboardModal, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      class: 'modal-sm',\n      initialState: {\n        contextAsset: this.contextAsset\n      }\n    });\n    const content = modal.content as SendAsWidgetToDashboardModal;\n    try {\n      const dashboards = await content.result;\n      const selectedDashboards = Object.entries(dashboards).filter(([, value]) => value);\n      const dashboardPromises = selectedDashboards.map(async ([dashboardId]) => {\n        const dashboard = await this.dataExplorerService.fetchContextDashboard(\n          dashboardId,\n          this.contextAsset as IManagedObject\n        );\n        const widget = this.createWidgetConfig();\n        const children = dashboard.c8y_Dashboard.children || {};\n        dashboard.c8y_Dashboard.children = { ...children, [widget.id]: widget };\n        await this.contextDashboardService.update(dashboard);\n      });\n\n      await Promise.all(dashboardPromises);\n      this.alertService.success(gettext('Widget created.'));\n    } catch (e) {\n      if (e) {\n        this.alertService.danger(gettext('Failed to create widget.'));\n        this.alertService.addServerFailure(e);\n      }\n      // else: modal was closed\n    }\n  }\n\n  /**\n   * DEPRECATED: to be removed when there is another way to identify time series migration.\n   * This method checks if the tenant is migrated to time series by making a call to measurement detail endpoint.\n   * If the endpoint returns 405, it means the tenant is migrated. This is a workaround for now until we have a\n   * better way to identify time series migration.\n   */\n  private async detectTimeSeriesMigration(firstDp: KPIDetails): Promise<boolean> {\n    const targetId = firstDp?.__target?.id;\n\n    if (!targetId) {\n      return false;\n    }\n\n    try {\n      await this.measurementService.detail(targetId);\n      return false;\n    } catch (err: any) {\n      return err?.res?.status === 405;\n    }\n  }\n\n  private isActualDate(val: string | Date | number): boolean {\n    if (!val) return false;\n\n    const date = new Date(val);\n    return date instanceof Date && !isNaN(date.getTime());\n  }\n\n  private isAlarm(item: AlarmOrEventExtended): item is AlarmDetailsExtended {\n    return item.timelineType === 'ALARM';\n  }\n\n  private isEvent(item: AlarmOrEventExtended): item is EventDetailsExtended {\n    return item.timelineType === 'EVENT';\n  }\n\n  private hasActiveAlarms(alarms: AlarmDetailsExtended[]): boolean {\n    return alarms.length > 0 && alarms.some(alarm => alarm.__active);\n  }\n\n  private checkForMatchingDatapoints(): void {\n    const allMatch = this.config?.alarmsEventsConfigs?.every(ae =>\n      this.formGroup.value.datapoints?.some(dp => dp.__target?.id === ae.__target?.id)\n    );\n\n    queueMicrotask(() => {\n      this.alarmsOrEventsHaveNoMatchingDps = !allMatch;\n    });\n  }\n\n  private updateExportConfig(): void {\n    const datapointDetails = this.config.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.config.aggregation,\n        dateFrom: new Date(this.config.dateFrom).toISOString(),\n        dateTo: new Date(this.config.dateTo).toISOString(),\n        datapointDetails: datapointDetails\n      };\n    }\n  }\n\n  private initializeContextSourceId(): IIdentified {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if ([ViewContext.Device, ViewContext.Group].includes(context)) {\n      return contextData;\n    }\n  }\n\n  private createWidgetConfig(): any {\n    return {\n      name: gettext('Data points graph'),\n      title: gettext('Data points'),\n      _width: 24,\n      _height: 12,\n      config: this.config\n    };\n  }\n\n  private initForm() {\n    return this.formBuilder.group({\n      datapoints: [this.config.datapoints || []],\n      aggregatedDatapoint: [this.config.aggregatedDatapoint || null],\n      alarms: [this.alarms || []],\n      events: [this.events || []],\n      dateFrom: [this.config.dateFrom || (null as Date)],\n      dateTo: [this.config.dateFrom || (null as Date)],\n      interval: [this.config.interval || 'hours'],\n      aggregation: [this.config.aggregation || (null as aggregationType | null)],\n      realtime: [this.config.realtime || false],\n      isAutoRefreshEnabled: [this.config.isAutoRefreshEnabled || false],\n      refreshInterval: [this.config.refreshInterval || 5000],\n      displayMarkedLine: [true, []],\n      displayMarkedPoint: [true, []],\n      mergeMatchingDatapoints: [true, []],\n      forceMergeDatapoints: [false, []],\n      setYaxisStartToZero: [false, []],\n      smoothLines: [false, []],\n      showLabelAndUnit: [true, []],\n      showSlider: [true, []],\n      displayDateSelection: [false, []],\n      yAxisSplitLines: [false],\n      xAxisSplitLines: [false],\n      numberOfDecimalPlaces: [2, [Validators.required, Validators.min(0), Validators.max(10)]],\n      showAdvancedChartOptions: [false]\n    });\n  }\n}\n","<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n  #timeContext\n  (contextChange)=\"onTimeContextChange($event)\"\n  [changedDateContext]=\"timeProps\"\n  [timeContext]=\"(settings$ | async)?.timeContext\"\n  [timePickerConfig]=\"TIME_PICKER_CONFIG\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n  <c8y-workspace-config\n    [updatedConfig]=\"config\"\n    [silent]=\"(settings$ | async)?.hideWorkspaceConfig\"\n    (onConfigurationChange)=\"onConfigurationChange($event)\"\n  ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n@if (!(settings$ | async)?.hideExportSelector) {\n  <c8y-action-bar-item [placement]=\"'right'\">\n    <c8y-datapoints-export-selector\n      [exportConfig]=\"exportConfig\"\n      [containerClass]=\"'d-contents'\"\n    ></c8y-datapoints-export-selector>\n  </c8y-action-bar-item>\n}\n\n@if (!(settings$ | async)?.hideWidgetActions) {\n  @if (contextAsset) {\n    <c8y-action-bar-item\n      [placement]=\"'more'\"\n      [priority]=\"-2000\"\n    >\n      <button\n        class=\"btn btn-link\"\n        title=\"{{ 'Send as widget to dashboard' | translate }}\"\n        type=\"button\"\n        data-cy=\"widgets-dashboard--copy-dashboard\"\n        (click)=\"sendAsWidgetToDashboard()\"\n        [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n      >\n        <i c8yIcon=\"th\"></i>\n        <span>{{ 'Send as widget to dashboard' | translate }}</span>\n      </button>\n    </c8y-action-bar-item>\n  } @else {\n    <c8y-action-bar-item\n      [placement]=\"'more'\"\n      [priority]=\"-2000\"\n    >\n      <button\n        title=\"{{ 'Send as widget to report' | translate }}\"\n        type=\"button\"\n        data-cy=\"widgets-dashboard--copy-dashboard\"\n        (click)=\"sendAsWidgetToReport()\"\n        [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n      >\n        <i c8yIcon=\"c8y-reports\"></i>\n        <span>{{ 'Send as widget to report' | translate }}</span>\n      </button>\n    </c8y-action-bar-item>\n\n    <c8y-action-bar-item\n      [placement]=\"'more'\"\n      [priority]=\"-2000\"\n    >\n      <button\n        title=\"{{ 'Create a new report with widget' | translate }}\"\n        type=\"button\"\n        data-cy=\"widgets-dashboard--copy-dashboard\"\n        (click)=\"createNewReportWithWidget()\"\n        [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n      >\n        <i c8yIcon=\"c8y-reports\"></i>\n        <span>{{ 'Create a new report with widget' | translate }}</span>\n      </button>\n    </c8y-action-bar-item>\n  }\n}\n\n<div class=\"content-fullpage d-grid grid__col--auto-360 gap-24\">\n  <div class=\"d-col gap-16\">\n    <c8y-charts\n      class=\"flex-grow data-point-explorer\"\n      #chart\n      [config]=\"config\"\n      [alerts]=\"alerts\"\n      [chartViewContext]=\"chartViewContext\"\n      (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n      (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n      (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n      (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n      (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n      (updateActiveDatapoints)=\"updateActiveDatapoints($event)\"\n      (updateAggregatedSliderDatapoint)=\"updateAggregatedSliderDatapoint($event)\"\n    ></c8y-charts>\n    <form\n      class=\"m-l-48 m-r-48\"\n      [formGroup]=\"formGroup\"\n    >\n      <div class=\"d-grid-lg grid__col--4-4-4 gap-16\">\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Axis' | translate }}</legend>\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-dot m-l-8\"\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              [tooltip]=\"\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              container=\"body\"\n              type=\"button\"\n              (click)=\"$event.stopPropagation()\"\n              [adaptivePosition]=\"false\"\n            >\n              <i\n                class=\"text-info\"\n                c8yIcon=\"info\"\n              ></i>\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 data points into single axis</span>\n            <button\n              class=\"btn-dot m-l-8\"\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              [tooltip]=\"\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              container=\"body\"\n              type=\"button\"\n              (click)=\"$event.stopPropagation()\"\n              [adaptivePosition]=\"false\"\n            >\n              <i\n                class=\"text-info\"\n                c8yIcon=\"info\"\n              ></i>\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-dot m-l-8\"\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              container=\"body\"\n              type=\"button\"\n              (click)=\"$event.stopPropagation()\"\n              [adaptivePosition]=\"false\"\n            >\n              <i\n                class=\"text-info\"\n                c8yIcon=\"info\"\n              ></i>\n            </button>\n          </label>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Alarms & events' | translate }}</legend>\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Show vertical line when alarm occurs' | 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\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Show icon when alarm or event occurs' | translate\"\n          >\n            <input\n              name=\"displayMarkedPoint\"\n              type=\"checkbox\"\n              formControlName=\"displayMarkedPoint\"\n            />\n            <span></span>\n            <span>\n              {{\n                'Show icon when triggered`When alarms and events occur the icon will be shown`'\n                  | translate\n              }}\n            </span>\n            @if (alarmsOrEventsHaveNoMatchingDps) {\n              <button\n                class=\"btn-dot 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-info\"\n                  c8yIcon=\"info\"\n                ></i>\n              </button>\n            }\n          </label>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Chart' | translate }}</legend>\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        </fieldset>\n      </div>\n    </form>\n  </div>\n  <div class=\"card inner-scroll bg-level-1\">\n    <form\n      class=\"bg-inherit\"\n      [formGroup]=\"formGroup\"\n    >\n      <c8y-datapoint-selection-list\n        class=\"bg-inherit separator-top d-block\"\n        name=\"datapoints\"\n        [minActiveCount]=\"0\"\n        [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n        [config]=\"{ contextAsset: contextAsset }\"\n        formControlName=\"datapoints\"\n        [allowDragAndDrop]=\"true\"\n      ></c8y-datapoint-selection-list>\n\n      <c8y-alarm-event-selection-list\n        class=\"bg-inherit\"\n        name=\"alarms\"\n        formControlName=\"alarms\"\n        [timelineType]=\"'ALARM'\"\n        [datapoints]=\"config.datapoints\"\n      ></c8y-alarm-event-selection-list>\n\n      <c8y-alarm-event-selection-list\n        class=\"bg-inherit\"\n        name=\"events\"\n        formControlName=\"events\"\n        [timelineType]=\"'EVENT'\"\n        [datapoints]=\"config.datapoints\"\n      ></c8y-alarm-event-selection-list>\n\n      <div class=\"p-l-16 p-r-16 form-group p-b-16\">\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    </form>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","map","i4","i5","FormsModule","i7"],"mappings":"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"}