{"version":3,"file":"c8y-ngx-components-alarms.mjs","sources":["../../alarms/alarm-details-custom-button/alarm-details-button.service.ts","../../alarms/alarm-details-custom-button/alarm-details-button.pipe.ts","../../alarms/alarm-details.service.ts","../../alarms/alarms-activity-tracker.service.ts","../../alarms/alarms.model.ts","../../alarms/alarms-view.service.ts","../../alarms/audit-changes-message.pipe.ts","../../alarms/ng1-smart-rules-upgrade.service.ts","../../alarms/alarm-details.component.ts","../../alarms/alarm-details.component.html","../../alarms/alarm-empty.component.ts","../../alarms/alarm-empty.component.html","../../alarms/alarm-info.component.ts","../../alarms/alarm-info.component.html","../../alarms/alarm-list-custom-indicator/alarm-list-indicator.service.ts","../../alarms/alarm-list-custom-indicator/alarm-list-indicator.pipe.ts","../../alarms/alarm-severities-to-title.pipe.ts","../../alarms/alarm-severity-to-icon.pipe.ts","../../alarms/alarm-severity-to-icon-class.pipe.ts","../../alarms/alarm-severity-to-label.pipe.ts","../../alarms/alarm-status-to-icon.pipe.ts","../../alarms/alarm-status-to-label.pipe.ts","../../alarms/alarms-filter.component.ts","../../alarms/alarms-filter.component.html","../../alarms/alarms-icon.component.ts","../../alarms/alarms-icon.component.html","../../alarms/alarms-interval-refresh.component.ts","../../alarms/alarms-interval-refresh.component.html","../../alarms/alarms-list.component.ts","../../alarms/alarms-list.component.html","../../alarms/alarms-date-filter.component.ts","../../alarms/alarms-date-filter.component.html","../../alarms/alarms-type-filter.component.ts","../../alarms/alarms-type-filter.component.html","../../alarms/alarms.component.ts","../../alarms/alarms.component.html","../../alarms/alarms.helper.ts","../../alarms/alarms.module.ts","../../alarms/alarms.guard.ts","../../alarms/alarms-navigation.factory.ts","../../alarms/c8y-ngx-components-alarms.ts"],"sourcesContent":["import { IAlarm, IManagedObject } from '@c8y/client';\nimport { combineLatest, Observable } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { PluginsResolveService, ServiceRegistry } from '@c8y/ngx-components';\nimport { AlarmDetailsButton } from '../alarms.model';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\n/**\n * A service to retrieve custom buttons for the alarm details view.\n */\nexport class AlarmDetailsButtonService {\n  constructor(\n    private serviceRegistry: ServiceRegistry,\n    private pluginsResolver: PluginsResolveService\n  ) {}\n\n  get$(alarm: IAlarm, source: IManagedObject): Observable<AlarmDetailsButton[]> {\n    const providers$ = this.pluginsResolver.allPluginsLoaded$.pipe(\n      filter(Boolean),\n      map(() => {\n        return this.serviceRegistry.get('alarmDetailsButton');\n      })\n    );\n\n    return providers$.pipe(\n      switchMap(providers => {\n        const observables$ = providers.map(provider =>\n          provider.getAlarmDetailsButton$(alarm, source).pipe(startWith(false))\n        );\n        return combineLatest(observables$);\n      }),\n      map(indicators => {\n        return indicators.filter(Boolean) as AlarmDetailsButton[];\n      }),\n      map(indicators => sortBy(indicators, this.byPriority))\n    );\n  }\n\n  private byPriority(item: AlarmDetailsButton) {\n    if (item.priority === undefined) {\n      return 0;\n    }\n    return -item.priority;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAlarm, IManagedObject } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { AlarmDetailsButtonService } from './alarm-details-button.service';\nimport { AlarmDetailsButton } from '../alarms.model';\n\n@Pipe({\n  standalone: true,\n  name: 'alarmDetailsButton',\n  pure: true\n})\n/**\n * A pipe to provide custom buttons for the alarm details view.\n *\n * Will call `get$()` method of `AlarmDetailsButtonService` to get the custom buttons for the provided alarm.\n */\nexport class AlarmDetailsButtonPipe implements PipeTransform {\n  constructor(private alarmDetailsButtonService: AlarmDetailsButtonService) {}\n\n  transform(alarm: IAlarm, source: IManagedObject): Observable<AlarmDetailsButton[]> {\n    return this.alarmDetailsButtonService.get$(alarm, source);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AlarmStatus, AlarmStatusType, IAuditRecord, IChange } from '@c8y/client';\nimport { Permissions } from '@c8y/ngx-components';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlarmDetailsService {\n  private readonly STATUS_ATTRIBUTE = 'status';\n\n  constructor(private permissions: Permissions) {}\n\n  /**\n   * Retrieves the username of the user who acknowledged an alarm status.\n   *\n   * This method checks if the provided status is equal to the acknowledged\n   * status. If it is not, or if the\n   * audit log is empty or the first log item does not contain a user, the\n   * method returns a default value ('--').\n   *\n   * If the status is the acknowledged status and the audit log contains valid\n   * records, the method iterates over the audit records in reverse order\n   * (starting from the most recent). It finds the first record where the\n   * status attribute (defined by this.STATUS_ATTRIBUTE) has been changed to\n   * the acknowledged status. The method then returns the username of the user\n   * who made this change.\n   *\n   * If no such change is found in the audit records, it returns the username\n   * from the first record of the audit log.\n   *\n   * There can be multiple audit logs with ACKNOWLEDGED status.\n   *\n   * @param status - The current status of the alarm.\n   * @param auditLog - An array of audit records to process.\n   * @returns The username of the user who acknowledged the status\n   *           or '--' if the status is not acknowledged or audit log is invalid.\n   */\n  getAcknowledgedBy(status: AlarmStatusType, auditLog: IAuditRecord[]): string {\n    let acknowledgedBy = '--';\n\n    if (status !== AlarmStatus.ACKNOWLEDGED || !auditLog || !auditLog[0]?.user) {\n      return acknowledgedBy;\n    }\n\n    acknowledgedBy = auditLog[0].user;\n\n    return auditLog.reduceRight((acc, auditLogItem) => {\n      const changes = Array.from(auditLogItem.changes || []);\n      const acknowledgedStatusChange = changes.find(\n        (change: IChange) =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.ACKNOWLEDGED\n      );\n      return (acknowledgedStatusChange && auditLogItem.user) || acc;\n    }, acknowledgedBy);\n  }\n\n  /**\n   * Calculates the acknowledge time from a list of audit records.\n   *\n   * This method iterates over the provided audit records in reverse order\n   * (starting from the most recent) and finds the first record where a\n   * specific status attribute (defined by this.STATUS_ATTRIBUTE) has been\n   * acknowledged. It then returns the creation time of that record.\n   *\n   * If no such record is found, the method returns the creation time of the\n   * first audit record. If the audit record list is empty, it returns null.\n   *\n   * There can be multiple audit logs with ACKNOWLEDGED status.\n   *\n   * @param auditLog - An array of audit records to process.\n   * @returns The creation time of the acknowledged record,\n   *           the creation time of the first record if no acknowledged record is found,\n   *           or null if the audit log is empty.\n   */\n  getAcknowledgeTime(auditLog: IAuditRecord[]): string | null {\n    const initialValue = auditLog.length ? auditLog[0].creationTime : null;\n\n    return auditLog.reduceRight((acc, auditLogItem) => {\n      const changes = Array.from(auditLogItem.changes || []);\n      const acknowledgedStatusChange = changes.find(\n        (change: IChange) =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.ACKNOWLEDGED\n      );\n      return acknowledgedStatusChange ? auditLogItem.creationTime : acc;\n    }, initialValue);\n  }\n\n  /**\n   * Retrieves the end time of an event from an audit log.\n   *\n   * The method processes the provided audit log to find the first instance\n   * (starting from the most recent record) where the status was changed to 'CLEARED'.\n   * It iterates over the audit records and\n   * checks the changes in each record to find this status change.\n   *\n   * If a record with the CLEARED status is found, the method returns the creation time\n   * of that record. If the entire audit log is processed without finding a CLEARED status,\n   * the creation time of the first audit log record is returned.\n   *\n   * If the audit log is empty or null, the method returns null.\n   *\n   * There can be only one audit log with CLEARED status.\n   *\n   * @param auditLog - An array of audit records to process.\n   * @returns The creation time of the record with the CLEARED status,\n   *          the creation time of the first record if no CLEARED status is found,\n   *          or null if the audit log is empty or null.\n   */\n  getEndTime(auditLog: IAuditRecord[]): string | null {\n    if (!auditLog || auditLog.length === 0) {\n      return null;\n    }\n\n    let latestClearedAuditTime = null;\n\n    for (const auditLogItem of auditLog) {\n      const changes = Array.from(auditLogItem.changes || []);\n      const clearedStatusChange = changes.find(\n        change =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.CLEARED\n      );\n\n      if (clearedStatusChange) {\n        if (!latestClearedAuditTime || auditLogItem.creationTime > latestClearedAuditTime) {\n          latestClearedAuditTime = auditLogItem.creationTime;\n        }\n      }\n    }\n\n    return latestClearedAuditTime || auditLog[0].creationTime;\n  }\n\n  checkIfHasAnyRoleAllowingToCreateSmartRule(): boolean {\n    const ROLES_ALLOWING_SMART_RULE_CREATION = [\n      [\n        Permissions.ROLE_INVENTORY_ADMIN,\n        Permissions.ROLE_INVENTORY_CREATE,\n        Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n        Permissions.ROLE_MANAGED_OBJECT_CREATE\n      ],\n      [Permissions.ROLE_CEP_MANAGEMENT_ADMIN, Permissions.ROLE_SMARTRULE_ADMIN]\n    ];\n\n    return (\n      this.permissions.hasAnyRole(ROLES_ALLOWING_SMART_RULE_CREATION[0]) &&\n      this.permissions.hasAnyRole(ROLES_ALLOWING_SMART_RULE_CREATION[1])\n    );\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\n@Injectable()\nexport class AlarmsActivityTrackerService implements OnDestroy {\n  isUserActive$ = new BehaviorSubject(true);\n  userSecondsSpendOnPage = 0;\n\n  private gainsightTimerId: ReturnType<typeof setInterval>;\n  private readonly INACTIVITY_THRESHOLD_SECONDS = 10;\n  private readonly ONE_SECOND_IN_MILLISECONDS = 1_000;\n  private gainsightInactivityTimeoutId: ReturnType<typeof setTimeout>;\n  private destroy$ = new Subject<void>();\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  setGainsightInterval(): void {\n    this.gainsightTimerId = setInterval(\n      () => this.userSecondsSpendOnPage++,\n      this.ONE_SECOND_IN_MILLISECONDS\n    );\n  }\n\n  clearGainsightInterval(): void {\n    clearInterval(this.gainsightTimerId);\n  }\n\n  resetInactivityTimer(): void {\n    this.isUserActive$.next(true);\n    clearTimeout(this.gainsightInactivityTimeoutId);\n    this.gainsightInactivityTimeoutId = setTimeout(() => {\n      this.isUserActive$.next(false); // Pause counting if the user is inactive\n    }, this.INACTIVITY_THRESHOLD_SECONDS * this.ONE_SECOND_IN_MILLISECONDS);\n  }\n\n  setupEventListenersForGainsight() {\n    const events = ['mousemove', 'keydown', 'click'];\n\n    events.forEach(event => {\n      fromEvent(window, event)\n        .pipe(debounceTime(30), takeUntil(this.destroy$))\n        .subscribe(() => this.resetInactivityTimer());\n    });\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n  AlarmStatus,\n  AlarmStatusSettings,\n  AlarmStatusType,\n  IAlarm,\n  IManagedObject,\n  Severity,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DateTimeContext, NavigatorNode, NavigatorNodeData, Route } from '@c8y/ngx-components';\nimport { QueryParamsHandling } from '@angular/router';\nimport type { SupportedIcons } from '@c8y/ngx-components/icon-selector/icons';\nimport { Observable } from 'rxjs';\nimport {\n  INTERVALS,\n  INTERVAL_TITLES,\n  AlarmFilterInterval\n} from '@c8y/ngx-components/interval-picker';\n\nexport interface AlarmsModuleConfig {\n  /**\n   * Indicates whether the application is a combination of Angular and AngularJS.\n   * @optional\n   */\n  hybrid?: boolean;\n\n  /**\n   * The root node of the navigator, which can be either a `NavigatorNode` or `NavigatorNodeData`.\n   * This serves as the entry point for navigation structure for Alarms views.\n   * @optional\n   */\n  rootNavigatorNode?: NavigatorNode | NavigatorNodeData;\n\n  /**\n   * An array of `Route` objects representing the navigation routes available.\n   * Each route defines a navigation path and its associated components related to Alarms.\n   * @optional\n   */\n  route?: Route[];\n\n  /**\n   * Additional providers to be included in the module configuration.\n   * Can be used to add custom navigator factories or other providers.\n   * @optional\n   */\n  additionalProviders?: any[];\n}\n\nexport const ALARMS_MODULE_CONFIG = new InjectionToken('AlarmsModuleConfig');\n\nexport type AlarmCount = { [key in SeverityType]: number };\n\nexport const ALARM_STATUS_ICON = {\n  ALERT_IDLE: 'c8y-alert-idle',\n  BELL_SLASH: 'bell-slash',\n  BELL: 'bell'\n} as const;\n\nexport type AlarmStatusIcon = (typeof ALARM_STATUS_ICON)[keyof typeof ALARM_STATUS_ICON];\n\n/**\n * A lookup table to map alarm statuses to corresponding icons.\n */\nexport const AlarmIconMap: Record<AlarmStatusType, AlarmStatusIcon> = {\n  [AlarmStatus.CLEARED]: ALARM_STATUS_ICON.ALERT_IDLE,\n  [AlarmStatus.ACKNOWLEDGED]: ALARM_STATUS_ICON.BELL_SLASH,\n  [AlarmStatus.ACTIVE]: ALARM_STATUS_ICON.BELL\n} as const;\n\nexport const ALARM_SEVERITY_ICON = {\n  CIRCLE: 'circle',\n  HIGH_PRIORITY: 'high-priority',\n  WARNING: 'warning',\n  EXCLAMATION_CIRCLE: 'exclamation-circle'\n} as const;\n\nexport const HELP_ICON = 'help';\n\nexport type AlarmSeverityIcon = (typeof ALARM_SEVERITY_ICON)[keyof typeof ALARM_SEVERITY_ICON];\n/**\n * A lookup table to map alarm severity types to corresponding icons.\n */\nexport const ALARM_SEVERITY_ICON_MAP: Record<SeverityType, AlarmSeverityIcon> = {\n  [Severity.CRITICAL]: ALARM_SEVERITY_ICON.EXCLAMATION_CIRCLE,\n  [Severity.MAJOR]: ALARM_SEVERITY_ICON.WARNING,\n  [Severity.MINOR]: ALARM_SEVERITY_ICON.HIGH_PRIORITY,\n  [Severity.WARNING]: ALARM_SEVERITY_ICON.CIRCLE\n} as const;\n\nexport type AlarmListFormFilters = {\n  showCleared: boolean;\n  severityOptions: SeverityFilter;\n  selectedDates?: DateTimeContext;\n};\n\n/**\n * Extended interval titles with an additional title for the case when no date is selected.\n */\nexport const INTERVAL_TITLES_EXTENDED: Record<AlarmFilterInterval['id'], string> = {\n  ...INTERVAL_TITLES,\n  none: gettext('No date filter')\n};\n\nexport const INTERVALS_EXTENDED: AlarmFilterInterval[] = [\n  {\n    id: 'none',\n    title: gettext('No date filter')\n  },\n  ...INTERVALS\n];\n\nexport type WidgetTimeContextStateExtended = {\n  date: DateTimeContext;\n  interval: AlarmFilterInterval['id'];\n};\n\nexport type SelectedAlarm = IAlarm | null;\n\nexport const DEFAULT_ALARM_COUNTS: AlarmCount = { CRITICAL: 0, MAJOR: 0, MINOR: 0, WARNING: 0 };\n\nexport const DEFAULT_SEVERITY_VALUES: SeverityFilter = {\n  [Severity.CRITICAL]: true,\n  [Severity.MAJOR]: true,\n  [Severity.MINOR]: true,\n  [Severity.WARNING]: true\n};\n\nexport const DEFAULT_STATUS_VALUES: AlarmStatusSettings = {\n  [AlarmStatus.ACTIVE]: true,\n  [AlarmStatus.ACKNOWLEDGED]: true,\n  [AlarmStatus.CLEARED]: true\n};\n\nexport const ALARMS_PATH = 'alarms';\n\nexport type CustomFragment = {\n  [key: string]: unknown;\n};\n\n/**\n * Default properties of a alarm. Used to extract the custom properties from a Alarm object.\n */\nexport const ALARM_DEFAULT_PROPERTIES = [\n  'severity',\n  'source',\n  'type',\n  'time',\n  'text',\n  'id',\n  'status',\n  'count',\n  'name',\n  'history',\n  'self',\n  'creationTime',\n  'firstOccurrenceTime',\n  'lastUpdated'\n] as const satisfies ReadonlyArray<keyof IAlarm>;\n\nexport const THROTTLE_REALTIME_REFRESH = 1_000;\n\n/**\n * Represents the navigation options for an alarm component.\n */\nexport type AlarmNavigationOptions = {\n  /**\n   * Defines if the alarm should navigate to a detail view when clicked.\n   */\n  allowNavigationToAlarmsView: boolean;\n  /**\n   * Defines if the component should try to determine the context to navigate\n   * to the correct alarm detail view or not. If set to true, the component will\n   * not try to determine the context and will always navigate to the all alarms view.\n   */\n  alwaysNavigateToAllAlarms: boolean;\n  /**\n   * Defines if the cleared query parameter should be included in the navigation if\n   * the alarm is cleared.\n   */\n  includeClearedQueryParams: boolean;\n  /**\n   * Determines how query parameters should be handled during navigation.\n   * This property can be set to one of three values:\n   *\n   * - `\"merge\"` : Merge new parameters with current parameters.\n   * - `\"preserve\"` : Preserve current parameters.\n   * - `\"\"` : Replace current parameters with new parameters. This is the default behavior.\n   */\n  queryParamsHandling: QueryParamsHandling;\n};\n\nexport interface AlarmDetailsButton {\n  additionalButtonClasses?: string;\n  title: string;\n  icon: SupportedIcons;\n  additionalIconClasses?: string;\n  label?: string;\n  disabled?: boolean;\n  /**\n   * Action to be executed when the button is clicked.\n   * @param alarm The alarm to apply this action to\n   * @returns A boolean or a promise that resolves to a boolean or to the updated alarm. If the result is true, a reload will be triggered. If the result is an alarm, the alarm will be updated with the new values.\n   */\n  action: (alarm: IAlarm) => boolean | Promise<boolean | IAlarm>;\n  priority?: number;\n}\n\nexport interface AlarmListIndicatorBase {\n  priority?: number;\n}\n\nexport interface AlarmListIndicatorIcon extends AlarmListIndicatorBase {\n  icon: SupportedIcons;\n  title: string;\n  class?: string;\n}\n\nexport type AlarmListIndicator = AlarmListIndicatorIcon;\n\nexport const PRODUCT_EXPERIENCE_ALARMS = {\n  EVENTS: {\n    ALARMS: 'Alarms'\n  },\n  COMPONENTS: {\n    ALARMS_FILTER: 'alarms-filter',\n    ALARMS_INTERVAL_REFRESH: 'alarms-interval-refresh',\n    ALARMS: 'alarms',\n    ALARMS_TYPE_FILTER: 'alarms-type-filter',\n    ALARM_DETAILS: 'alarm-details'\n  },\n  ACTIONS: {\n    APPLY_FILTER: 'applyFilter',\n    REMOVE_CHIP_FILTER: 'removeChipFilter',\n    APPLY_TYPE_FILTER: 'applyTypeFilter',\n    CREATE_SMART_RULE: 'createSmartRule',\n    ACKNOWLEDGE_ALARM: 'acknowledgeAlarm',\n    REACTIVATE_ALARM: 'reactivateAlarm',\n    CLEAR_ALARM: 'clearAlarm',\n    RELOAD_AUDIT_LOGS: 'reloadAuditLogs',\n    USER_SPEND_TIME_ON_COMPONENT: 'userSpendTimeOnComponent'\n  }\n} as const;\n\nexport type ReloadAlarmsListType = 'gainsightTypeFilters' | null;\n\nexport {};\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace CumulocityServiceRegistry {\n    interface SpecificExtensionKeys {\n      alarmDetailsButton: AlarmDetailsButtonProvider;\n      alarmListIndicator: AlarmListIndicatorProvider;\n    }\n\n    interface AlarmDetailsButtonProvider {\n      /**\n       * Determines whether the button should be shown for a given alarm.\n       * @param alarm The alarm for which to determine button visibility.\n       * @param source The managed object associated with the alarm.\n       * @returns The button details or false.\n       */\n      getAlarmDetailsButton$(\n        alarm: IAlarm,\n        source: IManagedObject\n      ): Observable<AlarmDetailsButton | false>;\n    }\n\n    interface AlarmListIndicatorProvider {\n      /**\n       * Determines whether the indicator should be shown for a given alarm.\n       * @param alarm The alarm for which to determine indicator visibility.\n       * @returns The indicator details or false.\n       */\n      getAlarmListIndicator$(alarm: IAlarm): Observable<AlarmListIndicator | false>;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router } from '@angular/router';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmQueryFilter,\n  AlarmService,\n  AlarmStatus,\n  AlarmStatusType,\n  IAlarm,\n  IResultList,\n  Severity,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ApplicationOptions,\n  ContextData,\n  ContextRouteService,\n  DateTimeContext,\n  OptionsService,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { DateTimeContextPickerService, TimeInterval } from '@c8y/ngx-components/global-context';\nimport { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';\nimport { Observable, Subject } from 'rxjs';\nimport { ALARMS_PATH, ReloadAlarmsListType } from './alarms.model';\n\n/**\n * Service for managing and retrieving alarms data within the alarms view.\n *\n * The `AlarmsViewService` provides functionality to interact with alarms,\n * including filtering, counting, and translation-related operations in an alarms view.\n *\n * This service relies on the `AlarmService` for fetching alarm data and the `OptionsService`\n * for configuring alarms view options.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlarmsViewService {\n  readonly ALARM_REFRESH_TYPE_KEY: keyof ApplicationOptions = 'alarmsRefreshType';\n  readonly DEFAULT_INTERVAL_VALUE = 30_000;\n  readonly DEFAULT_REFRESH_OPTION_VALUE = 'interval';\n  readonly DEFAULT_INTERVAL_VALUES = [5_000, 10_000, 15_000, 30_000, 60_000];\n  readonly REALTIME_UPDATE_ALARMS_MESSAGE = gettext('The list was updated, click to refresh.');\n\n  isIntervalEnabled$: Observable<boolean>;\n  reloadAlarmsList$ = new Subject<ReloadAlarmsListType>();\n  closeDetailsView$ = new Subject<void>();\n\n  private _isIntervalEnabled: Subject<boolean>;\n\n  constructor(\n    private alarmService: AlarmService,\n    private optionsService: OptionsService,\n    private dateTimeContextPickerService: DateTimeContextPickerService,\n    private router: Router,\n    private contextRouteService: ContextRouteService\n  ) {\n    if (this.isIntervalRefresh()) {\n      this._isIntervalEnabled = new Subject<boolean>();\n      this.isIntervalEnabled$ = this._isIntervalEnabled.asObservable();\n    }\n  }\n\n  /**\n   * Emits a subject to initialize the alarms reloading.\n   */\n  updateAlarmList(value: ReloadAlarmsListType = null): void {\n    this.reloadAlarmsList$.next(value);\n  }\n\n  /**\n   * Retrieves a list of alarms filtered by specified severities and other optional query filters.\n   *\n   * @param severities an array of severities to filter the alarms.\n   * @param showCleared flag indicating whether to show cleared alarms. Defaults to false.\n   * @param selectedDates an array of two dates to filter alarms by creation and last update dates.\n   * @param filter additional query filters for retrieving alarms.\n   *\n   * @returns A promise that resolves to a list of alarms satisfying the specified filters.\n   */\n  retrieveFilteredAlarms(\n    severities: SeverityType[],\n    showCleared = false,\n    selectedDates?: [Date, Date],\n    filter?: AlarmQueryFilter\n  ): Promise<IResultList<IAlarm>> {\n    const severitiesQuery = this.getSeverityQueryParameter(severities);\n    const statusesQuery = this.getStatusQueryParameter(showCleared);\n\n    const _filter: AlarmQueryFilter = {\n      pageSize: 50,\n      withTotalPages: true,\n      ...(severitiesQuery && { severity: severitiesQuery }),\n      ...(statusesQuery && { status: statusesQuery }),\n      ...(selectedDates && {\n        lastUpdatedFrom: selectedDates[0].toISOString(),\n        createdTo: selectedDates[1].toISOString()\n      }),\n      ...filter\n    };\n    return this.alarmService.list(_filter);\n  }\n\n  retrieveAlarmsByDate(dates: DateTimeContext) {\n    return this.alarmService.list({\n      lastUpdatedFrom: dates[0].toISOString(),\n      createdTo: dates[1].toISOString(),\n      pageSize: 50,\n      withTotalPages: true\n    });\n  }\n\n  /**\n   * Updates the state to enable or disable intervals.\n   * @param value - A boolean value to indicate whether to enable intervals.\n   */\n  updateIntervalState(value: boolean): void {\n    this._isIntervalEnabled?.next(value);\n  }\n\n  /**\n   * Fetches the count of alarms filtered by severity and clearance status.\n   *\n   * @param severity - The severity level to filter by (e.g., CRITICAL, MAJOR, etc.).\n   * @param showCleared - Whether or not to include cleared alarms in the count.\n   * @param filter - Additional filter criteria for alarms.\n   *\n   * @returns A promise that resolves to the number of alarms that match the filter criteria.\n   *\n   */\n  async getAlarmsCountBySeverity(\n    severity: SeverityType,\n    showCleared: boolean,\n    filter?: AlarmQueryFilter\n  ): Promise<number> {\n    const statusesQuery = this.getStatusQueryParameter(showCleared);\n    const _filter: AlarmQueryFilter = {\n      ...(severity && { severity: severity }),\n      ...(statusesQuery && { status: statusesQuery }),\n      ...filter\n    };\n    const { data } = await this.alarmService.count(_filter);\n\n    return data;\n  }\n\n  /**\n   * Retrieves the current alarms refresh type from the OptionsService\n   * and determines whether it is set to \"interval\".\n   *\n   * @returns `true` if the alarms refresh type is \"interval,\" otherwise `false`.\n   */\n  isIntervalRefresh(): boolean {\n    const value = this.optionsService.get(this.ALARM_REFRESH_TYPE_KEY, 'interval');\n    return value === 'interval';\n  }\n\n  /**\n   * Updates the list of selected severities based on the new severity filter.\n   *\n   * @param severityUpdates - The object representing the updates to each severity.\n   *\n   * @returns An array representing the updated selected severities.\n   */\n  updateSelectedSeverities(severityUpdates: SeverityFilter): SeverityType[] {\n    return (Object.keys(severityUpdates) as SeverityType[])\n      .filter(key => severityUpdates[key])\n      .map(key => key.toUpperCase() as SeverityType);\n  }\n\n  /**\n   * Clears all active alarms of the selected severities.\n   *\n   * This method clears all active alarms for the given list of severities by making bulk update calls. If no severities are selected, it defaults to using all available severities.\n   * It works by sending a series of update requests for each severity and returns a Promise that resolves with an object indicating if all alarms were resolved immediately.\n   *\n   * @param selectedSeverities An array of severities to be cleared. If not provided, all severities will be cleared.\n   * @param sourceId - Identifier for the source associated with the alarms to be cleared.\n   *\n   * @returns A Promise that resolves with an object with a flag `resolvedImmediately`. The flag is true if all alarms for all selected severities were cleared successfully; otherwise false.\n   *\n   * **Example**\n   * ```typescript\n   * const severitiesToClear: SeverityType[] = [Severity.MAJOR, Severity.MINOR];\n   *\n   * clearAllActiveAlarms(severitiesToClear).then(({ resolvedImmediately }) => {\n   *   if (resolvedImmediately) {\n   *     console.log('All selected alarms were cleared successfully.');\n   *   } else {\n   *     console.log('Some alarms could not be cleared.');\n   *   }\n   * });\n   * ```\n   *\n   * **Note**\n   * - The method uses the `alarmService.updateBulk` for each severity to clear the active alarms.\n   * - It may fetch the `sourceId` based on the view (if applicable) and include it as a query parameter in the update calls.\n   * - The method returns immediately but the returned Promise needs to have a `then` or `catch` method call to handle the result or error respectively.\n   * - Uses `Promise.all` to wait for all update requests to complete before resolving the final result.\n   */\n  async clearAllActiveAlarms(\n    selectedSeverities: SeverityType[],\n    sourceId: string | number\n  ): Promise<{ resolvedImmediately: boolean }> {\n    const severitiesToUpdate = selectedSeverities || Severity;\n\n    const promises = Object.values(severitiesToUpdate).map((severity: SeverityType) => {\n      const commonParams = { resolved: false, severity };\n\n      const parameters = sourceId\n        ? {\n            ...commonParams,\n            source: sourceId,\n            withSourceAssets: true,\n            withSourceDevices: true\n          }\n        : commonParams;\n\n      return this.alarmService.updateBulk({ status: AlarmStatus.CLEARED }, parameters);\n    });\n\n    const responses = await Promise.all(promises);\n    return {\n      resolvedImmediately: responses.every(res => res)\n    };\n  }\n\n  /**\n   * Returns the correct link based on the provided context data.\n   * @param contextData The context the navigation was triggered from.\n   * @param alarm The alarm to navigate to.\n   * @returns A link to be used as an url navigation.\n   */\n  getRouterLink(contextData?: ContextData, alarm?: IAlarm): string {\n    let detailUrl = `/${ALARMS_PATH}`;\n    if (alarm) {\n      detailUrl = `/${ALARMS_PATH}/${alarm.id}`;\n    }\n    if (!contextData) {\n      return detailUrl;\n    }\n\n    switch (contextData.context) {\n      case ViewContext.Device:\n        return `/device/${contextData.contextData.id}${detailUrl}`;\n      case ViewContext.Group:\n        return `/group/${contextData.contextData.id}${detailUrl}`;\n      case ViewContext.Simulators:\n        return `/simulators/${contextData.contextData.id}${detailUrl}`;\n      default:\n        return detailUrl;\n    }\n  }\n\n  /**\n   * Returns the correct array navigation.\n   * @param contextData The context the navigation was triggered from.\n   * @param alarm The alarm to navigate to.\n   * @returns A link to be used as a router.navigation.\n   */\n  getRouterNavigationArray(contextData?: ContextData, alarm?: IAlarm): string[] {\n    return this.getRouterLink(contextData, alarm).split('/').filter(Boolean);\n  }\n\n  /**\n   * Closes the details view and navigates based on the current route context,\n   * preserving existing query parameters.\n   */\n  async closeDetailsView(activatedRoute: ActivatedRoute | ActivatedRouteSnapshot): Promise<void> {\n    const contextData = this.contextRouteService.getContextData(activatedRoute);\n    await this.router.navigate(this.getRouterNavigationArray(contextData), {\n      queryParamsHandling: 'merge'\n    });\n    this.updateIntervalState(true);\n  }\n\n  /**\n   * Returns the correct from and to dates based on the selected interval\n   * @param intervalId the selected interval. E.g. 'none', 'hours', 'custom' ...\n   * @returns The calculated date context based on the selected interval.\n   */\n  getDateTimeContextByInterval(intervalId: AlarmFilterInterval['id']): DateTimeContext {\n    return this.dateTimeContextPickerService.getDateTimeContextByInterval(\n      intervalId as TimeInterval\n    );\n  }\n\n  /**\n   * Converts a given number of seconds into a formatted string representing hours, minutes, and seconds.\n   *\n   * @param totalSeconds - The total number of seconds to convert.\n   * @returns A string in the format \"HH:MM:SS\", where HH is hours, MM is minutes, and SS is seconds.\n   */\n  convertSecondsToTime(totalSeconds: number): string {\n    const hours = Math.floor(totalSeconds / 3600);\n    const minutes = Math.floor((totalSeconds % 3600) / 60);\n    const seconds = Math.floor(totalSeconds % 60);\n\n    const paddedHours = hours.toString().padStart(2, '0');\n    const paddedMinutes = minutes.toString().padStart(2, '0');\n    const paddedSeconds = seconds.toString().padStart(2, '0');\n\n    return `${paddedHours}:${paddedMinutes}:${paddedSeconds}`;\n  }\n\n  /**\n   * Creates a value for query parameter for filtering alarms by severity based on array of selected severities.\n   *\n   * @param severities - An array of alarm severity types to include in the filter.\n   * If the array is empty or undefined, no severity filter will be applied.\n   *\n   * @returns A comma-separated string of selected alarm severities,\n   * or null if no severities are provided.\n   */\n  private getSeverityQueryParameter(severities: SeverityType[]): string | null {\n    if (!severities || severities.length === 0) {\n      return;\n    }\n    if (severities.length === Object.keys(Severity).length) {\n      return;\n    }\n\n    return severities.join(',');\n  }\n\n  /**\n   * Creates a value for query parameter for filtering alarms by statuses based on showCleared option.\n   *\n   * @param showCleared - A flag indicating whether to include cleared statuses.\n   * If true, all statuses, including 'CLEARED', will be included; if false, 'CLEARED' will be excluded.\n   *\n   * @returns A comma-separated string of alarm statuses.\n   */\n  private getStatusQueryParameter(showCleared: boolean): string {\n    const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n    const filteredStatuses = showCleared\n      ? statuses\n      : statuses.filter(status => status !== 'CLEARED');\n    return filteredStatuses.join(',');\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAuditRecord } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * A pipe for transforming audit record data into localized messages.\n * It specifically addresses changes in the audit records, with an emphasis on status changes.\n */\n@Pipe({ name: 'auditChangesMessage' })\nexport class AuditChangesMessagePipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an IAuditRecord into a localized string message.\n   * If the record contains changes, and if the first change is related to the 'status' attribute,\n   * it formats a message indicating the status change. Otherwise, it returns a general activity message.\n   * Example when there is a status change: \"Alarm status changed from ACKNOWLEDGED to ACTIVE\".\n   * Example when record does not have a status attribute: \"Alarm updated\".\n   *\n   * @param record - The audit record to be transformed.\n   * @returns The localized message describing the audit record,\n   *                   particularly focusing on status changes if applicable.\n   */\n  transform(record: IAuditRecord): string {\n    const firstItem = !!record.changes && Array.from(record.changes)[0];\n    if (!firstItem || firstItem.attribute !== 'status') {\n      const activityString = gettext(record.activity);\n      return this.translateService.instant(activityString);\n    }\n\n    const { newValue, previousValue } = firstItem;\n\n    const message = gettext(`Alarm status changed from {{ previousValue }} to {{ newValue }}`);\n\n    return this.translateService.instant(message, {\n      previousValue: this.translateService.instant(previousValue),\n      newValue: this.translateService.instant(newValue)\n    });\n  }\n}\n","/**\n * This service is a duplicate of smart-rules-service with slight name change.\n * Duplicating allows to pass 'Verify App tutorial' job.\n * Name renames allows to pass 'Reusable build codex' job.\n * Overall this service is considered as a workaround.\n * In ticket MTM-58985 we will investigate if it's possible to remove this service\n * along with making failing jobs pass.\n */\nexport abstract class Ng1SmartRulesUpgradeService {\n  abstract permissionsCfgs;\n  abstract addNewForOutputOperationWithUI(operation);\n  abstract addNewForInputAlarmAndOutputUserWithUI(alarm, user);\n}\n\nexport function SmartRulesUpgradeServiceFactory(injector: any) {\n  return injector.get('smartRulesSvc');\n}\n\nexport const smartRulesUpgradeServiceProvider = {\n  provide: Ng1SmartRulesUpgradeService,\n  useFactory: SmartRulesUpgradeServiceFactory,\n  deps: ['$injector']\n};\n","import { AsyncPipe, JsonPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  SimpleChanges\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmService,\n  AlarmStatus,\n  AlarmStatusType,\n  AuditService,\n  IAlarm,\n  IApplication,\n  IAuditRecord,\n  IManagedObject,\n  InventoryService,\n  IResultList,\n  Severity,\n  SEVERITY_LABELS\n} from '@c8y/client';\nimport {\n  AlertService,\n  AppStateService,\n  AssetLinkPipe,\n  C8yTranslatePipe,\n  ColorService,\n  DatePipe,\n  EmptyStateComponent,\n  ForOfDirective,\n  GainsightService,\n  HumanizeAppNamePipe,\n  IconDirective,\n  IconPanelComponent,\n  IconPanelSection,\n  InterAppService,\n  ListGroupComponent,\n  ListItemBodyComponent,\n  ListItemComponent,\n  ListItemTimelineComponent,\n  LoadingComponent,\n  MarkdownToHtmlPipe,\n  RelativeTimePipe,\n  SplitViewAction,\n  SplitViewDetailsActionsComponent,\n  SupportedAppKey,\n  SupportedApps\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { firstValueFrom, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { AlarmDetailsButtonPipe } from './alarm-details-custom-button/alarm-details-button.pipe';\nimport { AlarmDetailsService } from './alarm-details.service';\nimport { AlarmsActivityTrackerService } from './alarms-activity-tracker.service';\nimport { AlarmsViewService } from './alarms-view.service';\nimport {\n  ALARM_DEFAULT_PROPERTIES,\n  ALARM_SEVERITY_ICON_MAP,\n  ALARM_STATUS_ICON,\n  AlarmDetailsButton,\n  CustomFragment,\n  HELP_ICON,\n  PRODUCT_EXPERIENCE_ALARMS\n} from './alarms.model';\nimport { AuditChangesMessagePipe } from './audit-changes-message.pipe';\nimport { Ng1SmartRulesUpgradeService } from './ng1-smart-rules-upgrade.service';\n\n@Component({\n  selector: 'c8y-alarm-details',\n  templateUrl: './alarm-details.component.html',\n  providers: [AlarmsActivityTrackerService],\n  imports: [\n    IconDirective,\n    NgClass,\n    NgStyle,\n    RouterLink,\n    PopoverDirective,\n    EmptyStateComponent,\n    LoadingComponent,\n    ListGroupComponent,\n    ForOfDirective,\n    ListItemTimelineComponent,\n    ListItemComponent,\n    ListItemBodyComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    JsonPipe,\n    DatePipe,\n    HumanizeAppNamePipe,\n    AssetLinkPipe,\n    AlarmDetailsButtonPipe,\n    AuditChangesMessagePipe,\n    SplitViewDetailsActionsComponent,\n    IconPanelComponent,\n    NgTemplateOutlet,\n    MarkdownToHtmlPipe\n  ]\n})\nexport class AlarmDetailsComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() selectedAlarm: IAlarm;\n\n  /**\n   * Master switch to show/hide ALL alarm details sections (default: true).\n   * When `false`, all sections are hidden regardless of `hiddenSections`.\n   * When `true`, use `hiddenSections` for granular control of individual sections.\n   *\n   * Priority: `showSections` takes precedence over `hiddenSections`.\n   */\n  @Input() showSections = true;\n\n  /**\n   * Configure which individual sections to hide in the alarm details view.\n   * Only applies when `showSections=true`. Set a property to `true` to hide that section.\n   *\n   * @example\n   * ```html\n   * <!-- Hide specific sections -->\n   * <c8y-alarm-details [hiddenSections]=\"{ source: true, type: true, auditLogs: true }\">\n   * ```\n   */\n  @Input() hiddenSections?: {\n    status?: boolean;\n    severity?: boolean;\n    source?: boolean;\n    type?: boolean;\n    occurrences?: boolean;\n    occurrenceCount?: boolean;\n    firstOccurrence?: boolean;\n    lastOccurrence?: boolean;\n    customData?: boolean;\n    auditLogs?: boolean;\n  };\n\n  /**\n   * Master switch to show/hide ALL action buttons (default: true).\n   * When `false`, all actions are hidden regardless of `hiddenActions`.\n   * When `true`, use `hiddenActions` for granular control of individual actions.\n   *\n   * Priority: `showActions` takes precedence over `hiddenActions`.\n   */\n  @Input() showActions = true;\n\n  /**\n   * Configure which individual actions to hide in the alarm details view.\n   * Only applies when `showActions=true`. Set a property to `true` to hide that action.\n   *\n   * @example\n   * ```html\n   * <!-- Hide specific actions -->\n   * <c8y-alarm-details [hiddenActions]=\"{ createSmartRule: true }\">\n   * ```\n   */\n  @Input() hiddenActions?: {\n    reloadAuditLogs?: boolean;\n    acknowledgeReactivate?: boolean;\n    createSmartRule?: boolean;\n    clearAlarm?: boolean;\n  };\n\n  /**\n   * Whether to show external navigation links (default: true)\n   */\n  @Input() showExternalNavigation = true;\n\n  readonly ACKNOWLEDGED_STATUS_VALUE = AlarmStatus.ACKNOWLEDGED;\n  readonly ACTIVE_STATUS_VALUE = AlarmStatus.ACTIVE;\n  readonly CLEARED_STATUS_VALUE = AlarmStatus.CLEARED;\n  readonly ACKNOWLEDGE_LABEL = gettext('Acknowledge');\n  readonly REACTIVATE_LABEL = gettext('Reactivate');\n  readonly SEVERITY_LABELS = SEVERITY_LABELS;\n  readonly BELL_SLASH_ICON = ALARM_STATUS_ICON.BELL_SLASH;\n  readonly BELL_ICON = ALARM_STATUS_ICON.BELL;\n  readonly PRODUCT_EXPERIENCE_ALARMS = PRODUCT_EXPERIENCE_ALARMS;\n\n  /**\n   * Represents a Device Management application used by the user.\n   * Determines the accurate name and context path required for navigating to alarms of the current device\n   */\n  userDeviceManagementApp$: Observable<IApplication>;\n  /**\n   * Manages the visibility of the navigation link.\n   * If set to true, the link is visible, otherwise, it remains hidden.\n   */\n  showSourceNavigationLink$: Observable<boolean>;\n  deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n  readonly linkTitle = gettext('Open in {{ appName }}');\n  /**\n   * Contains audit logs, including the very first audit log record in the alarms' history.\n   * This ensures that the historical starting point of the audit logs is always included in the data set.\n   * Usually it's an 'Alarm created' audit log.\n   *\n   * Only used when audit logs exceed PAGE_SIZE.\n   *\n   * @private\n   */\n  private extendedAuditLogs: IResultList<IAuditRecord>;\n  private readonly PAGE_SIZE = 100;\n\n  /**\n   * Prevents the pipeline from failing for a tutorial application\n   * because it's a pure Angular application and doesn't support any\n   * AngularJS services.\n   */\n  isCreateSmartRulesButtonAvailable: boolean;\n  /**\n   * Property contains a 100 (see PAGE_SIZE) of most recent audit logs records.\n   */\n  auditLog: IResultList<IAuditRecord>;\n\n  isLoading: boolean;\n  /**\n   * Indicates when alarms status change was started (Acknowledge/Reactivate)\n   */\n  isAlarmStatusChanging = false;\n  /**\n   * Cached alarm actions to prevent constant re-rendering\n   */\n  alarmActions: SplitViewAction[] = [];\n\n  /**\n   * Cached alarm info sections to prevent constant re-rendering\n   */\n  alarmInfoSections: IconPanelSection[] = [];\n\n  /**\n   * Represents a value for a 'Status' section in details.\n   */\n  statusMessage: string;\n  /**\n   * The color of the alarm type.\n   */\n  typeColor: string;\n  /**\n   * Custom fragments of the selected alarm. If none exist, null is returned.\n   */\n  customFragments: CustomFragment = null;\n\n  selectedAlarmMO: IManagedObject;\n\n  private readonly USER_MINIMUM_SPEND_TIME_SECONDS_TO_TRIGGER_EVENT = 1;\n\n  private destroy$ = new Subject<void>();\n  constructor(\n    private alarmDetailsService: AlarmDetailsService,\n    private alarmService: AlarmService,\n    private alertService: AlertService,\n    private appState: AppStateService,\n    private auditService: AuditService,\n    private relativeTime: RelativeTimePipe,\n    @Optional() private ng1SmartRulesUpgradeService: Ng1SmartRulesUpgradeService,\n    private translateService: TranslateService,\n    private inventoryService: InventoryService,\n    private alarmsViewService: AlarmsViewService,\n    private colorService: ColorService,\n    private interAppService: InterAppService,\n    private gainsightService: GainsightService,\n    private alarmsActivityTrackerService: AlarmsActivityTrackerService\n  ) {}\n\n  async ngOnInit(): Promise<void> {\n    this.alarmsActivityTrackerService.setupEventListenersForGainsight();\n    this.alarmsActivityTrackerService.resetInactivityTimer();\n\n    this.alarmsActivityTrackerService.isUserActive$\n      .pipe(distinctUntilChanged(), takeUntil(this.destroy$))\n      .subscribe(isActive =>\n        isActive\n          ? this.alarmsActivityTrackerService.setGainsightInterval()\n          : this.alarmsActivityTrackerService.clearGainsightInterval()\n      );\n\n    const isSmartRulesServiceSubscribed = !!(await firstValueFrom(\n      this.interAppService.getApp$(SupportedApps.smartrules)\n    ));\n    const hasAnyRoleAllowingToCreateSmartRule =\n      this.alarmDetailsService.checkIfHasAnyRoleAllowingToCreateSmartRule();\n    this.isCreateSmartRulesButtonAvailable =\n      !!this.ng1SmartRulesUpgradeService &&\n      isSmartRulesServiceSubscribed &&\n      hasAnyRoleAllowingToCreateSmartRule;\n    this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n    this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n      this.deviceManagementAppKey\n    );\n    this.typeColor = await this.colorService.generateColor(this.selectedAlarm?.type);\n\n    // Initialize cached actions and info sections\n    if (this.selectedAlarm) {\n      this.updateAlarmActions();\n      this.updateAlarmInfoSections();\n    }\n  }\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.selectedAlarm && changes.selectedAlarm.currentValue) {\n      await this.reloadAuditLog(true, true);\n      await this.updateStatusMessage();\n      const { data } = await this.inventoryService.detail(this.selectedAlarm?.source?.id);\n      this.selectedAlarmMO = data;\n      this.customFragments = this.getCustomFragments(this.selectedAlarm);\n\n      // Update cached actions and info sections when alarm data changes\n      this.updateAlarmActions();\n      this.updateAlarmInfoSections();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (\n      this.alarmsActivityTrackerService.userSecondsSpendOnPage >=\n      this.USER_MINIMUM_SPEND_TIME_SECONDS_TO_TRIGGER_EVENT\n    ) {\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS, {\n        component: PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARM_DETAILS,\n        action: PRODUCT_EXPERIENCE_ALARMS.ACTIONS.USER_SPEND_TIME_ON_COMPONENT,\n        userSpendTime: this.alarmsViewService.convertSecondsToTime(\n          this.alarmsActivityTrackerService.userSecondsSpendOnPage\n        )\n      });\n    }\n    this.alarmsActivityTrackerService.clearGainsightInterval();\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  @HostListener('document:visibilitychange')\n  visibilityChange() {\n    if (document.hidden) {\n      this.alarmsActivityTrackerService.clearGainsightInterval();\n      return;\n    }\n    this.alarmsActivityTrackerService.setGainsightInterval();\n  }\n\n  createSmartRule(): void {\n    if (!this.isCreateSmartRulesButtonAvailable) {\n      return;\n    }\n    this.ng1SmartRulesUpgradeService.addNewForInputAlarmAndOutputUserWithUI(\n      this.selectedAlarm,\n      this.appState.currentUser.value\n    );\n  }\n\n  /**\n   * Navigates to a specific alarm source device based on the provided source.\n   *\n   * @param sourceId - The source id.\n   */\n  async goToAlarmSource(sourceId: string | number): Promise<void> {\n    const { data } = await this.alarmService.detail(sourceId);\n    await this.interAppService.navigateToApp(\n      this.deviceManagementAppKey,\n      `#/device/${data.source.id}/alarms`\n    );\n  }\n\n  /**\n   * Reloads audit log data asynchronously.\n   *\n   * This method fetches audit records using `getAlarmAuditRecords` and optionally updates the audit logs\n   * state in the component based on the `isSetAuditLogs` flag. It handles the loading state and potential\n   * errors during the fetch operation.\n   *\n   * @param isRevert - A boolean flag indicating whether to retrieve a 100 (see PAGE_SIZE) records (true)\n   *                   or only record, that chronologically will be the oldest one (false). Defaults to true.\n   *                   If set to false, it will set PAGE_SIZE to 1 and trigger a logic\n   *                   concatenating a most recent record with the very first one to\n   *                   calculate the alarm duration (change to CLEARED status).\n   *                   It's passed to the `getAlarmAuditRecords` method.\n   * @param isSetAuditLogs - A boolean flag to determine if the fetched audit logs should be set in the component state. Defaults to `false`.\n   * @returns A promise that resolves to a list of `IAuditRecord` objects.\n   */\n  async reloadAuditLog(\n    isRevert = true,\n    isSetAuditLogs = false\n  ): Promise<IResultList<IAuditRecord>> {\n    try {\n      this.isLoading = true;\n      // Update actions to show spinner on reload button\n      this.updateAlarmActions();\n\n      const auditLogs = await this.getAlarmAuditRecords(isRevert);\n\n      if (isSetAuditLogs) {\n        this.setAuditLogs(auditLogs);\n      }\n\n      return auditLogs;\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading = false;\n      // Update actions to remove spinner from reload button\n      this.updateAlarmActions();\n    }\n  }\n\n  async onUpdateDetails(status: AlarmStatusType): Promise<void> {\n    try {\n      this.isAlarmStatusChanging = true;\n      // Update actions when status changing flag is set (affects button disabled state)\n      this.updateAlarmActions();\n      await this.updateAlarmStatus(status);\n      await this.reloadAuditLog(true, true);\n      await this.updateStatusMessage();\n      this.updateLastUpdatedDate(this.auditLog.data[0]);\n      // Update info sections to reflect new status message\n      this.updateAlarmInfoSections();\n      if (status === AlarmStatus.CLEARED) {\n        this.alarmsViewService.closeDetailsView$.next();\n      }\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isAlarmStatusChanging = false;\n      // Update actions when status changing flag is cleared (re-enables button)\n      this.updateAlarmActions();\n    }\n  }\n\n  async detailsButtonAction(button: AlarmDetailsButton, alarm: IAlarm): Promise<void> {\n    const result = button.action(alarm);\n    let shouldReload: boolean | IAlarm = false;\n    if (result instanceof Promise) {\n      shouldReload = await result;\n    } else {\n      shouldReload = result;\n    }\n\n    if (shouldReload) {\n      let alarm: IAlarm;\n      if (shouldReload === true) {\n        const { data: updatedAlarm } = await this.alarmService.detail(this.selectedAlarm?.id);\n        alarm = updatedAlarm;\n      } else {\n        alarm = shouldReload;\n      }\n      this.alarmsViewService.updateAlarmList();\n\n      const previousValue = this.selectedAlarm;\n      this.selectedAlarm = alarm;\n      this.ngOnChanges({\n        selectedAlarm: {\n          currentValue: alarm,\n          previousValue,\n          firstChange: false,\n          isFirstChange: () => false\n        }\n      });\n    }\n  }\n\n  private async updateAlarmStatus(status: AlarmStatusType): Promise<void> {\n    const partiallyUpdatedAlarm: Partial<IAlarm> = { id: this.selectedAlarm?.id, status };\n    await this.alarmService.update(partiallyUpdatedAlarm);\n    const translatedStatusLabel = this.translateService.instant(ALARM_STATUS_LABELS[status]);\n    this.alertService.success(\n      this.translateService.instant(gettext('Alarm status changed to {{ status }}'), {\n        status: translatedStatusLabel.toUpperCase()\n      })\n    );\n    if (this.selectedAlarm) {\n      this.selectedAlarm.status = status;\n    }\n    this.alarmsViewService.updateAlarmList();\n\n    // Update cached actions and info sections when status changes\n    this.updateAlarmActions();\n    this.updateAlarmInfoSections();\n  }\n\n  /**\n   * Retrieves the audit log and appends the last audit record to it.\n   *\n   * This method fetches the existing audit log data and makes a deep copy of it. It then\n   * retrieves the last audit record and appends it to the copied audit log data. This is\n   * useful for scenarios where the most recent audit record needs to be included in the\n   * existing audit log data (calculating the CLEARED period).\n   *\n   * @returns A promise of `IResultList<IAuditRecord>`, which includes the\n   *          existing audit log data along with the last audit record appended.\n   * @private\n   */\n  private async auditLogWithFirstRecord(): Promise<IResultList<IAuditRecord>> {\n    const existingData = this.auditLog;\n    const copiedExistingData = cloneDeep(existingData);\n\n    const lastAuditRecord = await this.reloadAuditLog(false);\n    const lastRecord = lastAuditRecord.data[lastAuditRecord.data.length - 1];\n    copiedExistingData.data.push(lastRecord);\n    return copiedExistingData;\n  }\n\n  private setAuditLogs(auditLogs: IResultList<IAuditRecord>): void {\n    this.auditLog = auditLogs;\n  }\n\n  private updateLastUpdatedDate(updatedAuditRecords: IAuditRecord): void {\n    if (!updatedAuditRecords) {\n      return;\n    }\n\n    const { creationTime } = updatedAuditRecords;\n    if (this.selectedAlarm) {\n      this.selectedAlarm.lastUpdated = creationTime;\n    }\n  }\n\n  private getActiveStatusMessage(time: string): string {\n    return this.translateService.instant(gettext('ACTIVE`alarm`: triggered {{alarmTimeFromNow}}'), {\n      alarmTimeFromNow: this.relativeTime.transform(new Date(time))\n    });\n  }\n\n  private getAcknowledgedStatusMessage(status: AlarmStatusType, changeLog: IAuditRecord[]): string {\n    if (changeLog.length === 0) {\n      return this.translateService.instant(gettext('ACKNOWLEDGED`alarm`'));\n    }\n\n    const acknowledgedBy = this.alarmDetailsService.getAcknowledgedBy(status, changeLog);\n    const acknowledgeTime = this.alarmDetailsService.getAcknowledgeTime(changeLog);\n\n    if (acknowledgedBy) {\n      return this.translateService.instant(\n        gettext('ACKNOWLEDGED`alarm` by: {{ackBy}} {{ackTimeFromNow}}'),\n        {\n          ackBy: acknowledgedBy,\n          ackTimeFromNow: this.relativeTime.transform(new Date(acknowledgeTime))\n        }\n      );\n    }\n\n    return this.translateService.instant(gettext('ACKNOWLEDGED`alarm` {{ackTimeFromNow}}'), {\n      ackTimeFromNow: this.relativeTime.transform(new Date(acknowledgeTime))\n    });\n  }\n\n  private getClearedStatusMessage(auditLog: IAuditRecord[]): string {\n    if (auditLog.length === 0) {\n      return this.translateService.instant(gettext('CLEARED`alarm`'));\n    }\n\n    const differenceInMs = this.calculateAlarmDuration(auditLog);\n\n    return this.translateService.instant(\n      gettext('CLEARED`alarm`: was active for {{alarmDuration}}'),\n      {\n        alarmDuration: this.relativeTime.transform(differenceInMs, true)\n      }\n    );\n  }\n\n  /**\n   * Calculates the duration of an alarm based on audit log records.\n   *\n   * This method computes the duration of an alarm by finding the difference\n   * between the start and end times of the alarm. The start time is determined\n   * from the last record in the audit log, using the first available time field\n   * (`firstOccurrenceTime`, `time`, or `creationTime`). The end time is obtained\n   * from the `alarmDetailsService`.\n   *\n   * @param auditLog - An array of `IAuditRecord` objects representing the audit log records.\n   * @returns The duration of the alarm in milliseconds, or `null` if the end time is not available.\n   * @private\n   */\n  private calculateAlarmDuration(auditLog: IAuditRecord[]): number | null {\n    const firstAlarm = auditLog[auditLog.length - 1];\n    const startTime = firstAlarm.firstOccurrenceTime || firstAlarm.time || firstAlarm.creationTime;\n    const endTime = this.alarmDetailsService.getEndTime(auditLog);\n\n    if (!endTime) {\n      return null;\n    }\n\n    const startTimeToDate = new Date(startTime);\n    const endTimeToDate = new Date(endTime);\n\n    return endTimeToDate.getTime() - startTimeToDate.getTime();\n  }\n\n  /**\n   * Retrieves a list of audit records for a selected alarm.\n   *\n   * This method fetches audit records based on the specified properties, including\n   * the date, page size, whether to revert, the source alarm ID, and whether to include total pages.\n   *\n   * @param isRevert - A boolean flag indicating whether to retrieve a 100 (see PAGE_SIZE) records (true)\n   *                   or only record, that chronologically will be the oldest one (false). Defaults to true.\n   *                   If set to false, it will set PAGE_SIZE to 1 and trigger a logic\n   *                   concatenating a most recent record with the very first one to\n   *                   calculate the alarm duration (change to CLEARED status).\n   * @returns A Promise that resolves to an IResultList of IAuditRecord objects, representing the audit records.\n   * @async\n   * @private\n   */\n  private async getAlarmAuditRecords(isRevert = true): Promise<IResultList<IAuditRecord>> {\n    const properties = {\n      dateTo: new Date(Date.now()).toISOString(),\n      pageSize: isRevert ? this.PAGE_SIZE : 1,\n      revert: isRevert,\n      source: this.selectedAlarm?.id,\n      withTotalPages: true\n    };\n\n    return await this.auditService.list(properties);\n  }\n\n  private async updateStatusMessage(): Promise<void> {\n    switch (this.selectedAlarm?.status) {\n      case this.ACTIVE_STATUS_VALUE:\n        this.statusMessage = this.getActiveStatusMessage(this.selectedAlarm?.time);\n        break;\n      case this.ACKNOWLEDGED_STATUS_VALUE:\n        this.statusMessage = this.getAcknowledgedStatusMessage(\n          this.selectedAlarm?.status as unknown as AlarmStatusType,\n          this.auditLog.data\n        );\n        break;\n      case this.CLEARED_STATUS_VALUE:\n        if (this.hasReachedOrExceededPageSizeLimit()) {\n          this.extendedAuditLogs = await this.auditLogWithFirstRecord();\n          this.statusMessage = this.getClearedStatusMessage(this.extendedAuditLogs.data);\n          return;\n        }\n        this.statusMessage = this.getClearedStatusMessage(this.auditLog.data);\n        break;\n    }\n  }\n\n  private hasReachedOrExceededPageSizeLimit(): boolean {\n    return this.auditLog.data.length >= this.PAGE_SIZE;\n  }\n\n  private getCustomFragments(selectedAlarm: IAlarm): CustomFragment {\n    let customProperties = null;\n    for (const key in selectedAlarm) {\n      if (!ALARM_DEFAULT_PROPERTIES.find(k => k === key)) {\n        if (!customProperties) {\n          customProperties = {};\n        }\n        customProperties[key] = selectedAlarm[key];\n      }\n    }\n\n    return customProperties;\n  }\n\n  private updateAlarmActions(): void {\n    const actions: SplitViewAction[] = [];\n\n    // Reload audit logs action\n    if (!this.hiddenActions?.reloadAuditLogs) {\n      actions.push({\n        id: 'reloadAuditLogs',\n        label: gettext('Reload audit logs'),\n        icon: 'refresh',\n        iconClass: this.isLoading ? 'icon-spin' : '',\n        class: 'btn btn-default btn-sm',\n        disabled: false,\n        visible: true,\n        action: () => this.reloadAuditLog(true, true),\n        dataCy: 'c8y-alarms-details--reload-audit-logs',\n        title: gettext('Reload audit logs'),\n        productExperience: {\n          actionName: this.PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS,\n          actionData: {\n            component: this.PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARM_DETAILS,\n            action: this.PRODUCT_EXPERIENCE_ALARMS.ACTIONS.RELOAD_AUDIT_LOGS\n          }\n        }\n      });\n    }\n\n    // Acknowledge/Reactivate action\n    if (!this.hiddenActions?.acknowledgeReactivate) {\n      const isAcknowledged = this.selectedAlarm?.status === this.ACKNOWLEDGED_STATUS_VALUE;\n      actions.push({\n        id: 'acknowledgeReactivate',\n        label: isAcknowledged ? this.REACTIVATE_LABEL : this.ACKNOWLEDGE_LABEL,\n        icon: isAcknowledged ? this.BELL_ICON : this.BELL_SLASH_ICON,\n        class: 'btn btn-default btn-sm',\n        disabled:\n          this.selectedAlarm?.status === this.CLEARED_STATUS_VALUE || this.isAlarmStatusChanging,\n        visible: true,\n        action: () =>\n          this.onUpdateDetails(\n            isAcknowledged ? this.ACTIVE_STATUS_VALUE : this.ACKNOWLEDGED_STATUS_VALUE\n          ),\n        title: isAcknowledged ? this.REACTIVATE_LABEL : this.ACKNOWLEDGE_LABEL,\n        productExperience: {\n          actionName: this.PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS,\n          actionData: {\n            component: this.PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARM_DETAILS,\n            action: isAcknowledged\n              ? this.PRODUCT_EXPERIENCE_ALARMS.ACTIONS.REACTIVATE_ALARM\n              : this.PRODUCT_EXPERIENCE_ALARMS.ACTIONS.ACKNOWLEDGE_ALARM\n          }\n        }\n      });\n    }\n\n    // Create smart rule action\n    if (this.isCreateSmartRulesButtonAvailable && !this.hiddenActions?.createSmartRule) {\n      actions.push({\n        id: 'createSmartRule',\n        label: gettext('Create smart rule'),\n        icon: 'c8y-icon c8y-icon-smart-rules',\n        class: 'btn btn-default btn-sm',\n        disabled: false,\n        visible: true,\n        action: () => this.createSmartRule(),\n        dataCy: 'c8y-alarms-details--create-smart-rule',\n        title: gettext('Create smart rule'),\n        productExperience: {\n          actionName: this.PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS,\n          actionData: {\n            component: this.PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARM_DETAILS,\n            action: this.PRODUCT_EXPERIENCE_ALARMS.ACTIONS.CREATE_SMART_RULE\n          }\n        }\n      });\n    }\n\n    // Clear alarm action\n    if (!this.hiddenActions?.clearAlarm) {\n      actions.push({\n        id: 'clearAlarm',\n        label: gettext('Clear`alarm`'),\n        icon: 'c8y-alert-idle',\n        class: 'btn btn-default btn-sm',\n        disabled: this.selectedAlarm?.status === this.CLEARED_STATUS_VALUE,\n        visible: true,\n        action: () => this.onUpdateDetails(this.CLEARED_STATUS_VALUE),\n        dataCy: 'c8y-alarm-details--clear-alarm',\n        title: gettext('Clear`alarm`'),\n        productExperience: {\n          actionName: this.PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS,\n          actionData: {\n            component: this.PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARM_DETAILS,\n            action: this.PRODUCT_EXPERIENCE_ALARMS.ACTIONS.CLEAR_ALARM\n          }\n        }\n      });\n    }\n\n    this.alarmActions = actions;\n  }\n\n  private updateAlarmInfoSections(): void {\n    const sections: IconPanelSection[] = [];\n\n    // Status section\n    if (this.showSections && !this.hiddenSections?.status) {\n      const statusIcon = this.selectedAlarm?.status\n        ? this.selectedAlarm?.status === this.ACKNOWLEDGED_STATUS_VALUE\n          ? this.BELL_SLASH_ICON\n          : this.selectedAlarm?.status === this.ACTIVE_STATUS_VALUE\n            ? this.BELL_ICON\n            : 'c8y-alert-idle'\n        : 'help';\n\n      sections.push({\n        id: 'status',\n        label: gettext('Status'),\n        icon: statusIcon,\n        visible: true,\n        content: this.statusMessage,\n        dataCy: 'c8y-alarm-details--status-section-wrapper'\n      });\n    }\n\n    // Severity section\n    if (this.showSections && !this.hiddenSections?.severity) {\n      const alarmSeverityMapped = Severity[this.selectedAlarm?.severity?.toUpperCase()];\n      const severityIcon = ALARM_SEVERITY_ICON_MAP[alarmSeverityMapped] || HELP_ICON;\n\n      sections.push({\n        id: 'severity',\n        label: gettext('Severity'),\n        icon: severityIcon,\n        visible: true,\n        content: this.SEVERITY_LABELS[this.selectedAlarm?.severity],\n        dataCy: 'c8y-alarm-details--severity-section-wrapper',\n        iconClass: `stroked-icon status ${this.selectedAlarm?.severity?.toString().toLowerCase() || ''}`\n      });\n    }\n\n    this.alarmInfoSections = sections;\n  }\n}\n","@if (selectedAlarm) {\n  <div\n    class=\"card-header p-24 m-b-16 bg-component separator-bottom sticky-top\"\n    style=\"margin: 0 -24px\"\n  >\n    <h4\n      class=\"m-0\"\n      data-cy=\"c8y-alarm-details-title\"\n      [innerHTML]=\"selectedAlarm.text | translate | markdownToHtml | async\"\n    ></h4>\n  </div>\n}\n\n<c8y-icon-panel [sections]=\"alarmInfoSections\">\n  @if (showSections && !hiddenSections?.source) {\n    <div\n      class=\"col-xs-12 col-md-6 d-flex p-b-8\"\n      data-cy=\"c8y-alarm-details--source-wrapper\"\n    >\n      <div class=\"border-all fit-w d-flex\">\n        <div class=\"p-8\">\n          <i\n            class=\"icon-24 m-t-4 stroked-icon status\"\n            c8yIcon=\"contactless-payment\"\n          ></i>\n        </div>\n        <div class=\"p-t-8 p-b-8 p-r-8\">\n          <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n          <p class=\"small\">\n            <button\n              class=\"btn-link text-muted p-0 m-r-8 text-left\"\n              title=\"{{ selectedAlarm?.source?.name }}\"\n              type=\"button\"\n              routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n            >\n              <small class=\"icon-flex\">\n                <i c8yIcon=\"exchange\"></i>\n                {{ selectedAlarm?.source?.name || selectedAlarm?.source?.id }}\n              </small>\n            </button>\n            @if (showSourceNavigationLink$ | async) {\n              <button\n                class=\"btn-link p-0 text-left\"\n                title=\"{{\n                  linkTitle\n                    | translate\n                      : { appName: userDeviceManagementApp$ | async | humanizeAppName | async }\n                }}\"\n                type=\"button\"\n                (click)=\"goToAlarmSource(selectedAlarm?.id)\"\n                data-cy=\"alarm-details-device-management-link\"\n              >\n                {{ userDeviceManagementApp$ | async | humanizeAppName | async }}\n                <i c8yIcon=\"external-link\"></i>\n              </button>\n            }\n          </p>\n        </div>\n      </div>\n    </div>\n  }\n\n  @if (showSections && !hiddenSections?.type) {\n    <div\n      class=\"col-xs-12 col-md-6 d-flex p-b-8\"\n      data-cy=\"c8y-alarm-details--severity-type-wrapper\"\n    >\n      <div class=\"border-all fit-w d-flex\">\n        <div class=\"p-8\">\n          <span\n            class=\"circle-icon-wrapper\"\n            [ngStyle]=\"{ 'background-color': typeColor }\"\n          >\n            <i\n              class=\"stroked-icon\"\n              c8yIcon=\"bell\"\n            ></i>\n          </span>\n        </div>\n        <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n          <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n          <p\n            class=\"small text-truncate\"\n            title=\"{{ selectedAlarm?.type }}\"\n          >\n            <code>{{ selectedAlarm?.type }}</code>\n          </p>\n        </div>\n      </div>\n    </div>\n  }\n\n  <div class=\"col-xs-12 col-md-12 p-b-16\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4\"\n          c8yIcon=\"calendar\"\n          data-cy=\"c8y-alarm-details--last-updated-icon\"\n        ></i>\n      </div>\n      <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n        <div class=\"content-flex-50\">\n          @if (selectedAlarm?.count > 1 && showSections && !hiddenSections?.occurrenceCount) {\n            <div\n              class=\"col-4 p-b-8\"\n              data-cy=\"c8y-alarm-details--number-of-occurrences-wrapper\"\n            >\n              <p class=\"text-label-small m-b-0 m-r-8\">\n                {{ 'Number of occurrences' | translate }}\n              </p>\n              <p>\n                <span\n                  class=\"badge badge-info\"\n                  data-cy=\"c8y-alarm-details--badge\"\n                >\n                  {{ selectedAlarm?.count }}\n                </span>\n              </p>\n            </div>\n          }\n          @if (selectedAlarm?.count > 1 && showSections && !hiddenSections?.firstOccurrence) {\n            <div\n              class=\"col-4 p-b-8\"\n              data-cy=\"c8y-alarm-details--first-occurrence-wrapper\"\n            >\n              <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n              <p class=\"small\">\n                {{ selectedAlarm?.creationTime | c8yDate: 'medium' }}\n                <button\n                  class=\"btn-help btn-help--sm\"\n                  [attr.aria-label]=\"'Help' | translate\"\n                  popover=\"{{\n                    'Time in which the alarm was created. The time shown corresponds to the server\\'s time. Device time can be different from server time.'\n                      | translate\n                  }}\"\n                  placement=\"right\"\n                  triggers=\"focus\"\n                  container=\"body\"\n                  type=\"button\"\n                ></button>\n              </p>\n            </div>\n          }\n          @if (showSections && !hiddenSections?.lastOccurrence) {\n            <div\n              class=\"col-4 p-b-8\"\n              data-cy=\"c8y-alarm-details--last-updated-wrapper\"\n            >\n              <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last occurrence' | translate }}</p>\n              <p class=\"small\">\n                {{ selectedAlarm?.lastUpdated | c8yDate: 'medium' }}\n                <button\n                  class=\"btn-help btn-help--sm\"\n                  [attr.aria-label]=\"'Help' | translate\"\n                  popover=\"{{\n                    'Time in which the alarm was last updated. The time shown corresponds to the server\\'s time. Device time can be different from server time.'\n                      | translate\n                  }}\"\n                  placement=\"right\"\n                  triggers=\"focus\"\n                  container=\"body\"\n                  type=\"button\"\n                ></button>\n              </p>\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n\n  @if (customFragments && showSections && !hiddenSections?.customData) {\n    <div\n      class=\"col-xs-12 col-md-12 p-b-16\"\n      data-cy=\"c8y-alarm-details--custom-fragments-wrapper\"\n    >\n      <div class=\"border-all fit-w d-flex\">\n        <div class=\"p-8\">\n          <i\n            class=\"icon-24 text-gray-dark m-t-4\"\n            c8yIcon=\"outgoing-data\"\n          ></i>\n        </div>\n        <div\n          class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n          data-cy=\"alarm-details-custom-data\"\n        >\n          <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n          <pre><code>{{ customFragments | json }}</code></pre>\n        </div>\n      </div>\n    </div>\n  }\n</c8y-icon-panel>\n\n@if (showActions) {\n  <c8y-sv-details-actions [actions]=\"alarmActions\">\n    @for (button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async; track $index) {\n      <button\n        class=\"btn btn-default btn-sm no-swing\"\n        [title]=\"button.title | translate\"\n        type=\"button\"\n        [ngClass]=\"button.additionalButtonClasses\"\n        (click)=\"detailsButtonAction(button, selectedAlarm!)\"\n        [disabled]=\"button.disabled\"\n      >\n        <i\n          [c8yIcon]=\"button.icon\"\n          [ngClass]=\"button.additionalIconClasses\"\n        ></i>\n        @if (button.label) {\n          <span>{{ button.label | translate }}</span>\n        }\n      </button>\n    }\n  </c8y-sv-details-actions>\n}\n\n@if (showSections && !hiddenSections?.auditLogs) {\n  <ng-template #noAuditLogAvailable>\n    <div class=\"p-16\">\n      <c8y-ui-empty-state\n        [icon]=\"'archive'\"\n        [title]=\"'No audit logs found.' | translate\"\n        [horizontal]=\"true\"\n      ></c8y-ui-empty-state>\n    </div>\n  </ng-template>\n\n  <div>\n    <div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n    @if (isLoading || auditLog?.data.length) {\n      @if (isLoading) {\n        <c8y-loading></c8y-loading>\n      }\n\n      @if (!isLoading) {\n        <c8y-list-group data-cy=\"c8y-alarms-details--audit-logs\">\n          <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n            {{ log.creationTime | c8yDate: 'mediumDate' }}\n            {{ log.creationTime | c8yDate: 'mediumTime' }}\n            <c8y-li>\n              <c8y-li-body>\n                <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n                  {{ log | auditChangesMessage }}\n                </p>\n                <div class=\"c8y-list__item__footer\">\n                  @if (log.user) {\n                    <span class=\"m-r-16 small\">\n                      <span class=\"text-label-small\">\n                        {{ 'by`user`' | translate }}\n                      </span>\n                      {{ log.user }}\n                    </span>\n                  }\n                  <span class=\"small\">\n                    <span class=\"text-label-small\">\n                      {{ 'device time' | translate }}\n                    </span>\n                    {{ log.time | c8yDate: 'medium' }}\n                  </span>\n                </div>\n              </c8y-li-body>\n            </c8y-li>\n          </c8y-li-timeline>\n        </c8y-list-group>\n      }\n    } @else {\n      <ng-container [ngTemplateOutlet]=\"noAuditLogAvailable\"></ng-container>\n    }\n  </div>\n}\n","import { Component } from '@angular/core';\nimport { EmptyStateComponent, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'c8y-alarms-empty',\n  templateUrl: './alarm-empty.component.html',\n  imports: [EmptyStateComponent, C8yTranslatePipe]\n})\nexport class AlarmEmptyComponent {}\n","<div\n  class=\"p-24\"\n  data-cy=\"c8y-alarms-empty\"\n>\n  <c8y-ui-empty-state\n    [icon]=\"'alarm'\"\n    [title]=\"'No alarm selected' | translate\"\n    [subtitle]=\"'Select an alarm from the list to view its details.' | translate\"\n  ></c8y-ui-empty-state>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IAlarm } from '@c8y/client';\nimport {\n  C8yTranslatePipe,\n  ContextRouteService,\n  TabsOutletComponent,\n  TitleComponent,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Observable, of } from 'rxjs';\nimport { AlarmDetailsComponent } from './alarm-details.component';\n\n@Component({\n  selector: 'c8y-alarm-info',\n  templateUrl: './alarm-info.component.html',\n  imports: [TitleComponent, TabsOutletComponent, AlarmDetailsComponent, C8yTranslatePipe, AsyncPipe]\n})\nexport class AlarmInfoComponent implements OnInit {\n  selectedAlarm$: Observable<IAlarm>;\n\n  hasAnyRoleAllowingToCreateSmartRule: boolean;\n  isContextRoute = false;\n  readonly TITLE = gettext('Alarms');\n\n  constructor(\n    public activatedRoute: ActivatedRoute,\n    private router: Router,\n    private contextRouteService: ContextRouteService\n  ) {}\n\n  async ngOnInit() {\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    this.selectedAlarm$ = of(contextData.contextData as IAlarm);\n    this.isContextRoute = this.contextRouteService.isContextRoute(this.router.url, [\n      ViewContext.Device,\n      ViewContext.Group\n    ]);\n  }\n}\n","@if (!isContextRoute) {\n  <c8y-title>{{ TITLE | translate }}</c8y-title>\n}\n\n@if (selectedAlarm$ | async; as selectedAlarm) {\n  <div class=\"p-relative\">\n    <c8y-tabs-outlet\n      outletName=\"alarms\"\n      orientation=\"horizontal\"\n    ></c8y-tabs-outlet>\n  </div>\n\n  <c8y-alarm-details [selectedAlarm]=\"selectedAlarm\"></c8y-alarm-details>\n}\n","import { IAlarm } from '@c8y/client';\nimport { combineLatest, Observable } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { PluginsResolveService, ServiceRegistry } from '@c8y/ngx-components';\nimport { AlarmListIndicator } from '../alarms.model';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\n/**\n * A service to retrieve custom indicators for the alarm list view.\n */\nexport class AlarmListIndicatorService {\n  constructor(\n    private serviceRegistry: ServiceRegistry,\n    private pluginsResolver: PluginsResolveService\n  ) {}\n\n  get$(alarm: IAlarm): Observable<AlarmListIndicator[]> {\n    const providers$ = this.pluginsResolver.allPluginsLoaded$.pipe(\n      filter(Boolean),\n      map(() => {\n        return this.serviceRegistry.get('alarmListIndicator');\n      })\n    );\n\n    return providers$.pipe(\n      switchMap(providers => {\n        const observables$ = providers.map(provider =>\n          provider.getAlarmListIndicator$(alarm).pipe(startWith(false))\n        );\n        return combineLatest(observables$);\n      }),\n      map(indicators => {\n        return indicators.filter(Boolean) as AlarmListIndicator[];\n      }),\n      map(indicators => sortBy(indicators, this.byPriority))\n    );\n  }\n\n  private byPriority(item: AlarmListIndicator) {\n    if (item.priority === undefined) {\n      return 0;\n    }\n    return -item.priority;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAlarm } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { AlarmListIndicatorService } from './alarm-list-indicator.service';\nimport { AlarmListIndicator } from '../alarms.model';\n\n@Pipe({\n  standalone: true,\n  name: 'alarmListIndicator',\n  pure: true\n})\n/**\n * A pipe to provide custom indicators for the alarm list view.\n *\n * Will call `get$()` method of `AlarmListIndicatorService` to get the custom indicators for the provided alarm.\n */\nexport class AlarmListIndicatorPipe implements PipeTransform {\n  constructor(private alarmListIndicatorService: AlarmListIndicatorService) {}\n\n  transform(alarm: IAlarm): Observable<AlarmListIndicator[]> {\n    return this.alarmListIndicatorService.get$(alarm);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SeverityType, SEVERITY_LABELS } from '@c8y/client';\n\n/**\n * Pipe for transforming an array of alarm severity types into a comma-separated string.\n *\n * @example\n * Usage in a template: {{ ['WARNING', 'CRITICAL'] | AlarmSeveritiesToTitle }}\n * Result: 'Warning, Critical'\n */\n@Pipe({ name: 'AlarmSeveritiesToTitle' })\nexport class AlarmSeveritiesToTitlePipe implements PipeTransform {\n  private readonly severityOptionsCount = Object.keys(SEVERITY_LABELS).length;\n\n  constructor(private translateService: TranslateService) {}\n  /**\n   * Transforms an array of alarm severity types into a comma-separated string.\n   *\n   * @param severities - Array of severity types.\n   * @returns - Transformed human-readable title string.\n   */\n  transform(severities: SeverityType[]): string {\n    const uniqueSeverities = [...new Set(severities)];\n\n    if (uniqueSeverities.some(severity => !(severity in SEVERITY_LABELS))) {\n      return null;\n    }\n    if (uniqueSeverities.length === this.severityOptionsCount) {\n      return this.translateService.instant(gettext('All alarms'));\n    }\n\n    const translatedChips = uniqueSeverities.map(severity => this.translateSeverityLabel(severity));\n    return translatedChips.join(', ');\n  }\n  /**\n   * Translates and converts a severity type to title case.\n   *\n   * @private\n   * @param chip - Severity type.\n   * @returns - Translated and title-cased severity type.\n   */\n  private translateSeverityLabel(chip: SeverityType): string {\n    return this.translateService.instant(SEVERITY_LABELS[chip]);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Severity, SeverityType } from '@c8y/client';\nimport { ALARM_SEVERITY_ICON_MAP, AlarmSeverityIcon, HELP_ICON } from './alarms.model';\n\n/**\n * Pipe for transforming alarm severity types into corresponding icons.\n *\n * @example\n * Usage in an Angular template:\n * {{ 'CRITICAL' | AlarmSeverityToIcon }}\n * Result: 'exclamation-circle'\n */\n@Pipe({\n  name: 'AlarmSeverityToIcon',\n  standalone: true\n})\nexport class AlarmSeverityToIconPipe implements PipeTransform {\n  /**\n   * Transforms an alarm severity type into a corresponding icon.\n   *\n   * @param alarmSeverity - The severity type of the alarm.\n   * @returns The corresponding icon for the given alarm severity type.\n   */\n  transform(alarmSeverity: SeverityType): AlarmSeverityIcon | typeof HELP_ICON {\n    const alarmSeverityMapped = Severity[alarmSeverity?.toUpperCase()];\n    return ALARM_SEVERITY_ICON_MAP[alarmSeverityMapped] || HELP_ICON;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Severity, SeverityType } from '@c8y/client';\n\n@Pipe({\n  name: 'AlarmSeverityToIconClass',\n  standalone: true\n})\nexport class AlarmSeverityToIconClassPipe implements PipeTransform {\n  transform(alarmSeverity: SeverityType): string {\n    let severityClassName = '';\n    let iconClassName = '';\n\n    switch (alarmSeverity) {\n      case Severity.CRITICAL:\n        severityClassName = 'critical';\n        iconClassName = 'exclamation-circle';\n        break;\n      case Severity.MAJOR:\n        severityClassName = 'major';\n        iconClassName = 'warning';\n        break;\n      case Severity.MINOR:\n        severityClassName = 'minor';\n        iconClassName = 'high-priority';\n        break;\n      case Severity.WARNING:\n        severityClassName = 'warning';\n        iconClassName = 'circle';\n        break;\n      default:\n        return '';\n    }\n\n    return `status icon-lg stroked-icon dlt-c8y-icon-${iconClassName} ${severityClassName}`;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SEVERITY_LABELS } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * Pipe to transform alarm severity to corresponding label.\n */\n@Pipe({ name: 'AlarmSeverityToLabel' })\nexport class AlarmSeverityToLabelPipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an alarm severity to its corresponding label.\n   * @param alarmSeverity - The alarm severity to transform.\n   * @returns The translated label corresponding to the given alarm severity.\n   */\n  transform(alarmSeverity: string): string {\n    const alarmStatusMapped = SEVERITY_LABELS[alarmSeverity?.toUpperCase()];\n    return this.translateService.instant(alarmStatusMapped ?? alarmSeverity);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlarmIconMap, AlarmStatusIcon, HELP_ICON } from './alarms.model';\nimport { AlarmStatusType } from '@c8y/client';\n/**\n * Angular pipe for transforming alarm statuses into corresponding icons.\n *\n * @example\n * Usage in an Angular template:\n * {{ 'ACTIVE' | AlarmStatusToIcon }}\n * Result: 'bell'\n */\n@Pipe({ name: 'AlarmStatusToIcon' })\nexport class AlarmStatusToIconPipe implements PipeTransform {\n  /**\n   * Transforms an alarm status into a corresponding icon.\n   *\n   * @param alarmStatus - The status of the alarm.\n   * @returns - The corresponding icon for the given alarm status.\n   */\n  transform(alarmStatus: AlarmStatusType): AlarmStatusIcon | typeof HELP_ICON {\n    return AlarmIconMap[alarmStatus?.toUpperCase()] || HELP_ICON;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AlarmStatusType, ALARM_STATUS_LABELS } from '@c8y/client';\n\n/**\n * Pipe to transform alarm status to corresponding label.\n */\n@Pipe({ name: 'AlarmStatusToLabel' })\nexport class AlarmStatusToLabelPipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an alarm status to its corresponding label.\n   * @param alarmStatus - The alarm status to transform.\n   * @returns The translated label corresponding to the given alarm status.\n   */\n  transform(alarmStatus: AlarmStatusType): string {\n    return this.translateService.instant(ALARM_STATUS_LABELS[alarmStatus?.toUpperCase()]);\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n  AlarmQueryFilter,\n  Severity,\n  SeverityFilter,\n  SEVERITY_LABELS,\n  SeverityType\n} from '@c8y/client';\nimport {\n  AlertService,\n  DateTimeContext,\n  ProductExperienceDirective,\n  IconDirective,\n  RequiredInputPlaceholderDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\nimport { BehaviorSubject, Observable, Subject, combineLatest, from, forkJoin, EMPTY } from 'rxjs';\nimport { catchError, filter, finalize, map, startWith, takeUntil } from 'rxjs/operators';\nimport { AlarmsViewService } from './alarms-view.service';\nimport {\n  AlarmCount,\n  DEFAULT_ALARM_COUNTS,\n  DEFAULT_SEVERITY_VALUES,\n  AlarmListFormFilters,\n  PRODUCT_EXPERIENCE_ALARMS\n} from './alarms.model';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport _ from 'lodash';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgClass, AsyncPipe, LowerCasePipe } from '@angular/common';\nimport { AlarmSeverityToIconPipe } from './alarm-severity-to-icon.pipe';\nimport { AlarmSeveritiesToTitlePipe } from './alarm-severities-to-title.pipe';\n\n@Component({\n  selector: 'c8y-alarms-filter',\n  templateUrl: './alarms-filter.component.html',\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    BsDropdownDirective,\n    CdkTrapFocus,\n    ProductExperienceDirective,\n    IconDirective,\n    NgClass,\n    BsDropdownToggleDirective,\n    BsDropdownMenuDirective,\n    RequiredInputPlaceholderDirective,\n    C8yTranslatePipe,\n    AsyncPipe,\n    LowerCasePipe,\n    AlarmSeverityToIconPipe,\n    AlarmSeveritiesToTitlePipe\n  ]\n})\nexport class AlarmsFilterComponent implements OnInit, AfterViewInit, OnDestroy {\n  readonly severitiesList = Object.keys(SEVERITY_LABELS) as SeverityType[];\n\n  @Input()\n  contextSourceId: number | string | null;\n\n  /**\n   * EventEmitter to notify when filters have been applied.\n   * Emits a `AlarmListFormFilters` object representing the filter criteria applied by the user.\n   */\n  @Output()\n  onFilterApplied = new EventEmitter<AlarmListFormFilters>();\n\n  @ViewChild('filtersDropdown')\n  filtersDropdown: BsDropdownDirective;\n\n  formGroup = this.formBuilder.group(DEFAULT_SEVERITY_VALUES);\n  chips: SeverityType[] = [];\n  isIndeterminate$: Observable<boolean>;\n  countLoading: boolean;\n  showCleared = false;\n  alarmCounts: AlarmCount = DEFAULT_ALARM_COUNTS;\n  selectedDates: DateTimeContext;\n  shouldDisableApplyButton$: Observable<boolean>;\n  isEachCheckboxSelected$: Observable<boolean>;\n  protected readonly SEVERITY_LABELS = SEVERITY_LABELS;\n  protected readonly PRODUCT_EXPERIENCE_ALARMS = PRODUCT_EXPERIENCE_ALARMS;\n  private isNoneCheckboxSelected$ = new BehaviorSubject<boolean>(false);\n  private severitiesTouched$ = new BehaviorSubject<boolean>(false);\n  private currentFormGroupValues = this.formGroup.value;\n  private currentShowClearedValue: boolean;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private alarmsViewService: AlarmsViewService,\n    private alertService: AlertService,\n    private router: Router,\n    private activatedRoute: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    this.activatedRoute.queryParams.pipe(takeUntil(this.destroy$)).subscribe(params => {\n      this.showCleared = params.showCleared === 'true';\n      this.formGroup.setValue({\n        [Severity.CRITICAL]: params[Severity.CRITICAL] === 'true',\n        [Severity.MAJOR]: params[Severity.MAJOR] === 'true',\n        [Severity.MINOR]: params[Severity.MINOR] === 'true',\n        [Severity.WARNING]: params[Severity.WARNING] === 'true'\n      });\n      if (params.lastUpdatedFrom) {\n        this.selectedDates = [new Date(params.lastUpdatedFrom), new Date(params.createdTo)];\n      }\n      this.applyFilters(true, false);\n    });\n    this.trackCheckboxStateWithFormChanges();\n    this.currentShowClearedValue = this.showCleared;\n    this.updateChipsAndDefaultValues();\n  }\n\n  ngAfterViewInit(): void {\n    this.filtersDropdown.isOpenChange\n      .pipe(takeUntil(this.destroy$), filter(Boolean))\n      .subscribe(() => this.updateAlarmsCount());\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  allChanged(selected: boolean): void {\n    this.formGroup.patchValue({\n      [Severity.CRITICAL]: selected,\n      [Severity.MAJOR]: selected,\n      [Severity.MINOR]: selected,\n      [Severity.WARNING]: selected\n    } as SeverityFilter);\n  }\n\n  applyFilters(emit = true, navigate = true): void {\n    this.updateChipsAndDefaultValues();\n    const combinedFormEvent: AlarmListFormFilters = {\n      showCleared: this.showCleared,\n      severityOptions: this.formGroup.value,\n      selectedDates: this.selectedDates\n    };\n    if (emit) {\n      this.onFilterApplied.emit(combinedFormEvent);\n    }\n    this.currentFormGroupValues = this.formGroup.value;\n    this.currentShowClearedValue = this.showCleared;\n\n    if (navigate) {\n      this.router.navigate([], {\n        queryParams: {\n          showCleared: combinedFormEvent.showCleared,\n          ...combinedFormEvent.severityOptions,\n          lastUpdatedFrom: combinedFormEvent.selectedDates?.[0]?.toISOString(),\n          createdTo: combinedFormEvent.selectedDates?.[1]?.toISOString()\n        },\n        queryParamsHandling: 'merge'\n      });\n    }\n  }\n\n  deselectChip(chip: SeverityType): void {\n    this.formGroup.patchValue({\n      ...this.formGroup.value,\n      [chip]: false\n    });\n    this.applyFilters(false);\n    this.closeDropdown();\n  }\n\n  closeDropdown(): void {\n    if (this.filtersDropdown.isOpen) {\n      this.filtersDropdown.isOpen = false;\n    }\n  }\n\n  resetForm(): void {\n    this.formGroup.reset(this.currentFormGroupValues);\n    this.severitiesTouched$.next(false);\n    this.showCleared = this.currentShowClearedValue;\n  }\n\n  markSeveritiesAsTouched(): void {\n    this.severitiesTouched$.next(true);\n  }\n\n  /**\n   * Asynchronously fetches and updates the count of alarms for each severity level.\n   *\n   * @param showCleared - Whether to include cleared alarms in the count.\n   * Defaults to the current value of `this.currentShowClearedValue`.\n   * @returns A Promise that resolves when all alarm counts have been fetched,\n   * or rejects with an error if the operation fails.\n   * @throws Will throw an error if any of the alarm count fetching promises reject.\n   */\n  async updateAlarmsCount(showCleared = this.currentShowClearedValue): Promise<void> {\n    this.countLoading = true;\n    const alarmFilter: AlarmQueryFilter | null = this.contextSourceId\n      ? {\n          source: this.contextSourceId,\n          withSourceAssets: true,\n          withSourceDevices: true\n        }\n      : null;\n    const observables: Record<SeverityType, Observable<number>> = this.severitiesList.reduce(\n      (acc, severity) => {\n        acc[severity] = from(\n          this.alarmsViewService.getAlarmsCountBySeverity(severity, showCleared, alarmFilter)\n        );\n        return acc;\n      },\n      {\n        CRITICAL: null,\n        MAJOR: null,\n        MINOR: null,\n        WARNING: null\n      }\n    );\n    forkJoin(observables)\n      .pipe(\n        catchError(err => {\n          this.alarmCounts = {} as AlarmCount;\n          this.alertService.addServerFailure(err);\n          return EMPTY;\n        }),\n        finalize(() => (this.countLoading = false))\n      )\n      .subscribe((alarmCounts: AlarmCount) => (this.alarmCounts = alarmCounts));\n  }\n\n  private createFormValueWithChangesStream(): Observable<SeverityFilter> {\n    return this.formGroup.valueChanges.pipe(startWith(this.formGroup.value));\n  }\n\n  private trackCheckboxStateWithFormChanges(): void {\n    const formValue$ = this.createFormValueWithChangesStream();\n    this.isEachCheckboxSelected$ = this.createAllSelectedStream(formValue$);\n    this.isIndeterminate$ = this.createIndeterminateStream(formValue$);\n    this.trackAllCheckboxesDisabled(formValue$);\n    this.shouldDisableApplyButton$ = this.createDisableApplyButtonStream();\n  }\n\n  private createAllSelectedStream(formValue$: Observable<SeverityFilter>): Observable<boolean> {\n    return formValue$.pipe(map(severities => Object.values(severities).every(Boolean)));\n  }\n\n  private createIndeterminateStream(formValue$: Observable<SeverityFilter>): Observable<boolean> {\n    return formValue$.pipe(\n      map(\n        severities =>\n          Object.values(severities).some(Boolean) && !Object.values(severities).every(Boolean)\n      )\n    );\n  }\n\n  private trackAllCheckboxesDisabled(formValue$: Observable<SeverityFilter>): void {\n    formValue$.pipe(takeUntil(this.destroy$)).subscribe(severities => {\n      const areAllDisabled = Object.values(severities).every(value => !value);\n      this.isNoneCheckboxSelected$.next(areAllDisabled);\n    });\n  }\n\n  private createDisableApplyButtonStream(): Observable<boolean> {\n    return combineLatest([this.isNoneCheckboxSelected$, this.severitiesTouched$]).pipe(\n      map(\n        ([allCheckboxesAreDisabled, severitiesTouched]) =>\n          allCheckboxesAreDisabled || !severitiesTouched\n      )\n    );\n  }\n\n  private updateChipsAndDefaultValues(): void {\n    const severityFilter = this.formGroup;\n    const seveerityValues = severityFilter.value;\n\n    this.chips = Object.keys(seveerityValues).filter(key => seveerityValues[key]) as SeverityType[];\n    const allChipsRemoved = this.chips.length === 0;\n    if (allChipsRemoved) {\n      const defaultValues = DEFAULT_SEVERITY_VALUES;\n      severityFilter.setValue(defaultValues);\n      this.chips = Object.keys(defaultValues) as SeverityType[];\n    }\n  }\n}\n","<form\n  class=\"d-flex a-i-center\"\n  [formGroup]=\"formGroup\"\n>\n  <div\n    class=\"dropdown\"\n    title=\"{{ 'Filter by severity' | translate }}\"\n    container=\"body\"\n    dropdown\n    #filtersDropdown=\"bs-dropdown\"\n    [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n    [insideClick]=\"true\"\n  >\n    <div class=\"input-group fit-w\">\n      <div\n        class=\"form-control d-flex a-i-center inner-scroll\"\n        style=\"min-width: 104px; padding-top: 0; padding-bottom: 0\"\n      >\n        @if (chips.length !== severitiesList.length) {\n          @for (chip of chips; track chip) {\n            <span\n              class=\"tag tag--info chip\"\n              [attr.data-cy]=\"'c8y-alarms-filter--chip-' + chip\"\n            >\n              <button\n                class=\"btn btn-xs btn-clean text-10\"\n                title=\"{{ 'Remove' | translate }}\"\n                type=\"button\"\n                data-cy=\"c8y-alarms-filter--remove-chip\"\n                c8yProductExperience\n                [actionName]=\"PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS\"\n                [actionData]=\"{\n                  component: PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARMS_FILTER,\n                  action: PRODUCT_EXPERIENCE_ALARMS.ACTIONS.REMOVE_CHIP_FILTER,\n                  filterValues: {\n                    severities: formGroup.value,\n                    showCleared: showCleared\n                  }\n                }\"\n                (click)=\"deselectChip(chip); $event.stopPropagation()\"\n              >\n                <i c8yIcon=\"times\"></i>\n              </button>\n              <i\n                class=\"status stroked-icon icon-12\"\n                [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n                [attr.data-cy]=\"'c8y-alarms-filter--icon-' + chip\"\n                [ngClass]=\"chip | lowercase\"\n              ></i>\n              {{ SEVERITY_LABELS[chip] | translate }}\n            </span>\n          }\n        } @else {\n          <span\n            class=\"text-truncate\"\n            title=\"{{ 'All severities' | translate }}\"\n          >\n            {{ 'All severities' | translate }}\n          </span>\n        }\n      </div>\n      <div class=\"input-group-btn input-group-btn--last\">\n        <button\n          class=\"btn-default btn btn--caret\"\n          title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n          data-cy=\"c8y-alarms-filter\"\n          dropdownToggle\n          (click)=\"resetForm()\"\n        >\n          <i class=\"caret\"></i>\n        </button>\n      </div>\n    </div>\n    <ul\n      class=\"dropdown-menu dropdown-menu-action-bar\"\n      *dropdownMenu\n    >\n      <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n        <label\n          class=\"c8y-checkbox d-flex a-i-center\"\n          [title]=\"'All' | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            data-cy=\"c8y-alarms-filter--all\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"allChanged($event)\"\n            [ngModel]=\"isEachCheckboxSelected$ | async\"\n            [indeterminate]=\"isIndeterminate$ | async\"\n            (click)=\"markSeveritiesAsTouched()\"\n          />\n          <span></span>\n          <i\n            class=\"status stroked-icon m-l-8 icon-20\"\n            [c8yIcon]=\"'bell'\"\n          ></i>\n          <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n        </label>\n      </li>\n      @for (severity of severitiesList; track severity) {\n        <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\">\n          <label\n            class=\"c8y-checkbox d-flex a-i-center\"\n            [title]=\"SEVERITY_LABELS[severity] | translate\"\n          >\n            <input\n              type=\"checkbox\"\n              [attr.data-cy]=\"'c8y-alarms-filter--' + severity\"\n              [formControlName]=\"severity\"\n              [value]=\"severity\"\n              (click)=\"markSeveritiesAsTouched()\"\n            />\n            <span></span>\n            <i\n              class=\"status stroked-icon m-l-8 icon-20\"\n              [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n              [ngClass]=\"severity | lowercase\"\n            ></i>\n            <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n          </label>\n          <!-- badge -->\n          @if (alarmCounts[severity] || alarmCounts[severity] === 0) {\n            <div class=\"badge badge-info m-l-auto\">\n              @if (countLoading) {\n                <i\n                  class=\"icon-spin\"\n                  [c8yIcon]=\"'circle-o-notch'\"\n                ></i>\n              }\n              @if (!countLoading) {\n                <span [attr.data-cy]=\"'c8y-alarms-filter--' + severity + '-badge'\">\n                  {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n                </span>\n              }\n            </div>\n          }\n        </li>\n      }\n      <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n        <label\n          class=\"c8y-switch\"\n          [attr.aria-label]=\"'Show cleared alarms' | translate\"\n          [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n        >\n          <input\n            type=\"checkbox\"\n            #showClearedCheckbox\n            [ngModelOptions]=\"{ standalone: true }\"\n            [(ngModel)]=\"showCleared\"\n            (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n          />\n          <span></span>\n          <span\n            class=\"text-truncate\"\n            title=\"{{ 'Show cleared alarms' | translate }}\"\n          >\n            {{ 'Show cleared alarms' | translate }}\n          </span>\n        </label>\n      </li>\n      <li class=\"p-16 d-flex sticky-bottom separator-top\">\n        <button\n          class=\"btn btn-primary btn-sm flex-grow\"\n          title=\"{{ 'Apply' | translate }}\"\n          type=\"button\"\n          data-cy=\"c8y-alarms-filter--apply\"\n          c8yProductExperience\n          [actionName]=\"PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS\"\n          [actionData]=\"{\n            component: PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARMS_FILTER,\n            action: PRODUCT_EXPERIENCE_ALARMS.ACTIONS.APPLY_FILTER,\n            filterValues: {\n              severities: formGroup.value,\n              showCleared: showCleared\n            }\n          }\"\n          (click)=\"applyFilters(false); closeDropdown()\"\n          [disabled]=\"shouldDisableApplyButton$ | async\"\n        >\n          {{ 'Apply' | translate }}\n        </button>\n      </li>\n    </ul>\n  </div>\n</form>\n","import { LowerCasePipe, NgClass, NgStyle } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IAlarm } from '@c8y/client';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { AlarmSeverityToIconPipe } from './alarm-severity-to-icon.pipe';\nimport { AlarmSeverityToLabelPipe } from './alarm-severity-to-label.pipe';\nimport { AlarmStatusToIconPipe } from './alarm-status-to-icon.pipe';\nimport { AlarmStatusToLabelPipe } from './alarm-status-to-label.pipe';\n\n@Component({\n  selector: 'c8y-alarms-icon',\n  templateUrl: 'alarms-icon.component.html',\n  imports: [\n    TooltipDirective,\n    IconDirective,\n    NgClass,\n    NgStyle,\n    C8yTranslatePipe,\n    LowerCasePipe,\n    AlarmSeverityToIconPipe,\n    AlarmStatusToIconPipe,\n    AlarmSeverityToLabelPipe,\n    AlarmStatusToLabelPipe\n  ]\n})\nexport class AlarmsIconComponent implements OnInit {\n  @Input()\n  alarm: IAlarm;\n\n  @Input()\n  typeFilters: AlarmDetails[];\n\n  iconBackgroundColor = 'none';\n  isFilterApplied = false;\n\n  alarmSeverityLabel = gettext('Severity: {{ alarmSeverity }}');\n  alarmStatusLabel = gettext('Status: {{ alarmStatus }}');\n  alarmStatusType = gettext('Type: {{ alarmType }}');\n\n  ngOnInit(): void {\n    this.isFilterApplied = this.typeFilters.length > 0;\n    this.iconBackgroundColor =\n      this.typeFilters.find(filter => filter.filters.type === this.alarm.type)?.color || 'none';\n  }\n}\n","<button\n  class=\"btn-clean severity\"\n  [attr.aria-label]=\"\n    alarmSeverityLabel | translate: { alarmSeverity: alarm.severity | AlarmSeverityToLabel }\n  \"\n  [tooltip]=\"\n    alarmSeverityLabel | translate: { alarmSeverity: alarm.severity | AlarmSeverityToLabel }\n  \"\n  placement=\"right\"\n  container=\"body\"\n  type=\"button\"\n  (click)=\"$event.stopPropagation()\"\n  [delay]=\"500\"\n>\n  <i\n    class=\"status stroked-icon\"\n    [c8yIcon]=\"alarm.severity | AlarmSeverityToIcon\"\n    [ngClass]=\"alarm.severity | lowercase\"\n  ></i>\n</button>\n<button\n  class=\"btn-clean status\"\n  [ngStyle]=\"{ 'background-color': iconBackgroundColor }\"\n  [attr.aria-label]=\"\n    alarmStatusLabel | translate: { alarmStatus: alarm.status | AlarmStatusToLabel }\n  \"\n  [tooltip]=\"\n    (alarmStatusLabel | translate: { alarmStatus: alarm.status | AlarmStatusToLabel }) +\n    '\\n' +\n    (alarmStatusType | translate: { alarmType: alarm.type })\n  \"\n  placement=\"right\"\n  container=\"body\"\n  type=\"button\"\n  [ngClass]=\"{ 'circle-icon-wrapper': isFilterApplied }\"\n  data-cy=\"c8y-alarms-icon--status-icon\"\n  (click)=\"$event.stopPropagation()\"\n  [delay]=\"500\"\n>\n  <i\n    [c8yIcon]=\"alarm.status | AlarmStatusToIcon\"\n    [ngClass]=\"{ 'stroked-icon': isFilterApplied }\"\n  ></i>\n</button>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  CountdownIntervalComponent,\n  RequiredInputPlaceholderDirective,\n  IconDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\n@Component({\n  selector: 'c8y-alarms-interval-refresh',\n  templateUrl: './alarms-interval-refresh.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    TooltipDirective,\n    RequiredInputPlaceholderDirective,\n    NgIf,\n    CountdownIntervalComponent,\n    IconDirective,\n    NgFor,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class AlarmsIntervalRefreshComponent implements OnInit, AfterViewInit, OnDestroy {\n  readonly refreshIntervalsInMilliseconds = this.alarmsViewService.DEFAULT_INTERVAL_VALUES;\n  readonly DISABLE_AUTO_REFRESH = gettext('Disable auto refresh');\n  readonly ENABLE_AUTO_REFRESH = gettext('Enable auto refresh');\n  readonly SECONDS_UNTIL_REFRESH = gettext('{{ seconds }} s');\n\n  @Input() isDisabled = false;\n  /**\n   * Controls the loading state of the alarms list reload button.\n   */\n  @Input()\n  alarmsListLoading$: BehaviorSubject<boolean>;\n  /**\n   * * Set the value of `isIntervalEnabled` in response to user interactions with the alarm list scroll.\n   *  *\n   *  * This input setter allows you to control the `isIntervalEnabled` property, which is used to manage the state\n   *  * of a toggle button. When a user scrolls through the alarms list, you can update the `isIntervalEnabled` value\n   *  * using this setter.\n   *  *\n   *  * @param value - A boolean value representing the new state of the `isIntervalEnabled` property.\n   *  *   - `true` indicates that the interval is enabled.\n   *  *   - `false` indicates that the interval is disabled.\n   */\n  @Input()\n  set isIntervalToggleEnabled(value: boolean) {\n    const shouldSetInterval = this.isIntervalToggleEnabled || this.doesUserCheckedIntervalToggle;\n    const shouldToggleInterval =\n      !this.isDisabled &&\n      this.isIntervalToggleEnabled &&\n      this.doesUserCheckedIntervalToggle &&\n      value;\n    const intervalToggleControl = this.toggleIntervalForm.get('intervalToggle');\n    /**\n     * We check if any interactions to toggle interval button were made.\n     * When user interacts with toggle button, we need to ignore assigning value to the form.\n     */\n    if (intervalToggleControl.dirty && !shouldSetInterval) {\n      return;\n    }\n    /**\n     * This condition checks if the interval toggle is enabled and if there has been user interaction,\n     * and if the provided value is truthy.\n     * If all conditions are met, the interval toggle should not be updated due to unnecessary update of countdown interval component\n     */\n    if (shouldToggleInterval) {\n      return;\n    }\n    intervalToggleControl.setValue(value);\n  }\n  /**\n   * This getter allows you to access the current state of the `isIntervalEnabled` property, which reflects\n   * the state of a toggle button. It retrieves the value from the associated form control, providing the\n   * current state of the toggle button.\n   */\n  get isIntervalToggleEnabled(): boolean {\n    return !this.isDisabled && this.toggleIntervalForm.get('intervalToggle').value;\n  }\n  /**\n   * Event emitter for notifying when a countdown timer has completed.\n   */\n  @Output()\n  onCountdownEnded = new EventEmitter<void>();\n\n  @ViewChild(CountdownIntervalComponent)\n  countdownIntervalComponent: CountdownIntervalComponent;\n  toggleIntervalForm = this.initForm();\n  private destroy$: Subject<void> = new Subject<void>();\n  /**\n   * Indicates whether the user has been interacting with the interval toggle.\n   * Property holds the current state of the interval toggle input element entered by the user,\n   * distinguishing it from changes made programmatically (e.g. value from isIntervalToggleEnabled).\n   */\n  private doesUserCheckedIntervalToggle: boolean;\n\n  constructor(\n    private fb: FormBuilder,\n    private alarmsViewService: AlarmsViewService\n  ) {}\n\n  ngOnInit(): void {\n    this.listenToRefreshIntervalChange();\n  }\n\n  ngAfterViewInit(): void {\n    this.onIntervalToggleChange();\n    this.listenOnLoadingChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  resetCountdown(): void {\n    this.countdownIntervalComponent?.reset();\n  }\n\n  trackUserClickOnIntervalToggle(target: EventTarget): void {\n    this.doesUserCheckedIntervalToggle = (target as HTMLInputElement).checked;\n  }\n\n  getTooltip() {\n    return this.isDisabled\n      ? gettext('Disabled')\n      : this.isIntervalToggleEnabled\n        ? this.DISABLE_AUTO_REFRESH\n        : this.ENABLE_AUTO_REFRESH;\n  }\n\n  private startCountdown(): void {\n    this.countdownIntervalComponent.start();\n  }\n\n  private onIntervalToggleChange(): void {\n    this.toggleIntervalForm\n      .get('intervalToggle')\n      .valueChanges.pipe(takeUntil(this.destroy$), filter(Boolean))\n      .subscribe(() => setTimeout(() => this.startCountdown()));\n  }\n\n  private initForm() {\n    return this.fb.group({\n      intervalToggle: true,\n      refreshInterval: this.alarmsViewService.DEFAULT_INTERVAL_VALUE\n    });\n  }\n\n  private listenToRefreshIntervalChange(): void {\n    this.toggleIntervalForm\n      .get('refreshInterval')\n      .valueChanges.pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.resetCountdown());\n  }\n\n  private listenOnLoadingChanges() {\n    this.alarmsListLoading$\n      .pipe(tap(() => this.countdownIntervalComponent?.stop()))\n      .subscribe(state => {\n        !state && this.countdownIntervalComponent?.reset();\n      });\n  }\n}\n","<form\n  class=\"d-flex a-i-center fit-w fit-h\"\n  [formGroup]=\"toggleIntervalForm\"\n>\n  <label class=\"m-b-0 m-r-8 text-normal text-muted flex-no-shrink\">\n    {{ 'Auto refresh' | translate }}\n  </label>\n  <div class=\"input-group\">\n    <label\n      class=\"toggle-countdown\"\n      [class.toggle-countdown-disabled]=\"isDisabled\"\n      [attr.aria-label]=\"getTooltip() | translate\"\n      [tooltip]=\"getTooltip() | translate\"\n      placement=\"bottom\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      data-cy=\"c8y-alarms-interval-refresh--toggle-countdown\"\n    >\n      <input\n        type=\"checkbox\"\n        data-cy=\"c8y-alarms-interval-toggle\"\n        formControlName=\"intervalToggle\"\n        (click)=\"trackUserClickOnIntervalToggle($event.target)\"\n      />\n      <c8y-countdown-interval\n        *ngIf=\"isIntervalToggleEnabled\"\n        [countdownInterval]=\"toggleIntervalForm.value.refreshInterval\"\n        (countdownEnded)=\"onCountdownEnded.emit()\"\n      ></c8y-countdown-interval>\n      <i\n        data-cy=\"c8y-alarms-interval-refresh--pause\"\n        c8yIcon=\"pause\"\n        *ngIf=\"!isIntervalToggleEnabled\"\n      ></i>\n    </label>\n    <div\n      class=\"c8y-select-wrapper\"\n      *ngIf=\"!isDisabled\"\n    >\n      <select\n        class=\"form-control text-12\"\n        [attr.aria-label]=\"'Refresh interval in seconds' | translate\"\n        [tooltip]=\"'Refresh interval in seconds' | translate\"\n        placement=\"bottom\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n        [container]=\"'body'\"\n        formControlName=\"refreshInterval\"\n        data-cy=\"c8y-alarms-interval-refresh--selector\"\n      >\n        <option\n          [disabled]=\"isDisabled\"\n          *ngFor=\"let refreshInterval of refreshIntervalsInMilliseconds\"\n          [ngValue]=\"refreshInterval\"\n          [attr.data-cy]=\"'c8y-interval-' + refreshInterval\"\n        >\n          {{ SECONDS_UNTIL_REFRESH | translate: { seconds: refreshInterval / 1000 } }}\n        </option>\n      </select>\n      <span></span>\n    </div>\n    <div class=\"input-group-btn\">\n      <button\n        class=\"btn btn-default\"\n        style=\"border-left: 0\"\n        [attr.aria-label]=\"'Refresh' | translate\"\n        [tooltip]=\"'Refresh' | translate\"\n        placement=\"bottom\"\n        type=\"button\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n        [disabled]=\"isDisabled || (alarmsListLoading$ | async)\"\n        (click)=\"onCountdownEnded.emit()\"\n        data-cy=\"c8y-alarms-interval-refresh--btn\"\n      >\n        <i\n          c8yIcon=\"refresh\"\n          [ngClass]=\"{ 'icon-spin': alarmsListLoading$ | async }\"\n        ></i>\n      </button>\n    </div>\n  </div>\n</form>\n","import { AsyncPipe } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  ActivatedRoute,\n  NavigationEnd,\n  Router,\n  RouterLink,\n  RouterLinkActive\n} from '@angular/router';\nimport { IAlarm, IResultList } from '@c8y/client';\nimport {\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  ContextRouteService,\n  DatePipe,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator,\n  DynamicComponentAlertsComponent,\n  ForOfDirective,\n  IconDirective,\n  ListGroupComponent,\n  ListItemBodyComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  ListItemTimelineComponent,\n  LoadMoreMode,\n  SplitViewAlertsComponent,\n  SplitViewHeaderActionsComponent,\n  SplitViewListComponent\n} from '@c8y/ngx-components';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Observable, Subject, fromEvent, pipe } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  shareReplay,\n  switchMap,\n  takeUntil\n} from 'rxjs/operators';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { AlarmNavigationOptions } from './alarms.model';\n\nimport { AlarmListIndicatorPipe } from './alarm-list-custom-indicator/alarm-list-indicator.pipe';\nimport { AlarmsIconComponent } from './alarms-icon.component';\n\n@Component({\n  selector: 'c8y-alarms-list',\n  templateUrl: './alarms-list.component.html',\n  imports: [\n    C8yTranslateDirective,\n    ForOfDirective,\n    ListItemTimelineComponent,\n    RouterLinkActive,\n    RouterLink,\n    TooltipDirective,\n    ListItemComponent,\n    ListItemIconComponent,\n    AlarmsIconComponent,\n    ListItemBodyComponent,\n    IconDirective,\n    DynamicComponentAlertsComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    DatePipe,\n    AlarmListIndicatorPipe,\n    SplitViewListComponent,\n    SplitViewHeaderActionsComponent,\n    SplitViewAlertsComponent,\n    ListGroupComponent\n  ]\n})\nexport class AlarmsListComponent implements OnChanges, AfterViewInit, OnDestroy {\n  readonly alarmBadgeTooltip = gettext(\n    'Number of occurrences`number of occurrences of alarm`. First occurrence {{ alarmFirstOccurrenceTime }} (device time).'\n  );\n  readonly alarmLastOccurrenceLabel = gettext('Last occurrence of this alarm (device time).');\n\n  /**\n   * Input property for receiving a list of alarms.\n   */\n  @Input()\n  alarms: IResultList<IAlarm & { link?: string }>;\n\n  @Input() hasPermissions = true;\n\n  /**\n   * Input property for the currently applied type filters.\n   */\n  @Input()\n  typeFilters: AlarmDetails[] = [];\n\n  /**\n   * Input property for receiving load more mode.\n   */\n  @Input()\n  loadMoreMode: LoadMoreMode = 'hidden';\n\n  /**\n   * Defines options, how the alarm list should be navigated if a user\n   * clicks on an alarm.\n   */\n  @Input()\n  navigationOptions: AlarmNavigationOptions = {\n    allowNavigationToAlarmsView: true,\n    alwaysNavigateToAllAlarms: false,\n    includeClearedQueryParams: false,\n    queryParamsHandling: 'merge'\n  };\n\n  /**\n   * Controls the visibility of the loading bar\n   * When set to `false`, the alarm list is displayed. When set to `true`, the opacity of alarms list is changed and a loading bar is shown.\n   */\n  @Input()\n  isInitialLoading = false;\n\n  /**\n   * Indicates whether the component is in widget preview mode.\n   */\n  @Input() isInPreviewMode = false;\n\n  /**\n   * Emits an instance of a selected alarm when one is chosen from the list.\n   */\n  @Output()\n  onSelectedAlarm = new EventEmitter<IAlarm>();\n\n  /**\n   * Emits a boolean value indicating the scrolling state: true when the user starts scrolling, and false when the user reaches the top of the list.\n   */\n  @Output()\n  onScrollingStateChange = new EventEmitter<boolean>();\n\n  /**\n   * Current alarm or last alarm marked as active by the routerLinkActive directive.\n   */\n  activeAlarm$ = new BehaviorSubject<IAlarm>(null);\n  activeChildParam$ = new Observable<string>();\n\n  @ViewChild('scrollWrapper')\n  svListComponent: SplitViewListComponent;\n\n  isScrolling = false;\n  /**\n   * Determines whether the c8y-loading component should be displayed.\n   * The loading component is shown when no alarms are displayed in the view or when the request is initial,\n   * as we don't want to see empty space on alarm list during loading.\n   */\n  isEmptyListLoading = true;\n\n  alertAggregator = new DynamicComponentAlertAggregator();\n  permissionAlertAggregator = new DynamicComponentAlertAggregator();\n\n  mapAlarmLink = pipe(\n    map((alarms: IAlarm[]) =>\n      alarms.map((alarm: IAlarm) => {\n        alarm.link = this.getRouterLink(alarm);\n        return alarm;\n      })\n    )\n  );\n\n  private destroy$: Subject<void> = new Subject<void>();\n  private HIDE_INTERVAL_COUNTDOWN_SCROLL = 50;\n\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService,\n    private contextRouteService: ContextRouteService,\n    private router: Router\n  ) {\n    this.verifyIfFiltersMatchingAlarm();\n  }\n\n  /**\n   * Handles the change of the active route.\n   *\n   * @param isActive - A boolean indicating whether the route is active or not.\n   * @param scrollAnchor - The ListItemComponent used as a scroll anchor.\n   * @param alarm - The IAlarm object representing the active alarm.\n   */\n  activeRouteChanged(isActive: boolean, scrollAnchor: ListItemComponent, alarm: IAlarm): void {\n    if (isActive) {\n      scrollAnchor.element.nativeElement.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest'\n      });\n      this.activeAlarm$.next(alarm);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.alarms && changes.alarms) {\n      this.activeAlarm$.next(null);\n      this.isEmptyListLoading = !this.alarms?.data?.length;\n    }\n\n    if (changes.hasPermissions?.currentValue === false) {\n      this.addPermissionAlert();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (this.isInPreviewMode) {\n      return;\n    }\n\n    if (this.alarmsViewService.isIntervalRefresh()) {\n      const scrollElement = this.svListComponent.innerScrollDiv.nativeElement;\n      fromEvent(scrollElement, 'scroll')\n        .pipe(takeUntil(this.destroy$), debounceTime(300))\n        .subscribe((event: Event) => {\n          const target = event.target as HTMLElement;\n          this.isScrolling = this.shouldCountdownIntervalBeHidden(target);\n          this.onScrollingStateChange.emit(this.isScrolling);\n        });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  onAlarmOpen(alarm: IAlarm): void {\n    this.onSelectedAlarm.emit(alarm);\n  }\n\n  getRouterLink(alarm: IAlarm): string {\n    if (this.navigationOptions.alwaysNavigateToAllAlarms) {\n      return this.alarmsViewService.getRouterLink(null, alarm);\n    }\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    return this.alarmsViewService.getRouterLink(contextData, alarm);\n  }\n\n  private addPermissionAlert(): void {\n    this.permissionAlertAggregator.clear();\n    this.permissionAlertAggregator.addAlerts(\n      new DynamicComponentAlert({\n        type: 'system',\n        text: gettext(\"You don't have permission to view alarms.\")\n      })\n    );\n  }\n\n  private shouldCountdownIntervalBeHidden(target: HTMLElement): boolean {\n    const scrollTopPixels = target.scrollTop;\n    return scrollTopPixels > this.HIDE_INTERVAL_COUNTDOWN_SCROLL;\n  }\n\n  private verifyIfFiltersMatchingAlarm() {\n    this.activeChildParam$ = this.router.events.pipe(\n      filter(e => e instanceof NavigationEnd && this.activatedRoute.children.length > 0),\n      switchMap(() => this.activatedRoute.children[0].params),\n      map(params => params.id),\n      distinctUntilChanged(),\n      shareReplay(),\n      takeUntil(this.destroy$)\n    );\n\n    // done to get the first navigation\n    this.activeChildParam$.subscribe();\n  }\n}\n","<c8y-sv-list\n  [emptyStateIcon]=\"'c8y-alert-idle'\"\n  [title]=\"'Alarms list' | translate\"\n  [emptyStateTitle]=\"'No alarms to display.' | translate\"\n  [loading]=\"isInitialLoading || isEmptyListLoading\"\n  [showEmptyState]=\"isEmptyListLoading && !isInitialLoading && hasPermissions\"\n  [docsUrl]=\"\n    '/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms'\n  \"\n  data-cy=\"c8y-alarms-list\"\n  #scrollWrapper\n>\n  <c8y-sv-header-actions>\n    <ng-content></ng-content>\n  </c8y-sv-header-actions>\n\n  <c8y-sv-alerts>\n    <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n    @if (\n      !isEmptyListLoading &&\n      (activeChildParam$ | async) &&\n      (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n    ) {\n      <div\n        class=\"alert alert-warning m-b-0\"\n        role=\"alert\"\n        translate\n      >\n        The selected alarm is not currently in the list, change your filter.\n      </div>\n    }\n  </c8y-sv-alerts>\n\n  @if (!hasPermissions) {\n    <c8y-dynamic-component-alerts\n      [alerts]=\"permissionAlertAggregator\"\n    ></c8y-dynamic-component-alerts>\n  } @else {\n    <c8y-list-group class=\"c8y-list--timeline d-block p-r-16 p-t-16\">\n      <c8y-li-timeline\n        class=\"pointer c8y-list--timeline__item\"\n        role=\"button\"\n        data-cy=\"c8y-alarms-list--timeline-repeat\"\n        *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n        [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n        routerLinkActive=\"active\"\n        [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n        (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n        (click)=\"onAlarmOpen(alarm)\"\n        [queryParams]=\"\n          navigationOptions.includeClearedQueryParams\n            ? { showCleared: alarm.status === 'CLEARED' }\n            : {}\n        \"\n      >\n        <span\n          [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n          [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n          placement=\"right\"\n          container=\"body\"\n          data-cy=\"c8y-alarms-list--last-occurrence-date\"\n          [delay]=\"500\"\n        >\n          {{ alarm.time | c8yDate: 'mediumDate' }}\n          {{ alarm.time | c8yDate: 'mediumTime' }}\n        </span>\n        <c8y-li\n          style=\"scroll-margin-top: 56px\"\n          #liScrollAnchor\n        >\n          <c8y-li-icon class=\"a-s-start\">\n            <div class=\"alarm-icons\">\n              <c8y-alarms-icon\n                [typeFilters]=\"typeFilters\"\n                [alarm]=\"alarm\"\n              ></c8y-alarms-icon>\n            </div>\n            @if (alarm.firstOccurrenceTime) {\n              <button\n                class=\"btn-clean text-center\"\n                [attr.aria-label]=\"\n                  alarmBadgeTooltip\n                    | translate\n                      : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n                \"\n                [tooltip]=\"\n                  alarmBadgeTooltip\n                    | translate\n                      : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n                \"\n                placement=\"right\"\n                container=\"body\"\n                type=\"button\"\n                data-cy=\"c8y-alarms-list--badge\"\n                (click)=\"$event.stopPropagation()\"\n                [delay]=\"500\"\n              >\n                @if (alarm.count > 1) {\n                  <span class=\"badge badge-info\">\n                    {{ alarm.count }}\n                  </span>\n                }\n              </button>\n            }\n          </c8y-li-icon>\n          <c8y-li-body class=\"a-s-stretch\">\n            <div class=\"d-flex a-i-start fit-h\">\n              <div class=\"min-width-0 flex-grow\">\n                <p\n                  class=\"text-truncate-wrap p-b-4\"\n                  data-cy=\"c8y-alarms-list--alarm-text\"\n                >\n                  {{ alarm.text | translate }}\n                </p>\n                <div class=\"d-flex\">\n                  <p\n                    class=\"small text-muted text-truncate flex-grow\"\n                    [title]=\"alarm.source.name\"\n                    data-cy=\"c8y-alarms-list--alarm-source-name\"\n                  >\n                    <i [c8yIcon]=\"'exchange'\"></i>\n                    {{ alarm.source.name }}\n                  </p>\n                  <div class=\"d-flex\">\n                    @for (item of alarm | alarmListIndicator | async; track $index) {\n                      <div [title]=\"item.title | translate\">\n                        <i\n                          [class]=\"item.class\"\n                          [c8yIcon]=\"item.icon\"\n                        ></i>\n                      </div>\n                    }\n                  </div>\n                </div>\n              </div>\n            </div>\n          </c8y-li-body>\n        </c8y-li>\n      </c8y-li-timeline>\n    </c8y-list-group>\n  }\n</c8y-sv-list>\n","import {\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormBuilder,\n  NG_VALUE_ACCESSOR,\n  FormsModule,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Severity, SeverityType } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  DateTimeContext,\n  IconDirective,\n  FormGroupComponent,\n  C8yTranslateDirective,\n  DateTimePickerComponent,\n  MessagesComponent,\n  MessageDirective,\n  C8yTranslatePipe,\n  DatePipe\n} from '@c8y/ngx-components';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport {\n  AlarmListFormFilters,\n  INTERVAL_TITLES_EXTENDED,\n  INTERVALS_EXTENDED,\n  WidgetTimeContextStateExtended\n} from './alarms.model';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { AlarmFilterInterval, IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { NgClass } from '@angular/common';\n\n@Component({\n  selector: 'c8y-alarms-date-filter',\n  templateUrl: './alarms-date-filter.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AlarmsDateFilterComponent),\n      multi: true\n    }\n  ],\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    BsDropdownDirective,\n    BsDropdownToggleDirective,\n    TooltipDirective,\n    IconDirective,\n    BsDropdownMenuDirective,\n    IntervalPickerComponent,\n    FormGroupComponent,\n    NgClass,\n    C8yTranslateDirective,\n    DateTimePickerComponent,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslatePipe,\n    DatePipe\n  ]\n})\nexport class AlarmsDateFilterComponent implements OnDestroy, ControlValueAccessor {\n  readonly INTERVALS = INTERVALS_EXTENDED;\n  readonly INTERVAL_TITLES = INTERVAL_TITLES_EXTENDED;\n  readonly DATE_FORMAT = 'short';\n\n  @Input() DEFAULT_INTERVAL: AlarmFilterInterval['id'] = 'none';\n  @Input() updateQueryParams = true;\n  /**\n   * Date range to be displayed in the date picker.\n   */\n  @Input() date: [string, string];\n  noFilterLabel = gettext('No date filter');\n\n  private showCleared: boolean;\n  private severityOptions: { [key in SeverityType]: boolean };\n  private typeFilters: string;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  @Output() dateFilterChange = new EventEmitter<AlarmListFormFilters>();\n  @ViewChild(BsDropdownDirective) dropdown: BsDropdownDirective;\n\n  form: ReturnType<AlarmsDateFilterComponent['createForm']>;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange: (value: any) => void;\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private router: Router,\n    private activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService\n  ) {}\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  ngOnInit() {\n    const context = this.getDefaultContext();\n    this.form = this.createForm(context);\n    this.date = [\n      this.form.value.currentDateContextFromDate,\n      this.form.value.currentDateContextToDate\n    ];\n    this.activatedRoute.queryParams.pipe(take(1), takeUntil(this.destroy$)).subscribe(params => {\n      this.showCleared = params.showCleared === 'true';\n      this.severityOptions = {\n        [Severity.CRITICAL]: params.critical === 'true',\n        [Severity.MAJOR]: params.major === 'true',\n        [Severity.MINOR]: params.minor === 'true',\n        [Severity.WARNING]: params.warning === 'true'\n      };\n      if (params.typeFilters) {\n        this.typeFilters = params.typeFilters;\n      }\n      if (!params.interval) {\n        return;\n      }\n      if (params.interval !== 'custom') {\n        this.updateDateTime(params.interval);\n      } else {\n        this.form.patchValue({\n          currentDateContextInterval: params.interval,\n          temporaryUserSelectedFromDate: params.lastUpdatedFrom,\n          temporaryUserSelectedToDate: params.createdTo\n        });\n        this.date = [params.lastUpdatedFrom, params.createdTo];\n      }\n    });\n\n    this.subscribeToIntervalChange();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  applyDateFilter(): void {\n    const combinedFormEvent = {\n      showCleared: this.showCleared,\n      severityOptions: this.severityOptions,\n      typeFilters: this.typeFilters,\n      interval: this.form.value.currentDateContextInterval,\n      selectedDates: [\n        new Date(this.form.value.temporaryUserSelectedFromDate),\n        new Date(this.form.value.temporaryUserSelectedToDate)\n      ] as DateTimeContext\n    };\n\n    // needed for custom interval\n    this.date = [\n      this.form.value.temporaryUserSelectedFromDate,\n      this.form.value.temporaryUserSelectedToDate\n    ];\n\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams: {\n        interval: this.form.value.currentDateContextInterval,\n        lastUpdatedFrom: combinedFormEvent.selectedDates[0].toISOString(),\n        createdTo: combinedFormEvent.selectedDates[1].toISOString()\n      },\n      queryParamsHandling: 'merge'\n    });\n    this.dateFilterChange.emit(combinedFormEvent);\n  }\n\n  writeValue(value: any): void {\n    if (value) {\n      this.form.patchValue({\n        currentDateContextFromDate:\n          typeof value[0] === 'string' ? value[0] : value[0].toISOString(),\n        currentDateContextToDate: typeof value[1] === 'string' ? value[1] : value[1].toISOString()\n      });\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any) {\n    this.onTouched = onTouched;\n  }\n\n  private updateDateTime(interval: AlarmFilterInterval['id']): void {\n    const date = this.alarmsViewService.getDateTimeContextByInterval(interval);\n    if (this.dropdown) {\n      this.dropdown.isOpen = false;\n    }\n    this.date = date.map(d => d.toISOString()) as [string, string];\n    this.form.patchValue(\n      {\n        temporaryUserSelectedFromDate: date[0].toISOString(),\n        temporaryUserSelectedToDate: date[1].toISOString(),\n        currentDateContextInterval: interval\n      },\n      { emitEvent: false }\n    );\n    this.applyDateFilter();\n  }\n\n  private getDefaultContext() {\n    return {\n      date: this.alarmsViewService.getDateTimeContextByInterval(this.DEFAULT_INTERVAL),\n      interval: this.DEFAULT_INTERVAL\n    };\n  }\n\n  private subscribeToIntervalChange(): void {\n    this.form.controls.currentDateContextInterval.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(interval => {\n        if (interval === 'custom') {\n          this.form.patchValue(\n            {\n              temporaryUserSelectedFromDate:\n                this.form.controls.temporaryUserSelectedFromDate.value === new Date(0).toISOString()\n                  ? this.form.controls.currentDateContextToDate.value\n                  : this.form.controls.temporaryUserSelectedFromDate.value,\n              currentDateContextInterval: interval\n            },\n            { emitEvent: false }\n          );\n          return;\n        }\n        this.updateDateTime(interval);\n      });\n  }\n\n  private createForm(context: WidgetTimeContextStateExtended) {\n    return this.formBuilder.group({\n      temporaryUserSelectedFromDate: context.date[0].toISOString(),\n      temporaryUserSelectedToDate: context.date[1].toISOString(),\n      currentDateContextFromDate: context.date[0].toISOString(),\n      currentDateContextToDate: context.date[1].toISOString(),\n      currentDateContextInterval: context.interval || 'custom'\n    });\n  }\n}\n","<form\n  class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n  [formGroup]=\"form\"\n>\n  <div\n    class=\"dropdown flex-grow\"\n    container=\"body\"\n    #dropDirection=\"bs-dropdown\"\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=\"{{\n        (form.value.currentDateContextInterval === 'none'\n          ? noFilterLabel\n          : (date[0] | c8yDate: DATE_FORMAT) + ' — ' + (date[1] | c8yDate: DATE_FORMAT)\n        ) | translate\n      }}\"\n      tooltip=\"{{\n        (form.value.currentDateContextInterval === 'none'\n          ? noFilterLabel\n          : (date[0] | c8yDate: DATE_FORMAT) + ' — ' + (date[1] | c8yDate: DATE_FORMAT)\n        ) | translate\n      }}\"\n      placement=\"top\"\n      container=\"body\"\n      data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      dropdownToggle\n    >\n      <i\n        class=\"m-r-4\"\n        c8yIcon=\"schedule1\"\n      ></i>\n      <div class=\"d-col text-left fit-w\">\n        <span\n          class=\"text-12\"\n          data-cy=\"widget-time-context--selected-interval\"\n        >\n          {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n        </span>\n        @if (form.controls.currentDateContextInterval.value !== 'none') {\n          <span\n            class=\"text-10 text-muted text-truncate\"\n            data-cy=\"alarms-date-filter--selected-time-range\"\n          >\n            {{ date[0] | c8yDate: DATE_FORMAT }} — {{ date[1] | c8yDate: DATE_FORMAT }}\n          </span>\n        }\n      </div>\n      <span class=\"caret m-r-16 m-l-4\"></span>\n    </button>\n\n    <ul\n      class=\"dropdown-menu dropdown-menu--date-range\"\n      *dropdownMenu\n    >\n      <c8y-interval-picker\n        class=\"d-contents\"\n        formControlName=\"currentDateContextInterval\"\n        [INTERVALS]=\"INTERVALS\"\n      ></c8y-interval-picker>\n\n      @if (form.controls.currentDateContextInterval.value === 'custom') {\n        <div class=\"p-l-16 p-r-16\">\n          <c8y-form-group\n            class=\"m-b-8\"\n            [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n          >\n            <label\n              [title]=\"'From`date`' | translate\"\n              for=\"temporaryUserSelectedFromDate\"\n              translate\n            >\n              From`date`\n            </label>\n            <c8y-date-time-picker\n              id=\"temporaryUserSelectedFromDate\"\n              [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n              [placeholder]=\"'From`date`' | translate\"\n              [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n              [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n            ></c8y-date-time-picker>\n            <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n              <c8y-message\n                name=\"dateAfterRangeMax\"\n                [text]=\"'This date is after the latest allowed date.' | translate\"\n              ></c8y-message>\n              <c8y-message\n                name=\"invalidDateTime\"\n                [text]=\"'This date is invalid.' | translate\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n\n          <c8y-form-group\n            class=\"m-b-8\"\n            [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n          >\n            <label\n              [title]=\"'To`date`' | translate\"\n              for=\"temporaryUserSelectedToDate\"\n              translate\n            >\n              To`date`\n            </label>\n            <c8y-date-time-picker\n              id=\"temporaryUserSelectedToDate\"\n              [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n              [placeholder]=\"'To`date`' | translate\"\n              [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n              [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n            ></c8y-date-time-picker>\n            <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n              <c8y-message\n                name=\"dateBeforeRangeMin\"\n                [text]=\"'This date is before the earliest allowed date.' | translate\"\n              ></c8y-message>\n              <c8y-message\n                name=\"invalidDateTime\"\n                [text]=\"'This date is invalid.' | translate\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div class=\"p-16 d-flex gap-8 separator-top\">\n          <button\n            class=\"btn btn-primary btn-sm flex-grow\"\n            title=\"{{ 'Apply' | translate }}\"\n            type=\"button\"\n            (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n            [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n            translate\n          >\n            Apply\n          </button>\n        </div>\n      }\n    </ul>\n  </div>\n</form>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IAlarm, IResultList } from '@c8y/client';\nimport {\n  ColorService,\n  IconDirective,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemCheckboxComponent,\n  EmptyStateComponent,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AlarmDetails, AlarmEventSelectorService } from '@c8y/ngx-components/alarm-event-selector';\nimport { map, Subject, takeUntil } from 'rxjs';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgStyle } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-alarms-type-filter',\n  templateUrl: './alarms-type-filter.component.html',\n  imports: [\n    BsDropdownDirective,\n    CdkTrapFocus,\n    IconDirective,\n    NgStyle,\n    BsDropdownToggleDirective,\n    BsDropdownMenuDirective,\n    ListGroupComponent,\n    FormsModule,\n    TooltipDirective,\n    ListItemComponent,\n    ListItemCheckboxComponent,\n    EmptyStateComponent,\n    C8yTranslateDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class AlarmsTypeFilterComponent implements OnInit, OnDestroy, OnChanges {\n  @Input()\n  alarms: IResultList<IAlarm>;\n\n  @Input()\n  possibleFilters: AlarmDetails[] = [];\n\n  @Input()\n  activeFilters: AlarmDetails[] = [];\n\n  @Output()\n  onFilterChanged: EventEmitter<AlarmDetails[]> = new EventEmitter();\n\n  customAlarmTypes: AlarmDetails[] = [];\n  customAlarmTypeInput = '';\n\n  readonly queryParamName = 'typeFilter';\n  readonly STORAGE_ACCESS_KEY = 'customAlarmTypes';\n\n  private destroy$ = new Subject<void>();\n  private currentQueryParam = '';\n\n  constructor(\n    private alarmEventSelectorService: AlarmEventSelectorService,\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n    private colorService: ColorService\n  ) {}\n\n  ngOnInit(): void {\n    this.setQueryParameterObservable();\n  }\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.alarms && changes.alarms.currentValue && this.activeFilters.length === 0) {\n      await this.setPossibleFilters();\n      this.applyFilterChange();\n    }\n  }\n\n  setQueryParameterObservable() {\n    this.activatedRoute.queryParams\n      .pipe(\n        map(params => {\n          const alarms: AlarmDetails[] = this.possibleFilters;\n          const possibleFilters = this.setActiveAlarmFiltersFromQueryParameter(\n            alarms,\n            params[this.queryParamName]\n          );\n          return possibleFilters;\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe((possibleFilters: AlarmDetails[]) => {\n        this.possibleFilters = possibleFilters;\n        this.applyFilterChange();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  toggleAlarmType(alarmType: AlarmDetails) {\n    alarmType.__active = !alarmType.__active;\n  }\n\n  deselect(type: AlarmDetails) {\n    const alarmFilter = this.possibleFilters.find(\n      alarm => alarm.filters.type === type.filters.type\n    );\n    alarmFilter.__active = false;\n    this.applyFilterChange();\n  }\n\n  deselectAll() {\n    this.possibleFilters = this.possibleFilters.map(alarm => {\n      return {\n        ...alarm,\n        __active: false\n      };\n    });\n    this.applyFilterChange();\n  }\n\n  applyFilterChange() {\n    const actives = this.possibleFilters.filter(\n      (alarmFilter: AlarmDetails) => alarmFilter.__active\n    );\n    const newQueryParam = this.getQueryParams(actives);\n    const hasChanged = newQueryParam !== this.currentQueryParam;\n    if (hasChanged) {\n      this.activeFilters = actives;\n      this.onFilterChanged.emit(this.activeFilters);\n      this.router.navigate([], {\n        queryParams: {\n          typeFilter: newQueryParam || null\n        },\n        queryParamsHandling: 'merge'\n      });\n      this.currentQueryParam = newQueryParam;\n    }\n  }\n\n  resetFilters() {\n    this.possibleFilters.forEach(possibleFilter => {\n      possibleFilter.__active = this.activeFilters.some(\n        (activeFilter: AlarmDetails) => activeFilter === possibleFilter\n      );\n    });\n  }\n\n  removeCustomAlarm(alarmDetails: AlarmDetails) {\n    this.possibleFilters = this.possibleFilters.filter(filter => filter !== alarmDetails);\n    this.storeCustomAlarmTypes();\n  }\n\n  confirmWithEnter(event: KeyboardEvent) {\n    if (event.key === 'Enter') {\n      this.addCustomAlarmType();\n    }\n  }\n\n  async addCustomAlarmType() {\n    if (!this.customAlarmTypeInput) {\n      return;\n    }\n    this.possibleFilters.unshift({\n      label: this.customAlarmTypeInput,\n      color: await this.colorService.generateColor(this.customAlarmTypeInput),\n      filters: {\n        type: this.customAlarmTypeInput\n      },\n      timelineType: 'ALARM',\n      __active: true,\n      __target: null\n    });\n    this.customAlarmTypeInput = '';\n    this.storeCustomAlarmTypes();\n  }\n\n  private storeCustomAlarmTypes() {\n    const customTypes = this.possibleFilters.filter((filter: AlarmDetails) => !filter.__target);\n    window.localStorage.setItem(this.STORAGE_ACCESS_KEY, JSON.stringify(customTypes));\n  }\n\n  private getCustomAlarmTypeFromStorage() {\n    const types = window.localStorage.getItem(this.STORAGE_ACCESS_KEY);\n    return types ? JSON.parse(types) : [];\n  }\n\n  private async setPossibleFilters() {\n    const queryParameters = this.activatedRoute.snapshot.queryParamMap.get(this.queryParamName);\n    const alarmTypesFromCurrentlyShownAlarms =\n      await this.alarmEventSelectorService.getUniqueAlarmsOnly(this.alarms.data);\n    const customAlarmTypesFromLocalStorage = this.getCustomAlarmTypeFromStorage();\n    const selectableAlarmTypes = this.setActiveAlarmFiltersFromQueryParameter(\n      [...customAlarmTypesFromLocalStorage, ...alarmTypesFromCurrentlyShownAlarms],\n      queryParameters\n    );\n    this.possibleFilters = selectableAlarmTypes;\n  }\n\n  private setActiveAlarmFiltersFromQueryParameter(\n    alarmFilters: AlarmDetails[],\n    filterTypesQuery = ''\n  ): AlarmDetails[] {\n    const types = (filterTypesQuery ?? '').split(',');\n    return alarmFilters.map((alarm: AlarmDetails) => ({\n      ...alarm,\n      __active: types.includes(alarm.filters.type)\n    }));\n  }\n\n  private getQueryParams(activeFilters: AlarmDetails[]): string {\n    return activeFilters.map(filter => filter.filters.type).join(',');\n  }\n}\n","<div class=\"d-flex a-i-center\">\n  <div\n    class=\"dropdown\"\n    title=\"{{ 'Filter by alarm types' | translate }}\"\n    dropdown\n    #filtersDropdown=\"bs-dropdown\"\n    [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n    (onHidden)=\"resetFilters()\"\n    [insideClick]=\"true\"\n  >\n    <div class=\"input-group fit-w\">\n      <div class=\"form-control d-flex a-i-center inner-scroll\">\n        @if (activeFilters.length > 0) {\n          @for (filter of activeFilters; track $index) {\n            <span\n              class=\"tag tag--info chip\"\n              style=\"max-width: 150px\"\n            >\n              <button\n                class=\"btn btn-xs btn-clean text-10\"\n                title=\"{{ 'Remove' | translate }}\"\n                type=\"button\"\n                (click)=\"$event.stopPropagation(); deselect(filter)\"\n              >\n                <i c8yIcon=\"times\"></i>\n              </button>\n              <span\n                class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n                [ngStyle]=\"{ 'background-color': filter.color }\"\n              >\n                <i\n                  class=\"stroked-icon\"\n                  c8yIcon=\"bell\"\n                ></i>\n              </span>\n              <span\n                class=\"text-truncate text-12 flex-grow\"\n                [title]=\"filter.filters.type\"\n                [attr.aria-label]=\"filter.filters.type\"\n              >\n                {{ filter.filters.type }}\n              </span>\n            </span>\n          }\n        } @else {\n          <span class=\"text-nowrap\">\n            {{ 'All alarm types' | translate }}\n          </span>\n        }\n      </div>\n      <div class=\"input-group-btn input-group-btn--last text-center\">\n        @if (activeFilters.length) {\n          <button\n            class=\"btn-default btn\"\n            [title]=\"'Clear filters' | translate\"\n            (click)=\"deselectAll()\"\n          >\n            <i c8yIcon=\"times\"></i>\n          </button>\n        }\n        <button\n          class=\"btn-default btn btn--caret\"\n          [title]=\"'Alarm types' | translate\"\n          data-cy=\"c8y-alarm-type-filter\"\n          dropdownToggle\n        >\n          <i class=\"caret\"></i>\n        </button>\n      </div>\n    </div>\n    <div\n      class=\"dropdown-menu dropdown-menu-action-bar\"\n      style=\"min-width: 250px\"\n      *dropdownMenu\n    >\n      <div class=\"p-16 bg-level-2\">\n        <div>\n          <p>\n            <i\n              class=\"text-info m-r-4\"\n              [c8yIcon]=\"'info-circle'\"\n            ></i>\n            <strong translate>The list below may not be complete.</strong>\n          </p>\n          <p>\n            <span translate>\n              Recent alarms are displayed below but older ones may not be shown.\n            </span>\n            <span translate>Optionally, you can add a custom alarm.</span>\n          </p>\n        </div>\n      </div>\n      <c8y-list-group>\n        <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n          <input\n            class=\"form-control\"\n            type=\"text\"\n            [placeholder]=\"'Custom alarm type' | translate\"\n            [(ngModel)]=\"customAlarmTypeInput\"\n            (keydown)=\"confirmWithEnter($event)\"\n          />\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn-dot text-primary\"\n              [attr.aria-label]=\"'Add custom alarm' | translate\"\n              [tooltip]=\"'Add' | translate\"\n              placement=\"top\"\n              [delay]=\"500\"\n              (click)=\"addCustomAlarmType()\"\n            >\n              <i c8yIcon=\"plus-circle\"></i>\n            </button>\n          </div>\n        </div>\n\n        @for (alarmType of possibleFilters; track $index) {\n          <c8y-li\n            class=\"c8y-list__item__collapse--container-small cdk-drag\"\n            style=\"cursor: pointer\"\n            (click)=\"toggleAlarmType(alarmType)\"\n          >\n            <c8y-li-checkbox\n              class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n              [selected]=\"alarmType.__active\"\n              (click)=\"$event.stopPropagation()\"\n              (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n            ></c8y-li-checkbox>\n            <div class=\"d-flex a-i-center p-l-4\">\n              <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n                <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n                  <span\n                    class=\"circle-icon-wrapper\"\n                    [ngStyle]=\"{ 'background-color': alarmType.color }\"\n                  >\n                    <i\n                      class=\"stroked-icon\"\n                      [c8yIcon]=\"'bell'\"\n                    ></i>\n                  </span>\n                </div>\n              </div>\n              <span\n                class=\"text-truncate text-12 flex-grow\"\n                [title]=\"alarmType.label\"\n                [attr.aria-label]=\"alarmType.label\"\n              >\n                {{ alarmType.label }}\n              </span>\n              @if (alarmType.__target === null) {\n                <button\n                  class=\"btn-dot btn-dot--danger\"\n                  [attr.aria-label]=\"'Remove' | translate\"\n                  tooltip=\"'Remove' | translate\"\n                  placement=\"top\"\n                  [delay]=\"500\"\n                  (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n                >\n                  <i c8yIcon=\"minus-circle\"></i>\n                </button>\n              }\n            </div>\n          </c8y-li>\n        }\n        @if (possibleFilters.length === 0) {\n          <c8y-li>\n            <c8y-ui-empty-state\n              class=\"p-t-8\"\n              icon=\"c8y-alarm\"\n              [title]=\"'No alarm found' | translate\"\n              [subtitle]=\"\n                'There is no alarm to filter. You can still add a custom alarm.' | translate\n              \"\n              [horizontal]=\"true\"\n            ></c8y-ui-empty-state>\n          </c8y-li>\n        }\n        <div class=\"sticky-bottom p-16\">\n          <button\n            class=\"btn btn-block btn-primary\"\n            [disabled]=\"possibleFilters.length === 0\"\n            (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n            translate\n          >\n            Apply\n          </button>\n        </div>\n      </c8y-list-group>\n    </div>\n  </div>\n</div>\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { Component, HostListener, OnDestroy, OnInit, signal, ViewChild } from '@angular/core';\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\nimport {\n  AlarmQueryFilter,\n  IAlarm,\n  IResultList,\n  SEVERITY_LABELS,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport {\n  ActionBarItemComponent,\n  AlarmWithChildrenRealtimeService,\n  AlertService,\n  C8yTranslatePipe,\n  ContextRouteService,\n  DateTimeContext,\n  GainsightService,\n  HelpComponent,\n  IconDirective,\n  ModalService,\n  SplitViewComponent,\n  SplitViewDetailsComponent,\n  TitleComponent,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  takeUntil,\n  throttleTime\n} from 'rxjs/operators';\nimport { AlarmsActivityTrackerService } from './alarms-activity-tracker.service';\nimport { AlarmsDateFilterComponent } from './alarms-date-filter.component';\nimport { AlarmsFilterComponent } from './alarms-filter.component';\nimport { AlarmsIntervalRefreshComponent } from './alarms-interval-refresh.component';\nimport { AlarmsListComponent } from './alarms-list.component';\nimport { AlarmsTypeFilterComponent } from './alarms-type-filter.component';\nimport { AlarmsViewService } from './alarms-view.service';\n\nimport {\n  AlarmListFormFilters,\n  DEFAULT_SEVERITY_VALUES,\n  PRODUCT_EXPERIENCE_ALARMS,\n  ReloadAlarmsListType,\n  THROTTLE_REALTIME_REFRESH\n} from './alarms.model';\n\n@Component({\n  selector: 'c8y-alarms',\n  templateUrl: './alarms.component.html',\n  providers: [AlarmWithChildrenRealtimeService, AlarmsActivityTrackerService],\n  imports: [\n    SplitViewComponent,\n    SplitViewDetailsComponent,\n    TitleComponent,\n    HelpComponent,\n    ActionBarItemComponent,\n    AlarmsFilterComponent,\n    AlarmsDateFilterComponent,\n    AlarmsTypeFilterComponent,\n    IconDirective,\n    TooltipDirective,\n    NgClass,\n    AlarmsListComponent,\n    AlarmsIntervalRefreshComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    RouterOutlet\n  ]\n})\nexport class AlarmsComponent implements OnInit, OnDestroy {\n  readonly NEW_REALTIME_ALARM_MESSAGE = this.alarmsViewService.REALTIME_UPDATE_ALARMS_MESSAGE;\n  readonly TITLE = gettext('Alarms');\n  readonly REFRESH_LABEL = gettext('Refresh');\n\n  @ViewChild(AlarmsIntervalRefreshComponent)\n  alarmIntervalRefreshComponent: AlarmsIntervalRefreshComponent;\n  alarms$: BehaviorSubject<IResultList<IAlarm>> = new BehaviorSubject<IResultList<IAlarm>>(null);\n  contextSourceId: number | string | null;\n  /** responsible for showing either realtime button or intervals, based on 'refreshType' key in OptionsService */\n  isIntervalRefresh: boolean;\n  isLoading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  isRealtimeActive = new BehaviorSubject<boolean>(false);\n  realtimeIconTitle: string;\n  shouldShowIntervalToggle$ = new BehaviorSubject<boolean>(true);\n  isRealtimeToggleOn = true;\n  typeFilters: AlarmDetails[] = [];\n  isDisabled = false;\n  isListScrolled = signal(false);\n\n  private destroy$: Subject<void> = new Subject<void>();\n  private selectedSeverities = Object.keys(SEVERITY_LABELS) as SeverityType[];\n  private severityOptions: SeverityFilter = DEFAULT_SEVERITY_VALUES;\n  private showCleared = false;\n  private readonly WAIT_TIME_AVOID_MULTIPLE_REQUEST_BY_PARAM_CHANGE = 100;\n  private selectedDates: DateTimeContext;\n\n  constructor(\n    public activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService,\n    private alarmWithChildrenRealtimeService: AlarmWithChildrenRealtimeService,\n    private alertService: AlertService,\n    private contextRouteService: ContextRouteService,\n    private modalService: ModalService,\n    private translateService: TranslateService,\n    private gainsightService: GainsightService,\n    private alarmsActivityTrackerService: AlarmsActivityTrackerService\n  ) {\n    this.isIntervalRefresh = this.alarmsViewService.isIntervalRefresh();\n    this.initializeContextSourceId();\n  }\n\n  ngOnInit() {\n    this.alarmsActivityTrackerService.setupEventListenersForGainsight();\n    this.alarmsActivityTrackerService.resetInactivityTimer();\n\n    this.alarmsActivityTrackerService.isUserActive$\n      .pipe(distinctUntilChanged(), takeUntil(this.destroy$))\n      .subscribe(isActive =>\n        isActive\n          ? this.alarmsActivityTrackerService.setGainsightInterval()\n          : this.alarmsActivityTrackerService.clearGainsightInterval()\n      );\n\n    const isInDetailView = !!this.activatedRoute.children[0]?.snapshot.params.id;\n    if (isInDetailView) {\n      this.changeInterval(false);\n    }\n\n    if (!this.isIntervalRefresh) {\n      this.handleLegacyRealtime();\n    }\n\n    this.alarmsViewService.reloadAlarmsList$\n      .pipe(\n        debounceTime(this.WAIT_TIME_AVOID_MULTIPLE_REQUEST_BY_PARAM_CHANGE),\n        takeUntil(this.destroy$)\n      )\n      .subscribe((value: ReloadAlarmsListType) => {\n        this.updateAlarms(value);\n      });\n    if (this.isIntervalRefresh) {\n      this.alarmsViewService.isIntervalEnabled$\n        .pipe(\n          takeUntil(this.destroy$),\n          filter(() => !this.isListScrolled())\n        )\n        .subscribe(value => this.changeInterval(value));\n    }\n    this.alarmsViewService.closeDetailsView$.subscribe(\n      async () => await this.alarmsViewService.closeDetailsView(this.activatedRoute)\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS, {\n      component: PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARMS,\n      action: PRODUCT_EXPERIENCE_ALARMS.ACTIONS.USER_SPEND_TIME_ON_COMPONENT,\n      userSpendTime: this.alarmsViewService.convertSecondsToTime(\n        this.alarmsActivityTrackerService.userSecondsSpendOnPage\n      )\n    });\n    this.alarmsActivityTrackerService.clearGainsightInterval();\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  @HostListener('document:visibilitychange')\n  visibilityChange() {\n    if (document.hidden) {\n      this.alarmsActivityTrackerService.clearGainsightInterval();\n      return;\n    }\n    this.alarmsActivityTrackerService.setGainsightInterval();\n  }\n\n  applyTypeFilters(typeFilters: AlarmDetails[]): void {\n    this.typeFilters = typeFilters;\n    setTimeout(() =>\n      this.alarmsViewService.updateAlarmList(typeFilters.length > 0 ? 'gainsightTypeFilters' : null)\n    );\n    this.isRealtimeActive.next(false);\n  }\n\n  applyFormFilters({ severityOptions, showCleared, selectedDates }: AlarmListFormFilters): void {\n    this.severityOptions = severityOptions;\n    this.showCleared = showCleared;\n    this.selectedDates = selectedDates;\n    this.selectedSeverities = this.alarmsViewService.updateSelectedSeverities(this.severityOptions);\n    this.alarmsViewService.updateAlarmList();\n    this.isRealtimeActive.next(false);\n  }\n\n  async applyDateFilter(selectedDates: [Date, Date]): Promise<void> {\n    this.alarms$.next(await this.alarmsViewService.retrieveAlarmsByDate(selectedDates));\n    this.isRealtimeActive.next(false);\n  }\n\n  async clearAll(): Promise<void> {\n    try {\n      const translatedBody = this.translateService.instant(\n        gettext('Do you really want to clear all alarms of selected severities?')\n      );\n      await this.modalService.confirm(\n        gettext('Confirm clearing alarms?'),\n        translatedBody,\n        'danger',\n        {\n          ok: gettext('Confirm'),\n          cancel: gettext('Cancel')\n        }\n      );\n    } catch {\n      // modal canceled\n      return;\n    }\n\n    await this.clearAlarms();\n\n    this.alarmsViewService.closeDetailsView$.next();\n  }\n\n  refresh(): void {\n    this.updateAlarms(null);\n    this.isRealtimeActive.next(false);\n  }\n\n  async handleBackClick(): Promise<void> {\n    await this.alarmsViewService.closeDetailsView(this.activatedRoute);\n  }\n\n  changeInterval(value = true): void {\n    this.shouldShowIntervalToggle$.next(value);\n  }\n\n  toggleRealtimeState(): void {\n    this.isRealtimeToggleOn = !this.isRealtimeToggleOn;\n  }\n\n  private handleLegacyRealtime() {\n    this.realtimeIconTitle = this.translateService.instant(gettext('Realtime active'));\n    this.subscribeToRealtimeUpdates();\n  }\n\n  private async clearAlarms(): Promise<void> {\n    try {\n      const result = await this.alarmsViewService.clearAllActiveAlarms(\n        this.selectedSeverities,\n        this.contextSourceId\n      );\n\n      if (result.resolvedImmediately) {\n        this.alertService.success(this.translateService.instant(gettext('Alarms cleared.')));\n        this.refresh();\n      } else {\n        this.alertService.success(\n          this.translateService.instant(gettext('Alarms are being cleared in background.'))\n        );\n      }\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  private async getAlarms(): Promise<IResultList<IAlarm>> {\n    try {\n      this.isLoading$.next(true);\n\n      const additionalFilter: Partial<AlarmQueryFilter> = {};\n\n      if (this.contextSourceId) {\n        (additionalFilter.source = this.contextSourceId),\n          (additionalFilter.withSourceAssets = true),\n          (additionalFilter.withSourceDevices = true);\n      }\n\n      if (this.typeFilters.length > 0) {\n        additionalFilter.type = this.typeFilters.map(({ filters }) => filters.type).join(',');\n      }\n\n      return await this.alarmsViewService.retrieveFilteredAlarms(\n        this.selectedSeverities,\n        this.showCleared,\n        this.selectedDates,\n        additionalFilter\n      );\n    } catch (error) {\n      if (error?.res?.status === 403) {\n        this.isDisabled = true;\n        return;\n      }\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading$.next(false);\n    }\n  }\n\n  private async updateAlarms(value: ReloadAlarmsListType) {\n    const alarms = await this.getAlarms();\n    this.alarms$.next(alarms);\n    if (value === 'gainsightTypeFilters') {\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ALARMS.EVENTS.ALARMS, {\n        component: PRODUCT_EXPERIENCE_ALARMS.COMPONENTS.ALARMS_TYPE_FILTER,\n        action: PRODUCT_EXPERIENCE_ALARMS.ACTIONS.APPLY_TYPE_FILTER,\n        alarmsCount: alarms.data.length\n      });\n    }\n  }\n\n  private subscribeToRealtimeUpdates(): void {\n    this.alarmWithChildrenRealtimeService\n      .onAll$(this.contextSourceId)\n      .pipe(\n        takeUntil(this.destroy$),\n        throttleTime(THROTTLE_REALTIME_REFRESH, undefined, { trailing: true })\n      )\n      .subscribe(() => {\n        if (this.isRealtimeToggleOn) {\n          this.refresh();\n        } else {\n          this.isRealtimeActive.next(true);\n        }\n      });\n  }\n\n  private initializeContextSourceId(): void {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if (\n      [ViewContext.Device, ViewContext.Group, ViewContext.Service, ViewContext.Simulators].includes(\n        context\n      )\n    ) {\n      this.contextSourceId = contextData?.id;\n    }\n  }\n}\n","<c8y-title>{{ TITLE | translate }}</c8y-title>\n<c8y-help\n  src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form min-width-fit\"\n>\n  <c8y-alarms-filter\n    class=\"d-block fit-w\"\n    [contextSourceId]=\"contextSourceId\"\n    (onFilterApplied)=\"applyFormFilters($event)\"\n  ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form min-width-fit\"\n>\n  <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form\"\n>\n  <c8y-alarms-type-filter\n    class=\"d-block fit-w\"\n    [alarms]=\"alarms$ | async\"\n    (onFilterChanged)=\"applyTypeFilters($event)\"\n  ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  [priority]=\"0\"\n>\n  <button\n    class=\"btn btn-link\"\n    [title]=\"'Clear all alarms' | translate\"\n    type=\"button\"\n    (click)=\"clearAll()\"\n    data-cy=\"c8y-alarms-view--clear-all-button\"\n  >\n    <i c8yIcon=\"c8y-alert-idle\"></i>\n    {{ 'Clear all`alarms`' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-sv [resizableConfig]=\"{ trackId: 'alarms-split-view', collapsible: false }\">\n  <c8y-alarms-list\n    [isInitialLoading]=\"isLoading$ | async\"\n    [alarms]=\"alarms$ | async\"\n    [typeFilters]=\"typeFilters\"\n    (onScrollingStateChange)=\"changeInterval(!$event); isListScrolled.set($event)\"\n    (onSelectedAlarm)=\"changeInterval(false)\"\n    [hasPermissions]=\"!isDisabled\"\n  >\n    @if (isIntervalRefresh) {\n      <c8y-alarms-interval-refresh\n        [alarmsListLoading$]=\"isLoading$\"\n        [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n        (onCountdownEnded)=\"refresh()\"\n        [isDisabled]=\"isDisabled\"\n      ></c8y-alarms-interval-refresh>\n    } @else {\n      <div class=\"input-group-btn\">\n        <button\n          class=\"btn btn-default btn-sm\"\n          [attr.aria-label]=\"'Refresh' | translate\"\n          [tooltip]=\"\n            (isRealtimeActive | async)\n              ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n              : (REFRESH_LABEL | translate)\n          \"\n          placement=\"left\"\n          container=\"body\"\n          type=\"button\"\n          [adaptivePosition]=\"false\"\n          [delay]=\"500\"\n          [disabled]=\"isLoading$ | async\"\n          (click)=\"refresh()\"\n        >\n          @if (isRealtimeActive | async) {\n            <span class=\"tag tag--info m-r-8\">\n              {{ 'New alarms' | translate }}\n            </span>\n          }\n          <i\n            c8yIcon=\"refresh\"\n            [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n          ></i>\n        </button>\n        <button\n          class=\"c8y-realtime btn btn-default btn-sm\"\n          [attr.aria-label]=\"realtimeIconTitle\"\n          [tooltip]=\"realtimeIconTitle\"\n          placement=\"bottom\"\n          type=\"button\"\n          data-cy=\"c8y-alarms--realtime-button\"\n          [container]=\"'body'\"\n          (click)=\"toggleRealtimeState()\"\n        >\n          <span\n            class=\"c8y-pulse m-0\"\n            [ngClass]=\"{\n              active: isRealtimeToggleOn,\n              inactive: !isRealtimeToggleOn\n            }\"\n          ></span>\n        </button>\n      </div>\n    }\n  </c8y-alarms-list>\n\n  <c8y-sv-details\n    emptyStateIcon=\"alarm\"\n    [emptyStateTitle]=\"'No alarm selected' | translate\"\n    [emptyStateSubtitle]=\"'Select an alarm from the list to view its details.' | translate\"\n    (backClick)=\"handleBackClick()\"\n  >\n    <router-outlet></router-outlet>\n  </c8y-sv-details>\n</c8y-sv>\n","import { Routes } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ContextRouteComponent,\n  ContextRouteGuard,\n  Route,\n  RouterTabsResolver,\n  ViewContext,\n  ViewContextRootRoute\n} from '@c8y/ngx-components';\nimport { AlarmInfoComponent } from './alarm-info.component';\n\nexport function getViewContextRoutes(contexts: ViewContext[]): Routes {\n  return contexts.map(context => ({\n    context,\n    path: 'details',\n    icon: 'bell',\n    label: gettext('Details'),\n    component: AlarmInfoComponent,\n    tabsOutlet: 'alarms'\n  }));\n}\n\nexport function getChildrenForViewContext(context: ViewContext): Routes {\n  return [\n    {\n      path: '',\n      // No component for empty path - router-outlet won't activate\n      // This allows details panel to slide out on mobile, showing the list\n      // On desktop, split-view-details will show its custom empty state\n      children: []\n    },\n    {\n      path: ':id',\n      rootContext: context,\n      component: ContextRouteComponent,\n      canActivate: [ContextRouteGuard],\n      data: { context, contextData: {} },\n      resolve: {\n        tabs: RouterTabsResolver\n      }\n    }\n  ] as Array<Route | ViewContextRootRoute>;\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { TitleCasePipe } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n  CommonModule,\n  CoreModule,\n  DynamicComponentModule,\n  HeaderModule,\n  RelativeTimePipe,\n  hookNavigator,\n  hookRoute,\n  C8yTranslateModule\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AlarmDetailsComponent } from './alarm-details.component';\nimport { AlarmEmptyComponent } from './alarm-empty.component';\nimport { AlarmInfoComponent } from './alarm-info.component';\nimport { AlarmSeveritiesToTitlePipe } from './alarm-severities-to-title.pipe';\nimport { AlarmSeverityToIconPipe } from './alarm-severity-to-icon.pipe';\nimport { AlarmSeverityToLabelPipe } from './alarm-severity-to-label.pipe';\nimport { AlarmStatusToIconPipe } from './alarm-status-to-icon.pipe';\nimport { AlarmStatusToLabelPipe } from './alarm-status-to-label.pipe';\nimport { AlarmsFilterComponent } from './alarms-filter.component';\nimport { AlarmsIconComponent } from './alarms-icon.component';\nimport { AlarmsIntervalRefreshComponent } from './alarms-interval-refresh.component';\nimport { AlarmsListComponent } from './alarms-list.component';\nimport { AlarmsComponent } from './alarms.component';\nimport { ALARMS_MODULE_CONFIG, AlarmsModuleConfig } from './alarms.model';\nimport { AuditChangesMessagePipe } from './audit-changes-message.pipe';\nimport { smartRulesUpgradeServiceProvider } from './ng1-smart-rules-upgrade.service';\nimport { AlarmEventSelectorModule } from '@c8y/ngx-components/alarm-event-selector';\nimport { AlarmsTypeFilterComponent } from './alarms-type-filter.component';\nimport { AlarmListIndicatorPipe } from './alarm-list-custom-indicator/alarm-list-indicator.pipe';\nimport { AlarmDetailsButtonPipe } from './alarm-details-custom-button/alarm-details-button.pipe';\nimport { AlarmsDateFilterComponent } from './alarms-date-filter.component';\nimport { IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';\n\nconst defaultAlarmsConfig: AlarmsModuleConfig = {\n  hybrid: true\n};\n\n@NgModule({\n  exports: [AlarmsComponent, AlarmsListComponent, AlarmsFilterComponent, AlarmsDateFilterComponent],\n  providers: [\n    TitleCasePipe,\n    RelativeTimePipe,\n    {\n      provide: ALARMS_MODULE_CONFIG,\n      useValue: defaultAlarmsConfig\n    }\n  ],\n  imports: [\n    A11yModule,\n    BsDropdownModule,\n    CommonModule,\n    CoreModule,\n    HeaderModule,\n    PopoverModule,\n    TooltipModule.forRoot(),\n    C8yTranslateModule,\n    RouterModule,\n    AlarmEventSelectorModule,\n    RouterModule,\n    AlarmListIndicatorPipe,\n    AlarmDetailsButtonPipe,\n    AlarmSeverityToIconPipe,\n    DynamicComponentModule,\n    IntervalPickerComponent,\n    AlarmDetailsComponent,\n    AlarmInfoComponent,\n    AlarmsComponent,\n    AlarmSeveritiesToTitlePipe,\n    AlarmsFilterComponent,\n    AlarmsIconComponent,\n    AlarmsIntervalRefreshComponent,\n    AlarmsListComponent,\n    AlarmStatusToIconPipe,\n    AuditChangesMessagePipe,\n    AlarmSeverityToLabelPipe,\n    AlarmStatusToLabelPipe,\n    AlarmEmptyComponent,\n    AlarmsDateFilterComponent,\n    AlarmsTypeFilterComponent\n  ]\n})\nexport class AlarmsModule {\n  static config(config: AlarmsModuleConfig = {}): ModuleWithProviders<AlarmsModule> {\n    const alarmsConfig: AlarmsModuleConfig = { ...defaultAlarmsConfig, ...config };\n    return {\n      ngModule: AlarmsModule,\n      providers: [\n        ...(alarmsConfig.hybrid ? [smartRulesUpgradeServiceProvider] : []),\n        ...(alarmsConfig.rootNavigatorNode ? [hookNavigator(alarmsConfig.rootNavigatorNode)] : []),\n        hookRoute(alarmsConfig.route),\n        ...(alarmsConfig.additionalProviders || []),\n        {\n          provide: ALARMS_MODULE_CONFIG,\n          useValue: alarmsConfig\n        }\n      ]\n    };\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Permissions } from '@c8y/ngx-components';\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmsGuard {\n  private permissions = inject(Permissions);\n\n  canActivate(): boolean {\n    return this.permissions.hasAnyRole([Permissions.ROLE_ALARM_READ, Permissions.ROLE_ALARM_ADMIN]);\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { AlarmsGuard } from './alarms.guard';\nimport { ALARMS_PATH } from './alarms.model';\n\n@Injectable()\nexport class AlarmsNavigationFactory implements NavigatorNodeFactory {\n  private guard = inject(AlarmsGuard);\n  private navs: NavigatorNode[] = [];\n\n  async get(): Promise<NavigatorNode[]> {\n    const canActivate = this.guard.canActivate();\n    if (canActivate && this.navs.length === 0) {\n      this.navs.push(\n        new NavigatorNode({\n          label: gettext('Alarms'),\n          icon: 'bell',\n          path: `/${ALARMS_PATH}`,\n          featureId: 'alarms',\n          parent: '',\n          routerLinkExact: false,\n          priority: 1000\n        })\n      );\n    }\n    return this.navs;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.AlarmDetailsButtonService","i2","i3","i4","i1.AlarmDetailsService","i4.Ng1SmartRulesUpgradeService","i5","i6.AlarmsViewService","i7.AlarmsActivityTrackerService","i1.AlarmListIndicatorService","i2.AlarmsViewService","takeUntil","i3.AlarmsViewService","map","i5.AlarmsActivityTrackerService"],"mappings":"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"}