@c8y/ngx-components 1023.92.0 → 1023.96.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 (92) hide show
  1. package/ai/agents/scada/index.d.ts +10 -0
  2. package/ai/agents/scada/index.d.ts.map +1 -0
  3. package/ai/ai-chat/index.d.ts +1 -1
  4. package/ai/ai-chat/index.d.ts.map +1 -1
  5. package/computed-asset-properties/index.d.ts +89 -1
  6. package/computed-asset-properties/index.d.ts.map +1 -1
  7. package/context-dashboard/index.d.ts +18 -8
  8. package/context-dashboard/index.d.ts.map +1 -1
  9. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +2 -2
  10. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-ai-agents-scada.mjs +893 -0
  12. package/fesm2022/c8y-ngx-components-ai-agents-scada.mjs.map +1 -0
  13. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +1 -0
  14. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-asset-properties.mjs +2 -2
  16. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  17. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-Cy9R6Ixb.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-CHZX7ALq.mjs} +10 -9
  18. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-CHZX7ALq.mjs.map +1 -0
  19. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-LrmlAh6V.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-DgWGXzEx.mjs} +2 -2
  20. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-LrmlAh6V.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-DgWGXzEx.mjs.map} +1 -1
  21. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-f1u1TcCl.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-yfc45-l_.mjs} +2 -2
  22. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-f1u1TcCl.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-yfc45-l_.mjs.map} +1 -1
  23. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  24. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +44 -36
  25. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-global-context.mjs +112 -22
  27. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +292 -115
  29. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
  31. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +2 -1
  35. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs +169 -0
  37. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs.map +1 -0
  38. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
  39. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-widgets-exports.mjs +8 -1
  41. package/fesm2022/c8y-ngx-components-widgets-exports.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +3 -3
  45. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
  47. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -2
  49. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +2 -2
  51. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +90 -32
  53. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +2 -2
  55. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs +1698 -0
  57. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs.map +1 -0
  58. package/fesm2022/c8y-ngx-components.mjs +190 -40
  59. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  60. package/global-context/index.d.ts +58 -3
  61. package/global-context/index.d.ts.map +1 -1
  62. package/index.d.ts +74 -22
  63. package/index.d.ts.map +1 -1
  64. package/locales/de.po +108 -0
  65. package/locales/es.po +108 -0
  66. package/locales/fr.po +108 -0
  67. package/locales/ja_JP.po +108 -0
  68. package/locales/ko.po +108 -0
  69. package/locales/locales.pot +150 -3
  70. package/locales/nl.po +108 -0
  71. package/locales/pl.po +108 -0
  72. package/locales/pt_BR.po +108 -0
  73. package/locales/zh_CN.po +108 -0
  74. package/locales/zh_TW.po +108 -0
  75. package/package.json +1 -1
  76. package/repository/configuration/index.d.ts +64 -39
  77. package/repository/configuration/index.d.ts.map +1 -1
  78. package/widgets/cockpit-exports/index.d.ts +6 -0
  79. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  80. package/widgets/definitions/index.d.ts +1 -0
  81. package/widgets/definitions/index.d.ts.map +1 -1
  82. package/widgets/definitions/scada/index.d.ts +6 -0
  83. package/widgets/definitions/scada/index.d.ts.map +1 -0
  84. package/widgets/device-management-exports/index.d.ts +6 -0
  85. package/widgets/device-management-exports/index.d.ts.map +1 -1
  86. package/widgets/exports/index.d.ts +8 -1
  87. package/widgets/exports/index.d.ts.map +1 -1
  88. package/widgets/implementations/html-widget/index.d.ts +30 -12
  89. package/widgets/implementations/html-widget/index.d.ts.map +1 -1
  90. package/widgets/implementations/scada/index.d.ts +415 -0
  91. package/widgets/implementations/scada/index.d.ts.map +1 -0
  92. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-Cy9R6Ixb.mjs.map +0 -1
