@c8y/ngx-components 1023.68.7 → 1023.70.0

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 (48) hide show
  1. package/ai/agent-chat/index.d.ts +235 -75
  2. package/ai/agent-chat/index.d.ts.map +1 -1
  3. package/ai/ai-chat/index.d.ts +176 -26
  4. package/ai/ai-chat/index.d.ts.map +1 -1
  5. package/ai/index.d.ts +309 -75
  6. package/ai/index.d.ts.map +1 -1
  7. package/asset-properties/index.d.ts.map +1 -1
  8. package/echart/index.d.ts +4 -0
  9. package/echart/index.d.ts.map +1 -1
  10. package/echart/models/index.d.ts +2 -0
  11. package/echart/models/index.d.ts.map +1 -1
  12. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +680 -242
  13. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +343 -44
  15. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-ai.mjs +187 -75
  17. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-asset-properties.mjs +11 -5
  19. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  20. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-CPLDClTp.mjs} +3 -3
  21. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-CPLDClTp.mjs.map} +1 -1
  22. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-9be_iMQg.mjs} +30 -13
  23. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-9be_iMQg.mjs.map +1 -0
  24. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B2em01_W.mjs} +3 -3
  25. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B2em01_W.mjs.map +1 -0
  26. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-CQuGa1RI.mjs} +3 -3
  27. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-CQuGa1RI.mjs.map +1 -0
  28. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CkmurxJv.mjs} +5 -5
  29. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CkmurxJv.mjs.map} +1 -1
  30. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CTK9zNUh.mjs +86 -0
  31. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CTK9zNUh.mjs.map +1 -0
  32. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-echart.mjs +39 -18
  35. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +106 -4
  37. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +14 -122
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  40. package/locales/locales.pot +83 -30
  41. package/package.json +1 -1
  42. package/widgets/implementations/html-widget/index.d.ts +11 -50
  43. package/widgets/implementations/html-widget/index.d.ts.map +1 -1
  44. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs.map +0 -1
  45. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs.map +0 -1
  46. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs.map +0 -1
  47. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs +0 -92
  48. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs.map +0 -1
@@ -6,8 +6,8 @@ import { Subject, Observable } from 'rxjs';
6
6
  import { IManagedObject, IIdentified } from '@c8y/client';
7
7
  import { InterpolationParameters, Translation } from '@ngx-translate/core';
8
8
  import * as i0 from '@angular/core';
9
- import { OnInit, OnChanges, SimpleChanges, OnDestroy, TemplateRef } from '@angular/core';
10
- import { AgentStep } from '@c8y/ngx-components/ai';
9
+ import { OnChanges, OnDestroy, SimpleChanges, TemplateRef } from '@angular/core';
10
+ import { ToolCallPart } from '@c8y/ngx-components/ai';
11
11
  import { AssetPropertyType } from '@c8y/ngx-components/asset-properties';
12
12
  import { EditorComponent } from '@c8y/ngx-components/editor';
13
13
  import * as Monaco from 'monaco-editor';
@@ -102,59 +102,20 @@ declare class AdvancedSettingsComponent {
102
102
  static ɵcmp: i0.ɵɵComponentDeclaration<AdvancedSettingsComponent, "c8y-html-widget-advanced-settings", never, { "devMode": { "alias": "devMode"; "required": false; }; "cssEncapsulation": { "alias": "cssEncapsulation"; "required": false; }; }, {}, never, never, true, never>;
103
103
  }
104
104
 
