{"version":3,"file":"c8y-ngx-components-context-dashboard.mjs","sources":["../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.component.html","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/dashboard-detail.component.html","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-config-section.component.html","../../context-dashboard/widget-config/widget-config-feedback.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.html","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.html","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-config-general.component.html","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/widget-config/appearance-settings.component.html","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config/widget-config-root.component.html","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-preview.component.html","../../context-dashboard/widget.service.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config.component.html","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/context-dashboard.component.html","../../context-dashboard/dashboard-details-tabs.factory.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.html","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.html","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.html","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-appearance.component.html","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/global-context-section.component.html","../../context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Tab } from '@c8y/ngx-components';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\nexport const newDashboardTab: Tab<string> = {\n  featureId: 'newDashboard',\n  icon: 'th',\n  label: gettext('New dashboard'),\n  path: 'new-dashboard',\n  // place tab as last one and hide it so it won't be opened until user initiates adding new dashboard\n  hide: true,\n  priority: -Infinity\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NewDashboardGuard {\n  tab: Tab;\n\n  canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n    const tabActive = route.routeConfig.path === newDashboardTab.path;\n    if (tabActive) {\n      const dashboard: Partial<ContextDashboardManagedObject> = {\n        c8y_Dashboard: null\n      };\n      route.data = { dashboard };\n    }\n    if (!this.tab) {\n      this.tab = {\n        ...newDashboardTab,\n        hide: !tabActive,\n        priority: tabActive ? Infinity : -Infinity\n      };\n    }\n    return of([this.tab]);\n  }\n}\n","import { Component } from '@angular/core';\nimport { TabsService, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n  selector: '[c8y-add-dashboard]',\n  templateUrl: './add-dashboard.component.html',\n  host: { class: 'd-flex a-i-stretch sticky-right' },\n  imports: [IconDirective, C8yTranslatePipe]\n})\nexport class AddDashboardComponent {\n  constructor(\n    private tabsService: TabsService,\n    private router: Router\n  ) {}\n\n  addDashboard() {\n    const tempNewDashboardTab = [...this.tabsService.state].find(\n      t => t.featureId === newDashboardTab.featureId\n    );\n    // navigate before tab is displayed, because in DashboardDetailComponent tab is hidden on navigation from it.\n    this.router.navigate(\n      typeof tempNewDashboardTab.path === 'string'\n        ? [tempNewDashboardTab.path]\n        : tempNewDashboardTab.path,\n      { replaceUrl: true }\n    );\n    // show tab and make it appear as first one\n    tempNewDashboardTab.hide = false;\n    tempNewDashboardTab.priority = Infinity;\n    this.tabsService.refresh();\n  }\n}\n","<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n  <button\n    class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n    title=\"{{ 'Add dashboard' | translate }}\"\n    type=\"button\"\n    (click)=\"addDashboard()\"\n  >\n    <i\n      class=\"icon-20 m-r-4\"\n      c8yIcon=\"add-circle-outline\"\n    ></i>\n    <span>{{ 'Add dashboard' | translate }}</span>\n  </button>\n  <div class=\"p-r-sm-40\"></div>\n</div>\n","import { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport {\n  ContextData,\n  ContextRouteService,\n  ExtensionFactory,\n  Permissions,\n  Tab,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { AddDashboardComponent } from './add-dashboard.component';\n\nexport abstract class AddDashboardFactory implements ExtensionFactory<Tab> {\n  protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n  currentContext: ContextData;\n\n  private permissions = inject(Permissions);\n  private contextRoute = inject(ContextRouteService);\n\n  async get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]> {\n    this.currentContext = this.contextRoute.getContextData(activatedRoute);\n    if (\n      this.currentContext?.context === this.targetContext &&\n      (await this.hasPermission(this.currentContext.contextData))\n    ) {\n      return [\n        {\n          component: AddDashboardComponent,\n          priority: -Infinity,\n          showAlways: true\n        }\n      ];\n    }\n    return [];\n  }\n\n  private async hasPermission(context: IIdentified) {\n    if (context?.id) {\n      return await this.permissions.canEdit(\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        context\n      );\n    }\n    return this.permissions.hasAnyRole([\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE\n    ]);\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  Widget,\n  DynamicComponentDefinition,\n  Route,\n  ViewContext,\n  WidgetDisplaySettings,\n  TabWithTemplate,\n  WidgetSettings\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\nexport const DASHBOARD_SETTINGS_CHANGES = {\n  classes: gettext('theme'),\n  globalRolesIds: gettext('global roles'),\n  widgetClasses: gettext('widget header style'),\n  widgetMargin: gettext('widget margin'),\n  icon: gettext('icon'),\n  name: gettext('name'),\n  priority: gettext('priority'),\n  c8y_IsNavigatorNode: gettext('navigator item'),\n  translateWidgetTitle: gettext('translate widget title'),\n  translateDashboardTitle: gettext('translate dashboard title'),\n  children: gettext('widgets')\n} as const satisfies Partial<Record<keyof ContextDashboard, string>>;\n\nexport interface ContextDashboardConfig {\n  widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n  allowFullscreen?: boolean;\n  /**\n   * @deprecated\n   */\n  routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n  /**\n   * Settings that define how the default config component is\n   * displayed. They are static and will not be saved.\n   */\n  settings?: WidgetSettings;\n\n  /**\n   * Settings that are injected in any displaying component.\n   */\n  displaySettings?: WidgetDisplaySettings;\n\n  /**\n   * Whatever should be added to the configuration when a widget is created.\n   */\n  config?: {\n    /**\n     * Any other information that should be stored here.\n     */\n    [key: string]: any;\n  };\n  /**\n   * The selected device or group (note: naming is inconsistent as group was added later\n   * but must stay for already implemented widgets)\n   */\n  device?: {\n    id?: string | number;\n    name?: string;\n    [key: string]: any;\n  };\n  /**\n   * Method to export the widget configuration during dashboard export to a json file. It enhances the configuration with\n   * additional data that can be used later by the `import` method to restore the widget configuration in a new context.\n   * @param config Widget configuration\n   * @return Enhanced widget configuration\n   */\n  export?: (config: any) => any | Promise<any>;\n  /**\n   * Method to import the widget configuration during dashboard import from a json file. It restores the widget configuration\n   * with data exported by the `export` method.\n   * @param config Widget configuration enhanced with export method\n   * @param dashboardData Dashboard metadata\n   * @return Restored widget configuration\n   */\n  import?: (config: any, dashboardData: DashboardMetadata) => any | Promise<any>;\n\n  /**\n   * Any other information that should be stored here.\n   */\n  [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n  c8y_Dashboard?: ContextDashboard;\n  name?: string;\n  c8y_DashboardHistory?: ContextDashboard[];\n}\n\nexport interface ContextDashboard {\n  icon?: SupportedIconsSuggestions | null;\n  name?: string | null;\n  priority?: number | null;\n  deviceType?: boolean | null;\n  deviceTypeValue?: string | null;\n  isFrozen?: boolean | null;\n  classes?: { [key: string]: boolean } | null;\n  widgetClasses?: { [key: string]: boolean } | null;\n  widgetMargin?: number | null;\n  translateWidgetTitle?: boolean | null;\n  translateDashboardTitle?: boolean | null;\n  global?: boolean | null;\n  /**\n   * The amount of columns on that dashboard.\n   * Can be freely chosen, but product uses either 12 or 24.\n   */\n  columns?: number | null;\n  children?: {\n    [id: string]: Widget;\n  };\n  globalRolesIds?: DashboardGlobalRoles | null;\n  c8y_IsNavigatorNode?: object | null;\n  description?: string | null;\n  historyDescription?: DashboardHistoryDescription | null;\n  created?: string | null;\n  author?: string | null;\n  dashboardState?: { [key: string]: any };\n}\n/**\n * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.\n */\nexport interface DashboardHistoryDescription {\n  /**\n   * Indicates type of dashboard change (or creation).\n   */\n  changeType?: 'reset' | 'create' | 'update' | null;\n  /**\n   * List of dashboard settings that has been changed.\n   */\n  dashboardSettingChanges?: (typeof DASHBOARD_SETTINGS_CHANGES)[keyof typeof DASHBOARD_SETTINGS_CHANGES][];\n  /**\n   * True if dashboard is typed dashboard, false if it's not.\n   */\n  deviceType?: boolean | null;\n  /**\n   * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:\n   * ```ts\n   * widgetChanges: {\n   *     removed: ['Applications'],\n   *     config?: ['Data points graph', 'Events list'],\n   *   },\n   * ```\n   */\n  widgetChanges?: {\n    removed?: string[];\n    added?: string[];\n    config?: string[];\n    arrangement?: string[];\n  } | null;\n  /**\n   * String used to display the date from which the state was restored.\n   */\n  restored?: string;\n}\n\nexport const DASHBOARD_CHILDREN_STATE_NAME = {\n  initial: gettext('Initial state'),\n  config: gettext('Widget configuration changed'),\n  removed: gettext('Widget removed'),\n  added: gettext('Widget added'),\n  arrangement: gettext('Widgets rearranged')\n} as const satisfies Record<keyof DashboardHistoryDescription['widgetChanges'] | 'initial', string>;\n/**\n * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes\n * applied to dashboard children.\n */\nexport type DashboardChildrenState = {\n  /**\n   * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'\n   */\n  name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];\n  /**\n   * Dashboard children in particular, immutable state.\n   */\n  children: ContextDashboard['children'];\n  /**\n   * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.\n   * ```ts\n   * {\n   *    removed: {\n   *        0969692617637703: { componentId: \"Data points graph\", config: {...}, classes: {...} ...}\n   *    },\n   *    config: {\n   *        6347567345767653: { componentId: \"Applications\", config: {...}, classes: {...} ...},\n   *        6456345634564566: { componentId: \"Events list\", config: {...}, classes: {...} ...},\n   *    }\n   * }\n   * ```\n   */\n  changeHistory: Partial<\n    Record<\n      keyof DashboardHistoryDescription['widgetChanges'],\n      {\n        [id: string]: Widget;\n      }\n    >\n  >;\n};\n\nexport enum ContextDashboardType {\n  Device = 'device',\n  Type = 'type',\n  Group = 'group',\n  Named = 'name',\n  Report = 'report'\n}\n\nexport enum DashboardDetailsTabId {\n  GENERAL = 'general',\n  APPEARANCE = 'appearance',\n  VERSIONHISTORY = 'versionHistory'\n}\n\nexport type DashboardDetailsTabs = Record<\n  DashboardDetailsTabId,\n  TabWithTemplate<string> & { featureId: DashboardDetailsTabId }\n>;\n\nexport interface DashboardAndWidgetThemeDefinition {\n  label: string;\n  class: string;\n  description: string;\n}\n\nexport const WIDGET_HEADER_CLASSES = [\n  {\n    label: gettext('Regular`style`'),\n    class: 'panel-title-regular',\n    description: gettext('The widget has no border between header and content.')\n  },\n  {\n    label: gettext('Border`style`'),\n    class: 'panel-title-border',\n    description: gettext('The widget has a small separation border between header and content.')\n  },\n  {\n    label: gettext('Overlay`style`'),\n    class: 'panel-title-overlay',\n    description: gettext('The widget content overlays the header.')\n  },\n  {\n    label: gettext('Hidden`style`'),\n    class: 'panel-title-hidden',\n    description: gettext('The widget header is not shown.')\n  }\n] as const satisfies DashboardAndWidgetThemeDefinition[];\n\nexport const WIDGET_CONTENT_CLASSES = [\n  {\n    label: gettext('Branded`style`'),\n    class: 'panel-content-branded',\n    description: gettext('The widget is styled with the main brand color.')\n  },\n  {\n    label: gettext('Match dashboard`style`'),\n    class: 'panel-content-light',\n    description: gettext('The widget appearance matches the dashboard appearance.')\n  },\n  {\n    label: gettext('Light`style`'),\n    class: 'panel-content-white',\n    description: gettext('The widget has light appearance, that is, dark text on light background.')\n  },\n  {\n    label: gettext('Dark`style`'),\n    class: 'panel-content-dark',\n    description: gettext('The widget has dark appearance, that is, light text on dark background.')\n  },\n  {\n    label: gettext('Transparent`style`'),\n    class: 'panel-content-transparent',\n    description: gettext('The widget has no background.')\n  }\n] as const satisfies DashboardAndWidgetThemeDefinition[];\n\nexport const DASHBOARD_THEME_CLASSES = [\n  {\n    label: gettext('Match UI`theme`'),\n    class: 'dashboard-theme-light',\n    description: gettext('The dashboard appearance matches the UI appearance.')\n  },\n  {\n    label: gettext('Light`theme`'),\n    class: 'dashboard-theme-white',\n    description: gettext(\n      'The dashboard has light appearance, that is, dark text on light background.'\n    )\n  },\n  {\n    label: gettext('Dark`theme`'),\n    class: 'dashboard-theme-dark',\n    description: gettext(\n      'The dashboard has dark appearance, that is, light text on dark background.'\n    )\n  },\n  {\n    label: gettext('Branded`theme`'),\n    class: 'dashboard-theme-branded',\n    description: gettext('The dashboard is styled using the brand palette.')\n  }\n] as const satisfies DashboardAndWidgetThemeDefinition[];\n\nexport const STYLING_CLASS_PREFIXES = [\n  'dashboard-theme-',\n  'panel-title-',\n  'panel-content-'\n] as const;\n\nexport interface DashboardCopyClipboard {\n  dashboardId: string;\n  dashboard: ContextDashboard;\n  context: DashboardContext;\n}\n\nexport interface DashboardContext {\n  context: ViewContext;\n  contextData: Partial<IManagedObject>;\n}\n\nexport const ALL_GLOBAL_ROLES_SELECTED = 'all' as const;\nexport type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;\n\nexport const PRODUCT_EXPERIENCE = {\n  DASHBOARD: {\n    EVENTS: {\n      DASHBOARDS: 'dashboards',\n      REPORTS: 'reports',\n      DASHBOARD_TEMPLATE: 'dashboardTemplate'\n    },\n    COMPONENTS: {\n      DASHBOARD_VIEW: 'context-dashboard',\n      DASHBOARD_AVAILABILITY: 'dashboard-availability',\n      REPORTS_LIST: 'report-dashboard-list',\n      ADD_REPORT: 'report-dashboard-list',\n      ADD_DASHBOARD: 'add-dashboard',\n      DELETE_DASHBOARD: 'context-dashboard',\n      TYPED_DASHBOARD_SETTINGS: 'typed-dashboard-settings'\n    },\n    CONTEXT: {\n      REPORT: 'report',\n      DEVICE: 'device',\n      ASSET: 'asset',\n      GROUP: 'group'\n    },\n    ACTIONS: {\n      APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',\n      DELETE: 'delete',\n      LOAD: 'load',\n      CREATE: 'create',\n      ADD_REPORT: 'addReport',\n      DUPLICATE_AS_REGULAR_DASHBOARD: 'duplicateAsRegularDashboard'\n    }\n  }\n} as const;\n\nexport interface CanDeactivateComponent {\n  canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;\n}\n\nexport const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;\n\nexport type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';\n\nexport const DASHBOARD_DETAILS_OUTLET = 'dashboard-details' as const;\nexport const DASHBOARD_DETAILS_TABS_OUTLET_NAME = 'dashboardTabs' as const;\n\nexport interface DashboardMetadata {\n  isReport: boolean;\n  isNamedDashboard: boolean;\n  hideAvailability: boolean;\n  dashboard: ContextDashboard;\n  deviceTypeValue: string;\n  displayDeviceTypeValue: string;\n  mo: ContextDashboardManagedObject;\n  allowTypeDashboard: AllowTypeDashboard;\n  isDevice: boolean;\n  context: any;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport {\n  IIdentified,\n  IManagedObject,\n  InventoryService,\n  IResultList,\n  QueriesUtil\n} from '@c8y/client';\nimport {\n  AlertService,\n  ApplicationOptions,\n  AppStateService,\n  ContextData,\n  ContextRouteService,\n  DynamicComponentService,\n  getActivatedRoute,\n  GroupService,\n  ModalService,\n  NavigatorNode,\n  NavigatorService,\n  NEW_DASHBOARD_ROUTER_STATE_PROP,\n  OptionsService,\n  Permissions,\n  Status,\n  Tab,\n  TabsService,\n  ViewContext,\n  Widget\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n  assign,\n  cloneDeep,\n  forEach,\n  get,\n  has,\n  isEmpty,\n  keyBy,\n  keys,\n  pick,\n  reduce,\n  set,\n  some\n} from 'lodash-es';\nimport { combineLatest, from, Observable, of, Subject } from 'rxjs';\nimport { catchError, filter, map, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';\nimport {\n  ALL_GLOBAL_ROLES_SELECTED,\n  AllowTypeDashboard,\n  ContextDashboard,\n  ContextDashboardManagedObject,\n  ContextDashboardType,\n  DashboardContext,\n  DashboardCopyClipboard,\n  PRODUCT_EXPERIENCE,\n  STYLING_CLASS_PREFIXES\n} from './context-dashboard.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ContextDashboardService {\n  dashboardTabs$: Observable<Tab[]>;\n  readonly formDisabled$: Observable<boolean>;\n  readonly REPORT_PARTIAL_NAME = 'report_';\n  copyClipboard: DashboardCopyClipboard;\n  queriesUtil: QueriesUtil;\n  readonly VERSION_HISTORY_SIZE_LIMIT = 10;\n  private readonly INVENTORY_ROLES = [\n    Permissions.ROLE_INVENTORY_ADMIN,\n    Permissions.ROLE_MANAGED_OBJECT_ADMIN\n  ];\n  private cache = new Map<string, ContextDashboardManagedObject>();\n  private readonly DEFAULT_PAGESIZE = 1000;\n  private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n  private readonly APPLIED_TO_FRAGMENT = 'c8y_AppliedToApplications';\n  private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n  private readonly INDEX_SPLIT = '!';\n  private readonly CACHE_TIMEOUT = 500;\n  private _formDisabled = true;\n  private formDisabledSubject = new Subject<boolean>();\n  private contextDashboardsCache: {\n    query: string;\n    result: Promise<IResultList<IManagedObject>>;\n    timestamp: number;\n  };\n  private appName = '';\n  private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS: keyof ApplicationOptions =\n    'hideTypeDashboardForAssets';\n\n  get formDisabled() {\n    return this._formDisabled;\n  }\n\n  set formDisabled(value) {\n    this._formDisabled = value;\n    this.formDisabledSubject.next(value);\n  }\n\n  constructor(\n    private inventory: InventoryService,\n    private tabs: TabsService,\n    private modal: ModalService,\n    private translateService: TranslateService,\n    private router: Router,\n    private navigator: NavigatorService,\n    private permissions: Permissions,\n    private alert: AlertService,\n    private dynamicComponent: DynamicComponentService,\n    private groupService: GroupService,\n    private optionsService: OptionsService,\n    private appStateService: AppStateService,\n    private contextRouteService: ContextRouteService\n  ) {\n    this.formDisabled$ = this.formDisabledSubject.asObservable();\n    this.queriesUtil = new QueriesUtil();\n  }\n\n  async create(dashboardCfg: ContextDashboard, context?: ContextData, name = '') {\n    let dashboard: Partial<ContextDashboardManagedObject> = {};\n    assign(\n      dashboard,\n      this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n      this.updateDashboardHistory(dashboard, dashboardCfg)\n    );\n\n    const [dashboardType, dashboardFragments] = this.getDashboardFragments(\n      { c8y_Dashboard: dashboardCfg } as ContextDashboardManagedObject,\n      context,\n      name,\n      false\n    );\n    dashboard = { ...dashboard, ...dashboardFragments };\n\n    if (this.shouldSetGlobal(dashboard, context)) {\n      assign(dashboard, { c8y_Global: {} });\n    }\n    dashboard.name = dashboard.c8y_Dashboard.name;\n    if (this.appStateService?.currentApplication?.value) {\n      dashboard[this.APPLIED_TO_FRAGMENT] = [this.appStateService?.currentApplication?.value.key];\n    }\n\n    const { data } =\n      dashboardType === ContextDashboardType.Group ||\n      dashboardType === ContextDashboardType.Device ||\n      (context?.contextData?.id && dashboardType === ContextDashboardType.Named)\n        ? await this.inventory.childAdditionsCreate(\n            dashboard,\n            (context?.contextData.id as string) || ''\n          )\n        : await this.inventory.create(dashboard);\n    return data as ContextDashboardManagedObject;\n  }\n\n  async detail(dashboardMO: ContextDashboardManagedObject) {\n    let { data } = await this.inventory.detail(dashboardMO);\n    data = this.adjustDashboardFor24Columns(data as ContextDashboardManagedObject);\n    this.cache.set(dashboardMO.id, data);\n    return data;\n  }\n\n  async update(\n    dashboard: ContextDashboardManagedObject,\n    context?: ContextData\n  ): Promise<ContextDashboardManagedObject> {\n    const dashboardCfg = dashboard.c8y_Dashboard;\n    dashboard.name = dashboard.c8y_Dashboard.name;\n    assign(\n      dashboard,\n      this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n      this.updateDashboardHistory(dashboard, dashboardCfg)\n    );\n\n    const keepFragments = this.clean(\n      pick(dashboard, [this.FRAGMENT_NAME, 'id', 'name', this.APPLIED_TO_FRAGMENT])\n    );\n    keepFragments.c8y_DashboardHistory = dashboard.c8y_DashboardHistory;\n    await this.serializeWidgetConfigs(keepFragments);\n\n    const [, dashboardTypeFragments] = this.getDashboardFragments(dashboard, context, '', true);\n    keepFragments.c8y_Global = this.shouldSetGlobal({ ...dashboard, ...dashboardTypeFragments });\n    const { data } = await this.inventory.update({ ...keepFragments, ...dashboardTypeFragments });\n    this.cache.set(dashboard.id, data);\n    return data;\n  }\n\n  async delete(dashboard: ContextDashboardManagedObject, withConfirmation = true) {\n    try {\n      if (withConfirmation) {\n        let msg: string = gettext(\n          `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n        );\n        if (this.isDeviceType(dashboard)) {\n          msg = gettext(\n            `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n           Do you want to proceed?`\n          );\n        }\n        await this.modal.confirm(\n          gettext('Delete dashboard'),\n          this.translateService.instant(msg, {\n            dashboardName: dashboard.c8y_Dashboard.name,\n            deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n          }),\n          Status.DANGER,\n          { ok: gettext('Delete'), cancel: gettext('Cancel') }\n        );\n      }\n      await this.inventory.delete(dashboard);\n      const tabToRemove = Array.from(this.tabs.state).find(tab => {\n        if (typeof tab.path === 'string') {\n          return tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`);\n        }\n      });\n      this.tabs.remove(tabToRemove);\n      queueMicrotask(() => {\n        this.tabs.refresh();\n      });\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  updateDashboardHistory(\n    dashboard: Partial<ContextDashboardManagedObject>,\n    dashboardCfg: ContextDashboard\n  ): Partial<ContextDashboardManagedObject> {\n    if (!dashboard.c8y_DashboardHistory) {\n      dashboard.c8y_DashboardHistory = [];\n    }\n    if (isEmpty(dashboardCfg?.historyDescription)) {\n      dashboardCfg.historyDescription = { changeType: 'create' };\n    }\n\n    dashboardCfg.created = new Date().toISOString();\n    dashboard.c8y_DashboardHistory = cloneDeep([dashboardCfg, ...dashboard.c8y_DashboardHistory]);\n\n    if (dashboard.c8y_DashboardHistory.length > this.VERSION_HISTORY_SIZE_LIMIT) {\n      dashboard.c8y_DashboardHistory = [\n        ...dashboard.c8y_DashboardHistory.slice(0, this.VERSION_HISTORY_SIZE_LIMIT)\n      ];\n    }\n\n    return dashboard;\n  }\n\n  activateDashboards(\n    route: ActivatedRouteSnapshot,\n    types: ContextDashboardType[]\n  ): Observable<boolean | Tab[]> {\n    const { dashboardId } = route.params;\n    if (dashboardId) {\n      return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n        tap(dashboard => {\n          route.data = { dashboard };\n        }),\n        map(() => true),\n        catchError(() => {\n          return of(false);\n        })\n      );\n    }\n\n    const { contextData: mo } = this.contextRouteService.getContextData(route);\n\n    this.dashboardTabs$ = this.getTabs$(\n      mo as ContextDashboardManagedObject,\n      types,\n      route?.parent?.data as ContextData\n    );\n    return this.dashboardTabs$;\n  }\n\n  getDashboard(name: string, defaultWidgets: Widget[]) {\n    const children = this.mapWidgets(defaultWidgets);\n    return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n      throwIfEmpty(),\n      catchError(() => {\n        if (!this.hasPermissionsToCopyDashboard()) {\n          this.alert.warning(\n            gettext(\n              'You are viewing a read-only dashboard because you don’t have the necessary permissions to modify it.'\n            )\n          );\n        }\n\n        return of(\n          this.getDefaultDashboard({\n            name,\n            children,\n            translateWidgetTitle: true,\n            widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n          })\n        );\n      })\n    );\n  }\n\n  updateNavigatorItem(mo: IManagedObject) {\n    this.navigator.state.forEach(node => {\n      if (node.path === `reports/${mo.id}`) {\n        this.navigator.remove(node);\n      }\n    });\n    if (mo.c8y_IsNavigatorNode) {\n      const nodeToAdd = new NavigatorNode({\n        label: mo.name,\n        path: `reports/${mo.id}`,\n        icon: mo.icon,\n        priority: mo.priority,\n        translateLabel: mo.translateDashboardTitle\n      });\n      this.navigator.add(nodeToAdd);\n    }\n  }\n\n  async navigateToDashboard(dashboardMO: ContextDashboardManagedObject, isNewDashboard = false) {\n    if (/\\/dashboard\\//.test(this.router.url)) {\n      this.router.navigate(['..', dashboardMO.id], {\n        relativeTo: getActivatedRoute(this.router),\n        ...(isNewDashboard && {\n          state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n        })\n      });\n    } else if (/^\\/(device|group)\\/[0-9]+$/.test(this.router.url)) {\n      // in case the add dashboard button is the only tab on that route\n      this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n        relativeTo: getActivatedRoute(this.router),\n        ...(isNewDashboard && {\n          state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n        })\n      });\n    } else if (/^\\/(device|group)\\/[0-9]+\\/device-info$/.test(this.router.url)) {\n      this.router.navigate(['.'], {\n        relativeTo: getActivatedRoute(this.router),\n        ...(isNewDashboard && {\n          state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n        })\n      });\n    } else {\n      this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n        relativeTo: getActivatedRoute(this.router),\n        ...(isNewDashboard && {\n          state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n        })\n      });\n    }\n  }\n\n  /**\n   * Checks if user is able to edit dashboard according to his roles and dashboard ownership.\n   *\n   * @param mo - Dashboard managed object.\n   * @returns True if user is able to edit dashboard, false if he cannot.\n   */\n  async canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean> {\n    return await this.permissions.canEdit(this.INVENTORY_ROLES, mo);\n  }\n\n  /**\n   * Checks if user has permissions to copy dashboard according to his roles.\n   *\n   * @returns True if user has permissions to copy dashboard, false if he cannot.\n   */\n  hasPermissionsToCopyDashboard(): boolean {\n    return this.permissions.hasAnyRole([\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE\n    ]);\n  }\n\n  isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n    return some(keys(dashboard), prop =>\n      new RegExp(\n        `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n      ).test(prop)\n    );\n  }\n\n  isReport(dashboard: Partial<ContextDashboardManagedObject>) {\n    return some(keys(dashboard), prop =>\n      new RegExp(\n        `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${this.REPORT_PARTIAL_NAME}`\n      ).test(prop)\n    );\n  }\n\n  isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n    return some(keys(dashboard), prop => {\n      const matchingProp = new RegExp(\n        `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Type}${this.INDEX_SPLIT}`\n      ).test(prop);\n      if (!matchingProp) {\n        return false;\n      } else {\n        // there might be matching key, but its value can be {} or null\n        return !!dashboard[prop];\n      }\n    });\n  }\n\n  isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n    return some(keys(dashboard), prop =>\n      new RegExp(\n        `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Device}${this.INDEX_SPLIT}`\n      ).test(prop)\n    );\n  }\n\n  isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n    return some(keys(dashboard), prop =>\n      new RegExp(\n        `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Group}${this.INDEX_SPLIT}`\n      ).test(prop)\n    );\n  }\n\n  getFilteredDashboardStyles(styleList: string[]) {\n    return styleList.filter(c =>\n      STYLING_CLASS_PREFIXES.some(classPrefix => c.startsWith(classPrefix))\n    );\n  }\n\n  getStyling(styleList, styleName, defaultValue) {\n    const styling = styleList.find(\n      style => style && new RegExp(`-${styleName}$`, 'i').test(style.class)\n    );\n    return styling ? styling.class : defaultValue;\n  }\n\n  mapWidgets(widgets: Widget[]) {\n    return keyBy(\n      widgets.map(widget => {\n        widget.id = String(Math.random()).substr(2);\n        return widget;\n      }),\n      'id'\n    );\n  }\n\n  getDashboard$(dashboardIdOrName, dashboardType: ContextDashboardType[], mo?: IManagedObject) {\n    const cache = this.cache.get(dashboardIdOrName);\n\n    const dashboards = mo\n      ? this.getContextDashboards(mo, dashboardType)\n      : this.getNamedDashboard(dashboardIdOrName);\n\n    const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n      tap(dashboard => this.cacheDashboard(dashboard)),\n      filter(\n        dashboard =>\n          dashboard.id === dashboardIdOrName ||\n          has(\n            dashboard,\n            `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${dashboardIdOrName}`\n          )\n      )\n    );\n    return cache ? of(cache) : cacheRefresh;\n  }\n\n  async pasteDashboard(newContext: DashboardContext): Promise<void> {\n    if (this.copyClipboard) {\n      try {\n        const dashboardToPaste = this.createContextDashboardCopy(\n          this.copyClipboard.dashboard,\n          newContext.contextData,\n          this.copyClipboard.context.contextData\n        );\n        const dashboard = await this.create(this.clean(dashboardToPaste), newContext);\n\n        // linking childAdditions for e.g. to grant access to the images uploaded by the image widget for users with only inventory roles.\n        const { data: childAdditions } = await this.inventory.childAdditionsList(\n          this.copyClipboard.dashboardId,\n          { pageSize: 2000 }\n        );\n        if (childAdditions.length) {\n          await this.inventory.childAdditionsBulkAdd(childAdditions, dashboard.id);\n        }\n\n        this.copyClipboard = undefined;\n        this.navigateToDashboard(dashboard);\n      } catch {\n        this.alert.warning(gettext('Insufficient permissions for this action.'));\n      }\n    }\n  }\n\n  /**\n   * Creates fragment that associates dashboards with device/asset. It consists of three elements:\n   * - FRAGMENT_NAME - static string\n   * - dashboard type (e.g. 'group', 'device')\n   * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)\n   * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'\n   * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'\n   * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'\n   *\n   * @param contextDashboardType Type of dashboard\n   * @param value Fragment value\n   * @returns Fragment for dashboard\n   */\n  createFragmentKey<T extends ContextDashboardType, V extends string>(\n    contextDashboardType: T,\n    value: V\n  ) {\n    return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${contextDashboardType}${this.INDEX_SPLIT}${value}` as const;\n  }\n\n  /**\n   * Indicates if dashboard can be set to type dashboard.\n   * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.\n   * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n   * type fragment is missing- we do not support this combination.\n   * @param mo Dashboard managed object\n   * @param context {ContextData} Current context\n   * @returns True if dashboard can be set to type dashboard, false if it is forbidden.\n   */\n  shouldAllowToSetDashboardType(\n    mo: ContextDashboardManagedObject,\n    context: ContextData\n  ): AllowTypeDashboard {\n    // disallow if dashboard managed object or context is missing or context is not device/asset/group\n    if (\n      !mo ||\n      !context?.contextData ||\n      (context.context !== ViewContext.Device && context.context !== ViewContext.Group)\n    ) {\n      return 'disallow';\n    }\n\n    // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow\n    const typeDashboardHiddenForAssets = this.optionsService.get(\n      this.HIDE_TYPE_DASHBOARD_FOR_ASSETS,\n      true\n    );\n    if (\n      context.context === ViewContext.Group &&\n      (typeDashboardHiddenForAssets || !context.contextData.type)\n    ) {\n      return 'disallow';\n    }\n\n    // if user has no permission to change dashboard, return disallow\n    if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {\n      return 'disallow';\n    }\n\n    // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n    // type fragment is missing- we do not support this combination.\n    const typeFragment = this.createFragmentKey(\n      ContextDashboardType.Type,\n      context?.contextData?.type\n    );\n    if (\n      mo?.c8y_Dashboard &&\n      mo?.c8y_Dashboard.deviceType &&\n      context?.contextData?.type &&\n      !mo[typeFragment]\n    ) {\n      return 'disallow';\n    }\n\n    // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,\n    // return allow_if_type_filled\n    if (\n      !context?.contextData?.type &&\n      context.context === ViewContext.Device &&\n      this.permissions.hasAnyRole(this.INVENTORY_ROLES)\n    ) {\n      return 'allow_if_type_filled';\n    }\n\n    return 'allow';\n  }\n\n  createReport(reportCfg: Partial<IManagedObject>) {\n    const report: Partial<IManagedObject> = {};\n    Object.assign(report, reportCfg);\n    Object.assign(report, { c8y_Report: {} });\n    return this.inventory.create(report);\n  }\n\n  addReportNavigatorNode(report: IManagedObject): void {\n    const node = new NavigatorNode({\n      label: report.name,\n      path: `reports/${report.id}`,\n      icon: report.icon,\n      priority: report.priority,\n      translateLabel: report.translateDashboardTitle\n    });\n    this.navigator.add(node);\n  }\n\n  getContextForGS(mo: IManagedObject): string | null {\n    if (!mo) {\n      return null;\n    }\n    if (this.groupService.isDevice(mo)) {\n      return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;\n    } else if (this.groupService.isAsset(mo)) {\n      return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;\n    } else if (this.groupService.isGroup(mo)) {\n      return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;\n    } else {\n      return null;\n    }\n  }\n\n  async getContextDashboards(\n    mo: IManagedObject,\n    dashboardType: ContextDashboardType[]\n  ): Promise<IResultList<IManagedObject>> {\n    const filterCriteria = dashboardType.map(t => ({\n      // it's necessary to wrap fragment in quotes because dashboard type can contain spaces\n      __has: `'${this.createDashboardFragment(mo, t)}'`\n    }));\n\n    // the has query above does not work for device type dashboards where the type contains a dot\n    const typeFilterCriteria =\n      dashboardType.includes(ContextDashboardType.Type) && mo.type\n        ? {\n            __and: [\n              { 'c8y_Dashboard.deviceType': { __eq: true } },\n              { 'c8y_Dashboard.deviceTypeValue': { __eq: mo.type } }\n            ]\n          }\n        : undefined;\n    const finalFilterCriteria = typeFilterCriteria\n      ? [...filterCriteria, typeFilterCriteria]\n      : filterCriteria;\n\n    const query = this.queriesUtil.buildQuery({ __filter: { __or: finalFilterCriteria } });\n\n    const now = Date.now();\n    const cacheHasValidResponse =\n      this.contextDashboardsCache &&\n      this.contextDashboardsCache.query === query &&\n      now - this.contextDashboardsCache.timestamp < this.CACHE_TIMEOUT;\n\n    if (cacheHasValidResponse) {\n      return this.contextDashboardsCache.result;\n    } else {\n      this.contextDashboardsCache = null;\n    }\n\n    this.contextDashboardsCache = {\n      query,\n      result: this.listAndFilterByApplication(query),\n      timestamp: now\n    };\n    return this.contextDashboardsCache.result;\n  }\n\n  /**\n   * Creates query for application bound dashboards.\n   * If application key is not available, it returns empty object.\n   * Use it when you need to filter dashboards according to\n   * application they are applied to and need pagination.\n   */\n  appliedToFilter() {\n    const key = this.appStateService?.currentApplication?.value?.key || '';\n\n    if (!key) {\n      return {};\n    }\n\n    return {\n      __or: [\n        { __not: { __has: this.APPLIED_TO_FRAGMENT } }, // legacy / unlabeled ⇒ show in all\n        { [this.APPLIED_TO_FRAGMENT]: { __in: [key] } }\n      ]\n    };\n  }\n\n  /**\n   * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible\n   * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating\n   * the device/asset type (if the dashboard is meant to be applied to all assets of this type).\n   *\n   * @param dashboardMO - Dashboard managed object.\n   * @param context - Context data of asset.\n   * @param name - Name of the dashboard.\n   * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.\n   * @returns Tuple of dashboard type and object containing dashboard fragments.\n   */\n  private getDashboardFragments(\n    dashboardMO: ContextDashboardManagedObject,\n    context: ContextData,\n    name: string,\n    isEdit: boolean\n  ): [ContextDashboardType, Record<string, object>] {\n    let dashboardType: ContextDashboardType;\n    const id = (context?.contextData?.id as string) || '';\n    const fragments: Record<string, object> = {};\n\n    if (name) {\n      // a named dashboard should not receive any other fragments\n      dashboardType = ContextDashboardType.Named;\n      const namedFragmentKey = this.createFragmentKey(ContextDashboardType.Named, name);\n      fragments[namedFragmentKey] = {};\n    } else if (context?.context === ViewContext.Device || context?.context === ViewContext.Group) {\n      // get base type for device or group\n      const defaultType =\n        context.context === ViewContext.Device\n          ? ContextDashboardType.Device\n          : ContextDashboardType.Group;\n      dashboardType = dashboardMO.c8y_Dashboard.deviceType\n        ? ContextDashboardType.Type\n        : defaultType;\n\n      // clear fragments from other asset if current asset is not origin of this dashboard\n      this.clearRedundantFragment(dashboardMO, defaultType, fragments);\n\n      // add base fragment for particular asset\n      const deviceOrGroupFragmentKey = this.createFragmentKey(defaultType, id);\n      fragments[deviceOrGroupFragmentKey] = {};\n\n      // add or clear type fragment\n      if (dashboardMO.c8y_Dashboard.deviceType || isEdit) {\n        const typeFragmentKey = this.createFragmentKey(\n          ContextDashboardType.Type,\n          dashboardMO.c8y_Dashboard.deviceTypeValue\n        );\n        fragments[typeFragmentKey] = dashboardMO.c8y_Dashboard.deviceType ? {} : null;\n      }\n    }\n\n    return [dashboardType, fragments];\n  }\n\n  /**\n   * Clears fragments that originates from other managed object.\n   * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object\n   * ```ts\n   * {\n   * c8y_Dashboard!device!1: {},\n   * c8y_Dashboard!type!c8y_MQTTDevice: {}\n   * }\n   *```\n   * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to\n   * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like\n   * ```ts\n   * {\n   * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore\n   * c8y_Dashboard!device!2: {}, // assign dashboard to device B\n   * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore\n   * }\n   * ```\n   *\n   * @param dashboardMO - Dashboard managed object.\n   * @param type - Context dashboard type.\n   * @param fragments - Fragments object.\n   */\n  private clearRedundantFragment(\n    dashboardMO: ContextDashboardManagedObject,\n    type: ContextDashboardType,\n    fragments: Record<string, object>\n  ): void {\n    Object.keys(dashboardMO)\n      .filter(key => key.startsWith(this.createFragmentKey(type, '')))\n      .forEach(key => (fragments[key] = null));\n  }\n\n  /**\n   * Used to migrate dashboards from previous 12 columns layout to 24 columns.\n   */\n  private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n    dashboards: T[]\n  ): T[];\n  private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n    dashboards: T\n  ): T;\n  private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n    dashboards: T | T[]\n  ): T | T[] {\n    if (Array.isArray(dashboards)) {\n      return dashboards.map(dashboard => this.adjustDashboardFor24Columns(dashboard));\n    }\n    // if `columns` attribute exists, dashboard was already adjusted.\n    if (dashboards.c8y_Dashboard.columns) {\n      return dashboards;\n    }\n\n    dashboards.c8y_Dashboard.columns = 24;\n    if (!dashboards.c8y_Dashboard.children) {\n      return dashboards;\n    }\n\n    // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.\n    // Default widgets might be already configured for 24 columns.\n    // If a widget is already configured for more than 12 columns, we should not adjust it.\n    const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(\n      dashboards.c8y_Dashboard.children\n    ).some(widget => widget._x + widget._width > 12);\n    if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {\n      return dashboards;\n    }\n\n    // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.\n    Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {\n      if (widget._width) {\n        widget._width = widget._width * 2;\n      }\n      if (widget._x) {\n        widget._x = widget._x * 2;\n      }\n    });\n    return dashboards;\n  }\n\n  private async serializeWidgetConfigs(dashboard: ContextDashboardManagedObject): Promise<void> {\n    const children = cloneDeep(dashboard.c8y_Dashboard.children);\n    if (!children) {\n      return;\n    }\n    const configs = Object.values(children);\n    const details = configs.map(({ componentId, config }) => ({ componentId, config }));\n    const results = await this.dynamicComponent.serializeConfigs(details);\n    results.forEach((result, index) => {\n      Object.entries(result).forEach(([key, value]) => {\n        set(details[index].config, key, value);\n      });\n    });\n    dashboard.c8y_Dashboard.children = children;\n  }\n\n  private createContextDashboardCopy(\n    dash: ContextDashboard,\n    newContext: Partial<IManagedObject>,\n    oldContext: Partial<IManagedObject>\n  ): ContextDashboard {\n    const children = reduce(\n      dash.children,\n      (_children, child) => {\n        const { id } = child;\n        const cfg = child.config;\n        const propertiesToCopy = {\n          device: device => this.replaceContextInObj(device, newContext, oldContext),\n          deviceIds: deviceIds => this.replaceContextInIdsObj(deviceIds, newContext, oldContext),\n          datapoints: dataPoints =>\n            this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n          dataPoints: dataPoints =>\n            this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n          datapointsGauge: dataPoints =>\n            this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n          datapointsLabels: dataPoints =>\n            this.replaceContextInDataPoints(dataPoints, newContext, oldContext)\n        };\n\n        if (cfg) {\n          this.copyProperties(cfg, propertiesToCopy);\n          if (cfg.options) {\n            this.copyProperties(cfg.options, propertiesToCopy);\n          }\n        }\n\n        _children[id] = cloneDeep(child);\n        return _children;\n      },\n      {}\n    );\n\n    dash.children = children;\n\n    const isTypeDashboard = dash.deviceType && !!dash.deviceTypeValue;\n    if (isTypeDashboard) {\n      dash.deviceTypeValue = newContext.type;\n    }\n    return dash;\n  }\n\n  private copyProperties(obj, propertiesToCopy) {\n    forEach(propertiesToCopy, (copyFn, property) => {\n      if (obj[property]) {\n        obj[property] = copyFn(obj[property]);\n      }\n    });\n  }\n\n  private replaceContextInDataPoints(\n    dataPoints,\n    newContext: Partial<IManagedObject>,\n    oldContext: Partial<IManagedObject>\n  ) {\n    dataPoints.forEach(dp => {\n      dp.__target = this.replaceContextInObj(dp.__target, newContext, oldContext);\n    });\n    return dataPoints;\n  }\n\n  private replaceContextInObj(\n    obj: Partial<IManagedObject>,\n    newContext: Partial<IManagedObject>,\n    oldContext: Partial<IManagedObject>\n  ) {\n    if (obj && obj.id === oldContext.id) {\n      Object.assign(obj, pick(newContext, ['id', 'name']));\n    }\n    return obj;\n  }\n\n  /**\n   * Replaces context IDs in a key-value map by substituting old context IDs with new context IDs.\n   *\n   * This function handles config values that map property names to managed object IDs,\n   * for example used in legacy SCADA widgets (like deviceIds: { scadaPlaceholderName: 12345 }).\n   * It iterates through the entries and replaces any ID that matches the old context ID with the new context ID.\n   *\n   * @param ids - A record mapping property names to managed object IDs\n   * @param newContext - The new context managed object containing the ID to replace with\n   * @param oldContext - The old context managed object containing the ID to replace\n   * @returns A new record with old context IDs replaced by new context IDs\n   */\n  private replaceContextInIdsObj(\n    ids: Record<string, IIdentified['id']>,\n    newContext: Partial<IManagedObject>,\n    oldContext: Partial<IManagedObject>\n  ): Record<string, IIdentified['id']> {\n    return Object.fromEntries(\n      Object.entries(ids).map(([key, id]) => [key, id === oldContext.id ? newContext.id : id])\n    );\n  }\n\n  private getTabs$(\n    mo: ContextDashboardManagedObject,\n    dashboardType: ContextDashboardType[],\n    context?: ContextData\n  ) {\n    const dashboards = this.getContextDashboards(mo, dashboardType);\n\n    return this.getContextDashboards$(dashboards).pipe(\n      mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)),\n      // Due to MTM-62321 named context dashboards included fragments for device and groups.\n      // therefore some device-info dashboards (from DM app) might occur in cockpit on device level.\n      // We need to filter those out..\n      filter(([dashboard]) => {\n        // list all identifiers of the dashboard (name, device, group, type)\n        const dashboardIdentifiers = Object.keys(dashboard)\n          .filter(key => key.startsWith(`${this.FRAGMENT_NAME}${this.INDEX_SPLIT}`))\n          .map(key => key.split(this.INDEX_SPLIT)[1]);\n        // if dashboard is not named, it's safe to include it\n        if (!dashboardIdentifiers.includes(ContextDashboardType.Named)) {\n          return true;\n        }\n        // if dashboard is named, but also has a context identifier, we skip it\n        if (\n          dashboardIdentifiers.includes(ContextDashboardType.Device) ||\n          dashboardIdentifiers.includes(ContextDashboardType.Group)\n        ) {\n          return false;\n        }\n\n        // all others are good..\n        return true;\n      }),\n      mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)),\n      tap(dashboard => this.cacheDashboard(dashboard)),\n      map(dashboard => this.createDashboardTab(dashboard, context)),\n      toArray()\n    );\n  }\n\n  private verifyDashboardAvailability$(dashboard: ContextDashboardManagedObject) {\n    const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n    const canEdit = from(\n      this.permissions.canEdit(this.INVENTORY_ROLES, dashboard, { skipRequestCheck: true })\n    );\n    const hasAnyGlobalRole =\n      !globalRolesIds || globalRolesIds === ALL_GLOBAL_ROLES_SELECTED\n        ? of(true)\n        : of(this.permissions.hasAnyGlobalRole(globalRolesIds));\n\n    return combineLatest([of(dashboard), canEdit, hasAnyGlobalRole]).pipe(\n      filter(([, canEdit, hasAnyGlobalRole]) => canEdit || hasAnyGlobalRole)\n    );\n  }\n\n  private getContextDashboards$(request: Promise<IResultList<IManagedObject>>) {\n    return from(request).pipe(\n      mergeMap(response =>\n        this.adjustDashboardFor24Columns(response.data as ContextDashboardManagedObject[])\n      )\n    );\n  }\n\n  /**\n   * Cleans already corrupted dashboards from dashboardMo property.\n   * Added to fix dashboards on the cloud instance (eu-latest).\n   * @deprecated This is going to be removed after 1007.7.0.\n   */\n  private async removeDashboardMoProperty(\n    dashboard: ContextDashboardManagedObject\n  ): Promise<ContextDashboardManagedObject> {\n    const dashboardCopy = cloneDeep(dashboard);\n    const children = get(dashboardCopy, 'c8y_Dashboard.children');\n    let updateDashboard = false;\n\n    forEach(children, child => {\n      if (get(child, 'componentTransformConfigWithContext')) {\n        delete child.componentTransformConfigWithContext;\n        updateDashboard = true;\n      }\n      if (get(child, 'config.dashboardMo')) {\n        delete child.config.dashboardMo;\n        updateDashboard = true;\n      }\n    });\n\n    if (updateDashboard) {\n      await this.update(dashboardCopy);\n    }\n    return dashboardCopy;\n  }\n\n  private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n    this.cache.set(dashboard.id, dashboard);\n  }\n\n  private createDashboardTab(dashboard: ContextDashboardManagedObject, context?: ContextData) {\n    const { c8y_Dashboard: _dashboard, id } = dashboard;\n    return {\n      icon: _dashboard.icon,\n      path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n      label: _dashboard.name,\n      priority: _dashboard.priority,\n      hide: this.isReport(dashboard),\n      translateLabel: _dashboard.translateDashboardTitle,\n      badge:\n        _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)\n          ? gettext('Dashboard template')\n          : null,\n      tooltipText: _dashboard.description || gettext('Dashboard template')\n    } as Tab;\n  }\n\n  private clean(dashboard) {\n    const jsonString = JSON.stringify(dashboard, (key, value) => {\n      if (key === '$$hashKey' || key === 'klasses') {\n        return undefined;\n      }\n\n      return value;\n    });\n    return JSON.parse(jsonString);\n  }\n\n  private getNamedDashboard(name: string) {\n    return this.inventory.list({\n      fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${name}`,\n      pageSize: 1\n    });\n  }\n\n  private createDashboardFragment(mo: IManagedObject, type: ContextDashboardType) {\n    let value;\n    if (mo.c8y_Report) {\n      value = `${this.REPORT_PARTIAL_NAME}${mo.id}`;\n    } else {\n      value = type === ContextDashboardType.Type ? mo.type : mo.id;\n    }\n    return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${value}`;\n  }\n\n  private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>, context?) {\n    if (\n      (!context && this.isNamed(dashboard) && !this.isReport(dashboard)) ||\n      this.isDeviceType(dashboard)\n    ) {\n      return {};\n    }\n    return null;\n  }\n\n  private getDefaultDashboard(dashboardCfg: ContextDashboard): ContextDashboardManagedObject {\n    return {\n      c8y_Dashboard: {\n        ...dashboardCfg,\n        name: dashboardCfg.name || 'Default Dashboard',\n        description: gettext('This is a default dashboard.'),\n        columns: 24\n      },\n      [`c8y_Dashboard!name!${dashboardCfg.name}`]: {}\n    } as ContextDashboardManagedObject;\n  }\n\n  /*\n   * For dashboard views within applications, filter dashboards by application association.\n   * Do it on the client side as the inventory query doesn't perform well on not indexed fragments.\n   */\n  private async listAndFilterByApplication(query: string) {\n    const dashboards = await this.inventory.list({ query, pageSize: this.DEFAULT_PAGESIZE });\n    dashboards.data = dashboards.data.filter(dashboard => {\n      return (\n        Array.from(dashboard[this.APPLIED_TO_FRAGMENT] || []).includes(\n          this.appStateService?.currentApplication?.value?.key\n        ) || !dashboard[this.APPLIED_TO_FRAGMENT]\n      );\n    });\n    return dashboards;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport {\n  AllowTypeDashboard,\n  ContextDashboard,\n  DASHBOARD_DETAILS_TABS_OUTLET_NAME,\n  DashboardDetailsTabId,\n  DashboardGlobalRoles,\n  DashboardMetadata\n} from './context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Tab, TabsService } from '@c8y/ngx-components';\nimport { map } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nconst DEFAULT_DUPLICATE_WITHOUT_TYPE = () => {\n  throw new Error('duplicateWithoutTypeFn Not implemented');\n};\n\nconst DEFAULT_PREVIEW_CHANGED = () => {\n  throw new Error('previewChanged Not implemented');\n};\n\nconst DEFAULT_REVERT_TO_DASHBOARD = () => {\n  throw new Error('revertToDashboard Not implemented');\n};\n\n@Injectable()\nexport class DashboardDetailService {\n  dashboardDetailsForm: ReturnType<DashboardDetailService['createDashboardDetailsForm']>;\n  details: DashboardMetadata;\n  detailsTabs: Tab[];\n  saveButtonDisabled = false;\n  get generalSettingsForm() {\n    return this.dashboardDetailsForm.get('generalSettingsForm');\n  }\n  get appearanceSettingsForm() {\n    return this.dashboardDetailsForm.get('appearanceSettingsForm');\n  }\n  get widgetsForm() {\n    return this.dashboardDetailsForm.get('widgetsForm');\n  }\n\n  styling = {\n    themeClass: 'dashboard-theme-light',\n    headerClass: 'panel-title-regular'\n  };\n\n  duplicateWithoutTypeFn: () => Promise<void> = DEFAULT_DUPLICATE_WITHOUT_TYPE;\n\n  previewChangedFn: (\n    dashboardClasses: Pick<ContextDashboard, 'classes' | 'widgetClasses'>\n  ) => void = DEFAULT_PREVIEW_CHANGED;\n\n  revertToDashboardFn: (dashboard: ContextDashboard) => Promise<void> = DEFAULT_REVERT_TO_DASHBOARD;\n\n  readonly DEFAULT_DASHBOARD_MARGIN = 12;\n  readonly DEFAULT_DASHBOARD_ICON = 'th';\n  readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n\n  constructor(\n    private fb: FormBuilder,\n    private translateService: TranslateService,\n    private tabsService: TabsService\n  ) {\n    this.tabsService.items$\n      .pipe(\n        map(tabs => tabs.filter(tab => tab.tabsOutlet === DASHBOARD_DETAILS_TABS_OUTLET_NAME)),\n        takeUntilDestroyed()\n      )\n      .subscribe(tabs => (this.detailsTabs = tabs));\n  }\n\n  getTabs(): Tab[] {\n    let tabs = this.detailsTabs;\n    const shouldHideGeneralTab = !(\n      (!this.details?.isNamedDashboard && !this.details?.hideAvailability) ||\n      this.details?.isReport\n    );\n    const shouldHideVersionHistoryTab = !this.details?.mo?.c8y_DashboardHistory;\n    if (shouldHideGeneralTab) {\n      tabs = tabs.filter(tab => tab.featureId !== DashboardDetailsTabId.GENERAL);\n    }\n    if (shouldHideVersionHistoryTab) {\n      tabs = tabs.filter(tab => tab.featureId !== DashboardDetailsTabId.VERSIONHISTORY);\n    }\n    return tabs;\n  }\n\n  /**\n   * Initializes dashboard details form.\n   * @param dashboard Context dashboard object\n   * @param isReport True if its report dashboard\n   * @param allowTypeDashboard Allow to make dashboard type dashboard\n   * @returns Dashboard details form\n   */\n  initForm(\n    dashboard: ContextDashboard,\n    isReport: boolean,\n    allowTypeDashboard: AllowTypeDashboard\n  ): void {\n    this.dashboardDetailsForm = this.createDashboardDetailsForm(\n      dashboard,\n      isReport,\n      allowTypeDashboard\n    );\n  }\n\n  reset() {\n    this.dashboardDetailsForm = null;\n    this.details = null;\n    this.duplicateWithoutTypeFn = DEFAULT_DUPLICATE_WITHOUT_TYPE;\n    this.previewChangedFn = DEFAULT_PREVIEW_CHANGED;\n    this.revertToDashboardFn = DEFAULT_REVERT_TO_DASHBOARD;\n  }\n\n  /**\n   * Creates dashboard details form divided into two groups- general settings and appearance settings.\n   * @param dashboard Context dashboard object\n   * @param isReport True if its report dashboard\n   * @param allowTypeDashboard Allow to make dashboard type dashboard\n   * @returns Dashboard details form\n   */\n  private createDashboardDetailsForm(\n    dashboard: ContextDashboard,\n    isReport: boolean,\n    allowTypeDashboard: AllowTypeDashboard\n  ) {\n    return this.fb.group({\n      generalSettingsForm: this.createGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),\n      appearanceSettingsForm: this.createAppearanceSettingsForm(dashboard),\n      widgetsForm: this.createWidgetsForm(dashboard)\n    });\n  }\n  /**\n   * Creates form group for general settings of dashboard.\n   * @param dashboard Context dashboard object\n   * @param isReport True if its report dashboard\n   * @param allowTypeDashboard Allow to make dashboard type dashboard\n   * @returns Dashboard general settings form\n   */\n  private createGeneralSettingsForm(\n    dashboard: ContextDashboard,\n    isReport: boolean,\n    allowTypeDashboard: AllowTypeDashboard\n  ) {\n    const globalRolesIdsValue: DashboardGlobalRoles = !dashboard?.globalRolesIds\n      ? null\n      : Array.isArray(dashboard.globalRolesIds)\n        ? [...dashboard.globalRolesIds]\n        : dashboard.globalRolesIds;\n    return this.fb.group({\n      icon: [dashboard?.icon || this.DEFAULT_DASHBOARD_ICON, [Validators.minLength(1)]],\n      priority: [\n        dashboard?.priority || this.DEFAULT_DASHBOARD_PRIORITY,\n        [Validators.min(-10000), Validators.max(10000), Validators.required]\n      ],\n      name: [\n        dashboard?.name ||\n          (isReport\n            ? this.translateService.instant(gettext('Report'))\n            : this.translateService.instant(gettext('Dashboard'))),\n        [Validators.required, Validators.maxLength(512)]\n      ],\n      description: [dashboard?.description || null, [Validators.maxLength(1_000)]],\n      globalRolesIds: this.fb.control<DashboardGlobalRoles>(globalRolesIdsValue), // calling this.fb.control to cast type\n      c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],\n      ...(allowTypeDashboard !== 'disallow' && {\n        deviceType: [\n          {\n            value: dashboard?.deviceType ?? false,\n            disabled: allowTypeDashboard === 'allow_if_type_filled'\n          }\n        ]\n      })\n    });\n  }\n  /**\n   * Creates form group for appearance settings of dashboard.\n   * @param dashboard Context dashboard object\n   * @returns Dashboard appearance settings form\n   */\n  private createAppearanceSettingsForm(dashboard: ContextDashboard) {\n    return this.fb.group({\n      widgetMargin: [\n        dashboard?.widgetMargin || this.DEFAULT_DASHBOARD_MARGIN,\n        [Validators.min(0), Validators.max(50)]\n      ],\n      translateWidgetTitle: [!!dashboard?.translateWidgetTitle],\n      translateDashboardTitle: [dashboard?.translateDashboardTitle ?? true],\n      classes: dashboard?.classes || { [this.styling.themeClass]: true },\n      widgetClasses: dashboard?.widgetClasses || { [this.styling.headerClass]: true }\n    });\n  }\n\n  private createWidgetsForm(dashboard: ContextDashboard) {\n    return this.fb.group({\n      children: dashboard?.children || {}\n    });\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AppStateService,\n  ContextData,\n  ContextRouteService,\n  GainsightService,\n  GroupService,\n  memoize,\n  ModalService,\n  Status,\n  Tab,\n  TabsService,\n  TabsOutletComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { clone, cloneDeep, isEqual } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport {\n  AllowTypeDashboard,\n  ContextDashboard,\n  ContextDashboardManagedObject,\n  DASHBOARD_DETAILS_OUTLET,\n  DASHBOARD_DETAILS_TABS_OUTLET_NAME,\n  DASHBOARD_SETTINGS_CHANGES,\n  DashboardHistoryDescription,\n  PRODUCT_EXPERIENCE,\n  REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailService } from './dashboard-detail.service';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n  selector: 'c8y-dashboard-detail',\n  templateUrl: './dashboard-detail.component.html',\n  providers: [DashboardDetailService],\n  imports: [CollapseDirective, TabsOutletComponent, RouterOutlet, C8yTranslatePipe]\n})\nexport class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {\n  isCollapsed = true;\n  currentContext: ContextData;\n  currentDashboard: ContextDashboard;\n  @Input() isReport: boolean;\n  @Input() deviceType: string;\n  @Input() context: any;\n  @Input() mo: ContextDashboardManagedObject;\n  @Input() dashboard: ContextDashboard;\n  @Input() isNamedDashboard: boolean;\n  @Input() hideAvailability = false;\n  deviceTypeValue: string;\n  displayDeviceTypeValue: string;\n  icons: string[];\n  dashboardDetailsForm: ReturnType<DashboardDetailService['createDashboardDetailsForm']>;\n  allowTypeDashboard: AllowTypeDashboard;\n  isEdit: boolean;\n  tabs: Tab[] = [];\n  @Output() dashboardSaved = new EventEmitter<ContextDashboard>();\n  @Output() previewChanged = new EventEmitter<any>();\n  private destroy$: Subject<void> = new Subject();\n\n  readonly TABS_OUTLET_NAME = DASHBOARD_DETAILS_TABS_OUTLET_NAME;\n\n  constructor(\n    private contextDashboardService: ContextDashboardService,\n    private translateService: TranslateService,\n    private contextRoute: ContextRouteService,\n    private activatedRoute: ActivatedRoute,\n    private tabsService: TabsService,\n    private router: Router,\n    private inventory: InventoryService,\n    private route: ActivatedRoute,\n    public dashboardDetailService: DashboardDetailService,\n    private appState: AppStateService,\n    private groupService: GroupService,\n    private modal: ModalService,\n    private gainsightService: GainsightService\n  ) {}\n\n  async ngOnInit() {\n    this.currentContext = this.contextRoute.getContextData(this.activatedRoute);\n    this.deviceTypeValue = this.context?.type;\n    this.displayDeviceTypeValue =\n      this.context &&\n      this.groupService.isGroup(this.context) &&\n      !this.groupService.isAsset(this.context)\n        ? this.translateService.instant(gettext('Group'))\n        : this.deviceTypeValue;\n\n    this.updateAllowTypeDashboard();\n    this.initForm();\n    await this.clearNamedOutletPath(); // on init this component collapsed, but outlet may occur in URL when reloading page\n  }\n\n  ngOnChanges(): void {\n    this.updateAllowTypeDashboard();\n    this.refreshDashboardDetails();\n  }\n\n  ngAfterContentInit(): void {\n    if (!this.isEdit) {\n      this.initializeConfiguration();\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.dashboardDetailService.reset();\n  }\n\n  async save() {\n    const oldDashboard = cloneDeep(this.dashboard);\n    this.dashboard = {\n      ...this.dashboard,\n      ...this.dashboardDetailService.dashboardDetailsForm.get('generalSettingsForm').value,\n      ...this.dashboardDetailService.dashboardDetailsForm.get('appearanceSettingsForm').value,\n      ...this.dashboardDetailService.dashboardDetailsForm.get('widgetsForm').value,\n      c8y_IsNavigatorNode: this.dashboardDetailService.dashboardDetailsForm.get(\n        'generalSettingsForm'\n      ).value.c8y_IsNavigatorNode\n        ? {}\n        : this.currentDashboard\n          ? null\n          : undefined\n    };\n    const dashboardSettingChanges: string[] = Object.keys(this.dashboard).filter(key => {\n      if (key === 'c8y_IsNavigatorNode') {\n        return !!oldDashboard[key] !== !!this.dashboard[key];\n      }\n      return !isEqual(oldDashboard[key], this.dashboard[key]);\n    });\n\n    this.dashboard.author = this.appState.currentUser.value.userName;\n\n    this.dashboard.deviceTypeValue ??= this.deviceTypeValue;\n    this.dashboard.historyDescription =\n      this.updateDashboardHistoryDescription(dashboardSettingChanges);\n\n    if (!this.isEdit && !this.isReport) {\n      await this.createNewDashboard();\n    } else if (!this.isEdit && this.isReport) {\n      await this.createNewReport();\n    } else {\n      await this.updateDashboard();\n      this.mo.c8y_DashboardHistory = [\n        this.dashboard,\n        ...(this.mo?.c8y_DashboardHistory ? this.mo.c8y_DashboardHistory : [])\n      ];\n    }\n  }\n\n  updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription {\n    return {\n      changeType: this.isEdit ? 'update' : 'create',\n      dashboardSettingChanges: dashboardChanges\n        .filter(value => value !== 'deviceType')\n        .map(value => DASHBOARD_SETTINGS_CHANGES[value] || value),\n      deviceType: dashboardChanges.find(value => value === 'deviceType')\n        ? this.dashboard.deviceType\n        : undefined\n    };\n  }\n\n  async cancel() {\n    const isUnsavedDefaultDashboard = this.isNamedDashboard && !this.mo.id;\n    if (!this.isEdit && !this.isReport && !isUnsavedDefaultDashboard) {\n      // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing\n      this.tabsService.items$.pipe(first()).subscribe((tabs: Tab[]) => {\n        const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);\n        this.router.navigate(typeof tab.path === 'string' ? [tab.path] : tab.path, {\n          replaceUrl: true\n        });\n      });\n      return;\n    } else if (!this.isEdit && this.isReport) {\n      this.router.navigate(['reports']);\n      return;\n    } else if (\n      this.dashboardDetailService.dashboardDetailsForm.dirty &&\n      !(await this.confirmClosing())\n    ) {\n      return;\n    }\n    await this.clearNamedOutletPath();\n    this.cleanupAfterDetailsClose();\n  }\n\n  async canDeactivate(omitConfirm = false): Promise<boolean> {\n    let canDeactivate: boolean;\n    if (this.isCollapsed || !this.dashboardDetailService.dashboardDetailsForm.dirty) {\n      canDeactivate = true;\n    } else {\n      if (omitConfirm) {\n        canDeactivate = false;\n      } else {\n        canDeactivate = await this.confirmClosing();\n      }\n    }\n    if (canDeactivate) {\n      this.cleanupAfterDetailsClose();\n    }\n    return canDeactivate;\n  }\n\n  show(isEdit: boolean) {\n    this.isEdit = isEdit;\n    if (this.isEdit) {\n      this.edit();\n    }\n    this.initForm();\n    this.isCollapsed = false;\n    this.refreshDashboardDetails();\n  }\n\n  async revertDashboard(dashboard: ContextDashboard) {\n    this.dashboard = dashboard;\n    this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n      ? {}\n      : this.currentDashboard\n        ? null\n        : undefined;\n    await this.updateDashboard();\n  }\n\n  async duplicateWithoutType(): Promise<void> {\n    const newDashboardName = this.translateService.instant(gettext('{{ dashboardName }} (copy)'), {\n      dashboardName:\n        this.dashboardDetailService.dashboardDetailsForm.get('generalSettingsForm').value.name\n    });\n    this.dashboardDetailService.dashboardDetailsForm.get('generalSettingsForm').patchValue({\n      ...this.dashboardDetailService.dashboardDetailsForm.get('generalSettingsForm').value,\n      deviceType: false,\n      name: newDashboardName\n    });\n    // setting edition to false so new dashboard can be created as copy of current one\n    this.isEdit = false;\n    await this.save();\n  }\n\n  private updateAllowTypeDashboard(): void {\n    this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(\n      this.mo,\n      this.currentContext\n    );\n  }\n\n  private initForm(): void {\n    this.dashboardDetailService.initForm(this.dashboard, this.isReport, this.allowTypeDashboard);\n    this.dashboardDetailsForm = this.dashboardDetailService.dashboardDetailsForm;\n  }\n\n  private async confirmClosing(): Promise<boolean> {\n    try {\n      await this.modal.confirm(\n        gettext('Close dashboard details'),\n        gettext(\n          'Are you sure you want to close dashboard details? All unsaved changes will be lost.'\n        ),\n        Status.WARNING,\n        {\n          ok: gettext('Close'),\n          cancel: gettext('Cancel')\n        }\n      );\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  private async createNewDashboard() {\n    const isUnsavedDefaultDashboard = this.isNamedDashboard && !this.mo.id;\n    const mo: ContextDashboardManagedObject = await this.contextDashboardService.create(\n      this.dashboard,\n      this.currentContext,\n      this.isNamedDashboard ? this.dashboard.name : undefined\n    );\n\n    await this.onCreateGSEvent(mo);\n    await this.clearNamedOutletPath();\n    this.cleanupAfterDetailsClose();\n    if (!isUnsavedDefaultDashboard) {\n      await this.contextDashboardService.navigateToDashboard(mo, true);\n    } else {\n      this.dashboardSaved.emit(mo);\n    }\n  }\n\n  private async onCreateGSEvent(mo: ContextDashboardManagedObject) {\n    const parentName = await this.convertStringToHash(this.context?.name);\n    const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n      component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,\n      action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n      name: dashboardName,\n      id: mo.id,\n      nameId: `${dashboardName}_${this.mo.id}`,\n      isDashboardTemplate: mo.c8y_Dashboard.deviceType,\n      parentAssetId: this.context?.id ? this.context.id : 'noContext',\n      parentAssetName: this.context?.id ? parentName : 'noContext',\n      parentAssetType: this.context?.id ? this.context.type : 'noContext',\n      parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n      parentAssetNameDashboardName: this.context?.id\n        ? `${parentName}_${dashboardName}`\n        : 'noContext',\n      parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n      parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n      parentAssetNameIdDashboardNameId: this.context?.id\n        ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n        : 'noContext',\n      dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,\n      context: this.contextDashboardService.getContextForGS(\n        this.currentContext?.contextData as IManagedObject\n      )\n    });\n  }\n\n  @memoize()\n  private async convertStringToHash(str: string) {\n    if (!str) {\n      return null;\n    }\n    return (await this.gainsightService.shouldSendPiiData())\n      ? str\n      : await this.gainsightService.hashGroupName(str);\n  }\n\n  private async createNewReport() {\n    try {\n      const { name, icon, c8y_IsNavigatorNode, priority, description, translateDashboardTitle } =\n        this.dashboard;\n      const report = (\n        await this.contextDashboardService.createReport({\n          name,\n          icon,\n          c8y_IsNavigatorNode,\n          priority,\n          description,\n          translateDashboardTitle\n        } as Partial<IManagedObject>)\n      ).data;\n\n      await this.contextDashboardService.create(\n        this.dashboard,\n        undefined,\n        `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n      );\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {\n        component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,\n        action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n        name: report.name,\n        id: report.id,\n        context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n      });\n      if (report.c8y_IsNavigatorNode) {\n        this.contextDashboardService.addReportNavigatorNode(report);\n      }\n      await this.clearNamedOutletPath();\n      this.cleanupAfterDetailsClose();\n      await this.router.navigate(['reports', report.id]);\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  private async updateDashboard() {\n    try {\n      const dashboardMO: ContextDashboardManagedObject = cloneDeep(this.mo);\n      const cfg = this.dashboard;\n      if (this.isReport) {\n        const { name, icon, c8y_IsNavigatorNode, priority, description, translateDashboardTitle } =\n          cfg;\n        dashboardMO.c8y_Dashboard = cfg;\n        await this.updateReport({\n          id: this.context.id,\n          name,\n          icon,\n          c8y_IsNavigatorNode,\n          priority,\n          description,\n          translateDashboardTitle\n        });\n      } else {\n        dashboardMO.c8y_Dashboard = cfg;\n      }\n\n      const updatedDashboardMo = await this.contextDashboardService.update(\n        dashboardMO,\n        this.currentContext\n      );\n      await this.clearNamedOutletPath();\n      this.cleanupAfterDetailsClose();\n\n      this.dashboardSaved.emit(updatedDashboardMo);\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  private edit() {\n    if (this.isReport) {\n      const { name, icon, priority, c8y_IsNavigatorNode, description } = this.context;\n      Object.assign(this.dashboard, { name, icon, priority, c8y_IsNavigatorNode, description });\n    }\n    this.initializeConfiguration();\n  }\n\n  private initializeConfiguration() {\n    const defaultDashboardCfg: Partial<ContextDashboard> = {\n      name: this.translateService.instant(this.isReport ? gettext('Report') : gettext('Dashboard')),\n      priority: this.isReport\n        ? REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n        : this.dashboardDetailService.DEFAULT_DASHBOARD_PRIORITY,\n      icon: this.dashboardDetailService.DEFAULT_DASHBOARD_ICON,\n      deviceTypeValue: this.deviceType,\n      columns: 24\n    };\n\n    if (this.dashboard) {\n      this.currentDashboard = clone(this.dashboard);\n    } else {\n      this.dashboard = defaultDashboardCfg;\n      this.dashboardDetailService.dashboardDetailsForm.markAsDirty();\n    }\n  }\n\n  private async updateReport(mo: Partial<IManagedObject>) {\n    mo.c8y_IsNavigatorNode = mo.c8y_IsNavigatorNode ? {} : null;\n    const res = await this.inventory.update(mo);\n    this.context = res.data;\n    if (this.route.parent) {\n      this.route.parent.snapshot.data.contextData = this.context;\n    }\n    this.contextDashboardService.updateNavigatorItem(res.data);\n  }\n\n  private cleanupAfterDetailsClose() {\n    this.isCollapsed = true;\n    if (!this.isEdit) {\n      const dashboardContext = this.route.snapshot.data.dashboard;\n      // hide New dashboard tab\n      const tmpNewDashboardTab = [...this.tabsService.state].find(\n        t => t.featureId === newDashboardTab.featureId\n      );\n      // don't hide the new dashboard tab when clicking on the add dashboard button from another dashboard.\n      if (!tmpNewDashboardTab || dashboardContext?.c8y_Dashboard) {\n        return;\n      }\n      // hide tab and make it appear as last one to prevent navigating to it\n      tmpNewDashboardTab.hide = true;\n      tmpNewDashboardTab.priority = -Infinity;\n      this.tabsService.refresh();\n    }\n    this.previewChanged.emit(this.dashboard);\n  }\n\n  private async clearNamedOutletPath() {\n    if (\n      this.activatedRoute.snapshot?.children?.[0]?.routeConfig.outlet === DASHBOARD_DETAILS_OUTLET\n    ) {\n      await this.router.navigate(\n        [\n          {\n            outlets: {\n              [DASHBOARD_DETAILS_OUTLET]: null\n            }\n          }\n        ],\n        { queryParamsHandling: 'preserve', relativeTo: this.activatedRoute }\n      );\n    }\n  }\n\n  private refreshDashboardDetails() {\n    this.dashboardDetailService.details = {\n      isReport: this.isReport,\n      isNamedDashboard: this.isNamedDashboard,\n      hideAvailability: this.hideAvailability,\n      dashboard: this.dashboard,\n      deviceTypeValue: this.deviceType,\n      displayDeviceTypeValue: this.displayDeviceTypeValue,\n      mo: this.mo,\n      allowTypeDashboard: this.allowTypeDashboard,\n      isDevice: !!this.context?.c8y_IsDevice,\n      context: this.context\n    };\n    this.dashboardDetailService.duplicateWithoutTypeFn = () => this.duplicateWithoutType();\n    this.dashboardDetailService.previewChangedFn = dashboardClasses =>\n      this.previewChanged.emit(dashboardClasses);\n    this.dashboardDetailService.revertToDashboardFn = dashboard => this.revertDashboard(dashboard);\n    this.tabs = this.dashboardDetailService.getTabs();\n  }\n}\n","<div\n  class=\"collapse c8y-top-drawer\"\n  [collapse]=\"isCollapsed\"\n  [isAnimated]=\"true\"\n>\n  <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n    <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n  </div>\n\n  @if (!isCollapsed) {\n    <div class=\"d-flex\">\n      <c8y-tabs-outlet\n        class=\"c8y-top-drawer--tabs\"\n        [tabs]=\"tabs\"\n        [outletName]=\"TABS_OUTLET_NAME\"\n        [orientation]=\"'vertical'\"\n        [openFirstTab]=\"true\"\n      ></c8y-tabs-outlet>\n\n      <div\n        class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\"\n      >\n        <router-outlet name=\"dashboard-details\"></router-outlet>\n      </div>\n    </div>\n  }\n\n  <div class=\"c8y-top-drawer--footer\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      data-cy=\"dashboard-detail--cancel-dashboard\"\n      (click)=\"cancel()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      title=\"{{ 'Save' | translate }}\"\n      type=\"button\"\n      data-cy=\"dashboard-detail--save-dashboard\"\n      (click)=\"save()\"\n      [disabled]=\"\n        ((dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit) ||\n        dashboardDetailService.saveButtonDisabled\n      \"\n    >\n      {{ 'Save' | translate }}\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { cloneDeep } from 'lodash-es';\n\n/**\n * Holds current state of dashboard children during edit mode.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DashboardOriginatorService {\n  /**\n   * Current dashboard children state name for indicating what change will be undone.\n   */\n  get currentStateName(): string {\n    return this.state?.name;\n  }\n  /**\n   * Current dashboard children state.\n   * @private\n   */\n  private state: DashboardChildrenState;\n  /**\n   * Initializes dashboard children state on edit mode start.\n   * @param state Dashboard children initial state.\n   */\n  initState(state: DashboardChildrenState): void {\n    this.state = state;\n  }\n  /**\n   * Updates dashboard children state when it is changed or restored with undo/redo.\n   * @param state Dashboard children updated state.\n   */\n  setState(state: DashboardChildrenState): void {\n    this.state = state;\n  }\n  /**\n   * Returns copy of current state.\n   */\n  getState(): DashboardChildrenState {\n    return cloneDeep(this.state);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\n\n/**\n * Caretaker is responsible for undo and redo functionalities.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DashboardCaretakerService {\n  /**\n   * Current undo stack length for defining undo button disable state.\n   */\n  get undoStackLength(): number {\n    return this.undoStack.length;\n  }\n  /**\n   * Redo stack latest item for defining redo button disable state and its' title.\n   */\n  get redoStackLastItem(): DashboardChildrenState {\n    return this.redoStack[this.redoStack.length - 1];\n  }\n  /**\n   * List of dashboard children changes.\n   * @private\n   */\n  private undoStack: DashboardChildrenState[] = [];\n  /**\n   * List of dashboard children changes that were undone and can be redone back.\n   * @private\n   */\n  private redoStack: DashboardChildrenState[] = [];\n\n  constructor(private originator: DashboardOriginatorService) {}\n  /**\n   * Adds current dashboard children state to undo stack and clears redo stack.\n   */\n  backup(): void {\n    this.undoStack.push(this.originator.getState());\n    this.redoStack = [];\n  }\n  /**\n   * Reverts last dashboard children change and puts it in redo stack.\n   * @returns Current state of dashboard children after reverting last change.\n   */\n  undo(): DashboardChildrenState | undefined {\n    if (!this.undoStack.length) {\n      return;\n    }\n    const memento = this.undoStack.pop();\n    this.redoStack.push(this.originator.getState());\n\n    this.originator.setState(memento);\n    return memento;\n  }\n  /**\n   * Applies previously undone change.\n   * @returns Current state of dashboard children after applying previously undone change.\n   */\n  redo(): DashboardChildrenState | undefined {\n    if (!this.redoStack.length) {\n      return;\n    }\n    this.undoStack.push(this.originator.getState());\n    const memento = this.redoStack.pop();\n\n    this.originator.setState(memento);\n    return memento;\n  }\n  /**\n   * Clears both undo and redo stack, sets current state as initial state and returns initial state.\n   * @returns Initial state of dashboard children.\n   */\n  reset() {\n    const initialItem = this.undoStack[0] || this.originator.getState();\n    this.undoStack = [];\n    this.redoStack = [];\n    this.originator.initState(initialItem);\n    return initialItem;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\nimport { DashboardCaretakerService } from './dashboard-caretaker.service';\nimport { DashboardChildrenState } from '../context-dashboard.model';\n/**\n * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature\n * during edit mode of dashboard.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DashboardEditModeService {\n  get undoButtonDisabled(): boolean {\n    return this.caretaker.undoStackLength === 0;\n  }\n  /**\n   * Current dashboard change name for undo button title.\n   */\n  get changeToUndoName(): string {\n    return this.originator.currentStateName;\n  }\n  /**\n   * Redo stack latest item for defining redo button disable state and its title.\n   */\n  get redoStackLastItem(): DashboardChildrenState {\n    return this.caretaker.redoStackLastItem;\n  }\n\n  constructor(\n    private originator: DashboardOriginatorService,\n    private caretaker: DashboardCaretakerService\n  ) {}\n  /**\n   * Initializes dashboard children state on edit mode start.\n   * @param state Dashboard children initial state.\n   */\n  init(state: DashboardChildrenState) {\n    this.originator.initState(state);\n  }\n  /**\n   * Saves current state for further undo actions and sets new dashboard children state.\n   * @param state Dashboard children updated state.\n   */\n  newState(state: DashboardChildrenState) {\n    this.caretaker.backup();\n    this.originator.setState(state);\n  }\n  /**\n   * Returns copy of current state.\n   */\n  getCurrentState(): DashboardChildrenState {\n    return this.originator.getState();\n  }\n  /**\n   * Reverts last dashboard children change.\n   * @returns Current state of dashboard children after reverting last change.\n   */\n  undo(): DashboardChildrenState {\n    return this.caretaker.undo();\n  }\n  /**\n   * Applies previously undone change.\n   * @returns Current state of dashboard children after applying previously undone change.\n   */\n  redo(): DashboardChildrenState {\n    return this.caretaker.redo();\n  }\n  /**\n   * Resets dashboard children state to initial one and returns initial state.\n   * @returns Initial state of dashboard children.\n   */\n  reset(): DashboardChildrenState {\n    return this.caretaker.reset();\n  }\n}\n","import { InjectionToken, Injector, Type } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport {\n  ExtensionFactory,\n  GenericHookOptions,\n  GenericHookType,\n  hookGeneric\n} from '@c8y/ngx-components';\n\n/**\n * A hook to add dynamic configurations to any widget configuration.\n * @deprecated Consider using the `hookWidgetConfig` function instead.\n */\nexport const HOOK_WIDGET_CONFIG = new InjectionToken<WidgetConfigSectionDefinition[]>(\n  'HOOK_WIDGET_CONFIG'\n);\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValue1 }, { ...hookValue2 }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type WidgetConfigSectionExtension =\n  | WidgetConfigSectionDefinition\n  | WidgetConfigSectionDefinition[]\n  | ExtensionFactory<WidgetConfigSectionDefinition>;\n\n/**\n * A hook to add dynamic components to the UI (e.g. widgets).\n *\n * You can either provide a single `DynamicComponentDefinition` as parameter:\n * ```typescript\n *  hookWidgetConfig(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookWidgetConfig([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<DynamicComponentDefinition>`\n * ```typescript\n *  export class MyDynamicComponentDefinitionFactory implements ExtensionFactory<DynamicComponentDefinition> {...}\n *  ...\n *  hookWidgetConfig(MyDynamicComponentDefinitionFactory)\n * ```\n * A typed alternative to `HOOK_WIDGET_CONFIG`.\n * @param components The `DynamicComponentDefinition`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookWidgetConfig<T = Type<any>>(\n  components: GenericHookType<WidgetConfigSectionDefinition<T>>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<WidgetConfigSectionDefinition<T>>(components, HOOK_WIDGET_CONFIG, options);\n}\n\nexport interface WidgetConfigSectionDefinition<T = any> extends WidgetConfigSectionBase<T> {\n  /**\n   * The dynamic component id this configuration applies to.\n   */\n  widgetId: string;\n\n  /**\n   * The component to load.\n   */\n  loadComponent: () => Promise<Type<T>>;\n}\n\nexport interface WidgetConfigSection<T = Type<any>> extends WidgetConfigSectionBase<T> {\n  /**\n   * The component to load.\n   */\n  component: T;\n  providers?: Type<unknown>[];\n}\n\nexport interface WidgetConfigSectionBase<T> {\n  /**\n   * The label to show as headline of the section\n   */\n  label: string;\n  /**\n   * The priority. Default settings from hookWidget will have priority 0.\n   */\n  priority?: number;\n  /**\n   * Defines if the section should be by default expanded or collapsed.\n   */\n  expanded?: boolean;\n  /**\n   * The initial state.\n   */\n  initialState?: Partial<T>;\n  /**\n   * The injector to be used.\n   */\n  injector?: Injector;\n  /**\n   * Additional providers to be used only in scope of the configuration. If same Providers are\n   * provided multiple times, only one is used.\n   */\n  providers?: Type<unknown>[] | (() => Promise<Type<unknown>[]>);\n  /**\n   * An array of validator functions to be applied to the main widget config form.\n   * These validators are added when the section is initialized and allow for custom\n   * validation logic (useful for cross-section or cross-fields validation).\n   *\n   * **Note:** Validator must indicate the names of form controls (at least one) whose values affect the validation outcome.\n   * This can be done by setting a `controlNames` property on the validator function:\n   *\n   * @example\n   * ```TypeScript\n   * const myValidator: ValidatorFn = (formGroup: AbstractControl) => {\n   *   // validation logic\n   * };\n   * (myValidator as any).controlNames = ['control1', 'control2'];\n   * ```\n   */\n  validators?: ValidatorFn[];\n  /**\n   * Custom validation errors to display.\n   * Keys should match the error keys, values are the error messages.\n   */\n  validationErrors?: Record<string, string>;\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  getInjectedHooks,\n  PluginsResolveService,\n  stateToFactory\n} from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport { HOOK_WIDGET_CONFIG, WidgetConfigSectionDefinition } from './widget-config-hook.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetConfigSectionService extends ExtensionPointForPlugins<WidgetConfigSectionDefinition> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    private plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  get state() {\n    return this.state$.value;\n  }\n\n  add(component: WidgetConfigSectionDefinition) {\n    this.state.add(component);\n    this.emitNewState();\n  }\n\n  remove(component: WidgetConfigSectionDefinition) {\n    this.state.delete(component);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<WidgetConfigSectionDefinition[]> {\n    return fromTriggerOnce<WidgetConfigSectionDefinition>(\n      this.router,\n      this.refresh$,\n      [\n        getInjectedHooks<WidgetConfigSectionDefinition>(HOOK_WIDGET_CONFIG, this.injectors),\n        () => this.factories,\n        stateToFactory(this.state$)\n      ],\n      false\n    ).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n","import { Component, DestroyRef, inject, Input, OnInit, signal, TemplateRef } from '@angular/core';\nimport {\n  C8yComponentOutlet,\n  ListGroupModule,\n  IconDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { WidgetConfigSection } from '../widget-config-hook/widget-config-hook.model';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { NgForm, ValidatorFn } from '@angular/forms';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\n\n@Component({\n  selector: 'c8y-widget-config-section',\n  templateUrl: './widget-config-section.component.html',\n  standalone: true,\n  imports: [\n    ListGroupModule,\n    C8yComponentOutlet,\n    IconDirective,\n    NgTemplateOutlet,\n    CommonModule,\n    C8yTranslatePipe,\n    TooltipDirective\n  ]\n})\nexport class WidgetConfigSectionComponent implements OnInit {\n  @Input() section: WidgetConfigSection;\n\n  feedbackTemplate: TemplateRef<any>;\n  customValidatorsTouched = signal(false);\n  readonly parentForm = inject(NgForm, { optional: true });\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  setFeedbackTemplate(template: TemplateRef<any>) {\n    this.feedbackTemplate = template;\n  }\n\n  ngOnInit(): void {\n    this.initializeCustomValidation();\n  }\n\n  private initializeCustomValidation(): void {\n    const validators = this.section.validators;\n\n    if (!validators || validators.length === 0) {\n      return;\n    }\n    const form = this.parentForm.form;\n    form.addValidators(validators);\n\n    const monitoredControlNames = this.extractControlNames(validators);\n\n    merge(form.valueChanges, form.statusChanges)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        const anyCustomControlsTouched = monitoredControlNames.some(\n          controlName => form.get(controlName).touched\n        );\n\n        this.customValidatorsTouched.set(anyCustomControlsTouched);\n      });\n  }\n\n  private extractControlNames(validators: ValidatorFn[]): string[] {\n    const controlNames = new Set<string>();\n\n    validators.forEach(validator => {\n      const customControlNames = (validator as any).controlNames;\n\n      if (customControlNames) {\n        customControlNames.forEach((name: string) => controlNames.add(name));\n      }\n    });\n\n    return Array.from(controlNames);\n  }\n}\n","<c8y-li\n  class=\"c8y-list__item--no-expand c8y-list__item--sticky-top c8y-list__item--dense full-w-collapse\"\n  [collapsed]=\"!section.expanded\"\n  #li\n>\n  <div class=\"d-flex p-r-16 fit-w\">\n    <button\n      class=\"btn-clean flex-no-shrink p-r-8 flex-grow\"\n      type=\"button\"\n      [attr.data-cy]=\"section.label\"\n      (click)=\"li.collapsed = !li.collapsed\"\n    >\n      <i\n        class=\"p-r-4\"\n        [c8yIcon]=\"li.collapsed ? 'chevron-right' : 'chevron-down'\"\n      ></i>\n      <span class=\"text-medium\">\n        {{ section.label | translate }}\n      </span>\n    </button>\n    <ng-container *ngTemplateOutlet=\"feedbackTemplate\"></ng-container>\n    @for (error of section.validationErrors | keyvalue; track error.key) {\n      @if (parentForm.form?.errors?.[error.key] && customValidatorsTouched()) {\n        <button\n          class=\"btn-clean\"\n          [tooltip]=\"error.value | translate\"\n          type=\"button\"\n          [delay]=\"500\"\n        >\n          <i\n            class=\"status major\"\n            [c8yIcon]=\"'warning'\"\n          ></i>\n        </button>\n      }\n    }\n  </div>\n  <c8y-list-item-collapse>\n    @for (error of section.validationErrors | keyvalue; track error.key) {\n      @if (parentForm.form?.errors?.[error.key] && customValidatorsTouched()) {\n        <div\n          class=\"alert alert-warning m-t-8\"\n          role=\"alert\"\n        >\n          {{ error.value | translate }}\n        </div>\n      }\n    }\n    <ng-container\n      *c8yComponentOutlet=\"\n        section.component;\n        initialState: section.initialState;\n        environmentInjector: section.injector\n      \"\n    ></ng-container>\n  </c8y-list-item-collapse>\n</c8y-li>\n","import { AfterViewInit, Component, inject, TemplateRef, ViewChild } from '@angular/core';\nimport { WidgetConfigSectionComponent } from './widget-config-section.component';\n\n@Component({\n  selector: 'c8y-widget-config-feedback',\n  templateUrl: './widget-config-feedback.component.html',\n  standalone: true,\n  imports: [WidgetConfigSectionComponent]\n})\nexport class WidgetConfigFeedbackComponent implements AfterViewInit {\n  widgetSection = inject(WidgetConfigSectionComponent);\n  @ViewChild(TemplateRef) template: TemplateRef<any>;\n\n  ngAfterViewInit(): void {\n    this.widgetSection.setFeedbackTemplate(this.template);\n  }\n}\n","<ng-template #tpl>\n  <ng-content></ng-content>\n</ng-template>\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ControlContainer, FormsModule, NgForm } from '@angular/forms';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport {\n  AlertService,\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  IconDirective\n} from '@c8y/ngx-components';\nimport {\n  AssetSelectionChangeEvent,\n  AssetSelectorModule,\n  AssetSelectorOptions\n} from '@c8y/ngx-components/assets-navigator';\nimport { ContextWidgetConfig } from '../context-dashboard.model';\nimport { WidgetConfigService } from '../widget-config.service';\nimport { WidgetConfigFeedbackComponent } from './widget-config-feedback.component';\nimport { WidgetConfigSectionComponent } from './widget-config-section.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\n@Component({\n  selector: 'c8y-widget-asset-selector',\n  templateUrl: './widget-asset-selector.component.html',\n  host: { class: 'bg-level-1' },\n  standalone: true,\n  imports: [\n    AssetSelectorModule,\n    AsyncPipe,\n    WidgetConfigFeedbackComponent,\n    NgClass,\n    C8yTranslatePipe,\n    IconDirective,\n    FormsModule,\n    C8yTranslateDirective\n  ],\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class WidgetAssetSelectorComponent {\n  widgetConfigService = inject(WidgetConfigService);\n  sectionComponent = inject(WidgetConfigSectionComponent);\n  inventoryService = inject(InventoryService);\n  alertService = inject(AlertService);\n\n  /**\n   * If set to true, a device must be selected. Default is true.\n   */\n  @Input()\n  isRequired = true;\n\n  /**\n   * If set to false, unassigned devices will not be shown in the asset selector.\n   */\n  @Input()\n  showUnassigned: boolean;\n\n  /**\n   * If set to true, groups will be selectable in the asset selector.\n   */\n  @Input()\n  groupsSelectable: boolean;\n\n  /**\n   * For advanced usage, the whole asset-selector-component configuration can be passed.\n   */\n  @Input()\n  assetSelectorConfig: AssetSelectorOptions;\n\n  /**\n   * Defines the selected device.\n   */\n  @Input()\n  selectedDevice: IManagedObject;\n\n  /**\n   * Template for displaying device names with their IDs.\n   * @ignore\n   */\n  deviceWithIdTpl = gettext('Device {{ id }}');\n\n  /**\n   * @ignore\n   */\n  async ngOnInit(): Promise<void> {\n    if (this.widgetConfigService.currentConfig.device) {\n      try {\n        if (this.widgetConfigService.currentConfig.device.self) {\n          this.selectedDevice = this.widgetConfigService.currentConfig.device as IManagedObject;\n        } else {\n          this.selectedDevice = (\n            await this.inventoryService.detail(this.widgetConfigService.currentConfig.device.id)\n          ).data;\n        }\n      } catch (ex) {\n        // intended empty catch block to handle cases where the device might not be found\n        // error messages however will be displayed in the widget config feedback component\n      }\n    } else if (this.isRequired && !this.hasContext(this.widgetConfigService.currentConfig)) {\n      this.sectionComponent.section.expanded = true;\n    } else if (this.hasContext(this.widgetConfigService.currentConfig)) {\n      this.selectedDevice = this.widgetConfigService.currentConfig.settings?.context;\n    }\n\n    this.assetSelectorConfig = {\n      view: 'miller',\n      groupsSelectable:\n        this.groupsSelectable || this.widgetConfigService.currentConfig.settings?.groupsSelectable,\n      showChildDevices: true,\n      columnHeaders: true,\n      showUnassignedDevices: this.showUnassigned ?? true,\n      search: !this.widgetConfigService.currentConfig.settings?.context?.additionParents,\n      showFilter: true,\n      showSelected: false,\n      singleColumn: true,\n      label: '',\n      modelMode: 'full',\n      preventInitialSelect: true,\n      ...this.assetSelectorConfig\n    };\n  }\n\n  /**\n   * Returns true if a context is set.\n   * @param value The current configuration of the widget.\n   * @returns true if a context is set, false otherwise.\n   */\n  hasContext(value: ContextWidgetConfig): boolean {\n    return value?.settings?.context && Object.keys(value.settings.context).length > 0;\n  }\n\n  /**\n   * Update the configuration of the widget if the selection was changed.\n   * @param $event The change event of the selection.\n   */\n  selectionChanged($event: AssetSelectionChangeEvent): void {\n    if ($event.change.isSelected) {\n      this.updateConfig($event.change.item);\n    }\n  }\n\n  selectCurrentContext() {\n    this.selectedDevice = this.widgetConfigService.currentConfig.settings?.context;\n    this.updateConfig(this.selectedDevice);\n  }\n\n  updateConfig(device: IManagedObject) {\n    this.widgetConfigService.updateConfig({ device });\n  }\n}\n","<div class=\"card borderless\">\n  <div\n    class=\"card-block p-0 bg-inherit\"\n    style=\"height: 315px\"\n  >\n    @if (widgetConfigService.isDeviceTypeDashboard$ | async) {\n      <div class=\"alert alert-info m-4\">\n        <span translate>\n          This widget is used within a dashboard template, so the asset selector is unavailable. The\n          widget automatically inherits the asset from the context in which the dashboard is\n          displayed.\n        </span>\n\n        @if (!isRequired) {\n          <div class=\"p-t-8\">\n            <p translate>Asset selection is optional for this widget.</p>\n            @if (!selectedDevice) {\n              <button\n                class=\"btn btn-primary btn-sm m-t-8 text-truncate\"\n                (click)=\"selectCurrentContext()\"\n                ngNonBindable\n                translate\n                [translateParams]=\"{\n                  deviceName:\n                    (widgetConfigService.currentConfig$ | async)?.settings?.context?.name ||\n                    (deviceWithIdTpl\n                      | translate\n                        : {\n                            id: (widgetConfigService.currentConfig$ | async)?.settings?.context?.id\n                          })\n                }\"\n              >\n                Use context asset \"{{ deviceName }}\"\n              </button>\n            }\n            @if (selectedDevice) {\n              <button\n                class=\"btn btn-default btn-sm m-t-8 text-truncate\"\n                (click)=\"selectedDevice = null; updateConfig(null)\"\n                ngNonBindable\n                translate\n                [translateParams]=\"{\n                  deviceName:\n                    selectedDevice.name || (deviceWithIdTpl | translate: { id: selectedDevice.id })\n                }\"\n              >\n                Use without asset \"{{ deviceName }}\"\n              </button>\n            }\n          </div>\n        }\n      </div>\n    }\n    @if (!(widgetConfigService.isDeviceTypeDashboard$ | async) && assetSelectorConfig) {\n      <c8y-asset-selector-miller\n        class=\"d-block bg-inherit p-relative\"\n        name=\"configAsset\"\n        (onSelected)=\"selectionChanged($event)\"\n        [config]=\"assetSelectorConfig\"\n        [asset]=\"(widgetConfigService.currentConfig$ | async).settings?.context\"\n        [(ngModel)]=\"selectedDevice\"\n        [required]=\"isRequired\"\n      ></c8y-asset-selector-miller>\n    }\n\n    <c8y-widget-config-feedback>\n      <span\n        class=\"tag chip text-12 m-4\"\n        [ngClass]=\"{\n          'tag--info': selectedDevice || !isRequired,\n          'tag--danger': !selectedDevice && isRequired\n        }\"\n      >\n        @if (\n          selectedDevice &&\n          (!(widgetConfigService.isDeviceTypeDashboard$ | async) ||\n            (!isRequired && (widgetConfigService.isDeviceTypeDashboard$ | async)))\n        ) {\n          <button\n            class=\"btn-clean text-12 m-r-4\"\n            title=\"{{ 'Deselect' | translate }}\"\n            type=\"button\"\n            (click)=\"selectedDevice = null; updateConfig(null)\"\n          >\n            <i c8yIcon=\"times\"></i>\n          </button>\n        }\n        @if (selectedDevice) {\n          <span\n            class=\"text-truncate\"\n            title=\"{{\n              selectedDevice.name || (deviceWithIdTpl | translate: { id: selectedDevice.id })\n            }}\"\n          >\n            {{ selectedDevice.name || (deviceWithIdTpl | translate: { id: selectedDevice.id }) }}\n          </span>\n        }\n        @if (!selectedDevice) {\n          <span translate>No asset selected</span>\n        }\n      </span>\n    </c8y-widget-config-feedback>\n  </div>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { AfterViewInit, Component, inject, Input, ViewChild } from '@angular/core';\nimport {\n  DynamicComponentComponent,\n  DynamicComponentDefinition,\n  DynamicComponentModule\n} from '@c8y/ngx-components';\nimport { WidgetConfigService } from '../widget-config.service';\n\n@Component({\n  standalone: true,\n  imports: [AsyncPipe, DynamicComponentModule],\n  selector: 'c8y-widget-config-general',\n  templateUrl: './widget-config-general.component.html'\n})\nexport class WidgetConfigGeneralComponent implements AfterViewInit {\n  widgetConfigService = inject(WidgetConfigService);\n\n  @Input()\n  definition: DynamicComponentDefinition;\n\n  @ViewChild(DynamicComponentComponent)\n  dynamicComponent: DynamicComponentComponent;\n\n  ngAfterViewInit(): void {\n    if (this.dynamicComponent) {\n      this.widgetConfigService.selectedComponent$.next(this.dynamicComponent);\n      this.widgetConfigService.addOnBeforeSave(() => this.dynamicComponent.callLifeCycleHooks());\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.widgetConfigService.selectedComponent$.next(null);\n  }\n}\n","<c8y-dynamic-component\n  class=\"d-block p-l-16 p-r-16\"\n  [componentId]=\"definition.id\"\n  mode=\"config\"\n  [config]=\"widgetConfigService.assignedCurrentConfig$ | async\"\n></c8y-dynamic-component>\n","import { Injectable, TemplateRef } from '@angular/core';\nimport {\n  DynamicComponentComponent,\n  DynamicComponentDefinition,\n  isPromise,\n  sortByPriority\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  debounceTime,\n  from,\n  isObservable,\n  map,\n  merge as rxjsMerge,\n  mergeMap,\n  Observable,\n  of,\n  scan,\n  shareReplay,\n  Subject,\n  tap,\n  withLatestFrom\n} from 'rxjs';\nimport { merge } from 'lodash-es';\nimport { ContextWidgetConfig } from './context-dashboard.model';\nimport {\n  WidgetConfigSection,\n  WidgetConfigSectionDefinition\n} from './widget-config-hook/widget-config-hook.model';\nimport { WidgetConfigSectionService } from './widget-config-hook/widget-config-hook.service';\nimport { WidgetAssetSelectorComponent } from './widget-config/widget-asset-selector.component';\nimport { WidgetConfigGeneralComponent } from './widget-config/widget-config-general.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetConfigService {\n  private _currentConfig$ = new BehaviorSubject<ContextWidgetConfig>(null);\n  private _assignedCurrentConfig$ = new BehaviorSubject<ContextWidgetConfig>(null);\n  private _instanceId$ = new BehaviorSubject<string | null>(null);\n  private _isDeviceTypeDashboard$ = new BehaviorSubject<boolean>(false);\n\n  /**\n   * The unique identifier of the current widget instance.\n   */\n  instanceId$ = this._instanceId$.asObservable();\n\n  /**\n   * The preview of the currently selected widget. If `null` no preview is shown\n   * (except if the selected widget has no configuration).\n   */\n  preview$ = new BehaviorSubject<true | DynamicComponentDefinition | TemplateRef<any>>(null);\n\n  /**\n   * The currently selected widget definition.\n   */\n  selected$ = new BehaviorSubject<DynamicComponentDefinition>(null);\n\n  /**\n   * The currently selected widget component.\n   */\n  selectedComponent$ = new BehaviorSubject<DynamicComponentComponent>(null);\n\n  /**\n   * The current configuration of the selected widget.\n   * Only to read the value. Use `updateConfig` to update the configuration.\n   **/\n  get currentConfig() {\n    return this._currentConfig$.value;\n  }\n\n  /**\n   * Indicates if the selected widget is placed on a device type dashboard.\n   */\n  isDeviceTypeDashboard$ = this._isDeviceTypeDashboard$.asObservable();\n\n  /**\n   * The current configuration of the selected widget as observable.\n   * Only to read the value. Use `updateConfig` to update the configuration.\n   */\n  currentConfig$ = this._currentConfig$.asObservable();\n\n  /**\n   * An observable that does not emit on each change. Instead the changes are only assigned.\n   * This is used for legacy widgets that rely on mutating the config object.\n   *\n   * @deprecated Use `currentConfig$` instead.\n   */\n  assignedCurrentConfig$ = this._assignedCurrentConfig$.asObservable();\n\n  /**\n   * Returns all the current sections.\n   *\n   * A configuration section is a component that can be used to configure a widget.\n   * Sections should be added via the `hookWidgetConfig`.\n   */\n  currentSections$: Observable<WidgetConfigSection[]> = this.selected$.pipe(\n    tap(() => (this.beforeSaveCallbacks = [])),\n    withLatestFrom(this._currentConfig$),\n    mergeMap(([selectedWidget, config]) =>\n      selectedWidget === null\n        ? of([])\n        : this.widgetConfigSectionService.items$.pipe(\n            map(sections => [\n              ...this.getWidgetDefaultSections(selectedWidget, config),\n              ...sections.filter(section => section.widgetId === selectedWidget.id)\n            ])\n          )\n    ),\n    mergeMap((sections: WidgetConfigSectionDefinition[]) => {\n      if (sections.length === 0) {\n        return Promise.resolve([]);\n      }\n      return Promise.all(\n        sections.map(async section => ({\n          component: await section.loadComponent(),\n          label: section.label,\n          priority: section.priority || 0,\n          expanded: section.expanded || false,\n          initialState: section.initialState,\n          validators: section.validators || [],\n          validationErrors: section.validationErrors || {},\n          injector: section.injector,\n          providers: Array.isArray(section.providers)\n            ? section.providers\n            : section.providers\n              ? await section.providers()\n              : []\n        }))\n      );\n    }),\n    map(sections => sortByPriority(sections)),\n    shareReplay(1)\n  );\n\n  /**\n   * Returns a list of all unique providers used in the current sections.\n   */\n  providers$ = this.currentSections$.pipe(\n    map(sections => Array.from(new Set(sections.flatMap(section => section.providers || []))))\n  );\n\n  /**\n   * Indicates if the current selected widget has a configuration or not.\n   */\n  hasConfig$ = this.currentSections$.pipe(map(sections => sections.length > 0));\n\n  /**\n   * The view state of the preview. Can be one of:\n   * - `noPreview`: No preview is shown and an empty state is shown.\n   * - `configPreview`: The preview is shown with the view component of the selected widget.\n   * - `templatePreview`: The preview is shown with any template passed with setPreview method.\n   */\n  previewViewState$ = combineLatest([this.hasConfig$, this.preview$]).pipe(\n    map(([hasConfig, preview]) => {\n      if (preview === null && hasConfig) {\n        return 'noPreview';\n      } else if (preview instanceof TemplateRef) {\n        return 'templatePreview';\n      } else if (preview === true || !hasConfig) {\n        return 'configPreview';\n      }\n    })\n  );\n\n  private readonly STASH_CONFIG_DELAY = 300;\n  private configChange$ = new Subject<ContextWidgetConfig>();\n  private configChangeReset$ = new Subject<void>();\n\n  private beforeSaveCallbacks: ((\n    config?: ContextWidgetConfig\n  ) => boolean | Promise<boolean> | Observable<boolean>)[] = [];\n\n  constructor(private widgetConfigSectionService: WidgetConfigSectionService) {\n    const add = value => state => ({ ...state, ...value });\n    const clear = () => _state => ({});\n    rxjsMerge(this.configChange$.pipe(map(add)), this.configChangeReset$.pipe(map(clear)))\n      .pipe(\n        scan((state, innerFn) => innerFn(state), {}),\n        debounceTime(this.STASH_CONFIG_DELAY)\n      )\n      .subscribe(config => {\n        if (!this._currentConfig$.value) {\n          return;\n        }\n\n        this._currentConfig$.next({ ...this._currentConfig$.value, ...config });\n\n        if (!this._assignedCurrentConfig$.value) {\n          return;\n        }\n        Object.assign(this._assignedCurrentConfig$.value, config);\n        if (this.selectedComponent$.value) {\n          this.selectedComponent$.value.emitConfigChange(this._currentConfig$.value);\n        }\n      });\n  }\n\n  /**\n   * Use this function to get a typed configuration of the selected widget.\n   * @returns The current configuration of the selected widget or an empty object if no config is defined.\n   */\n  getWidgetConfig<T>(): Observable<T> {\n    return this.currentConfig$.pipe(\n      map(current => {\n        return (current.config || {}) as T;\n      })\n    );\n  }\n\n  /**\n   * Adds a callback which can check the configuration before saving.\n   */\n  addOnBeforeSave(\n    callback: (config?: ContextWidgetConfig) => boolean | Promise<boolean> | Observable<boolean>\n  ) {\n    this.beforeSaveCallbacks.push(callback);\n  }\n\n  /**\n   * Returns true if the configuration can be saved.\n   */\n  canSave(): Promise<boolean> {\n    if (this.beforeSaveCallbacks.length === 0) {\n      return Promise.resolve(true);\n    }\n    const config = this._currentConfig$.value;\n    return combineLatest(\n      this.beforeSaveCallbacks.map(cb => {\n        const result = cb(config);\n        if (isObservable(result)) {\n          return result;\n        }\n        if (isPromise(result)) {\n          return from(result);\n        }\n        return of(result);\n      })\n    )\n      .pipe(map(results => results.every(result => result === true)))\n      .toPromise();\n  }\n\n  /**\n   * Updates the configuration of the selected widget.\n   * @param change The change to apply to the configuration.\n   * @param force If set to true, the configuration will be updated even if no changes are made.\n   *              Also concurrency checks are ignored and no change is emitted on the component.\n   *              Use with caution and only if you want to reset the configuration to some default.\n   */\n  updateConfig(change: Partial<ContextWidgetConfig>, force = false) {\n    if (force) {\n      this._currentConfig$.next({ ...this._currentConfig$.value, ...change });\n      merge(this._assignedCurrentConfig$.value, change);\n      return;\n    }\n    this.configChange$.next(change);\n  }\n\n  /**\n   * Used to initialize the configuration of the selected widget.\n   * @param config The configuration to set.\n   */\n  initConfig(config: ContextWidgetConfig) {\n    // isGlobalContextReady is a transient runtime flag set by the global context section,\n    // not a persisted config value. Strip it so the initial emission doesn't bypass\n    // readiness gates before the global context section has initialized.\n    delete config.isGlobalContextReady;\n\n    this._currentConfig$.next(config);\n    this._assignedCurrentConfig$.next(config);\n  }\n\n  /**\n   * Select a widget\n   * @param selected The widget to select.\n   * @param identifier An optional unique identifier for the widget instance. Only used if the widget is not new.\n   * @param isDeviceTypeDashboard Indicates if the selected widget is placed on a device-type dashboard. This is used to determine if the default asset selector should be shown.\n   */\n  selectWidget(\n    selected: DynamicComponentDefinition,\n    identifier: string = null,\n    isDeviceTypeDashboard = false\n  ) {\n    this.selected$.next(selected);\n    this._instanceId$.next(identifier);\n    this._isDeviceTypeDashboard$.next(isDeviceTypeDashboard);\n  }\n\n  /**\n   * Deselect the currently selected.\n   */\n  deselectWidget() {\n    this.selected$.next(null);\n    this.preview$.next(null);\n    this.configChangeReset$.next();\n    this._currentConfig$.next(null);\n    this._assignedCurrentConfig$.next(null);\n    this._instanceId$.next(null);\n  }\n\n  /**\n   * Enables a preview.\n   * @param preview If set to true, the view component of the current widget will be taken to render the preview.\n   * If set to a DynamicComponentDefinition, the preview will be rendered with the given component.\n   * If set to a TemplateRef, the preview will be rendered with the given template.\n   */\n  setPreview(preview: true | DynamicComponentDefinition | TemplateRef<any>) {\n    this.preview$.next(preview);\n  }\n\n  /**\n   * By default, no sections are added to the configuration. But to ensure\n   * backwards compatibility with old plugins, we check if the default asset selector\n   * and config section should be shown.\n   * @param selectedWidget The currently selected widget.\n   * @param config The used widget configuration.\n   * @returns The default sections.\n   */\n  private getWidgetDefaultSections(\n    selectedWidget: DynamicComponentDefinition,\n    config: ContextWidgetConfig\n  ): WidgetConfigSectionDefinition[] {\n    const defaultWidgetConfigSections = [];\n    if (this.isDefaultSettingSectionNeeded(selectedWidget)) {\n      defaultWidgetConfigSections.push({\n        widgetId: selectedWidget.id,\n        label: gettext('Settings'),\n        loadComponent: () => Promise.resolve(WidgetConfigGeneralComponent),\n        initialState: {\n          definition: selectedWidget\n        },\n        priority: 0,\n        expanded: true\n      });\n    }\n    // Adds a default device selector for old plugins\n    if (this.isDefaultDeviceSelectorNeeded(selectedWidget, config)) {\n      defaultWidgetConfigSections.push({\n        widgetId: selectedWidget.id,\n        label: gettext('Asset selection'),\n        loadComponent: () => Promise.resolve(WidgetAssetSelectorComponent),\n        priority: 100,\n        initialState: {\n          isRequired:\n            !config.settings?.ng1?.options?.deviceTargetNotRequired &&\n            !config.settings.deviceTargetNotRequired\n        }\n      });\n    }\n\n    return defaultWidgetConfigSections;\n  }\n\n  /**\n   * Sections should not be added by default anymore. But to ensure backwards compatibility, we\n   * check if the default selector should be shown. We assume that a default selector will be shown\n   * when:\n   * 1. The widget has a dynamic component for configuration (which is also deprecated).\n   * OR\n   * 2. The widget has not disabled the default selector.\n   */\n  private isDefaultDeviceSelectorNeeded(\n    selectedWidget: DynamicComponentDefinition,\n    config: ContextWidgetConfig\n  ): boolean {\n    if (!selectedWidget.loadConfigComponent && !selectedWidget.configComponent) {\n      return false;\n    }\n    return !config.settings?.noDeviceTarget && !config.settings?.ng1?.options?.noDeviceTarget;\n  }\n\n  /**\n   * Checks if a default setting section is needed.\n   * @param selectedWidget The currently selected widget.\n   * @returns true if one is needed.\n   */\n  private isDefaultSettingSectionNeeded(selectedWidget: DynamicComponentDefinition) {\n    if (selectedWidget.data?.settings?.upgrade) {\n      return (\n        selectedWidget.data?.settings?.configComponent ||\n        selectedWidget.data?.settings?.configTemplateUrl\n      );\n    }\n    return selectedWidget.configComponent || selectedWidget.loadConfigComponent;\n  }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from '../context-dashboard.model';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { FormsModule } from '@angular/forms';\nimport { NgForOf, NgIf } from '@angular/common';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n@Component({\n  selector: 'c8y-appearance-settings',\n  templateUrl: './appearance-settings.component.html',\n  standalone: true,\n  imports: [NgIf, NgForOf, FormsModule, PopoverModule, C8yTranslatePipe]\n})\nexport class AppearanceSettingsComponent {\n  @Input()\n  themeClass = 'dashboard-theme-light';\n  @Input()\n  headerClass = 'panel-title-regular';\n  @Input()\n  defaultThemeClass: string;\n  @Input()\n  defaultHeaderClass: string;\n  @Input()\n  dashboardSettings: boolean;\n  @Output()\n  themeClassChange = new EventEmitter<string>();\n  @Output()\n  headerClassChange = new EventEmitter<string>();\n\n  @Output()\n  onChange = new EventEmitter<void>();\n\n  @Input()\n  possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n  @Input()\n  possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n  @Input()\n  columns: 1 | 3 = 1;\n\n  dashboardDefaultLabel = gettext('Dashboard default');\n\n  themeClassClick(value) {\n    value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n    this.themeClass = value;\n    this.themeClassChange.emit(value);\n    this.onChange.emit();\n  }\n\n  headerClassClick(value) {\n    value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n    this.headerClass = value;\n    this.headerClassChange.emit(value);\n    this.onChange.emit();\n  }\n\n  private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n    if (defaultValue && value === compareTo) {\n      value = defaultValue;\n    }\n    return value;\n  }\n}\n","<div class=\"row\">\n  <div class=\"col-lg-{{ 12 / columns }} col-xs-12\">\n    <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n      <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n      <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n      <ul class=\"list-group\">\n        <li\n          class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n          *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n        >\n          <div\n            class=\"list-item-checkbox\"\n            style=\"max-width: calc(100% - 24px)\"\n          >\n            <label class=\"c8y-radio\">\n              <input\n                name=\"content\"\n                type=\"radio\"\n                [id]=\"'groupradiocontentclass' + i\"\n                [value]=\"themeClassItem.class\"\n                [ngModel]=\"themeClass\"\n                (click)=\"themeClassClick(themeClassItem.class)\"\n              />\n              <span></span>\n              <span\n                class=\"text-truncate\"\n                title=\"{{ themeClassItem.label | translate }}{{\n                  themeClassItem.class === defaultThemeClass\n                    ? ' | ' + (dashboardDefaultLabel | translate)\n                    : ''\n                }}\"\n              >\n                <span>{{ themeClassItem.label | translate }}</span>\n                <br />\n                <small\n                  class=\"text-muted\"\n                  *ngIf=\"themeClassItem.class === defaultThemeClass\"\n                >\n                  {{ dashboardDefaultLabel | translate }}\n                </small>\n              </span>\n            </label>\n          </div>\n\n          <button\n            class=\"btn-help btn-help--sm m-l-auto\"\n            [attr.aria-label]=\"'Help' | translate\"\n            popover=\"{{ themeClassItem.description | translate }}\"\n            placement=\"right\"\n            triggers=\"focus\"\n            container=\"body\"\n            type=\"button\"\n          ></button>\n        </li>\n      </ul>\n    </fieldset>\n  </div>\n  <div class=\"col-lg-{{ 12 / columns }} col-xs-12\">\n    <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n      <legend *ngIf=\"dashboardSettings\">\n        {{ 'Default widget header style' | translate }}\n      </legend>\n      <legend *ngIf=\"!dashboardSettings\">\n        {{ 'Widget header style' | translate }}\n      </legend>\n      <ul class=\"list-group\">\n        <li\n          class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n          *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n        >\n          <div\n            class=\"list-item-checkbox\"\n            style=\"max-width: calc(100% - 24px)\"\n          >\n            <label class=\"c8y-radio\">\n              <input\n                name=\"header\"\n                type=\"radio\"\n                [id]=\"'groupradioheaderclass' + i\"\n                [value]=\"headerClassItem.class\"\n                [ngModel]=\"headerClass\"\n                (click)=\"headerClassClick(headerClassItem.class)\"\n              />\n              <span></span>\n              <span\n                class=\"text-truncate\"\n                title=\"{{ headerClassItem.label | translate }}{{\n                  headerClassItem.class === defaultHeaderClass\n                    ? ' | ' + (dashboardDefaultLabel | translate)\n                    : ''\n                }}\"\n              >\n                <span>{{ headerClassItem.label | translate }}</span>\n                <br />\n                <small\n                  class=\"text-muted\"\n                  *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n                >\n                  {{ dashboardDefaultLabel | translate }}\n                </small>\n              </span>\n            </label>\n          </div>\n          <button\n            class=\"btn-help btn-help--sm m-l-auto\"\n            [attr.aria-label]=\"'Help' | translate\"\n            popover=\"{{ headerClassItem.description | translate }}\"\n            placement=\"right\"\n            triggers=\"focus\"\n            container=\"body\"\n            type=\"button\"\n          ></button>\n        </li>\n      </ul>\n    </fieldset>\n  </div>\n  <ng-content></ng-content>\n</div>\n","import { AsyncPipe, NgFor } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { WidgetConfigSectionComponent } from './widget-config-section.component';\nimport { WidgetConfigService } from '../widget-config.service';\n\n@Component({\n  standalone: true,\n  imports: [NgFor, WidgetConfigSectionComponent, AsyncPipe],\n  selector: 'c8y-widget-config-root',\n  templateUrl: './widget-config-root.component.html'\n})\nexport class WidgetConfigRootComponent {\n  widgetConfigService = inject(WidgetConfigService);\n}\n","<ng-container\n  *ngFor=\"let section of widgetConfigService.currentSections$ | async\"\n>\n  <c8y-widget-config-section [section]=\"section\"></c8y-widget-config-section>\n</ng-container>\n","import { CommonModule, NgClass } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { C8yTranslatePipe, CoreModule } from '@c8y/ngx-components';\nimport { WidgetConfigService } from '../widget-config.service';\nimport { WidgetConfigComponent } from '../widget-config.component';\n\n@Component({\n  selector: 'c8y-widget-preview',\n  templateUrl: './widget-preview.component.html',\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe, CommonModule, CoreModule]\n})\nexport class WidgetPreviewComponent {\n  widgetConfigService = inject(WidgetConfigService);\n  widgetConfig = inject(WidgetConfigComponent);\n\n  @Input()\n  previewClasses: { [key: string]: boolean } = {\n    'dashboard-theme-light': true,\n    'panel-title-regular': true\n  };\n\n  get translateWidgetTitle(): boolean {\n    return this.widgetConfig?.mo.c8y_Dashboard.translateWidgetTitle ?? false;\n  }\n}\n","<fieldset class=\"c8y-fieldset p-l-24 p-r-24 p-t-16 p-b-16\">\n  <legend>{{ 'Preview' | translate }}</legend>\n  <c8y-dashboard\n    class=\"dashboard-preview-slot\"\n    [columns]=\"1\"\n    [ngClass]=\"previewClasses\"\n  >\n    <c8y-dashboard-child\n      [isFrozen]=\"true\"\n      [width]=\"1\"\n      [height]=\"6\"\n    >\n      <c8y-dashboard-child-title>\n        <span>\n          {{\n            (widgetConfigService.selected$ | async)?.data?.title\n              | translate: { noTranslateRemoveContext: !translateWidgetTitle }\n          }}\n        </span>\n      </c8y-dashboard-child-title>\n\n      @if ((widgetConfigService.previewViewState$ | async) === 'noPreview') {\n        <div class=\"fit-h d-flex d-col j-c-center a-i-center\">\n          <c8y-ui-empty-state\n            [icon]=\"'visibility-off'\"\n            [title]=\"'No preview available.' | translate\"\n            [subtitle]=\"'This widget does not provide any preview.' | translate\"\n            [horizontal]=\"false\"\n          ></c8y-ui-empty-state>\n        </div>\n      }\n\n      @if ((widgetConfigService.previewViewState$ | async) === 'configPreview') {\n        <c8y-dynamic-component\n          [componentId]=\"(widgetConfigService.selected$ | async)?.id\"\n          [config]=\"(widgetConfigService.currentConfig$ | async)?.config\"\n        ></c8y-dynamic-component>\n      }\n\n      @if ((widgetConfigService.previewViewState$ | async) === 'templatePreview') {\n        <ng-template [ngTemplateOutlet]=\"widgetConfigService.preview$ | async\"></ng-template>\n      }\n    </c8y-dashboard-child>\n  </c8y-dashboard>\n</fieldset>\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { sortBy, cloneDeep, get, omit } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetService {\n  widgets: DynamicComponentDefinition[];\n\n  constructor(\n    private dynamicComponentService: DynamicComponentService,\n    private translateService: TranslateService,\n    @Optional()\n    @Inject(CONTEXT_DASHBOARD_CONFIG)\n    public moduleConfig: ContextDashboardConfig | undefined\n  ) {\n    this.dynamicComponentService.items$.subscribe(widgets => {\n      this.widgets = widgets;\n    });\n  }\n\n  async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n    return this.dynamicComponentService.getById(componentId);\n  }\n\n  getWidgetDefinitions() {\n    const translatedComponents = this.widgets.map(cmp => ({\n      ...cmp,\n      label: this.translateService.instant(cmp.label)\n    }));\n\n    // cloneDeep and injector lead to a performance issue. We removing the injectors here,\n    // as they are not needed, to avoid use of a lot of CPU for cloning.\n    const translatedComponentsWithoutInjector = translatedComponents.map(cmp =>\n      omit(cmp, 'injector')\n    );\n    const filterFn: (component: DynamicComponentDefinition) => boolean =\n      this.moduleConfig?.widgetFilter ||\n      (({ data }) => !(data && data.settings && data.settings.noNewWidgets));\n    return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));\n  }\n\n  async mapLegacy(widget: Partial<Widget>): Promise<Widget> {\n    const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);\n    widget = this.mapDisplaySettings(widget, cmp);\n\n    if (get(cmp, 'data.settings.upgrade')) {\n      widget.widgetComponent = cmp.data.settings.widgetComponent;\n      widget.configComponent = cmp.data.settings.configComponent;\n      widget.templateUrl = cmp.data.settings.templateUrl;\n      widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n      widget.transformConfigWithContext =\n        cmp.data.settings.componentTransformConfigWithContext ||\n        cmp.data.settings.transformConfigWithContext ||\n        widget.transformConfigWithContext;\n    } else {\n      delete widget.templateUrl;\n      delete widget.configTemplateUrl;\n    }\n    return widget as Widget;\n  }\n\n  private mapDisplaySettings(\n    widget: Partial<Widget>,\n    cmp: DynamicComponentDefinition\n  ): Partial<Widget> {\n    if (cmp?.data?.displaySettings) {\n      widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };\n    }\n    return widget;\n  }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostListener,\n  OnDestroy,\n  ViewChild\n} from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport {\n  BottomDrawerRef,\n  BottomDrawerService,\n  C8yComponentOutlet,\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  DynamicComponentDefinition,\n  EmptyStateComponent,\n  FormGroupComponent,\n  HighlightComponent,\n  IconDirective,\n  ProductExperienceDirective,\n  RequiredInputPlaceholderDirective,\n  ResizableGridComponent,\n  Widget,\n  WIDGET_CONFIGURATION_GRID_SIZE\n} from '@c8y/ngx-components';\nimport { clone, cloneDeep, escapeRegExp, get, isNull, omit } from 'lodash-es';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n  ContextDashboardManagedObject,\n  ContextWidgetConfig,\n  WIDGET_CONTENT_CLASSES,\n  WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { WidgetConfigService } from './widget-config.service';\nimport { AppearanceSettingsComponent } from './widget-config/appearance-settings.component';\nimport { WidgetConfigRootComponent } from './widget-config/widget-config-root.component';\nimport { WidgetPreviewComponent } from './widget-config/widget-preview.component';\nimport { WidgetService } from './widget.service';\n\n@Component({\n  selector: 'c8y-widget-config',\n  templateUrl: './widget-config.component.html',\n  host: { class: 'd-contents' },\n  imports: [\n    FormsModule,\n    IconDirective,\n    C8yTranslateDirective,\n    HighlightComponent,\n    EmptyStateComponent,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    C8yComponentOutlet,\n    WidgetPreviewComponent,\n    AppearanceSettingsComponent,\n    ProductExperienceDirective,\n    C8yTranslatePipe,\n    AsyncPipe,\n    ResizableGridComponent\n  ],\n  standalone: true\n})\nexport class WidgetConfigComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n  searchResult: DynamicComponentDefinition[];\n  components: DynamicComponentDefinition[];\n  selected: DynamicComponentDefinition;\n  searchChange$ = new Subject();\n  searchTerm = '';\n  context: any;\n  componentLabel: string;\n  widgetTitle: string;\n  mo: ContextDashboardManagedObject;\n  identifier = crypto.randomUUID();\n  styling = {\n    headerClass: 'panel-title-regular',\n    contentClass: 'panel-content-light'\n  };\n  defaultStyling = {\n    headerClass: 'panel-title-regular',\n    contentClass: 'panel-content-light'\n  };\n  current: any;\n  widgetConfig: ContextWidgetConfig;\n  isUpgrade = false;\n  possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n  WIDGET_CONFIGURATION_GRID_SIZE = WIDGET_CONFIGURATION_GRID_SIZE;\n\n  @ViewChild('searchInput', { static: false })\n  searchInput?: ElementRef<HTMLInputElement>;\n\n  @ViewChild('configForm', { static: false })\n  configForm: NgForm;\n\n  /**\n   * Used as wrapper component to inject providers.\n   */\n  widgetConfigRoot = WidgetConfigRootComponent;\n\n  get isEdit() {\n    return !!this.current;\n  }\n\n  get isDeviceTypeDashboard(): boolean {\n    return !!this.mo.c8y_Dashboard?.deviceType && !!this.mo.c8y_Dashboard?.deviceTypeValue;\n  }\n\n  result: Promise<Widget> = new Promise((resolve, reject) => {\n    this._save = resolve;\n    this._cancel = reject;\n  });\n\n  private searchSub: Subscription;\n  private _save: (value: Widget) => void;\n  private _cancel: (reason?: any) => void;\n\n  constructor(\n    private widgetService: WidgetService,\n    private bottomDrawerRef: BottomDrawerRef<WidgetConfigComponent>,\n    public contextDashboardService: ContextDashboardService,\n    public widgetConfigService: WidgetConfigService,\n    private drawerService: BottomDrawerService,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  @HostListener('document:keydown.escape', ['$event'])\n  async onEscapePress(event: Event) {\n    if (this.drawerService.isTop(this.bottomDrawerRef)) {\n      event.preventDefault();\n      await this.close();\n    }\n  }\n\n  async ngAfterContentInit(): Promise<void> {\n    this.components = this.widgetService.getWidgetDefinitions();\n\n    if (this.selected) {\n      this.current = clone(this.selected);\n      this.select(this.selected, this.isEdit ? 'config' : 'select');\n    }\n\n    this.searchSub = this.searchChange$\n      .pipe(\n        switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n      )\n      .subscribe(() => {\n        this.search();\n      });\n\n    this.setStylings();\n  }\n\n  ngAfterViewInit() {\n    this.focusSearchInput();\n  }\n\n  focusSearchInput() {\n    this.cdr.detectChanges();\n    if (this.searchInput) {\n      this.searchInput.nativeElement.focus();\n    }\n  }\n\n  isSaveDisabled(): boolean {\n    // If new section concept, the widget settings cannot be used to disable the device target.\n    // Use the WidgetConfigAssetTargetComponent instead with the initialState set to isRequired.\n    const isNewSectionConcept =\n      !this.selected?.loadConfigComponent && !this.selected?.configComponent;\n\n    return this.configForm?.invalid || (!isNewSectionConcept && this.checkIfDeviceRequired());\n  }\n\n  checkIfDeviceRequired() {\n    const widgetConfig = this.widgetConfigService.currentConfig;\n    return (\n      !widgetConfig ||\n      (!widgetConfig.settings?.deviceTargetNotRequired &&\n        !widgetConfig.device &&\n        !widgetConfig.settings?.noDeviceTarget)\n    );\n  }\n\n  async save() {\n    const canSave = await this.widgetConfigService.canSave();\n    if (!canSave) {\n      return;\n    }\n\n    const { _x, _y, _width, _height } = this.selected.data;\n\n    if (\n      this.widgetConfig &&\n      this.widgetConfig.device &&\n      // serializing will be handled by resolver\n      !this.selected?.resolve?.device\n    ) {\n      const { id, name } = this.widgetConfig.device;\n      this.widgetConfig.device = { id, name };\n    }\n\n    this.widgetConfig = {\n      ...this.widgetConfigService.currentConfig,\n      ...this.widgetConfig\n    };\n\n    const widget = {\n      _x,\n      _y,\n      _width,\n      _height,\n      config: omit(this.widgetConfig, ['settings', 'displaySettings']),\n      title: this.widgetTitle,\n      componentId: this.selected.id,\n      id: this.isEdit ? this.current.data.id : this.identifier,\n      classes: this.getStyle(),\n      ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n    } as Widget;\n    this._save(widget);\n    await this.bottomDrawerRef.close();\n    this.widgetConfigService.deselectWidget();\n  }\n\n  select(cmp, mode: 'select' | 'config' = 'config') {\n    if (mode === 'config' && this.configForm) {\n      const formGroup = this.configForm.control;\n      for (const control of Object.keys(formGroup.controls)) {\n        formGroup.removeControl(control);\n      }\n    }\n\n    cmp.data = cmp.data || {};\n    this.selected = cmp;\n\n    this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n    this.contextDashboardService.formDisabled = this.isUpgrade;\n    if (this.isEdit) {\n      const { id, _x, _y, _width, _height, classes, title } = this.current.data;\n      this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n      this.identifier = id;\n    }\n\n    this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n    this.selected.data.title = this.selected.data.title || cmp.label;\n    this.componentLabel = cmp.label;\n    this.widgetTitle = isNull(this.widgetTitle) ? cmp.label : this.selected.data.title;\n\n    this.widgetConfigService.initConfig(this.widgetConfig);\n    this.widgetConfigService.selectWidget(\n      this.selected,\n      this.identifier,\n      this.isDeviceTypeDashboard\n    );\n  }\n\n  search() {\n    if (this.searchTerm.length > 0) {\n      this.searchResult = this.components.filter(cmp =>\n        new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n      );\n    } else {\n      this.resetSearch();\n    }\n  }\n\n  resetSearch() {\n    this.searchTerm = '';\n    this.searchResult = undefined;\n  }\n\n  backToWidgetSelection() {\n    this.selected = null;\n    this.widgetTitle = null;\n    this.widgetConfigService.deselectWidget();\n    this.focusSearchInput();\n  }\n\n  onWidgetTitleChange(newTitle: string) {\n    if (this.selected?.data) {\n      this.selected.data.title = newTitle;\n    }\n  }\n\n  async close() {\n    this._cancel();\n    await this.bottomDrawerRef.close();\n    this.widgetConfigService.deselectWidget();\n  }\n\n  getStyle(isPreview = false) {\n    const cssClasses = {};\n    if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n      cssClasses[this.styling.headerClass] = true;\n    }\n\n    if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n      cssClasses[this.styling.contentClass] = true;\n    }\n\n    if (isPreview) {\n      cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n    }\n\n    return cssClasses;\n  }\n\n  ngOnDestroy(): void {\n    this.contextDashboardService.formDisabled = true;\n    if (this.searchSub) {\n      this.searchSub.unsubscribe();\n    }\n  }\n\n  private setStylings(): void {\n    const dashboardClasses: string[] =\n      (this.mo.c8y_Dashboard?.classes && Object.keys(this.mo.c8y_Dashboard.classes)) || [];\n    const dashboardWidgetClasses: string[] =\n      (this.mo.c8y_Dashboard?.widgetClasses && Object.keys(this.mo.c8y_Dashboard.widgetClasses)) ||\n      [];\n    const widgetClasses: string[] = this.isEdit ? Object.keys(this.current.data.classes) : [];\n\n    this.styling = this.setDefaultStyle([\n      ...dashboardClasses,\n      ...dashboardWidgetClasses,\n      ...widgetClasses\n    ]);\n    this.defaultStyling = this.setDefaultStyle([...dashboardClasses, ...dashboardWidgetClasses]);\n  }\n\n  private isDashboardDefaultStyle(className) {\n    const allClasses = {\n      ...this.mo.c8y_Dashboard.classes,\n      ...this.mo.c8y_Dashboard.widgetClasses\n    };\n    const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n    const style = this.contextDashboardService.getStyling(\n      styles,\n      className.split('-').pop(),\n      undefined\n    );\n    return !!style;\n  }\n\n  private setDefaultStyle(setClasses: string[]) {\n    let contentClass = this.styling.contentClass;\n    let headerClass = this.styling.headerClass;\n    const styles = this.contextDashboardService\n      .getFilteredDashboardStyles(setClasses)\n      .map(c => c.split('-').pop());\n    styles.forEach(styleName => {\n      contentClass = this.contextDashboardService.getStyling(\n        WIDGET_CONTENT_CLASSES,\n        styleName,\n        contentClass\n      );\n      headerClass = this.contextDashboardService.getStyling(\n        WIDGET_HEADER_CLASSES,\n        styleName,\n        headerClass\n      );\n    });\n\n    return { headerClass, contentClass };\n  }\n\n  private composeWidgetConfig(selectedComponent, context = {}) {\n    const setting = {\n      settings: {\n        ...selectedComponent.data.settings,\n        ...get(selectedComponent.data.settings, 'ng1.options'),\n        ...get(selectedComponent.data, 'ng1.options'),\n        context,\n        dashboardMo: this.mo.c8y_Dashboard\n      },\n      ...selectedComponent.data.config\n    } as ContextWidgetConfig;\n    return this.applyTargetIfDeviceDashboard(setting);\n  }\n\n  private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n    const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n    const noDeviceTarget = widgetConfig.settings.ng1\n      ? widgetConfig.settings.ng1.options.noDeviceTarget\n      : widgetConfig.settings.noDeviceTarget;\n\n    const needsTargetAndIsDeviceType = isDeviceType && !noDeviceTarget && widgetConfig.device;\n    const isNewWidgetWithContext = !this.isEdit && this.context?.id && !noDeviceTarget;\n\n    if (needsTargetAndIsDeviceType || isNewWidgetWithContext) {\n      widgetConfig.device = {\n        id: this.context.id,\n        name: this.context.name\n      };\n    }\n    return widgetConfig;\n  }\n}\n","<!-- select widget -->\n@if (!(widgetConfigService.selected$ | async)) {\n  <div class=\"card-header j-c-center separator\">\n    <div\n      class=\"h4 text-center\"\n      id=\"drawerTitle\"\n    >\n      {{ 'Select widget' | translate }}\n    </div>\n  </div>\n  <div class=\"card-inner-scroll fit-h bg-level-2\">\n    <div\n      class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n      style=\"z-index: 2\"\n    >\n      <div class=\"row\">\n        <div class=\"col-sm-6 col-sm-offset-3\">\n          <div class=\"input-group input-group-search\">\n            <input\n              class=\"form-control\"\n              [attr.aria-label]=\"'Search' | translate\"\n              placeholder=\"{{ 'Search…' | translate }}\"\n              type=\"text\"\n              #searchInput\n              data-cy=\"widget-config--Search\"\n              [(ngModel)]=\"searchTerm\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              (keydown)=\"searchChange$.next($event)\"\n            />\n            <span class=\"input-group-btn\">\n              <button\n                class=\"btn btn-dot\"\n                title=\"{{ 'Search' | translate }}\"\n                type=\"button\"\n                (click)=\"resetSearch()\"\n              >\n                <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n              </button>\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"card-block\">\n      <div class=\"card-group p-l-24 p-r-24 d-grid grid__col--auto-300 gap-24 card-select m-b-0\">\n        @for (cmp of searchResult || components; track cmp) {\n          <button\n            class=\"btn-clean d-col card m-b-0\"\n            [title]=\"cmp.description || cmp.label | translate\"\n            type=\"button\"\n            data-cy=\"widget-config--widget-list\"\n            (click)=\"select(cmp)\"\n          >\n            <div\n              class=\"border-bottom\"\n              role=\"presentation\"\n            >\n              @if (!cmp.previewImage) {\n                <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n                <small translate>Preview not available</small>\n              } @else {\n                <img\n                  class=\"widget-thumbnail\"\n                  alt=\"{{ cmp.label | translate }}\"\n                  [src]=\"cmp.previewImage\"\n                />\n              }\n            </div>\n            <div class=\"card-block\">\n              <p class=\"card-title text-truncate text-medium\">\n                <c8y-highlight\n                  text=\"{{ cmp.label | translate }}\"\n                  [pattern]=\"searchTerm\"\n                ></c8y-highlight>\n              </p>\n              <p\n                class=\"small text-default\"\n                style=\"white-space: wrap\"\n              >\n                {{ cmp.description | translate }}\n              </p>\n            </div>\n          </button>\n        }\n        @if (searchResult && searchResult.length === 0) {\n          <c8y-ui-empty-state\n            class=\"p-24 grid__col--fullspan\"\n            [icon]=\"'search'\"\n            [title]=\"'No widgets found.' | translate\"\n            [subtitle]=\"'Rephrase your search term.' | translate\"\n          >\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Reset search' | translate }}\"\n              type=\"button\"\n              (click)=\"resetSearch()\"\n            >\n              {{ 'Reset search' | translate }}\n            </button>\n          </c8y-ui-empty-state>\n        }\n      </div>\n    </div>\n  </div>\n  <div class=\"card-footer text-center separator flex-no-shrink\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      data-cy=\"widget-config--cancel-widget\"\n      (click)=\"close()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n  </div>\n}\n\n<!-- widget configuration -->\n@if (!!(widgetConfigService.selected$ | async)) {\n  <div class=\"card-header d-block separator-bottom flex-no-shrink\">\n    <div\n      class=\"h3 p-t-16\"\n      title=\"{{ selected?.label | translate }}\"\n    >\n      <span>{{ selected?.label | translate }}</span>\n      <button\n        class=\"btn btn-default btn-sm m-l-8\"\n        [title]=\"'Change widget' | translate\"\n        (click)=\"backToWidgetSelection(); (false)\"\n      >\n        <i c8yIcon=\"replace\"></i>\n        {{ 'Change widget' | translate }}\n      </button>\n    </div>\n    @if (selected) {\n      <div class=\"p-t-8\">\n        <p>\n          {{ selected.description | translate }}\n        </p>\n      </div>\n    }\n  </div>\n\n  <c8y-resizable-grid\n    class=\"min-height-0 flex-grow\"\n    [collapsible]=\"false\"\n    [trackId]=\"'c8y-widget-resizable-grid-size-' + (widgetConfigService.instanceId$ | async)\"\n    [leftColumnWidth]=\"\n      (widgetConfigService.currentConfig$ | async)?.settings?.configurationViewGridSize ||\n      WIDGET_CONFIGURATION_GRID_SIZE.HALF\n    \"\n  >\n    <div\n      class=\"bg-level-1 inner-scroll\"\n      left-pane\n    >\n      <div class=\"p-16 flex-no-shrink separator-bottom bg-level-1\">\n        <c8y-form-group>\n          <label\n            for=\"widgetTitle\"\n            translate\n          >\n            Widget title\n          </label>\n          <input\n            class=\"form-control\"\n            id=\"widgetTitle\"\n            placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n            name=\"widgetTitle\"\n            type=\"text\"\n            required\n            [(ngModel)]=\"widgetTitle\"\n            (ngModelChange)=\"onWidgetTitleChange($event)\"\n          />\n        </c8y-form-group>\n      </div>\n\n      @if (!(widgetConfigService.hasConfig$ | async)) {\n        <c8y-ui-empty-state\n          class=\"p-24\"\n          [icon]=\"'settings'\"\n          [title]=\"'No configuration needed.' | translate\"\n          [subtitle]=\"'This widget does not need any specific configuration.' | translate\"\n          [horizontal]=\"true\"\n        ></c8y-ui-empty-state>\n      }\n      <div>\n        <form\n          name=\"form\"\n          #configForm=\"ngForm\"\n        >\n          @if (widgetConfigService.hasConfig$ | async) {\n            @if (widgetConfigService.providers$ | async; as providers) {\n              <ng-container\n                *c8yComponentOutlet=\"widgetConfigRoot; providers: providers\"\n              ></ng-container>\n            }\n          }\n        </form>\n      </div>\n    </div>\n\n    <div\n      class=\"inner-scroll p-32 p-t-0\"\n      right-pane\n    >\n      <c8y-widget-preview [previewClasses]=\"getStyle(true)\"></c8y-widget-preview>\n\n      <c8y-appearance-settings\n        [(themeClass)]=\"styling.contentClass\"\n        [(headerClass)]=\"styling.headerClass\"\n        [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n        [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n        [defaultThemeClass]=\"defaultStyling.contentClass\"\n        [defaultHeaderClass]=\"defaultStyling.headerClass\"\n        [columns]=\"2\"\n      ></c8y-appearance-settings>\n    </div>\n  </c8y-resizable-grid>\n\n  <div class=\"card-footer separator text-center\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      data-cy=\"widget-config--cancel-widget\"\n      (click)=\"close()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      title=\"{{ 'Save' | translate }}\"\n      type=\"submit\"\n      data-cy=\"widget-config--save-widget\"\n      (click)=\"save()\"\n      [disabled]=\"(contextDashboardService.formDisabled$ | async) || isSaveDisabled()\"\n      c8yProductExperience\n      [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n      [actionData]=\"{ widgetName: selected && selected.id }\"\n    >\n      {{ 'Save' | translate }}\n    </button>\n  </div>\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n  Component,\n  DestroyRef,\n  HostBinding,\n  HostListener,\n  Inject,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  ActionBarItemComponent,\n  ActionBarService,\n  AlertService,\n  BottomDrawerService,\n  BreadcrumbItem,\n  C8yTranslatePipe,\n  CopyDashboardDisabledReason,\n  DashboardChange,\n  DashboardChildChange,\n  DashboardChildComponent,\n  DashboardCopyPermission,\n  DynamicComponentDefinition,\n  GainsightService,\n  HelpComponent,\n  IconDirective,\n  memoize,\n  ModalService,\n  RevertChangeType,\n  Status,\n  TitleComponent,\n  Widget,\n  WidgetChange,\n  WidgetsDashboardComponent\n} from '@c8y/ngx-components';\nimport { ContextDashboardStateService } from '@c8y/ngx-components/context-dashboard-state';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport {\n  CanDeactivateComponent,\n  CONTEXT_DASHBOARD_CONFIG,\n  ContextDashboard,\n  ContextDashboardConfig,\n  ContextDashboardManagedObject,\n  DASHBOARD_CHILDREN_STATE_NAME,\n  DashboardChildrenState,\n  DashboardHistoryDescription,\n  PRODUCT_EXPERIENCE,\n  WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DashboardEditModeService } from './memento/dashboard-edit-mode.service';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n  selector: 'c8y-context-dashboard',\n  templateUrl: './context-dashboard.component.html',\n  host: {\n    style: `\n      display: block;\n    `,\n    class: 'dashboard c8y-grid-dashboard'\n  },\n  imports: [\n    TitleComponent,\n    ActionBarItemComponent,\n    PopoverDirective,\n    IconDirective,\n    HelpComponent,\n    DashboardDetailComponent,\n    WidgetsDashboardComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {\n  @Input()\n  name: string;\n  @Input()\n  childrenClasses = '';\n  @Input()\n  context: any;\n  @Input()\n  setTitle = false;\n\n  @Input()\n  defaultWidgets: Widget[] = [];\n  @Input('canCopy')\n  _canCopy = true;\n  @Input()\n  canDelete = true;\n  @Input()\n  isLoading = true;\n  @Input()\n  breadcrumbSettings: BreadcrumbItem;\n  @Input()\n  showContextHelpButton = true;\n  /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n  @Input() translateWidgetTitle: boolean;\n  /** Whether to translate dashboard title. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n  @Input() translateDashboardTitle: boolean;\n  /**\n   * Hides dashboard availability selection.\n   */\n  @Input()\n  hideAvailability = false;\n\n  /** Explicitly set the dashboard in `disabled` state, e.g. to create read-only dashboard */\n  isDisabled = input<boolean>(false, { alias: 'disabled' });\n\n  @HostBinding('class')\n  class = '';\n\n  @ViewChild(DashboardDetailComponent, { static: true }) dashboardDetails: DashboardDetailComponent;\n  @ViewChild(WidgetsDashboardComponent, { static: true })\n  widgetsDashboard: WidgetsDashboardComponent;\n  isNamedDashboard: boolean;\n\n  get disabled(): boolean {\n    return (\n      !this.hasPermissionToEditDashboard || !this.dashboardDetails?.isCollapsed || this.isDisabled()\n    );\n  }\n\n  widgets: Widget[] = [];\n  mo: ContextDashboardManagedObject;\n  dashboard: ContextDashboard;\n  title: string;\n  isCopyDisabled: DashboardCopyPermission;\n  isReport: boolean;\n  canCopy = true;\n  readonly dashboardTypeLabel = gettext('Dashboard for \"{{ dashboardType }}\"');\n  readonly dashboardTypePopover = gettext(`\n  The layout and configuration of this dashboard is used by all other assets of model type\n  <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n  other instances.`);\n  private dataSub: Subscription;\n  private hasPermissionToEditDashboard = false;\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    private route: ActivatedRoute,\n    private router: Router,\n    private contextDashboardService: ContextDashboardService,\n    private alert: AlertService,\n    private renderer: Renderer2,\n    @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n    private widgetService: WidgetService,\n    private bottomDrawerService: BottomDrawerService,\n    private gainsightService: GainsightService,\n    private actionBarService: ActionBarService,\n    private translateService: TranslateService,\n    private modal: ModalService,\n    private destroyRef: DestroyRef,\n    public contextDashboardStateService: ContextDashboardStateService<{ [key: string]: any }>,\n    public editModeService: DashboardEditModeService\n  ) {}\n\n  ngOnInit() {\n    if (!this.name) {\n      this.loadContextDashboard();\n      return;\n    }\n    this.loadNamedDashboard();\n  }\n\n  ngAfterViewInit() {\n    this.widgetsDashboard.editMode$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter(v => v)\n      )\n      .subscribe(() => {\n        this.contextDashboardStateService.resetGlobalState();\n      });\n  }\n\n  @HostListener('window:beforeunload', ['$event'])\n  async beforeUnloadHandler($event: BeforeUnloadEvent) {\n    const canDeactivate = await this.canDeactivate(true);\n    if (!canDeactivate) {\n      $event.returnValue = true;\n    }\n  }\n\n  /**\n   * Applies the current context to the widget\n   * @param widget The widget to apply the context to.\n   */\n  applyDeviceTarget(widget) {\n    if (widget.config.device) {\n      widget.config.device = { id: this.context.id, name: this.context.name };\n    }\n  }\n\n  /**\n   * Removes the route listener.\n   */\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n\n    if (this.dataSub) {\n      this.dataSub.unsubscribe();\n    }\n\n    this.contextDashboardStateService.setSelectedDashboard(null);\n  }\n  /**\n   * Guards component from unintended navigation away or closing tab without saving changes.\n   * Navigation continues if true is returned, and navigation is cancelled if returned value is false.\n   * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in\n   * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)\n   */\n  async canDeactivate(omitConfirm = false): Promise<boolean> {\n    const canDeactivate =\n      (await this.dashboardDetails.canDeactivate(omitConfirm)) &&\n      (await this.widgetsDashboard.canDeactivate(omitConfirm));\n\n    // Needed in order to reset edit mode, otherwise when switching between dashboards, the edit mode is still enabled.\n    if (canDeactivate) {\n      await this.cancelEditMode(true);\n    }\n    return canDeactivate;\n  }\n\n  /**\n   * Restores the dashboard widgets to the default widgets.\n   */\n  async restore() {\n    const mesg = gettext(\n      'You are about to reset the widgets of this dashboard. All changes to the dashboard widgets will get lost and cannot be recovered. Do you want to proceed?'\n    );\n\n    try {\n      await this.modal.confirm(gettext('Reset widgets'), mesg, Status.WARNING, {\n        ok: gettext('Reset`dashboard`'),\n        cancel: gettext('Cancel')\n      });\n\n      this.isLoading = true;\n      this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n      this.mo.c8y_Dashboard.historyDescription = { changeType: 'reset' };\n      await this.contextDashboardService.update(this.mo);\n      await this.onLoad();\n\n      this.contextDashboardStateService.dashboardSaved.next(this.mo);\n    } catch (error) {\n      if (error) {\n        this.alert.addServerFailure(error);\n      }\n    } finally {\n      this.isLoading = false;\n    }\n  }\n  /**\n   * Method called on every widgets dimensions or position change but also for adding new widget (because adding\n   * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state\n   * accordingly.\n   * @param child Change object.\n   */\n  positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void {\n    const currentState = this.editModeService.getCurrentState()?.children || {};\n    const descriptionProp: keyof DashboardHistoryDescription['widgetChanges'] =\n      child.children.length === Object.values(currentState).length ? 'arrangement' : 'added';\n    let changeName: DashboardChildrenState['name'];\n    let widgetsChanged: Widget[];\n    if (descriptionProp === 'added') {\n      changeName = DASHBOARD_CHILDREN_STATE_NAME.added;\n      const addedWidget = child.children.find(c => !currentState[c.data.id]);\n      widgetsChanged = [addedWidget.data];\n    } else {\n      changeName = DASHBOARD_CHILDREN_STATE_NAME.arrangement;\n      widgetsChanged = child.children\n        .map(c => {\n          const lastStateChild = currentState[c.data.id];\n          if (\n            c.x != lastStateChild._x ||\n            c.y != lastStateChild._y ||\n            c.width != lastStateChild._width ||\n            c.height != lastStateChild._height\n          ) {\n            return c.data;\n          }\n        })\n        .filter(Boolean);\n    }\n\n    this.updateDashboardChildren(child, changeName, descriptionProp, widgetsChanged);\n  }\n\n  async revertChange(revertType: RevertChangeType): Promise<void> {\n    let dashboardChildren: ContextDashboard['children'];\n    if (revertType === 'undo') {\n      dashboardChildren = this.editModeService.undo().children;\n    } else {\n      dashboardChildren = this.editModeService.redo().children;\n    }\n    await this.setWidgets(dashboardChildren);\n  }\n\n  /**\n   * Updates all dashboards children's. Useful for position changes on the dashboard.\n   * @param child The child to change.\n   * @param changeName Name of the change to indicate it on undo/redo button.\n   * @param descriptionProp Property to add to dashboard change history.\n   * @param widgetsChanged List of changed widgets.\n   */\n  updateDashboardChildren(\n    child: DashboardChildChange | DashboardChange,\n    changeName: DashboardChildrenState['name'],\n    descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n    widgetsChanged: Widget[]\n  ): void {\n    const { children } = child;\n    const mappedChildren: { [id: string]: Widget } = keyBy(\n      children.map(c => this.componentToWidget(c)),\n      'id'\n    );\n    this.setNewState(\n      { name: changeName, children: mappedChildren },\n      descriptionProp,\n      widgetsChanged\n    );\n  }\n\n  /**\n   * Copies the dashboard and current context to a clipboard.\n   */\n  async copyDashboard() {\n    const viewContext = this.route.parent.snapshot.data?.context;\n\n    this.contextDashboardService.copyClipboard = {\n      dashboardId: this.mo.id,\n      dashboard: cloneDeep(this.mo.c8y_Dashboard),\n      context: cloneDeep({ context: viewContext, contextData: this.context })\n    };\n\n    if (viewContext) {\n      const ctx = viewContext.split('/').shift();\n      const msg = this.translateService.instant(\n        'Dashboard copied. Navigate to the desired {{ ctx }} and select \"Paste dashboard\"',\n        { ctx }\n      );\n      this.alert.success(msg);\n    }\n    this.actionBarService.refresh();\n  }\n\n  editDashboard() {\n    const isEdit = !!this.mo.id;\n    this.dashboardDetails.show(isEdit);\n  }\n\n  /**\n   * Remove the complete dashboard and navigate away.\n   */\n  async deleteDashboard() {\n    await this.contextDashboardService.delete(this.mo);\n    if (this.route.parent) {\n      const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n      this.router.navigateByUrl(route);\n    }\n    await this.onDeleteGSEvent();\n  }\n\n  get isDeviceTypeDashboard(): boolean {\n    return !!this.dashboard?.deviceType;\n  }\n\n  /**\n   * Edits a widget on the dashboard.\n   * @param change The widget change event.\n   */\n  async editWidget(change: WidgetChange) {\n    const { x, y, width, height } = change.source;\n    const component = await this.widgetService.getWidgetDefinition(\n      change.widget.name || change.widget.componentId\n    );\n    if (!component) {\n      this.addWidget();\n      return;\n    }\n    await this.addWidget({\n      ...component,\n      data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n    });\n  }\n\n  /**\n   * Adds a widget to the dashboard.\n   * @param selected Define a selected component to switch to edit mode directly.\n   */\n  async addWidget(selected?: DynamicComponentDefinition) {\n    const partialCloneSelected = selected\n      ? { ...selected, data: cloneDeep(selected.data) }\n      : selected;\n\n    const activeContext = this.context.contextData ? this.context.contextData : this.context;\n    const initialState: Partial<WidgetConfigComponent> = {\n      mo: this.mo,\n      context: this.context.c8y_Report ? {} : activeContext,\n      selected: partialCloneSelected\n    };\n\n    const bottomDrawer = this.bottomDrawerService.openDrawer(WidgetConfigComponent, {\n      initialState,\n      closeOnNavigation: false,\n      disableClickOutside: true,\n      closeOnEscape: false\n    });\n\n    try {\n      const newWidget = await bottomDrawer.instance.result;\n      if (!this.mo.c8y_Dashboard.children) {\n        this.mo.c8y_Dashboard.children = {};\n      }\n      newWidget.classes = this.mergeWidgetClasses(newWidget);\n      await this.updateWidget(newWidget);\n      // New state in edit mode is added only for widget update. When adding widget, layout change is always triggered,\n      // so it's easier to set new state on layout change only\n      if (selected) {\n        const children = {\n          ...this.editModeService.getCurrentState().children,\n          [newWidget.id]: newWidget\n        };\n        this.setNewState({ name: DASHBOARD_CHILDREN_STATE_NAME.config, children }, 'config', [\n          newWidget\n        ]);\n      }\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  async saveWidgetsToDashboard() {\n    const currentState = this.editModeService.getCurrentState();\n\n    const editedChildren = currentState.children;\n\n    // first-time save (no `id` yet): create the dashboard, then immediately update it with the edited widgets\n    if (!this.mo.id) {\n      this.mo = await this.contextDashboardService.create(\n        this.mo.c8y_Dashboard,\n        this.context,\n        this.name\n      );\n    }\n\n    this.mo.c8y_Dashboard.children = editedChildren;\n    this.mo.c8y_Dashboard.historyDescription = {\n      changeType: 'update',\n      widgetChanges: this.mapStateToHistoryDescription(currentState.changeHistory)\n    };\n\n    await this.contextDashboardService.update(this.mo);\n\n    this.editModeService.reset();\n    this.editModeService.init({\n      name: DASHBOARD_CHILDREN_STATE_NAME.initial,\n      children: editedChildren,\n      changeHistory: {}\n    });\n    this.isCopyDisabled = this.getDashboardCopyPermissionState();\n\n    this.contextDashboardStateService.dashboardSaved.next(this.mo);\n  }\n\n  async cancelEditMode(onDeactivate = false): Promise<void> {\n    const dashboardChildren = this.editModeService.reset();\n    if (this.dashboard) {\n      this.dashboard.historyDescription = {};\n    }\n    this.widgetsDashboard.editMode$.next(false);\n    if (!onDeactivate) {\n      // when setWidgets is called during navigation from device to device, navigation fails\n      await this.setWidgets(dashboardChildren.children);\n    }\n  }\n\n  /**\n   * Updates a widget or adds a new one if it doesn't exist on\n   * the dashboard.\n   * @param widget The new widget\n   */\n  async updateWidget(widget) {\n    const index = findIndex(this.widgets, { id: widget.id });\n    const isNew = index === -1;\n    const mappedWidget = await this.widgetService.mapLegacy(widget);\n    if (isNew) {\n      this.widgets.push(mappedWidget);\n    } else {\n      this.widgets.splice(index, 1, mappedWidget);\n    }\n  }\n\n  /**\n   * Removes a widget and rearranges the remaining ones\n   * if necessary.\n   * @param change The change event.\n   */\n  async deleteWidget(change: WidgetChange) {\n    try {\n      const { widget, source } = change;\n      const removed = this.widgets.find(({ id }) => id === widget.id);\n      this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n      const { dashboard } = source;\n      dashboard.children = dashboard.children.filter(c => c.data.id !== widget.id);\n\n      // using setTimeout to give the component the chance to remove it.\n      const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));\n      await sleep(0);\n\n      const child = new DashboardChildChange(source);\n      child.collapseUpAll();\n      this.updateDashboardChildren(child, DASHBOARD_CHILDREN_STATE_NAME.removed, 'removed', [\n        widget\n      ]);\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    }\n  }\n\n  /**\n   * This is a workaround to ensure that the dragged-element\n   * (which is attached to the body) has the right styling.\n   */\n  addDashboardClassToBody() {\n    this.class.split(' ').forEach(cssClass => {\n      this.renderer.addClass(document.body, cssClass);\n    });\n  }\n\n  /**\n   * This is a workaround to ensure that the dragged-element\n   * (which is attached to the body) has the right styling.\n   */\n  removeDashboardClassFromBody() {\n    this.class.split(' ').forEach(cssClass => {\n      this.renderer.removeClass(document.body, cssClass);\n    });\n  }\n\n  async onLoad(trackExperience?: boolean) {\n    this.isNamedDashboard = this.contextDashboardService.isNamed(this.mo);\n    this.hasPermissionToEditDashboard = this.dashboard\n      ? await this.contextDashboardService.canEditDashboard(this.mo)\n      : false;\n    this.canCopy =\n      this._canCopy &&\n      (this.contextDashboardService.isDeviceDashboard(this.mo) ||\n        this.contextDashboardService.isDeviceType(this.mo) ||\n        this.contextDashboardService.isGroupDashboard(this.mo));\n    const dashboardChildren: ContextDashboard['children'] = cloneDeep(\n      this.mo.c8y_Dashboard?.children\n    );\n    const dashboardClasses = {\n      'c8y-grid-dashboard': true,\n      dashboard: true,\n      ...this.dashboard?.classes\n    };\n    this.isCopyDisabled = this.dashboard\n      ? this.getDashboardCopyPermissionState()\n      : { state: false, reason: null };\n    this.editModeService.init({\n      name: gettext('Initial state'),\n      children: dashboardChildren,\n      changeHistory: {}\n    });\n\n    await this.setWidgets(dashboardChildren, trackExperience);\n    this.class = Object.keys(dashboardClasses).join(' ');\n    if (this.isReport) {\n      this.addReportDashboardSettings();\n    }\n    this.isLoading = false;\n\n    if (!this.dashboard) {\n      this.dashboardDetails.show(false);\n    } else {\n      await this.onLoadGSEvent();\n    }\n  }\n\n  async dashboardPreview(layoutChanges: ContextDashboard) {\n    if (layoutChanges?.classes) {\n      const dashboardClasses = {\n        'c8y-grid-dashboard': true,\n        dashboard: true,\n        ...layoutChanges.classes\n      };\n      this.class = Object.keys(dashboardClasses).join(' ');\n    } else if (this.dashboard) {\n      this.dashboard.widgetClasses = {\n        ...this.dashboard.widgetClasses,\n        ...layoutChanges.widgetClasses\n      };\n    }\n  }\n\n  async reloadDashboard(dashboardMo: ContextDashboardManagedObject) {\n    this.dashboard = dashboardMo.c8y_Dashboard;\n    this.mo = dashboardMo;\n    await this.onLoad();\n  }\n\n  private async setWidgets(\n    dashboardChildren: ContextDashboard['children'],\n    trackExperience = false\n  ): Promise<void> {\n    const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n    this.widgets = await Promise.all<Widget>(\n      Object.values(dashboardChildren || {}).map(widget => {\n        widget.classes = this.mergeWidgetClasses(widget);\n        if (isDeviceType) {\n          this.applyDeviceTarget(widget);\n        }\n        if (trackExperience) {\n          this.gainsightService.triggerEvent('loadWidget', {\n            widgetName: widget.componentId || widget.name\n          });\n        }\n        return this.widgetService.mapLegacy(widget);\n      })\n    );\n  }\n\n  private loadContextDashboard() {\n    this.dataSub = this.route.data.subscribe(({ dashboard, isReport }) => {\n      this.context = this.route.parent.snapshot.data.contextData || {};\n      this.title = this.context?.name;\n      this.mo = dashboard;\n      this.contextDashboardStateService.setSelectedDashboard(this.mo);\n      this.dashboard = this.mo.c8y_Dashboard;\n      this.isReport = isReport || this.contextDashboardService.isReport(this.mo);\n      if (this.isReport && this.dashboard && !this.dashboard?.name) {\n        this.dashboard.name = this.title;\n      }\n      if (this.isReport && this.dashboard) {\n        this.dashboard.c8y_IsNavigatorNode = this.context.c8y_IsNavigatorNode;\n      }\n      this.patchSensorPhoneDashboard(this.dashboard, this.mo.owner, this.context?.type);\n\n      this.onLoad(true);\n    });\n  }\n\n  /**\n   * To enable translation for widgets within the dashboard, the \"translateWidgetTitle\" flag must be enabled.\n   * The property needs to be patched, as the \"Sensor App\" does not provide this setting.\n   */\n  private patchSensorPhoneDashboard(dashboard: ContextDashboard, owner: string, type: string) {\n    if (type === 'c8y_SensorPhone' && owner?.includes('device_phone')) {\n      dashboard.translateWidgetTitle = true;\n    }\n  }\n\n  private loadNamedDashboard() {\n    this.dataSub = this.contextDashboardService\n      .getDashboard(this.name, this.defaultWidgets)\n      .subscribe(mo => {\n        this.context = this.context || {};\n        this.mo = mo;\n        this.dashboard = this.mo.c8y_Dashboard;\n        this.contextDashboardStateService.setSelectedDashboard(this.mo);\n\n        this.onLoad(true);\n      });\n  }\n\n  private mergeWidgetClasses(widget: Widget): Record<string, boolean> {\n    const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n      el => widget.classes && widget.classes[el.class]\n    );\n    const widgetClasses = hasHeaderClass\n      ? { ...widget.classes }\n      : { ...this.dashboard.widgetClasses, ...widget.classes };\n    return {\n      card: true,\n      'card-dashboard': true,\n      [kebabCase(widget.componentId || widget.name)]: true,\n      ...widgetClasses\n    };\n  }\n\n  private componentToWidget(child: DashboardChildComponent) {\n    return {\n      ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n      ...({ _x: child.x, _y: child.y, _width: child.width, _height: child.height } as Widget)\n    };\n  }\n\n  private addReportDashboardSettings() {\n    this.setTitle = true;\n    this.title = this.context?.name || gettext('New report');\n    this.breadcrumbSettings = { icon: 'th', label: 'Reports', path: 'reports' };\n    this.canDelete = false;\n  }\n\n  private getDashboardCopyPermissionState(): DashboardCopyPermission {\n    if (!this.contextDashboardService.hasPermissionsToCopyDashboard()) {\n      return { state: false, reason: CopyDashboardDisabledReason.PERMISSIONS };\n    }\n    const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {\n      const config = child.config || {};\n      const dataPoints = config.datapoints || [];\n      return !(\n        (config.device && config.device.id !== this.context.id) ||\n        some(dataPoints, dataPoint => dataPoint.__target?.id !== this.context.id)\n      );\n    });\n    if (!allDashboardChildrenAreValid) {\n      return { state: false, reason: CopyDashboardDisabledReason.WRONG_REFERENCE };\n    }\n    return { state: true };\n  }\n\n  private setNewState(\n    state: Pick<DashboardChildrenState, 'name' | 'children'>,\n    descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n    widgetsChanged: Widget[]\n  ): void {\n    const description = this.getDescriptionForNewState(descriptionProp, widgetsChanged);\n    this.editModeService.newState({ ...state, changeHistory: description });\n  }\n\n  private getDescriptionForNewState(\n    descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n    widgetsChanged: Widget[]\n  ): DashboardChildrenState['changeHistory'] {\n    const changeHistory = this.editModeService.getCurrentState().changeHistory;\n    if (!changeHistory[descriptionProp]) {\n      changeHistory[descriptionProp] = {};\n    }\n    widgetsChanged.forEach(w => {\n      if (descriptionProp === 'removed' && changeHistory.added?.[w.id]) {\n        // if widget was added during current edit session and then removed, it should not be at description at all\n        delete changeHistory.added[w.id];\n        if (changeHistory.config?.[w.id]) {\n          delete changeHistory.config[w.id];\n        }\n        if (changeHistory.arrangement?.[w.id]) {\n          delete changeHistory?.arrangement[w.id];\n        }\n      } else if (\n        (descriptionProp === 'config' || descriptionProp === 'arrangement') &&\n        changeHistory.added?.[w.id]\n      ) {\n        // if widget was added and then modified in current edit session, it should only be indicated as added\n      } else {\n        changeHistory[descriptionProp][w.id] = w;\n      }\n    });\n\n    return changeHistory;\n  }\n\n  private mapStateToHistoryDescription(\n    description: DashboardChildrenState['changeHistory']\n  ): DashboardHistoryDescription['widgetChanges'] {\n    const historyDescription: DashboardHistoryDescription['widgetChanges'] = {};\n    for (const [key, value] of Object.entries(description)) {\n      const widgets = Object.values(value);\n      if (!widgets.length) {\n        continue;\n      }\n      historyDescription[key] = Object.values(value).map(widget => widget.title);\n    }\n    return historyDescription;\n  }\n\n  private async onDeleteGSEvent() {\n    const parentName = await this.convertStringToHash(this.context?.name);\n    const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n      component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,\n      action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,\n      name: dashboardName,\n      id: this.mo.id,\n      nameId: `${dashboardName}_${this.mo.id}`,\n      isDashboardTemplate: this.mo.c8y_Dashboard.deviceType,\n      parentAssetId: this.context?.id ? this.context.id : 'noContext',\n      parentAssetName: this.context?.id ? parentName : 'noContext',\n      parentAssetType: this.context?.id ? this.context.type : 'noContext',\n      parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n      parentAssetNameDashboardName: this.context?.id\n        ? `${parentName}_${dashboardName}`\n        : 'noContext',\n      parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n      parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n      parentAssetNameIdDashboardNameId: this.context?.id\n        ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n        : 'noContext',\n      dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n      context: this.contextDashboardService.getContextForGS(this.context)\n    });\n  }\n\n  private async onLoadGSEvent() {\n    const parentName = await this.convertStringToHash(this.context?.name);\n    const dashboardName =\n      (await this.convertStringToHash(this.dashboard?.name)) ??\n      this.extractDefaultDashboardName(this.mo) ??\n      'none';\n\n    this.gainsightService.triggerEvent(\n      this.isReport\n        ? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS\n        : PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS,\n      {\n        component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,\n        action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,\n        name: dashboardName,\n        id: this.mo.id,\n        isDashboardTemplate: this.mo.c8y_Dashboard.deviceType,\n        nameId: `${dashboardName}_${this.mo.id}`,\n        parentAssetId: this.context?.id ? this.context.id : 'noContext',\n        parentAssetName: this.context?.id ? parentName : 'noContext',\n        parentAssetType: this.context?.id ? this.context.type : 'noContext',\n        parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n        parentAssetNameDashboardName: this.context?.id\n          ? `${parentName}_${dashboardName}`\n          : 'noContext',\n        parentAssetIdDashboardId: this.context?.id\n          ? `${this.context.id}_${this.mo.id}`\n          : 'noContext',\n        parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n        parentAssetNameIdDashboardNameId: this.context?.id\n          ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n          : 'noContext',\n        dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n        context: this.isReport\n          ? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n          : this.contextDashboardService.getContextForGS(this.context)\n      }\n    );\n  }\n\n  private extractDefaultDashboardName(obj: IManagedObject): string | null {\n    const nameKey = Object.keys(obj).find(key => key.startsWith('c8y_Dashboard!name!'));\n    if (nameKey) {\n      return nameKey.split('!').pop();\n    }\n    return null;\n  }\n\n  @memoize()\n  private async convertStringToHash(str: string) {\n    if (!str) {\n      return null;\n    }\n    return (await this.gainsightService.shouldSendPiiData())\n      ? str\n      : this.gainsightService.hashGroupName(str);\n  }\n}\n","@if (title) {\n  <c8y-title>\n    {{ title }}\n  </c8y-title>\n}\n\n@if (dashboard?.deviceType && dashboard.deviceTypeValue) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"10000\"\n  >\n    <button\n      class=\"btn-clean btn-link\"\n      popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"dashboardTypePopoverRef\"\n      placement=\"bottom\"\n      triggers=\"focus\"\n      container=\"body\"\n      type=\"button\"\n    >\n      <span class=\"tag tag--info text-12\">\n        <span class=\"dashboard-template-marker\"></span>\n        {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n      </span>\n    </button>\n    <ng-template #dashboardTypePopoverRef>\n      <div\n        [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n      ></div>\n    </ng-template>\n  </c8y-action-bar-item>\n}\n\n@if (defaultWidgets.length > 0) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"-1\"\n  >\n    <button\n      class=\"btn btn-link\"\n      title=\"{{ 'Reset widgets' | translate }}\"\n      type=\"button\"\n      px-event=\"Reset dashboard\"\n      (click)=\"restore()\"\n      [disabled]=\"disabled || !mo?.id || (widgetsDashboard?.editMode$ | async)\"\n      data-cy=\"context-dashboard--button-reset-dashboard\"\n    >\n      <i\n        class=\"m-r-4\"\n        c8yIcon=\"reset\"\n      ></i>\n      <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n        {{ 'Reset widgets' | translate }}\n      </span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (showContextHelpButton) {\n  <c8y-help src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"></c8y-help>\n}\n\n<c8y-dashboard-detail\n  class=\"d-contents\"\n  [isReport]=\"isReport\"\n  [dashboard]=\"dashboard\"\n  [mo]=\"mo\"\n  [context]=\"context\"\n  [deviceType]=\"context?.type\"\n  [hideAvailability]=\"hideAvailability\"\n  [isNamedDashboard]=\"isNamedDashboard\"\n  (dashboardSaved)=\"reloadDashboard($event)\"\n  (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n  [context]=\"context\"\n  [contextDashboard]=\"dashboard\"\n  [widgets]=\"widgets\"\n  [isCopyDisabled]=\"isCopyDisabled\"\n  [isSaveDisabled]=\"contextDashboardStateService.isSaveDisabled | async\"\n  [settings]=\"{\n    isLoading: isLoading,\n    isDisabled: disabled,\n    canDelete: canDelete && !!dashboard,\n    translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n    translateDashboardTitle: dashboard?.translateDashboardTitle ?? translateDashboardTitle,\n    allowFullscreen: moduleConfig.allowFullscreen,\n    title: setTitle ? dashboard?.name || title : undefined,\n    widgetMargin: dashboard?.widgetMargin,\n    canCopy: canCopy && !!dashboard,\n    defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n    columns: dashboard?.columns || 12\n  }\"\n  [breadcrumb]=\"breadcrumbSettings\"\n  [editModeButtons]=\"{\n    undoButtonDisabled: editModeService.undoButtonDisabled,\n    changeToUndoName: editModeService.changeToUndoName,\n    redoButtonDisabled: !editModeService.redoStackLastItem,\n    changeToRedoName: editModeService.redoStackLastItem?.name\n  }\"\n  (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n  (onAddWidget)=\"addWidget()\"\n  (onEditWidget)=\"editWidget($event)\"\n  (onDeleteWidget)=\"deleteWidget($event)\"\n  (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n  (onCancelDashboard)=\"cancelEditMode()\"\n  (revertChange)=\"revertChange($event)\"\n  (onChangeStart)=\"addDashboardClassToBody()\"\n  (onChangeEnd)=\"removeDashboardClassFromBody()\"\n  (onEditDashboard)=\"editDashboard()\"\n  (onCopyDashboard)=\"copyDashboard()\"\n  (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n","import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ContextRouteService, Tab, TabFactory, ViewContext } from '@c8y/ngx-components';\nimport {\n  DASHBOARD_DETAILS_OUTLET,\n  DASHBOARD_DETAILS_TABS_OUTLET_NAME,\n  DashboardDetailsTabId\n} from './context-dashboard.model';\nimport { ActivatedRoute } from '@angular/router';\n\n@Injectable()\nexport class DashboardDetailsTabsFactory implements TabFactory {\n  private activatedRoute = inject(ActivatedRoute);\n  private contextRouteService = inject(ContextRouteService);\n  private generalTab: Tab = {\n    label: gettext('General'),\n    featureId: DashboardDetailsTabId.GENERAL,\n    icon: 'imac-settings',\n    priority: 100,\n    path: [\n      {\n        outlets: {\n          [DASHBOARD_DETAILS_OUTLET]: DashboardDetailsTabId.GENERAL\n        }\n      }\n    ],\n    tabsOutlet: DASHBOARD_DETAILS_TABS_OUTLET_NAME\n  };\n\n  private appearanceTab: Tab = {\n    label: gettext('Appearance'),\n    featureId: DashboardDetailsTabId.APPEARANCE,\n    icon: 'web-design',\n    priority: 50,\n    path: [\n      {\n        outlets: {\n          [DASHBOARD_DETAILS_OUTLET]: DashboardDetailsTabId.APPEARANCE\n        }\n      }\n    ],\n    tabsOutlet: DASHBOARD_DETAILS_TABS_OUTLET_NAME\n  };\n  private versionHistoryTab: Tab = {\n    label: gettext('Version history'),\n    featureId: DashboardDetailsTabId.VERSIONHISTORY,\n    icon: 'versions',\n    priority: 10,\n    path: [\n      {\n        outlets: {\n          [DASHBOARD_DETAILS_OUTLET]: DashboardDetailsTabId.VERSIONHISTORY\n        }\n      }\n    ],\n    tabsOutlet: DASHBOARD_DETAILS_TABS_OUTLET_NAME\n  };\n\n  get() {\n    const rootContext = this.contextRouteService.getRootContextOfChild(this.activatedRoute);\n    if (rootContext === ViewContext.Dashboard) {\n      return [this.generalTab, this.appearanceTab, this.versionHistoryTab];\n    }\n    return [];\n  }\n}\n","import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ViewContext,\n  IconDirective,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { DashboardContext } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n  selector: 'c8y-paste-dashboard-action',\n  template: `\n    <ng-template #templatePaste>\n      <li>\n        <button\n          class=\"btn btn-link\"\n          title=\"{{ buttonTitle | translate }}\"\n          type=\"button\"\n          (click)=\"pasteDashboard()\"\n          [disabled]=\"pasteDisabled\"\n        >\n          <i class=\"m-r-4\" c8yIcon=\"clipboard\"></i>\n          <span ngNonBindable translate [translateParams]=\"{ dashboardName: dashboardName }\">\n            Paste dashboard \"{{ dashboardName }}\"\n          </span>\n        </button>\n      </li>\n    </ng-template>\n  `,\n  imports: [IconDirective, C8yTranslateDirective, C8yTranslatePipe]\n})\nexport class PasteDashboardActionComponent implements OnInit {\n  pasteDisabled = false;\n  @ViewChild('templatePaste', { read: TemplateRef, static: true }) templatePaste;\n  dashboardName = '';\n  buttonTitle: string;\n  private currentViewContext: ViewContext;\n  private currentUrl: string;\n  private contextMO: IManagedObject;\n  private contextId: string;\n\n  constructor(\n    private vcRef: ViewContainerRef,\n    private router: Router,\n    private contextDashboardService: ContextDashboardService,\n    private inventoryService: InventoryService\n  ) {}\n\n  async ngOnInit() {\n    this.currentUrl = this.router.url;\n    this.contextId = this.currentUrl.match(/\\d+/)[0];\n\n    const isDevice: boolean = new RegExp(/device\\/\\d+/).test(this.currentUrl);\n    const isGroup: boolean = new RegExp(/group\\/\\d+/).test(this.currentUrl);\n    this.currentViewContext = isDevice ? ViewContext.Device : isGroup ? ViewContext.Group : null;\n    await this.checkIfPasteIsAllowed();\n\n    this.vcRef.createEmbeddedView(this.templatePaste);\n    const clipboard = this.contextDashboardService.copyClipboard;\n    if (clipboard) {\n      this.dashboardName = clipboard.dashboard.name;\n    }\n  }\n\n  async pasteDashboard() {\n    if (!this.contextMO) {\n      this.contextMO = await this.getContextMo(this.contextId);\n    }\n    const context: DashboardContext = {\n      context: this.currentViewContext,\n      contextData: this.contextMO\n    };\n\n    await this.contextDashboardService.pasteDashboard(context);\n  }\n\n  private async getContextMo(id: string): Promise<IManagedObject> {\n    return (await this.inventoryService.detail(id)).data;\n  }\n\n  private async checkIfPasteIsAllowed(): Promise<void> {\n    const clipboardViewContext = this.contextDashboardService.copyClipboard.context.context;\n    const isTypeDashboard = this.contextDashboardService.copyClipboard?.dashboard?.deviceType;\n\n    if (this.currentViewContext !== clipboardViewContext) {\n      if (clipboardViewContext === ViewContext.Device) {\n        this.buttonTitle = gettext('Device dashboards can only be copied into a device.');\n      } else if (clipboardViewContext === ViewContext.Group) {\n        this.buttonTitle = gettext('Group dashboards can only be copied into a group.');\n      }\n      this.pasteDisabled = true;\n      return;\n    } else if (isTypeDashboard) {\n      this.contextMO = await this.getContextMo(this.contextId);\n      const dashboardDeviceType =\n        this.contextDashboardService.copyClipboard.dashboard.deviceTypeValue;\n      if (dashboardDeviceType === this.contextMO.type) {\n        this.buttonTitle = gettext(\n          'Dashboard template can only be copied into assets of a different type.'\n        );\n        this.pasteDisabled = true;\n        return;\n      }\n    }\n\n    this.buttonTitle = gettext('Paste dashboard');\n    this.pasteDisabled = false;\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { AlertService, C8yTranslatePipe, DatePipe } from '@c8y/ngx-components';\nimport { NgIf } from '@angular/common';\n\n@Component({\n  selector: 'c8y-type-dashboard-info',\n  templateUrl: './type-dashboard-info.component.html',\n  standalone: true,\n  imports: [C8yTranslatePipe, DatePipe, NgIf]\n})\nexport class TypeDashboardInfoComponent implements OnInit {\n  @Input() deviceTypeValue: string;\n  @Input() displayDeviceTypeValue: string;\n  @Input() context: ContextDashboardManagedObject;\n  deviceTypeInstancesCount: number;\n  @Input() asyncRenderSuccess: () => void;\n  @Input() asyncRenderFail: () => void;\n\n  constructor(\n    private inventory: InventoryService,\n    private alert: AlertService\n  ) {}\n\n  async ngOnInit() {\n    await this.updateDeviceTypeCount();\n  }\n\n  private async updateDeviceTypeCount(): Promise<void> {\n    try {\n      const count = await this.inventory.count({\n        type: this.deviceTypeValue || this.context.c8y_Dashboard.deviceTypeValue\n      });\n      this.deviceTypeInstancesCount = count.data;\n      this.asyncRenderSuccess?.();\n    } catch (error) {\n      this.alert.addServerFailure(error);\n      this.asyncRenderFail?.();\n    }\n  }\n}\n","<ul class=\"list-unstyled small animated fadeIn\">\n  <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n    <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n    <span class=\"m-l-auto\">\n      <span class=\"label label-info\">\n        {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n      </span>\n    </span>\n  </li>\n  <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n    <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n    <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n  </li>\n  <ng-container *ngIf=\"context?.c8y_Dashboard\">\n    <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n      <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n      <span class=\"m-l-auto\">\n        {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n      </span>\n    </li>\n    <li\n      class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n      *ngIf=\"context?.c8y_DashboardHistory?.length\"\n    >\n      <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n      <span class=\"m-l-auto\">\n        {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n        {{ context.c8y_DashboardHistory[0].author }}\n      </span>\n    </li>\n  </ng-container>\n</ul>\n","import { Component, inject, TemplateRef, ViewChild } from '@angular/core';\nimport { WidgetConfigService } from '../widget-config.service';\n\n@Component({\n  selector: 'c8y-widget-preview-wrapper',\n  template: '<ng-template #previewContent><ng-content></ng-content></ng-template>',\n  standalone: true,\n  imports: []\n})\nexport class WidgetPreviewWrapperComponent {\n  widgetConfigService = inject(WidgetConfigService);\n\n  @ViewChild('previewContent')\n  set previewSet(template: TemplateRef<any>) {\n    if (template) {\n      this.widgetConfigService.setPreview(template);\n      return;\n    }\n    this.widgetConfigService.setPreview(null);\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, hookRoute, hookTab, ViewContext } from '@c8y/ngx-components';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AddDashboardComponent } from './add-dashboard.component';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport {\n  CONTEXT_DASHBOARD_CONFIG,\n  ContextDashboardConfig,\n  DASHBOARD_DETAILS_OUTLET,\n  DashboardDetailsTabId\n} from './context-dashboard.model';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DashboardDetailsTabsFactory } from './dashboard-details-tabs.factory';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\nimport { TypeDashboardInfoComponent } from './type-dashboard-info/type-dashboard-info.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { AppearanceSettingsComponent } from './widget-config/appearance-settings.component';\nimport { WidgetConfigSectionComponent } from './widget-config/widget-config-section.component';\nimport { WidgetPreviewComponent } from './widget-config/widget-preview.component';\nimport { WidgetPreviewWrapperComponent } from './widget-config/widget-preview-wrapper.component';\n\nconst defaultConfig = {\n  allowFullscreen: true\n} as const satisfies ContextDashboardConfig;\n\n/**\n * Module for the Context Dashboard feature.\n * This module provides components and configurations for managing dashboards,\n * {@link ContextDashboardComponent} is the main component for displaying the dashboard context.\n * {@link WidgetConfigComponent} allows for configuring widgets within the dashboard.\n * {@link DashboardDetailComponent} provides detailed views of individual dashboards.\n */\n@NgModule({\n  imports: [\n    CoreModule,\n    TooltipModule,\n    PopoverModule,\n    AssetSelectorModule,\n    IconSelectorModule,\n    BsDropdownModule.forRoot(),\n    CollapseModule.forRoot(),\n    RouterModule,\n    AppearanceSettingsComponent,\n    TypeDashboardInfoComponent,\n    WidgetPreviewComponent,\n    WidgetConfigSectionComponent,\n    WidgetPreviewWrapperComponent,\n    ContextDashboardComponent,\n    WidgetConfigComponent,\n    DashboardDetailComponent,\n    AddDashboardComponent,\n    PasteDashboardActionComponent\n  ],\n  exports: [\n    ContextDashboardComponent,\n    WidgetConfigComponent,\n    DashboardDetailComponent,\n    TypeDashboardInfoComponent,\n    WidgetConfigSectionComponent,\n    AppearanceSettingsComponent,\n    WidgetPreviewWrapperComponent\n  ],\n  providers: [\n    {\n      provide: CONTEXT_DASHBOARD_CONFIG,\n      useValue: defaultConfig\n    },\n    hookTab(DashboardDetailsTabsFactory),\n    hookRoute([\n      {\n        path: DashboardDetailsTabId.GENERAL,\n        loadComponent: () =>\n          import('./dashboard-settings/dashboard-general-settings.component').then(\n            m => m.DashboardGeneralSettingsComponent\n          ),\n        outlet: DASHBOARD_DETAILS_OUTLET,\n        context: ViewContext.Dashboard\n      },\n      {\n        path: DashboardDetailsTabId.APPEARANCE,\n        loadComponent: () =>\n          import('./dashboard-settings/dashboard-appearance-settings.component').then(\n            m => m.DashboardAppearanceSettingsComponent\n          ),\n        outlet: DASHBOARD_DETAILS_OUTLET,\n        context: ViewContext.Dashboard\n      },\n      {\n        path: DashboardDetailsTabId.VERSIONHISTORY,\n        loadComponent: () =>\n          import('./dashboard-settings/dashboard-version-history.component').then(\n            m => m.DashboardVersionHistoryComponent\n          ),\n        outlet: DASHBOARD_DETAILS_OUTLET,\n        context: ViewContext.Dashboard\n      }\n    ])\n  ]\n})\nexport class ContextDashboardModule {\n  static config(config: ContextDashboardConfig = {}): ModuleWithProviders<ContextDashboardModule> {\n    return {\n      ngModule: ContextDashboardModule,\n      providers: [\n        {\n          provide: CONTEXT_DASHBOARD_CONFIG,\n          useValue: { ...defaultConfig, ...config }\n        },\n        hookRoute(config.routes || [])\n      ]\n    };\n  }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewContext, ActionBarFactory, ActionBarItem } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\n\nexport abstract class DashboardActionBarFactory implements ActionBarFactory {\n  protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n  routeChanges$: Observable<any>;\n\n  private contextDashboardService = inject(ContextDashboardService);\n\n  get(activeRoute: ActivatedRoute) {\n    const actions = [];\n    const data =\n      !activeRoute.parent || activeRoute.snapshot.data.context\n        ? activeRoute.snapshot.data\n        : activeRoute.parent.snapshot.data;\n    const { contextData } = data;\n    const canPaste =\n      contextData &&\n      data.context === this.targetContext &&\n      this.contextDashboardService.copyClipboard;\n\n    if (canPaste) {\n      actions.push({\n        priority: -10,\n        placement: 'more',\n        template: PasteDashboardActionComponent\n      } as ActionBarItem);\n    }\n\n    return actions;\n  }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { ContextData, PreviewService, TitleComponent, Widget } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { from, Subscription } from 'rxjs';\nimport { map, mergeMap, tap, toArray } from 'rxjs/operators';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\n\n@Component({\n  selector: 'c8y-device-info-dashboard-dashboard',\n  templateUrl: './device-info-dashboard.component.html',\n  imports: [TitleComponent, ContextDashboardComponent, AsyncPipe]\n})\nexport class DeviceInfoDashboardComponent implements CanDeactivateComponent {\n  isLoading = true;\n  title: string;\n  dashboardName = '';\n  widgetsList: Widget[];\n  currentContext: ContextData;\n  contextSubscription: Subscription;\n  widgetsSubscription: Subscription;\n  @ViewChild(ContextDashboardComponent, { static: false })\n  contextDashboard: ContextDashboardComponent;\n  protected readonly previewFeatureService = inject(PreviewService);\n  protected readonly previewEnabled$ =\n    this.previewFeatureService.getState$('ui.dm-dashboard-manager');\n\n  DEVICE_INFO_WIDGETS = [\n    {\n      name: 'deviceStatusWidget',\n      title: gettext('Device status'),\n      _x: 0,\n      _y: 0,\n      _height: 5,\n      _width: 8\n    },\n    {\n      name: 'Data points graph',\n      title: gettext('Device and communication'),\n      _x: 8,\n      _y: 0,\n      _height: 5,\n      _width: 16,\n      config: {\n        interval: 'hours',\n        aggregation: 'NONE',\n        realtime: true,\n        datapointsInitialDisplayLimit: 3,\n        datapoints: [\n          {\n            fragment: 'c8y_Battery',\n            series: 'level',\n            label: this.translateService.instant('Battery: level'),\n            unit: '%',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#5e07b3',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'rssi',\n            label: this.translateService.instant('Signal: RSSI'),\n            unit: 'dBm',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#a7d0f1',\n            __active: true\n          },\n          {\n            fragment: 'c8y_MemoryMeasurement',\n            series: 'Used',\n            label: this.translateService.instant('Memory: used'),\n            unit: 'MB',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#f75229',\n            __active: true\n          },\n          {\n            fragment: 'c8y_CPUMeasurement',\n            series: 'Workload',\n            label: this.translateService.instant('CPU: workload'),\n            unit: '%',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#b24f3e',\n            __active: true\n          },\n          {\n            fragment: 'c8y_NetworkStatistics',\n            series: 'Upload',\n            label: this.translateService.instant('Network: upload'),\n            unit: 'KB/s',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#88c039',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'RCSP',\n            label: this.translateService.instant('Signal: RCSP'),\n            renderType: 'min',\n            lineType: 'line',\n            color: '#5e2f19',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'RSCP',\n            label: this.translateService.instant('Signal: RSCP'),\n            renderType: 'min',\n            lineType: 'line',\n            color: '#5e2f19',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'RSRP',\n            label: this.translateService.instant('Signal: RSRP'),\n            renderType: 'min',\n            lineType: 'line',\n            color: '#43ba3b',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'RSRQ',\n            label: this.translateService.instant('Signal: RSRQ'),\n            renderType: 'min',\n            lineType: 'line',\n            color: '#14b0b3',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'ber',\n            label: this.translateService.instant('Signal: BER'),\n            unit: '%',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#44ff33',\n            __active: true\n          },\n          {\n            fragment: 'c8y_SignalStrength',\n            series: 'ECN0',\n            label: this.translateService.instant('Signal: ECN0'),\n            renderType: 'min',\n            lineType: 'line',\n            color: '#873efa',\n            __active: true\n          },\n          {\n            fragment: 'c8y_NetworkStatistics',\n            series: 'Download',\n            label: this.translateService.instant('Network: download'),\n            unit: 'KB/s',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#f27a45',\n            __active: true\n          },\n          {\n            fragment: 'c8y_MemoryMeasurement',\n            series: 'Total',\n            label: this.translateService.instant('Memory: total'),\n            unit: 'MB',\n            renderType: 'min',\n            lineType: 'line',\n            color: '#dadd8c',\n            __active: true\n          }\n        ],\n        alarmsEventsConfigs: [\n          {\n            label: 'c8y_LocationUpdate',\n            timelineType: 'EVENT',\n            color: '#6f6cd0',\n            filters: {\n              type: 'c8y_LocationUpdate'\n            },\n            __active: true\n          },\n          {\n            label: 'c8y_UnavailabilityAlarm',\n            timelineType: 'ALARM',\n            color: '#375bf2',\n            filters: {\n              type: 'c8y_UnavailabilityAlarm'\n            },\n            __active: true\n          }\n        ]\n      }\n    },\n    {\n      name: 'Asset Properties',\n      title: gettext('Device data'),\n      config: {\n        options: {\n          properties: [\n            {\n              id: 'c8ySchema!!id',\n              __active: true,\n              keyPath: ['id'],\n              type: 'string',\n              label: 'ID'\n            },\n            {\n              id: 'c8ySchema!!name',\n              __active: true,\n              keyPath: ['name'],\n              type: 'string',\n              label: 'Name'\n            },\n            {\n              id: 'c8ySchema!!type',\n              __active: true,\n              keyPath: ['type'],\n              type: 'string',\n              label: 'Type'\n            },\n            {\n              id: 'c8ySchema!!lastUpdated',\n              __active: true,\n              keyPath: ['lastUpdated'],\n              type: 'string',\n              label: 'Last Updated'\n            },\n            {\n              id: 'c8ySchema!!creationTime',\n              __active: true,\n              keyPath: ['creationTime'],\n              type: 'string',\n              label: 'Creation Time'\n            }\n          ],\n          allowDisplayAndEditKnownProperties: false,\n          hiddenPropertiesKeyPaths: ['owner']\n        }\n      },\n      _x: 0,\n      _y: 5,\n      _height: 8,\n      _width: 8\n    },\n    {\n      name: 'Alarm list',\n      title: gettext('Active, critical alarms'),\n      _x: 8,\n      _y: 5,\n      _height: 4,\n      _width: 8,\n      config: {\n        widgetId: 'Asset Alarms',\n        displayMode: 'config',\n        aggregation: null,\n        isAutoRefreshEnabled: true,\n        refreshInterval: 30_000,\n        refreshOption: 'live',\n        dateTimeContext: {\n          dateFrom: new Date(0).toISOString(),\n          dateTo: new Date().toISOString(),\n          interval: 'custom'\n        },\n        options: {\n          orderMode: 'ACTIVE_FIRST',\n          severity: { CRITICAL: true },\n          status: {\n            ACTIVE: true,\n            ACKNOWLEDGED: false,\n            CLEARED: false\n          },\n          types: []\n        }\n      }\n    },\n    {\n      name: 'deviceGroupAssignmentWidget',\n      title: gettext('Group assignment'),\n      _x: 16,\n      _y: 5,\n      _height: 4,\n      _width: 8\n    },\n    {\n      componentId: 'Map',\n      title: gettext('Location'),\n      _x: 8,\n      _y: 9,\n      _height: 4,\n      _width: 16\n    }\n  ] as Widget[];\n\n  constructor(\n    private router: ActivatedRoute,\n    private widgetService: WidgetService,\n    private translateService: TranslateService,\n    private inventoryService: InventoryService\n  ) {}\n\n  ngOnInit() {\n    this.contextSubscription = this.router.parent.data\n      .pipe(\n        tap(({ contextData }) => {\n          const contextNameValid = contextData.name && contextData.name.trim();\n          this.title = contextNameValid ? contextData.name : contextData.id;\n          this.dashboardName = `${contextData.id}-device-info`;\n        })\n      )\n      .subscribe(async data => {\n        this.currentContext = data as ContextData;\n        this.addDeviceTargetForDP(data.contextData.id, data.contextData.name);\n      });\n\n    this.widgetsSubscription = from(this.DEVICE_INFO_WIDGETS)\n      .pipe(\n        mergeMap(widget => this.widgetService.mapLegacy(widget)),\n        map(widget => {\n          let device = this.router.parent.snapshot.data.contextData;\n          if (device) {\n            device = {\n              name: device.name,\n              id: device.id\n            };\n          }\n          return {\n            ...widget,\n            config: {\n              ...widget.config,\n              device\n            }\n          };\n        }),\n        toArray()\n      )\n      .subscribe(async data => {\n        await this.filterSupportedSeriesForDP(this.currentContext.contextData.id, data);\n        this.widgetsList = data;\n        this.isLoading = false;\n      });\n  }\n\n  addDeviceTargetForDP(id: string | number, name: string) {\n    const dpWidget = this.DEVICE_INFO_WIDGETS.filter(item => item.name == 'Data points graph')[0];\n    // Add target to dataPoint config\n    dpWidget.config.datapoints.map(item => (item['__target'] = { id, name }));\n    // Add target to alarmEvents Config\n    dpWidget.config.alarmsEventsConfigs.map(item => (item['__target'] = { id, name }));\n  }\n\n  async filterSupportedSeriesForDP(id: string | number, widgets: Widget[]) {\n    const supportedMeasurements = await this.inventoryService.getMeasurementsAndSeries(id);\n    const isDataPointSupported = dp =>\n      supportedMeasurements.some(\n        ({ fragment, series }) => dp.fragment === fragment && dp.series === series\n      );\n    const dpWidget = widgets.find(({ name }) => name === 'Data points graph');\n    dpWidget.config.datapoints = dpWidget.config.datapoints.filter(isDataPointSupported);\n  }\n\n  ngOnDestroy() {\n    this.widgetsSubscription.unsubscribe();\n    this.contextSubscription.unsubscribe();\n  }\n\n  canDeactivate(): Promise<boolean> {\n    return this.contextDashboard?.canDeactivate();\n  }\n}\n","@if (!isLoading) {\n  <div>\n    <c8y-title>\n      {{ title }}\n    </c8y-title>\n    <c8y-context-dashboard\n      [translateWidgetTitle]=\"true\"\n      [name]=\"dashboardName\"\n      [context]=\"currentContext\"\n      [defaultWidgets]=\"widgetsList\"\n      [canDelete]=\"false\"\n      [hideAvailability]=\"true\"\n      [canCopy]=\"false\"\n      [disabled]=\"previewEnabled$ | async\"\n    ></c8y-context-dashboard>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { inject, NgModule } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { CoreModule, hookRoute, PreviewService, ViewContext } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { map, of, switchMap, take } from 'rxjs';\nimport { CanDeactivateComponent, ContextDashboardType } from '../context-dashboard.model';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DeviceInfoDashboardComponent } from './device-info-dashboard.component';\n\nconst canActivateDeviceInfo: CanActivateFn = (route, _) => {\n  const previewFeatureService = inject(PreviewService);\n  const contextDashboardService = inject(ContextDashboardService);\n\n  return previewFeatureService.getState$('ui.dm-dashboard-manager').pipe(\n    switchMap(isPreviewEnabled => {\n      return isPreviewEnabled\n        ? contextDashboardService\n            .activateDashboards(route, [ContextDashboardType.Device, ContextDashboardType.Type])\n            .pipe(map(tabs => !(Array.isArray(tabs) && tabs.length > 0)))\n        : of(true);\n    }),\n    take(1)\n  );\n};\n\n@NgModule({\n  imports: [CommonModule, CoreModule, ContextDashboardModule, DeviceInfoDashboardComponent],\n  exports: [],\n  providers: [\n    hookRoute({\n      context: ViewContext.Device,\n      path: 'device-info',\n      component: DeviceInfoDashboardComponent,\n      canActivate: [canActivateDeviceInfo],\n      label: gettext('Info'),\n      priority: 10000,\n      icon: 'asterisk',\n      canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n      rootContext: ViewContext.Dashboard\n    })\n  ]\n})\nexport class DeviceInfoDashboardModule {}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Widget, TitleComponent, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\n\n@Component({\n  selector: 'c8y-device-management-home-dashboard',\n  templateUrl: './device-management-home-dashboard.component.html',\n  imports: [TitleComponent, ContextDashboardComponent, C8yTranslatePipe]\n})\nexport class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {\n  widgets = [];\n  dashboardName = 'home-dm1';\n  defaultWidgets = [\n    {\n      name: defaultWidgetIds.DEVICE_MANAGEMENT_WELCOME,\n      title: gettext('Welcome to Device Management'),\n      _x: 0,\n      _y: 0,\n      _height: 8,\n      _width: 24,\n      classes: { 'panel-title-hidden': true }\n    }\n  ] as Partial<Widget>[] as Widget[];\n\n  @ViewChild(ContextDashboardComponent, { static: true })\n  contextDashboard: ContextDashboardComponent;\n\n  constructor(private widgetService: WidgetService) {}\n\n  ngOnInit() {\n    this.defaultWidgets.map(async widget => {\n      await this.widgetService\n        .mapLegacy(widget)\n        .then(transformedWidget => this.widgets.push(transformedWidget));\n    });\n  }\n\n  canDeactivate(): Promise<boolean> {\n    return this.contextDashboard?.canDeactivate();\n  }\n}\n","<c8y-title>\n  {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n  [name]=\"dashboardName\"\n  [defaultWidgets]=\"defaultWidgets\"\n  [canDelete]=\"false\"\n  [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookNavigator, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceManagementHomeDashboardComponent } from './device-management-home-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    CoreModule,\n    ContextDashboardModule,\n    DeviceManagementHomeDashboardComponent\n  ],\n  exports: [],\n  providers: [\n    hookRoute({\n      path: 'home',\n      component: DeviceManagementHomeDashboardComponent,\n      canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n      rootContext: ViewContext.Dashboard\n    }),\n    hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/home' })\n  ]\n})\nexport class DeviceManagementHomeDashboardModule {}\n","import { Component, inject } from '@angular/core';\nimport { WIDGET_CONTENT_CLASSES, WIDGET_HEADER_CLASSES } from '../context-dashboard.model';\nimport { WidgetConfigComponent } from '../widget-config.component';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { NgIf } from '@angular/common';\nimport { WidgetPreviewComponent } from './widget-preview.component';\n\n@Component({\n  standalone: true,\n  imports: [AppearanceSettingsComponent, NgIf, WidgetPreviewComponent],\n  selector: 'c8y-widget-config-appearance',\n  templateUrl: 'widget-config-appearance.component.html'\n})\nexport class WidgetConfigAppearanceComponent {\n  widgetConfig = inject(WidgetConfigComponent);\n  possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n}\n","<div class=\"row\">\n  <div class=\"col-xs-6\">\n    <c8y-appearance-settings\n      [(themeClass)]=\"widgetConfig.styling.contentClass\"\n      [(headerClass)]=\"widgetConfig.styling.headerClass\"\n      [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n      [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n      [defaultThemeClass]=\"widgetConfig.defaultStyling.contentClass\"\n      [defaultHeaderClass]=\"widgetConfig.defaultStyling.headerClass\"\n    ></c8y-appearance-settings>\n  </div>\n  <div class=\"col-xs-6 sticky-header-top-0\">\n    <c8y-widget-preview\n      style=\"height: calc(100vh - 382px)\"\n      [previewClasses]=\"widgetConfig.getStyle(true)\"\n    ></c8y-widget-preview>\n  </div>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport {\n  ConfigModeControlsComponent,\n  GlobalContextEvent,\n  GlobalContextState,\n  GlobalContextWidgetWrapperComponent,\n  PresetDefinition,\n  PresetName,\n  WidgetControlsPresetConfig,\n  WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { isEmpty } from 'lodash-es';\nimport { WidgetConfigService } from '../widget-config.service';\nimport { WidgetConfigFeedbackComponent } from './widget-config-feedback.component';\n\n@Component({\n  selector: 'c8y-global-context-section',\n  templateUrl: './global-context-section.component.html',\n  standalone: true,\n  imports: [\n    GlobalContextWidgetWrapperComponent,\n    ConfigModeControlsComponent,\n    AsyncPipe,\n    WidgetConfigFeedbackComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class GlobalContextSectionComponent {\n  widgetConfigService = inject(WidgetConfigService);\n\n  /** @deprecated Use `controls` instead */\n  @Input()\n  widgetControls: WidgetControlsPresetConfig | WidgetControls;\n\n  /** Controls configuration (preset name or full definition) */\n  @Input()\n  controls: PresetName | PresetDefinition;\n\n  /** Whether to use the new controls-based approach */\n  get useControls(): boolean {\n    return !!this.controls;\n  }\n\n  onGlobalContext(event: GlobalContextEvent): void {\n    if (isEmpty(event.diff)) {\n      return;\n    }\n    this.widgetConfigService.updateConfig(event.context);\n  }\n\n  onConfigChange(event: { context: GlobalContextState; diff: GlobalContextState }): void {\n    if (isEmpty(event.diff)) {\n      return;\n    }\n    this.widgetConfigService.updateConfig(event.context);\n  }\n}\n","<div>\n  @if (useControls) {\n    <c8y-config-mode-controls\n      [controls]=\"controls\"\n      [config]=\"widgetConfigService.currentConfig$ | async\"\n      (configChange)=\"onConfigChange($event)\"\n    ></c8y-config-mode-controls>\n  } @else if (widgetControls) {\n    <c8y-global-context-widget-wrapper\n      [widgetControls]=\"widgetControls\"\n      [displayMode]=\"'config'\"\n      [config]=\"widgetConfigService.currentConfig$ | async\"\n      (globalContextChange)=\"onGlobalContext($event)\"\n    ></c8y-global-context-widget-wrapper>\n  }\n</div>\n\n<c8y-widget-config-feedback>\n  <span class=\"tag tag--info chip text-12 m-4\">\n    @if (widgetConfigService.currentConfig.displayMode === 'config') {\n      <span\n        class=\"text-truncate\"\n        [title]=\"'The time context can only get changed in the configuration.' | translate\"\n        translate\n      >\n        Configuration\n      </span>\n    }\n    @if (widgetConfigService.currentConfig.displayMode === 'dashboard') {\n      <span\n        [title]=\"'The widget is bound to the global time context.' | translate\"\n        translate\n      >\n        Dashboard\n      </span>\n    }\n    @if (widgetConfigService.currentConfig.displayMode === 'view_and_config') {\n      <span\n        [title]=\"'The time context can be configured in the widget view mode.' | translate\"\n        translate\n      >\n        Configuration and widget view\n      </span>\n    }\n  </span>\n</c8y-widget-config-feedback>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","map","i1.ContextDashboardService","i5","i6.DashboardDetailService","i1.DashboardOriginatorService","i2.DashboardCaretakerService","tap","mergeMap","shareReplay","rxjsMerge","merge","i1.WidgetConfigSectionService","i1.WidgetService","i3.ContextDashboardService","i4.WidgetConfigService","filter","i4.WidgetService","i7.DashboardEditModeService","i2.ContextDashboardService","i2.WidgetService","switchMap"],"mappings":"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"}