@c8y/ngx-components 1006.6.36 → 1006.6.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/bundles/c8y-ngx-components-connectivity.umd.js +1 -1
  2. package/bundles/c8y-ngx-components-connectivity.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-connectivity.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-connectivity.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-context-dashboard.umd.js +1 -1
  6. package/bundles/c8y-ngx-components-context-dashboard.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-context-dashboard.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-context-dashboard.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components-repository.umd.js +1 -1
  10. package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
  12. package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
  13. package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
  14. package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
  15. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +1 -1
  16. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
  17. package/bundles/c8y-ngx-components.umd.js +400 -131
  18. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  19. package/bundles/c8y-ngx-components.umd.min.js +2 -2
  20. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  21. package/c8y-ngx-components.d.ts +90 -87
  22. package/c8y-ngx-components.metadata.json +1 -1
  23. package/connectivity/c8y-ngx-components-connectivity.metadata.json +1 -1
  24. package/context-dashboard/c8y-ngx-components-context-dashboard.metadata.json +1 -1
  25. package/core/authentication/new-password.component.d.ts +8 -6
  26. package/core/docs/guide-docs.component.d.ts +25 -3
  27. package/core/forms/validation-pattern.d.ts +1 -0
  28. package/core/i18n/force-html-translate.directive.d.ts +32 -0
  29. package/core/login/change-password.component.d.ts +1 -1
  30. package/core/login/login.service.d.ts +15 -2
  31. package/core/login/password-strength-validator.directive.d.ts +9 -0
  32. package/core/login/strength-validator-service.d.ts +7 -0
  33. package/core/user/user-edit.component.d.ts +4 -2
  34. package/esm2015/c8y-ngx-components.js +90 -87
  35. package/esm2015/connectivity/impact/impact-provider-settings.component.js +2 -2
  36. package/esm2015/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
  37. package/esm2015/core/authentication/new-password.component.js +15 -20
  38. package/esm2015/core/dashboard/widgets-dashboard.component.js +2 -2
  39. package/esm2015/core/docs/guide-docs.component.js +69 -4
  40. package/esm2015/core/forms/validation-pattern.js +2 -1
  41. package/esm2015/core/i18n/force-html-translate.directive.js +99 -0
  42. package/esm2015/core/i18n/i18n.module.js +5 -3
  43. package/esm2015/core/i18n/pattern-messages.data.js +2 -2
  44. package/esm2015/core/login/change-password.component.js +5 -5
  45. package/esm2015/core/login/credentials.component.js +2 -2
  46. package/esm2015/core/login/login.module.js +4 -2
  47. package/esm2015/core/login/login.service.js +40 -6
  48. package/esm2015/core/login/password-strength-validator.directive.js +32 -0
  49. package/esm2015/core/login/strength-validator-service.js +28 -0
  50. package/esm2015/core/user/user-edit.component.js +10 -5
  51. package/esm2015/repository/configuration/configuration-list.component.js +2 -2
  52. package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
  53. package/esm5/c8y-ngx-components.js +90 -87
  54. package/esm5/connectivity/impact/impact-provider-settings.component.js +2 -2
  55. package/esm5/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
  56. package/esm5/core/authentication/new-password.component.js +21 -25
  57. package/esm5/core/dashboard/widgets-dashboard.component.js +2 -2
  58. package/esm5/core/docs/guide-docs.component.js +72 -4
  59. package/esm5/core/forms/validation-pattern.js +2 -1
  60. package/esm5/core/i18n/force-html-translate.directive.js +105 -0
  61. package/esm5/core/i18n/i18n.module.js +5 -3
  62. package/esm5/core/i18n/pattern-messages.data.js +2 -2
  63. package/esm5/core/login/change-password.component.js +5 -5
  64. package/esm5/core/login/credentials.component.js +2 -2
  65. package/esm5/core/login/login.module.js +4 -2
  66. package/esm5/core/login/login.service.js +43 -6
  67. package/esm5/core/login/password-strength-validator.directive.js +38 -0
  68. package/esm5/core/login/strength-validator-service.js +29 -0
  69. package/esm5/core/user/user-edit.component.js +19 -9
  70. package/esm5/repository/configuration/configuration-list.component.js +2 -2
  71. package/esm5/sensor-phone/sensor-phone-modal.component.js +2 -2
  72. package/fesm2015/c8y-ngx-components-connectivity.js +1 -1
  73. package/fesm2015/c8y-ngx-components-connectivity.js.map +1 -1
  74. package/fesm2015/c8y-ngx-components-context-dashboard.js +1 -1
  75. package/fesm2015/c8y-ngx-components-context-dashboard.js.map +1 -1
  76. package/fesm2015/c8y-ngx-components-repository.js +1 -1
  77. package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
  78. package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
  79. package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
  80. package/fesm2015/c8y-ngx-components.js +281 -40
  81. package/fesm2015/c8y-ngx-components.js.map +1 -1
  82. package/fesm5/c8y-ngx-components-connectivity.js +1 -1
  83. package/fesm5/c8y-ngx-components-connectivity.js.map +1 -1
  84. package/fesm5/c8y-ngx-components-context-dashboard.js +1 -1
  85. package/fesm5/c8y-ngx-components-context-dashboard.js.map +1 -1
  86. package/fesm5/c8y-ngx-components-repository.js +1 -1
  87. package/fesm5/c8y-ngx-components-repository.js.map +1 -1
  88. package/fesm5/c8y-ngx-components-sensor-phone.js +1 -1
  89. package/fesm5/c8y-ngx-components-sensor-phone.js.map +1 -1
  90. package/fesm5/c8y-ngx-components.js +315 -49
  91. package/fesm5/c8y-ngx-components.js.map +1 -1
  92. package/locales/de.po +71 -60
  93. package/locales/es.po +120 -85
  94. package/locales/fr.po +107 -72
  95. package/locales/ja_JP.po +89 -78
  96. package/locales/ko.po +92 -57
  97. package/locales/locales.pot +9 -9
  98. package/locales/nl.po +95 -60
  99. package/locales/pl.po +88 -53
  100. package/locales/pt_BR.po +174 -138
  101. package/locales/ru.po +120 -85
  102. package/locales/zh_CN.po +87 -52
  103. package/package.json +2 -2
  104. package/repository/c8y-ngx-components-repository.metadata.json +1 -1
  105. package/sensor-phone/c8y-ngx-components-sensor-phone.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-context-dashboard.js","sources":["ng://@c8y/ngx-components/context-dashboard/context-dashboard.model.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.service.ts","ng://@c8y/ngx-components/context-dashboard/device-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-detail.component.ts","ng://@c8y/ngx-components/context-dashboard/widget.service.ts","ng://@c8y/ngx-components/context-dashboard/widget-config.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/group-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-actions.factory.ts","ng://@c8y/ngx-components/context-dashboard/appearance-settings.component.ts","ng://@c8y/ngx-components/context-dashboard/widget-preview.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/welcome/welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/legacy-welcome/legacy-welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { Widget, DynamicComponentDefinition, Route, gettext } from '@c8y/ngx-components';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed.\n */\n settings?: {\n /**\n * Avoids to show the widget in the \"add widget\" modal\n */\n noNewWidgets?: boolean;\n ng1?: {\n options: {\n /**\n * Set this to false, to hide the device/group selector\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n noDeviceTarget?: boolean;\n /**\n * Set this to false to only select devices\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n groupsSelectable?: boolean;\n };\n /**\n * The context from the device selector.\n */\n context?: {\n id?: string;\n name?: string;\n };\n };\n /**\n * Any other information you want to pass to the config template\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;\n name?: string;\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}\n\nexport interface ContextDashboard {\n icon?: string;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n children?: {\n [id: string]: Widget;\n };\n}\n\nexport enum ContextDashboardType {\n Device = 'device',\n DeviceType = 'type',\n Group = 'group',\n Named = 'name'\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];\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Light`style`'),\n class: 'panel-content-light',\n description: gettext('The widget is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext(\n 'The widget is styled with a transparent background and therefore is border-less.'\n )\n },\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\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext('The dashboard is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`theme`'),\n class: 'dashboard-theme-transparent',\n description: gettext(\n 'The dashboard is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled with the main brand color.')\n }\n];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, UserService } from '@c8y/client';\nimport {\n AppStateService,\n getActivatedRoute,\n gettext,\n ModalService,\n Status,\n TabsService,\n ViewContext,\n Widget,\n Permissions\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { assign, pick, some, keys, keyBy, has, get, forEach, cloneDeep } from 'lodash-es';\nimport { from, of } from 'rxjs';\nimport {\n catchError,\n filter,\n map,\n mergeAll,\n mergeMap,\n tap,\n toArray,\n throwIfEmpty\n} from 'rxjs/operators';\nimport {\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType\n} from './context-dashboard.model';\n\n@Injectable()\nexport class ContextDashboardService {\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private currentContextRoute: string;\n private _formDisabled = true;\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = 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 user: UserService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async create(dashboardCfg: ContextDashboard, contextOrName: { contextData: any } | string) {\n let id;\n let dashboardType;\n if (typeof contextOrName === 'string') {\n id = contextOrName as string;\n dashboardType = ContextDashboardType.Named;\n } else {\n id = contextOrName.contextData.id as string;\n dashboardType = this.getDashboardTypeFromViewContext(dashboardCfg, contextOrName);\n }\n\n const dashboard: Partial<IManagedObject> = {};\n assign(dashboard, { c8y_Dashboard: dashboardCfg });\n\n const value =\n dashboardType === ContextDashboardType.DeviceType ? dashboardCfg.deviceTypeValue : id;\n\n const fragmentKey = this.createFragmentKey(dashboardType, value);\n dashboard[fragmentKey] = {};\n\n if (this.shouldSetGlobal(dashboard)) {\n assign(dashboard, { c8y_Global: {} });\n }\n const { data } = dashboardType === ContextDashboardType.Group || dashboardType === ContextDashboardType.Device\n ? await this.inventory.childAdditionsCreate(dashboard, id)\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n const { data } = await this.inventory.detail(dashboardMO);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(dashboard: ContextDashboardManagedObject) {\n const cleanedDashboard = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id']));\n cleanedDashboard.c8y_Global = this.shouldSetGlobal(dashboard);\n const { data } = await this.inventory.update(cleanedDashboard);\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n try {\n let msg = 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 {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`)\n );\n this.tabs.remove(tabToRemove);\n this.tabs.refresh();\n } catch (ex) {\n // intended empty\n }\n }\n\n activateDashboards(route: ActivatedRouteSnapshot, types: ContextDashboardType[]) {\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 return this.getTabs$(route.data.contextData, types);\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[]) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create({children}, name)\n )\n )\n );\n }\n\n async refreshTabs(dashboardMO: ContextDashboardManagedObject) {\n if (!this.isNamed(dashboardMO)) {\n const tabToUpdate = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboardMO.id}`)\n );\n\n const data = await this.detail(dashboardMO);\n if (tabToUpdate) {\n const { icon, priority, name } = data.c8y_Dashboard;\n tabToUpdate.icon = icon;\n tabToUpdate.priority = priority;\n tabToUpdate.label = name;\n }\n this.tabs.refresh();\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', 'dashboard', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n canEditDashboard(mo) {\n return this.permissions.canEdit(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'], mo);\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 isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.DeviceType}${\n this.INDEX_SPLIT\n }`\n ).test(prop)\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(style => style && new RegExp(styleName, 'i').test(style.class));\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 private getDashboard$(\n dashboardIdOrName,\n dashboardType: ContextDashboardType[],\n mo?: IManagedObject\n ) {\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}${\n this.INDEX_SPLIT\n }${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n private getTabs$(mo: ContextDashboardManagedObject, dashboardType: ContextDashboardType[]) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n this.setBaseContextRoute(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n map(dashboard => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard)),\n toArray()\n );\n }\n\n private getContextDashboards$(requests: Array<Promise<IResultList<IManagedObject>>>) {\n return from(requests).pipe(\n mergeAll(),\n mergeMap(response => response.data as ContextDashboardManagedObject[]));\n }\n\n private setBaseContextRoute(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n const type = dashboardType.includes(ContextDashboardType.Device)\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n this.currentContextRoute = `${type}/${mo.id}`;\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 removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): 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 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) {\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 });\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}${\n this.INDEX_SPLIT\n }${name}`,\n pageSize: 1\n });\n }\n\n private getContextDashboards(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n return dashboardType.map((type: ContextDashboardType) =>\n this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${\n type === ContextDashboardType.DeviceType ? mo.type : mo.id\n }`,\n pageSize: this.DEFAULT_PAGESIZE\n })\n );\n }\n\n private getDashboardTypeFromViewContext(dashboardCfg, context) {\n let dashboardType;\n if (context.context === ViewContext.Device) {\n dashboardType = dashboardCfg.deviceType\n ? ContextDashboardType.DeviceType\n : ContextDashboardType.Device;\n }\n if (context.context === ViewContext.Group) {\n dashboardType = ContextDashboardType.Group;\n }\n return dashboardType;\n }\n\n private createFragmentKey(contextDashboardType: ContextDashboardType, value: string) {\n return [this.FRAGMENT_NAME, contextDashboardType, value].join(this.INDEX_SPLIT);\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>) {\n if (this.isNamed(dashboard) || this.isDeviceType(dashboard)) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class DeviceDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.DeviceType\n ]);\n }\n}\n","import { Component, Inject, ViewChild } from '@angular/core';\nimport { ICON_LIST } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { clone } from 'lodash-es';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent {\n @ViewChild('dashboardDetailForm', { static: true }) dashboardDetailForm: NgForm;\n dashboard: ContextDashboard;\n current: ContextDashboard;\n deviceType: string;\n isNamedDashboard: boolean;\n icons: string[];\n filteredIcons: string[];\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n possibleStyling = { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES };\n result: Promise<ContextDashboard> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 10000;\n readonly DEFAULT_DASHBOARD_NAME = 'Dashboard';\n\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n @Inject(ICON_LIST) iconList: string[],\n private contextDashboardService: ContextDashboardService\n ) {\n this.icons = iconList;\n this.filteredIcons = iconList;\n }\n\n ngAfterContentInit(): void {\n const defaultDashboardCfg = {\n name: this.DEFAULT_DASHBOARD_NAME,\n priority: this.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType\n };\n\n if (this.dashboard) {\n this.current = clone(this.dashboard);\n this.setDashboardStyle();\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailForm.form.markAsDirty();\n }\n }\n\n save() {\n this.dashboard.classes = { [this.styling.themeClass]: true };\n this.dashboard.widgetClasses = { [this.styling.headerClass]: true };\n this._save(this.dashboard);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getDashboardPreviewStyle() {\n const cssClasses = {};\n cssClasses[this.styling.headerClass] = true;\n cssClasses[this.styling.themeClass] = true;\n return cssClasses;\n }\n\n selectIcon(icon) {\n this.dashboard.icon = icon;\n this.dashboardDetailForm.form.markAsDirty();\n }\n\n updateFiltered(term: string) {\n if (term) {\n const search = new RegExp(term, 'i');\n this.filteredIcons = this.icons.filter(val => search.test(val));\n } else {\n this.filteredIcons = this.icons;\n }\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { sortBy, cloneDeep } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition } 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 constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig\n ) {}\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById$(componentId).toPromise();\n }\n\n getWidgetDefinitions() {\n const translatedComponents = Array.from(this.dynamicComponentService.state).map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n return cloneDeep(sortBy(translatedComponents, 'label').filter(this.moduleConfig.widgetFilter));\n }\n}\n","import { Component, OnDestroy } from '@angular/core';\nimport { DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\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 possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n\n get isEdit() {\n return !!this.current;\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;\n private _cancel;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngAfterContentInit(): 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 if (this.mo.c8y_Dashboard.classes) {\n this.styling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses,\n ...(this.isEdit ? this.current.data.classes : {})\n });\n this.defaultStyling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n });\n }\n }\n\n save() {\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (this.widgetConfig && this.widgetConfig.device) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, 'settings'),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\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\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\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 changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\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 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) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n\n const styles = Object.keys(setClasses).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\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","import { Component, HostBinding, Inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertService,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardSettings,\n DynamicComponentDefinition,\n gettext,\n Widget,\n WidgetChange\n} from '@c8y/ngx-components';\nimport { cloneDeep, findIndex, get, keyBy, omit, values } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n CONTEXT_DASHBOARD_CONFIG,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\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})\nexport class ContextDashboardComponent implements OnInit, OnDestroy {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle: boolean = false;\n @Input()\n disabled: boolean = false;\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canDelete: boolean = true;\n @Input()\n isLoading: boolean = true;\n\n @HostBinding('class')\n class = '';\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n\n private dataSub: Subscription;\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 bsModal: BsModalService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\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 if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n await this.contextDashboardService.update(this.mo);\n this.onLoad();\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n */\n async updateDashboardChildren(child: DashboardChildChange) {\n const { children } = child;\n const dashboardMO: ContextDashboardManagedObject = this.mo;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n dashboardMO.c8y_Dashboard.children = mappedChildren;\n return this.contextDashboardService.update(dashboardMO);\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 }\n\n /**\n * Edits the current dashboard\n */\n async editDashboard() {\n const initialState = {\n dashboard: this.dashboard,\n deviceType: this.context.type,\n isNamedDashboard: this.contextDashboardService.isNamed(this.mo)\n };\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardMO = cloneDeep(this.mo);\n dashboardMO.c8y_Dashboard = await modal.result;\n await this.contextDashboardService.update(dashboardMO);\n await this.contextDashboardService.refreshTabs(dashboardMO);\n this.onLoad();\n modal.close();\n } catch (ex) {\n // intended empty\n }\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 initialState = {\n mo: this.mo,\n context: this.context,\n selected: cloneDeep(selected)\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n this.mo.c8y_Dashboard.children[newWidget.id] = newWidget;\n this.contextDashboardService.update(this.mo);\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n modal.close();\n } catch (ex) {\n // intended empty\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.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 deleteWidget(change: WidgetChange) {\n const { widget, source } = change;\n delete this.mo.c8y_Dashboard.children[widget.id];\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n // using setTimeout to give the component the chance to remove it.\n setTimeout(() => {\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child);\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 /**\n * Changes the dashboard settings to frozen or vice versa.\n * @param settings The current settings of the dashboard.\n */\n async toggleFreeze(settings: DashboardSettings) {\n this.toggleIsFrozenFlag(settings);\n try {\n await this.contextDashboardService.update(this.mo);\n if (this.dashboard.isFrozen) {\n this.alert.success(gettext('Your dashboard is locked now.'));\n } else {\n this.alert.success(gettext('Your dashboard is unlocked now.'));\n }\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleIsFrozenFlag(settings);\n }\n }\n\n private toggleIsFrozenFlag(settings: DashboardSettings) {\n settings.isFrozen = !settings.isFrozen;\n this.dashboard.isFrozen = settings.isFrozen;\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard }) => {\n this.context = this.route.parent.snapshot.data.contextData;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(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.onLoad();\n });\n }\n\n private async onLoad() {\n const canEditDashboard = await this.contextDashboardService.canEditDashboard(this.mo);\n this.disabled = !canEditDashboard;\n const dashboardChildren = cloneDeep(this.mo.c8y_Dashboard.children);\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard.classes\n };\n\n this.widgets = await Promise.all<Widget>(\n values(dashboardChildren).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n return this.mapLegacy(widget);\n })\n );\n this.class = Object.keys(dashboardClasses).join(' ');\n this.isLoading = false;\n }\n\n private mergeWidgetClasses(widget) {\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 ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private async mapLegacy(widget): Promise<Widget> {\n const cmp = await this.widgetService.getWidgetDefinition(widget.componentId || widget.name);\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 } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class GroupDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, ActionFactory, gettext, ViewContext, Permissions } from '@c8y/ngx-components';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\n@Injectable()\nexport class DashboardActionsFactory implements ActionFactory {\n constructor(\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private bsModal: BsModalService,\n private permissions: Permissions\n ) {}\n\n async get(activatedRoute: ActivatedRoute): Promise<Action[]> {\n const context =\n !activatedRoute.parent || activatedRoute.snapshot.data.context\n ? activatedRoute.snapshot.data\n : activatedRoute.parent.snapshot.data;\n const canEditDashboard = await this.isEnabled(context);\n return [\n {\n label: gettext('Add dashboard'),\n priority: 2500,\n action: () => this.addDashboard(context),\n disabled: !canEditDashboard\n }\n ];\n }\n\n async addDashboard(context) {\n let initialState: { deviceType: string };\n\n if (context.context === ViewContext.Device) {\n initialState = {\n deviceType: context.contextData.type\n };\n }\n\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardCfg = await modal.result;\n const dashboardMO: ContextDashboardManagedObject = await this.contextDashboardService.create(\n dashboardCfg,\n context\n );\n await this.contextDashboardService.navigateToDashboard(dashboardMO);\n modal.close();\n } catch (ex) {\n // intended emptys\n }\n }\n\n private async isEnabled(context) {\n if (context.contextData && context.contextData.id) {\n return (\n (await this.permissions.canEdit(\n ['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'],\n context.contextData\n )) && [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n return (\n this.permissions.hasAnyRole(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']) &&\n [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { ControlContainer, NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html',\n viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass: string = 'dashboard-theme-light';\n @Input()\n headerClass: string = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\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","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport {\n HOOK_ONCE_ROUTE,\n ViewContext,\n CoreModule,\n HOOK_ACTION\n} from '@c8y/ngx-components';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { CONTEXT_DASHBOARD_CONFIG, ContextDashboardConfig } from './context-dashboard.model';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { DashboardActionsFactory } from './dashboard-actions.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\n\nconst defaultConfig = {\n allowFullscreen: true,\n widgetFilter({ data }) {\n return !(data && data.settings && data.settings.noNewWidgets);\n },\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n }\n ]\n};\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent\n ],\n imports: [CoreModule, TooltipModule, PopoverModule, BsDropdownModule.forRoot()],\n exports: [ContextDashboardComponent, WidgetConfigComponent],\n entryComponents: [ContextDashboardComponent, WidgetConfigComponent, DashboardDetailComponent]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n ContextDashboardService,\n DeviceDashboardGuard,\n GroupDashboardGuard,\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: { ...defaultConfig, ...config }.routes,\n multi: true\n },\n {\n provide: HOOK_ACTION,\n useClass: DashboardActionsFactory,\n multi: true\n }\n ]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent {\n DEFAULT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext(''),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 12,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 6\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 6\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 6,\n _y: 5,\n _height: 8,\n _width: 6\n }\n ] as Widget[];\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { gettext, DocsService, DocLink, NavigatorService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TenantService, ApplicationService, IApplication } from '@c8y/client';\n\n@Component({\n selector: 'c8y-welcome-to-cockpit',\n templateUrl: './welcome.component.html'\n})\nexport class WelcomeToCockpit implements OnInit, OnDestroy {\n @Input() config;\n welcomeMessage;\n quickLinks = [];\n\n private readonly REPORT_NODE: string = 'Reports';\n private readonly CONFIGURATION_NODE: string = 'Configuration';\n private readonly TRIAL: string = 'TRIAL';\n private tenantType: string;\n private navNodes: any[];\n private links: DocLink[];\n private docsSubscription: Subscription;\n private navSubscription: Subscription;\n\n constructor(\n private tenantService: TenantService,\n private docs: DocsService,\n private router: Router,\n private navigator: NavigatorService,\n private applicationService: ApplicationService\n ) {}\n\n async ngOnInit() {\n this.tenantType = await this.tenantService.currentTenantType();\n this.setMessage();\n this.navSubscription = this.navigator.items$.subscribe(nodes => {\n this.navNodes = nodes;\n });\n this.docsSubscription = this.docs.items$.subscribe(links => {\n this.links = links;\n });\n\n // <---TRIAL & REGULAR TENANT --->\n this.createConnectSmartphoneQuickLink();\n await this.createQuicklinkRegisterDevice();\n\n // <--- TRIAL TENANT --->\n if (this.tenantType === this.TRIAL) {\n this.createQuicklinkUserGuide();\n return;\n }\n\n // <--- REGULAR TENANT --->\n this.createQuicklinkAddGroup();\n this.createQuickLinkReports();\n this.createQuicklinkDataPointLibrary();\n this.createQuicklinkSmartRules();\n }\n\n ngOnDestroy() {\n if (this.docsSubscription && !this.docsSubscription.closed) {\n this.docsSubscription.unsubscribe();\n }\n\n if (this.navSubscription && !this.navSubscription.closed) {\n this.navSubscription.unsubscribe();\n }\n }\n\n private setMessage() {\n if (this.tenantType === this.TRIAL) {\n this.welcomeMessage = gettext(`\n The Cockpit application allows you to build IoT applications in minutes.\n To get started, connect any device to the platform.\n If you do not have an IoT device to hand, you can start by connecting your smartphone.\n Click below to be guided through the process.\n `);\n } else {\n this.welcomeMessage = gettext(`\n The Cockpit application provides you with options to manage\n and monitor Internet of Things assets and data from business perspective.\n `);\n }\n }\n\n private createQuicklinkAddGroup() {\n // comes from angularJS factory c8yQuickLinks\n const addGroup: Partial<DocLink> = this.links.find(link => link.label === 'Add group');\n if (addGroup) {\n this.quickLinks.push(addGroup);\n }\n }\n\n private createConnectSmartphoneQuickLink() {\n // Provider in SensorPhoneModule defines the\n // 'Connect smartphone' quicklink.\n const connectSmartphone = this.links.find(link => link.label === 'Connect smartphone');\n if (connectSmartphone) {\n this.quickLinks.push(connectSmartphone);\n }\n }\n\n private createQuickLinkReports() {\n const reports: Partial<DocLink> = {\n icon: 'c8y-reports',\n label: gettext('Reports'),\n url: '/export'\n };\n\n const reportsNode = this.findNavigatorNode(this.REPORT_NODE);\n if (reportsNode && reportsNode.show) {\n reports.click = () => {\n reportsNode.open = true;\n this.router.navigateByUrl(reports.url);\n };\n this.quickLinks.push(reports);\n }\n }\n\n private createQuicklinkDataPointLibrary() {\n const dataPointLib: Partial<DocLink> = {\n icon: 'c8y-data-points',\n label: gettext('Data point library'),\n url: '/datapointlibrary'\n };\n\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n dataPointLib.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(dataPointLib.url);\n };\n this.quickLinks.push(dataPointLib);\n }\n }\n\n private createQuicklinkSmartRules() {\n const smartRules: Partial<DocLink> = {\n icon: 'c8y-smart-rules',\n label: gettext('Smart rules'),\n url: '/rules'\n };\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n smartRules.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(smartRules.url);\n };\n this.quickLinks.push(smartRules);\n }\n }\n\n private async createQuicklinkRegisterDevice() {\n const { data } = await this.applicationService.listByUser();\n if (data) {\n const deviceManagement: IApplication = data.find(\n app => app.contextPath === 'devicemanagement'\n );\n if (deviceManagement) {\n const deviceMgmtUrl = this.applicationService.getHref(deviceManagement);\n const registerDevice: Partial<DocLink> = {\n icon: 'c8y-device-connect',\n label: gettext('Register device'),\n click: () => window.open(`${deviceMgmtUrl}/#/deviceregistration`, '_self')\n };\n this.quickLinks.push(registerDevice);\n }\n }\n }\n\n private createQuicklinkUserGuide() {\n const userGuide: Partial<DocLink> = {\n icon: 'c8y-user',\n label: gettext('User guide'),\n url: '/users-guide/getting-started',\n click: () => {\n const userGuideURL = this.docs.getUserGuideLink(userGuide.url) as string;\n window.open(userGuideURL);\n }\n };\n this.quickLinks.push(userGuide);\n }\n\n private findNavigatorNode(nodeRealName: string) {\n if (this.navNodes && this.navNodes.length > 0) {\n return this.navNodes.find((node: any) => node.realName === nodeRealName);\n }\n return undefined;\n }\n}\n","import { Component, Host } from '@angular/core';\r\nimport { ContextDashboardComponent } from '../context-dashboard.component';\r\n\r\n@Component({\r\n selector: 'c8y-legacy-welcome-widget',\r\n templateUrl: './legacy-welcome.component.html'\r\n})\r\nexport class LegacyWelcomeComponent {\r\n constructor(@Host() private dashboard: ContextDashboardComponent) {}\r\n\r\n restore() {\r\n this.dashboard.restore();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { ContextDashboardModule } from './context-dashboard.module';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport {\n ViewContext,\n HOOK_NAVIGATOR_NODES,\n gettext,\n CoreModule,\n HOOK_COMPONENTS,\n DynamicComponentDefinition,\n QuickLinkModule,\n DocsModule\n} from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { ContextWidgetConfig } from './context-dashboard.model';\nimport { WelcomeToCockpit } from './welcome/welcome.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LegacyWelcomeComponent } from './legacy-welcome/legacy-welcome.component';\n\n// import for the preview img to get into the build.\nlet previewImage = '';\ntry {\n // tslint:disable-next-line: no-var-requires\n previewImage = require('./welcome/img/welcome-widget-pr.png');\n} catch (ex) {\n // intended empty\n}\n\n@NgModule({\n entryComponents: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n imports: [\n DocsModule,\n CoreModule,\n ContextDashboardModule.config({\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n },\n {\n path: '',\n component: CockpitDashboardComponent\n }\n ]\n }),\n QuickLinkModule,\n TranslateModule\n ],\n declarations: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n providers: [\n {\n provide: HOOK_NAVIGATOR_NODES,\n useValue: [{ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }],\n multi: true\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'cockpit.welcome.widget',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: WelcomeToCockpit,\n previewImage,\n data: {\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 12,\n _height: 6\n },\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'Cockpit Welcome',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: LegacyWelcomeComponent,\n data: {\n settings: {\n noNewWidgets: true,\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n }\n ]\n})\nexport class CockpitDashboardModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {AppearanceSettingsComponent as ɵa} from './appearance-settings.component';\nexport {CockpitDashboardComponent as ɵh} from './cockpit-dashboard.component';\nexport {ContextDashboardComponent as ɵb} from './context-dashboard.component';\nexport {DashboardActionsFactory as ɵg} from './dashboard-actions.factory';\nexport {DashboardDetailComponent as ɵf} from './dashboard-detail.component';\nexport {LegacyWelcomeComponent as ɵj} from './legacy-welcome/legacy-welcome.component';\nexport {WelcomeToCockpit as ɵi} from './welcome/welcome.component';\nexport {WidgetConfigComponent as ɵd} from './widget-config.component';\nexport {WidgetPreviewComponent as ɵe} from './widget-preview.component';\nexport {WidgetService as ɵc} from './widget.service';"],"names":["tslib_1.__decorate","tslib_1.__param","tslib_1.__assign"],"mappings":";;;;;;;;;;;;;;;IAIa,wBAAwB,GAAG,IAAI,cAAc,CAAM,wBAAwB,CAAC,CAAC;AA+E1F,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,sCAAc,CAAA;CACf,EALW,oBAAoB,KAApB,oBAAoB,QAK/B;AAED,IAAa,qBAAqB,GAAG;IACnC;QACE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAChC,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,OAAO,CAAC,sDAAsD,CAAC;KAC7E;IACD;QACE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;QAC/B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,OAAO,CAAC,sEAAsE,CAAC;KAC7F;IACD;QACE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAChC,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,OAAO,CAAC,yCAAyC,CAAC;KAChE;IACD;QACE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;QAC/B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,OAAO,CAAC,iCAAiC,CAAC;KACxD;CACF,CAAC;AAEF,IAAa,sBAAsB,GAAG;IACpC;QACE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;QAC9B,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,OAAO,CAAC,oEAAoE,CAAC;KAC3F;IACD;QACE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;QAC7B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,OAAO,CAAC,oEAAoE,CAAC;KAC3F;IACD;QACE,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;QACpC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,OAAO,CAClB,kFAAkF,CACnF;KACF;IACD;QACE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAChC,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,OAAO,CAAC,iDAAiD,CAAC;KACxE;CACF,CAAC;AAEF,IAAa,uBAAuB,GAAG;IACrC;QACE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;QAC9B,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,OAAO,CAAC,uEAAuE,CAAC;KAC9F;IACD;QACE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;QAC7B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,OAAO,CAAC,uEAAuE,CAAC;KAC9F;IACD;QACE,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;QACpC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,OAAO,CAClB,qFAAqF,CACtF;KACF;IACD;QACE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAChC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,OAAO,CAAC,oDAAoD,CAAC;KAC3E;CACF;;;IC9GC,iCACU,SAA2B,EAC3B,IAAiB,EACjB,KAAmB,EACnB,gBAAkC,EAClC,MAAc,EACd,IAAiB,EACjB,QAAyB,EACzB,WAAwB;QAPxB,cAAS,GAAT,SAAS,CAAkB;QAC3B,SAAI,GAAJ,IAAI,CAAa;QACjB,UAAK,GAAL,KAAK,CAAc;QACnB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAa;QACjB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,gBAAW,GAAX,WAAW,CAAa;QAxB1B,UAAK,GAAG,IAAI,GAAG,EAAyC,CAAC;QAChD,qBAAgB,GAAG,IAAI,CAAC;QACxB,kBAAa,GAAG,eAAe,CAAC;QAChC,yBAAoB,GAAG,WAAW,CAAC;QACnC,gBAAW,GAAG,GAAG,CAAC;QAE3B,kBAAa,GAAG,IAAI,CAAC;KAmBzB;IAjBJ,sBAAI,iDAAY;aAAhB;YACE,OAAO,IAAI,CAAC,aAAa,CAAC;SAC3B;aAED,UAAiB,KAAK;YACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC5B;;;OAJA;IAiBK,wCAAM,GAAZ,UAAa,YAA8B,EAAE,aAA4C;;;;;;wBAGvF,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;4BACrC,EAAE,GAAG,aAAuB,CAAC;4BAC7B,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC;yBAC5C;6BAAM;4BACL,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,EAAY,CAAC;4BAC5C,aAAa,GAAG,IAAI,CAAC,+BAA+B,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;yBACnF;wBAEK,SAAS,GAA4B,EAAE,CAAC;wBAC9C,MAAM,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;wBAE7C,KAAK,GACT,aAAa,KAAK,oBAAoB,CAAC,UAAU,GAAG,YAAY,CAAC,eAAe,GAAG,EAAE,CAAC;wBAElF,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;wBACjE,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;wBAE5B,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;4BACnC,MAAM,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;yBACvC;8BACgB,aAAa,KAAK,oBAAoB,CAAC,KAAK,IAAI,aAAa,KAAK,oBAAoB,CAAC,MAAM,CAAA,EAA7F,wBAA6F;wBAC1G,qBAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,EAAA;;wBAAxD,KAAA,SAAwD,CAAA;;4BACxD,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAFlC,IAAI,GAAK,SAAL;wBAGZ,sBAAO,IAAqC,EAAC;;;;KAC9C;IAEK,wCAAM,GAAZ,UAAa,WAA0C;;;;;4BACpC,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAA;;wBAAjD,IAAI,GAAK,CAAA,SAAwC,MAA7C;wBACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBACrC,sBAAO,IAAI,EAAC;;;;KACb;IAEK,wCAAM,GAAZ,UAAa,SAAwC;;;;;;wBAC7C,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjF,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;wBAC7C,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAA;;wBAAtD,IAAI,GAAK,CAAA,SAA6C,MAAlD;wBACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBACnC,sBAAO,IAAI,EAAC;;;;KACb;IAEK,wCAAM,GAAZ,UAAa,SAAwC;;;;;;;;wBAE7C,GAAG,GAAG,OAAO,CACf,wFAAsF,CACvF,CAAC;wBACF,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;4BAChC,GAAG,GAAG,OAAO,CACX,sJACyB,CAC1B,CAAC;yBACH;wBACD,qBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,kBAAkB,CAAC,EAC3B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE;gCACjC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;gCAC3C,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,eAAe;6BACpD,CAAC,EACF,MAAM,CAAC,MAAM,EACb;gCACE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;gCACrB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;6BAC1B,CACF,EAAA;;wBAXD,SAWC,CAAC;wBACF,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAA;;wBAAtC,SAAsC,CAAC;wBACjC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG;4BACtD,OAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAI,KAAI,CAAC,oBAAoB,SAAI,SAAS,CAAC,EAAI,CAAC;yBAAA,CAClE,CAAC;wBACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;;;;;;;;;KAIvB;IAED,oDAAkB,GAAlB,UAAmB,KAA6B,EAAE,KAA6B;QACrE,IAAA,sCAAW,CAAkB;QACrC,IAAI,WAAW,EAAE;YACf,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,UAAA,SAAS;gBACX,KAAK,CAAC,IAAI,GAAG,EAAE,SAAS,WAAA,EAAE,CAAC;aAC5B,CAAC,EACF,GAAG,CAAC,cAAM,OAAA,IAAI,GAAA,CAAC,EACf,UAAU,CAAC;gBACT,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;aAClB,CAAC,CACH,CAAC;SACH;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KACrD;IAED,2DAAyB,GAAzB,UAA0B,IAAY,EAAE,cAAwB;QAAhE,iBAUC;QATC,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAChE,YAAY,EAAE,EACd,UAAU,CAAC;YACT,OAAA,IAAI,CACF,KAAI,CAAC,MAAM,CAAC,EAAC,QAAQ,UAAA,EAAC,EAAE,IAAI,CAAC,CAC9B;SAAA,CACF,CACF,CAAC;KACH;IAEK,6CAAW,GAAjB,UAAkB,WAA0C;;;;;;;6BACtD,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAA1B,wBAA0B;wBACtB,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG;4BACtD,OAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAI,KAAI,CAAC,oBAAoB,SAAI,WAAW,CAAC,EAAI,CAAC;yBAAA,CACpE,CAAC;wBAEW,qBAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAA;;wBAArC,IAAI,GAAG,SAA8B;wBAC3C,IAAI,WAAW,EAAE;4BACT,KAA2B,IAAI,CAAC,aAAa,EAA3C,IAAI,UAAA,EAAE,QAAQ,cAAA,EAAE,gBAAI,CAAwB;4BACpD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;4BACxB,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;4BAChC,WAAW,CAAC,KAAK,GAAG,MAAI,CAAC;yBAC1B;wBACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;;;;;;KAEvB;IAEK,qDAAmB,GAAzB,UAA0B,WAA0C;;;gBAClE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE;wBAC3C,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC3C,CAAC,CAAC;iBACJ;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE;wBACxD,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC3C,CAAC,CAAC;iBACJ;;;;KACF;IAED,kDAAgB,GAAhB,UAAiB,EAAE;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,EAAE,EAAE,CAAC,CAAC;KACxF;IAED,yCAAO,GAAP,UAAQ,SAAiD;QAAzD,iBAMC;QALC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAA,IAAI;YAC/B,OAAA,IAAI,MAAM,CACR,MAAI,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,KAAK,GAAG,KAAI,CAAC,WAAa,CAC5F,CAAC,IAAI,CAAC,IAAI,CAAC;SAAA,CACb,CAAC;KACH;IAED,8CAAY,GAAZ,UAAa,SAAiD;QAA9D,iBAQC;QAPC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAA,IAAI;YAC/B,OAAA,IAAI,MAAM,CACR,MAAI,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,UAAU,GACzE,KAAI,CAAC,WACL,CACH,CAAC,IAAI,CAAC,IAAI,CAAC;SAAA,CACb,CAAC;KACH;IAED,4CAAU,GAAV,UAAW,SAAS,EAAE,SAAS,EAAE,YAAY;QAC3C,IAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAA,CAAC,CAAC;QAC/F,OAAO,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;KAC/C;IAED,4CAAU,GAAV,UAAW,OAAiB;QAC1B,OAAO,KAAK,CACV,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM;YAChB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC;SACf,CAAC,EACF,IAAI,CACL,CAAC;KACH;IAEO,+CAAa,GAArB,UACE,iBAAiB,EACjB,aAAqC,EACrC,EAAmB;QAHrB,iBAyBC;QApBC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEhD,IAAM,UAAU,GAAG,EAAE;cACjB,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC;cAC5C,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEhD,IAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAA,CAAC,EAClD,MAAM,CACJ,UAAA,SAAS;YACP,OAAA,SAAS,CAAC,EAAE,KAAK,iBAAiB;gBAClC,GAAG,CACD,SAAS,EACT,KAAG,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,KAAK,GACnE,KAAI,CAAC,WAAW,GACf,iBAAmB,CACvB;SAAA,CACJ,CACF,CAAC;QACF,OAAO,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;KACzC;IAEO,0CAAQ,GAAhB,UAAiB,EAAiC,EAAE,aAAqC;QAAzF,iBAUC;QATC,IAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,IAAI,CAChD,GAAG,CAAC,UAAA,SAAS,IAAI,OAAA,KAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,GAAA,CAAC,EAC3D,GAAG,CAAC,UAAA,SAAS,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAA,CAAC,EAChD,GAAG,CAAC,UAAA,SAAS,IAAI,OAAA,KAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAA,CAAC,EACpD,OAAO,EAAE,CACV,CAAC;KACH;IAEO,uDAAqB,GAA7B,UAA8B,QAAqD;QACjF,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxB,QAAQ,EAAE,EACV,QAAQ,CAAC,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,IAAuC,GAAA,CAAC,CAAC,CAAC;KAC3E;IAEO,qDAAmB,GAA3B,UAA4B,EAAkB,EAAE,aAAqC;QACnF,IAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC;cAC5D,oBAAoB,CAAC,MAAM;cAC3B,oBAAoB,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAM,IAAI,SAAI,EAAE,CAAC,EAAI,CAAC;KAC/C;;;;;;IAOO,2DAAyB,GAAjC,UACE,SAAwC;QAExC,IAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;QAC9D,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,OAAO,CAAC,QAAQ,EAAE,UAAA,KAAK;YACrB,IAAI,GAAG,CAAC,KAAK,EAAE,qCAAqC,CAAC,EAAE;gBACrD,OAAO,KAAK,CAAC,mCAAmC,CAAC;gBACjD,eAAe,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE;gBACpC,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;gBAChC,eAAe,GAAG,IAAI,CAAC;aACxB;SACF,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;SAC5B;QACD,OAAO,aAAa,CAAC;KACtB;IAEO,gDAAc,GAAtB,UAAuB,SAAwC;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;KACzC;IAEO,oDAAkB,GAA1B,UAA2B,SAAwC;QACzD,IAAA,oCAAyB,EAAE,iBAAE,CAAe;QACpD,QAAQ;YACN,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAK,IAAI,CAAC,oBAAoB,SAAI,EAAI;YAC1C,KAAK,EAAE,UAAU,CAAC,IAAI;YACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,EAAE;KACJ;IAEO,uCAAK,GAAb,UAAc,SAAS;QACrB,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAC,GAAG,EAAE,KAAK;YACtD,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;gBAC5C,OAAO,SAAS,CAAC;aAClB;YAED,OAAO,KAAK,CAAC;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KAC/B;IAEO,mDAAiB,GAAzB,UAA0B,IAAY;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACzB,YAAY,EAAE,KAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,KAAK,GACjF,IAAI,CAAC,WAAW,GACf,IAAM;YACT,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;KACJ;IAEO,sDAAoB,GAA5B,UAA6B,EAAkB,EAAE,aAAqC;QAAtF,iBASC;QARC,OAAO,aAAa,CAAC,GAAG,CAAC,UAAC,IAA0B;YAClD,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,YAAY,EAAE,KAAG,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,WAAW,GAAG,IAAI,GAAG,KAAI,CAAC,WAAW,IAC9E,IAAI,KAAK,oBAAoB,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAC1D;gBACF,QAAQ,EAAE,KAAI,CAAC,gBAAgB;aAChC,CAAC;SAAA,CACH,CAAC;KACH;IAEO,iEAA+B,GAAvC,UAAwC,YAAY,EAAE,OAAO;QAC3D,IAAI,aAAa,CAAC;QAClB,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM,EAAE;YAC1C,aAAa,GAAG,YAAY,CAAC,UAAU;kBACnC,oBAAoB,CAAC,UAAU;kBAC/B,oBAAoB,CAAC,MAAM,CAAC;SACjC;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,KAAK,EAAE;YACzC,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC;SAC5C;QACD,OAAO,aAAa,CAAC;KACtB;IAEO,mDAAiB,GAAzB,UAA0B,oBAA0C,EAAE,KAAa;QACjF,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACjF;IAEO,iDAAe,GAAvB,UAAwB,SAAiD;QACvE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YAC3D,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC;KACb;;gBA1UoB,gBAAgB;gBACrB,WAAW;gBACV,YAAY;gBACD,gBAAgB;gBAC1B,MAAM;gBACR,WAAW;gBACP,eAAe;gBACZ,WAAW;;IAzBvB,uBAAuB;QADnC,UAAU,EAAE;OACA,uBAAuB,CA6VnC;IAAD,8BAAC;CA7VD;;;IC3BE,8BACU,uBAAgD;QAAhD,4BAAuB,GAAvB,uBAAuB,CAAyB;KACtD;IAEJ,0CAAW,GAAX,UAAY,KAA6B;QACvC,OAAO,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC5D,oBAAoB,CAAC,MAAM;YAC3B,oBAAoB,CAAC,UAAU;SAChC,CAAC,CAAC;KACJ;;gBARkC,uBAAuB;;IAF/C,oBAAoB;QADhC,UAAU,EAAE;OACA,oBAAoB,CAWhC;IAAD,2BAAC;CAXD;;;ICoCE,kCACU,KAAiB,EACN,QAAkB,EAC7B,uBAAgD;QAH1D,iBAOC;QANS,UAAK,GAAL,KAAK,CAAY;QAEjB,4BAAuB,GAAvB,uBAAuB,CAAyB;QArB1D,YAAO,GAAG;YACR,UAAU,EAAE,uBAAuB;YACnC,WAAW,EAAE,qBAAqB;SACnC,CAAC;QACF,oBAAe,GAAG,EAAE,uBAAuB,yBAAA,EAAE,qBAAqB,uBAAA,EAAE,CAAC;QACrE,WAAM,GAA8B,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC9D,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB,CAAC,CAAC;QAEM,6BAAwB,GAAG,EAAE,CAAC;QAC9B,2BAAsB,GAAG,IAAI,CAAC;QAC9B,+BAA0B,GAAG,KAAK,CAAC;QACnC,2BAAsB,GAAG,WAAW,CAAC;QAU5C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;KAC/B;IAED,qDAAkB,GAAlB;QACE,IAAM,mBAAmB,GAAG;YAC1B,IAAI,EAAE,IAAI,CAAC,sBAAsB;YACjC,QAAQ,EAAE,IAAI,CAAC,0BAA0B;YACzC,IAAI,EAAE,IAAI,CAAC,sBAAsB;YACjC,eAAe,EAAE,IAAI,CAAC,UAAU;SACjC,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACrC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;SAC7C;KACF;IAED,uCAAI,GAAJ;;QACE,IAAI,CAAC,SAAS,CAAC,OAAO,aAAK,GAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAG,IAAI,KAAE,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,aAAa,aAAK,GAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAG,IAAI,KAAE,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC5B;IAED,wCAAK,GAAL;QACE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;IAED,2DAAwB,GAAxB;QACE,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC3C,OAAO,UAAU,CAAC;KACnB;IAED,6CAAU,GAAV,UAAW,IAAI;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;KAC7C;IAED,iDAAc,GAAd,UAAe,IAAY;QACzB,IAAI,IAAI,EAAE;YACR,IAAM,QAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACjE;aAAM;YACL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;SACjC;KACF;IAEO,oDAAiB,GAAzB;QAAA,iBAmBC;QAlBC,IAAM,UAAU,gBACX,IAAI,CAAC,SAAS,CAAC,OAAO,EACtB,IAAI,CAAC,SAAS,CAAC,aAAa,CAChC,CAAC;QAEF,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAA,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,CAAC,UAAA,SAAS;YACtB,KAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAI,CAAC,uBAAuB,CAAC,UAAU,CAC/D,uBAAuB,EACvB,SAAS,EACT,KAAI,CAAC,OAAO,CAAC,UAAU,CACxB,CAAC;YACF,KAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAI,CAAC,uBAAuB,CAAC,UAAU,CAChE,qBAAqB,EACrB,SAAS,EACT,KAAI,CAAC,OAAO,CAAC,WAAW,CACzB,CAAC;SACH,CAAC,CAAC;KACJ;;gBA5EgB,UAAU;4CACxB,MAAM,SAAC,SAAS;gBACgB,uBAAuB;;IA5BNA;QAAnD,SAAS,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;yEAA6B;IADrE,wBAAwB;QAJpC,SAAS,CAAC;YACT,QAAQ,EAAE,sBAAsB;YAChC,kyOAAgD;SACjD,CAAC;QA6BGC,WAAA,MAAM,CAAC,SAAS,CAAC,CAAA;OA5BT,wBAAwB,CAwGpC;IAAD,+BAAC;CAxGD;;;ICNE,uBACU,uBAAgD,EAChD,gBAAkC,EACD,YAAoC;QAFrE,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,qBAAgB,GAAhB,gBAAgB,CAAkB;QACD,iBAAY,GAAZ,YAAY,CAAwB;KAC3E;IAEE,2CAAmB,GAAzB,UAA0B,WAAW;;;gBACnC,sBAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,EAAC;;;KACvE;IAED,4CAAoB,GAApB;QAAA,iBAOC;QANC,IAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,qBAClF,GAAG,IACN,KAAK,EAAE,KAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAC/C,CAAC,CAAC;QAEJ,OAAO,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;KAChG;;gBAhBkC,uBAAuB;gBAC9B,gBAAgB;gDACzC,MAAM,SAAC,wBAAwB;;;IAJvB,aAAa;QAHzB,UAAU,CAAC;YACV,UAAU,EAAE,MAAM;SACnB,CAAC;QAKGA,WAAA,MAAM,CAAC,wBAAwB,CAAC,CAAA;OAJxB,aAAa,CAmBzB;wBA5BD;CASA;;;IC8CE,+BACU,aAA4B,EAC5B,KAAiB,EAClB,uBAAgD;QAHzD,iBAII;QAHM,kBAAa,GAAb,aAAa,CAAe;QAC5B,UAAK,GAAL,KAAK,CAAY;QAClB,4BAAuB,GAAvB,uBAAuB,CAAyB;QAtCzD,SAAI,GAAkC,QAAQ,CAAC;QAI/C,kBAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,eAAU,GAAG,EAAE,CAAC;QAIhB,YAAO,GAAG;YACR,WAAW,EAAE,qBAAqB;YAClC,YAAY,EAAE,qBAAqB;SACpC,CAAC;QACF,mBAAc,GAAG;YACf,WAAW,EAAE,qBAAqB;YAClC,YAAY,EAAE,qBAAqB;SACpC,CAAC;QACF,oBAAe,GAAG,EAAE,qBAAqB,uBAAA,EAAE,sBAAsB,wBAAA,EAAE,CAAC;QAGpE,cAAS,GAAG,KAAK,CAAC;QAMlB,WAAM,GAAoB,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACpD,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB,CAAC,CAAC;KAUC;IAjBJ,sBAAI,yCAAM;aAAV;YACE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;SACvB;;;OAAA;IAiBD,kDAAkB,GAAlB;QAAA,iBA2BC;QA1BC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;QAE5D,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;aAChC,IAAI,CACH,SAAS,CAAC,UAAC,KAAoB,IAAK,OAAA,GAAG,CAAC,cAAM,OAAA,KAAK,CAAC,KAAK,KAAK,EAAE,GAAA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAA,CAAC,CAC1F;aACA,SAAS,CAAC;YACT,KAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;QAEL,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE;YACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,cAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,EAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,GAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAChD,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,cACrC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,EAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,EACtC,CAAC;SACJ;KACF;IAED,oCAAI,GAAJ;QACQ,IAAA,uBAAgD,EAA9C,UAAE,EAAE,UAAE,EAAE,kBAAM,EAAE,oBAA8B,CAAC;QAEvD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC3C,IAAA,6BAAuC,EAArC,UAAE,EAAE,gBAAiC,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,IAAA,EAAE,IAAI,QAAA,EAAE,CAAC;SACzC;QAED,IAAM,MAAM,GAAGC,WACb,EAAE,IAAA;YACF,EAAE,IAAA;YACF,MAAM,QAAA;YACN,OAAO,SAAA,EACP,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAC3C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAC/B,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAC7B,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EACxE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KACpB,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,EAAE,EACxD,CAAC;QAEZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACpB;IAED,sCAAM,GAAN,UAAO,GAAG,EAAE,IAAoC;QAApC,qBAAA,EAAA,eAAoC;QAC9C,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QAEpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACrD,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3D,IAAI,IAAI,CAAC,MAAM,EAAE;YACT,IAAA,sBAA+D,EAA7D,UAAE,EAAE,UAAE,EAAE,kBAAM,EAAE,oBAAO,EAAE,oBAAO,EAAE,gBAA2B,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,gBAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,KAAK,OAAA,GAAE,CAAC;SACzF;QAED,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAErF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,sCAAM,GAAN;QAAA,iBAQC;QAPC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,GAAG;gBAC5C,OAAA,IAAI,MAAM,CAAC,YAAY,CAAC,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;aAAA,CACtE,CAAC;SACH;aAAM;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;KACF;IAED,2CAAW,GAAX;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;IAED,0CAAU,GAAV,UAAW,IAAmC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,qCAAK,GAAL;QACE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;IAED,wCAAQ,GAAR,UAAS,SAAiB;QAAjB,0BAAA,EAAA,iBAAiB;QACxB,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACxE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;SAC7C;QAED,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACzE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;SAC9C;QAED,IAAI,SAAS,EAAE;YACb,UAAU,CAAC,qBAAmB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAI,CAAC,GAAG,IAAI,CAAC;SAC3F;QAED,OAAO,UAAU,CAAC;KACnB;IAED,2CAAW,GAAX;QACE,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;SAC9B;KACF;IAEO,uDAAuB,GAA/B,UAAgC,SAAS;QACvC,IAAM,UAAU,gBACX,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,EAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CACvC,CAAC;QACF,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAA,QAAQ,IAAI,QAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAC,CAAC,CAAC;QAC9E,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CACnD,MAAM,EACN,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAC1B,SAAS,CACV,CAAC;QACF,OAAO,CAAC,CAAC,KAAK,CAAC;KAChB;IAEO,+CAAe,GAAvB,UAAwB,UAAU;QAAlC,iBAmBC;QAlBC,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7C,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAE3C,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAA,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,CAAC,UAAA,SAAS;YACtB,YAAY,GAAG,KAAI,CAAC,uBAAuB,CAAC,UAAU,CACpD,sBAAsB,EACtB,SAAS,EACT,YAAY,CACb,CAAC;YACF,WAAW,GAAG,KAAI,CAAC,uBAAuB,CAAC,UAAU,CACnD,qBAAqB,EACrB,SAAS,EACT,WAAW,CACZ,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,EAAE,WAAW,aAAA,EAAE,YAAY,cAAA,EAAE,CAAC;KACtC;IAEO,mDAAmB,GAA3B,UAA4B,iBAAiB,EAAE,OAAY;QAAZ,wBAAA,EAAA,YAAY;QACzD,IAAM,OAAO,GAAGA,WACd,QAAQ,eACH,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAC/B,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnD,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,IAC7C,OAAO,SAAA,EACP,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,OAEjC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CACV,CAAC;QACzB,OAAO,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;KACnD;IAEO,4DAA4B,GAApC,UAAqC,YAAiC;QACpE,IAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAExE,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;YAEhD,IAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG;kBAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc;kBAChD,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;YAEzC,IAAI,CAAC,cAAc,EAAE;gBACnB,YAAY,CAAC,MAAM,GAAG;oBACpB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;iBACxB,CAAC;aACH;SACF;QACD,OAAO,YAAY,CAAC;KACrB;;gBAhMwB,aAAa;gBACrB,UAAU;gBACO,uBAAuB;;IAvC9C,qBAAqB;QAJjC,SAAS,CAAC;YACT,QAAQ,EAAE,mBAAmB;YAC7B,40PAA6C;SAC9C,CAAC;OACW,qBAAqB,CAsOjC;IAAD,4BAAC;CAtOD;;ACQA;;;;;AAeA;IA2BE,mCACU,KAAqB,EACrB,MAAc,EACd,uBAAgD,EAChD,KAAmB,EACnB,QAAmB,EACc,YAAoC,EACrE,aAA4B,EAC5B,OAAuB;QAPvB,UAAK,GAAL,KAAK,CAAgB;QACrB,WAAM,GAAN,MAAM,CAAQ;QACd,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,UAAK,GAAL,KAAK,CAAc;QACnB,aAAQ,GAAR,QAAQ,CAAW;QACc,iBAAY,GAAZ,YAAY,CAAwB;QACrE,kBAAa,GAAb,aAAa,CAAe;QAC5B,YAAO,GAAP,OAAO,CAAgB;QA/BjC,oBAAe,GAAG,EAAE,CAAC;QAIrB,aAAQ,GAAY,KAAK,CAAC;QAE1B,aAAQ,GAAY,KAAK,CAAC;QAE1B,mBAAc,GAAa,EAAE,CAAC;QAE9B,cAAS,GAAY,IAAI,CAAC;QAE1B,cAAS,GAAY,IAAI,CAAC;QAG1B,UAAK,GAAG,EAAE,CAAC;QAEX,YAAO,GAAa,EAAE,CAAC;KAenB;IAEJ,4CAAQ,GAAR;QACE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO;SACR;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;;;;;IAMD,qDAAiB,GAAjB,UAAkB,MAAM;QACtB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACzE;KACF;;;;IAKD,+CAAW,GAAX;QACE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;SAC5B;KACF;;;;IAKK,2CAAO,GAAb;;;;;wBACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAC9F,qBAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;wBAAlD,SAAkD,CAAC;wBACnD,IAAI,CAAC,MAAM,EAAE,CAAC;;;;;KACf;;;;;IAMK,2DAAuB,GAA7B,UAA8B,KAA2B;;;;;gBAC/C,QAAQ,GAAK,KAAK,SAAV,CAAW;gBACrB,WAAW,GAAkC,IAAI,CAAC,EAAE,CAAC;gBACrD,cAAc,GAA6B,KAAK,CACpD,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAA,CAAC,EAC5C,IAAI,CACL,CAAC;gBACF,WAAW,CAAC,aAAa,CAAC,QAAQ,GAAG,cAAc,CAAC;gBACpD,sBAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAC;;;KACzD;;;;IAKK,mDAAe,GAArB;;;;;4BACE,qBAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;wBAAlD,SAAkD,CAAC;wBACnD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;4BACf,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,IAAI,GAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACpF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;yBAClC;;;;;KACF;;;;IAKK,iDAAa,GAAnB;;;;;;wBACQ,YAAY,GAAG;4BACnB,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;4BAC7B,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;yBAChE,CAAC;wBACI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;4BACxD,KAAK,EAAE,UAAU;4BACjB,YAAY,cAAA;4BACZ,mBAAmB,EAAE,IAAI;yBAC1B,CAAC,CAAC,OAAmC,CAAC;;;;wBAE/B,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACvC,KAAA,WAAW,CAAA;wBAAiB,qBAAM,KAAK,CAAC,MAAM,EAAA;;wBAA9C,GAAY,aAAa,GAAG,SAAkB,CAAC;wBAC/C,qBAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAA;;wBAAtD,SAAsD,CAAC;wBACvD,qBAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,WAAW,CAAC,EAAA;;wBAA3D,SAA2D,CAAC;wBAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;wBACd,KAAK,CAAC,KAAK,EAAE,CAAC;;;;;;;;;KAIjB;;;;;IAMK,8CAAU,GAAhB,UAAiB,MAAoB;;;;;;wBAC7B,KAA0B,MAAM,CAAC,MAAM,EAArC,CAAC,OAAA,EAAE,CAAC,OAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,CAAmB;wBAC5B,qBAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAC5D,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAChD,EAAA;;wBAFK,SAAS,GAAG,SAEjB;wBACD,IAAI,CAAC,SAAS,EAAE;4BACd,IAAI,CAAC,SAAS,EAAE,CAAC;4BACjB,sBAAO;yBACR;wBACD,qBAAM,IAAI,CAAC,SAAS,cACf,SAAS,IACZ,IAAI,eAAO,SAAS,CAAC,IAAI,EAAK,MAAM,CAAC,MAAM,IAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OACzF,EAAA;;wBAHF,SAGE,CAAC;;;;;KACJ;;;;;IAMK,6CAAS,GAAf,UAAgB,QAAqC;;;;;;wBAC7C,YAAY,GAAG;4BACnB,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;yBAC9B,CAAC;wBAEI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE;4BACrD,KAAK,EAAE,UAAU;4BACjB,YAAY,cAAA;4BACZ,mBAAmB,EAAE,IAAI;yBAC1B,CAAC,CAAC,OAAgC,CAAC;;;;wBAGhB,qBAAM,KAAK,CAAC,MAAM,EAAA;;wBAA9B,SAAS,GAAG,SAAkB;wBACpC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE;4BACnC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC;yBACrC;wBACD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;wBACzD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC7C,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACvD,qBAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAA;;wBAAlC,SAAkC,CAAC;wBACnC,KAAK,CAAC,KAAK,EAAE,CAAC;;;;;;;;;KAIjB;;;;;;IAOK,gDAAY,GAAlB,UAAmB,MAAM;;;;;;wBACjB,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnD,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC;wBACN,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAA;;wBAA3C,YAAY,GAAG,SAA4B;wBACjD,IAAI,KAAK,EAAE;4BACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBACjC;6BAAM;4BACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;yBAC7C;;;;;KACF;;;;;;IAOD,gDAAY,GAAZ,UAAa,MAAoB;QAAjC,iBAYC;QAXS,IAAA,sBAAM,EAAE,sBAAM,CAAY;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,EAAM;gBAAJ,UAAE;YAAO,OAAA,EAAE,KAAK,MAAM,CAAC,EAAE;SAAA,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;;QAGtD,UAAU,CAAC;YACT,IAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,KAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;SACrC,CAAC,CAAC;KACJ;;;;;IAMD,2DAAuB,GAAvB;QAAA,iBAIC;QAHC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;YACpC,KAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACjD,CAAC,CAAC;KACJ;;;;;IAMD,gEAA4B,GAA5B;QAAA,iBAIC;QAHC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;YACpC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACpD,CAAC,CAAC;KACJ;;;;;IAMK,gDAAY,GAAlB,UAAmB,QAA2B;;;;;;wBAC5C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;;;wBAEhC,qBAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;wBAAlD,SAAkD,CAAC;wBACnD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;4BAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;yBAC9D;6BAAM;4BACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;yBAChE;;;;wBAED,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAE,CAAC,CAAC;wBAChC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;;;;;KAErC;IAEO,sDAAkB,GAA1B,UAA2B,QAA2B;QACpD,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;KAC7C;IAEO,wDAAoB,GAA5B;QAAA,iBAOC;QANC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAC,EAAa;gBAAX,wBAAS;YACnD,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3D,KAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACpB,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YACvC,KAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;KACJ;IAEO,sDAAkB,GAA1B;QAAA,iBASC;QARC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB;aACxC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;aACzD,SAAS,CAAC,UAAA,EAAE;YACX,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,KAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YACvC,KAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;KACN;IAEa,0CAAM,GAApB;;;;;;4BAC2B,qBAAM,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;wBAA/E,gBAAgB,GAAG,SAA4D;wBACrF,IAAI,CAAC,QAAQ,GAAG,CAAC,gBAAgB,CAAC;wBAC5B,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9D,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAClE,gBAAgB,cACpB,oBAAoB,EAAE,IAAI,EAC1B,SAAS,EAAE,IAAI,IACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAC1B,CAAC;wBAEF,KAAA,IAAI,CAAA;wBAAW,qBAAM,OAAO,CAAC,GAAG,CAC9B,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,UAAA,MAAM;gCAClC,MAAM,CAAC,OAAO,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gCACjD,IAAI,YAAY,EAAE;oCAChB,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;iCAChC;gCACD,OAAO,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;6BAC/B,CAAC,CACH,EAAA;;wBARD,GAAK,OAAO,GAAG,SAQd,CAAC;wBACF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;;;;KACxB;IAEO,sDAAkB,GAA1B,UAA2B,MAAM;QAC/B,IAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAC/C,UAAA,EAAE,IAAI,OAAA,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAA,CACjD,CAAC;QACF,IAAM,aAAa,GAAG,cAAc;2BAC3B,MAAM,CAAC,OAAO,iBACd,IAAI,CAAC,SAAS,CAAC,aAAa,EAAK,MAAM,CAAC,OAAO,CAAE,CAAC;QAC3D,kBACE,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,IAAI,IACnB,aAAa,EAChB;KACH;IAEO,qDAAiB,GAAzB,UAA0B,KAA8B;QACtD,oBACK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qCAAqC,EAAE,4BAA4B,CAAC,CAAC,EACtF;YACF,EAAE,EAAE,KAAK,CAAC,CAAC;YACX,EAAE,EAAE,KAAK,CAAC,CAAC;YACX,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,OAAO,EAAE,KAAK,CAAC,MAAM;SACX,EACZ;KACH;IAEa,6CAAS,GAAvB,UAAwB,MAAM;;;;;4BAChB,qBAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAA;;wBAArF,GAAG,GAAG,SAA+E;wBAC3F,IAAI,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE;4BACrC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;4BAC3D,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;4BAC3D,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;4BACnD,MAAM,CAAC,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;4BAC/D,MAAM,CAAC,0BAA0B;gCAC/B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mCAAmC;oCACrD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;yBAChD;6BAAM;4BACL,OAAO,MAAM,CAAC,WAAW,CAAC;4BAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAC;yBACjC;wBACD,sBAAO,MAAM,EAAC;;;;KACf;;gBA1TgB,cAAc;gBACb,MAAM;gBACW,uBAAuB;gBACzC,YAAY;gBACT,SAAS;gDAC1B,MAAM,SAAC,wBAAwB;gBACT,aAAa;gBACnB,cAAc;;IAjCjCF;QADC,KAAK,EAAE;2DACK;IAEbA;QADC,KAAK,EAAE;sEACa;IAErBA;QADC,KAAK,EAAE;8DACK;IAEbA;QADC,KAAK,EAAE;+DACkB;IAE1BA;QADC,KAAK,EAAE;+DACkB;IAE1BA;QADC,KAAK,EAAE;qEACsB;IAE9BA;QADC,KAAK,EAAE;gEACkB;IAE1BA;QADC,KAAK,EAAE;gEACkB;IAG1BA;QADC,WAAW,CAAC,OAAO,CAAC;4DACV;IAnBA,yBAAyB;QAVrC,SAAS,CAAC;YACT,QAAQ,EAAE,uBAAuB;YACjC,6pCAAiD;YACjD,IAAI,EAAE;gBACJ,KAAK,EAAE,+BAEN;gBACD,KAAK,EAAE,8BAA8B;aACtC;SACF,CAAC;QAkCGC,WAAA,MAAM,CAAC,wBAAwB,CAAC,CAAA;OAjCxB,yBAAyB,CAuVrC;IAAD,gCAAC;CAvVD;;;ICnCE,6BACU,uBAAgD;QAAhD,4BAAuB,GAAvB,uBAAuB,CAAyB;KACtD;IAEJ,yCAAW,GAAX,UAAY,KAA6B;QACvC,OAAO,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC5D,oBAAoB,CAAC,KAAK;SAC3B,CAAC,CAAC;KACJ;;gBAPkC,uBAAuB;;IAF/C,mBAAmB;QAD/B,UAAU,EAAE;OACA,mBAAmB,CAU/B;IAAD,0BAAC;CAVD;;;ICIE,iCACU,MAAc,EACd,uBAAgD,EAChD,OAAuB,EACvB,WAAwB;QAHxB,WAAM,GAAN,MAAM,CAAQ;QACd,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,YAAO,GAAP,OAAO,CAAgB;QACvB,gBAAW,GAAX,WAAW,CAAa;KAC9B;IAEE,qCAAG,GAAT,UAAU,cAA8B;;;;;;;wBAChC,OAAO,GACX,CAAC,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO;8BAC1D,cAAc,CAAC,QAAQ,CAAC,IAAI;8BAC5B,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACjB,qBAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAA;;wBAAhD,gBAAgB,GAAG,SAA6B;wBACtD,sBAAO;gCACL;oCACE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;oCAC/B,QAAQ,EAAE,IAAI;oCACd,MAAM,EAAE,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAA;oCACxC,QAAQ,EAAE,CAAC,gBAAgB;iCAC5B;6BACF,EAAC;;;;KACH;IAEK,8CAAY,GAAlB,UAAmB,OAAO;;;;;;wBAGxB,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM,EAAE;4BAC1C,YAAY,GAAG;gCACb,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI;6BACrC,CAAC;yBACH;wBAEK,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;4BACxD,KAAK,EAAE,UAAU;4BACjB,YAAY,cAAA;4BACZ,mBAAmB,EAAE,IAAI;yBAC1B,CAAC,CAAC,OAAmC,CAAC;;;;wBAEhB,qBAAM,KAAK,CAAC,MAAM,EAAA;;wBAAjC,YAAY,GAAG,SAAkB;wBACY,qBAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAC1F,YAAY,EACZ,OAAO,CACR,EAAA;;wBAHK,WAAW,GAAkC,SAGlD;wBACD,qBAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAA;;wBAAnE,SAAmE,CAAC;wBACpE,KAAK,CAAC,KAAK,EAAE,CAAC;;;;;;;;;KAIjB;IAEa,2CAAS,GAAvB,UAAwB,OAAO;;;;;8BACzB,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAA,EAA7C,wBAA6C;wBAE5C,qBAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAC7B,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,EACjD,OAAO,CAAC,WAAW,CACpB,EAAA;4BAJH,uBACE,CAAC,SAGA,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GACvE;4BAEJ,uBACE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;4BAC9E,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GACjE;;;;KACH;;gBA9DiB,MAAM;gBACW,uBAAuB;gBACvC,cAAc;gBACV,WAAW;;IALvB,uBAAuB;QADnC,UAAU,EAAE;OACA,uBAAuB,CAiEnC;IAAD,8BAAC;CAjED;;;ICLA;QAOE,eAAU,GAAW,uBAAuB,CAAC;QAE7C,gBAAW,GAAW,qBAAqB,CAAC;QAM5C,qBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;QAE9C,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAG/C,yBAAoB,GAAG,uBAAuB,CAAC;QAG/C,0BAAqB,GAAG,qBAAqB,CAAC;KAoB/C;IAlBC,qDAAe,GAAf,UAAgB,KAAK;QACnB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,sDAAgB,GAAhB,UAAiB,KAAK;QACpB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;IAEO,oDAAc,GAAtB,UAAuB,KAAa,EAAE,SAAiB,EAAE,YAAoB;QAC3E,IAAI,YAAY,IAAI,KAAK,KAAK,SAAS,EAAE;YACvC,KAAK,GAAG,YAAY,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;KACd;IAnCDD;QADC,KAAK,EAAE;mEACqC;IAE7CA;QADC,KAAK,EAAE;oEACoC;IAE5CA;QADC,KAAK,EAAE;0EACkB;IAE1BA;QADC,KAAK,EAAE;2EACmB;IAE3BA;QADC,MAAM,EAAE;yEACqC;IAE9CA;QADC,MAAM,EAAE;0EACsC;IAG/CA;QADC,KAAK,EAAE;6EACuC;IAG/CA;QADC,KAAK,EAAE;8EACsC;IAlBnC,2BAA2B;QALvC,SAAS,CAAC;YACT,QAAQ,EAAE,yBAAyB;YACnC,4lGAAmD;YACnD,aAAa,EAAE,CAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAE;SACtE,CAAC;OACW,2BAA2B,CAsCvC;IAAD,kCAAC;CAtCD;;;ICPA;QAME,mBAAc,GAA+B;YAC3C,uBAAuB,EAAE,IAAI;YAC7B,qBAAqB,EAAE,IAAI;SAC5B,CAAC;KAIH;IAPCA;QADC,KAAK,EAAE;kEAIN;IAGFA;QADC,KAAK,EAAE;uDAC4B;IARzB,sBAAsB;QAJlC,SAAS,CAAC;YACT,QAAQ,EAAE,oBAAoB;YAC9B,+gDAA8C;SAC/C,CAAC;OACW,sBAAsB,CASlC;IAAD,6BAAC;CATD;;ACeA,IAAM,aAAa,GAAG;IACpB,eAAe,EAAE,IAAI;IACrB,YAAY,YAAC,EAAQ;YAAN,cAAI;QACjB,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC/D;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,yBAAyB;YACpC,WAAW,EAAE,CAAC,oBAAoB,CAAC;YACnC,OAAO,EAAE,WAAW,CAAC,MAAM;SAC5B;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,yBAAyB;YACpC,WAAW,EAAE,CAAC,mBAAmB,CAAC;YAClC,OAAO,EAAE,WAAW,CAAC,KAAK;SAC3B;KACF;CACF,CAAC;AAcF;IAAA;KAyBC;+BAzBY,sBAAsB;IAC1B,6BAAM,GAAb,UAAc,MAAmC;QAAnC,uBAAA,EAAA,WAAmC;QAC/C,OAAO;YACL,QAAQ,EAAE,wBAAsB;YAChC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,eAAO,aAAa,EAAK,MAAM,CAAE;iBAC1C;gBACD,uBAAuB;gBACvB,oBAAoB;gBACpB,mBAAmB;gBACnB;oBACE,OAAO,EAAE,eAAe;oBACxB,QAAQ,EAAEE,aAAK,aAAa,EAAK,MAAM,EAAG,MAAM;oBAChD,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,uBAAuB;oBACjC,KAAK,EAAE,IAAI;iBACZ;aACF;SACF,CAAC;KACH;;IAxBU,sBAAsB;QAZlC,QAAQ,CAAC;YACR,YAAY,EAAE;gBACZ,2BAA2B;gBAC3B,yBAAyB;gBACzB,qBAAqB;gBACrB,sBAAsB;gBACtB,wBAAwB;aACzB;YACD,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC/E,OAAO,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;YAC3D,eAAe,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC;SAC9F,CAAC;OACW,sBAAsB,CAyBlC;IAAD,6BAAC;CAzBD;;;ICnDA;QAKE,yBAAoB,GAAG;YACrB;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAClB,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,CAAC;gBACL,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;aACxC;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC;gBACzC,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,CAAC;gBACL,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;aACV;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;gBAC/B,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,CAAC;gBACL,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;aACV;YACD;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;gBACrB,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,CAAC;gBACL,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;aACV;SACU,CAAC;KACf;IApCY,yBAAyB;QAJrC,SAAS,CAAC;YACT,QAAQ,EAAE,uBAAuB;YACjC,yMAAiD;SAClD,CAAC;OACW,yBAAyB,CAoCrC;IAAD,gCAAC;CApCD;;;ICiBE,0BACU,aAA4B,EAC5B,IAAiB,EACjB,MAAc,EACd,SAA2B,EAC3B,kBAAsC;QAJtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,SAAI,GAAJ,IAAI,CAAa;QACjB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAkB;QAC3B,uBAAkB,GAAlB,kBAAkB,CAAoB;QAhBhD,eAAU,GAAG,EAAE,CAAC;QAEC,gBAAW,GAAW,SAAS,CAAC;QAChC,uBAAkB,GAAW,eAAe,CAAC;QAC7C,UAAK,GAAW,OAAO,CAAC;KAarC;IAEE,mCAAQ,GAAd;;;;;;;wBACE,KAAA,IAAI,CAAA;wBAAc,qBAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAA;;wBAA9D,GAAK,UAAU,GAAG,SAA4C,CAAC;wBAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,UAAA,KAAK;4BAC1D,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;yBACvB,CAAC,CAAC;wBACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAA,KAAK;4BACtD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;yBACpB,CAAC,CAAC;;wBAGH,IAAI,CAAC,gCAAgC,EAAE,CAAC;wBACxC,qBAAM,IAAI,CAAC,6BAA6B,EAAE,EAAA;;wBAA1C,SAA0C,CAAC;;wBAG3C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,EAAE;4BAClC,IAAI,CAAC,wBAAwB,EAAE,CAAC;4BAChC,sBAAO;yBACR;;wBAGD,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAC9B,IAAI,CAAC,+BAA+B,EAAE,CAAC;wBACvC,IAAI,CAAC,yBAAyB,EAAE,CAAC;;;;;KAClC;IAED,sCAAW,GAAX;QACE,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC1D,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;SACrC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YACxD,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;SACpC;KACF;IAEO,qCAAU,GAAlB;QACE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,EAAE;YAClC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,gTAK7B,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,kKAG7B,CAAC,CAAC;SACJ;KACF;IAEO,kDAAuB,GAA/B;;QAEE,IAAM,QAAQ,GAAqB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,KAAK,KAAK,WAAW,GAAA,CAAC,CAAC;QACvF,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAChC;KACF;IAEO,2DAAgC,GAAxC;;;QAGE,IAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,KAAK,KAAK,oBAAoB,GAAA,CAAC,CAAC;QACvF,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACzC;KACF;IAEO,iDAAsB,GAA9B;QAAA,iBAeC;QAdC,IAAM,OAAO,GAAqB;YAChC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;YACzB,GAAG,EAAE,SAAS;SACf,CAAC;QAEF,IAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE;YACnC,OAAO,CAAC,KAAK,GAAG;gBACd,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;gBACxB,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aACxC,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/B;KACF;IAEO,0DAA+B,GAAvC;QAAA,iBAeC;QAdC,IAAM,YAAY,GAAqB;YACrC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;YACpC,GAAG,EAAE,mBAAmB;SACzB,CAAC;QAEF,IAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE;YAC/C,YAAY,CAAC,KAAK,GAAG;gBACnB,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC9B,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aAC7C,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;KACF;IAEO,oDAAyB,GAAjC;QAAA,iBAcC;QAbC,IAAM,UAAU,GAAqB;YACnC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;YAC7B,GAAG,EAAE,QAAQ;SACd,CAAC;QACF,IAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE;YAC/C,UAAU,CAAC,KAAK,GAAG;gBACjB,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC9B,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAC3C,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAClC;KACF;IAEa,wDAA6B,GAA3C;;;;;4BACmB,qBAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAA;;wBAAnD,IAAI,GAAK,CAAA,SAA0C,MAA/C;wBACZ,IAAI,IAAI,EAAE;4BACF,gBAAgB,GAAiB,IAAI,CAAC,IAAI,CAC9C,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,WAAW,KAAK,kBAAkB,GAAA,CAC9C,CAAC;4BACF,IAAI,gBAAgB,EAAE;gCACd,kBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gCAClE,cAAc,GAAqB;oCACvC,IAAI,EAAE,oBAAoB;oCAC1B,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;oCACjC,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAI,eAAa,0BAAuB,EAAE,OAAO,CAAC,GAAA;iCAC3E,CAAC;gCACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;6BACtC;yBACF;;;;;KACF;IAEO,mDAAwB,GAAhC;QAAA,iBAWC;QAVC,IAAM,SAAS,GAAqB;YAClC,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;YAC5B,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE;gBACL,IAAM,YAAY,GAAG,KAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAW,CAAC;gBACzE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC3B;SACF,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;IAEO,4CAAiB,GAAzB,UAA0B,YAAoB;QAC5C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,IAAS,IAAK,OAAA,IAAI,CAAC,QAAQ,KAAK,YAAY,GAAA,CAAC,CAAC;SAC1E;QACD,OAAO,SAAS,CAAC;KAClB;;gBAnKwB,aAAa;gBACtB,WAAW;gBACT,MAAM;gBACH,gBAAgB;gBACP,kBAAkB;;IAlBvCF;QAAR,KAAK,EAAE;oDAAQ;IADL,gBAAgB;QAJ5B,SAAS,CAAC;YACT,QAAQ,EAAE,wBAAwB;YAClC,m2BAAuC;SACxC,CAAC;OACW,gBAAgB,CAmL5B;IAAD,uBAAC;CAnLD;;;ICFE,gCAA4B,SAAoC;QAApC,cAAS,GAAT,SAAS,CAA2B;KAAI;IAEpE,wCAAO,GAAP;QACE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;KAC1B;;gBAJsC,yBAAyB,uBAAnD,IAAI;;IADN,sBAAsB;QAJlC,SAAS,CAAC;YACT,QAAQ,EAAE,2BAA2B;YACrC,0lBAA8C;SAC/C,CAAC;QAEaC,WAAA,IAAI,EAAE,CAAA;OADR,sBAAsB,CAMlC;IAAD,6BAAC;CAND;;ACcA;AACA,IAAI,YAAY,GAAG,EAAE,CAAC;AACtB,IAAI;;IAEF,YAAY,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;CAC/D;AAAC,OAAO,EAAE,EAAE;;CAEZ;SAkCe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAMtE;IACR;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;QACpC,WAAW,EAAE,OAAO,CAAC,wCAAwC,CAAC;QAC9D,SAAS,EAAE,gBAAgB;QAC3B,YAAY,cAAA;QACZ,IAAI,EAAE;YACJ,QAAQ,EAAE;gBACR,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE;oBACd,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,CAAC;iBACX;gBACD,GAAG,EAAE;oBACH,OAAO,EAAE;wBACP,cAAc,EAAE,IAAI;wBACpB,gBAAgB,EAAE,KAAK;qBACxB;iBACF;aACF;SACqB;KACzB;CAC8B,OAKvB;IACR;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;QACpC,WAAW,EAAE,OAAO,CAAC,wCAAwC,CAAC;QAC9D,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE;YACJ,QAAQ,EAAE;gBACR,YAAY,EAAE,IAAI;gBAClB,GAAG,EAAE;oBACH,OAAO,EAAE;wBACP,cAAc,EAAE,IAAI;wBACpB,gBAAgB,EAAE,KAAK;qBACxB;iBACF;aACF;SACqB;KACzB;CAC8B;AAIvC;IAAA;KAAsC;IAAzB,sBAAsB;QAxFlC,QAAQ,CAAC;YACR,eAAe,EAAE,CAAC,yBAAyB,EAAE,gBAAgB,EAAE,sBAAsB,CAAC;YACtF,OAAO,EAAE;gBACP,UAAU;gBACV,UAAU;gBACV,sBAAsB,CAAC,MAAM,CAAC;oBAC5B,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,wBAAwB;4BAC9B,SAAS,EAAE,yBAAyB;4BACpC,WAAW,EAAE,CAAC,oBAAoB,CAAC;4BACnC,OAAO,EAAE,WAAW,CAAC,MAAM;yBAC5B;wBACD;4BACE,IAAI,EAAE,wBAAwB;4BAC9B,SAAS,EAAE,yBAAyB;4BACpC,WAAW,EAAE,CAAC,mBAAmB,CAAC;4BAClC,OAAO,EAAE,WAAW,CAAC,KAAK;yBAC3B;wBACD;4BACE,IAAI,EAAE,EAAE;4BACR,SAAS,EAAE,yBAAyB;yBACrC;qBACF;iBACF,CAAC;gBACF,eAAe;gBACf,eAAe;aAChB;YACD,YAAY,EAAE,CAAC,yBAAyB,EAAE,gBAAgB,EAAE,sBAAsB,CAAC;YACnF,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,oBAAoB;oBAC7B,QAAQ,IAAwE;oBAChF,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,OAAO,EAAE,eAAe;oBACxB,KAAK,EAAE,IAAI;oBACX,QAAQ,IAuByB;iBAClC;gBACD;oBACE,OAAO,EAAE,eAAe;oBACxB,KAAK,EAAE,IAAI;oBACX,QAAQ,IAkByB;iBAClC;aACF;SACF,CAAC;OACW,sBAAsB,CAAG;IAAD,6BAAC;CAAtC;;ACtHA;;GAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-context-dashboard.js","sources":["ng://@c8y/ngx-components/context-dashboard/context-dashboard.model.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.service.ts","ng://@c8y/ngx-components/context-dashboard/device-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-detail.component.ts","ng://@c8y/ngx-components/context-dashboard/widget.service.ts","ng://@c8y/ngx-components/context-dashboard/widget-config.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/group-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-actions.factory.ts","ng://@c8y/ngx-components/context-dashboard/appearance-settings.component.ts","ng://@c8y/ngx-components/context-dashboard/widget-preview.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/welcome/welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/legacy-welcome/legacy-welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { Widget, DynamicComponentDefinition, Route, gettext } from '@c8y/ngx-components';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed.\n */\n settings?: {\n /**\n * Avoids to show the widget in the \"add widget\" modal\n */\n noNewWidgets?: boolean;\n ng1?: {\n options: {\n /**\n * Set this to false, to hide the device/group selector\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n noDeviceTarget?: boolean;\n /**\n * Set this to false to only select devices\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n groupsSelectable?: boolean;\n };\n /**\n * The context from the device selector.\n */\n context?: {\n id?: string;\n name?: string;\n };\n };\n /**\n * Any other information you want to pass to the config template\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;\n name?: string;\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}\n\nexport interface ContextDashboard {\n icon?: string;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n children?: {\n [id: string]: Widget;\n };\n}\n\nexport enum ContextDashboardType {\n Device = 'device',\n DeviceType = 'type',\n Group = 'group',\n Named = 'name'\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];\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Light`style`'),\n class: 'panel-content-light',\n description: gettext('The widget is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext(\n 'The widget is styled with a transparent background and therefore is border-less.'\n )\n },\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\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext('The dashboard is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`theme`'),\n class: 'dashboard-theme-transparent',\n description: gettext(\n 'The dashboard is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled with the main brand color.')\n }\n];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, UserService } from '@c8y/client';\nimport {\n AppStateService,\n getActivatedRoute,\n gettext,\n ModalService,\n Status,\n TabsService,\n ViewContext,\n Widget,\n Permissions\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { assign, pick, some, keys, keyBy, has, get, forEach, cloneDeep } from 'lodash-es';\nimport { from, of } from 'rxjs';\nimport {\n catchError,\n filter,\n map,\n mergeAll,\n mergeMap,\n tap,\n toArray,\n throwIfEmpty\n} from 'rxjs/operators';\nimport {\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType\n} from './context-dashboard.model';\n\n@Injectable()\nexport class ContextDashboardService {\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private currentContextRoute: string;\n private _formDisabled = true;\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = 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 user: UserService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async create(dashboardCfg: ContextDashboard, contextOrName: { contextData: any } | string) {\n let id;\n let dashboardType;\n if (typeof contextOrName === 'string') {\n id = contextOrName as string;\n dashboardType = ContextDashboardType.Named;\n } else {\n id = contextOrName.contextData.id as string;\n dashboardType = this.getDashboardTypeFromViewContext(dashboardCfg, contextOrName);\n }\n\n const dashboard: Partial<IManagedObject> = {};\n assign(dashboard, { c8y_Dashboard: dashboardCfg });\n\n const value =\n dashboardType === ContextDashboardType.DeviceType ? dashboardCfg.deviceTypeValue : id;\n\n const fragmentKey = this.createFragmentKey(dashboardType, value);\n dashboard[fragmentKey] = {};\n\n if (this.shouldSetGlobal(dashboard)) {\n assign(dashboard, { c8y_Global: {} });\n }\n const { data } = dashboardType === ContextDashboardType.Group || dashboardType === ContextDashboardType.Device\n ? await this.inventory.childAdditionsCreate(dashboard, id)\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n const { data } = await this.inventory.detail(dashboardMO);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(dashboard: ContextDashboardManagedObject) {\n const cleanedDashboard = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id']));\n cleanedDashboard.c8y_Global = this.shouldSetGlobal(dashboard);\n const { data } = await this.inventory.update(cleanedDashboard);\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n try {\n let msg = 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 {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`)\n );\n this.tabs.remove(tabToRemove);\n this.tabs.refresh();\n } catch (ex) {\n // intended empty\n }\n }\n\n activateDashboards(route: ActivatedRouteSnapshot, types: ContextDashboardType[]) {\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 return this.getTabs$(route.data.contextData, types);\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[]) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create({children}, name)\n )\n )\n );\n }\n\n async refreshTabs(dashboardMO: ContextDashboardManagedObject) {\n if (!this.isNamed(dashboardMO)) {\n const tabToUpdate = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboardMO.id}`)\n );\n\n const data = await this.detail(dashboardMO);\n if (tabToUpdate) {\n const { icon, priority, name } = data.c8y_Dashboard;\n tabToUpdate.icon = icon;\n tabToUpdate.priority = priority;\n tabToUpdate.label = name;\n }\n this.tabs.refresh();\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', 'dashboard', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n canEditDashboard(mo) {\n return this.permissions.canEdit(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'], mo);\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 isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.DeviceType}${\n this.INDEX_SPLIT\n }`\n ).test(prop)\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(style => style && new RegExp(styleName, 'i').test(style.class));\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 private getDashboard$(\n dashboardIdOrName,\n dashboardType: ContextDashboardType[],\n mo?: IManagedObject\n ) {\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}${\n this.INDEX_SPLIT\n }${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n private getTabs$(mo: ContextDashboardManagedObject, dashboardType: ContextDashboardType[]) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n this.setBaseContextRoute(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n map(dashboard => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard)),\n toArray()\n );\n }\n\n private getContextDashboards$(requests: Array<Promise<IResultList<IManagedObject>>>) {\n return from(requests).pipe(\n mergeAll(),\n mergeMap(response => response.data as ContextDashboardManagedObject[]));\n }\n\n private setBaseContextRoute(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n const type = dashboardType.includes(ContextDashboardType.Device)\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n this.currentContextRoute = `${type}/${mo.id}`;\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 removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): 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 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) {\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 });\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}${\n this.INDEX_SPLIT\n }${name}`,\n pageSize: 1\n });\n }\n\n private getContextDashboards(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n return dashboardType.map((type: ContextDashboardType) =>\n this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${\n type === ContextDashboardType.DeviceType ? mo.type : mo.id\n }`,\n pageSize: this.DEFAULT_PAGESIZE\n })\n );\n }\n\n private getDashboardTypeFromViewContext(dashboardCfg, context) {\n let dashboardType;\n if (context.context === ViewContext.Device) {\n dashboardType = dashboardCfg.deviceType\n ? ContextDashboardType.DeviceType\n : ContextDashboardType.Device;\n }\n if (context.context === ViewContext.Group) {\n dashboardType = ContextDashboardType.Group;\n }\n return dashboardType;\n }\n\n private createFragmentKey(contextDashboardType: ContextDashboardType, value: string) {\n return [this.FRAGMENT_NAME, contextDashboardType, value].join(this.INDEX_SPLIT);\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>) {\n if (this.isNamed(dashboard) || this.isDeviceType(dashboard)) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class DeviceDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.DeviceType\n ]);\n }\n}\n","import { Component, Inject, ViewChild } from '@angular/core';\nimport { ICON_LIST } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { clone } from 'lodash-es';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent {\n @ViewChild('dashboardDetailForm', { static: true }) dashboardDetailForm: NgForm;\n dashboard: ContextDashboard;\n current: ContextDashboard;\n deviceType: string;\n isNamedDashboard: boolean;\n icons: string[];\n filteredIcons: string[];\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n possibleStyling = { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES };\n result: Promise<ContextDashboard> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 10000;\n readonly DEFAULT_DASHBOARD_NAME = 'Dashboard';\n\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n @Inject(ICON_LIST) iconList: string[],\n private contextDashboardService: ContextDashboardService\n ) {\n this.icons = iconList;\n this.filteredIcons = iconList;\n }\n\n ngAfterContentInit(): void {\n const defaultDashboardCfg = {\n name: this.DEFAULT_DASHBOARD_NAME,\n priority: this.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType\n };\n\n if (this.dashboard) {\n this.current = clone(this.dashboard);\n this.setDashboardStyle();\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailForm.form.markAsDirty();\n }\n }\n\n save() {\n this.dashboard.classes = { [this.styling.themeClass]: true };\n this.dashboard.widgetClasses = { [this.styling.headerClass]: true };\n this._save(this.dashboard);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getDashboardPreviewStyle() {\n const cssClasses = {};\n cssClasses[this.styling.headerClass] = true;\n cssClasses[this.styling.themeClass] = true;\n return cssClasses;\n }\n\n selectIcon(icon) {\n this.dashboard.icon = icon;\n this.dashboardDetailForm.form.markAsDirty();\n }\n\n updateFiltered(term: string) {\n if (term) {\n const search = new RegExp(term, 'i');\n this.filteredIcons = this.icons.filter(val => search.test(val));\n } else {\n this.filteredIcons = this.icons;\n }\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { sortBy, cloneDeep } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition } 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 constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig\n ) {}\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById$(componentId).toPromise();\n }\n\n getWidgetDefinitions() {\n const translatedComponents = Array.from(this.dynamicComponentService.state).map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n return cloneDeep(sortBy(translatedComponents, 'label').filter(this.moduleConfig.widgetFilter));\n }\n}\n","import { Component, OnDestroy } from '@angular/core';\nimport { DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\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 possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n\n get isEdit() {\n return !!this.current;\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;\n private _cancel;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngAfterContentInit(): 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 if (this.mo.c8y_Dashboard.classes) {\n this.styling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses,\n ...(this.isEdit ? this.current.data.classes : {})\n });\n this.defaultStyling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n });\n }\n }\n\n save() {\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (this.widgetConfig && this.widgetConfig.device) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, 'settings'),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\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\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\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 changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\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 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) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n\n const styles = Object.keys(setClasses).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\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","import { Component, HostBinding, Inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertService,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardSettings,\n DynamicComponentDefinition,\n gettext,\n Widget,\n WidgetChange\n} from '@c8y/ngx-components';\nimport { cloneDeep, findIndex, get, keyBy, omit, values } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n CONTEXT_DASHBOARD_CONFIG,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\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})\nexport class ContextDashboardComponent implements OnInit, OnDestroy {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle: boolean = false;\n @Input()\n disabled: boolean = false;\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canDelete: boolean = true;\n @Input()\n isLoading: boolean = true;\n\n @HostBinding('class')\n class = '';\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n\n private dataSub: Subscription;\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 bsModal: BsModalService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\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 if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n await this.contextDashboardService.update(this.mo);\n this.onLoad();\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n */\n async updateDashboardChildren(child: DashboardChildChange) {\n const { children } = child;\n const dashboardMO: ContextDashboardManagedObject = this.mo;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n dashboardMO.c8y_Dashboard.children = mappedChildren;\n return this.contextDashboardService.update(dashboardMO);\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 }\n\n /**\n * Edits the current dashboard\n */\n async editDashboard() {\n const initialState = {\n dashboard: this.dashboard,\n deviceType: this.context.type,\n isNamedDashboard: this.contextDashboardService.isNamed(this.mo)\n };\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardMO = cloneDeep(this.mo);\n dashboardMO.c8y_Dashboard = await modal.result;\n await this.contextDashboardService.update(dashboardMO);\n await this.contextDashboardService.refreshTabs(dashboardMO);\n this.onLoad();\n modal.close();\n } catch (ex) {\n // intended empty\n }\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 initialState = {\n mo: this.mo,\n context: this.context,\n selected: cloneDeep(selected)\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n this.mo.c8y_Dashboard.children[newWidget.id] = newWidget;\n this.contextDashboardService.update(this.mo);\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n modal.close();\n } catch (ex) {\n // intended empty\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.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 deleteWidget(change: WidgetChange) {\n const { widget, source } = change;\n delete this.mo.c8y_Dashboard.children[widget.id];\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n // using setTimeout to give the component the chance to remove it.\n setTimeout(() => {\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child);\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 /**\n * Changes the dashboard settings to frozen or vice versa.\n * @param settings The current settings of the dashboard.\n */\n async toggleFreeze(settings: DashboardSettings) {\n this.toggleIsFrozenFlag(settings);\n try {\n await this.contextDashboardService.update(this.mo);\n if (this.dashboard.isFrozen) {\n this.alert.success(gettext('Your dashboard is locked now.'));\n } else {\n this.alert.success(gettext('Your dashboard is unlocked now.'));\n }\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleIsFrozenFlag(settings);\n }\n }\n\n private toggleIsFrozenFlag(settings: DashboardSettings) {\n settings.isFrozen = !settings.isFrozen;\n this.dashboard.isFrozen = settings.isFrozen;\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard }) => {\n this.context = this.route.parent.snapshot.data.contextData;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(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.onLoad();\n });\n }\n\n private async onLoad() {\n const canEditDashboard = await this.contextDashboardService.canEditDashboard(this.mo);\n this.disabled = !canEditDashboard;\n const dashboardChildren = cloneDeep(this.mo.c8y_Dashboard.children);\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard.classes\n };\n\n this.widgets = await Promise.all<Widget>(\n values(dashboardChildren).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n return this.mapLegacy(widget);\n })\n );\n this.class = Object.keys(dashboardClasses).join(' ');\n this.isLoading = false;\n }\n\n private mergeWidgetClasses(widget) {\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 ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private async mapLegacy(widget): Promise<Widget> {\n const cmp = await this.widgetService.getWidgetDefinition(widget.componentId || widget.name);\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 } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class GroupDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, ActionFactory, gettext, ViewContext, Permissions } from '@c8y/ngx-components';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\n@Injectable()\nexport class DashboardActionsFactory implements ActionFactory {\n constructor(\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private bsModal: BsModalService,\n private permissions: Permissions\n ) {}\n\n async get(activatedRoute: ActivatedRoute): Promise<Action[]> {\n const context =\n !activatedRoute.parent || activatedRoute.snapshot.data.context\n ? activatedRoute.snapshot.data\n : activatedRoute.parent.snapshot.data;\n const canEditDashboard = await this.isEnabled(context);\n return [\n {\n label: gettext('Add dashboard'),\n priority: 2500,\n action: () => this.addDashboard(context),\n disabled: !canEditDashboard\n }\n ];\n }\n\n async addDashboard(context) {\n let initialState: { deviceType: string };\n\n if (context.context === ViewContext.Device) {\n initialState = {\n deviceType: context.contextData.type\n };\n }\n\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardCfg = await modal.result;\n const dashboardMO: ContextDashboardManagedObject = await this.contextDashboardService.create(\n dashboardCfg,\n context\n );\n await this.contextDashboardService.navigateToDashboard(dashboardMO);\n modal.close();\n } catch (ex) {\n // intended emptys\n }\n }\n\n private async isEnabled(context) {\n if (context.contextData && context.contextData.id) {\n return (\n (await this.permissions.canEdit(\n ['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'],\n context.contextData\n )) && [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n return (\n this.permissions.hasAnyRole(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']) &&\n [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { ControlContainer, NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html',\n viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass: string = 'dashboard-theme-light';\n @Input()\n headerClass: string = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\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","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport {\n HOOK_ONCE_ROUTE,\n ViewContext,\n CoreModule,\n HOOK_ACTION\n} from '@c8y/ngx-components';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { CONTEXT_DASHBOARD_CONFIG, ContextDashboardConfig } from './context-dashboard.model';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { DashboardActionsFactory } from './dashboard-actions.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\n\nconst defaultConfig = {\n allowFullscreen: true,\n widgetFilter({ data }) {\n return !(data && data.settings && data.settings.noNewWidgets);\n },\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n }\n ]\n};\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent\n ],\n imports: [CoreModule, TooltipModule, PopoverModule, BsDropdownModule.forRoot()],\n exports: [ContextDashboardComponent, WidgetConfigComponent],\n entryComponents: [ContextDashboardComponent, WidgetConfigComponent, DashboardDetailComponent]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n ContextDashboardService,\n DeviceDashboardGuard,\n GroupDashboardGuard,\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: { ...defaultConfig, ...config }.routes,\n multi: true\n },\n {\n provide: HOOK_ACTION,\n useClass: DashboardActionsFactory,\n multi: true\n }\n ]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent {\n DEFAULT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext(''),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 12,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 6\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 6\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 6,\n _y: 5,\n _height: 8,\n _width: 6\n }\n ] as Widget[];\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { gettext, DocsService, DocLink, NavigatorService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TenantService, ApplicationService, IApplication } from '@c8y/client';\n\n@Component({\n selector: 'c8y-welcome-to-cockpit',\n templateUrl: './welcome.component.html'\n})\nexport class WelcomeToCockpit implements OnInit, OnDestroy {\n @Input() config;\n welcomeMessage;\n quickLinks = [];\n\n private readonly REPORT_NODE: string = 'Reports';\n private readonly CONFIGURATION_NODE: string = 'Configuration';\n private readonly TRIAL: string = 'TRIAL';\n private tenantType: string;\n private navNodes: any[];\n private links: DocLink[];\n private docsSubscription: Subscription;\n private navSubscription: Subscription;\n\n constructor(\n private tenantService: TenantService,\n private docs: DocsService,\n private router: Router,\n private navigator: NavigatorService,\n private applicationService: ApplicationService\n ) {}\n\n async ngOnInit() {\n this.tenantType = await this.tenantService.currentTenantType();\n this.setMessage();\n this.navSubscription = this.navigator.items$.subscribe(nodes => {\n this.navNodes = nodes;\n });\n this.docsSubscription = this.docs.items$.subscribe(links => {\n this.links = links;\n });\n\n // <---TRIAL & REGULAR TENANT --->\n this.createConnectSmartphoneQuickLink();\n await this.createQuicklinkRegisterDevice();\n\n // <--- TRIAL TENANT --->\n if (this.tenantType === this.TRIAL) {\n this.createQuicklinkUserGuide();\n return;\n }\n\n // <--- REGULAR TENANT --->\n this.createQuicklinkAddGroup();\n this.createQuickLinkReports();\n this.createQuicklinkDataPointLibrary();\n this.createQuicklinkSmartRules();\n }\n\n ngOnDestroy() {\n if (this.docsSubscription && !this.docsSubscription.closed) {\n this.docsSubscription.unsubscribe();\n }\n\n if (this.navSubscription && !this.navSubscription.closed) {\n this.navSubscription.unsubscribe();\n }\n }\n\n private setMessage() {\n if (this.tenantType === this.TRIAL) {\n this.welcomeMessage = gettext(`\n The Cockpit application allows you to build IoT applications in minutes.\n To get started, connect any device to the platform.\n If you do not have an IoT device to hand, you can start by connecting your smartphone.\n Click below to be guided through the process.\n `);\n } else {\n this.welcomeMessage = gettext(`\n The Cockpit application provides you with options to manage\n and monitor Internet of Things assets and data from business perspective.\n `);\n }\n }\n\n private createQuicklinkAddGroup() {\n // comes from angularJS factory c8yQuickLinks\n const addGroup: Partial<DocLink> = this.links.find(link => link.label === 'Add group');\n if (addGroup) {\n this.quickLinks.push(addGroup);\n }\n }\n\n private createConnectSmartphoneQuickLink() {\n // Provider in SensorPhoneModule defines the\n // 'Connect smartphone' quicklink.\n const connectSmartphone = this.links.find(link => link.label === 'Connect smartphone');\n if (connectSmartphone) {\n this.quickLinks.push(connectSmartphone);\n }\n }\n\n private createQuickLinkReports() {\n const reports: Partial<DocLink> = {\n icon: 'c8y-reports',\n label: gettext('Reports'),\n url: '/export'\n };\n\n const reportsNode = this.findNavigatorNode(this.REPORT_NODE);\n if (reportsNode && reportsNode.show) {\n reports.click = () => {\n reportsNode.open = true;\n this.router.navigateByUrl(reports.url);\n };\n this.quickLinks.push(reports);\n }\n }\n\n private createQuicklinkDataPointLibrary() {\n const dataPointLib: Partial<DocLink> = {\n icon: 'c8y-data-points',\n label: gettext('Data point library'),\n url: '/datapointlibrary'\n };\n\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n dataPointLib.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(dataPointLib.url);\n };\n this.quickLinks.push(dataPointLib);\n }\n }\n\n private createQuicklinkSmartRules() {\n const smartRules: Partial<DocLink> = {\n icon: 'c8y-smart-rules',\n label: gettext('Smart rules'),\n url: '/rules'\n };\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n smartRules.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(smartRules.url);\n };\n this.quickLinks.push(smartRules);\n }\n }\n\n private async createQuicklinkRegisterDevice() {\n const { data } = await this.applicationService.listByUser();\n if (data) {\n const deviceManagement: IApplication = data.find(\n app => app.contextPath === 'devicemanagement'\n );\n if (deviceManagement) {\n const deviceMgmtUrl = this.applicationService.getHref(deviceManagement);\n const registerDevice: Partial<DocLink> = {\n icon: 'c8y-device-connect',\n label: gettext('Register device'),\n click: () => window.open(`${deviceMgmtUrl}/#/deviceregistration`, '_self')\n };\n this.quickLinks.push(registerDevice);\n }\n }\n }\n\n private createQuicklinkUserGuide() {\n const userGuide: Partial<DocLink> = {\n icon: 'c8y-user',\n label: gettext('User guide'),\n url: '/users-guide/getting-started',\n click: () => {\n const userGuideURL = this.docs.getUserGuideLink(userGuide.url) as string;\n window.open(userGuideURL);\n }\n };\n this.quickLinks.push(userGuide);\n }\n\n private findNavigatorNode(nodeRealName: string) {\n if (this.navNodes && this.navNodes.length > 0) {\n return this.navNodes.find((node: any) => node.realName === nodeRealName);\n }\n return undefined;\n }\n}\n","import { Component, Host } from '@angular/core';\r\nimport { ContextDashboardComponent } from '../context-dashboard.component';\r\n\r\n@Component({\r\n selector: 'c8y-legacy-welcome-widget',\r\n templateUrl: './legacy-welcome.component.html'\r\n})\r\nexport class LegacyWelcomeComponent {\r\n constructor(@Host() private dashboard: ContextDashboardComponent) {}\r\n\r\n restore() {\r\n this.dashboard.restore();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { ContextDashboardModule } from './context-dashboard.module';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport {\n ViewContext,\n HOOK_NAVIGATOR_NODES,\n gettext,\n CoreModule,\n HOOK_COMPONENTS,\n DynamicComponentDefinition,\n QuickLinkModule,\n DocsModule\n} from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { ContextWidgetConfig } from './context-dashboard.model';\nimport { WelcomeToCockpit } from './welcome/welcome.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LegacyWelcomeComponent } from './legacy-welcome/legacy-welcome.component';\n\n// import for the preview img to get into the build.\nlet previewImage = '';\ntry {\n // tslint:disable-next-line: no-var-requires\n previewImage = require('./welcome/img/welcome-widget-pr.png');\n} catch (ex) {\n // intended empty\n}\n\n@NgModule({\n entryComponents: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n imports: [\n DocsModule,\n CoreModule,\n ContextDashboardModule.config({\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n },\n {\n path: '',\n component: CockpitDashboardComponent\n }\n ]\n }),\n QuickLinkModule,\n TranslateModule\n ],\n declarations: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n providers: [\n {\n provide: HOOK_NAVIGATOR_NODES,\n useValue: [{ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }],\n multi: true\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'cockpit.welcome.widget',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: WelcomeToCockpit,\n previewImage,\n data: {\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 12,\n _height: 6\n },\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'Cockpit Welcome',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: LegacyWelcomeComponent,\n data: {\n settings: {\n noNewWidgets: true,\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n }\n ]\n})\nexport class CockpitDashboardModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {AppearanceSettingsComponent as ɵa} from './appearance-settings.component';\nexport {CockpitDashboardComponent as ɵh} from './cockpit-dashboard.component';\nexport {ContextDashboardComponent as ɵb} from './context-dashboard.component';\nexport {DashboardActionsFactory as ɵg} from './dashboard-actions.factory';\nexport {DashboardDetailComponent as ɵf} from './dashboard-detail.component';\nexport {LegacyWelcomeComponent as ɵj} from './legacy-welcome/legacy-welcome.component';\nexport {WelcomeToCockpit as ɵi} from './welcome/welcome.component';\nexport {WidgetConfigComponent as ɵd} from './widget-config.component';\nexport {WidgetPreviewComponent as ɵe} from './widget-preview.component';\nexport {WidgetService as ɵc} from './widget.service';"],"names":["tslib_1.__decorate","tslib_1.__param","tslib_1.__assign"],"mappings":"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"}
