@c8y/ngx-components 1023.85.1 → 1023.88.2

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 (84) hide show
  1. package/ai/agent-chat/index.d.ts.map +1 -1
  2. package/alarm-event-selector/index.d.ts +6 -0
  3. package/alarm-event-selector/index.d.ts.map +1 -1
  4. package/context-dashboard/index.d.ts +11 -1
  5. package/context-dashboard/index.d.ts.map +1 -1
  6. package/data-preparation/index.d.ts +10 -0
  7. package/data-preparation/index.d.ts.map +1 -0
  8. package/datapoint-selector/index.d.ts +2 -1
  9. package/datapoint-selector/index.d.ts.map +1 -1
  10. package/echart/index.d.ts +1 -0
  11. package/echart/index.d.ts.map +1 -1
  12. package/echart/models/index.d.ts +1 -0
  13. package/echart/models/index.d.ts.map +1 -1
  14. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +12 -2
  15. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +90 -21
  17. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +10 -10
  19. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-data-preparation.mjs +63 -0
  21. package/fesm2022/c8y-ngx-components-data-preparation.mjs.map +1 -0
  22. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +14 -12
  23. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-echart.mjs +102 -44
  26. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-global-context.mjs +2 -2
  28. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-icon-selector.mjs +2 -2
  30. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -1
  32. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +6 -6
  34. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs +3 -3
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-list.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs +2 -2
  40. package/fesm2022/c8y-ngx-components-widgets-definitions-event-list.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +30 -6
  44. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +4 -4
  46. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +3 -3
  48. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -2
  50. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +1 -1
  52. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-widgets-definitions-pie-chart.mjs +3 -3
  54. package/fesm2022/c8y-ngx-components-widgets-definitions-pie-chart.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +3 -3
  56. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +3 -3
  58. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  60. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  61. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +2 -2
  62. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  63. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +2 -2
  64. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs.map +1 -1
  65. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +3 -3
  66. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  67. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +2 -2
  68. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  69. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -2
  70. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -2
  72. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +10 -9
  74. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +2 -2
  76. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components.mjs +32 -10
  78. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  79. package/index.d.ts +1 -0
  80. package/index.d.ts.map +1 -1
  81. package/locales/locales.pot +39 -0
  82. package/package.json +1 -1
  83. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  84. package/widgets/implementations/pie-chart/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-implementations-three-d-rotation.mjs","sources":["../../widgets/implementations/three-d-rotation/three-d-rotation/three-d-rotation.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation/three-d-rotation.component.html","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-view/three-d-rotation-widget-view.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-view/three-d-rotation-widget-view.component.html","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-config/three-d-rotation-widget-config.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-config/three-d-rotation-widget-config.component.html","../../widgets/implementations/three-d-rotation/c8y-ngx-components-widgets-implementations-three-d-rotation.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { combineLatest, from, Observable, of, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay, switchMap } from 'rxjs/operators';\nimport { loadThree } from '@c8y/ngx-components/lazy/three';\nimport { ThreeDRotationWidgetRotate } from '../three-d-rotation.model';\nimport { loadOrbitControls } from '@c8y/ngx-components/lazy/three-orbit-controls';\nimport type * as THREE from 'three';\nimport type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\n\n@Component({\n selector: 'c8y-three-d-rotation',\n templateUrl: './three-d-rotation.component.html',\n standalone: true,\n imports: []\n})\nexport class ThreeDRotationComponent implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild('canvas')\n private canvasRef: ElementRef;\n\n @Input() angles$: Observable<ThreeDRotationWidgetRotate> = of({ x: 0, y: 0, z: 0 });\n @Input() modelObj$: Observable<any>;\n @Input() cameraType$: Observable<string> = of('PC');\n @Input() isWireframe$: Observable<boolean> = of(true);\n\n get canvas(): HTMLCanvasElement | null {\n return this.canvasRef?.nativeElement;\n }\n\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera | THREE.OrthographicCamera;\n model: THREE.Object3D;\n private renderer: THREE.WebGLRenderer;\n\n private afterViewInit$ = new Subject<void>();\n\n private renderSubscription: Subscription;\n private controls: OrbitControls;\n\n ngOnInit() {\n const three$ = from(loadThree()).pipe(shareReplay(1));\n const model$ = combineLatest([three$, this.modelObj$]).pipe(\n filter(([, modelObj]) => !!modelObj),\n switchMap(([three, modelObj]) => this.loadModel(modelObj, three))\n );\n const modelWithWireframe$ = combineLatest([model$, this.isWireframe$]).pipe(\n map(([model, isWireframe]) => this.setWireframe(model, isWireframe))\n );\n\n const rotatedModel$ = combineLatest([modelWithWireframe$, this.angles$]).pipe(\n filter(([, angles]) => !!angles),\n map(([model, angles]) => {\n Object.assign(model.rotation, angles);\n return model;\n })\n );\n\n const cameraType$ = this.cameraType$.pipe(\n filter(type => !!type),\n distinctUntilChanged()\n );\n\n let previousCameraType: string;\n this.renderSubscription = combineLatest([\n three$,\n rotatedModel$,\n cameraType$,\n this.afterViewInit$\n ])\n .pipe(filter(([, model]) => !!model))\n .subscribe(async ([three, model, cameraType]) => {\n if (model !== this.model || previousCameraType !== cameraType) {\n this.model = model;\n previousCameraType = cameraType;\n this.createScene(three, model, cameraType);\n }\n if (!this.renderer) {\n await this.setupRenderer(three);\n }\n this.render();\n });\n }\n\n ngOnDestroy(): void {\n this.renderSubscription?.unsubscribe();\n this.controls?.dispose();\n }\n\n ngAfterViewInit() {\n this.afterViewInit$.next();\n }\n\n async loadModel(\n modelObj: any,\n three: typeof THREE\n ): Promise<THREE.Object3D<THREE.Object3DEventMap>> {\n const loader = new three.ObjectLoader();\n const parsedModel = await loader.parse(modelObj);\n return parsedModel;\n }\n\n async setupRenderer(three: typeof THREE) {\n //* Renderer\n // Use canvas element in template\n this.renderer = new three.WebGLRenderer({ canvas: this.canvas });\n this.renderer.setPixelRatio(devicePixelRatio);\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n\n const OrbitControls = await loadOrbitControls();\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.rotateSpeed = 0.35;\n this.controls.minDistance = 20;\n this.controls.maxDistance = 50;\n this.controls.minZoom = 0.5;\n this.controls.maxZoom = 2;\n this.controls.addEventListener('change', () => this.render());\n }\n\n setWireframe(parsedModel: THREE.Object3D, isWireframe: boolean) {\n parsedModel.children.forEach((child: any) => {\n if (child.material) {\n child.material.wireframe = isWireframe;\n }\n });\n return parsedModel;\n }\n\n private render(): void {\n this.renderer?.render(this.scene, this.camera);\n }\n\n private createScene(three: typeof THREE, model: THREE.Object3D, cameraType: string) {\n //* Scene\n this.scene = new three.Scene();\n this.scene.background = new three.Color(0xffffff);\n this.scene.add(model);\n\n const light = new three.AmbientLight(0xffffff, 0.5);\n const lightDirectional = new three.DirectionalLight(0xffffff);\n const lightDirectional2 = new three.DirectionalLight(0xffffff);\n\n lightDirectional.position.set(20, 25, 30);\n lightDirectional2.position.set(-20, -25, -30);\n this.scene.add(lightDirectional);\n this.scene.add(lightDirectional2);\n this.scene.add(light);\n\n this.camera = this.createCamera(three, cameraType);\n }\n\n private createCamera(three: typeof THREE, cameraType: string) {\n let camera: THREE.OrthographicCamera | THREE.PerspectiveCamera;\n switch (cameraType) {\n case 'OC':\n camera = new three.OrthographicCamera(30 / -2, 30 / 2, 30 / 2, 30 / -2, 1, 1000);\n break;\n case 'PC':\n default:\n camera = new three.PerspectiveCamera(30, this.getAspectRatio(), 0.1, 1000);\n break;\n }\n\n camera.rotateX(Math.PI / 2);\n camera.rotateY(Math.PI / 2);\n\n camera.position.z = 23;\n camera.position.x = 14;\n camera.position.y = 7;\n\n return camera;\n }\n\n private getAspectRatio() {\n return this.canvas.clientWidth / this.canvas.clientHeight;\n }\n}\n","<canvas #canvas class=\"fit-w fit-h\"></canvas>\n","import {\n Component,\n Input,\n OnChanges,\n OnInit,\n Optional,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n DynamicComponent,\n DynamicComponentAlert,\n DynamicComponentAlertAggregator,\n MeasurementRealtimeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap\n} from 'rxjs/operators';\nimport { ThreeDRotationWidgetConfig, ThreeDRotationWidgetRotate } from '../three-d-rotation.model';\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { loadBoxModel } from '@c8y/ngx-components/widgets/implementations/three-d-rotation/lazy-box-model';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { loadPhoneModel } from '@c8y/ngx-components/widgets/implementations/three-d-rotation/lazy-phone-model';\nimport { ThreeDRotationComponent } from '../three-d-rotation/three-d-rotation.component';\n\n@Component({\n selector: 'c8y-three-d-rotation-widget-view',\n templateUrl: './three-d-rotation-widget-view.component.html',\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [ThreeDRotationComponent]\n})\nexport class ThreeDRotationWidgetViewComponent implements OnChanges, OnInit, DynamicComponent {\n @Input() config: ThreeDRotationWidgetConfig;\n alerts = new DynamicComponentAlertAggregator();\n webGLAvailable = signal(true);\n angles$: Observable<ThreeDRotationWidgetRotate>;\n modelObj$: Observable<any>;\n deviceId$ = new BehaviorSubject<string>(null);\n modelName$ = new BehaviorSubject<string>(null);\n cameraType$ = new BehaviorSubject<string>('PC');\n isWireframe$ = new BehaviorSubject<boolean>(true);\n\n private webGLErrorText = gettext(\n 'WebGL is not available. Hardware acceleration may be disabled in your browser. Enable it in browser settings to use this widget.'\n );\n\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n @Optional() private dashboard: ContextDashboardComponent\n ) {\n this.modelObj$ = this.modelName$.pipe(\n filter(name => !!name),\n distinctUntilChanged(),\n switchMap(name => this.getModelUrl(name)),\n shareReplay(1)\n );\n this.angles$ = this.deviceId$.pipe(\n filter(id => !!id),\n distinctUntilChanged(),\n switchMap(id => this.getAnglesOfDevice$(id)),\n startWith({ x: 0, y: 0, z: 0 })\n );\n }\n\n ngOnInit(): void {\n if (!this.isWebGLAvailable()) {\n this.webGLAvailable.set(false);\n this.alerts.addAlerts(\n new DynamicComponentAlert({\n type: 'warning',\n text: this.webGLErrorText\n })\n );\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config && this.config) {\n this.onConfigChange();\n }\n }\n\n private onConfigChange() {\n if (this.config.device?.id) {\n this.deviceId$.next(`${this.config.device.id}`);\n } else if (this.dashboard?.context?.id) {\n this.deviceId$.next(`${this.dashboard.context?.id}`);\n }\n\n if (this.config.objectModel) {\n this.modelName$.next(this.config.objectModel);\n }\n\n if (this.config.cameraType) {\n this.cameraType$.next(this.config.cameraType);\n }\n\n if (this.config.isWireframe !== undefined) {\n this.isWireframe$.next(this.config.isWireframe);\n }\n }\n\n private async getModelUrl(model: string): Promise<any> {\n // The name *.min.json still exist for backwards compatibility\n // it might be stored in certain widget configs.\n if (model === 'box.min.json') {\n return await loadBoxModel();\n } else {\n return await loadPhoneModel();\n }\n }\n\n private getAnglesOfDevice$(deviceId: string): Observable<ThreeDRotationWidgetRotate> {\n const fragment = 'c8y_Acceleration';\n const series = ['accelerationX', 'accelerationY', 'accelerationZ'];\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(fragment, series[0], deviceId, 1)\n .pipe(\n filter(m => !!m && m[fragment] && series.every(axisSeries => m[fragment][axisSeries])),\n map(measurement => {\n const [xAxisValue, yAxisValue, zAxisValue] = series.map(axisSeries =>\n Math.round(measurement[fragment][axisSeries].value)\n );\n return this.convertValues(xAxisValue, yAxisValue, zAxisValue);\n })\n );\n }\n\n private convertValues(x: number, y: number, z: number): ThreeDRotationWidgetRotate {\n let rotateX = Math.atan2(y, z);\n let rotateY = Math.atan2(x, Math.sqrt(y * y + z * z));\n rotateX = rotateX ? rotateX % (Math.PI * 2) : 0;\n rotateY = rotateY ? rotateY % (Math.PI * 2) : 0;\n\n return {\n x: rotateX,\n y: 0,\n z: rotateY\n };\n }\n\n private isWebGLAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n return !!context;\n } catch {\n return false;\n }\n }\n}\n","@if (webGLAvailable()) {\n <c8y-three-d-rotation\n [modelObj$]=\"modelObj$\"\n [angles$]=\"angles$\"\n [cameraType$]=\"cameraType$\"\n [isWireframe$]=\"isWireframe$\"\n ></c8y-three-d-rotation>\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ControlContainer, FormBuilder, NgForm, Validators } from '@angular/forms';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ThreeDRotationWidgetConfig } from '../three-d-rotation.model';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\n\n@Component({\n selector: 'c8y-three-d-rotation-widget-config',\n templateUrl: './three-d-rotation-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ButtonsModule]\n})\nexport class ThreeDRotationWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: ThreeDRotationWidgetConfig;\n formGroup: ReturnType<ThreeDRotationWidgetConfigComponent['createForm']>;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm\n ) {}\n\n onBeforeSave(\n config?: ThreeDRotationWidgetConfig\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n this.initForm();\n }\n\n private initForm(): void {\n this.formGroup = this.createForm(this.formBuilder);\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm(formBuilder: FormBuilder) {\n return formBuilder.group({\n objectModel: ['box.min.json', [Validators.minLength(1)]],\n isWireframe: [true, []],\n cameraType: ['PC', [Validators.minLength(2), Validators.maxLength(2)]]\n });\n }\n}\n","<fieldset class=\"c8y-fieldset\">\n <legend>{{ 'Rendering' | translate }}</legend>\n<form [formGroup]=\"formGroup\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Select object model for rendering</label>\n <div class=\"input-group input-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectModel\">\n <option value=\"box.min.json\" translate>Box model</option>\n <option value=\"phoneModel.min.json\" translate>Phone model</option>\n </select>\n </div>\n <span class=\"input-group-addon bg-level-0\">\n <label class=\"c8y-switch\">\n <input type=\"checkbox\" formControlName=\"isWireframe\" />\n <span></span>\n <span translate>Wireframe</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"form-group-sm\">\n <label translate>Camera type</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"cameraType\">\n <option value=\"OC\" translate>Orthographic camera</option>\n <option value=\"PC\" translate>Perspective camera</option>\n </select>\n </div>\n </c8y-form-group>\n</form>\n</fieldset>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;MAuBa,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;AAUW,QAAA,IAAA,CAAA,OAAO,GAA2C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAE1E,QAAA,IAAA,CAAA,WAAW,GAAuB,EAAE,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,YAAY,GAAwB,EAAE,CAAC,IAAI,CAAC;AAW7C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AA+I7C,IAAA;AAxJC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,aAAa;IACtC;IAYA,QAAQ,GAAA;AACN,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EACpC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAClE;AACD,QAAA,MAAM,mBAAmB,GAAG,aAAa,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CACrE;AAED,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC3E,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAChC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;YACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AACrC,YAAA,OAAO,KAAK;QACd,CAAC,CAAC,CACH;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EACtB,oBAAoB,EAAE,CACvB;AAED,QAAA,IAAI,kBAA0B;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC;YACtC,MAAM;YACN,aAAa;YACb,WAAW;AACX,YAAA,IAAI,CAAC;SACN;AACE,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;aACnC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAI;YAC9C,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,kBAAkB,KAAK,UAAU,EAAE;AAC7D,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;gBAClB,kBAAkB,GAAG,UAAU;gBAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;YAC5C;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACjC;YACA,IAAI,CAAC,MAAM,EAAE;AACf,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC1B;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B;AAEA,IAAA,MAAM,SAAS,CACb,QAAa,EACb,KAAmB,EAAA;AAEnB,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE;QACvC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChD,QAAA,OAAO,WAAW;IACpB;IAEA,MAAM,aAAa,CAAC,KAAmB,EAAA;;;AAGrC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC7C,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AAExE,QAAA,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/D;IAEA,YAAY,CAAC,WAA2B,EAAE,WAAoB,EAAA;QAC5D,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC1C,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,gBAAA,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,WAAW;YACxC;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACpB;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IAChD;AAEQ,IAAA,WAAW,CAAC,KAAmB,EAAE,KAAqB,EAAE,UAAkB,EAAA;;QAEhF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAErB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC7D,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAE9D,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzC,QAAA,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC;IACpD;IAEQ,YAAY,CAAC,KAAmB,EAAE,UAAkB,EAAA;AAC1D,QAAA,IAAI,MAA0D;QAC9D,QAAQ,UAAU;AAChB,YAAA,KAAK,IAAI;AACP,gBAAA,MAAM,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;gBAChF;AACF,YAAA,KAAK,IAAI;AACT,YAAA;AACE,gBAAA,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;gBAC1E;;QAGJ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAE3B,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;AAErB,QAAA,OAAO,MAAM;IACf;IAEQ,cAAc,GAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;IAC3D;+GAhKW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,uSCvBpC,mDACA,EAAA,CAAA,CAAA;;4FDsBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EAEpB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,mDAAA,EAAA;;sBAGV,SAAS;uBAAC,QAAQ;;sBAGlB;;sBACA;;sBACA;;sBACA;;;MEUU,iCAAiC,CAAA;IAe5C,WAAA,CACU,mBAA+C,EACnC,SAAoC,EAAA;QADhD,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;AAf/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,+BAA+B,EAAE;AAC9C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,IAAI,0DAAC;AAG7B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAEzC,QAAA,IAAA,CAAA,cAAc,GAAG,OAAO,CAC9B,kIAAkI,CACnI;AAMC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACnC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EACtB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EACzC,WAAW,CAAC,CAAC,CAAC,CACf;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAChC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAClB,oBAAoB,EAAE,EACtB,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAC5C,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAChC;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CACnB,IAAI,qBAAqB,CAAC;AACxB,gBAAA,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI,CAAC;AACZ,aAAA,CAAC,CACH;QACH;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;YACjC,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEQ,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,CAAC;QACjD;aAAO,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAA,CAAE,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAC/C;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC/C;QAEA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACjD;IACF;IAEQ,MAAM,WAAW,CAAC,KAAa,EAAA;;;AAGrC,QAAA,IAAI,KAAK,KAAK,cAAc,EAAE;YAC5B,OAAO,MAAM,YAAY,EAAE;QAC7B;aAAO;YACL,OAAO,MAAM,cAAc,EAAE;QAC/B;IACF;AAEQ,IAAA,kBAAkB,CAAC,QAAgB,EAAA;QACzC,MAAM,QAAQ,GAAG,kBAAkB;QACnC,MAAM,MAAM,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;QAClE,OAAO,IAAI,CAAC;aACT,iCAAiC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;AAClE,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EACtF,GAAG,CAAC,WAAW,IAAG;AAChB,YAAA,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,IAChE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CACpD;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;QAC/D,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;QACnD,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,QAAA,OAAO,GAAG,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,QAAA,OAAO,GAAG,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;QAE/C,OAAO;AACL,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE;SACJ;IACH;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC;YACrF,OAAO,CAAC,CAAC,OAAO;QAClB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;+GAtHW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,6GAJjC,CAAC,0BAA0B,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCzC,sNAQA,4CD8BY,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEtB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;+BACE,kCAAkC,EAAA,SAAA,EAEjC,CAAC,0BAA0B,CAAC,cAC3B,IAAI,EAAA,OAAA,EACP,CAAC,uBAAuB,CAAC,EAAA,QAAA,EAAA,sNAAA,EAAA;;0BAmB/B;;sBAhBF;;;ME3BU,mCAAmC,CAAA;IAI9C,WAAA,CACU,WAAwB,EACxB,IAAY,EAAA;QADZ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,IAAI,GAAJ,IAAI;IACX;AAEH,IAAA,YAAY,CACV,MAAmC,EAAA;AAEnC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,QAAQ,GAAA;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;IACxC;AAEQ,IAAA,UAAU,CAAC,WAAwB,EAAA;QACzC,OAAO,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,WAAW,EAAE,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACvB,YAAA,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtE,SAAA,CAAC;IACJ;+GAnCW,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,4HCdhD,swCAiCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBY,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAFpB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAA,CAAA,CAAA;;4FAIxD,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAP/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,iBAE/B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,cACvD,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,swCAAA,EAAA;;sBAGnC;;;AEfH;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-implementations-three-d-rotation.mjs","sources":["../../widgets/implementations/three-d-rotation/three-d-rotation/three-d-rotation.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation/three-d-rotation.component.html","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-view/three-d-rotation-widget-view.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-view/three-d-rotation-widget-view.component.html","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-config/three-d-rotation-widget-config.component.ts","../../widgets/implementations/three-d-rotation/three-d-rotation-widget-config/three-d-rotation-widget-config.component.html","../../widgets/implementations/three-d-rotation/c8y-ngx-components-widgets-implementations-three-d-rotation.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { combineLatest, from, Observable, of, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay, switchMap } from 'rxjs/operators';\nimport { loadThree } from '@c8y/ngx-components/lazy/three';\nimport { ThreeDRotationWidgetRotate } from '../three-d-rotation.model';\nimport { loadOrbitControls } from '@c8y/ngx-components/lazy/three-orbit-controls';\nimport type * as THREE from 'three';\nimport type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\n\n@Component({\n selector: 'c8y-three-d-rotation',\n templateUrl: './three-d-rotation.component.html',\n standalone: true,\n imports: []\n})\nexport class ThreeDRotationComponent implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild('canvas')\n private canvasRef: ElementRef;\n\n @Input() angles$: Observable<ThreeDRotationWidgetRotate> = of({ x: 0, y: 0, z: 0 });\n @Input() modelObj$: Observable<any>;\n @Input() cameraType$: Observable<string> = of('PC');\n @Input() isWireframe$: Observable<boolean> = of(true);\n\n get canvas(): HTMLCanvasElement | null {\n return this.canvasRef?.nativeElement;\n }\n\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera | THREE.OrthographicCamera;\n model: THREE.Object3D;\n private renderer: THREE.WebGLRenderer;\n\n private afterViewInit$ = new Subject<void>();\n\n private renderSubscription: Subscription;\n private controls: OrbitControls;\n\n ngOnInit() {\n const three$ = from(loadThree()).pipe(shareReplay(1));\n const model$ = combineLatest([three$, this.modelObj$]).pipe(\n filter(([, modelObj]) => !!modelObj),\n switchMap(([three, modelObj]) => this.loadModel(modelObj, three))\n );\n const modelWithWireframe$ = combineLatest([model$, this.isWireframe$]).pipe(\n map(([model, isWireframe]) => this.setWireframe(model, isWireframe))\n );\n\n const rotatedModel$ = combineLatest([modelWithWireframe$, this.angles$]).pipe(\n filter(([, angles]) => !!angles),\n map(([model, angles]) => {\n Object.assign(model.rotation, angles);\n return model;\n })\n );\n\n const cameraType$ = this.cameraType$.pipe(\n filter(type => !!type),\n distinctUntilChanged()\n );\n\n let previousCameraType: string;\n this.renderSubscription = combineLatest([\n three$,\n rotatedModel$,\n cameraType$,\n this.afterViewInit$\n ])\n .pipe(filter(([, model]) => !!model))\n .subscribe(async ([three, model, cameraType]) => {\n if (model !== this.model || previousCameraType !== cameraType) {\n this.model = model;\n previousCameraType = cameraType;\n this.createScene(three, model, cameraType);\n }\n if (!this.renderer) {\n await this.setupRenderer(three);\n }\n this.render();\n });\n }\n\n ngOnDestroy(): void {\n this.renderSubscription?.unsubscribe();\n this.controls?.dispose();\n }\n\n ngAfterViewInit() {\n this.afterViewInit$.next();\n }\n\n async loadModel(\n modelObj: any,\n three: typeof THREE\n ): Promise<THREE.Object3D<THREE.Object3DEventMap>> {\n const loader = new three.ObjectLoader();\n const parsedModel = await loader.parse(modelObj);\n return parsedModel;\n }\n\n async setupRenderer(three: typeof THREE) {\n //* Renderer\n // Use canvas element in template\n this.renderer = new three.WebGLRenderer({ canvas: this.canvas });\n this.renderer.setPixelRatio(devicePixelRatio);\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n\n const OrbitControls = await loadOrbitControls();\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.rotateSpeed = 0.35;\n this.controls.minDistance = 20;\n this.controls.maxDistance = 50;\n this.controls.minZoom = 0.5;\n this.controls.maxZoom = 2;\n this.controls.addEventListener('change', () => this.render());\n }\n\n setWireframe(parsedModel: THREE.Object3D, isWireframe: boolean) {\n parsedModel.children.forEach((child: any) => {\n if (child.material) {\n child.material.wireframe = isWireframe;\n }\n });\n return parsedModel;\n }\n\n private render(): void {\n this.renderer?.render(this.scene, this.camera);\n }\n\n private createScene(three: typeof THREE, model: THREE.Object3D, cameraType: string) {\n //* Scene\n this.scene = new three.Scene();\n this.scene.background = new three.Color(0xffffff);\n this.scene.add(model);\n\n const light = new three.AmbientLight(0xffffff, 0.5);\n const lightDirectional = new three.DirectionalLight(0xffffff);\n const lightDirectional2 = new three.DirectionalLight(0xffffff);\n\n lightDirectional.position.set(20, 25, 30);\n lightDirectional2.position.set(-20, -25, -30);\n this.scene.add(lightDirectional);\n this.scene.add(lightDirectional2);\n this.scene.add(light);\n\n this.camera = this.createCamera(three, cameraType);\n }\n\n private createCamera(three: typeof THREE, cameraType: string) {\n let camera: THREE.OrthographicCamera | THREE.PerspectiveCamera;\n switch (cameraType) {\n case 'OC':\n camera = new three.OrthographicCamera(30 / -2, 30 / 2, 30 / 2, 30 / -2, 1, 1000);\n break;\n case 'PC':\n default:\n camera = new three.PerspectiveCamera(30, this.getAspectRatio(), 0.1, 1000);\n break;\n }\n\n camera.rotateX(Math.PI / 2);\n camera.rotateY(Math.PI / 2);\n\n camera.position.z = 23;\n camera.position.x = 14;\n camera.position.y = 7;\n\n return camera;\n }\n\n private getAspectRatio() {\n return this.canvas.clientWidth / this.canvas.clientHeight;\n }\n}\n","<canvas #canvas class=\"fit-w fit-h\"></canvas>\n","import {\n Component,\n Input,\n OnChanges,\n OnInit,\n Optional,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport {\n DynamicComponent,\n DynamicComponentAlert,\n DynamicComponentAlertAggregator,\n MeasurementRealtimeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap\n} from 'rxjs/operators';\nimport { ThreeDRotationWidgetConfig, ThreeDRotationWidgetRotate } from '../three-d-rotation.model';\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { loadBoxModel } from '@c8y/ngx-components/widgets/implementations/three-d-rotation/lazy-box-model';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { loadPhoneModel } from '@c8y/ngx-components/widgets/implementations/three-d-rotation/lazy-phone-model';\nimport { ThreeDRotationComponent } from '../three-d-rotation/three-d-rotation.component';\n\n@Component({\n selector: 'c8y-three-d-rotation-widget-view',\n templateUrl: './three-d-rotation-widget-view.component.html',\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [ThreeDRotationComponent]\n})\nexport class ThreeDRotationWidgetViewComponent implements OnChanges, OnInit, DynamicComponent {\n @Input() config: ThreeDRotationWidgetConfig;\n alerts = new DynamicComponentAlertAggregator();\n webGLAvailable = signal(true);\n angles$: Observable<ThreeDRotationWidgetRotate>;\n modelObj$: Observable<any>;\n deviceId$ = new BehaviorSubject<string>(null);\n modelName$ = new BehaviorSubject<string>(null);\n cameraType$ = new BehaviorSubject<string>('PC');\n isWireframe$ = new BehaviorSubject<boolean>(true);\n\n private webGLErrorText = gettext(\n 'WebGL is not available. Hardware acceleration may be disabled in your browser. Enable it in browser settings to use this widget.'\n );\n\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n @Optional() private dashboard: ContextDashboardComponent\n ) {\n this.modelObj$ = this.modelName$.pipe(\n filter(name => !!name),\n distinctUntilChanged(),\n switchMap(name => this.getModelUrl(name)),\n shareReplay(1)\n );\n this.angles$ = this.deviceId$.pipe(\n filter(id => !!id),\n distinctUntilChanged(),\n switchMap(id => this.getAnglesOfDevice$(id)),\n startWith({ x: 0, y: 0, z: 0 })\n );\n }\n\n ngOnInit(): void {\n if (!this.isWebGLAvailable()) {\n this.webGLAvailable.set(false);\n this.alerts.addAlerts(\n new DynamicComponentAlert({\n type: 'warning',\n text: this.webGLErrorText\n })\n );\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config && this.config) {\n this.onConfigChange();\n }\n }\n\n private onConfigChange() {\n if (this.config.device?.id) {\n this.deviceId$.next(`${this.config.device.id}`);\n } else if (this.dashboard?.context?.id) {\n this.deviceId$.next(`${this.dashboard.context?.id}`);\n }\n\n if (this.config.objectModel) {\n this.modelName$.next(this.config.objectModel);\n }\n\n if (this.config.cameraType) {\n this.cameraType$.next(this.config.cameraType);\n }\n\n if (this.config.isWireframe !== undefined) {\n this.isWireframe$.next(this.config.isWireframe);\n }\n }\n\n private async getModelUrl(model: string): Promise<any> {\n // The name *.min.json still exist for backwards compatibility\n // it might be stored in certain widget configs.\n if (model === 'box.min.json') {\n return await loadBoxModel();\n } else {\n return await loadPhoneModel();\n }\n }\n\n private getAnglesOfDevice$(deviceId: string): Observable<ThreeDRotationWidgetRotate> {\n const fragment = 'c8y_Acceleration';\n const series = ['accelerationX', 'accelerationY', 'accelerationZ'];\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(fragment, series[0], deviceId, 1)\n .pipe(\n filter(m => !!m && m[fragment] && series.every(axisSeries => m[fragment][axisSeries])),\n map(measurement => {\n const [xAxisValue, yAxisValue, zAxisValue] = series.map(axisSeries =>\n Math.round(measurement[fragment][axisSeries].value)\n );\n return this.convertValues(xAxisValue, yAxisValue, zAxisValue);\n })\n );\n }\n\n private convertValues(x: number, y: number, z: number): ThreeDRotationWidgetRotate {\n let rotateX = Math.atan2(y, z);\n let rotateY = Math.atan2(x, Math.sqrt(y * y + z * z));\n rotateX = rotateX ? rotateX % (Math.PI * 2) : 0;\n rotateY = rotateY ? rotateY % (Math.PI * 2) : 0;\n\n return {\n x: rotateX,\n y: 0,\n z: rotateY\n };\n }\n\n private isWebGLAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n return !!context;\n } catch {\n return false;\n }\n }\n}\n","@if (webGLAvailable()) {\n <c8y-three-d-rotation\n [modelObj$]=\"modelObj$\"\n [angles$]=\"angles$\"\n [cameraType$]=\"cameraType$\"\n [isWireframe$]=\"isWireframe$\"\n ></c8y-three-d-rotation>\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ControlContainer, FormBuilder, NgForm, Validators } from '@angular/forms';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ThreeDRotationWidgetConfig } from '../three-d-rotation.model';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\n\n@Component({\n selector: 'c8y-three-d-rotation-widget-config',\n templateUrl: './three-d-rotation-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ButtonsModule]\n})\nexport class ThreeDRotationWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: ThreeDRotationWidgetConfig;\n formGroup: ReturnType<ThreeDRotationWidgetConfigComponent['createForm']>;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm\n ) {}\n\n onBeforeSave(\n config?: ThreeDRotationWidgetConfig\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n this.initForm();\n }\n\n private initForm(): void {\n this.formGroup = this.createForm(this.formBuilder);\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm(formBuilder: FormBuilder) {\n return formBuilder.group({\n objectModel: ['box.min.json', [Validators.minLength(1)]],\n isWireframe: [true, []],\n cameraType: ['PC', [Validators.minLength(2), Validators.maxLength(2)]]\n });\n }\n}\n","<div [formGroup]=\"formGroup\">\n <fieldset class=\"c8y-fieldset\">\n <legend>{{ 'Rendering' | translate }}</legend>\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label>{{ 'Select object model for rendering' | translate }}</label>\n <div class=\"input-group input-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"objectModel\"\n >\n <option value=\"box.min.json\">{{ 'Box model' | translate }}</option>\n <option value=\"phoneModel.min.json\">{{ 'Phone model' | translate }}</option>\n </select>\n </div>\n <span class=\"input-group-addon bg-level-0\">\n <label class=\"c8y-switch\">\n <input\n type=\"checkbox\"\n formControlName=\"isWireframe\"\n />\n <span></span>\n <span>{{ 'Wireframe' | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"form-group-sm\">\n <label>{{ 'Camera type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"cameraType\"\n >\n <option value=\"OC\">{{ 'Orthographic camera' | translate }}</option>\n <option value=\"PC\">{{ 'Perspective camera' | translate }}</option>\n </select>\n </div>\n </c8y-form-group>\n </fieldset>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -6319,6 +6319,10 @@ class ForOfDirective {
6319
6319
  return instance;
6320
6320
  }