@@ -0,0 +1,415 @@
1
+ import { IIdentified, InventoryService } from '@c8y/client';
2
+ import * as _c8y_ngx_components_widgets_implementations_html_widget from '@c8y/ngx-components/widgets/implementations/html-widget';
3
+ import { HtmlWidgetConfig } from '@c8y/ngx-components/widgets/implementations/html-widget';
4
+ import * as _c8y_ngx_components_context_dashboard from '@c8y/ngx-components/context-dashboard';
5
+ import { ContextWidgetConfig, AssetPropertyMappings, WidgetConfigService, WidgetConfigSectionComponent } from '@c8y/ngx-components/context-dashboard';
6
+ import * as _c8y_ngx_components from '@c8y/ngx-components';
7
+ import { C8yPropertyType, AlertService, DropAreaComponent, DroppedFile, DynamicComponent, DashboardChildComponent, DynamicComponentAlertAggregator } from '@c8y/ngx-components';
8
+ import * as _angular_core from '@angular/core';
9
+ import { OnInit, DestroyRef, ElementRef } from '@angular/core';
10
+ import * as _c8y_ngx_components_ai from '@c8y/ngx-components/ai';
11
+ import { AIService, AgentChatConfig, AssistantMessageDisplayConfig, AIAssistantMessage, AIStreamResponse } from '@c8y/ngx-components/ai';
12
+ import * as _angular_forms from '@angular/forms';
13
+ import { FormBuilder } from '@angular/forms';
14
+ import * as rxjs from 'rxjs';
15
+ import { Subject, Observable } from 'rxjs';
16
+ import * as _c8y_ngx_components_global_context from '@c8y/ngx-components/global-context';
17
+ import { GlobalContextState, GLOBAL_CONTEXT_DISPLAY_MODE } from '@c8y/ngx-components/global-context';
18
+ import * as _c8y_ngx_components_dist_global_context from '@c8y/ngx-components/dist/global-context';
19
+ import * as _c8y_ngx_components_widgets_implementations_scada from '@c8y/ngx-components/widgets/implementations/scada';
20
+ import * as packages_client_lib from 'packages/client/lib';
21
+
22
+ declare const SCADA_WIDGET_FEATURE_FLAG_NAME = "ui.scada-widget.v2";
23
+ interface ScadaWidgetConfig extends ContextWidgetConfig {
24
+ config: {
25
+ htmlWidgetConfig: HtmlWidgetConfig;
26
+ mappings: AssetPropertyMappings;
27
+ svgDisplaySettings?: SvgDisplaySettings;
28
+ };
29
+ }
30
+ type DisplayOption = 'contain' | 'full-width';
31
+ type HorizontalAlignment = 'left' | 'center' | 'right';
32
+ type VerticalAlignment = 'top' | 'center' | 'bottom';
33
+ interface SvgDisplaySettings {
34
+ displayOption: DisplayOption;
35
+ horizontalAlignment: HorizontalAlignment;
36
+ verticalAlignment: VerticalAlignment;
37
+ }
38
+ interface SvgComputedStyling {
39
+ svgWidth: string;
40
+ svgHeight: string;
41
+ svgMaxWidth: string;
42
+ svgMaxHeight: string;
43
+ /** null means the preserveAspectRatio attribute should be removed */
44
+ preserveAspectRatio: string | null;
45
+ containerDisplay: string;
46
+ containerJustifyContent: string;
47
+ containerAlignItems: string;
48
+ containerOverflow: string;
49
+ containerHeight: string;
50
+ containerBoxSizing: string;
51
+ }
52
+ declare const defaultDisplayOption: DisplayOption;
53
+ declare const defaultAlignment = "center";
54
+ interface ScadaWidgetConfigLegacy {
55
+ binaryId: string;
56
+ sanitization: 'strict' | 'lax' | 'none';
57
+ device: Pick<IIdentified, 'id' | 'name'>;
58
+ deviceIds: {
59
+ [placeholderName: string]: string;
60
+ };
61
+ mapping: {
62
+ [placeholderName: string]: LegacyMapping;
63
+ };
64
+ }
65
+ type LegacyMapping = LegacyMappingBase | LegacyMappingComputed | LegacyMappingFieldbus;
66
+ interface LegacyMappingBase {
67
+ id: string;
68
+ keyPath: string[];
69
+ label: string;
70
+ type: C8yPropertyType;
71
+ }
72
+ interface LegacyMappingComputed extends LegacyMappingBase {
73
+ computed: true;
74
+ configSchema: object;
75
+ config: {
76
+ _id: string;
77
+ [key: string]: any;
78
+ };
79
+ }
80
+ interface LegacyMappingFieldbus {
81
+ fieldbus: true;
82
+ id: string;
83
+ keyPath: [string, string];
84
+ label: string;
85
+ }
86
+ interface ActiveAlarmsStatus {
87
+ critical: number;
88
+ major: number;
89
+ minor: number;
90
+ warning: number;
91
+ }
92
+ declare const INITIAL_SVG_CODE = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg width=\"600px\" height=\"1350px\" viewBox=\"0 0 600 1350\" xmlns=\"http://www.w3.org/2000/svg\">\n <style>\n /* Typography */\n .header {\n font-family: var(--c8y-font-family-base);\n font-size: 28px;\n font-weight: bold;\n fill: var(--text-color, var(--c8y-component-color-default, var(--c8y-root-component-color-default)));\n }\n .branded {\n fill: var(--brand-primary,var(--c8y-brand-primary));\n }\n .step-number {\n font-family: var(--c8y-font-family-base);\n font-size: 18px;\n font-weight: bold;\n fill: var(--c8y-component-background-default, var(--c8y-root-component-background-default));\n }\n .step-title {\n font-family: var(--c8y-font-family-base);\n font-size: 16px;\n font-weight: bold;\n fill: var(--text-color, var(--c8y-component-color-default, var(--c8y-root-component-color-default)));\n }\n .description {\n font-family: var(--c8y-font-family-base);\n font-size: 14px;\n }\n .placeholder {\n font-family: var(--c8y-font-family-base);\n font-size: 14px;\n fill: var(--brand-primary,var(--c8y-brand-primary));\n font-weight: bold;\n }\n .code {\n font-family: var(--c8y-font-family-mono-spaced);\n font-size: 12px;\n fill: var(--c8y-code-color);\n }\n .label {\n font-family: var(--c8y-font-family-base);\n font-size: 13px;\n fill: var(--text-color, var(--c8y-component-color-default, var(--c8y-root-component-color-default)));\n }\n \n /* Components */\n .section-bg {\n fill: var(--c8y-pre-background);\n stroke: var(--c8y-pre-border-color);\n stroke-width: 1px;\n rx: 4px;\n }\n .step-circle {\n fill: var(--brand-primary,var(--c8y-brand-primary));\n }\n .code-bg {\n fill: #0000000d;\n stroke: transparent;\n stroke-width: 1px;\n rx: 13px;\n }\n .button{\n cursor: pointer;\n }\n .button-bg {\n fill: var(--brand-primary,var(--c8y-brand-primary));\n rx: var(--c8y-btn-border-radius-base);\n stroke: var(--brand-primary,var(--c8y-brand-primary));\n stroke-width: 1px;\n }\n .button-text {\n font-family: inherit;\n font-size: 14px;\n fill: var(--c8y-component-background-default, var(--c8y-root-component-background-default));\n text-anchor: middle;\n }\n .button:hover .button-bg {\n fill: var(--c8y-component-background-default, var(--c8y-root-component-background-default));\n }\n .button:hover .button-text {\n fill: var(--brand-primary,var(--c8y-brand-primary));\n }\n .divider {\n stroke: var(--c8y-component-border-color, var(--c8y-root-component-border-color));\n stroke-width: 2px;\n }\n \n /* Alarm status indicators */\n .alarm-none {\n fill: var(--c8y-palette-status-success);\n }\n .alarm-warning {\n fill: var(--c8y-palette-status-info);\n }\n .alarm-minor {\n fill: var(--c8y-palette-status-warning-high);\n }\n .alarm-major {\n fill: var(--c8y-palette-status-warning);\n }\n .alarm-critical {\n fill: var(--c8y-palette-status-danger);\n }\n \n /* Conditional text colors */\n .temp-ok {\n fill: var(--c8y-palette-status-success);\n }\n .temp-warning {\n fill:var(--c8y-palette-status-danger);\n }\n </style>\n \n <!-- Background -->\n <rect width=\"600\" height=\"1400\" fill=\"var(--c8y-component-background-default, var(--c8y-root-component-background-default))\" />\n \n <!-- Header -->\n <text x=\"40\" y=\"50\" class=\"header\">SCADA widget example</text>\n \n <text x=\"40\" y=\"90\" class=\"description\">Follow these steps to customize your visualization</text>\n \n <!-- Divider -->\n <line x1=\"40\" y1=\"110\" x2=\"560\" y2=\"110\" class=\"divider\" />\n \n <!-- STEP 1: SVG configuration -->\n <circle cx=\"55\" cy=\"150\" r=\"15\" class=\"step-circle\" />\n <text x=\"55\" y=\"157\" class=\"step-number\" text-anchor=\"middle\">1</text>\n <text x=\"85\" y=\"155\" class=\"step-title\">SVG configuration</text>\n \n <text x=\"85\" y=\"180\" class=\"description\">Use \"SVG configuration\" section to upload a file, paste code, or generate with AI.</text>\n \n <!-- STEP 2: Add Placeholders -->\n <circle cx=\"55\" cy=\"230\" r=\"15\" class=\"step-circle\" />\n <text x=\"55\" y=\"237\" class=\"step-number\" text-anchor=\"middle\">2</text>\n <text x=\"85\" y=\"235\" class=\"step-title\">Add placeholders</text>\n \n <text x=\"85\" y=\"260\" class=\"description\">Click on a text or tspan element in the preview to convert it into a placeholder.</text>\n \n <rect x=\"85\" y=\"280\" width=\"475\" height=\"80\" class=\"section-bg\" />\n <text x=\"100\" y=\"305\" class=\"label\">Example - click text below to make it dynamic:</text>\n <text x=\"100\" y=\"330\" class=\"placeholder\"><tspan>Device name</tspan> (<tspan>Device ID</tspan>)</text>\n \n <!-- STEP 3: Configure Data Binding -->\n <circle cx=\"55\" cy=\"395\" r=\"15\" class=\"step-circle\" />\n <text x=\"55\" y=\"402\" class=\"step-number\" text-anchor=\"middle\">3</text>\n <text x=\"85\" y=\"400\" class=\"step-title\">Configure data binding</text>\n \n <text x=\"85\" y=\"425\" class=\"description\">Assign asset properties to placeholders in the \"Placeholder mappings\" section</text>\n <text x=\"85\" y=\"445\" class=\"description\">to see their values in the preview.</text>\n \n <!-- Example with actual placeholders -->\n <rect x=\"40\" y=\"470\" width=\"520\" height=\"120\" class=\"section-bg\" />\n <text x=\"60\" y=\"495\" class=\"label\">Examples:</text>\n \n <text x=\"60\" y=\"525\" class=\"label\">Device name:</text>\n <text x=\"180\" y=\"525\" class=\"placeholder\">${this.c8yScadaValues?.deviceName || '-'}</text>\n\n <text x=\"60\" y=\"550\" class=\"label\">Temperature:</text>\n <text x=\"180\" y=\"550\" class=\"placeholder\">${this.c8yScadaValues?.temperature || '-'} \u00B0C</text>\n\n <text x=\"60\" y=\"575\" class=\"label\">Status:</text>\n <text x=\"180\" y=\"575\" class=\"placeholder\">${this.c8yScadaValues?.status || '-'}</text>\n\n <!-- STEP 4: Advanced Customization -->\n <circle cx=\"55\" cy=\"630\" r=\"15\" class=\"step-circle\" />\n <text x=\"55\" y=\"637\" class=\"step-number\" text-anchor=\"middle\">4</text>\n <text x=\"85\" y=\"635\" class=\"step-title\">Advanced: Edit component code</text>\n\n <text x=\"85\" y=\"660\" class=\"description\">Open \"Advanced editor\" section to customize the web component directly.</text>\n \n <!-- Advanced Examples -->\n <rect x=\"40\" y=\"690\" width=\"520\" height=\"630\" class=\"section-bg\" />\n <text x=\"60\" y=\"715\" class=\"label\">Advanced examples (see implementation in the editor):</text>\n \n <!-- Example 1a: Interactive Button - Device Details -->\n <text x=\"60\" y=\"745\" class=\"description\">\u2022 Button navigating to device details:</text>\n <g class=\"button\" @click=${() => this.c8yScadaFunctions?.goToDeviceDetails(this.c8yScadaValues?.deviceId)}>\n <rect x=\"70\" y=\"755\" width=\"200\" height=\"35\" class=\"button-bg\" />\n <text x=\"170\" y=\"777\" class=\"button-text\">Go to device details</text>\n </g>\n\n <!-- Example 1b: Interactive Button - Group Details -->\n <text x=\"60\" y=\"820\" class=\"description\">\u2022 Button navigating to group details:</text>\n <g class=\"button\" @click=${() => this.c8yScadaFunctions?.goToGroupDetails(this.c8yScadaValues?.groupId)}>\n <rect x=\"70\" y=\"830\" width=\"200\" height=\"35\" class=\"button-bg\" />\n <text x=\"170\" y=\"852\" class=\"button-text\">Go to group details</text>\n </g>\n\n <!-- Example 2: Conditional Styling -->\n <text x=\"60\" y=\"895\" class=\"description\">\u2022 Conditional styling based on temperature range:</text>\n <text x=\"70\" y=\"920\" \n class=\"${(this.c8yScadaValues?.temperature >= 20 && this.c8yScadaValues?.temperature <= 30) ? 'temp-ok' : 'temp-warning'}\"\n font-size=\"14px\"\n font-weight=\"bold\">\n Green if temperature is between 20 and 30 \u00B0C, otherwise red.\n </text>\n \n <!-- Example 3: Dynamic Width Progress Bar -->\n <text x=\"60\" y=\"975\" class=\"description\">\u2022 Dynamic calculations (progress bar):</text>\n <rect x=\"70\" y=\"985\" width=\"400\" height=\"25\" class=\"code-bg\" />\n <rect x=\"70\" y=\"985\" \n width=\"${Math.min((this.c8yScadaValues?.progress || 0) * 4, 400)}\" \n height=\"25\" \n fill=\"var(--brand-primary,var(--c8y-brand-primary))\" \n rx=\"13\" />\n <text x=\"480\" y=\"1000\" class=\"label\">${this.c8yScadaValues?.progress || 0}%</text>\n \n <!-- Example 4: Alarm Status Circle -->\n <text x=\"60\" y=\"1040\" class=\"description\">\u2022 Alarm status indicator using getActiveAlarmsStatusClass():</text>\n <circle cx=\"80\" cy=\"1065\" r=\"12\" \n class=\"${this.c8yScadaFunctions?.getActiveAlarmsStatusClass ? 'alarm-' + this.c8yScadaFunctions.getActiveAlarmsStatusClass(this.c8yScadaValues?.alarmsStatus) : 'alarm-none'}\" />\n <text x=\"100\" y=\"1070\" class=\"label\">\n Alarm status:\n ${this.c8yScadaValues?.alarmsStatus?.critical > 0 ? 'CRITICAL' : this.c8yScadaValues?.alarmsStatus?.major > 0 ? 'MAJOR' : this.c8yScadaValues?.alarmsStatus?.minor > 0 ? 'MINOR' : this.c8yScadaValues?.alarmsStatus?.warning > 0 ? 'WARNING' : 'OK'}\n </text>\n \n <!-- Legend for alarm colors -->\n <text x=\"70\" y=\"1110\" class=\"label\">Alarm color legend:</text>\n <circle cx=\"80\" cy=\"1130\" r=\"8\" class=\"alarm-none\" />\n <text x=\"95\" y=\"1135\" class=\"description\">OK</text>\n \n <circle cx=\"150\" cy=\"1130\" r=\"8\" class=\"alarm-warning\" />\n <text x=\"165\" y=\"1135\" class=\"description\">Warning</text>\n \n <circle cx=\"240\" cy=\"1130\" r=\"8\" class=\"alarm-minor\" />\n <text x=\"255\" y=\"1135\" class=\"description\">Minor</text>\n \n <circle cx=\"320\" cy=\"1130\" r=\"8\" class=\"alarm-major\" />\n <text x=\"335\" y=\"1135\" class=\"description\">Major</text>\n \n <circle cx=\"400\" cy=\"1130\" r=\"8\" class=\"alarm-critical\" />\n <text x=\"415\" y=\"1135\" class=\"description\">Critical</text>\n \n <!-- Additional examples info -->\n <rect x=\"70\" y=\"1170\" width=\"460\" height=\"130\" fill=\"var(--c8y-palette-status-info-light)\" stroke=\"var(--c8y-palette-status-info)\" stroke-width=\"1\" rx=\"4\" />\n <text x=\"85\" y=\"1195\" class=\"label\" font-weight=\"bold\">\uD83D\uDCA1 Tips for advanced usage:</text>\n <text x=\"85\" y=\"1220\" class=\"description\">\u2022 Use this.c8yScadaValues to access placeholder values</text>\n <text x=\"85\" y=\"1240\" class=\"description\">\u2022 Use this.c8yScadaFunctions for navigation and utilities</text>\n <text x=\"85\" y=\"1260\" class=\"description\">\u2022 Combine template literals \\${ } with conditional logic</text>\n <text x=\"85\" y=\"1280\" class=\"description\">\u2022 Apply CSS classes dynamically for styling</text>\n</svg>\n";
93
+
94
+ declare class ScadaWidgetService {
95
+ getScadaFunctions(): {
96
+ goToGroupDetails: (groupId: IIdentified["id"]) => void;
97
+ goToDeviceDetails: (deviceId: IIdentified["id"]) => void;
98
+ getActiveAlarmsStatusClass: (activeAlarmsStatus: ActiveAlarmsStatus) => keyof ActiveAlarmsStatus | "none";
99
+ };
100
+ getSvgComputedStyling(settings: SvgDisplaySettings | null | undefined): SvgComputedStyling;
101
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScadaWidgetService, never>;
102
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ScadaWidgetService>;
103
+ }
104
+
105
+ declare class ScadaWidgetConfigService {
106
+ private readonly widgetConfigService;
107
+ private readonly widgetConfigMigration;
108
+ private readonly inventory;
109
+ private readonly inventoryBinary;
110
+ private readonly computedPropertiesService;
111
+ private readonly fieldbusService;
112
+ private readonly destroyRef;
113
+ configChanged$: Subject<ScadaWidgetConfig>;
114
+ config$: rxjs.Observable<ScadaWidgetConfig | (ScadaWidgetConfig & GlobalContextState)>;
115
+ constructor();
116
+ initializeConfig(config: ContextWidgetConfig | null): Promise<ScadaWidgetConfig & GlobalContextState>;
117
+ save(config: ScadaWidgetConfig): void;
118
+ updateConfigWithSvgFile(config: ScadaWidgetConfig, svgFile: File): Promise<ScadaWidgetConfig>;
119
+ updateConfigWithSvgCode(config: ScadaWidgetConfig, originalSvgCode: string): Promise<ScadaWidgetConfig>;
120
+ extractTagContent(text: string, tagName: string): string | undefined;
121
+ applySvgCode(code: string): Promise<void>;
122
+ applyMappings(mappings: string): Promise<void>;
123
+ applyScadaOutput(content: string): Promise<void>;
124
+ /**
125
+ * Safely parses an SVG string containing Lit expressions, allows DOM editing, and returns the edited SVG string.
126
+ * Handles escaping/unescaping Lit syntax and expressions.
127
+ *
128
+ * @param svg The SVG string to process.
129
+ * @param editFn A function that receives the parsed SVG document for editing.
130
+ * @returns The edited SVG string, or throws an exception if parsing or editing failed.
131
+ */
132
+ editSafelySvgWithLitExpressions(svg: string, editFn: (doc: Document) => Promise<void>): Promise<string>;
133
+ updateMappings(config: ScadaWidgetConfig): void;
134
+ /**
135
+ * Removes hardcoded width and height attributes from the root SVG element.
136
+ *
137
+ * @param svg The SVG string to process.
138
+ * @returns The modified SVG string with width and height attributes removed from the root SVG element.
139
+ */
140
+ private removeHardcodedSvgDimensions;
141
+ /**
142
+ * Processes an SVG string to identify and mark potential text placeholders within `<text>` and `<tspan>` elements.
143
+ *
144
+ * This method performs the following steps:
145
+ * 1. Escapes Lit syntax event bindings (e.g., `@click=${...}`) to avoid XML parsing issues.
146
+ * 2. Parses the SVG string into a DOM structure.
147
+ * 3. For each `<text>` and `<tspan>` element:
148
+ * - Adds a unique `id` attribute if not already present.
149
+ * - Adds the CSS class `potential-placeholder` if the element's text content does not already contain a placeholder expression (`this.c8yScadaValues?.`).
150
+ * 4. Serializes the DOM back to an SVG string and restores the original Lit syntax.
151
+ *
152
+ * If parsing fails (e.g., due to unhandled Lit syntax), the original SVG string is returned unchanged.
153
+ *
154
+ * @param svg The SVG string to process.
155
+ * @returns The modified SVG string with potential placeholders marked, or the original SVG if parsing fails.
156
+ */
157
+ private findAndAddMarkupForPotentialTextPlaceholders;
158
+ /**
159
+ * Replaces `{{ key }}` placeholders with new template syntax `${this.c8yScadaValues?.key}`.
160
+ *
161
+ * @param svgCode The SVG code string with placeholders.
162
+ * @returns The SVG code string with new template syntax.
163
+ */
164
+ private replacePlaceholdersWithTemplateSyntax;
165
+ /**
166
+ * Extracts placeholder keys used in the template syntax (`${this.c8yScadaValues?.key}`)
167
+ * from the provided SVG code string.
168
+ *
169
+ * @param svgCode The SVG code string containing template syntax placeholders.
170
+ * @returns Array of unique placeholder keys.
171
+ */
172
+ private extractScadaKeys;
173
+ /**
174
+ * Extracts placeholder keys used in the legacy template syntax (`{{ key }}`)
175
+ * from the provided SVG code string.
176
+ *
177
+ * @param svgCode The SVG code string containing legacy template syntax placeholders.
178
+ * @returns Array of unique placeholder keys.
179
+ */
180
+ private extractLegacyScadaKeys;
181
+ private migrateConfigIfNeeded;
182
+ private migrateGlobalContextConfig;
183
+ private migrateFromLegacyBinary;
184
+ private migrateProperty;
185
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScadaWidgetConfigService, never>;
186
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ScadaWidgetConfigService>;
187
+ }
188
+
189
+ declare class ScadaWidgetSvgSelectorComponent implements OnInit {
190
+ widgetConfigService: WidgetConfigService;
191
+ scadaConfigService: ScadaWidgetConfigService;
192
+ sectionComponent: WidgetConfigSectionComponent;
193
+ inventoryService: InventoryService;
194
+ alertService: AlertService;
195
+ aiService: AIService;
196
+ formBuilder: FormBuilder;
197
+ destroyRef: DestroyRef;
198
+ formGroup: _angular_forms.FormGroup<{
199
+ source: _angular_forms.FormControl<"file" | "text" | "ai">;
200
+ svgCode: _angular_forms.FormControl<string>;
201
+ svgDisplaySettings: _angular_forms.FormGroup<{
202
+ displayOption: _angular_forms.FormControl<"contain" | "full-width">;
203
+ horizontalAlignment: _angular_forms.FormControl<string>;
204
+ verticalAlignment: _angular_forms.FormControl<string>;
205
+ }>;
206
+ }>;
207
+ dropArea: _angular_core.Signal<DropAreaComponent>;
208
+ placeholderText: string;
209
+ displayOptions: ({
210
+ label: "Full width`image fitting option`";
211
+ value: string;
212
+ description: "The image is resized to fit the widget's width while preserving the aspect ratio. Overflowing area is scrollable.";
213
+ } | {
214
+ label: "Contain`verb, image fitting option`";
215
+ value: string;
216
+ description: "The image is entirely displayed within the widget while preserving the aspect ratio.";
217
+ })[];
218
+ horizontalAlignmentOptions: ({
219
+ label: "left`horizontal alignment`";
220
+ value: string;
221
+ } | {
222
+ label: "center`horizontal alignment`";
223
+ value: string;
224
+ } | {
225
+ label: "right`horizontal alignment`";
226
+ value: string;
227
+ })[];
228
+ verticalAlignmentOptions: ({
229
+ label: "top`vertical alignment`";
230
+ value: string;
231
+ } | {
232
+ label: "center`vertical alignment`";
233
+ value: string;
234
+ } | {
235
+ label: "bottom`vertical alignment`";
236
+ value: string;
237
+ })[];
238
+ isAiAvailable: _angular_core.WritableSignal<boolean>;
239
+ aiInitialized: boolean;
240
+ chatConfig: Partial<AgentChatConfig>;
241
+ agent: _c8y_ngx_components_ai.ClientAgentDefinition;
242
+ variables: {
243
+ c8yContext: any;
244
+ c8yContextMeasurements: any;
245
+ };
246
+ suggestions: ({
247
+ label: "Analyze and suggest";
248
+ prompt: string;
249
+ } | {
250
+ label: "Best guess";
251
+ prompt: string;
252
+ })[];
253
+ assistantMessageDisplayConfig: AssistantMessageDisplayConfig;
254
+ readonly preprocessAgentMessage: (message: AIAssistantMessage, changedPart: AIStreamResponse["changedPart"]) => AIAssistantMessage;
255
+ ngOnInit(): Promise<void>;
256
+ onSvgFileDropped(event: DroppedFile[]): Promise<void>;
257
+ applySvgCode(): Promise<void>;
258
+ private initializeAI;
259
+ private applyScadaOutput;
260
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScadaWidgetSvgSelectorComponent, never>;
261
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScadaWidgetSvgSelectorComponent, "c8y-scada-widget-svg-selector", never, {}, {}, never, never, true, never>;
262
+ }
263
+
264
+ declare class ScadaWidgetAdvancedEditorComponent {
265
+ private modalService;
266
+ private destroyRef;
267
+ private alert;
268
+ widgetConfigService: WidgetConfigService;
269
+ scadaWidgetConfigService: ScadaWidgetConfigService;
270
+ config$: rxjs.Observable<_c8y_ngx_components_widgets_implementations_scada.ScadaWidgetConfig | (_c8y_ngx_components_widgets_implementations_scada.ScadaWidgetConfig & _c8y_ngx_components_dist_global_context.GlobalContextState)>;
271
+ propertyKeys$: rxjs.Observable<string[]>;
272
+ readonly PROPERTY_PREFIX = "this.c8yScadaValues";
273
+ private readonly isLegacy;
274
+ private readonly scadaWidgetPreview;
275
+ constructor();
276
+ readonly getFormattedPropertyExpressionFn: (key: string) => string;
277
+ changeCode(newCode: string): Promise<void>;
278
+ /**
279
+ * Adds a placeholder variable to a clicked SVG text or tspan element.
280
+ *
281
+ * This method handles the conversion of static text content in SVG elements into dynamic
282
+ * placeholders that can be mapped to SCADA values. It locates the SVG node in the configuration,
283
+ * prompts the user for a placeholder name, and updates both the SVG code and mappings.
284
+ *
285
+ * @param event - The event object containing the SVG Element that was clicked
286
+ * @param event.node - The SVG Element (text or tspan) that was clicked
287
+ *
288
+ * @returns A promise that resolves when the placeholder has been added and configuration saved
289
+ *
290
+ * @remarks
291
+ * - Only processes `<text>` and `<tspan>` SVG elements
292
+ * - Skips elements that already contain placeholder syntax
293
+ * - Removes the 'potential-placeholder' CSS class from the processed node
294
+ * - Generates a camelCase placeholder name from the existing text content
295
+ * - Updates the widget configuration with new placeholder and mapping
296
+ * - If user cancels the placeholder name prompt, no changes are made
297
+ */
298
+ addPlaceholder(event: {
299
+ node: Element;
300
+ }): Promise<void>;
301
+ confirmPlaceholderName(proposedName: string): Promise<string | null>;
302
+ private handleRename;
303
+ private replaceAsync;
304
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScadaWidgetAdvancedEditorComponent, never>;
305
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScadaWidgetAdvancedEditorComponent, "c8y-scada-widget-advanced-editor", never, {}, {}, never, never, true, never>;
306
+ }
307
+
308
+ declare class ScadaWidgetViewComponent implements DynamicComponent {
309
+ elementRef: ElementRef<any>;
310
+ scadaWidgetService: ScadaWidgetService;
311
+ scadaWidgetConfigService: ScadaWidgetConfigService;
312
+ config: _angular_core.InputSignal<ScadaWidgetConfig>;
313
+ private readonly contextOverride;
314
+ private readonly initializedConfig;
315
+ readonly effectiveConfig: _angular_core.Signal<{
316
+ dateTimeContext?: _c8y_ngx_components_global_context.DateTimeContext;
317
+ aggregation?: packages_client_lib.aggregationType | null;
318
+ isAutoRefreshEnabled?: boolean;
319
+ refreshInterval?: number;
320
+ refreshOption?: _c8y_ngx_components_global_context.RefreshOption;
321
+ displayMode?: `${GLOBAL_CONTEXT_DISPLAY_MODE}`;
322
+ source?: _c8y_ngx_components_global_context.GlobalContextSource;
323
+ eventSourceId?: string;
324
+ isGlobalContextReady?: boolean;
325
+ config: {
326
+ htmlWidgetConfig: _c8y_ngx_components_widgets_implementations_html_widget.HtmlWidgetConfig;
327
+ mappings: _c8y_ngx_components_context_dashboard.AssetPropertyMappings;
328
+ svgDisplaySettings?: SvgDisplaySettings;
329
+ };
330
+ settings?: _c8y_ngx_components.WidgetSettings;
331
+ displaySettings?: _c8y_ngx_components.WidgetDisplaySettings;
332
+ device?: {
333
+ id?: string | number;
334
+ name?: string;
335
+ [key: string]: any;
336
+ };
337
+ export?: (config: any) => any | Promise<any>;
338
+ import?: (config: any, dashboardData: _c8y_ngx_components_context_dashboard.DashboardMetadata) => any | Promise<any>;
339
+ }>;
340
+ svgDisplaySettings: _angular_core.Signal<SvgDisplaySettings>;
341
+ readonly htmlFrameConfig: _angular_core.Signal<{
342
+ css: string;
343
+ code: string;
344
+ options: _c8y_ngx_components_widgets_implementations_html_widget.HtmlWidgetOptions;
345
+ legacy: boolean;
346
+ devMode: boolean;
347
+ latestCodeHash?: string;
348
+ }>;
349
+ readonly device: _angular_core.Signal<{
350
+ [key: string]: any;
351
+ id?: string | number;
352
+ name?: string;
353
+ }>;
354
+ enablePotentialPlaceholders: _angular_core.InputSignal<boolean>;
355
+ potentialPlaceholderClick: _angular_core.OutputEmitterRef<{
356
+ node: Element;
357
+ }>;
358
+ private clickListenerController;
359
+ webComponentRef: Element;
360
+ legacyScopeRef: object;
361
+ private legacyElementRef?;
362
+ preview: _angular_core.InputSignal<boolean>;
363
+ private destroyRef;
364
+ private alertService;
365
+ protected readonly dashboardChild: DashboardChildComponent;
366
+ alerts: DynamicComponentAlertAggregator;
367
+ private readonly SERVER_ERROR_TEXT;
368
+ private assetPropertyMappings;
369
+ readonly realtimeControl$: Observable<boolean>;
370
+ private realtimeSubscription;
371
+ private readonly refresh$;
372
+ propertyValues$: Observable<Record<string, unknown>>;
373
+ isLoading: _angular_core.WritableSignal<boolean>;
374
+ /**
375
+ * Controls link state to global context:
376
+ * - true/undefined: Widget follows global time context
377
+ * - false: Widget uses local state, ignores global changes
378
+ * Set to false when user is interacting (scrolling, zooming) to prevent interruption
379
+ */
380
+ isLinkedToGlobal: _angular_core.WritableSignal<boolean>;
381
+ readonly GLOBAL_CONTEXT_DISPLAY_MODE: typeof GLOBAL_CONTEXT_DISPLAY_MODE;
382
+ readonly PRESET_NAME: {
383
+ readonly DEFAULT: "default";
384
+ readonly LIFETIME_LIST: "lifetimeList";
385
+ readonly DATA_TABLE: "dataTable";
386
+ readonly DATA_TABLE_CONFIG: "dataTableConfig";
387
+ readonly LIVE_ONLY: "liveOnly";
388
+ readonly AUTO_REFRESH_ONLY: "autoRefreshOnly";
389
+ readonly AUTO_REFRESH_ONLY_CONFIG: "autoRefreshOnlyConfig";
390
+ readonly HISTORY_ONLY: "historyOnly";
391
+ readonly LIFETIME_LIST_CONFIG: "lifetimeListConfig";
392
+ readonly DATAPOINTS_GRAPH: "datapointsGraph";
393
+ readonly DATAPOINTS_GRAPH_CONFIG: "datapointsGraphConfig";
394
+ readonly KPI: "kpi";
395
+ readonly KPI_CONFIG: "kpiConfig";
396
+ readonly DATA_POINTS_LIST: "dataPointsList";
397
+ readonly DATA_POINTS_LIST_CONFIG: "dataPointsListConfig";
398
+ };
399
+ constructor();
400
+ onContextChange(event: {
401
+ context: GlobalContextState;
402
+ diff: GlobalContextState;
403
+ }): void;
404
+ onRefresh(): void;
405
+ private initializeHtmlWidget;
406
+ private applyLegacySvgStyling;
407
+ private setupRealtimeSubscription;
408
+ private handleFetchError;
409
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScadaWidgetViewComponent, never>;
410
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScadaWidgetViewComponent, "c8y-scada-widget-view", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "enablePotentialPlaceholders": { "alias": "enablePotentialPlaceholders"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; }, { "potentialPlaceholderClick": "potentialPlaceholderClick"; }, never, never, true, never>;
411
+ }
412
+
413
+ export { INITIAL_SVG_CODE, SCADA_WIDGET_FEATURE_FLAG_NAME, ScadaWidgetAdvancedEditorComponent, ScadaWidgetConfigService, ScadaWidgetService, ScadaWidgetSvgSelectorComponent, ScadaWidgetViewComponent, defaultAlignment, defaultDisplayOption };
414
+ export type { ActiveAlarmsStatus, DisplayOption, HorizontalAlignment, LegacyMapping, LegacyMappingBase, LegacyMappingComputed, LegacyMappingFieldbus, ScadaWidgetConfig, ScadaWidgetConfigLegacy, SvgComputedStyling, SvgDisplaySettings, VerticalAlignment };
415
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sources":["../../../../widgets/implementations/scada/scada-widget-config/scada.model.ts","../../../../widgets/implementations/scada/scada-widget.service.ts","../../../../widgets/implementations/scada/scada-widget-config/scada-widget-config.service.ts","../../../../widgets/implementations/scada/scada-widget-config/scada-widget-svg-selector.component.ts","../../../../widgets/implementations/scada/scada-widget-config/scada-widget-advanced-editor.component.ts","../../../../widgets/implementations/scada/scada-widget-view/scada-widget-view.component.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKA;AAEM;AACJ;;;;;AAKD;;AAGK;AACA;;;;;AAML;;;;;;;AAQC;;;;;;;AAOD;AAED;AACA;;;AAME;;AAEA;AAAa;;AACb;AAAW;;AACZ;AAEK;;;;;;AAOL;AAEK;;;AAGJ;;AAEE;;AAEH;;;;AAKC;;AAED;;;;;;AAOA;AAED;;AC1EA;;;;AAW4B;;;;;AAoE3B;;ACnDD;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAYM;;AAiBA;AAWA;;;;;AAwEN;;;;;;;AAOG;;;AAiDH;;;;;AAKG;;AAWH;;;;;;;;;;;;;;;AAeG;;AA4BH;;;;;AAKG;AACH;AAIA;;;;;;AAMG;AACH;AAeA;;;;;;AAMG;AACH;;AA0BA;;;;;AAuID;;AC3aD;AAiBE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASG;AACH;AACA;;;;;;;;;AAgBE;;;;;;;;;;AAKA;;;;;;;;;;AAKA;AAEF;AACA;AACA;AAMA;;;;AAIE;;;;;;;AAYA;;AAiBF;AAgEM;AAsCA;;;;;;AAqDP;;ACrRD;;;;AAWE;AACA;AACA;AACA;;AAKA;AAKA;;AAkBA;;AAgBA;;;;;;;;;;;;;;;;;;;AAmBG;;;AAC0C;;;;;;AAuF9C;;AC5ID;AASE;AACA;AACA;AAEA;AACA;AACA;AAYA;;;;;;;;;;;;;;;;;;;;;;;;AAGG;AACH;AACA;;;;;;;AAGG;AACH;;;;AAAyE;AACzE;;;AACwD;;;;;AAMxD;;;AAIA;AACA;AACA;;;;AAMA;AAKA;AAgBA;AACA;;;;;AAKG;AACH;;AAGA;;;;;;;;;;;;;;;;AAAmC;;;;;AA0B6C;AAKhF;AAKA;AA6BA;AA2BA;AA2CA;;;AASD;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-Cy9R6Ixb.mjs","sources":["../../computed-asset-properties/last-measurement/last-measurement.model.ts","../../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 { 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 const DEFAULT_DECIMAL_PLACES = 2;\n\nexport type LastMeasurementConfig = {\n dp: KPIDetails[];\n resultType: number;\n numberOfDecimalPlaces?: number;\n};\n","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 {\n DEFAULT_DECIMAL_PLACES,\n LastMeasurementConfig\n} 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 const decimalPlaces = this.config?.numberOfDecimalPlaces ?? DEFAULT_DECIMAL_PLACES;\n const value = this.formatValue(measurement[fragment][series].value, decimalPlaces);\n\n if (resultType === 1) {\n return value;\n } else if (resultType === 2) {\n return 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} | ${value} ${measurement[fragment][series].unit}`;\n } else if (resultType === 4) {\n return { ...measurement[fragment][series], value: parseFloat(value).toFixed(decimalPlaces) };\n }\n return '';\n }\n\n private formatValue(value: number | string, decimalPlaces: number): string {\n const numericValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numericValue)) {\n return String(value);\n }\n return numericValue.toFixed(decimalPlaces);\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":["RESULT_TYPES"],"mappings":";;;;;;;;;AAGO,MAAMA,cAAY,GAAG;AAC1B,IAAA,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE;AAChE,IAAA,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE;AAC9E,IAAA,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,EAAE;AAC9F,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;;AAGhE,MAAM,sBAAsB,GAAG;;MCCzB,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;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,qBAAqB,IAAI,sBAAsB;AAClF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC;AAElF,QAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,KAAK;QACd;AAAO,aAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,KAAK,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;QACzD;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;AACnF,YAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QACnE;AAAO,aAAA,IAAI,UAAU,KAAK,CAAC,EAAE;YAC3B,OAAO,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC9F;AACA,QAAA,OAAO,EAAE;IACX;IAEQ,WAAW,CAAC,KAAsB,EAAE,aAAqB,EAAA;AAC/D,QAAA,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;AAC1E,QAAA,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;AACvB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;AACA,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5C;AACD;;ACvED;;;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;;;;"}