105
- declare class HtmlAiChatFeedbackComponent implements OnInit, OnChanges {
106
- step: AgentStep;
107
- /**
108
- * The label to display for the feedback section.
109
- */
110
- label: string;
111
- /**
112
- * Indicates whether the feedback section is in a loading state.
113
- */
114
- loading: boolean;
115
- /**
116
- * Indicates whether the detailed feedback section is collapsed.
117
- */
118
- collapsed: boolean;
119
- /**
120
- * Indicates whether the feedback section can be collapsed.
121
- */
122
- canCollapse: boolean;
123
- /**
124
- * The code extracted from the agent step (if any).
125
- */
126
- code: string;
127
- /**
128
- * The text before the code block (if any).
129
- */
130
- textBeforeCode: string;
131
- /**
132
- * The text after the code block (if any).
133
- */
134
- textAfterCode: string;
135
- private readonly codeTag;
105
+ declare class HtmlAiChatToolDetailsComponent {
106
+ tool: i0.InputSignal<ToolCallPart<{
107
+ code: string;
108
+ }, unknown>>;
109
+ code: i0.Signal<string>;
110
+ isExecuting: i0.Signal<boolean>;
136
111
  private readonly htmlWidgetConfigService;
137
- /**
138
- * @ignore
139
- */
140
- ngOnInit(): void;
141
- /**
142
- * @ignore
143
- */
144
- ngOnChanges(changes: SimpleChanges): void;
145
- /**
146
- * Parse the agent step. Extracts the code block if present and updates the state accordingly.
147
- * @param step The agent step to parse.
148
- */
149
- parseAgentStep(step: AgentStep): void;
150
112
  /**
151
113
  * Revert to the last applied code.
152
114
  */
153
115
  revert(): void;
154
- private parseCodeBlock;
155
116
  private applyCurrentCode;
156
- static ɵfac: i0.ɵɵFactoryDeclaration<HtmlAiChatFeedbackComponent, never>;
157
- static ɵcmp: i0.ɵɵComponentDeclaration<HtmlAiChatFeedbackComponent, "c8y-html-ai-chat-feedback", never, { "step": { "alias": "step"; "required": true; }; }, {}, never, never, true, never>;
117
+ static ɵfac: i0.ɵɵFactoryDeclaration<HtmlAiChatToolDetailsComponent, never>;
118
+ static ɵcmp: i0.ɵɵComponentDeclaration<HtmlAiChatToolDetailsComponent, "c8y-html-ai-chat-tool-details", never, { "tool": { "alias": "tool"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
158
119
  }
159
120
 
160
121
  declare class HtmlFrameComponent implements OnChanges, OnDestroy {
@@ -260,6 +221,6 @@ declare class WidgetCodeEditorComponent implements OnDestroy {
260
221
  static ɵcmp: i0.ɵɵComponentDeclaration<WidgetCodeEditorComponent, "c8y-widget-code-editor", never, { "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
261
222
  }
262
223
 
263
- export { AdvancedSettingsComponent, HtmlAiChatFeedbackComponent, HtmlFrameComponent, HtmlWidgetComponent, HtmlWidgetConfigComponent, HtmlWidgetConfigService, HtmlWidgetPropertiesSelectorComponent, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED, WidgetCodeEditorComponent, defaultWebComponentAttributeNameContext, defaultWebComponentName, legacyTemplate, webComponentTemplate };
224
+ export { AdvancedSettingsComponent, HtmlAiChatToolDetailsComponent, HtmlFrameComponent, HtmlWidgetComponent, HtmlWidgetConfigComponent, HtmlWidgetConfigService, HtmlWidgetPropertiesSelectorComponent, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED, WidgetCodeEditorComponent, defaultWebComponentAttributeNameContext, defaultWebComponentName, legacyTemplate, webComponentTemplate };
264
225
  export type { C8yProperties, ComputedProperty, HtmlWidget, HtmlWidgetConfig, HtmlWidgetOptions, PathProperty, WebcomponentContext };
265
226
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../../widgets/implementations/html-widget/html-widget.model.ts","../../../../widgets/implementations/html-widget/html-widget-config.service.ts","../../../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.ts","../../../../widgets/implementations/html-widget/html-ai-chat-feedback.component.ts","../../../../widgets/implementations/html-widget/html-frame/html-frame.component.ts","../../../../widgets/implementations/html-widget/html-widget-config.component.ts","../../../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.ts","../../../../widgets/implementations/html-widget/html-widget.component.ts","../../../../widgets/implementations/html-widget/legacy-template.ts","../../../../widgets/implementations/html-widget/webcomponent-template.ts","../../../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;AAKE;;;AAIA;;;;;AAKG;;AAEJ;AAEK;;;;;;;;;AAUL;;;;AAKA;AAEK;;AAEJ;AAID;;;;;;AAOA;;;;;;AAOA;AAED;AAiBA;AAQA;AAEA;;AC3DA;;;;AAGmD;AAAoB;AACrE;AACA;AACA;AAEA;AAgBA;AAEA;AAoBA;AAEA;AAkBA;;;;;AA2CA;AAaA;;;AAsBD;;AC7JD;AAOE;AACA;AACA;AACA;AAEA;;;AAMA;AAIA;;;;AAyBM;;;AAMP;;AChDD;;AAsBE;;AAEG;;AAEH;;AAEG;AACH;AACA;;AAEG;AACH;AACA;;AAEG;AACH;AACA;;AAEG;AACH;AACA;;AAEG;AACH;AACA;;AAEG;AACH;AAEA;AACA;AAEA;;AAEG;AACH;AAMA;;AAEG;AACH;AAMA;;;AAGG;AACH;AA4BA;;AAEG;;AAKH;AAyBA;;;AAWD;;ACjID;;AAYE;AAEA;;;;;AAKG;AAEH;;;;;;;;;;;AAmCA;AAKA;;;;;AAsFA;AAUA;AAeA;AAaA;AASA;;AAiBA;;;AAuBD;;ACnQD;;AAeE;AACA;AACA;AAEA;;;AAMD;;ACvBD;AAiBE;AACA;AAEA;;;;AAIG;;;;AAcJ;;AC5CD;;AASE;AAMA;;;AAgBD;;ACrCD;;ACEA;;ACYA;AAmBE;;;AAOA;AAEA;AACA;AACA;;AAEA;;;;;;;;AAeA;AAKA;;AAgCA;AAKA;;;;;AA0BA;;;AAQD;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../../widgets/implementations/html-widget/html-widget.model.ts","../../../../widgets/implementations/html-widget/html-widget-config.service.ts","../../../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.ts","../../../../widgets/implementations/html-widget/html-ai-chat-tool-details.component.ts","../../../../widgets/implementations/html-widget/html-frame/html-frame.component.ts","../../../../widgets/implementations/html-widget/html-widget-config.component.ts","../../../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.ts","../../../../widgets/implementations/html-widget/html-widget.component.ts","../../../../widgets/implementations/html-widget/legacy-template.ts","../../../../widgets/implementations/html-widget/webcomponent-template.ts","../../../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;AAKE;;;AAIA;;;;;AAKG;;AAEJ;AAEK;;;;;;;;;AAUL;;;;AAKA;AAEK;;AAEJ;AAID;;;;;;AAOA;;;;;;AAOA;AAED;AAiBA;AAQA;AAEA;;AC3DA;;;;AAGmD;AAAoB;AACrE;AACA;AACA;AAEA;AAgBA;AAEA;AAoBA;AAEA;AAkBA;;;;;AA2CA;AAaA;;;AAsBD;;AC7JD;AAOE;AACA;AACA;AACA;AAEA;;;AAMA;AAIA;;;;AAyBM;;;AAMP;;AC3DD;;;AAQ0D;AACxD;AACA;AAEA;AAEA;;AAEG;;AAKH;;;AAWD;;ACHD;;AAYE;AAEA;;;;;AAKG;AAEH;;;;;;;;;;;AAmCA;AAKA;;;;;AAsFA;AAUA;AAeA;AAaA;AASA;;AAiBA;;;AAuBD;;ACnQD;;AAeE;AACA;AACA;AAEA;;;AAMD;;ACvBD;AAiBE;AACA;AAEA;;;;AAIG;;;;AAcJ;;AC5CD;;AASE;AAMA;;;AAgBD;;ACrCD;;ACEA;;ACYA;AAmBE;;;AAOA;AAEA;AACA;AACA;;AAEA;;;;;;;;AAeA;AAKA;;AAgCA;AAKA;;;;;AA0BA;;;AAQD;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs","sources":["../../computed-asset-properties/strategies/last-measurement-strategy.ts","../../computed-asset-properties/common/realtime-value-handler.ts","../../computed-asset-properties/last-measurement/last-measurement-value.ts","../../computed-asset-properties/last-measurement/last-measurement-computed-property.ts","../../computed-asset-properties/strategies/child-count-strategy.ts","../../computed-asset-properties/child-count/child-count-value.ts","../../computed-asset-properties/child-count/child-assets-count-computed-property.ts","../../computed-asset-properties/strategies/count-strategy-base.ts","../../computed-asset-properties/strategies/alarm-count-strategy.ts","../../computed-asset-properties/alarm-count/alarm-count-value.ts","../../computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.ts","../../computed-asset-properties/alarm-count/alarm-count-today-computed-property.ts","../../computed-asset-properties/strategies/event-count-strategy.ts","../../computed-asset-properties/event-count/event-count-value.ts","../../computed-asset-properties/event-count/event-count-today.ts","../../computed-asset-properties/event-count/event-count-3-months.ts","../../computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.ts","../../computed-asset-properties/child-count/child-devices-count-computed-property.ts","../../computed-asset-properties/strategies/last-device-message-strategy.ts","../../computed-asset-properties/last-device-message/last-device-message-value.ts","../../computed-asset-properties/last-device-message/last-device-message-computed-property.ts","../../computed-asset-properties/fieldbus-item-status/fieldbus-item-status.model.ts","../../computed-asset-properties/fieldbus-item-status/fieldbus.service.ts","../../computed-asset-properties/strategies/fieldbus-item-status-strategy.ts","../../computed-asset-properties/fieldbus-item-status/fieldbus-item-status-computed-property.ts","../../computed-asset-properties/index.ts","../../computed-asset-properties/c8y-ngx-components-computed-asset-properties.ts"],"sourcesContent":["import { Injector } from '@angular/core';\nimport { IMeasurement, IMeasurementValue, MeasurementService } from '@c8y/client';\nimport { DatePipe, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { filter, from, map, Observable, startWith } from 'rxjs';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { LastMeasurementConfig } from '../last-measurement/last-measurement.model';\nimport { ValueStrategy } from '../common/realtime-value-base';\n\nexport class LastMeasurementStrategy implements ValueStrategy<string | IMeasurementValue> {\n private measurementService: MeasurementService;\n private measurementRealtime: MeasurementRealtimeService;\n private datapoint: KPIDetails;\n private datePipe: DatePipe;\n\n constructor(\n private config: LastMeasurementConfig,\n injector: Injector\n ) {\n this.measurementService = injector.get(MeasurementService);\n this.measurementRealtime = injector.get(MeasurementRealtimeService);\n this.datePipe = injector.get(DatePipe);\n this.datapoint = config.dp.filter(dp => dp.__active)[0];\n }\n\n fetchCurrentValue(): Observable<string | IMeasurementValue> {\n const measurementFilter: any = {\n valueFragmentSeries: this.datapoint.series,\n valueFragmentType: this.datapoint.fragment,\n pageSize: 1,\n revert: true,\n dateFrom: '1970-01-01',\n source: this.datapoint.__target.id\n };\n\n return from(this.measurementService.list(measurementFilter)).pipe(\n map(({ data }) => data[0]),\n filter(measurement => !!measurement),\n map(measurement => this.formatMeasurement(measurement))\n );\n }\n\n createRealtimeStream(initialValue: string): Observable<string | IMeasurementValue> {\n return this.measurementRealtime\n .onCreateOfSpecificMeasurement$(\n this.datapoint.fragment,\n this.datapoint.series,\n this.datapoint.__target\n )\n .pipe(\n map(measurement => this.formatMeasurement(measurement)),\n startWith(initialValue)\n );\n }\n\n private formatMeasurement(measurement: IMeasurement): string | IMeasurementValue {\n const resultType = this.config?.resultType;\n const fragment = this.datapoint.fragment;\n const series = this.datapoint.series;\n\n if (resultType === 1) {\n return measurement[fragment][series].value;\n } else if (resultType === 2) {\n return measurement[fragment][series].value + ' ' + measurement[fragment][series].unit;\n } else if (resultType === 3) {\n const date = this.datePipe.transform(new Date(measurement.time as string), 'short');\n return `${date} | ${measurement[fragment][series].value} ${measurement[fragment][series].unit}`;\n } else if (resultType === 4) {\n return measurement[fragment][series] as IMeasurementValue;\n }\n return '';\n }\n}\n","import {\n distinctUntilChanged,\n NEVER,\n Observable,\n pairwise,\n share,\n startWith,\n switchMap,\n take\n} from 'rxjs';\nimport { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { ValueStrategy, RealtimeValueConfig } from './realtime-value-base';\n\n/**\n * Generic handler for realtime values following the three modes pattern\n * Closed for modification but open for extension through strategies\n */\nexport class RealtimeValueHandler<T> {\n private readonly config: Required<RealtimeValueConfig> = {\n refetchOnResume: true,\n preserveValueOnPause: true\n };\n\n constructor(\n private strategy: ValueStrategy<T>,\n config?: RealtimeValueConfig\n ) {\n if (config) {\n this.config = { ...this.config, ...config };\n }\n }\n\n /**\n * Creates an Observable based on the metadata mode\n */\n getValue(metadata: ValueCallbackMetadata = { mode: 'realtime' }): Observable<T> {\n if (metadata.mode === 'singleValue') {\n return this.strategy.fetchCurrentValue().pipe(take(1));\n }\n\n if (metadata.mode === 'realtime' && !metadata.realtimeControl$) {\n return this.handleUncontrolledRealtime();\n }\n\n if (metadata.mode === 'realtime' && metadata.realtimeControl$) {\n return this.handleControlledRealtime(metadata.realtimeControl$);\n }\n }\n\n private handleUncontrolledRealtime(): Observable<T> {\n return this.strategy\n .fetchCurrentValue()\n .pipe(switchMap(initialValue => this.strategy.createRealtimeStream(initialValue)));\n }\n\n private handleControlledRealtime(control$: Observable<boolean>): Observable<T> {\n const controlWithPrevious$ = control$.pipe(\n distinctUntilChanged(),\n startWith(null),\n pairwise(),\n share()\n );\n\n return controlWithPrevious$.pipe(\n switchMap(([previous, current]) => {\n if (!current) {\n // Realtime is disabled\n if (previous === null) {\n // Initial emission while disabled\n return this.strategy.fetchCurrentValue().pipe(take(1));\n } else if (this.config.preserveValueOnPause) {\n // Was previously enabled - preserve last value\n return NEVER;\n } else {\n // Don't preserve value - fetch current\n return this.strategy.fetchCurrentValue().pipe(take(1));\n }\n } else {\n // Realtime is enabled\n if (this.config.refetchOnResume || previous === null) {\n // Re-fetch current value and start streaming\n return this.strategy\n .fetchCurrentValue()\n .pipe(switchMap(currentValue => this.strategy.createRealtimeStream(currentValue)));\n } else {\n // Continue with realtime stream without re-fetching\n return this.strategy.createRealtimeStream(null as T);\n }\n }\n })\n );\n }\n}\n","import { inject, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { LastMeasurementConfig } from './last-measurement.model';\nimport { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { LastMeasurementStrategy } from '../strategies/last-measurement-strategy';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\nimport { IMeasurementValue } from '@c8y/client';\n\n/**\n * Creates an Observable that tracks the latest measurement value for a specific datapoint.\n * Combines initial server fetch with real-time measurement updates.\n *\n * @param config - Measurement configuration (datapoint, result type, etc.)\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<string> - Stream of measurement string values\n */\nexport function lastMeasurementValue(\n config: LastMeasurementConfig,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<string | IMeasurementValue> {\n const injector = inject(Injector);\n const strategy = new LastMeasurementStrategy(config, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { ComputedPropertyDefinition } from '@c8y/ngx-components/asset-properties';\nimport { LastMeasurementConfig } from './last-measurement.model';\nimport { lastMeasurementValue } from './last-measurement-value';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const lastMeasurement: ComputedPropertyDefinition<\n ['device', 'asset', 'group'],\n LastMeasurementConfig\n> = {\n name: 'lastMeasurement',\n contextType: ['device', 'asset', 'group'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n lastMeasurement: {\n label: 'Last measurement',\n type: 'string'\n }\n }\n },\n name: 'lastMeasurement',\n label: gettext('Last measurement'),\n type: 'string',\n config: { dp: [], resultType: 1 } as LastMeasurementConfig,\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./last-measurement-config.component').then(\n m => m.ComputedPropertyLastMeasurementConfigComponent\n ),\n value: ({ config }) => {\n return lastMeasurementValue(config);\n }\n};\n","import { Injector } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { ManagedObjectRealtimeService } from '@c8y/ngx-components';\nimport { from, map, Observable, startWith } from 'rxjs';\nimport { ValueStrategy } from '../common/realtime-value-base';\n\nexport class ChildCountStrategy implements ValueStrategy<number> {\n private inventoryService: InventoryService;\n private moRealtimeService: ManagedObjectRealtimeService;\n\n constructor(\n private asset: IManagedObject,\n private childType: 'childDevices' | 'childAssets',\n injector: Injector\n ) {\n this.inventoryService = injector.get(InventoryService);\n this.moRealtimeService = injector.get(ManagedObjectRealtimeService);\n }\n\n fetchCurrentValue(): Observable<number> {\n return from(this.inventoryService.detail(this.asset.id, { withChildren: true })).pipe(\n map(resp => resp?.data?.[this.childType]?.references?.length || 0)\n );\n }\n\n createRealtimeStream(initialValue: number): Observable<number> {\n return this.moRealtimeService.onAll$(this.asset.id).pipe(\n map(resp => (resp?.data as IManagedObject)?.[this.childType]?.references?.length || 0),\n startWith(initialValue)\n );\n }\n}\n","import { inject, Injector } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { Observable } from 'rxjs';\nimport { ChildCountStrategy } from '../strategies/child-count-strategy';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\n\n/**\n * Shared function that tracks the count of child items (devices or assets) for a specific managed object.\n * Supports real-time updates when child items are added or removed.\n *\n * @param asset - The managed object to track child items for\n * @param childType - Type of child items ('childDevices' or 'childAssets')\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<number> - Stream of child items count values\n */\nexport function childCountValue(\n asset: IManagedObject,\n metadata: ValueCallbackMetadata = { mode: 'realtime' },\n childType: 'childDevices' | 'childAssets'\n): Observable<number> {\n const injector = inject(Injector);\n const strategy = new ChildCountStrategy(asset, childType, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { Observable } from 'rxjs';\nimport { childCountValue } from './child-count-value';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const childAssetsCount: ComputedPropertyDefinition<['group', 'asset']> = {\n name: 'childAssetsCount',\n contextType: ['group', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n childAssetsCount: {\n label: 'Number of child assets',\n type: 'number'\n }\n }\n },\n name: 'childAssetsCount',\n label: gettext('Number of child assets'),\n type: 'number',\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n value: ({ context, metadata }) => childAssetsCountValue(context, metadata)\n};\n\n/**\n * Creates an Observable that tracks the count of child assets for a specific asset.\n * Supports real-time updates when child assets are added or removed.\n *\n * @param asset - The managed object (asset) to track child assets for\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<number> - Stream of child assets count values\n */\nexport function childAssetsCountValue(\n asset: IManagedObject,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<number> {\n return childCountValue(asset, metadata, 'childAssets');\n}\n","import { Observable, scan, startWith } from 'rxjs';\nimport { ValueStrategy } from '../common/realtime-value-base';\n\n/**\n * Base class for count-based strategies\n * Provides common accumulation logic\n */\nexport abstract class CountStrategyBase implements ValueStrategy<number> {\n abstract fetchCurrentValue(): Observable<number>;\n abstract getRealtimeIncrement$(): Observable<number>;\n\n createRealtimeStream(initialValue: number): Observable<number> {\n return this.getRealtimeIncrement$().pipe(\n scan((count, increment) => count + increment, initialValue),\n startWith(initialValue)\n );\n }\n}\n","import { Injector } from '@angular/core';\nimport {\n AlarmQueryFilter,\n AlarmService,\n IAlarm,\n IManagedObject,\n SeverityFilter\n} from '@c8y/client';\nimport { AlarmRealtimeService } from '@c8y/ngx-components';\nimport { filter, from, map, Observable, tap } from 'rxjs';\nimport { AlarmCountConfig } from '../alarm-count/alarm-count.model';\nimport { CountStrategyBase } from './count-strategy-base';\n\nexport class AlarmCountStrategy extends CountStrategyBase {\n private alarmService: AlarmService;\n private alarmRealtimeService: AlarmRealtimeService;\n private startTime: Date;\n\n constructor(\n private config: AlarmCountConfig,\n private asset: IManagedObject,\n private dateFrom: Date,\n injector: Injector\n ) {\n super();\n this.alarmService = injector.get(AlarmService);\n this.alarmRealtimeService = injector.get(AlarmRealtimeService);\n this.startTime = new Date();\n }\n\n fetchCurrentValue(): Observable<number> {\n const severities: SeverityFilter[] = Object.keys(this.config.severities || {}).filter(\n key => this.config.severities[key]\n ) as SeverityFilter[];\n\n const filters: AlarmQueryFilter = {\n source: this.asset.id,\n dateFrom: this.dateFrom.toISOString(),\n type: this.config.type,\n pageSize: 1,\n withTotalElements: true,\n ...(severities.length && { severity: severities.join(',') })\n };\n\n return from(this.alarmService.list(filters)).pipe(\n map(resp => resp?.paging?.totalElements || 0),\n tap(() => (this.startTime = new Date())) // Update start time after fetch\n );\n }\n\n getRealtimeIncrement$(): Observable<number> {\n return this.alarmRealtimeService.onAll$(this.asset.id).pipe(\n map(({ data }) => data as IAlarm),\n filter(\n alarm =>\n alarm.type === this.config.type &&\n this.config.severities[alarm.severity] &&\n new Date(alarm.creationTime) > this.startTime\n ),\n tap(() => (this.startTime = new Date())),\n map(() => 1) // Each matching alarm increments by 1\n );\n }\n}\n","import { inject, Injector } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { Observable } from 'rxjs';\nimport { AlarmCountStrategy } from '../strategies/alarm-count-strategy';\nimport { AlarmCountConfig } from './alarm-count.model';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\n\n/**\n * Creates an Observable that tracks alarm count for a specific asset.\n * When real-time is paused and resumed, it re-fetches the current count from server\n * to account for alarms that occurred during the pause.\n *\n * @param config - Alarm filtering configuration (type, severities, etc.)\n * @param asset - The managed object (device/asset) to track alarms for\n * @param dateFrom - Start date for counting alarms\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<number> - Stream of alarm count values\n */\nexport function alarmCountValue(\n config: AlarmCountConfig,\n asset: IManagedObject,\n dateFrom: Date,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<number> {\n const injector = inject(Injector);\n const strategy = new AlarmCountStrategy(config, asset, dateFrom, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { AlarmCountConfig } from './alarm-count.model';\nimport { alarmCountValue } from './alarm-count-value';\nimport { Observable } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const alarmCount3Months: ComputedPropertyDefinition<\n ['device', 'group', 'asset'],\n AlarmCountConfig\n> = {\n name: 'alarmCount3Months',\n contextType: ['device', 'group', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n alarmCount3Months: {\n label: 'Alarm count 3 months',\n type: 'number'\n }\n }\n },\n name: 'alarmCount3Months',\n label: gettext('Alarm count 3 months'),\n type: 'number',\n config: { type: '' } as AlarmCountConfig,\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./alarm-count-config.component').then(m => m.ComputedPropertyAlarmCountConfigComponent),\n value: ({ config, context, metadata }) => alarmCount3MonthsValue(config, context, metadata)\n};\n\nfunction alarmCount3MonthsValue(\n config: AlarmCountConfig,\n asset: IManagedObject,\n metadata: ValueCallbackMetadata\n): Observable<number> {\n const threeMonthsAgo = new Date();\n threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);\n return alarmCountValue(config, asset, threeMonthsAgo, metadata);\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { AlarmCountConfig } from './alarm-count.model';\nimport { alarmCountValue } from './alarm-count-value';\nimport { Observable } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const alarmCountToday: ComputedPropertyDefinition<\n ['device', 'group', 'asset'],\n AlarmCountConfig\n> = {\n name: 'alarmCountToday',\n contextType: ['device', 'group', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n alarmCountToday: {\n label: 'Alarm count today',\n type: 'number'\n }\n }\n },\n name: 'alarmCountToday',\n label: gettext('Alarm count today'),\n type: 'number',\n config: { type: '' } as AlarmCountConfig,\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./alarm-count-config.component').then(m => m.ComputedPropertyAlarmCountConfigComponent),\n value: ({ config, context, metadata }) => alarmCountTodayValue(config, context, metadata)\n};\n\nfunction alarmCountTodayValue(\n config: AlarmCountConfig,\n asset: IManagedObject,\n metadata: ValueCallbackMetadata\n): Observable<number> {\n const oneDayAgo = new Date();\n oneDayAgo.setDate(oneDayAgo.getDate() - 1);\n return alarmCountValue(config, asset, oneDayAgo, metadata);\n}\n","import { Injector } from '@angular/core';\nimport { EventService, IEvent, IManagedObject } from '@c8y/client';\nimport { EventRealtimeService } from '@c8y/ngx-components';\nimport { filter, from, map, Observable } from 'rxjs';\nimport { EventCountConfig } from '../event-count/event-count.model';\nimport { CountStrategyBase } from './count-strategy-base';\n\nexport class EventCountStrategy extends CountStrategyBase {\n private eventService: EventService;\n private eventRealtimeService: EventRealtimeService;\n\n constructor(\n private config: EventCountConfig,\n private asset: IManagedObject,\n private dateFrom: Date,\n injector: Injector\n ) {\n super();\n this.eventService = injector.get(EventService);\n this.eventRealtimeService = injector.get(EventRealtimeService);\n }\n\n fetchCurrentValue(): Observable<number> {\n const filters = {\n source: this.asset.id,\n dateFrom: this.dateFrom.toISOString(),\n type: this.config.type,\n pageSize: 1,\n withTotalElements: true\n };\n\n return from(this.eventService.list(filters)).pipe(\n map(resp => resp?.paging?.totalElements || 0)\n );\n }\n\n getRealtimeIncrement$(): Observable<number> {\n return this.eventRealtimeService.onAll$(this.asset.id).pipe(\n map(({ data }) => data as IEvent),\n filter(event => event.type === this.config.type && new Date(event.time) >= this.dateFrom),\n map(() => 1)\n );\n }\n}\n","import { inject, Injector } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { EventCountConfig } from './event-count.model';\nimport { Observable } from 'rxjs';\nimport { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { EventCountStrategy } from '../strategies/event-count-strategy';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\n\n/**\n * Creates an Observable that tracks event count for a specific asset.\n * When real-time is paused and resumed, it re-fetches the current count from server\n * to account for events that occurred during the pause.\n *\n * @param config - Event filtering configuration (type, etc.)\n * @param asset - The managed object (device/asset) to track events for\n * @param dateFrom - Start date for counting events\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<number> - Stream of event count values\n */\nexport function eventCountValue(\n config: EventCountConfig,\n asset: IManagedObject,\n dateFrom: Date,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<number> {\n const injector = inject(Injector);\n const strategy = new EventCountStrategy(config, asset, dateFrom, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { EventCountConfig } from './event-count.model';\nimport { eventCountValue } from './event-count-value';\nimport { Observable } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const eventCountToday: ComputedPropertyDefinition<\n ['device', 'group', 'asset'],\n EventCountConfig\n> = {\n name: 'eventCountToday',\n contextType: ['device', 'group', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n eventCountToday: {\n label: 'Event count today',\n type: 'number'\n }\n }\n },\n name: 'eventCountToday',\n label: gettext('Event count today'),\n type: 'number',\n config: { type: '' },\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./event-count-config.component').then(m => m.ComputedPropertyEventCountConfigComponent),\n value: ({ config, context, metadata }) => eventCountTodayValue(config, context, metadata)\n};\n\nfunction eventCountTodayValue(\n config: EventCountConfig,\n asset: IManagedObject,\n metadata: ValueCallbackMetadata\n): Observable<number> {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return eventCountValue(config, asset, today, metadata);\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { EventCountConfig } from './event-count.model';\nimport { eventCountValue } from './event-count-value';\nimport { Observable } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const eventCount3Months: ComputedPropertyDefinition<\n ['device', 'group', 'asset'],\n EventCountConfig\n> = {\n name: 'eventCount3Months',\n contextType: ['device', 'group', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n eventCount3Months: {\n label: 'Event count 3 months',\n type: 'number'\n }\n }\n },\n name: 'eventCount3Months',\n label: gettext('Event count 3 months'),\n type: 'number',\n config: { type: '' },\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./event-count-config.component').then(m => m.ComputedPropertyEventCountConfigComponent),\n value: ({ config, context, metadata }) => eventCount3MonthsValue(config, context, metadata)\n};\n\nfunction eventCount3MonthsValue(\n config: EventCountConfig,\n asset: IManagedObject,\n metadata: ValueCallbackMetadata\n): Observable<number> {\n const threeMonthsAgo = new Date();\n threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);\n return eventCountValue(config, asset, threeMonthsAgo, metadata);\n}\n","import { ComputedPropertyDefinition } from '@c8y/ngx-components/asset-properties';\nimport { from, Observable, of, switchMap } from 'rxjs';\nimport { ConfigurationSnapshotConfig } from './configuration-snapshot.model';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { inject, Injector } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const configurationSnapshot: ComputedPropertyDefinition<\n ['device', 'asset'],\n ConfigurationSnapshotConfig\n> = {\n name: 'configurationSnapshot',\n contextType: ['device', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n configurationSnapshot: {\n label: 'Configuration snapshot',\n type: 'string'\n }\n }\n },\n contextType: ['device', 'asset'],\n name: 'configurationSnapshot',\n label: gettext('Configuration snapshot'),\n type: 'string',\n config: { legacy: true } as ConfigurationSnapshotConfig,\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./configuration-snapshot-config.component').then(\n m => m.ConfigurationSnapshotConfigComponent\n ),\n value: ({ config, context }) => configurationSnapshotValue(config, context)\n};\n\nfunction configurationSnapshotValue(\n config: ConfigurationSnapshotConfig,\n asset: IManagedObject\n): Observable<string> {\n if (config.legacy) {\n const configId = asset.c8y_ConfigurationDump?.id;\n if (!configId) {\n return of(null);\n }\n const injector = inject(Injector);\n const inventoryService = injector.get(InventoryService);\n return from(inventoryService.detail(configId)).pipe(\n switchMap(({ data }) => {\n return of(data?.name);\n })\n );\n } else {\n const fragment = `c8y_Configuration_${config.type}`;\n return of(asset[fragment]?.name);\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { Observable } from 'rxjs';\nimport { childCountValue } from './child-count-value';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const childDevicesCount: ComputedPropertyDefinition<['group', 'device', 'asset']> = {\n name: 'childDevicesCount',\n contextType: ['group', 'device', 'asset'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n childDevicesCount: {\n label: 'Number of child devices',\n type: 'number'\n }\n }\n },\n name: 'childDevicesCount',\n label: gettext('Number of child devices'),\n type: 'number',\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n value: ({ context, metadata }) => childDevicesCountValue(context, metadata)\n};\n\n/**\n * Creates an Observable that tracks the count of child devices for a specific asset.\n * Supports real-time updates when child devices are added or removed.\n *\n * @param asset - The managed object (asset) to track child devices for\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<number> - Stream of child devices count values\n */\nexport function childDevicesCountValue(\n asset: IManagedObject,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<number> {\n return childCountValue(asset, metadata, 'childDevices');\n}\n","import { Injector } from '@angular/core';\nimport {\n AlarmService,\n EventService,\n IAlarm,\n IEvent,\n IManagedObject,\n IMeasurement,\n IOperation,\n MeasurementService,\n OperationService\n} from '@c8y/client';\nimport {\n AlarmRealtimeService,\n EventRealtimeService,\n MeasurementRealtimeService,\n OperationRealtimeService\n} from '@c8y/ngx-components';\nimport {\n catchError,\n combineLatest,\n filter,\n from,\n map,\n merge,\n Observable,\n of,\n scan,\n startWith\n} from 'rxjs';\nimport { ValueStrategy } from '../common/realtime-value-base';\n\nexport class LastDeviceMessageStrategy implements ValueStrategy<string> {\n private measurementService: MeasurementService;\n private measurementRealtime: MeasurementRealtimeService;\n private eventService: EventService;\n private eventRealtimeService: EventRealtimeService;\n private alarmService: AlarmService;\n private alarmRealtimeService: AlarmRealtimeService;\n private operationService: OperationService;\n private operationRealtimeService: OperationRealtimeService;\n private startTime: Date;\n\n constructor(\n private asset: IManagedObject,\n injector: Injector\n ) {\n this.measurementService = injector.get(MeasurementService);\n this.measurementRealtime = injector.get(MeasurementRealtimeService);\n this.eventService = injector.get(EventService);\n this.eventRealtimeService = injector.get(EventRealtimeService);\n this.alarmService = injector.get(AlarmService);\n this.alarmRealtimeService = injector.get(AlarmRealtimeService);\n this.operationService = injector.get(OperationService);\n this.operationRealtimeService = injector.get(OperationRealtimeService);\n this.startTime = new Date();\n }\n\n fetchCurrentValue(): Observable<string> {\n const fetchFilter = {\n source: this.asset.id,\n pageSize: 1,\n revert: true\n };\n\n const fetchLatestMeasurement = (): Observable<string | null> => {\n return from(this.measurementService.list(fetchFilter)).pipe(\n map(resp => resp.data?.[0]?.time || null),\n catchError(() => of(null))\n );\n };\n\n const fetchLatestEvent = (): Observable<string | null> => {\n return from(this.eventService.list(fetchFilter)).pipe(\n map(resp => resp.data?.[0]?.time || null),\n catchError(() => of(null))\n );\n };\n\n const fetchLatestAlarm = (): Observable<string | null> => {\n return from(this.alarmService.list(fetchFilter)).pipe(\n map(resp => resp.data?.[0]?.time || null),\n catchError(() => of(null))\n );\n };\n\n const fetchLatestOperation = (): Observable<string | null> => {\n return from(this.operationService.list(fetchFilter)).pipe(\n map(resp => resp.data?.[0]?.creationTime || null),\n catchError(() => of(null))\n );\n };\n\n return combineLatest([\n fetchLatestMeasurement(),\n fetchLatestEvent(),\n fetchLatestAlarm(),\n fetchLatestOperation()\n ]).pipe(\n map(timestamps => {\n const validTimestamps = timestamps.filter(Boolean) as string[];\n\n if (validTimestamps.length === 0) {\n return null;\n }\n\n const latest = validTimestamps.reduce((latest, current) => {\n return new Date(current) > new Date(latest) ? current : latest;\n });\n\n // Update start time for realtime filtering\n this.startTime = new Date();\n return latest;\n })\n );\n }\n\n createRealtimeStream(initialValue: string): Observable<string> {\n const measurementStream$ = this.measurementRealtime.onAll$(this.asset.id).pipe(\n map(({ data }) => (data as IMeasurement).time),\n filter(time => new Date(time) > this.startTime)\n );\n\n const eventStream$ = this.eventRealtimeService.onAll$(this.asset.id).pipe(\n map(({ data }) => (data as IEvent).time),\n filter(time => new Date(time) > this.startTime)\n );\n\n const alarmStream$ = this.alarmRealtimeService.onAll$(this.asset.id).pipe(\n map(({ data }) => (data as IAlarm).time),\n filter(time => time && new Date(time) > this.startTime)\n );\n\n const operationStream$ = this.operationRealtimeService.onAll$(this.asset.id).pipe(\n map(({ data }) => (data as IOperation).creationTime),\n filter(time => time && new Date(time) > this.startTime)\n );\n\n return merge(measurementStream$, eventStream$, alarmStream$, operationStream$).pipe(\n scan((latestTimestamp, newTimestamp) => {\n return new Date(newTimestamp) > new Date(latestTimestamp) ? newTimestamp : latestTimestamp;\n }, initialValue),\n startWith(initialValue)\n );\n }\n}\n","import { ValueCallbackMetadata } from '@c8y/ngx-components/asset-properties';\nimport { IManagedObject } from '@c8y/client';\nimport { inject, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { LastDeviceMessageStrategy } from '../strategies/last-device-message-strategy';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\n\n/**\n * Gets the latest timestamp from events, alarms, measurements, and operations for a device.\n * Returns the most recent timestamp across all these sources.\n *\n * @param asset - The managed object (device/asset) to track\n * @param metadata - Configuration controlling the behavior of the function\n * @returns Observable<string> - Stream of latest timestamp values\n */\nexport function getLastDeviceMessage(\n asset: IManagedObject,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<string> {\n const injector = inject(Injector);\n const strategy = new LastDeviceMessageStrategy(asset, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { ComputedPropertyDefinition } from '@c8y/ngx-components/asset-properties';\nimport { getLastDeviceMessage } from './last-device-message-value';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const lastDeviceMessage: ComputedPropertyDefinition<['device']> = {\n name: 'lastDeviceMessage',\n contextType: ['device'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n lastDeviceMessage: {\n label: 'Last device message',\n type: 'string'\n }\n }\n },\n name: 'lastDeviceMessage',\n label: gettext('Last device message'),\n printFormat: 'datetime',\n type: 'string',\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n value: ({ context }) => {\n return getLastDeviceMessage(context);\n }\n};\n","import { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport interface FieldbusItemStatusConfig {\n itemName: string;\n itemType: 'c8y_Coil' | 'c8y_Register';\n resultType: keyof typeof RESULT_TYPES;\n}\n\nexport const RESULT_TYPES = {\n RAW_VALUE: { name: 'RAW_VALUE', value: 'RAW_VALUE', label: gettext('Raw value') },\n ENUM_VALUE: { name: 'ENUM_VALUE', value: 'ENUM_VALUE', label: gettext('Enum value') }\n} as const;\n\nexport interface FieldbusDevice extends IManagedObject {\n c8y_ModbusDevice?: {\n address: number;\n protocol: string;\n ipAddress: string;\n /** Reference URL to Fieldbus device type (e.g. /inventory/managedObjects/12345). */\n type: string;\n };\n c8y_CoilStatus?: {\n [name: string]: number;\n };\n c8y_RegisterStatus?: {\n [name: string]: number;\n };\n}\n\nexport interface FieldbusDeviceType extends IManagedObject {\n name: string;\n type: string;\n fieldbusType: string;\n c8y_Coils?: FieldbusCoil[];\n c8y_Registers?: FieldbusRegister[];\n}\n\nexport interface FieldbusCoil {\n number: number;\n name: string;\n input: boolean;\n statusMapping: {\n status: 'read' | 'write';\n };\n enumValues?: {\n [value: number]: string;\n };\n alarmMapping?: {\n severity: 'CRITICAL' | 'MAJOR' | 'MINOR' | 'WARNING';\n type: string;\n text: string;\n raiseAlarmTemplate: number;\n };\n}\n\nexport interface FieldbusRegister {\n number: number;\n input: boolean;\n startBit: number;\n noBits: number;\n name: string;\n multiplier: number;\n divisor: number;\n decimalPlaces: number;\n unit: string;\n signed: boolean;\n min: number;\n max: number;\n category: string;\n measurementMapping?: {\n series: string;\n sendMeasurementTemplate: number;\n type: string;\n };\n statusMapping?: {\n status: 'read' | 'write';\n };\n enumValues?: {\n [value: number]: string;\n };\n eventMapping?: {\n eventTemplate: number;\n type: string;\n text: string;\n };\n}\n\nexport interface LegacyFieldbusProperty {\n fieldbus: true;\n id: string;\n keyPath: [string, string];\n label: string;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport {\n FieldbusDevice,\n FieldbusDeviceType,\n LegacyFieldbusProperty\n} from './fieldbus-item-status.model';\nimport { AssetPropertyType, ComputedPropertiesService } from '@c8y/ngx-components/asset-properties';\n\n@Injectable({ providedIn: 'root' })\nexport class FieldbusService {\n private inventory = inject(InventoryService);\n private computedProperties = inject(ComputedPropertiesService);\n\n async getDeviceTypeOf(fieldbusDevice: FieldbusDevice): Promise<FieldbusDeviceType> {\n const typeRef = fieldbusDevice?.c8y_ModbusDevice?.type;\n if (!typeRef) {\n throw new Error('Provided device is missing c8y_ModbusDevice.type.');\n }\n\n const match = /^\\/inventory\\/managedObjects\\/(\\d+)$/.exec(typeRef);\n if (!match) {\n throw new Error(\n `Provided Fieldbus type reference ${typeRef} has invalid format, expected: /inventory/managedObjects/{id}`\n );\n }\n\n const deviceTypeId = match[1];\n try {\n const { data } = await this.inventory.detail(deviceTypeId);\n return data as FieldbusDeviceType;\n } catch (ex) {\n const errorMessage = ex instanceof Error ? ex.message : String(ex);\n throw new Error(\n `Could not fetch Fieldbus device type with ID ${deviceTypeId}: ${errorMessage}.`\n );\n }\n }\n\n async migrateFieldbusProperty(\n legacyProperty: LegacyFieldbusProperty,\n fieldbusDevice: FieldbusDevice\n ): Promise<AssetPropertyType> {\n if (!legacyProperty.fieldbus) {\n throw new Error('Provided property is not a legacy Fieldbus property.');\n }\n\n const computedPropertyName = 'fieldbusItemStatus';\n const computedProperty = await this.computedProperties.getByName(computedPropertyName);\n\n const [statusPropertyName, itemName] = legacyProperty.keyPath;\n const itemType = statusPropertyName === 'c8y_CoilStatus' ? 'c8y_Coil' : 'c8y_Register';\n const deviceType = await this.getDeviceTypeOf(fieldbusDevice);\n const itemListPropertyName = `${itemType}s` as 'c8y_Coils' | 'c8y_Registers';\n const itemList = deviceType[itemListPropertyName] || [];\n const item = itemList.find(i => i.name === itemName);\n const resultType = item.enumValues ? 'ENUM_VALUE' : 'RAW_VALUE';\n\n return {\n ...computedProperty.prop,\n active: true,\n temporary: true,\n asset: {\n id: fieldbusDevice.id,\n name: fieldbusDevice.name\n },\n config: {\n itemName,\n itemType,\n resultType\n }\n };\n }\n}\n","import { Injector } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { ManagedObjectRealtimeService } from '@c8y/ngx-components';\nimport { from, Observable, startWith, switchMap } from 'rxjs';\nimport { ValueStrategy } from '../common/realtime-value-base';\nimport {\n FieldbusCoil,\n FieldbusDevice,\n FieldbusDeviceType,\n FieldbusItemStatusConfig,\n FieldbusRegister,\n RESULT_TYPES\n} from '../fieldbus-item-status/fieldbus-item-status.model';\nimport { get } from 'lodash-es';\nimport { FieldbusService } from '../fieldbus-item-status/fieldbus.service';\n\nexport class FieldbusItemStatusStrategy implements ValueStrategy<number | string> {\n private inventoryService: InventoryService;\n private moRealtimeService: ManagedObjectRealtimeService;\n private fieldbusService: FieldbusService;\n private _fieldbusDeviceType: FieldbusDeviceType;\n\n constructor(\n private asset: IManagedObject,\n private config: FieldbusItemStatusConfig,\n injector: Injector\n ) {\n this.inventoryService = injector.get(InventoryService);\n this.moRealtimeService = injector.get(ManagedObjectRealtimeService);\n this.fieldbusService = injector.get(FieldbusService);\n }\n\n fetchCurrentValue(): Observable<number | string> {\n return from(this.inventoryService.detail(this.asset.id)).pipe(\n switchMap(({ data }) => this.getStatus(data as FieldbusDevice))\n );\n }\n\n createRealtimeStream(initialValue: number | string): Observable<number | string> {\n return this.moRealtimeService.onAll$(this.asset.id).pipe(\n switchMap(({ data }) => this.getStatus(data as FieldbusDevice)),\n startWith(initialValue)\n );\n }\n\n private async getStatus(fieldbusDevice: FieldbusDevice): Promise<number | string> {\n const fieldbusDeviceType = await this.getFieldbusDeviceType(fieldbusDevice);\n if (!fieldbusDeviceType) {\n return null;\n }\n\n const itemListPropertyName = `${this.config.itemType}s` as 'c8y_Coils' | 'c8y_Registers';\n const statusPropertyName = `${this.config.itemType}Status` as\n | 'c8y_CoilStatus'\n | 'c8y_RegisterStatus';\n const items: FieldbusCoil[] | FieldbusRegister[] =\n fieldbusDeviceType[itemListPropertyName] ?? [];\n const item: FieldbusCoil | FieldbusRegister = items.find(i => i.name === this.config.itemName);\n const statusProperty = get(fieldbusDevice, statusPropertyName);\n const rawValue: number = get(statusProperty, this.config.itemName);\n if (this.config.resultType === RESULT_TYPES.ENUM_VALUE.value && item?.enumValues) {\n return item.enumValues[rawValue] ?? rawValue;\n } else {\n return rawValue;\n }\n }\n\n private async getFieldbusDeviceType(fieldbusDevice: FieldbusDevice): Promise<FieldbusDeviceType> {\n if (this._fieldbusDeviceType === undefined) {\n try {\n this._fieldbusDeviceType = await this.fieldbusService.getDeviceTypeOf(fieldbusDevice);\n } catch (ex) {\n this._fieldbusDeviceType = null;\n }\n }\n return this._fieldbusDeviceType;\n }\n}\n","import {\n ComputedPropertyDefinition,\n ValueCallbackMetadata\n} from '@c8y/ngx-components/asset-properties';\nimport { Observable } from 'rxjs';\nimport { inject, Injector } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { FieldbusItemStatusConfig } from './fieldbus-item-status.model';\nimport { FieldbusItemStatusStrategy } from '../strategies/fieldbus-item-status-strategy';\nimport { RealtimeValueHandler } from '../common/realtime-value-handler';\nimport { IManagedObject } from '@c8y/client';\n\nexport const fieldbusItemStatus: ComputedPropertyDefinition<['device'], FieldbusItemStatusConfig> =\n {\n name: 'fieldbusItemStatus',\n contextType: ['device'],\n prop: {\n c8y_JsonSchema: {\n properties: {\n fieldbusItemStatus: {\n label: gettext('Fieldbus item status'),\n type: ['number', 'string']\n }\n }\n },\n name: 'fieldbusItemStatus',\n label: gettext('Fieldbus item status'),\n type: ['number', 'string'],\n config: {\n itemName: null,\n itemType: null,\n resultType: 'RAW_VALUE'\n } as FieldbusItemStatusConfig,\n computed: true,\n isEditable: false,\n isStandardProperty: true\n },\n loadConfigComponent: () =>\n import('./fieldbus-item-status-config.component').then(\n m => m.FieldbusItemStatusConfigComponent\n ),\n value: ({ config, context }) => fieldbusItemStatusValue(context, config)\n };\n\nexport function fieldbusItemStatusValue(\n asset: IManagedObject,\n config: FieldbusItemStatusConfig,\n metadata: ValueCallbackMetadata = { mode: 'realtime' }\n): Observable<number | string> {\n const injector = inject(Injector);\n const strategy = new FieldbusItemStatusStrategy(asset, config, injector);\n const handler = new RealtimeValueHandler(strategy);\n return handler.getValue(metadata);\n}\n","import { hookComputedProperty } from '@c8y/ngx-components/asset-properties';\nimport { lastMeasurement } from './last-measurement/last-measurement-computed-property';\nimport { childAssetsCount } from './child-count/child-assets-count-computed-property';\nimport {\n AlarmRealtimeService,\n EventRealtimeService,\n ManagedObjectRealtimeService,\n MeasurementRealtimeService,\n OperationRealtimeService\n} from '@c8y/ngx-components';\nimport { alarmCount3Months } from './alarm-count/alarm-count-3-months-computed-property';\nimport { alarmCountToday } from './alarm-count/alarm-count-today-computed-property';\nimport { eventCountToday } from './event-count/event-count-today';\nimport { eventCount3Months } from './event-count/event-count-3-months';\nimport { configurationSnapshot } from './configuration-snapshot/configuration-snapshot-computed-property';\nimport { childDevicesCount } from './child-count/child-devices-count-computed-property';\nimport { lastDeviceMessage } from './last-device-message/last-device-message-computed-property';\nimport { fieldbusItemStatus } from './fieldbus-item-status/fieldbus-item-status-computed-property';\n\nexport const computedAssetPropertiesProviders = [\n AlarmRealtimeService,\n EventRealtimeService,\n MeasurementRealtimeService,\n OperationRealtimeService,\n ManagedObjectRealtimeService,\n hookComputedProperty([\n lastMeasurement,\n lastDeviceMessage,\n childAssetsCount,\n childDevicesCount,\n alarmCount3Months,\n alarmCountToday,\n eventCountToday,\n eventCount3Months,\n configurationSnapshot,\n fieldbusItemStatus\n ])\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;MAQa,uBAAuB,CAAA;IAMlC,WAAA,CACU,MAA6B,EACrC,QAAkB,EAAA;QADV,IAAA,CAAA,MAAM,GAAN,MAAM;QAGd,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACnE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzD;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,iBAAiB,GAAQ;AAC7B,YAAA,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAC1C,YAAA,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AAC1C,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SACjC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1B,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,EACpC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CACxD;IACH;AAEA,IAAA,oBAAoB,CAAC,YAAoB,EAAA;QACvC,OAAO,IAAI,CAAC;AACT,aAAA,8BAA8B,CAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,EACvB,IAAI,CAAC,SAAS,CAAC,MAAM,EACrB,IAAI,CAAC,SAAS,CAAC,QAAQ;aAExB,IAAI,CACH,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,EACvD,SAAS,CAAC,YAAY,CAAC,CACxB;IACL;AAEQ,IAAA,iBAAiB,CAAC,WAAyB,EAAA;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AAEpC,QAAA,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK;QAC5C;AAAO,aAAA,IAAI,UAAU,KAAK,CAAC,EAAE;YAC3B,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;QACvF;AAAO,aAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAc,CAAC,EAAE,OAAO,CAAC;YACnF,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA,CAAE;QACjG;AAAO,aAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAsB;QAC3D;AACA,QAAA,OAAO,EAAE;IACX;AACD;;AC1DD;;;AAGG;MACU,oBAAoB,CAAA;IAM/B,WAAA,CACU,QAA0B,EAClC,MAA4B,EAAA;QADpB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAND,QAAA,IAAA,CAAA,MAAM,GAAkC;AACvD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,oBAAoB,EAAE;SACvB;QAMC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;QAC7C;IACF;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,QAAA,GAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAC7D,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD;QAEA,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAC9D,YAAA,OAAO,IAAI,CAAC,0BAA0B,EAAE;QAC1C;QAEA,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,gBAAgB,EAAE;YAC7D,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjE;IACF;IAEQ,0BAA0B,GAAA;QAChC,OAAO,IAAI,CAAC;AACT,aAAA,iBAAiB;AACjB,aAAA,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF;AAEQ,IAAA,wBAAwB,CAAC,QAA6B,EAAA;QAC5D,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CACxC,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,CAAC,EACf,QAAQ,EAAE,EACV,KAAK,EAAE,CACR;AAED,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAC9B,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAI;YAChC,IAAI,CAAC,OAAO,EAAE;;AAEZ,gBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;;AAErB,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxD;AAAO,qBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;;AAE3C,oBAAA,OAAO,KAAK;gBACd;qBAAO;;AAEL,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxD;YACF;iBAAO;;gBAEL,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,QAAQ,KAAK,IAAI,EAAE;;oBAEpD,OAAO,IAAI,CAAC;AACT,yBAAA,iBAAiB;AACjB,yBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtF;qBAAO;;oBAEL,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAS,CAAC;gBACtD;YACF;QACF,CAAC,CAAC,CACH;IACH;AACD;;ACpFD;;;;;;;AAOG;AACG,SAAU,oBAAoB,CAClC,MAA6B,EAC7B,WAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAEtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9D,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;ACnBO,MAAM,eAAe,GAGxB;AACF,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,kBAAkB;AACzB,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC;AAClC,QAAA,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAA2B;AAC1D,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,+FAAqC,CAAC,CAAC,IAAI,CAChD,CAAC,IAAI,CAAC,CAAC,8CAA8C,CACtD;AACH,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;AACpB,QAAA,OAAO,oBAAoB,CAAC,MAAM,CAAC;IACrC;CACD;;MC7BY,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CACU,KAAqB,EACrB,SAAyC,EACjD,QAAkB,EAAA;QAFV,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,SAAS,GAAT,SAAS;QAGjB,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACrE;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACnF,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,CACnE;IACH;AAEA,IAAA,oBAAoB,CAAC,YAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,IAAI,IAAK,IAAI,EAAE,IAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,EACtF,SAAS,CAAC,YAAY,CAAC,CACxB;IACH;AACD;;ACxBD;;;;;;;;AAQG;AACG,SAAU,eAAe,CAC7B,KAAqB,EACrB,QAAA,GAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EACtD,SAAyC,EAAA;AAEzC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;AACnE,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;AChBO,MAAM,gBAAgB,GAAmD;AAC9E,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC/B,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,KAAK,EAAE,wBAAwB;AAC/B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC;AACxC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,CAAC,OAAO,EAAE,QAAQ;CAC1E;AAED;;;;;;;AAOG;AACG,SAAU,qBAAqB,CACnC,KAAqB,EACrB,WAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;IAEtD,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC;AACxD;;ACzCA;;;AAGG;MACmB,iBAAiB,CAAA;AAIrC,IAAA,oBAAoB,CAAC,YAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CACtC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,EAAE,YAAY,CAAC,EAC3D,SAAS,CAAC,YAAY,CAAC,CACxB;IACH;AACD;;ACJK,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;AAKvD,IAAA,WAAA,CACU,MAAwB,EACxB,KAAqB,EACrB,QAAc,EACtB,QAAkB,EAAA;AAElB,QAAA,KAAK,EAAE;QALC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAIhB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE;IAC7B;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,UAAU,GAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CACnF,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CACf;AAErB,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SAC5D;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,EAC7C,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;SACzC;IACH;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAc,CAAC,EACjC,MAAM,CACJ,KAAK,IACH,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI;YAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;AACtC,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAChD,EACD,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,EACxC,GAAG,CAAC,MAAM,CAAC,CAAC;SACb;IACH;AACD;;ACvDD;;;;;;;;;;AAUG;AACG,SAAU,eAAe,CAC7B,MAAwB,EACxB,KAAqB,EACrB,QAAc,EACd,QAAA,GAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAEtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1E,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;ACnBO,MAAM,iBAAiB,GAG1B;AACF,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACtC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAsB;AACxC,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,0FAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yCAAyC,CAAC;AACjG,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;CAC3F;AAED,SAAS,sBAAsB,CAC7B,MAAwB,EACxB,KAAqB,EACrB,QAA+B,EAAA;AAE/B,IAAA,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE;IACjC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;AACjE;;ACpCO,MAAM,eAAe,GAGxB;AACF,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAsB;AACxC,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,0FAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yCAAyC,CAAC;AACjG,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;CACzF;AAED,SAAS,oBAAoB,CAC3B,MAAwB,EACxB,KAAqB,EACrB,QAA+B,EAAA;AAE/B,IAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;IAC5B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC5D;;ACvCM,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;AAIvD,IAAA,WAAA,CACU,MAAwB,EACxB,KAAqB,EACrB,QAAc,EACtB,QAAkB,EAAA;AAElB,QAAA,KAAK,EAAE;QALC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAIhB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAChE;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,iBAAiB,EAAE;SACpB;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,CAC9C;IACH;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAc,CAAC,EACjC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EACzF,GAAG,CAAC,MAAM,CAAC,CAAC,CACb;IACH;AACD;;ACnCD;;;;;;;;;;AAUG;AACG,SAAU,eAAe,CAC7B,MAAwB,EACxB,KAAqB,EACrB,QAAc,EACd,QAAA,GAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAEtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1E,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;ACnBO,MAAM,eAAe,GAGxB;AACF,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE;AACf,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACpB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,0FAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yCAAyC,CAAC;AACjG,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;CACzF;AAED,SAAS,oBAAoB,CAC3B,MAAwB,EACxB,KAAqB,EACrB,QAA+B,EAAA;AAE/B,IAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;IACxB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACxD;;ACpCO,MAAM,iBAAiB,GAG1B;AACF,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACtC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACpB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,0FAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yCAAyC,CAAC;AACjG,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;CAC3F;AAED,SAAS,sBAAsB,CAC7B,MAAwB,EACxB,KAAqB,EACrB,QAA+B,EAAA;AAE/B,IAAA,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE;IACjC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;AACjE;;ACvCO,MAAM,qBAAqB,GAG9B;AACF,IAAA,IAAI,EAAE,uBAAuB;AAC7B,IAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,qBAAqB,EAAE;AACrB,oBAAA,KAAK,EAAE,wBAAwB;AAC/B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChC,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC;AACxC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAiC;AACvD,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,qGAA2C,CAAC,CAAC,IAAI,CACtD,CAAC,IAAI,CAAC,CAAC,oCAAoC,CAC5C;AACH,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,0BAA0B,CAAC,MAAM,EAAE,OAAO;CAC3E;AAED,SAAS,0BAA0B,CACjC,MAAmC,EACnC,KAAqB,EAAA;AAErB,IAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,qBAAqB,EAAE,EAAE;QAChD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACvD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACjD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AACrB,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QACvB,CAAC,CAAC,CACH;IACH;SAAO;AACL,QAAA,MAAM,QAAQ,GAAG,CAAA,kBAAA,EAAqB,MAAM,CAAC,IAAI,EAAE;QACnD,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAClC;AACF;;ACjDO,MAAM,iBAAiB,GAA6D;AACzF,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AACzC,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,yBAAyB;AAChC,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC;AACzC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,sBAAsB,CAAC,OAAO,EAAE,QAAQ;CAC3E;AAED;;;;;;;AAOG;AACG,SAAU,sBAAsB,CACpC,KAAqB,EACrB,WAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;IAEtD,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC;AACzD;;MCZa,yBAAyB,CAAA;IAWpC,WAAA,CACU,KAAqB,EAC7B,QAAkB,EAAA;QADV,IAAA,CAAA,KAAK,GAAL,KAAK;QAGb,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACnE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC9D,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE;IAC7B;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,MAAM,EAAE;SACT;QAED,MAAM,sBAAsB,GAAG,MAAgC;YAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,EACzC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B;AACH,QAAA,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAgC;YACvD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CACnD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,EACzC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B;AACH,QAAA,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAgC;YACvD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CACnD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,EACzC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B;AACH,QAAA,CAAC;QAED,MAAM,oBAAoB,GAAG,MAAgC;YAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,EACjD,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B;AACH,QAAA,CAAC;AAED,QAAA,OAAO,aAAa,CAAC;AACnB,YAAA,sBAAsB,EAAE;AACxB,YAAA,gBAAgB,EAAE;AAClB,YAAA,gBAAgB,EAAE;AAClB,YAAA,oBAAoB;AACrB,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,UAAU,IAAG;YACf,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAa;AAE9D,YAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,KAAI;AACxD,gBAAA,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,MAAM;AAChE,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE;AAC3B,YAAA,OAAO,MAAM;QACf,CAAC,CAAC,CACH;IACH;AAEA,IAAA,oBAAoB,CAAC,YAAoB,EAAA;QACvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAC5E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAM,IAAqB,CAAC,IAAI,CAAC,EAC9C,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAChD;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACvE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAM,IAAe,CAAC,IAAI,CAAC,EACxC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAChD;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACvE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAM,IAAe,CAAC,IAAI,CAAC,EACxC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CACxD;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAM,IAAmB,CAAC,YAAY,CAAC,EACpD,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CACxD;QAED,OAAO,KAAK,CAAC,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC,IAAI,CACjF,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,KAAI;AACrC,YAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,YAAY,GAAG,eAAe;QAC5F,CAAC,EAAE,YAAY,CAAC,EAChB,SAAS,CAAC,YAAY,CAAC,CACxB;IACH;AACD;;ACzID;;;;;;;AAOG;AACG,SAAU,oBAAoB,CAClC,KAAqB,EACrB,WAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAEtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC/D,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;ACpBO,MAAM,iBAAiB,GAA2C;AACvE,IAAA,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,CAAC,QAAQ,CAAC;AACvB,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,qBAAqB;AAC5B,oBAAA,IAAI,EAAE;AACP;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC;AACrC,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAI;AACrB,QAAA,OAAO,oBAAoB,CAAC,OAAO,CAAC;IACtC;CACD;;AClBM,MAAM,YAAY,GAAG;AAC1B,IAAA,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;AACjF,IAAA,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;;;MCDxE,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AA6D/D,IAAA;IA3DC,MAAM,eAAe,CAAC,cAA8B,EAAA;AAClD,QAAA,MAAM,OAAO,GAAG,cAAc,EAAE,gBAAgB,EAAE,IAAI;QACtD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;QACtE;QAEA,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACb,oCAAoC,OAAO,CAAA,6DAAA,CAA+D,CAC3G;QACH;AAEA,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1D,YAAA,OAAO,IAA0B;QACnC;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,YAAY,GAAG,EAAE,YAAY,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CACb,CAAA,6CAAA,EAAgD,YAAY,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,CAAG,CACjF;QACH;IACF;AAEA,IAAA,MAAM,uBAAuB,CAC3B,cAAsC,EACtC,cAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;QAEA,MAAM,oBAAoB,GAAG,oBAAoB;QACjD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,oBAAoB,CAAC;QAEtF,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,OAAO;AAC7D,QAAA,MAAM,QAAQ,GAAG,kBAAkB,KAAK,gBAAgB,GAAG,UAAU,GAAG,cAAc;QACtF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;AAC7D,QAAA,MAAM,oBAAoB,GAAG,CAAA,EAAG,QAAQ,GAAoC;QAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,YAAY,GAAG,WAAW;QAE/D,OAAO;YACL,GAAG,gBAAgB,CAAC,IAAI;AACxB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE;gBACL,EAAE,EAAE,cAAc,CAAC,EAAE;gBACrB,IAAI,EAAE,cAAc,CAAC;AACtB,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,QAAQ;gBACR,QAAQ;gBACR;AACD;SACF;IACH;+GA9DW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;4FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCOrB,0BAA0B,CAAA;AAMrC,IAAA,WAAA,CACU,KAAqB,EACrB,MAAgC,EACxC,QAAkB,EAAA;QAFV,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,MAAM,GAAN,MAAM;QAGd,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACnE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;IACtD;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC3D,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAsB,CAAC,CAAC,CAChE;IACH;AAEA,IAAA,oBAAoB,CAAC,YAA6B,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACtD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAsB,CAAC,CAAC,EAC/D,SAAS,CAAC,YAAY,CAAC,CACxB;IACH;IAEQ,MAAM,SAAS,CAAC,cAA8B,EAAA;QACpD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;QAC3E,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,oBAAoB,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA,CAAA,CAAoC;QACxF,MAAM,kBAAkB,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA,MAAA,CAE1B;QACxB,MAAM,KAAK,GACT,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAChD,MAAM,IAAI,GAAoC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9F,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAW,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,UAAU,EAAE;YAChF,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ;QAC9C;aAAO;AACL,YAAA,OAAO,QAAQ;QACjB;IACF;IAEQ,MAAM,qBAAqB,CAAC,cAA8B,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,cAAc,CAAC;YACvF;YAAE,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;YACjC;QACF;QACA,OAAO,IAAI,CAAC,mBAAmB;IACjC;AACD;;ACjEM,MAAM,kBAAkB,GAC7B;AACE,IAAA,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,CAAC,QAAQ,CAAC;AACvB,IAAA,IAAI,EAAE;AACJ,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACtC,oBAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ;AAC1B;AACF;AACF,SAAA;AACD,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACtC,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1B,QAAA,MAAM,EAAE;AACN,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,UAAU,EAAE;AACe,SAAA;AAC7B,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,mBAAmB,EAAE,MACnB,OAAO,mGAAyC,CAAC,CAAC,IAAI,CACpD,CAAC,IAAI,CAAC,CAAC,iCAAiC,CACzC;AACH,IAAA,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,uBAAuB,CAAC,OAAO,EAAE,MAAM;CACxE;AAEG,SAAU,uBAAuB,CACrC,KAAqB,EACrB,MAAgC,EAChC,QAAA,GAAkC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA;AAEtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AACxE,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AAClD,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC;;AClCO,MAAM,gCAAgC,GAAG;IAC9C,oBAAoB;IACpB,oBAAoB;IACpB,0BAA0B;IAC1B,wBAAwB;IACxB,4BAA4B;AAC5B,IAAA,oBAAoB,CAAC;QACnB,eAAe;QACf,iBAAiB;QACjB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;QACjB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,qBAAqB;QACrB;KACD;;;ACpCH;;AAEG;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs","sources":["../../computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.ts","../../computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.html"],"sourcesContent":["import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { Observable, startWith } from 'rxjs';\nimport { ConfigurationSnapshotConfig } from './configuration-snapshot.model';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-configuration-snapshot-config',\n templateUrl: './configuration-snapshot-config.component.html',\n imports: [CoreModule, CommonModule, C8yTranslatePipe, ReactiveFormsModule],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ConfigurationSnapshotConfigComponent implements OnInit {\n @Input() config?: ConfigurationSnapshotConfig;\n formGroup: ReturnType<ConfigurationSnapshotConfigComponent['createForm']>;\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n private destroyRef = inject(DestroyRef);\n\n ngOnInit() {\n this.initForm();\n this.setupLegacyToggle();\n }\n\n onBeforeSave(\n config?: ConfigurationSnapshotConfig\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 private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n legacy: [true, [Validators.required]],\n type: ['', []]\n });\n }\n\n private setupLegacyToggle(): void {\n this.formGroup\n .get('legacy')\n ?.valueChanges.pipe(startWith(this.isLegacy), takeUntilDestroyed(this.destroyRef))\n .subscribe(isLegacy => {\n this.updateTypeControlBasedOnLegacy(isLegacy);\n });\n }\n\n private updateTypeControlBasedOnLegacy(isLegacy: boolean): void {\n const typeControl = this.formGroup.get('type');\n\n if (isLegacy) {\n typeControl?.setValue(null);\n typeControl?.clearValidators();\n typeControl?.setErrors(null);\n } else {\n typeControl?.setValidators([Validators.required]);\n }\n\n typeControl?.updateValueAndValidity();\n }\n\n get isLegacy(): boolean {\n return this.formGroup.get('legacy')?.value;\n }\n}\n","<form [formGroup]=\"formGroup\">\n <c8y-form-group class=\"m-b-8\">\n <label\n class=\"c8y-switch\"\n [title]=\"'Legacy configuration' | translate\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"legacy\"\n />\n <span></span>\n <span>{{ 'Legacy configuration' | translate }}</span>\n <span class=\"sr-only\">{{ 'Legacy configuration' | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"form-group-sm m-b-16\"\n *ngIf=\"!isLegacy\"\n >\n <label\n [title]=\"'Configuration type' | translate\"\n translate\n >\n Configuration type\n </label>\n <input\n class=\"form-control\"\n name=\"type\"\n type=\"text\"\n formControlName=\"type\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.type?.touched && formGroup?.controls?.type?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n</form>\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs","sources":["../../computed-asset-properties/event-count/event-count-config.component.ts","../../computed-asset-properties/event-count/event-count-config.component.html"],"sourcesContent":["import { Component, inject, Input, OnInit } from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n FormGroup,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\n\nimport { EventCountConfig } from './event-count.model';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'c8y-event-count-config',\n templateUrl: './event-count-config.component.html',\n imports: [CoreModule, CommonModule, C8yTranslatePipe, ReactiveFormsModule],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ComputedPropertyEventCountConfigComponent implements OnInit {\n @Input() config?: EventCountConfig;\n formGroup: FormGroup;\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n\n ngOnInit(): void {\n this.initForm();\n }\n\n onBeforeSave(config?: EventCountConfig): 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 private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n type: ['', [Validators.required]]\n });\n }\n}\n","<form class=\"row d-flex-md\" [formGroup]=\"formGroup\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-16\">\n <label\n [title]=\"'Event type' | translate\"\n translate\n >\n Event type\n </label>\n <input\n class=\"form-control\"\n name=\"type\"\n type=\"string\"\n formControlName=\"type\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: 'c8y_LocationUpdate' } }}\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.type?.touched && formGroup?.controls?.type?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n</form>\n"],"names":["i2"],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Input, Component } from '@angular/core';
3
- import * as i3 from '@angular/forms';
4
- import { FormBuilder, NgForm, Validators, ControlContainer, ReactiveFormsModule } from '@angular/forms';
5
- import * as i1 from '@c8y/ngx-components';
6
- import { CoreModule, CommonModule, C8yTranslatePipe } from '@c8y/ngx-components';
7
- import * as i3$1 from '@c8y/ngx-components/datapoint-selector';
8
- import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
9
- import { gettext } from '@c8y/ngx-components/gettext';
10
- import * as i2 from '@angular/common';
11
-
12
- const RESULT_TYPES = {
13
- VALUE: { name: 'VALUE', value: 1, label: gettext('Only value') },
14
- VALUE_UNIT: { name: 'VALUE_UNIT', value: 2, label: gettext('Value and unit') },
15
- VALUE_UNIT_TIME: { name: 'VALUE_UNIT_TIME', value: 3, label: gettext('Value, unit and time') },
16
- OBJECT: { name: 'OBJECT', value: 4, label: gettext('Complete object') }
17
- };
18
-
19
- function exactlyASingleDatapointActive() {
20
- return (control) => {
21
- const datapoints = control.value;
22
- if (!datapoints || !datapoints.length) {
23
- return null;
24
- }
25
- const activeDatapoints = datapoints.filter(datapoint => datapoint.__active);
26
- if (activeDatapoints.length === 1) {
27
- return null;
28
- }
29
- return { exactlyOneDatapointNeedsToBeActive: true };
30
- };
31
- }
32
- class ComputedPropertyLastMeasurementConfigComponent {
33
- constructor() {
34
- this.datapointSelectionConfig = {};
35
- this.formBuilder = inject(FormBuilder);
36
- this.form = inject(NgForm);
37
- this.selectedProperty = [];
38
- this.minSelectCount = 1;
39
- this.maxSelectCount = 1;
40
- this.resultTypes = RESULT_TYPES;
41
- }
42
- ngOnInit() {
43
- if (this.asset) {
44
- this.datapointSelectionConfig.contextAsset = this.asset;
45
- this.datapointSelectionConfig.allowChangingContext = false;
46
- }
47
- this.initForm();
48
- }
49
- onBeforeSave(config) {
50
- if (this.formGroup.valid) {
51
- Object.assign(config, this.formGroup.value);
52
- config.dp = config.dp.filter(d => d.__active);
53
- config.dp[0].__target = { id: config.dp[0].__target.id, name: config.dp[0].__target.name };
54
- return true;
55
- }
56
- return false;
57
- }
58
- initForm() {
59
- this.formGroup = this.createForm();
60
- this.form.form.addControl('config', this.formGroup);
61
- this.formGroup.patchValue(this.config);
62
- }
63
- createForm() {
64
- return this.formBuilder.group({
65
- resultType: [this.resultTypes.VALUE.value, [Validators.required]],
66
- dp: this.formBuilder.control(new Array(), [
67
- Validators.required,
68
- Validators.minLength(1),
69
- exactlyASingleDatapointActive()
70
- ])
71
- });
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ComputedPropertyLastMeasurementConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: ComputedPropertyLastMeasurementConfigComponent, isStandalone: true, selector: "c8y-last-measurement-config", inputs: { config: "config", asset: "asset" }, ngImport: i0, template: "\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i3$1.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle", "removeTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ComputedPropertyLastMeasurementConfigComponent, decorators: [{
77
- type: Component,
78
- args: [{ selector: 'c8y-last-measurement-config', imports: [
79
- CoreModule,
80
- DatapointSelectorModule,
81
- CommonModule,
82
- C8yTranslatePipe,
83
- ReactiveFormsModule
84
- ], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n" }]
85
- }], propDecorators: { config: [{
86
- type: Input
87
- }], asset: [{
88
- type: Input
89
- }] } });
90
-
91
- export { ComputedPropertyLastMeasurementConfigComponent, exactlyASingleDatapointActive };
92
- //# sourceMappingURL=c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs","sources":["../../computed-asset-properties/last-measurement/last-measurement.model.ts","../../computed-asset-properties/last-measurement/last-measurement-config.component.ts","../../computed-asset-properties/last-measurement/last-measurement-config.component.html"],"sourcesContent":["import { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const RESULT_TYPES = {\n VALUE: { name: 'VALUE', value: 1, label: gettext('Only value') },\n VALUE_UNIT: { name: 'VALUE_UNIT', value: 2, label: gettext('Value and unit') },\n VALUE_UNIT_TIME: { name: 'VALUE_UNIT_TIME', value: 3, label: gettext('Value, unit and time') },\n OBJECT: { name: 'OBJECT', value: 4, label: gettext('Complete object') }\n};\n\nexport type LastMeasurementConfig = {\n dp: KPIDetails[];\n resultType: number;\n};\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\nimport {\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { Observable } from 'rxjs';\nimport { LastMeasurementConfig, RESULT_TYPES } from './last-measurement.model';\n\nexport function exactlyASingleDatapointActive(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const datapoints: KPIDetails[] = control.value;\n\n if (!datapoints || !datapoints.length) {\n return null;\n }\n\n const activeDatapoints = datapoints.filter(datapoint => datapoint.__active);\n\n if (activeDatapoints.length === 1) {\n return null;\n }\n\n return { exactlyOneDatapointNeedsToBeActive: true };\n };\n}\n\n@Component({\n selector: 'c8y-last-measurement-config',\n templateUrl: './last-measurement-config.component.html',\n imports: [\n CoreModule,\n DatapointSelectorModule,\n CommonModule,\n C8yTranslatePipe,\n ReactiveFormsModule\n ],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ComputedPropertyLastMeasurementConfigComponent implements OnInit {\n @Input() config?: LastMeasurementConfig;\n @Input() asset?: IManagedObject;\n formGroup: ReturnType<ComputedPropertyLastMeasurementConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n\n selectedProperty: IManagedObject[] = [];\n minSelectCount = 1;\n maxSelectCount = 1;\n resultTypes = RESULT_TYPES;\n\n ngOnInit() {\n if (this.asset) {\n this.datapointSelectionConfig.contextAsset = this.asset;\n this.datapointSelectionConfig.allowChangingContext = false;\n }\n this.initForm();\n }\n\n onBeforeSave(config?: LastMeasurementConfig): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n config.dp = config.dp.filter(d => d.__active);\n config.dp[0].__target = { id: config.dp[0].__target.id, name: config.dp[0].__target.name };\n return true;\n }\n return false;\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n resultType: [this.resultTypes.VALUE.value, [Validators.required]],\n dp: this.formBuilder.control(new Array<KPIDetails>(), [\n Validators.required,\n Validators.minLength(1),\n exactlyASingleDatapointActive()\n ])\n });\n }\n}\n","\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n"],"names":["i3"],"mappings":"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"}