6321
6321
  insert(item) {
6322
+ if (this.isDisplayed(coerceNumberProperty(item.id, NaN))) {
6323
+ this.update(item);
6324
+ return;
6325
+ }
6322
6326
  let index = 0;
6323
6327
  if (this.comparator && this.cachedData.length) {
6324
6328
  let comparisionResult;
@@ -6348,19 +6352,27 @@ class ForOfDirective {
6348
6352
  }
6349
6353
  }
6350
6354
  update(updatedItem) {
6351
- this.forMatchingEmbeddedViewRef((item) => item && updatedItem && item.id === updatedItem.id, (view) => {
6355
+ const updatedId = coerceNumberProperty(updatedItem.id, NaN);
6356
+ const index = this.cachedData.findIndex(item => item && coerceNumberProperty(item.id, NaN) === updatedId);
6357
+ if (index > -1) {
6358
+ this.cachedData[index] = updatedItem;
6359
+ }
6360
+ this.forMatchingEmbeddedViewRef((item) => item && coerceNumberProperty(item.id, NaN) === updatedId, (view) => {
6352
6361
  view.context.$implicit = updatedItem;
6353
6362
  view.markForCheck();
6354
6363
  });
6364
+ this.emitFilteredChange();
6355
6365
  }
6356
6366
  remove(idToRemove) {
6357
6367
  if (this.isDisplayed(idToRemove)) {
6358
6368
  this.updateCount(-1);
6359
6369
  }
6360
- const index = this.cachedData.findIndex(op => op.id === idToRemove);
6361
- this.cachedData.splice(index, 1);
6370
+ const index = this.cachedData.findIndex(op => op && coerceNumberProperty(op.id, NaN) === idToRemove);
6371
+ if (index > -1) {
6372
+ this.cachedData.splice(index, 1);
6373
+ }
6362
6374
  this.forMatchingEmbeddedViewRef((item) => item && coerceNumberProperty(item.id, NaN) === idToRemove, (view) => view.destroy());
6363
- this.c8yForChange.emit([...this.cachedData]);
6375
+ this.emitFilteredChange();
6364
6376
  this.cdRef.detectChanges();
6365
6377
  }
6366
6378
  updateCount(countChange) {
@@ -6383,9 +6395,16 @@ class ForOfDirective {
6383
6395
  }
6384
6396
  }
6385
6397
  }
6398
+ emitFilteredChange() {
6399
+ of(this.cachedData)
6400
+ .pipe(src => this.dataPipe(src))
6401
+ .subscribe(filtered => {
6402
+ this.c8yForChange.emit(filtered);
6403
+ });
6404
+ }
6386
6405
  checkForDuplicates(data) {
6387
6406
  return this.realtime
6388
- ? data.filter(item => !this.cachedData.some(cached => cached.id === item.id))
6407
+ ? data.filter(item => !this.cachedData.some(cached => coerceNumberProperty(cached.id, NaN) === coerceNumberProperty(item.id, NaN)))
6389
6408
  : data;
6390
6409
  }
6391
6410
  unsubscribePaging() {
@@ -18999,6 +19018,9 @@ class FormGroupComponent {
18999
19018
  this.destroyed$ = new Subject();
19000
19019
  }
19001
19020
  get error() {
19021
+ if (this.control && !this.novalidation) {
19022
+ return this.status === 'error' || (this.control.touched && this.control.status === 'INVALID');
19023
+ }
19002
19024
  return this.status === 'error' || this.hasError;
19003
19025
  }
19004
19026
  get warning() {
@@ -19025,7 +19047,7 @@ class FormGroupComponent {
19025
19047
  this.control = control;
19026
19048
  this.controlTouched$ = new BehaviorSubject(control.touched);
19027
19049
  merge(control.valueChanges, control.statusChanges, this.controlTouched$)
19028
- .pipe(filter(() => (control.dirty || control.touched) && !this.novalidation), debounceTime(this.VALIDATION_DEBOUNCE_MS), takeUntil(this.destroyed$))
19050
+ .pipe(filter(() => control.touched && !this.novalidation), debounceTime(this.VALIDATION_DEBOUNCE_MS), takeUntil(this.destroyed$))
19029
19051
  .subscribe(() => this.updateErrors(control));
19030
19052
  }
19031
19053
  updateErrors(control) {
@@ -19050,13 +19072,13 @@ class FormGroupComponent {
19050
19072
  this.destroyed$.complete();
19051
19073
  }
19052
19074
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19053
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: FormGroupComponent, isStandalone: true, selector: "c8y-form-group", inputs: { hasError: "hasError", hasWarning: "hasWarning", hasSuccess: "hasSuccess", novalidation: "novalidation", status: "status" }, host: { properties: { "class.has-error": "this.error", "class.has-warning": "this.warning", "class.has-success": "this.success" }, classAttribute: "form-group" }, queries: [{ propertyName: "customErrorMessage", first: true, predicate: MessagesComponent, descendants: true }, { propertyName: "model", first: true, predicate: NgModel, descendants: true, static: true }, { propertyName: "formControlName", first: true, predicate: FormControlName, descendants: true, static: true }], ngImport: i0, template: "<ng-content></ng-content>\n<c8y-messages *ngIf=\"!customErrorMessage\" [show]=\"errors\"></c8y-messages>\n", dependencies: [{ kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage", "additionalMessages"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
19075
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: FormGroupComponent, isStandalone: true, selector: "c8y-form-group", inputs: { hasError: "hasError", hasWarning: "hasWarning", hasSuccess: "hasSuccess", novalidation: "novalidation", status: "status" }, host: { properties: { "class.has-error": "this.error", "class.has-warning": "this.warning", "class.has-success": "this.success" }, classAttribute: "form-group" }, queries: [{ propertyName: "customErrorMessage", first: true, predicate: MessagesComponent, descendants: true }, { propertyName: "model", first: true, predicate: NgModel, descendants: true, static: true }, { propertyName: "formControlName", first: true, predicate: FormControlName, descendants: true, static: true }], ngImport: i0, template: "<ng-content></ng-content>\n@if (!customErrorMessage) {\n <c8y-messages [show]=\"errors\"></c8y-messages>\n}\n", dependencies: [{ kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage", "additionalMessages"] }] }); }
19054
19076
  }
19055
19077
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormGroupComponent, decorators: [{
19056
19078
  type: Component,
19057
19079
  args: [{ selector: 'c8y-form-group', host: {
19058
19080
  class: 'form-group'
19059
- }, standalone: true, imports: [MessagesComponent, NgIf], template: "<ng-content></ng-content>\n<c8y-messages *ngIf=\"!customErrorMessage\" [show]=\"errors\"></c8y-messages>\n" }]
19081
+ }, standalone: true, imports: [MessagesComponent], template: "<ng-content></ng-content>\n@if (!customErrorMessage) {\n <c8y-messages [show]=\"errors\"></c8y-messages>\n}\n" }]
19060
19082
  }], propDecorators: { hasError: [{
19061
19083
  type: Input
19062
19084
  }], hasWarning: [{
@@ -40136,7 +40158,7 @@ class SplitViewListComponent {
40136
40158
  return !!this.parentSplitView?.hasProjectedDetails;
40137
40159
  }
40138
40160
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitViewListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SplitViewListComponent, isStandalone: true, selector: "c8y-sv-list", inputs: { title: "title", loading: "loading", showEmptyState: "showEmptyState", emptyStateIcon: "emptyStateIcon", emptyStateTitle: "emptyStateTitle", emptyStateSubtitle: "emptyStateSubtitle", docsUrl: "docsUrl", showTitle: "showTitle", listOpacity: "listOpacity" }, host: { classAttribute: "d-contents" }, queries: [{ propertyName: "alertsComp", first: true, predicate: SplitViewAlertsComponent, descendants: true }], viewQueries: [{ propertyName: "innerScrollDiv", first: true, predicate: ["innerScrollDiv"], descendants: true }], ngImport: i0, template: "<div\n class=\"inner-scroll fit-h\"\n [attr.aria-label]=\"title | translate\"\n role=\"region\"\n [ngClass]=\"{ 'split-view__list bg-level-1': isSplitView, 'bg-component': !isSplitView }\"\n data-cy=\"c8y-sv-list\"\n #innerScrollDiv\n>\n @if (title || hasAlerts) {\n <div\n class=\"flex-wrap flex-no-shrink sticky-top gap-8\"\n [ngClass]=\"{\n 'card-header separator': title && shouldShowTitle\n }\"\n >\n @if (title && shouldShowTitle) {\n <h4 class=\"card-title\">\n {{ title | translate }}\n </h4>\n }\n <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n @if (hasAlerts) {\n <ng-content select=\"c8y-sv-alerts\"></ng-content>\n }\n </div>\n }\n <div data-cy=\"c8y-sv-list--group\">\n @if (loading && !showEmptyState) {\n <div\n class=\"sticky-top\"\n style=\"top: 60px\"\n >\n <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n <c8y-loading\n [layout]=\"'page'\"\n data-cy=\"c8y-sv-list--loading\"\n ></c8y-loading>\n </div>\n </div>\n }\n <ng-content></ng-content>\n\n @if (showEmptyState) {\n <div class=\"p-relative p-l-24\">\n <c8y-ui-empty-state\n [icon]=\"emptyStateIcon\"\n [title]=\"emptyStateTitle\"\n [subtitle]=\"emptyStateSubtitle\"\n data-cy=\"c8y-sv-list--empty-state\"\n >\n @if (docsUrl) {\n <p c8y-guide-docs>\n <small\n translate\n [translateParams]=\"{ docsUrl }\"\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"{{ docsUrl }}\">user documentation</a>.\n </small>\n </p>\n }\n </c8y-ui-empty-state>\n </div>\n }\n </div>\n\n <ng-content select=\"c8y-sv-footer\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
40161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SplitViewListComponent, isStandalone: true, selector: "c8y-sv-list", inputs: { title: "title", loading: "loading", showEmptyState: "showEmptyState", emptyStateIcon: "emptyStateIcon", emptyStateTitle: "emptyStateTitle", emptyStateSubtitle: "emptyStateSubtitle", docsUrl: "docsUrl", showTitle: "showTitle", listOpacity: "listOpacity" }, host: { classAttribute: "d-contents" }, queries: [{ propertyName: "alertsComp", first: true, predicate: SplitViewAlertsComponent, descendants: true }], viewQueries: [{ propertyName: "innerScrollDiv", first: true, predicate: ["innerScrollDiv"], descendants: true }], ngImport: i0, template: "<div\n class=\"inner-scroll fit-h\"\n [attr.aria-label]=\"title | translate\"\n role=\"region\"\n [ngClass]=\"{ 'split-view__list bg-level-1': isSplitView, 'bg-component': !isSplitView }\"\n data-cy=\"c8y-sv-list\"\n #innerScrollDiv\n>\n @if (title || hasAlerts) {\n <div\n class=\"flex-wrap flex-no-shrink sticky-top gap-8\"\n [ngClass]=\"{\n 'card-header separator': title && shouldShowTitle\n }\"\n >\n @if (title && shouldShowTitle) {\n <h4 class=\"card-title\">\n {{ title | translate }}\n </h4>\n }\n <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n @if (hasAlerts) {\n <ng-content select=\"c8y-sv-alerts\"></ng-content>\n }\n </div>\n }\n <div data-cy=\"c8y-sv-list--group\">\n @if (loading && !showEmptyState) {\n <div class=\"sticky-top\">\n <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n <c8y-loading\n [layout]=\"'page'\"\n data-cy=\"c8y-sv-list--loading\"\n ></c8y-loading>\n </div>\n </div>\n }\n <ng-content></ng-content>\n\n @if (showEmptyState) {\n <div class=\"p-relative p-l-24\">\n <c8y-ui-empty-state\n [icon]=\"emptyStateIcon\"\n [title]=\"emptyStateTitle\"\n [subtitle]=\"emptyStateSubtitle\"\n data-cy=\"c8y-sv-list--empty-state\"\n >\n @if (docsUrl) {\n <p c8y-guide-docs>\n <small\n translate\n [translateParams]=\"{ docsUrl }\"\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"{{ docsUrl }}\">user documentation</a>.\n </small>\n </p>\n }\n </c8y-ui-empty-state>\n </div>\n }\n </div>\n\n <ng-content select=\"c8y-sv-footer\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
40140
40162
  }
40141
40163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitViewListComponent, decorators: [{
40142
40164
  type: Component,
@@ -40148,7 +40170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
40148
40170
  C8yTranslateDirective,
40149
40171
  GuideDocsComponent,
40150
40172
  GuideHrefDirective
40151
- ], template: "<div\n class=\"inner-scroll fit-h\"\n [attr.aria-label]=\"title | translate\"\n role=\"region\"\n [ngClass]=\"{ 'split-view__list bg-level-1': isSplitView, 'bg-component': !isSplitView }\"\n data-cy=\"c8y-sv-list\"\n #innerScrollDiv\n>\n @if (title || hasAlerts) {\n <div\n class=\"flex-wrap flex-no-shrink sticky-top gap-8\"\n [ngClass]=\"{\n 'card-header separator': title && shouldShowTitle\n }\"\n >\n @if (title && shouldShowTitle) {\n <h4 class=\"card-title\">\n {{ title | translate }}\n </h4>\n }\n <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n @if (hasAlerts) {\n <ng-content select=\"c8y-sv-alerts\"></ng-content>\n }\n </div>\n }\n <div data-cy=\"c8y-sv-list--group\">\n @if (loading && !showEmptyState) {\n <div\n class=\"sticky-top\"\n style=\"top: 60px\"\n >\n <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n <c8y-loading\n [layout]=\"'page'\"\n data-cy=\"c8y-sv-list--loading\"\n ></c8y-loading>\n </div>\n </div>\n }\n <ng-content></ng-content>\n\n @if (showEmptyState) {\n <div class=\"p-relative p-l-24\">\n <c8y-ui-empty-state\n [icon]=\"emptyStateIcon\"\n [title]=\"emptyStateTitle\"\n [subtitle]=\"emptyStateSubtitle\"\n data-cy=\"c8y-sv-list--empty-state\"\n >\n @if (docsUrl) {\n <p c8y-guide-docs>\n <small\n translate\n [translateParams]=\"{ docsUrl }\"\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"{{ docsUrl }}\">user documentation</a>.\n </small>\n </p>\n }\n </c8y-ui-empty-state>\n </div>\n }\n </div>\n\n <ng-content select=\"c8y-sv-footer\"></ng-content>\n</div>\n" }]
40173
+ ], template: "<div\n class=\"inner-scroll fit-h\"\n [attr.aria-label]=\"title | translate\"\n role=\"region\"\n [ngClass]=\"{ 'split-view__list bg-level-1': isSplitView, 'bg-component': !isSplitView }\"\n data-cy=\"c8y-sv-list\"\n #innerScrollDiv\n>\n @if (title || hasAlerts) {\n <div\n class=\"flex-wrap flex-no-shrink sticky-top gap-8\"\n [ngClass]=\"{\n 'card-header separator': title && shouldShowTitle\n }\"\n >\n @if (title && shouldShowTitle) {\n <h4 class=\"card-title\">\n {{ title | translate }}\n </h4>\n }\n <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n @if (hasAlerts) {\n <ng-content select=\"c8y-sv-alerts\"></ng-content>\n }\n </div>\n }\n <div data-cy=\"c8y-sv-list--group\">\n @if (loading && !showEmptyState) {\n <div class=\"sticky-top\">\n <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n <c8y-loading\n [layout]=\"'page'\"\n data-cy=\"c8y-sv-list--loading\"\n ></c8y-loading>\n </div>\n </div>\n }\n <ng-content></ng-content>\n\n @if (showEmptyState) {\n <div class=\"p-relative p-l-24\">\n <c8y-ui-empty-state\n [icon]=\"emptyStateIcon\"\n [title]=\"emptyStateTitle\"\n [subtitle]=\"emptyStateSubtitle\"\n data-cy=\"c8y-sv-list--empty-state\"\n >\n @if (docsUrl) {\n <p c8y-guide-docs>\n <small\n translate\n [translateParams]=\"{ docsUrl }\"\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"{{ docsUrl }}\">user documentation</a>.\n </small>\n </p>\n }\n </c8y-ui-empty-state>\n </div>\n }\n </div>\n\n <ng-content select=\"c8y-sv-footer\"></ng-content>\n</div>\n" }]
40152
40174
  }], propDecorators: { title: [{
40153
40175
  type: Input
40154
40176
  }], loading: [{