@@ -392,7 +392,7 @@ var ConfigurationListComponent = /** @class */ (function () {
392
392
  ConfigurationListComponent = __decorate([
393
393
  Component({
394
394
  selector: 'c8y-configuration-list',
395
- template: "<c8y-title>\n <span translate>Configuration snapshots repository</span>&nbsp;\n <small *ngIf=\"(configurations$ | async)?.paging.totalPages === 1 && !filterTerm\"\n >{{ (configurations$ | async).data.length }} <span translate>snapshots</span></small\n >\n <small\n *ngIf=\"(configurations$ | async)?.paging.totalPages > 1 && !filterTerm\"\n [tooltip]=\"'More data available. Scroll to the bottom of the list to load it.' | translate\"\n container=\"body\"\n >{{ (configurations$ | async).paging.pageSize }}+ <span translate>snapshots</span></small\n >\n <small *ngIf=\"filterTerm\"\n ><span translate>Search results for</span>&nbsp;\"{{ this.filterTerm }}\"</small\n >\n</c8y-title>\n\n<c8y-action-bar-item itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n type=\"text\"\n [value]=\"filterTerm\"\n (keyup)=\"filterChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button class=\"btn btn-clean\" (click)=\"filterTerm = ''; setPipe('')\">\n <i [c8yIcon]=\"filterTerm.length === 0 ? 'filter' : 'close'\"></i>\n </button>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" (click)=\"add()\">\n <i c8yIcon=\"plus-square\"></i> {{ 'Add configuration snapshot' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"!filterTerm && (configurations$ | async)?.data.length === 0\"\n>\n <h1 c8yIcon=\"gears\"></h1>\n <h3 translate>There are no configuration snapshots defined</h3>\n <p translate>Add a configuration snapshot first.</p>\n <div>\n <button (click)=\"add()\" class=\"btn btn-primary\" translate>\n Add configuration snapshot\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate\n >Find out more in the\n <a c8y-guide-href=\"users-guide/device-management/#configuration-repository\"\n >User guide`KEEP_ORIGINAL`</a\n >.</small\n >\n </p>\n</div>\n\n<ng-template #notFound>\n <c8y-li class=\"p-8 text-center\">\n <p>\n <span translate>No more entries found for filter:</span>&nbsp;<strong>{{\n filterTerm\n }}</strong>\n </p>\n <button class=\"btn btn-primary btn-xs m-t-8\" translate (click)=\"filterTerm = ''; setPipe('')\">\n Reset filter\n </button>\n </c8y-li>\n</ng-template>\n<div class=\"p-b-32\">\n <c8y-list-group>\n <c8y-li\n *c8yFor=\"\n let configuration of configurations$;\n pipe: filterPipe;\n notFound: this.filterTerm ? notFound : undefined\n \"\n >\n <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n <div class=\"row flex-row\">\n <div class=\"col-xs-3\">\n <c8y-highlight\n [text]=\"configuration.name || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </div>\n <div class=\"col-xs-3\">\n <span class=\"text-muted text-truncate\" [title]=\"configuration.description\">{{\n configuration.description\n }}</span>\n </div>\n <div class=\"col-xs-3\">\n <small translate class=\"text-muted text-uppercase\">Device type:</small>&nbsp;\n {{ configuration.deviceType || '-' }}\n </div>\n <div class=\"col-xs-3 text-right\">\n <span class=\"label label-primary\" *ngIf=\"configuration.configurationType\">\n <c8y-highlight\n [text]=\"configuration.configurationType\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n <c8y-li-action (click)=\"edit(configuration)\" icon=\"pencil\">\n Edit\n </c8y-li-action>\n <c8y-li-action (click)=\"delete(configuration)\" icon=\"trash-o\">\n Delete\n </c8y-li-action>\n </c8y-li>\n </c8y-list-group>\n</div>\n"
395
+ template: "<c8y-title>\n <span translate>Configuration snapshots repository</span>&nbsp;\n <small *ngIf=\"(configurations$ | async)?.paging.totalPages === 1 && !filterTerm\"\n >{{ (configurations$ | async).data.length }} <span translate>snapshots</span></small\n >\n <small\n *ngIf=\"(configurations$ | async)?.paging.totalPages > 1 && !filterTerm\"\n [tooltip]=\"'More data available. Scroll to the bottom of the list to load it.' | translate\"\n container=\"body\"\n >{{ (configurations$ | async).paging.pageSize }}+ <span translate>snapshots</span></small\n >\n <small *ngIf=\"filterTerm\"\n ><span translate>Search results for</span>&nbsp;\"{{ this.filterTerm }}\"</small\n >\n</c8y-title>\n\n<c8y-action-bar-item itemClass=\"navbar-form\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter\u2026' | translate }}\"\n type=\"text\"\n [value]=\"filterTerm\"\n (keyup)=\"filterChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button class=\"btn btn-clean\" (click)=\"filterTerm = ''; setPipe('')\">\n <i [c8yIcon]=\"filterTerm.length === 0 ? 'filter' : 'close'\"></i>\n </button>\n </span>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" (click)=\"add()\">\n <i c8yIcon=\"plus-square\"></i> {{ 'Add configuration snapshot' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"!filterTerm && (configurations$ | async)?.data.length === 0\"\n>\n <h1 c8yIcon=\"gears\"></h1>\n <h3 translate>There are no configuration snapshots defined</h3>\n <p translate>Add a configuration snapshot first.</p>\n <div>\n <button (click)=\"add()\" class=\"btn btn-primary\" translate>\n Add configuration snapshot\n </button>\n </div>\n <p c8y-guide-docs>\n <small forceHtmlTranslate ngNonBindable\n >Find out more in the\n <a c8y-guide-href=\"users-guide/device-management/#configuration-repository\"\n >User guide`KEEP_ORIGINAL`</a\n >.</small\n >\n </p>\n</div>\n\n<ng-template #notFound>\n <c8y-li class=\"p-8 text-center\">\n <p>\n <span translate>No more entries found for filter:</span>&nbsp;<strong>{{\n filterTerm\n }}</strong>\n </p>\n <button class=\"btn btn-primary btn-xs m-t-8\" translate (click)=\"filterTerm = ''; setPipe('')\">\n Reset filter\n </button>\n </c8y-li>\n</ng-template>\n<div class=\"p-b-32\">\n <c8y-list-group>\n <c8y-li\n *c8yFor=\"\n let configuration of configurations$;\n pipe: filterPipe;\n notFound: this.filterTerm ? notFound : undefined\n \"\n >\n <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n <div class=\"row flex-row\">\n <div class=\"col-xs-3\">\n <c8y-highlight\n [text]=\"configuration.name || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </div>\n <div class=\"col-xs-3\">\n <span class=\"text-muted text-truncate\" [title]=\"configuration.description\">{{\n configuration.description\n }}</span>\n </div>\n <div class=\"col-xs-3\">\n <small translate class=\"text-muted text-uppercase\">Device type:</small>&nbsp;\n {{ configuration.deviceType || '-' }}\n </div>\n <div class=\"col-xs-3 text-right\">\n <span class=\"label label-primary\" *ngIf=\"configuration.configurationType\">\n <c8y-highlight\n [text]=\"configuration.configurationType\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n <c8y-li-action (click)=\"edit(configuration)\" icon=\"pencil\">\n Edit\n </c8y-li-action>\n <c8y-li-action (click)=\"delete(configuration)\" icon=\"trash-o\">\n Delete\n </c8y-li-action>\n </c8y-li>\n </c8y-list-group>\n</div>\n"
396
396
  })
397
397
  ], ConfigurationListComponent);
398
398
  return ConfigurationListComponent;